[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