[llvm] a9772a7 - [BasicAA] Add test showing incorrect noalias result with wrapping.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 15 05:32:26 PDT 2022
Author: Florian Hahn
Date: 2022-03-15T12:32:07Z
New Revision: a9772a71488d3fbcab046cca41205cb02d0b65a9
URL: https://github.com/llvm/llvm-project/commit/a9772a71488d3fbcab046cca41205cb02d0b65a9
DIFF: https://github.com/llvm/llvm-project/commit/a9772a71488d3fbcab046cca41205cb02d0b65a9.diff
LOG: [BasicAA] Add test showing incorrect noalias result with wrapping.
@mul_may_overflow_var_nonzero_minabsvarindex_one_index shows BasicAA
incorrectly determining noalias for (%gep.917, i8* %gep.idx).
If %v == 10581764700698480926, %idx == 917 and the GEPs alias.
https://alive2.llvm.org/ce/z/yzDgnn
Added:
Modified:
llvm/test/Analysis/BasicAA/gep-modulo.ll
Removed:
################################################################################
diff --git a/llvm/test/Analysis/BasicAA/gep-modulo.ll b/llvm/test/Analysis/BasicAA/gep-modulo.ll
index 9098a2c85dd25..39ac0fd2ef65c 100644
--- a/llvm/test/Analysis/BasicAA/gep-modulo.ll
+++ b/llvm/test/Analysis/BasicAA/gep-modulo.ll
@@ -301,4 +301,46 @@ define void @may_overflow_mul_scale_neg([200 x [ 6 x i8]]* %ptr, i64 %idx.1,i64
ret void
}
+; If %v == 10581764700698480926, %idx == 917, so %gep.917 and %gep.idx may alias.
+define i8 @mul_may_overflow_var_nonzero_minabsvarindex_one_index([2000 x i8]* %arr, i8 %x, i64 %v) {
+; CHECK-LABEL: Function: mul_may_overflow_var_nonzero_minabsvarindex_one_index: 4 pointers, 0 call sites
+; CHECK-NEXT: NoAlias: [2000 x i8]* %arr, i8* %gep.idx
+; CHECK-NEXT: PartialAlias (off 917): [2000 x i8]* %arr, i8* %gep.917
+; CHECK-NEXT: NoAlias: i8* %gep.917, i8* %gep.idx
+; CHECK-NEXT: MustAlias: [2000 x i8]* %arr, i8* %gep.0
+; CHECK-NEXT: NoAlias: i8* %gep.0, i8* %gep.idx
+; CHECK-NEXT: NoAlias: i8* %gep.0, i8* %gep.917
+;
+ %or = or i64 %v, 1
+ %idx = mul i64 %or, 1844674407370955
+ %gep.idx = getelementptr inbounds [2000 x i8], [2000 x i8]* %arr, i32 0, i64 %idx
+ %l = load i8, i8* %gep.idx
+ %gep.917 = getelementptr inbounds [2000 x i8], [2000 x i8]* %arr, i32 0, i32 917
+ store i8 0, i8* %gep.917
+ %gep.0 = getelementptr inbounds [2000 x i8], [2000 x i8]* %arr, i32 0, i32 0
+ store i8 0, i8* %gep.0
+ ret i8 %l
+}
+
+define i8 @mul_nsw_var_nonzero_minabsvarindex_one_index([2000 x i8]* %arr, i8 %x, i64 %v) {
+; CHECK-LABEL: Function: mul_nsw_var_nonzero_minabsvarindex_one_index: 4 pointers, 0 call sites
+; CHECK-NEXT: NoAlias: [2000 x i8]* %arr, i8* %gep.idx
+; CHECK-NEXT: PartialAlias (off 917): [2000 x i8]* %arr, i8* %gep.917
+; CHECK-NEXT: NoAlias: i8* %gep.917, i8* %gep.idx
+; CHECK-NEXT: MustAlias: [2000 x i8]* %arr, i8* %gep.0
+; CHECK-NEXT: NoAlias: i8* %gep.0, i8* %gep.idx
+; CHECK-NEXT: NoAlias: i8* %gep.0, i8* %gep.917
+;
+
+ %or = or i64 %v, 1
+ %idx = mul nsw i64 %or, 1844674407370955
+ %gep.idx = getelementptr inbounds [2000 x i8], [2000 x i8]* %arr, i32 0, i64 %idx
+ %l = load i8, i8* %gep.idx
+ %gep.917 = getelementptr inbounds [2000 x i8], [2000 x i8]* %arr, i32 0, i32 917
+ store i8 0, i8* %gep.917
+ %gep.0 = getelementptr inbounds [2000 x i8], [2000 x i8]* %arr, i32 0, i32 0
+ store i8 0, i8* %gep.0
+ ret i8 %l
+}
+
declare void @llvm.assume(i1)
More information about the llvm-commits
mailing list