summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2016-10-29 15:22:04 +0000
committerSanjay Patel <spatel@rotateright.com>2016-10-29 15:22:04 +0000
commit978f827d122bad37e21081fc32fad6b7d8b6edea (patch)
treeb3f62c76797d2d70232230bccadfa9b68fc5aae0 /llvm/test
parent75a697a17ea3084fadb83737227f36c142a3c7bb (diff)
downloadbcm5719-llvm-978f827d122bad37e21081fc32fad6b7d8b6edea.tar.gz
bcm5719-llvm-978f827d122bad37e21081fc32fad6b7d8b6edea.zip
[InstCombine] re-use bitcasted compare operands in selects (PR28001)
These mixed bitcast patterns show up with SSE/AVX intrinsics because we bitcast function parameters to <2 x i64>. The bitcasts obfuscate the expected min/max forms as shown in PR28001: https://llvm.org/bugs/show_bug.cgi?id=28001#c6 Differential Revision: https://reviews.llvm.org/D25943 llvm-svn: 285495
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/InstCombine/minmax-fold.ll15
1 files changed, 6 insertions, 9 deletions
diff --git a/llvm/test/Transforms/InstCombine/minmax-fold.ll b/llvm/test/Transforms/InstCombine/minmax-fold.ll
index 9cbaed36c85..aa1ab6df544 100644
--- a/llvm/test/Transforms/InstCombine/minmax-fold.ll
+++ b/llvm/test/Transforms/InstCombine/minmax-fold.ll
@@ -144,9 +144,8 @@ define <4 x i32> @bitcasts_fcmp_1(<2 x i64> %a, <2 x i64> %b) {
; CHECK-NEXT: [[T0:%.*]] = bitcast <2 x i64> %a to <4 x float>
; CHECK-NEXT: [[T1:%.*]] = bitcast <2 x i64> %b to <4 x float>
; CHECK-NEXT: [[T2:%.*]] = fcmp olt <4 x float> [[T1]], [[T0]]
-; CHECK-NEXT: [[T3:%.*]] = bitcast <2 x i64> %a to <4 x i32>
-; CHECK-NEXT: [[T4:%.*]] = bitcast <2 x i64> %b to <4 x i32>
-; CHECK-NEXT: [[T5:%.*]] = select <4 x i1> [[T2]], <4 x i32> [[T3]], <4 x i32> [[T4]]
+; CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[T2]], <4 x float> [[T0]], <4 x float> [[T1]]
+; CHECK-NEXT: [[T5:%.*]] = bitcast <4 x float> [[TMP1]] to <4 x i32>
; CHECK-NEXT: ret <4 x i32> [[T5]]
;
%t0 = bitcast <2 x i64> %a to <4 x float>
@@ -165,9 +164,8 @@ define <4 x i32> @bitcasts_fcmp_2(<2 x i64> %a, <2 x i64> %b) {
; CHECK-NEXT: [[T0:%.*]] = bitcast <2 x i64> %a to <4 x float>
; CHECK-NEXT: [[T1:%.*]] = bitcast <2 x i64> %b to <4 x float>
; CHECK-NEXT: [[T2:%.*]] = fcmp olt <4 x float> [[T0]], [[T1]]
-; CHECK-NEXT: [[T3:%.*]] = bitcast <2 x i64> %a to <4 x i32>
-; CHECK-NEXT: [[T4:%.*]] = bitcast <2 x i64> %b to <4 x i32>
-; CHECK-NEXT: [[T5:%.*]] = select <4 x i1> [[T2]], <4 x i32> [[T3]], <4 x i32> [[T4]]
+; CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[T2]], <4 x float> [[T0]], <4 x float> [[T1]]
+; CHECK-NEXT: [[T5:%.*]] = bitcast <4 x float> [[TMP1]] to <4 x i32>
; CHECK-NEXT: ret <4 x i32> [[T5]]
;
%t0 = bitcast <2 x i64> %a to <4 x float>
@@ -186,9 +184,8 @@ define <4 x float> @bitcasts_icmp(<2 x i64> %a, <2 x i64> %b) {
; CHECK-NEXT: [[T0:%.*]] = bitcast <2 x i64> %a to <4 x i32>
; CHECK-NEXT: [[T1:%.*]] = bitcast <2 x i64> %b to <4 x i32>
; CHECK-NEXT: [[T2:%.*]] = icmp slt <4 x i32> [[T1]], [[T0]]
-; CHECK-NEXT: [[T3:%.*]] = bitcast <2 x i64> %a to <4 x float>
-; CHECK-NEXT: [[T4:%.*]] = bitcast <2 x i64> %b to <4 x float>
-; CHECK-NEXT: [[T5:%.*]] = select <4 x i1> [[T2]], <4 x float> [[T3]], <4 x float> [[T4]]
+; CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[T2]], <4 x i32> [[T0]], <4 x i32> [[T1]]
+; CHECK-NEXT: [[T5:%.*]] = bitcast <4 x i32> [[TMP1]] to <4 x float>
; CHECK-NEXT: ret <4 x float> [[T5]]
;
%t0 = bitcast <2 x i64> %a to <4 x i32>
OpenPOWER on IntegriCloud