[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