mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Avoid doing pointless work. Amazingly, this makes us go faster.
Running the inliner on 252.eon used to take 48.4763s, now it takes 14.4148s. In release mode, it went from taking 25.8741s to taking 11.5712s. This also fixes a FIXME. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8890 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d5a310e4b3
commit
5f92e2b11f
@ -124,14 +124,6 @@ bool InlineFunction(CallSite CS) {
|
|||||||
// Make a vector to capture the return instructions in the cloned function...
|
// Make a vector to capture the return instructions in the cloned function...
|
||||||
std::vector<ReturnInst*> Returns;
|
std::vector<ReturnInst*> Returns;
|
||||||
|
|
||||||
// Populate the value map with all of the globals in the program.
|
|
||||||
// FIXME: This should be the default for CloneFunctionInto!
|
|
||||||
Module &M = *Caller->getParent();
|
|
||||||
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
|
|
||||||
ValueMap[I] = I;
|
|
||||||
for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I)
|
|
||||||
ValueMap[I] = I;
|
|
||||||
|
|
||||||
// Do all of the hard part of cloning the callee into the caller...
|
// Do all of the hard part of cloning the callee into the caller...
|
||||||
CloneFunctionInto(Caller, CalledFunc, ValueMap, Returns, ".i");
|
CloneFunctionInto(Caller, CalledFunc, ValueMap, Returns, ".i");
|
||||||
|
|
||||||
|
@ -13,6 +13,11 @@ Value *MapValue(const Value *V, std::map<const Value*, Value*> &VM) {
|
|||||||
Value *&VMSlot = VM[V];
|
Value *&VMSlot = VM[V];
|
||||||
if (VMSlot) return VMSlot; // Does it exist in the map yet?
|
if (VMSlot) return VMSlot; // Does it exist in the map yet?
|
||||||
|
|
||||||
|
// Global values do not need to be seeded into the ValueMap if they are using
|
||||||
|
// the identity mapping.
|
||||||
|
if (isa<GlobalValue>(V))
|
||||||
|
return VMSlot = const_cast<Value*>(V);
|
||||||
|
|
||||||
if (Constant *C = const_cast<Constant*>(dyn_cast<Constant>(V))) {
|
if (Constant *C = const_cast<Constant*>(dyn_cast<Constant>(V))) {
|
||||||
if (isa<ConstantIntegral>(C) || isa<ConstantFP>(C) ||
|
if (isa<ConstantIntegral>(C) || isa<ConstantFP>(C) ||
|
||||||
isa<ConstantPointerNull>(C))
|
isa<ConstantPointerNull>(C))
|
||||||
|
Loading…
Reference in New Issue
Block a user