diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2016-10-29 15:22:04 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2016-10-29 15:22:04 +0000 |
| commit | 978f827d122bad37e21081fc32fad6b7d8b6edea (patch) | |
| tree | b3f62c76797d2d70232230bccadfa9b68fc5aae0 /llvm/test | |
| parent | 75a697a17ea3084fadb83737227f36c142a3c7bb (diff) | |
| download | bcm5719-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.ll | 15 |
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> |

