Skip to content

Commit f3a5543

Browse files
committed
[MemoryLocation] Teach MemoryLocation about llvm.experimental.memset.pattern
1 parent ae5084c commit f3a5543

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

llvm/lib/Analysis/MemoryLocation.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,18 @@ MemoryLocation MemoryLocation::getForArgument(const CallBase *Call,
183183
AATags);
184184
return MemoryLocation::getAfter(Arg, AATags);
185185

186+
case Intrinsic::experimental_memset_pattern:
187+
assert((ArgIdx == 0 || ArgIdx == 1) &&
188+
"Invalid argument index for memory intrinsic");
189+
if (ConstantInt *LenCI = dyn_cast<ConstantInt>(II->getArgOperand(2)))
190+
return MemoryLocation(
191+
Arg,
192+
LocationSize::precise(
193+
LenCI->getZExtValue() *
194+
DL.getTypeStoreSize(II->getArgOperand(1)->getType())),
195+
AATags);
196+
return MemoryLocation::getAfter(Arg, AATags);
197+
186198
case Intrinsic::lifetime_start:
187199
case Intrinsic::lifetime_end:
188200
case Intrinsic::invariant_start:

llvm/test/Analysis/BasicAA/memset-pattern.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ define void @test_memset_pattern4_const_size(ptr noalias %a, i32 %pattern) {
44
; CHECK-LABEL: Function: test_memset_pattern4_const_size
55
; CHECK: Just Mod: Ptr: i8* %a <-> call void @llvm.experimental.memset.pattern.p0.i32.i64(ptr %a, i32 %pattern, i64 17, i1 false)
66
; CHECK-NEXT: Just Mod: Ptr: i8* %a.gep.1 <-> call void @llvm.experimental.memset.pattern.p0.i32.i64(ptr %a, i32 %pattern, i64 17, i1 false)
7-
; CHECK-NEXT: Just Mod: Ptr: i8* %a.gep.129 <-> call void @llvm.experimental.memset.pattern.p0.i32.i64(ptr %a, i32 %pattern, i64 17, i1 false)
7+
; CHECK-NEXT: NoModRef: Ptr: i8* %a.gep.129 <-> call void @llvm.experimental.memset.pattern.p0.i32.i64(ptr %a, i32 %pattern, i64 17, i1 false)
88

99
entry:
1010
load i8, ptr %a

0 commit comments

Comments
 (0)