我尝试在代码中插入第35行和第36行,但是当我尝试使用llc生成.o文件时发生错误。
<ItemsControl ItemsSource="{Binding WordList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ui:NewWord>
<ui:NewWord.DataContext>
<viewModels:NewWordViewModel CorrespondingWord="{Binding}"/>
</ui:NewWord.DataContext>
</ui:NewWord>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
错误信息:
35 %12 = ptrtoint i32* %1 to i64
36 call void @__Storemy(i32 10, i64 %12)
37 store i32 %10, i32* %1
38 br label %18
这是此功能的整个IR:
Instruction does not dominate all uses!
%12 = ptrtoint i32* %1 to i64
call void @__StoreTo(i32 15, i64 %12)
Broken module found, compilation aborted!
0 libLLVM-3.4.so.1 0x00007f6d31fe25d2 llvm::sys::PrintStackTrace(_IO_FILE*) + 34
1 libLLVM-3.4.so.1 0x00007f6d31fe23c4
2 libc.so.6 0x00007f6d30a62d40
3 libc.so.6 0x00007f6d30a62cc9 gsignal + 57
4 libc.so.6 0x00007f6d30a660d8 abort + 328
5 libLLVM-3.4.so.1 0x00007f6d319d2a41
6 libLLVM-3.4.so.1 0x00007f6d319dbb03
7 libLLVM-3.4.so.1 0x00007f6d319b2f77 llvm::FPPassManager::runOnFunction(llvm::Function&) + 471
8 libLLVM-3.4.so.1 0x00007f6d319b2ffb llvm::FPPassManager::runOnModule(llvm::Module&) + 43
9 libLLVM-3.4.so.1 0x00007f6d319b54b5 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 693
10 llc 0x000000000040c0d4
11 llc 0x000000000040b150 main + 368
12 libc.so.6 0x00007f6d30a4dec5 __libc_start_main + 245
13 llc 0x000000000040b1a9
Stack dump:
0. Program arguments: llc -filetype=obj test.bc -o test.o
1. Running pass 'Function Pass Manager' on module 'test.bc'.
2. Running pass 'Module Verifier' on function '@dblfun'
我发现此代码没有任何问题,有人可以给我一些建议吗?
答案 0 :(得分:1)
您的函数的控制流图如下所示:
entry
/ \
/ \
_then _else
| |
8 13
\ /
\ /
18
%12
在块8
中定义。之后立即使用它,这很好,然后在块13
中有另一种用法,你可以从图中看到它不被8
支配(实际上它甚至不能从{{1}到达})。
在这种情况下,您应该能够将8
指令移到条目块 - 这样就可以在其他每个块中访问它。