Test source: git
Source: <stdin>
ERROR: Unsupported type: x86_fp80
----------------------------------------
define i129 @halftoui129(half %a) {
#0:
%conv = fptoui half %a to i129
ret i129 %conv
}
=>
define i129 @halftoui129(half %a) {
#0:
%#1 = fptoui half %a to i32
%#2 = zext i32 %#1 to i129
ret i129 %#2
}
Transformation seems to be correct!
----------------------------------------
define i129 @floattoui129(float %a) {
#0:
%conv = fptoui float %a to i129
ret i129 %conv
}
=>
define i129 @floattoui129(float %a) {
fp-to-i-entry:
%#0 = bitcast float %a to i32
%#1 = zext i32 %#0 to i129
%#2 = icmp sgt i32 %#0, 4294967295
%sign = select i1 %#2, i129 1, i129 680564733841876926926749214863536422911
%#3 = lshr i129 %#1, 23
%biased.exp = and i129 %#3, 255
%#4 = and i129 %#1, 8388607
%significand = or i129 %#4, 8388608
%exp.is.negative = icmp ult i129 %biased.exp, 127
br i1 %exp.is.negative, label %fp-to-i-cleanup, label %fp-to-i-if-check.saturate
fp-to-i-if-check.saturate:
%#5 = add i129 %biased.exp, 680564733841876926926749214863536422656
%#6 = icmp ult i129 %#5, 680564733841876926926749214863536422783
br i1 %#6, label %fp-to-i-if-saturate, label %fp-to-i-if-check.exp.size
fp-to-i-if-saturate:
%saturated = select i1 %#2, i129 340282366920938463463374607431768211455, i129 340282366920938463463374607431768211456
br label %fp-to-i-cleanup
fp-to-i-if-check.exp.size:
%exp.smaller.mantissa.width = icmp ult i129 %biased.exp, 150
br i1 %exp.smaller.mantissa.width, label %fp-to-i-if-exp.small, label %fp-to-i-if-exp.large
fp-to-i-if-exp.small:
%#7 = sub i129 150, %biased.exp
%#8 = lshr i129 %significand, %#7
%#9 = mul i129 %#8, %sign
br label %fp-to-i-cleanup
fp-to-i-if-exp.large:
%#10 = add i129 %biased.exp, 680564733841876926926749214863536422762
%#11 = shl i129 %significand, %#10
%#12 = mul i129 %#11, %sign
br label %fp-to-i-cleanup
fp-to-i-cleanup:
%#13 = phi i129 [ %saturated, %fp-to-i-if-saturate ], [ %#9, %fp-to-i-if-exp.small ], [ %#12, %fp-to-i-if-exp.large ], [ 0, %fp-to-i-entry ]
ret i129 %#13
}
Transformation doesn't verify! (unsound)
ERROR: Source is more defined than target
Example:
float %a = poison
Source:
i129 %conv = poison
Target:
i32 %#0 = poison
i129 %#1 = poison
i1 %#2 = poison
i129 %sign = poison
i129 %#3 = poison
i129 %biased.exp = poison
i129 %#4 = poison
i129 %significand = poison
i1 %exp.is.negative = poison
UB triggered on br
Pass:
Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-tv' '-S' '-mtriple=x86_64--' '--expand-ir-insts' '-tv' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'
------------------- SMT STATS -------------------
Num queries: 14
Num invalid: 0
Num skips: 0
Num trivial: 3 (17.6%)
Num timeout: 0 (0.0%)
Num errors: 0 (0.0%)
Num SAT: 10 (71.4%)
Num UNSAT: 4 (28.6%)
Alive2: Transform doesn't verify; aborting!
Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll' FAILED ******************** Exit Code: 2 Command Output (stdout): -- # RUN: at line 2 /home/nlopes/alive2/build/opt-alive.sh -S -mtriple=x86_64-- --expand-ir-insts < /bitbucket/nlopes/llvm/llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll # executed command: /home/nlopes/alive2/build/opt-alive.sh -S -mtriple=x86_64-- --expand-ir-insts # .---command stderr------------ # `----------------------------- # error: command failed with exit status: 1 # executed command: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll # .---command stderr------------ # | FileCheck error: '<stdin>' is empty. # | FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll # `----------------------------- # error: command failed with exit status: 2 --