[llvm] f4ea653 - [BasicAA] Add test for incorrectly inferring noalias due to scale sign.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 30 12:06:22 PDT 2021


Author: Florian Hahn
Date: 2021-06-30T19:57:29+01:00
New Revision: f4ea6531e677b1a3c107d7009a7e2f195c8fa915

URL: https://github.com/llvm/llvm-project/commit/f4ea6531e677b1a3c107d7009a7e2f195c8fa915
DIFF: https://github.com/llvm/llvm-project/commit/f4ea6531e677b1a3c107d7009a7e2f195c8fa915.diff

LOG: [BasicAA] Add test for incorrectly inferring noalias due to scale sign.

This patch adds a test where we currently incorrectly determine noalias,
because the sign of Scale is adjusted after 91fa3565da16.

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 e009ce498b06b..cf75ba5101b1f 100644
--- a/llvm/test/Analysis/BasicAA/gep-modulo.ll
+++ b/llvm/test/Analysis/BasicAA/gep-modulo.ll
@@ -273,3 +273,32 @@ define void @may_overflow_pointer_
diff ([16 x i8]* %ptr, i64 %idx) {
 
   ret void
 }
+
+; %gep.1 and %gep.idx may alias, e.g. if %idx.1 = 8 and %idx.2 == 2. %gep.idx is then
+;  (((18446744073709551614 * 8) % 2^64 + 6 * 2) % 2^64 + 10) % 2^64 == 6.
+define void @may_overflow_mul_scale_neg([200 x [ 6 x i8]]* %ptr, i64 %idx.1,i64 %idx.2) {
+; CHECK-LABEL: Function: may_overflow_mul_scale_neg: 4 pointers, 2 call sites
+; CHECK-NEXT:  MustAlias:   [200 x [6 x i8]]* %ptr, i8* %bc
+; CHECK-NEXT:  PartialAlias (off 6):    [200 x [6 x i8]]* %ptr, i8* %gep.1
+; CHECK-NEXT:  NoAlias: i8* %bc, i8* %gep.1
+; CHECK-NEXT:  MayAlias:    [200 x [6 x i8]]* %ptr, i8* %gep.idx
+; CHECK-NEXT:  NoAlias: i8* %bc, i8* %gep.idx
+; CHECK-NEXT:  NoAlias: i8* %gep.1, i8* %gep.idx
+;
+  %idx.1.pos = icmp sge i64 %idx.1, 0
+  call void @llvm.assume(i1 %idx.1.pos)
+  %idx.2.pos = icmp sge i64 %idx.2, 0
+  call void @llvm.assume(i1 %idx.2.pos)
+
+  %bc = bitcast [ 200 x [ 6 x i8 ] ]* %ptr to i8*
+  %gep.1 = getelementptr i8, i8* %bc, i64 6
+  store i8 1, i8* %gep.1, align 1
+
+  %mul.0 = mul i64 %idx.1, -2
+  %add = add i64 %mul.0, 10
+  %gep.idx = getelementptr [ 200 x [ 6 x i8 ] ], [ 200 x [ 6 x i8 ] ]* %ptr, i64 0, i64 %idx.2, i64 %add
+  store i8 0, i8* %gep.idx, align 1
+  ret void
+}
+
+declare void @llvm.assume(i1)


        


More information about the llvm-commits mailing list