mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
make memdep use the getModRefInfo method for stores instead of the
low-level alias() method, allowing it to reason more aggressively about pointers into constant memory. PR4189 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72403 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d67a1666ec
commit
ab9cf1282b
@ -202,6 +202,14 @@ getPointerDependencyFrom(Value *MemPtr, uint64_t MemSize, bool isLoad,
|
||||
}
|
||||
|
||||
if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
|
||||
// If alias analysis can tell that this store is guaranteed to not modify
|
||||
// the query pointer, ignore it. Use getModRefInfo to handle cases where
|
||||
// the query pointer points to constant memory etc.
|
||||
if (AA->getModRefInfo(SI, MemPtr, MemSize) == AliasAnalysis::NoModRef)
|
||||
continue;
|
||||
|
||||
// Ok, this store might clobber the query pointer. Check to see if it is
|
||||
// a must alias: in this case, we want to return this as a def.
|
||||
Value *Pointer = SI->getPointerOperand();
|
||||
uint64_t PointerSize = TD->getTypeStoreSize(SI->getOperand(0)->getType());
|
||||
|
||||
|
13
test/Transforms/GVN/load-constant-mem.ll
Normal file
13
test/Transforms/GVN/load-constant-mem.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; RUN: llvm-as < %s | opt -gvn -instcombine | llvm-dis | grep {ret i32 0}
|
||||
; PR4189
|
||||
@G = external constant [4 x i32]
|
||||
|
||||
define i32 @test(i8* %p, i32 %i) nounwind {
|
||||
entry:
|
||||
%P = getelementptr [4 x i32]* @G, i32 0, i32 %i
|
||||
%A = load i32* %P
|
||||
store i8 4, i8* %p
|
||||
%B = load i32* %P
|
||||
%C = sub i32 %A, %B
|
||||
ret i32 %C
|
||||
}
|
Loading…
Reference in New Issue
Block a user