[llvm] 17f2ee8 - [RISCV][SLP] Add test coverage for stores of constants

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 27 07:53:53 PDT 2022


Author: Philip Reames
Date: 2022-09-27T07:53:33-07:00
New Revision: 17f2ee804a3c50f0b50d57a0100ce9f4102bfa3f

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

LOG: [RISCV][SLP] Add test coverage for stores of constants

Added: 
    

Modified: 
    llvm/test/Transforms/SLPVectorizer/RISCV/load-store.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SLPVectorizer/RISCV/load-store.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/load-store.ll
index 4ae3c2f44f221..324fad5e829be 100644
--- a/llvm/test/Transforms/SLPVectorizer/RISCV/load-store.ll
+++ b/llvm/test/Transforms/SLPVectorizer/RISCV/load-store.ll
@@ -67,8 +67,8 @@ entry:
 }
 
 
-define void @splat_store(ptr %dest, ptr %p) {
-; CHECK-LABEL: @splat_store(
+define void @splat_store_i16(ptr %dest, ptr %p) {
+; CHECK-LABEL: @splat_store_i16(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[E0:%.*]] = load i16, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    store i16 [[E0]], ptr [[DEST:%.*]], align 4
@@ -76,7 +76,7 @@ define void @splat_store(ptr %dest, ptr %p) {
 ; CHECK-NEXT:    store i16 [[E0]], ptr [[INC2]], align 2
 ; CHECK-NEXT:    ret void
 ;
-; DEFAULT-LABEL: @splat_store(
+; DEFAULT-LABEL: @splat_store_i16(
 ; DEFAULT-NEXT:  entry:
 ; DEFAULT-NEXT:    [[E0:%.*]] = load i16, ptr [[P:%.*]], align 4
 ; DEFAULT-NEXT:    store i16 [[E0]], ptr [[DEST:%.*]], align 4
@@ -93,3 +93,184 @@ entry:
   ret void
 }
 
+define void @splat_store_i64(ptr %dest, ptr %p) {
+; CHECK-LABEL: @splat_store_i64(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[E0:%.*]] = load i64, ptr [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[E0]], ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1
+; CHECK-NEXT:    store i64 [[E0]], ptr [[INC2]], align 2
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @splat_store_i64(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    [[E0:%.*]] = load i64, ptr [[P:%.*]], align 4
+; DEFAULT-NEXT:    store i64 [[E0]], ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i64 [[E0]], ptr [[INC2]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  %e0 = load i64, ptr %p, align 4
+
+  store i64 %e0, ptr %dest, align 4
+  %inc2 = getelementptr inbounds i64, ptr %dest, i64 1
+  store i64 %e0, ptr %inc2, align 2
+  ret void
+}
+
+define void @splat_store_i64_zero(ptr %dest) {
+; CHECK-LABEL: @splat_store_i64_zero(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store i64 0, ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1
+; CHECK-NEXT:    store i64 0, ptr [[INC2]], align 2
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @splat_store_i64_zero(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    store i64 0, ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i64 0, ptr [[INC2]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  store i64 0, ptr %dest, align 4
+  %inc2 = getelementptr inbounds i64, ptr %dest, i64 1
+  store i64 0, ptr %inc2, align 2
+  ret void
+}
+
+define void @splat_store_i64_one(ptr %dest) {
+; CHECK-LABEL: @splat_store_i64_one(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store i64 1, ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1
+; CHECK-NEXT:    store i64 1, ptr [[INC2]], align 2
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @splat_store_i64_one(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    store i64 1, ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i64 1, ptr [[INC2]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  store i64 1, ptr %dest, align 4
+  %inc2 = getelementptr inbounds i64, ptr %dest, i64 1
+  store i64 1, ptr %inc2, align 2
+  ret void
+}
+
+define void @splat_store_i32_zero(ptr %dest) {
+; CHECK-LABEL: @splat_store_i32_zero(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store <4 x i32> zeroinitializer, ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @splat_store_i32_zero(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i32 0, ptr [[INC1]], align 2
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2
+; DEFAULT-NEXT:    store i32 0, ptr [[INC2]], align 2
+; DEFAULT-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3
+; DEFAULT-NEXT:    store i32 0, ptr [[INC3]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  store i32 0, ptr %dest, align 4
+  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1
+  store i32 0, ptr %inc1, align 2
+  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2
+  store i32 0, ptr %inc2, align 2
+  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3
+  store i32 0, ptr %inc3, align 2
+  ret void
+}
+
+define void @splat_store_i32_one(ptr %dest) {
+; CHECK-LABEL: @splat_store_i32_one(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @splat_store_i32_one(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    store i32 1, ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i32 1, ptr [[INC1]], align 2
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2
+; DEFAULT-NEXT:    store i32 1, ptr [[INC2]], align 2
+; DEFAULT-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3
+; DEFAULT-NEXT:    store i32 1, ptr [[INC3]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  store i32 1, ptr %dest, align 4
+  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1
+  store i32 1, ptr %inc1, align 2
+  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2
+  store i32 1, ptr %inc2, align 2
+  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3
+  store i32 1, ptr %inc3, align 2
+  ret void
+}
+
+define void @store_stepvector_i32(ptr %dest) {
+; CHECK-LABEL: @store_stepvector_i32(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @store_stepvector_i32(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i32 1, ptr [[INC1]], align 2
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2
+; DEFAULT-NEXT:    store i32 2, ptr [[INC2]], align 2
+; DEFAULT-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3
+; DEFAULT-NEXT:    store i32 3, ptr [[INC3]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  store i32 0, ptr %dest, align 4
+  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1
+  store i32 1, ptr %inc1, align 2
+  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2
+  store i32 2, ptr %inc2, align 2
+  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3
+  store i32 3, ptr %inc3, align 2
+  ret void
+}
+
+define void @store_arbitrary_constant_i32(ptr %dest) {
+; CHECK-LABEL: @store_arbitrary_constant_i32(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store <4 x i32> <i32 0, i32 -33, i32 44, i32 77>, ptr [[DEST:%.*]], align 4
+; CHECK-NEXT:    ret void
+;
+; DEFAULT-LABEL: @store_arbitrary_constant_i32(
+; DEFAULT-NEXT:  entry:
+; DEFAULT-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4
+; DEFAULT-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1
+; DEFAULT-NEXT:    store i32 -33, ptr [[INC1]], align 2
+; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2
+; DEFAULT-NEXT:    store i32 44, ptr [[INC2]], align 2
+; DEFAULT-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3
+; DEFAULT-NEXT:    store i32 77, ptr [[INC3]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  store i32 0, ptr %dest, align 4
+  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1
+  store i32 -33, ptr %inc1, align 2
+  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2
+  store i32 44, ptr %inc2, align 2
+  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3
+  store i32 77, ptr %inc3, align 2
+  ret void
+}


        


More information about the llvm-commits mailing list