[llvm] 7c5c778 - [BasicAA] Add test for select with loop carried dependency (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 14 01:32:47 PDT 2022
Author: Nikita Popov
Date: 2022-10-14T10:32:33+02:00
New Revision: 7c5c77878b83807692b22bd217b78082ff3358b6
URL: https://github.com/llvm/llvm-project/commit/7c5c77878b83807692b22bd217b78082ff3358b6
DIFF: https://github.com/llvm/llvm-project/commit/7c5c77878b83807692b22bd217b78082ff3358b6.diff
LOG: [BasicAA] Add test for select with loop carried dependency (NFC)
Added:
Modified:
llvm/test/Analysis/BasicAA/phi-and-select.ll
Removed:
################################################################################
diff --git a/llvm/test/Analysis/BasicAA/phi-and-select.ll b/llvm/test/Analysis/BasicAA/phi-and-select.ll
index ae28ecb253975..e7614bbd10585 100644
--- a/llvm/test/Analysis/BasicAA/phi-and-select.ll
+++ b/llvm/test/Analysis/BasicAA/phi-and-select.ll
@@ -2,17 +2,9 @@
; BasicAA should detect NoAliases in PHIs and Selects.
-; CHECK: Function: foo
-; CHECK: NoAlias: double* %a, double* %b
-; CHECK: Function: bar
-; CHECK: NoAlias: double* %a, double* %b
-; CHECK: Function: qux
-; CHECK: NoAlias: double* %a, double* %b
-; CHECK: Function: fin
-; CHECK: NoAlias: double* %a, double* %b
-; CHECK: ===== Alias Analysis Evaluator Report =====
-
; Two PHIs in the same block.
+; CHECK-LABEL: Function: foo
+; CHECK: NoAlias: double* %a, double* %b
define void @foo(i1 %m, double* noalias %x, double* noalias %y) {
entry:
br i1 %m, label %true, label %false
@@ -32,6 +24,8 @@ exit:
}
; Two selects with the same condition.
+; CHECK-LABEL: Function: bar
+; CHECK: NoAlias: double* %a, double* %b
define void @bar(i1 %m, double* noalias %x, double* noalias %y) {
entry:
%a = select i1 %m, double* %x, double* %y
@@ -42,6 +36,8 @@ entry:
}
; Two PHIs with disjoint sets of inputs.
+; CHECK-LABEL: Function: qux
+; CHECK: NoAlias: double* %a, double* %b
define void @qux(i1 %m, double* noalias %x, double* noalias %y,
i1 %n, double* noalias %v, double* noalias %w) {
entry:
@@ -71,6 +67,8 @@ nexit:
}
; Two selects with disjoint sets of arms.
+; CHECK-LABEL: Function: fin
+; CHECK: NoAlias: double* %a, double* %b
define void @fin(i1 %m, double* noalias %x, double* noalias %y,
i1 %n, double* noalias %v, double* noalias %w) {
entry:
@@ -80,3 +78,29 @@ entry:
store volatile double 1.000000e+00, double* %b
ret void
}
+
+; On the first iteration, sel1 = a1, sel2 = a2, phi = a3
+; On the second iteration, sel1 = a2, sel1 = a1, phi = a2
+; As such, sel1 and phi may alias.
+; FIXME: Miscompile.
+; CHECK-LABEL: Function: select_backedge
+; CHECK: NoAlias: i32* %sel1, i32* %sel2
+; CHECK: NoAlias: i32* %phi, i32* %sel1
+; CHECK: MayAlias: i32* %phi, i32* %sel2
+define void @select_backedge() {
+entry:
+ %a1 = alloca i32
+ %a2 = alloca i32
+ %a3 = alloca i32
+ br label %loop
+
+loop:
+ %phi = phi i32* [ %a3, %entry ], [ %sel2, %loop ]
+ %c = phi i1 [ true, %entry ], [ false, %loop ]
+ %sel1 = select i1 %c, i32* %a1, i32* %a2
+ %sel2 = select i1 %c, i32* %a2, i32* %a1
+ load i32, i32* %sel1
+ load i32, i32* %sel2
+ load i32, i32* %phi
+ br label %loop
+}
More information about the llvm-commits
mailing list