From 0056e7e15ac0c89cb6eab37d79900d174adb713e Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Wed, 7 Apr 2021 22:26:01 +0100 Subject: [PATCH] [BasicAA] Add another GEP modulo test with shl with odd op. --- llvm/test/Analysis/BasicAA/gep-modulo.ll | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/llvm/test/Analysis/BasicAA/gep-modulo.ll b/llvm/test/Analysis/BasicAA/gep-modulo.ll index 4c3e547..27af5ad 100644 --- a/llvm/test/Analysis/BasicAA/gep-modulo.ll +++ b/llvm/test/Analysis/BasicAA/gep-modulo.ll @@ -172,6 +172,21 @@ define void @may_overflow_shl_sub_i64([16 x i8]* %ptr, i64 %idx) { ret void } +define void @shl_sub_nsw_nuw_i64([16 x i8]* %ptr, i64 %idx) { +; CHECK-LABEL: Function: shl_sub_nsw_nuw_i64: 3 pointers, 0 call sites +; CHECK-NEXT: MayAlias: [16 x i8]* %ptr, i8* %gep.idx +; CHECK-NEXT: PartialAlias: [16 x i8]* %ptr, i8* %gep.3 +; CHECK-NEXT: NoAlias: i8* %gep.3, i8* %gep.idx +; + %mul = shl i64 %idx, 3 + %sub = sub nsw nuw i64 %mul, 1 + %gep.idx = getelementptr [16 x i8], [16 x i8]* %ptr, i32 0, i64 %sub + store i8 0, i8* %gep.idx, align 1 + %gep.3 = getelementptr [16 x i8], [16 x i8]* %ptr, i32 0, i64 3 + store i8 1, i8* %gep.3, align 1 + ret void +} + ; %gep.idx and %gep.3 must-alias if %mul overflows (e.g. %idx == 110). define void @may_overflow_i32_sext([16 x i8]* %ptr, i32 %idx) { ; CHECK-LABEL: Function: may_overflow_i32_sext: 3 pointers, 0 call sites -- 2.7.4