diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-04-29 18:40:34 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-04-29 18:40:34 +0000 |
| commit | d2a074b1f463806a2c0e6a56b950a73635350fe7 (patch) | |
| tree | d43d6d9933360a03eda503b86fdc0552a2581f15 /llvm/test | |
| parent | 10c4f451a8c0d96a83e31b309142f9f18e9a582d (diff) | |
| download | bcm5719-llvm-d2a074b1f463806a2c0e6a56b950a73635350fe7.tar.gz bcm5719-llvm-d2a074b1f463806a2c0e6a56b950a73635350fe7.zip | |
[ValueTracking] matchSelectPattern needs to be more careful around FP
matchSelectPattern attempts to see through casts which mask min/max
patterns from being more obvious. Under certain circumstances, it would
misidentify a sequence of instructions as a min/max because it assumed
that folding casts would preserve the result. This is not the case for
floating point <-> integer casts.
This fixes PR27575.
llvm-svn: 268086
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/minmax-fp.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/minmax-fp.ll b/llvm/test/Transforms/InstCombine/minmax-fp.ll index b90afe3405f..b6eb1bb6834 100644 --- a/llvm/test/Transforms/InstCombine/minmax-fp.ll +++ b/llvm/test/Transforms/InstCombine/minmax-fp.ll @@ -154,3 +154,29 @@ define i8 @t15(float %a) { %3 = select i1 %1, i8 %2, i8 0 ret i8 %3 } + +; CHECK-LABEL: @t16 +; CHECK: %[[cmp:.*]] = icmp sgt i32 %x, 0 +; CHECK: %[[cst:.*]] = sitofp i32 %x to double +; CHECK: %[[sel:.*]] = select i1 %[[cmp]], double %[[cst]], double 5.000000e-01 +; CHECK: ret double %[[sel]] +define double @t16(i32 %x) { +entry: + %cmp = icmp sgt i32 %x, 0 + %cst = sitofp i32 %x to double + %sel = select i1 %cmp, double %cst, double 5.000000e-01 + ret double %sel +} + +; CHECK-LABEL: @t17 +; CHECK: %[[cmp:.*]] = icmp sgt i32 %x, 2 +; CHECK: %[[sel:.*]] = select i1 %[[cmp]], i32 %x, i32 2 +; CHECK: %[[cst:.*]] = sitofp i32 %[[sel]] to double +; CHECK: ret double %[[cst]] +define double @t17(i32 %x) { +entry: + %cmp = icmp sgt i32 %x, 2 + %cst = sitofp i32 %x to double + %sel = select i1 %cmp, double %cst, double 2.0 + ret double %sel +} |

