[LLVMdev] AArch64: GHC compilation issue.

Karel Gardas karel.gardas at centrum.cz
Wed Jan 8 13:02:33 PST 2014


Hello,

I'm trying to build a GHC cross-compiler on amd64/ubuntu13.10 box to 
target aarch64/ubuntu13.10. The last stage of build where the 
cross-compiler is already built and is building supporting libraries 
needed in order to compile even simples Haskell programs fails in 
LLVM/llc with following output. This is a cut of last line emitted by 
the GHC cross-compiler with verbose option switched on:

*** LLVM Optimiser:
'/export/home/karel/vcs/llvm-head/Debug+Asserts/bin/opt' 
'/tmp/ghc2615_0/ghc2615_1.ll' '-o' '/tmp/ghc2615_0/ghc2615_3.bc' '-O1' 
'--enable-tbaa=true'
*** LLVM Compiler:
'/export/home/karel/vcs/llvm-head/Debug+Asserts/bin/llc' 
'-march=aarch64' '-O2' '-relocation-model=static' 
'/tmp/ghc2615_0/ghc2615_3.bc' '-o' '/tmp/ghc2615_0/ghc2615_4.lm_s' 
'--enable-tbaa=true'
LLVM ERROR: Cannot select: 0x3705b90: i64,i64 = smul_lohi 0x3704f90, 
0x364caf0 [ORD=3056] [ID=19]
   0x3704f90: i64,ch = load 0x34297e8, 0x3704180, 
0x3650d70<LD8[%ln2YO](tbaa=<badref>)> [ORD=3055] [ID=18]
     0x3704180: i64 = add 0x364eb20, 0x3650a70 [ORD=3051] [ID=17]
       0x364eb20: i64,ch = load 0x34297e8, 0x3703570, 
0x3650d70<LD8[inttoptr (i64 add (i64 ptrtoint (i8* @MainCapability to 
i64), i64 856) to i64*)](tbaa=<badref>)> [ORD=3048] [ID=15]
         0x3703570: i64 = add 0x364c7f0, 0x364e920 [ID=14]
           0x364c7f0: i64 = AArch64ISD::WrapperSmall 0x3703f80, 
0x3703870, 0x3705490 [ID=12]
             0x3703f80: i64 = TargetGlobalAddress<i8* @MainCapability> 0 
[ID=9]
             0x3703870: i64 = TargetGlobalAddress<i8* @MainCapability> 0 
[TF=11] [ID=8]
             0x3705490: i32 = Constant<1> [ID=7]
           0x364e920: i64 = Constant<856> [ID=10]
         0x3650d70: i64 = undef [ID=1]
       0x3650a70: i64 = Constant<8> [ID=2]
     0x3650d70: i64 = undef [ID=1]
   0x364caf0: i64,ch = load 0x34297e8, 0x364eb20, 
0x3650d70<LD8[%ln2YH](tbaa=<badref>)> [ORD=3054] [ID=16]
     0x364eb20: i64,ch = load 0x34297e8, 0x3703570, 
0x3650d70<LD8[inttoptr (i64 add (i64 ptrtoint (i8* @MainCapability to 
i64), i64 856) to i64*)](tbaa=<badref>)> [ORD=3048] [ID=15]
       0x3703570: i64 = add 0x364c7f0, 0x364e920 [ID=14]
         0x364c7f0: i64 = AArch64ISD::WrapperSmall 0x3703f80, 0x3703870, 
0x3705490 [ID=12]
           0x3703f80: i64 = TargetGlobalAddress<i8* @MainCapability> 0 
[ID=9]
           0x3703870: i64 = TargetGlobalAddress<i8* @MainCapability> 0 
[TF=11] [ID=8]
           0x3705490: i32 = Constant<1> [ID=7]
         0x364e920: i64 = Constant<856> [ID=10]
       0x3650d70: i64 = undef [ID=1]
     0x3650d70: i64 = undef [ID=1]
In function: ghczmprim_GHCziPrimopWrappers_mulIntMayOflozh_entry


I've observed the same issue with LLVM 3.4 as distributed by Ubuntu 
13.10 and with LLVM HEAD compiled on January 6. I'm able to provide the 
byte-code file which results in this issue, but would first like to know 
if this is a known issue in AArch64 target support or if I shall submit 
it somewhere or even if I did some mistake in invoking llc or providing 
wrong set of options to it. It compiles to amd64 code by default so I 
added just -march=aarch64 and was in impression that it should be enough 
to target AArch64 platform... If that's wrong, please let me know.

Thanks!
Karel




More information about the llvm-dev mailing list