llc:LLVM错误:无法选择:
llc:LLVM错误:无法选择:,llvm,Llvm,llc给了我以下错误: LLVM错误:无法选择:t20:i8,ch=load t0,帧索引:i16,未定义:i16 t1:i16=帧索引 t3:i16=未定义 在功能中:主 这是prg.ll文件的内容: ; ModuleID = 'new_module' define i16 @main() { entry: %x = alloca i1 store i1 true, i1* %x %0 = load i1, i1* %x %relation_op = icmp eq i1
llc
给了我以下错误:
LLVM错误:无法选择:t20:i8,ch=load t0,帧索引:i16,未定义:i16
t1:i16=帧索引
t3:i16=未定义
在功能中:主
这是prg.ll
文件的内容:
; ModuleID = 'new_module'
define i16 @main() {
entry:
%x = alloca i1
store i1 true, i1* %x
%0 = load i1, i1* %x
%relation_op = icmp eq i1 %0, true
br i1 %relation_op, label %then, label %else
then: ; preds = %entry
store i1 false, i1* %x
br label %ifcont3
else: ; preds = %entry
%1 = load i1, i1* %x
%relation_op1 = icmp eq i1 %1, false
br i1 %relation_op1, label %then2, label %ifcont
then2: ; preds = %else
store i1 true, i1* %x
br label %ifcont
ifcont: ; preds = %then2, %else
br label %ifcont3
ifcont3: ; preds = %ifcont, %then
ret i16 0
}
我不明白llc
是怎么说的。prg.ll
输出来自我的avr
自定义编译器。我在以下链接找到了avr
的LLVM后端:。到目前为止,后端工作正常。有人知道问题出在哪里吗
提前谢谢 我将编译器中的bool类型宽度从i1更改为i8(在本例中,x是bool)。这解决了我的问题。avr后端可能不支持i1或其他什么。如果问题追踪器回答了我的问题,我会发布问题追踪器的答案
问题追踪器的答案是: 一堆LLVM后端处理i1的能力很差(这是非常可悲的)。这就是为什么几乎所有前端都将bool定义为i8 不过,我肯定想解决这个问题。从外观上看,它可能是在i1操作的zext上失败的。需要做的只是在内部将i1升级为i8
考虑一下在GITHUB回购案中打开一个问题吗?是的。我希望确保我的前端生成正确的
.ll
文件。.ll
文件可能格式不正确。我不能理解这个错误。