summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-04-29 18:40:34 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-04-29 18:40:34 +0000
commitd2a074b1f463806a2c0e6a56b950a73635350fe7 (patch)
treed43d6d9933360a03eda503b86fdc0552a2581f15 /llvm/test
parent10c4f451a8c0d96a83e31b309142f9f18e9a582d (diff)
downloadbcm5719-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.ll26
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
+}
OpenPOWER on IntegriCloud