为什么LLVM纯解释器在数组常量方面与启用JIT的解释器的执行方式不同? (LLVM 3.8.1)
我有以下代码:
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128 :128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-macosx10.9.0"
%MyType = type { i8* }
define i32 @main(i32 %argc, i8** %argv) nounwind uwtable {
%const.arr = alloca [8 x i8], align 8
store [8 x i8] c"\D0\CFT\15\01\00\00\00", [8 x i8]* %const.arr
%1 = bitcast [8 x i8]* %const.arr to %MyType*
ret i32 0
}
如果我使用llvm-as test.llvm
和lli test.llvm.bc
进行编译,则不会出现错误。
另一方面,如果我点击lli -force-interpreter test.llvm.bc
,我会收到以下错误:
LLVM ERROR: ERROR: Constant unimplemented for type: [8 x i8]
检查代码,我认为它没有任何问题。当我强制翻译时,为什么它的表现会有所不同?