[llvm] 5b1079f - [InstCombine][x86] add tests for complex vector shift value tracking; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 17 09:45:43 PDT 2021


Author: Sanjay Patel
Date: 2021-06-17T12:39:16-04:00
New Revision: 5b1079f6411b7d978550c6bf37e87674d137f1c4

URL: https://github.com/llvm/llvm-project/commit/5b1079f6411b7d978550c6bf37e87674d137f1c4
DIFF: https://github.com/llvm/llvm-project/commit/5b1079f6411b7d978550c6bf37e87674d137f1c4.diff

LOG: [InstCombine][x86] add tests for complex vector shift value tracking; NFC

https://llvm.org/PR50123

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 5f710e51e3899..73fe52f8c3284 100644
--- a/llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll
+++ b/llvm/test/Transforms/InstCombine/X86/x86-vector-shifts.ll
@@ -2762,6 +2762,40 @@ define <2 x i64> @sse2_psll_q_128_masked(<2 x i64> %v, <2 x i64> %a) {
   ret <2 x i64> %2
 }
 
+define <2 x i64> @sse2_psll_q_128_masked_bitcast(<2 x i64> %v, <2 x i64> %a) {
+; CHECK-LABEL: @sse2_psll_q_128_masked_bitcast(
+; CHECK-NEXT:    [[B:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>
+; CHECK-NEXT:    [[M:%.*]] = and <4 x i32> [[B]], <i32 31, i32 poison, i32 poison, i32 poison>
+; CHECK-NEXT:    [[I:%.*]] = insertelement <4 x i32> [[M]], i32 0, i32 1
+; CHECK-NEXT:    [[SHAMT:%.*]] = bitcast <4 x i32> [[I]] to <2 x i64>
+; CHECK-NEXT:    [[R:%.*]] = tail call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> [[V:%.*]], <2 x i64> [[SHAMT]])
+; CHECK-NEXT:    ret <2 x i64> [[R]]
+;
+  %b = bitcast <2 x i64> %a to <4 x i32>
+  %m = and <4 x i32> %b, <i32 31, i32 poison, i32 poison, i32 poison>
+  %i = insertelement <4 x i32> %m, i32 0, i32 1
+  %shamt = bitcast <4 x i32> %i to <2 x i64>
+  %r = tail call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %v, <2 x i64> %shamt) #2
+  ret <2 x i64> %r
+}
+
+define <2 x i64> @sse2_psll_q_128_masked_bitcast_overshift(<2 x i64> %v, <2 x i64> %a) {
+; CHECK-LABEL: @sse2_psll_q_128_masked_bitcast_overshift(
+; CHECK-NEXT:    [[B:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>
+; CHECK-NEXT:    [[M:%.*]] = and <4 x i32> [[B]], <i32 31, i32 poison, i32 poison, i32 poison>
+; CHECK-NEXT:    [[I:%.*]] = insertelement <4 x i32> [[M]], i32 1, i32 1
+; CHECK-NEXT:    [[SHAMT:%.*]] = bitcast <4 x i32> [[I]] to <2 x i64>
+; CHECK-NEXT:    [[R:%.*]] = tail call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> [[V:%.*]], <2 x i64> [[SHAMT]])
+; CHECK-NEXT:    ret <2 x i64> [[R]]
+;
+  %b = bitcast <2 x i64> %a to <4 x i32>
+  %m = and <4 x i32> %b, <i32 31, i32 poison, i32 poison, i32 poison>
+  %i = insertelement <4 x i32> %m, i32 1, i32 1
+  %shamt = bitcast <4 x i32> %i to <2 x i64>
+  %r = tail call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %v, <2 x i64> %shamt) #2
+  ret <2 x i64> %r
+}
+
 define <16 x i16> @avx2_psll_w_256_masked(<16 x i16> %v, <8 x i16> %a) {
 ; CHECK-LABEL: @avx2_psll_w_256_masked(
 ; CHECK-NEXT:    [[TMP1:%.*]] = and <8 x i16> [[A:%.*]], <i16 15, i16 poison, i16 poison, i16 poison, i16 poison, i16 poison, i16 poison, i16 poison>


        


More information about the llvm-commits mailing list