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