[llvm] 87d13b8 - [Attributor][NFC] Precommit vector write range tests

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 5 16:53:55 PDT 2023


Author: Johannes Doerfert
Date: 2023-06-05T16:53:45-07:00
New Revision: 87d13b877617e8c17e04bbe3babb9362ac0e4507

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

LOG: [Attributor][NFC] Precommit vector write range tests

Added: 
    

Modified: 
    llvm/test/Transforms/Attributor/value-simplify-pointer-info-vec.ll
    llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/Attributor/value-simplify-pointer-info-vec.ll b/llvm/test/Transforms/Attributor/value-simplify-pointer-info-vec.ll
index 37c68e1255f4d..f05a6f5028fbb 100644
--- a/llvm/test/Transforms/Attributor/value-simplify-pointer-info-vec.ll
+++ b/llvm/test/Transforms/Attributor/value-simplify-pointer-info-vec.ll
@@ -55,6 +55,73 @@ define i32 @vec_write_2() {
   %add = add i32 %l1, %l2
   ret i32 %add
 }
+define i32 @vec_write_3() {
+; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
+; CHECK-LABEL: define {{[^@]+}}@vec_write_3
+; CHECK-SAME: () #[[ATTR0]] {
+; CHECK-NEXT:    [[A:%.*]] = alloca <4 x i32>, align 16
+; CHECK-NEXT:    store <2 x i32> <i32 3, i32 3>, ptr [[A]], align 16
+; CHECK-NEXT:    [[G:%.*]] = getelementptr i32, ptr [[A]], i64 1
+; CHECK-NEXT:    store <2 x i32> <i32 5, i32 5>, ptr [[G]], align 8
+; CHECK-NEXT:    [[J:%.*]] = getelementptr i32, ptr [[G]], i64 1
+; CHECK-NEXT:    store <2 x i32> <i32 7, i32 7>, ptr [[J]], align 8
+; CHECK-NEXT:    [[L2B:%.*]] = load i32, ptr [[G]], align 8
+; CHECK-NEXT:    [[ADD:%.*]] = add i32 3, [[L2B]]
+; CHECK-NEXT:    ret i32 [[ADD]]
+;
+  %a = alloca <4 x i32>
+  store <2 x i32> <i32 3, i32 3>, ptr %a
+  %g = getelementptr i32, ptr %a, i64 1
+  store <2 x i32> <i32 5, i32 5>, ptr %g
+  %j = getelementptr i32, ptr %g, i64 1
+  store <2 x i32> <i32 7, i32 7>, ptr %j
+  %l1B = load i32, ptr %a
+  %l2B = load i32, ptr %g
+  %add = add i32 %l1B, %l2B
+  ret i32 %add
+}
+define i32 @vec_write_4() {
+; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
+; CHECK-LABEL: define {{[^@]+}}@vec_write_4
+; CHECK-SAME: () #[[ATTR0]] {
+; CHECK-NEXT:    ret i32 13
+;
+  %a = alloca <4 x i32>
+  store i32 3, ptr %a
+  %g = getelementptr i32, ptr %a, i64 1
+  store <2 x i32> <i32 5, i32 5>, ptr %g
+  %j = getelementptr i32, ptr %g, i64 1
+  %l1B = load i32, ptr %a
+  %l2B = load i32, ptr %g
+  %l3B = load i32, ptr %j
+  %add1 = add i32 %l1B, %l2B
+  %add2 = add i32 %l3B, %add1
+  ret i32 %add2
+}
+define i32 @vec_write_5(i32 %arg) {
+; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
+; CHECK-LABEL: define {{[^@]+}}@vec_write_5
+; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[A:%.*]] = alloca <4 x i32>, align 16
+; CHECK-NEXT:    store i32 [[ARG]], ptr [[A]], align 16
+; CHECK-NEXT:    [[G:%.*]] = getelementptr i32, ptr [[A]], i64 1
+; CHECK-NEXT:    store <2 x i32> <i32 5, i32 5>, ptr [[G]], align 8
+; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[ARG]], 5
+; CHECK-NEXT:    [[ADD2:%.*]] = add i32 5, [[ADD1]]
+; CHECK-NEXT:    ret i32 [[ADD2]]
+;
+  %a = alloca <4 x i32>
+  store i32 %arg, ptr %a
+  %g = getelementptr i32, ptr %a, i64 1
+  store <2 x i32> <i32 5, i32 5>, ptr %g
+  %j = getelementptr i32, ptr %g, i64 1
+  %l1B5 = load i32, ptr %a
+  %l2B5 = load i32, ptr %g
+  %l3B5 = load i32, ptr %j
+  %add1 = add i32 %l1B5, %l2B5
+  %add2 = add i32 %l3B5, %add1
+  ret i32 %add2
+}
 ;.
 ; CHECK: attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll b/llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
index c9bbd5612e61a..9822c47a91007 100644
--- a/llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
+++ b/llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
@@ -16,6 +16,8 @@
 @GI2 = internal global i32 undef, align 4
 @Gs1 = internal global %struct.S undef, align 4
 @Gs2 = internal global %struct.S zeroinitializer, align 4
+ at Vs1 = internal global %struct.S undef, align 4
+ at Vs2 = internal global %struct.S undef, align 4
 @GBytes = internal global [1024 x i8] zeroinitializer, align 16
 @Flag0 = global i32 0, align 4
 @Flag1 = internal global i32 undef, align 4
@@ -42,6 +44,8 @@
 ; CHECK: @[[GI2:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 undef, align 4
 ; CHECK: @[[GS1:[a-zA-Z0-9_$"\\.-]+]] = internal global [[STRUCT_S:%.*]] undef, align 4
 ; CHECK: @[[GS2:[a-zA-Z0-9_$"\\.-]+]] = internal global [[STRUCT_S:%.*]] zeroinitializer, align 4
+; CHECK: @[[VS1:[a-zA-Z0-9_$"\\.-]+]] = internal global [[STRUCT_S:%.*]] undef, align 4
+; CHECK: @[[VS2:[a-zA-Z0-9_$"\\.-]+]] = internal global [[STRUCT_S:%.*]] undef, align 4
 ; CHECK: @[[GBYTES:[a-zA-Z0-9_$"\\.-]+]] = internal global [1024 x i8] zeroinitializer, align 16
 ; CHECK: @[[FLAG0:[a-zA-Z0-9_$"\\.-]+]] = global i32 0, align 4
 ; CHECK: @[[FLAG1:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 undef, align 4
@@ -768,6 +772,52 @@ entry:
   ret void
 }
 
+define i32 @test_range_merge1() {
+; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)
+; TUNIT-LABEL: define {{[^@]+}}@test_range_merge1
+; TUNIT-SAME: () #[[ATTR5]] {
+; TUNIT-NEXT:    ret i32 2
+;
+; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)
+; CGSCC-LABEL: define {{[^@]+}}@test_range_merge1
+; CGSCC-SAME: () #[[ATTR6:[0-9]+]] {
+; CGSCC-NEXT:    ret i32 2
+;
+  store <2 x i32> <i32 1, i32 1>, ptr @Vs1
+  store float 2.000000e+00, ptr getelementptr inbounds (%struct.S, ptr @Vs1, i64 0, i32 4)
+  %l0 = load i32, ptr getelementptr inbounds (%struct.S, ptr @Vs1, i64 0, i32 0)
+  %l1 = load i32, ptr getelementptr inbounds (%struct.S, ptr @Vs1, i64 0, i32 1)
+  %add = add i32 %l0, %l1
+  ret i32 %add
+}
+
+define i32 @test_range_merge2() {
+; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
+; TUNIT-LABEL: define {{[^@]+}}@test_range_merge2
+; TUNIT-SAME: () #[[ATTR3]] {
+; TUNIT-NEXT:    store <2 x i32> <i32 3, i32 4>, ptr @Vs2, align 8
+; TUNIT-NEXT:    [[L0:%.*]] = load i32, ptr @Vs2, align 4
+; TUNIT-NEXT:    [[L1:%.*]] = load i32, ptr getelementptr inbounds ([[STRUCT_S:%.*]], ptr @Vs2, i64 0, i32 1), align 4
+; TUNIT-NEXT:    [[ADD:%.*]] = add i32 [[L0]], [[L1]]
+; TUNIT-NEXT:    ret i32 [[ADD]]
+;
+; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
+; CGSCC-LABEL: define {{[^@]+}}@test_range_merge2
+; CGSCC-SAME: () #[[ATTR5]] {
+; CGSCC-NEXT:    store <2 x i32> <i32 3, i32 4>, ptr @Vs2, align 8
+; CGSCC-NEXT:    [[L0:%.*]] = load i32, ptr @Vs2, align 4
+; CGSCC-NEXT:    [[L1:%.*]] = load i32, ptr getelementptr inbounds ([[STRUCT_S:%.*]], ptr @Vs2, i64 0, i32 1), align 4
+; CGSCC-NEXT:    [[ADD:%.*]] = add i32 [[L0]], [[L1]]
+; CGSCC-NEXT:    ret i32 [[ADD]]
+;
+  store <2 x i32> <i32 3, i32 4>, ptr @Vs2
+  store float 2.000000e+00, ptr getelementptr inbounds (%struct.S, ptr @Vs2, i64 0, i32 4)
+  %l0 = load i32, ptr getelementptr inbounds (%struct.S, ptr @Vs2, i64 0, i32 0)
+  %l1 = load i32, ptr getelementptr inbounds (%struct.S, ptr @Vs2, i64 0, i32 1)
+  %add = add i32 %l0, %l1
+  ret i32 %add
+}
+
 ;    static char GBytes[1024];
 ;    void static_global_simplifiable_2(void) {
 ;      for (int i = 0; i < 100; ++i)
@@ -1035,7 +1085,7 @@ define i32 @static_global_simplifiable_3() {
 ;
 ; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@static_global_simplifiable_3
-; CGSCC-SAME: () #[[ATTR6:[0-9]+]] {
+; CGSCC-SAME: () #[[ATTR6]] {
 ; CGSCC-NEXT:    store i32 1, ptr @Flag3, align 4, !tbaa [[TBAA3]]
 ; CGSCC-NEXT:    ret i32 1
 ;


        


More information about the llvm-commits mailing list