[llvm] 24c2e61 - [InstCombine][X86] Add additional demandedelts style test for in-range variable per-element shift amounts (PR40391)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 18 07:37:17 PDT 2020
Author: Simon Pilgrim
Date: 2020-03-18T14:36:34Z
New Revision: 24c2e61362a3b7da7be34d4a522f504d4f48c5e4
URL: https://github.com/llvm/llvm-project/commit/24c2e61362a3b7da7be34d4a522f504d4f48c5e4
DIFF: https://github.com/llvm/llvm-project/commit/24c2e61362a3b7da7be34d4a522f504d4f48c5e4.diff
LOG: [InstCombine][X86] Add additional demandedelts style test for in-range variable per-element shift amounts (PR40391)
If we've shuffled the shift amount some of the (undemanded) elements may have become undef - this should be handled by the missing support in PR36319.
Added:
Modified:
llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll b/llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll
index 9794573fdd9e..05f65ecc1bea 100644
--- a/llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll
+++ b/llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll
@@ -2689,6 +2689,19 @@ define <4 x i32> @avx2_psrav_d_128_masked(<4 x i32> %v, <4 x i32> %a) {
ret <4 x i32> %2
}
+define <4 x i32> @avx2_psrav_d_128_masked_shuffle(<4 x i32> %v, <4 x i32> %a) {
+; CHECK-LABEL: @avx2_psrav_d_128_masked_shuffle(
+; CHECK-NEXT: [[TMP1:%.*]] = and <4 x i32> [[A:%.*]], <i32 undef, i32 undef, i32 15, i32 31>
+; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 2, i32 3>
+; CHECK-NEXT: [[TMP3:%.*]] = tail call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> [[V:%.*]], <4 x i32> [[TMP2]])
+; CHECK-NEXT: ret <4 x i32> [[TMP3]]
+;
+ %1 = and <4 x i32> %a, <i32 undef, i32 undef, i32 15, i32 31>
+ %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 2, i32 3>
+ %3 = tail call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> %v, <4 x i32> %2)
+ ret <4 x i32> %3
+}
+
define <8 x i32> @avx2_psrav_d_256_masked(<8 x i32> %v, <8 x i32> %a) {
; CHECK-LABEL: @avx2_psrav_d_256_masked(
; CHECK-NEXT: [[TMP1:%.*]] = and <8 x i32> [[A:%.*]], <i32 0, i32 1, i32 7, i32 15, i32 16, i32 30, i32 31, i32 31>
More information about the llvm-commits
mailing list