测试了llvm9,llvm12 都一样的效果。
./clang12 -S -emit-llvm test.mm -mllvm -split
生成转换后的ll 是有混淆效果的。
./llc -filetype=obj test.ll -O0
生成的obj文件,切割效果,没了。
以为是MachineFunctionPass 阶段被优化掉了,一路注释MachineFunctionPass,也没看到效果,也不是链接阶段的优化,对llvm也不是太熟,希望大佬,能给点意见。谢谢了。
./llc -view-sunit-dags test.ll
*** after createPseudoProbeInserter LLVM Code input to ISel ***
; Function Attrs: noinline norecurse nounwind optnone ssp uwtable mustprogress
define dso_local i32 @main() #1 {
entry:
%retval = alloca i32, align 4
%rs = alloca i32, align 4
%a = alloca i32, align 4
%count = alloca i32, align 4
br label %entry.split
entry.split: ; preds = %entry
store i32 0, i32* %retval, align 4
%call = call i32 @_Z3addii(i32 1, i32 2)
store i32 %call, i32* %rs, align 4
store i32 0, i32* %a, align 4
%0 = load i32, i32* %a, align 4
%tobool = icmp ne i32 %0, 0
br label %entry.split.split
entry.split.split: ; preds = %entry.split
br i1 %tobool, label %if.then, label %if.else