[llvm] d7c85d7 - [SLP][NFC]Add a test for CSE for extractelements.

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 5 07:59:16 PDT 2022


Author: Alexey Bataev
Date: 2022-10-05T07:55:25-07:00
New Revision: d7c85d7e3403120166e1972f5229da55e5df2d83

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

LOG: [SLP][NFC]Add a test for CSE for extractelements.

Added: 
    llvm/test/Transforms/SLPVectorizer/X86/cse_extractelement.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SLPVectorizer/X86/cse_extractelement.ll b/llvm/test/Transforms/SLPVectorizer/X86/cse_extractelement.ll
new file mode 100644
index 0000000000000..e4f6ed95a6076
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/X86/cse_extractelement.ll
@@ -0,0 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -slp-vectorizer -slp-vectorize-hor -slp-vectorize-hor-store -S < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
+
+define void @test(i32* %ptr, i32* noalias %s)  {
+; CHECK-LABEL: @test(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32* [[PTR:%.*]], null
+; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP:%.*]], label [[BAIL_OUT:%.*]]
+; CHECK:       loop:
+; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[PTR]] to <4 x i32>*
+; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* [[TMP0]], align 4
+; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32* [[S:%.*]] to <4 x i32>*
+; CHECK-NEXT:    store <4 x i32> [[TMP1]], <4 x i32>* [[TMP2]], align 4
+; CHECK-NEXT:    br label [[LOOP1:%.*]]
+; CHECK:       loop1:
+; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <4 x i32> [[TMP1]], i32 0
+; CHECK-NEXT:    store i32 [[TMP3]], i32* [[S]], align 4
+; CHECK-NEXT:    br i1 true, label [[LOOP1]], label [[CONT:%.*]]
+; CHECK:       cont:
+; CHECK-NEXT:    br i1 true, label [[LOOP]], label [[BAIL_OUT]]
+; CHECK:       bail_out:
+; CHECK-NEXT:    [[DUMMY_PHI:%.*]] = phi i32 [ 1, [[ENTRY:%.*]] ], [ [[TMP3]], [[CONT]] ]
+; CHECK-NEXT:    store i32 [[DUMMY_PHI]], i32* [[S]], align 4
+; CHECK-NEXT:    ret void
+;
+entry:
+  %cmp = icmp eq i32* %ptr, null
+  br i1 %cmp, label %loop, label %bail_out
+
+loop:
+  %0 = load i32, i32 * %ptr , align 4
+  %1 = getelementptr inbounds i32, i32 * %ptr, i64 1
+  %2 = load i32, i32 * %1 , align 4
+  %3 = getelementptr inbounds i32, i32 *%ptr, i64 2
+  %4 = load i32, i32 * %3 , align 4
+  %5 = getelementptr inbounds i32, i32 *%ptr, i64 3
+  %6 = load i32, i32 * %5 , align 4
+  store i32 %0, i32* %s, align 4
+  %7 = getelementptr inbounds i32, i32 * %s, i64 1
+  store i32 %2, i32* %7, align 4
+  %8 = getelementptr inbounds i32, i32 * %s, i64 2
+  store i32 %4, i32* %8, align 4
+  %9 = getelementptr inbounds i32, i32 * %s, i64 3
+  store i32 %6, i32* %9, align 4
+  br label %loop1
+
+loop1:
+  store i32 %0, i32* %s, align 4
+  br i1 true, label %loop1, label %cont
+
+cont:
+  br i1 true, label %loop, label %bail_out
+
+bail_out:
+  %dummy_phi = phi i32 [ 1, %entry ], [ %0, %cont ]
+  store i32 %dummy_phi, i32* %s, align 4
+  ret void
+}
+


        


More information about the llvm-commits mailing list