[llvm] 473bb59 - [LoopVersioning] Add tests where versioning requires LAA invalidation.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 24 12:34:25 PDT 2022
Author: Florian Hahn
Date: 2022-09-24T20:33:49+01:00
New Revision: 473bb59a2f30ccb246e3ad831b85e501a4bfc725
URL: https://github.com/llvm/llvm-project/commit/473bb59a2f30ccb246e3ad831b85e501a4bfc725
DIFF: https://github.com/llvm/llvm-project/commit/473bb59a2f30ccb246e3ad831b85e501a4bfc725.diff
LOG: [LoopVersioning] Add tests where versioning requires LAA invalidation.
Additional test cases for #57825.
Added:
llvm/test/Transforms/LoopLoadElim/invalidate-laa-after-versioning.ll
llvm/test/Transforms/LoopVersioning/invalidate-laa-after-versioning.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/LoopLoadElim/invalidate-laa-after-versioning.ll b/llvm/test/Transforms/LoopLoadElim/invalidate-laa-after-versioning.ll
new file mode 100644
index 0000000000000..4e3d63d84d97a
--- /dev/null
+++ b/llvm/test/Transforms/LoopLoadElim/invalidate-laa-after-versioning.ll
@@ -0,0 +1,65 @@
+; RUN: opt -passes='loop-vectorize,loop-load-elim' %s | FileCheck %s
+
+; REQUIRES: asserts
+; XFAIL: *
+
+ at glob.1 = external global [100 x double]
+ at glob.2 = external global [100 x double]
+
+; Test for PR57825 to make sure LAA is properly invalidated after versioning
+; loops.
+define void @test(ptr %arg, i64 %arg1) {
+; CHECK-LABEL: @test
+;
+bb:
+ br label %outer.header
+
+outer.header: ; preds = %bb21, %bb
+ %ptr.phi = phi ptr [ %arg, %bb ], [ @glob.1, %outer.latch ]
+ %gep.1 = getelementptr inbounds double, ptr %ptr.phi, i64 3
+ br label %inner.1
+
+inner.1:
+ %iv.1 = phi i64 [ 0, %outer.header ], [ %iv.next, %inner.1 ]
+ %ptr.iv.1 = phi ptr [ @glob.2, %outer.header ], [ %ptr.iv.1.next, %inner.1 ]
+ %tmp25 = mul nuw nsw i64 %iv.1, %arg1
+ %gep.2 = getelementptr inbounds double, ptr %gep.1, i64 %tmp25
+ store double 0.000000e+00, ptr %gep.2, align 8
+ %gep.3 = getelementptr double, ptr %ptr.phi, i64 %tmp25
+ %gep.4 = getelementptr double, ptr %gep.3, i64 2
+ %tmp29 = load double, ptr %gep.4, align 8
+ %ptr.iv.1.next = getelementptr inbounds double, ptr %ptr.iv.1, i64 1
+ %iv.next = add nuw nsw i64 %iv.1, 1
+ %c.1 = icmp eq i64 %iv.1, 1
+ br i1 %c.1, label %inner.1.exit, label %inner.1
+
+inner.1.exit: ; preds = %bb22
+ %lcssa.ptr.iv.1 = phi ptr [ %ptr.iv.1, %inner.1 ]
+ %gep.5 = getelementptr inbounds double, ptr %lcssa.ptr.iv.1, i64 1
+ br label %inner.2
+
+inner.2:
+ %ptr.iv.2 = phi ptr [ %gep.5, %inner.1.exit ], [ %ptr.iv.2.next, %inner.2 ]
+ %ptr.iv.2.next = getelementptr inbounds double, ptr %ptr.iv.2, i64 1
+ br i1 false, label %inner.2.exit, label %inner.2
+
+inner.2.exit:
+ %lcssa.ptr.iv.2 = phi ptr [ %ptr.iv.2, %inner.2 ]
+ %gep.6 = getelementptr inbounds double, ptr %ptr.phi, i64 1
+ %gep.7 = getelementptr inbounds double, ptr %lcssa.ptr.iv.2, i64 1
+ br label %inner.3
+
+inner.3: ; preds = %bb14, %bb10
+ %iv.2 = phi i64 [ 0, %inner.2.exit ], [ %iv.2.next, %inner.3 ]
+ %gep.8 = getelementptr inbounds double, ptr %gep.6, i64 %iv.2
+ store double 0.000000e+00, ptr %gep.7, align 8
+ store double 0.000000e+00, ptr %gep.8, align 8
+ %gep.9 = getelementptr double, ptr %ptr.phi, i64 %iv.2
+ %tmp18 = load double, ptr %gep.9, align 8
+ %iv.2.next = add nuw nsw i64 %iv.2, 1
+ %c.2 = icmp eq i64 %iv.2, 1
+ br i1 %c.2, label %outer.latch, label %inner.3
+
+outer.latch:
+ br label %outer.header
+}
diff --git a/llvm/test/Transforms/LoopVersioning/invalidate-laa-after-versioning.ll b/llvm/test/Transforms/LoopVersioning/invalidate-laa-after-versioning.ll
new file mode 100644
index 0000000000000..b0adc069a39d9
--- /dev/null
+++ b/llvm/test/Transforms/LoopVersioning/invalidate-laa-after-versioning.ll
@@ -0,0 +1,65 @@
+; RUN: opt -passes='loop-vectorize,loop-versioning' %s | FileCheck %s
+
+; REQUIRES: asserts
+; XFAIL: *
+
+ at glob.1 = external global [100 x double]
+ at glob.2 = external global [100 x double]
+
+; Test for PR57825 to make sure LAA is properly invalidated after versioning
+; loops.
+define void @test(ptr %arg, i64 %arg1) {
+; CHECK-LABEL: @test
+;
+bb:
+ br label %outer.header
+
+outer.header: ; preds = %bb21, %bb
+ %ptr.phi = phi ptr [ %arg, %bb ], [ @glob.1, %outer.latch ]
+ %gep.1 = getelementptr inbounds double, ptr %ptr.phi, i64 3
+ br label %inner.1
+
+inner.1:
+ %iv.1 = phi i64 [ 0, %outer.header ], [ %iv.next, %inner.1 ]
+ %ptr.iv.1 = phi ptr [ @glob.2, %outer.header ], [ %ptr.iv.1.next, %inner.1 ]
+ %tmp25 = mul nuw nsw i64 %iv.1, %arg1
+ %gep.2 = getelementptr inbounds double, ptr %gep.1, i64 %tmp25
+ store double 0.000000e+00, ptr %gep.2, align 8
+ %gep.3 = getelementptr double, ptr %ptr.phi, i64 %tmp25
+ %gep.4 = getelementptr double, ptr %gep.3, i64 2
+ %tmp29 = load double, ptr %gep.4, align 8
+ %ptr.iv.1.next = getelementptr inbounds double, ptr %ptr.iv.1, i64 1
+ %iv.next = add nuw nsw i64 %iv.1, 1
+ %c.1 = icmp eq i64 %iv.1, 1
+ br i1 %c.1, label %inner.1.exit, label %inner.1
+
+inner.1.exit: ; preds = %bb22
+ %lcssa.ptr.iv.1 = phi ptr [ %ptr.iv.1, %inner.1 ]
+ %gep.5 = getelementptr inbounds double, ptr %lcssa.ptr.iv.1, i64 1
+ br label %inner.2
+
+inner.2:
+ %ptr.iv.2 = phi ptr [ %gep.5, %inner.1.exit ], [ %ptr.iv.2.next, %inner.2 ]
+ %ptr.iv.2.next = getelementptr inbounds double, ptr %ptr.iv.2, i64 1
+ br i1 false, label %inner.2.exit, label %inner.2
+
+inner.2.exit:
+ %lcssa.ptr.iv.2 = phi ptr [ %ptr.iv.2, %inner.2 ]
+ %gep.6 = getelementptr inbounds double, ptr %ptr.phi, i64 1
+ %gep.7 = getelementptr inbounds double, ptr %lcssa.ptr.iv.2, i64 1
+ br label %inner.3
+
+inner.3: ; preds = %bb14, %bb10
+ %iv.2 = phi i64 [ 0, %inner.2.exit ], [ %iv.2.next, %inner.3 ]
+ %gep.8 = getelementptr inbounds double, ptr %gep.6, i64 %iv.2
+ store double 0.000000e+00, ptr %gep.7, align 8
+ store double 0.000000e+00, ptr %gep.8, align 8
+ %gep.9 = getelementptr double, ptr %ptr.phi, i64 %iv.2
+ %tmp18 = load double, ptr %gep.9, align 8
+ %iv.2.next = add nuw nsw i64 %iv.2, 1
+ %c.2 = icmp eq i64 %iv.2, 1
+ br i1 %c.2, label %outer.latch, label %inner.3
+
+outer.latch:
+ br label %outer.header
+}
More information about the llvm-commits
mailing list