mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 04:29:21 +00:00
Implement a trivial form of store->load forwarding where the store and the
load are exactly consequtive. This is picked up by other passes, but this triggers thousands of times in fortran programs that use static locals (and is thus a compile-time speedup). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23320 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
598fbf756f
commit
62f254df04
@ -4926,6 +4926,15 @@ Instruction *InstCombiner::visitLoadInst(LoadInst &LI) {
|
||||
// None of the following transforms are legal for volatile loads.
|
||||
if (LI.isVolatile()) return 0;
|
||||
|
||||
// If the instruction immediately before this is a store to the same address,
|
||||
// do a simple form of store->load forwarding.
|
||||
if (&LI.getParent()->front() != &LI) {
|
||||
BasicBlock::iterator BBI = &LI; --BBI;
|
||||
if (StoreInst *SI = dyn_cast<StoreInst>(BBI))
|
||||
if (SI->getOperand(1) == LI.getOperand(0))
|
||||
return ReplaceInstUsesWith(LI, SI->getOperand(0));
|
||||
}
|
||||
|
||||
if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op))
|
||||
if (isa<ConstantPointerNull>(GEPI->getOperand(0)) ||
|
||||
isa<UndefValue>(GEPI->getOperand(0))) {
|
||||
|
Loading…
Reference in New Issue
Block a user