summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FastISel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/X86/X86FastISel.cpp')
-rw-r--r--llvm/lib/Target/X86/X86FastISel.cpp46
1 files changed, 18 insertions, 28 deletions
diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp
index 658b65dba73..9b784b44497 100644
--- a/llvm/lib/Target/X86/X86FastISel.cpp
+++ b/llvm/lib/Target/X86/X86FastISel.cpp
@@ -30,34 +30,27 @@ class X86FastISel : public FastISel {
const X86Subtarget *Subtarget;
public:
- explicit X86FastISel(MachineFunction &mf) : FastISel(mf) {
+ explicit X86FastISel(MachineFunction &mf,
+ DenseMap<const Value *, unsigned> &vm,
+ DenseMap<const BasicBlock *, MachineBasicBlock *> &bm)
+ : FastISel(mf, vm, bm) {
Subtarget = &TM.getSubtarget<X86Subtarget>();
}
- virtual bool
- TargetSelectInstruction(Instruction *I,
- DenseMap<const Value *, unsigned> &ValueMap,
- DenseMap<const BasicBlock *, MachineBasicBlock *> &MBBMap,
- MachineBasicBlock *MBB);
+ virtual bool TargetSelectInstruction(Instruction *I);
#include "X86GenFastISel.inc"
private:
- bool X86SelectConstAddr(Value *V,
- DenseMap<const Value *, unsigned> &ValueMap,
- MachineBasicBlock *MBB, unsigned &Op0);
+ bool X86SelectConstAddr(Value *V, unsigned &Op0);
- bool X86SelectLoad(Instruction *I,
- DenseMap<const Value *, unsigned> &ValueMap,
- MachineBasicBlock *MBB);
+ bool X86SelectLoad(Instruction *I);
};
/// X86SelectConstAddr - Select and emit code to materialize constant address.
///
bool X86FastISel::X86SelectConstAddr(Value *V,
- DenseMap<const Value *, unsigned> &ValueMap,
- MachineBasicBlock *MBB,
- unsigned &Op0) {
+ unsigned &Op0) {
// FIXME: Only GlobalAddress for now.
GlobalValue *GV = dyn_cast<GlobalValue>(V);
if (!GV)
@@ -84,9 +77,7 @@ bool X86FastISel::X86SelectConstAddr(Value *V,
/// X86SelectLoad - Select and emit code to implement load instructions.
///
-bool X86FastISel::X86SelectLoad(Instruction *I,
- DenseMap<const Value *, unsigned> &ValueMap,
- MachineBasicBlock *MBB) {
+bool X86FastISel::X86SelectLoad(Instruction *I) {
MVT VT = MVT::getMVT(I->getType(), /*HandleUnknown=*/true);
if (VT == MVT::Other || !VT.isSimple())
// Unhandled type. Halt "fast" selection and bail.
@@ -102,10 +93,10 @@ bool X86FastISel::X86SelectLoad(Instruction *I,
return false;
Value *V = I->getOperand(0);
- unsigned Op0 = getRegForValue(V, ValueMap);
+ unsigned Op0 = getRegForValue(V);
if (Op0 == 0) {
// Handle constant load address.
- if (!isa<Constant>(V) || !X86SelectConstAddr(V, ValueMap, MBB, Op0))
+ if (!isa<Constant>(V) || !X86SelectConstAddr(V, Op0))
// Unhandled operand. Halt "fast" selection and bail.
return false;
}
@@ -164,27 +155,26 @@ bool X86FastISel::X86SelectLoad(Instruction *I,
else
AM.GV = cast<GlobalValue>(V);
addFullAddress(BuildMI(MBB, TII.get(Opc), ResultReg), AM);
- UpdateValueMap(I, ResultReg, ValueMap);
+ UpdateValueMap(I, ResultReg);
return true;
}
bool
-X86FastISel::TargetSelectInstruction(Instruction *I,
- DenseMap<const Value *, unsigned> &ValueMap,
- DenseMap<const BasicBlock *, MachineBasicBlock *> &MBBMap,
- MachineBasicBlock *MBB) {
+X86FastISel::TargetSelectInstruction(Instruction *I) {
switch (I->getOpcode()) {
default: break;
case Instruction::Load:
- return X86SelectLoad(I, ValueMap, MBB);
+ return X86SelectLoad(I);
}
return false;
}
namespace llvm {
- llvm::FastISel *X86::createFastISel(MachineFunction &mf) {
- return new X86FastISel(mf);
+ llvm::FastISel *X86::createFastISel(MachineFunction &mf,
+ DenseMap<const Value *, unsigned> &vm,
+ DenseMap<const BasicBlock *, MachineBasicBlock *> &bm) {
+ return new X86FastISel(mf, vm, bm);
}
}
OpenPOWER on IntegriCloud