[BasicAA] Pass AC/DT to isKnownNonEqual()
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 25 Dec 2020 17:26:00 +0000 (18:26 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 25 Dec 2020 17:29:20 +0000 (18:29 +0100)
This allows us to handle assumes etc in the recursive
isKnownNonZero() checks.

llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/test/Analysis/BasicAA/sequential-gep.ll

index 2dca644..f9275da 100644 (file)
@@ -1291,7 +1291,7 @@ AliasResult BasicAAResult::aliasGEP(
         const VariableGEPIndex &Var1 = DecompGEP1.VarIndices[1];
         if (Var0.Scale == -Var1.Scale && Var0.ZExtBits == Var1.ZExtBits &&
             Var0.SExtBits == Var1.SExtBits && VisitedPhiBBs.empty() &&
-            isKnownNonEqual(Var0.V, Var1.V, DL))
+            isKnownNonEqual(Var0.V, Var1.V, DL, &AC, /* CxtI */ nullptr, DT))
           MinAbsVarIndex = Var0.Scale.abs();
       }
 
index e5b744b..d7a1af0 100644 (file)
@@ -110,6 +110,17 @@ define void @add_non_zero_with_offset(i32* %p, i32 %addend, i32* %q) {
   ret void
 }
 
+; CHECK-LABEL: Function: add_non_zero_assume
+; CHECK: NoAlias: i32* %gep1, i32* %gep2
+define void @add_non_zero_assume(i32* %p, i32 %addend, i32 %knownnonzero) {
+  %cmp = icmp ne i32 %knownnonzero, 0
+  call void @llvm.assume(i1 %cmp)
+  %add = add i32 %addend, %knownnonzero
+  %gep1 = getelementptr i32, i32* %p, i32 %addend
+  %gep2 = getelementptr i32, i32* %p, i32 %add
+  ret void
+}
+
 ; CHECK-LABEL: non_zero_index_simple
 ; CHECK: NoAlias: i32* %gep, i32* %p
 ; CHECK: NoAlias: i16* %gep.16, i32* %p