mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-22 23:24:59 +00:00
Revamp the ValueMapper interfaces in a couple ways:
1. Take a flags argument instead of a bool. This makes it more clear to the reader what it is used for. 2. Add a flag that says that "remapping a value not in the map is ok". 3. Reimplement MapValue to share a bunch of code and be a lot more efficient. For lookup failures, don't drop null values into the map. 4. Using the new flag a bunch of code can vaporize in LinkModules and LoopUnswitch, kill it. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123058 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -22,7 +22,6 @@
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
#include "llvm/Transforms/Utils/SSAUpdater.h"
|
||||
#include "llvm/Transforms/Utils/ValueMapper.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
using namespace llvm;
|
||||
@@ -205,6 +204,7 @@ bool LoopRotate::rotateLoop(Loop *Lp, LPPassManager &LPM) {
|
||||
|
||||
// Otherwise, create a duplicate of the instruction.
|
||||
Instruction *C = Inst->clone();
|
||||
|
||||
C->setName(Inst->getName());
|
||||
C->insertBefore(LoopEntryBranch);
|
||||
ValueMap[Inst] = C;
|
||||
|
@@ -457,19 +457,6 @@ bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// RemapInstruction - Convert the instruction operands from referencing the
|
||||
// current values into those specified by VMap.
|
||||
//
|
||||
static inline void RemapInstruction(Instruction *I,
|
||||
ValueToValueMapTy &VMap) {
|
||||
for (unsigned op = 0, E = I->getNumOperands(); op != E; ++op) {
|
||||
Value *Op = I->getOperand(op);
|
||||
ValueToValueMapTy::iterator It = VMap.find(Op);
|
||||
if (It != VMap.end()) Op = It->second;
|
||||
I->setOperand(op, Op);
|
||||
}
|
||||
}
|
||||
|
||||
/// CloneLoop - Recursively clone the specified loop and all of its children,
|
||||
/// mapping the blocks with the specified map.
|
||||
static Loop *CloneLoop(Loop *L, Loop *PL, ValueToValueMapTy &VM,
|
||||
@@ -664,7 +651,7 @@ void LoopUnswitch::UnswitchNontrivialCondition(Value *LIC, Constant *Val,
|
||||
for (unsigned i = 0, e = NewBlocks.size(); i != e; ++i)
|
||||
for (BasicBlock::iterator I = NewBlocks[i]->begin(),
|
||||
E = NewBlocks[i]->end(); I != E; ++I)
|
||||
RemapInstruction(I, VMap);
|
||||
RemapInstruction(I, VMap,RF_NoModuleLevelChanges|RF_IgnoreMissingEntries);
|
||||
|
||||
// Rewrite the original preheader to select between versions of the loop.
|
||||
BranchInst *OldBR = cast<BranchInst>(loopPreheader->getTerminator());
|
||||
|
Reference in New Issue
Block a user