[llvm] f436848 - [LV] Add test from PR54227.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 7 09:01:37 PST 2022


Author: Florian Hahn
Date: 2022-03-07T17:01:22Z
New Revision: f4368487aaaea43aba428eb0fc71200cbdea3c9a

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

LOG: [LV] Add test from PR54227.

Test from https://github.com/llvm/llvm-project/issues/54227.

The underlying issue has already been fixed in de8ac48 with a separate
test.

Added: 
    

Modified: 
    llvm/test/Transforms/LoopVectorize/first-order-recurrence-multiply-recurrences.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/LoopVectorize/first-order-recurrence-multiply-recurrences.ll b/llvm/test/Transforms/LoopVectorize/first-order-recurrence-multiply-recurrences.ll
index e883a4093be74..96ec9e177577c 100644
--- a/llvm/test/Transforms/LoopVectorize/first-order-recurrence-multiply-recurrences.ll
+++ b/llvm/test/Transforms/LoopVectorize/first-order-recurrence-multiply-recurrences.ll
@@ -171,3 +171,52 @@ exit:
 }
 
 declare float @llvm.fmuladd.f32(float, float, float) #1
+
+define void @test_pr54227(i32* noalias %a, i32* noalias %b) {
+; CHECK-LABEL: @test_pr54227(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[LOOP:%.*]]
+; CHECK:       loop:
+; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[AND17:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[AND1:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[F_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[MUL:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[E_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[AND:%.*]] = and i32 [[AND17]], 255
+; CHECK-NEXT:    [[OR:%.*]] = or i32 [[AND]], [[E_0]]
+; CHECK-NEXT:    [[AND1]] = and i32 [[E_0]], [[F_0]]
+; CHECK-NEXT:    [[MUL]] = shl nsw i32 [[OR]], 1
+; CHECK-NEXT:    [[ADD]] = or i32 [[AND1]], 1
+; CHECK-NEXT:    [[A_GEP:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[IV]]
+; CHECK-NEXT:    store i32 [[ADD]], i32* [[A_GEP]], align 4
+; CHECK-NEXT:    [[B_GEP:%.*]] = getelementptr inbounds i32, i32* [[A]], i64 [[IV]]
+; CHECK-NEXT:    store i32 [[MUL]], i32* [[B_GEP]], align 4
+; CHECK-NEXT:    [[IV_NEXT]] = add nuw i64 [[IV]], 1
+; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i64 [[IV]], 1000
+; CHECK-NEXT:    br i1 [[EXITCOND]], label [[EXIT:%.*]], label [[LOOP]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret void
+;
+entry:
+  br label %loop
+
+loop:
+  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
+  %and17 = phi i32 [ 0, %entry ], [ %and1, %loop ]
+  %f.0 = phi i32 [ 0, %entry ], [ %mul, %loop ]
+  %e.0 = phi i32 [ 0, %entry ], [ %add, %loop ]
+  %and = and i32 %and17, 255
+  %or = or i32 %and, %e.0
+  %and1 = and i32 %e.0, %f.0
+  %mul = shl nsw i32 %or, 1
+  %add = or i32 %and1, 1
+  %a.gep = getelementptr inbounds i32, i32* %a, i64 %iv
+  store i32 %add, i32* %a.gep, align 4
+  %b.gep = getelementptr inbounds i32, i32* %a, i64 %iv
+  store i32 %mul, i32* %b.gep, align 4
+  %iv.next = add nuw i64 %iv, 1
+  %exitcond = icmp eq i64 %iv, 1000
+  br i1 %exitcond, label %exit, label %loop
+
+exit:
+  ret void
+}


        


More information about the llvm-commits mailing list