Make TargetSelectInstruction protected and called from FastISel.cpp

instead of SelectionDAGISel.cpp.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90636 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2009-12-05 01:27:58 +00:00
parent 864e2efce2
commit 6e3ff37547
3 changed files with 17 additions and 15 deletions

View File

@ -98,14 +98,6 @@ public:
///
bool SelectOperator(User *I, unsigned Opcode);
/// TargetSelectInstruction - This method is called by target-independent
/// code when the normal FastISel process fails to select an instruction.
/// This gives targets a chance to emit code for anything that doesn't
/// fit into FastISel's framework. It returns true if it was successful.
///
virtual bool
TargetSelectInstruction(Instruction *I) = 0;
/// getRegForValue - Create a virtual register and arrange for it to
/// be assigned the value for the given LLVM value.
unsigned getRegForValue(Value *V);
@ -134,6 +126,14 @@ protected:
#endif
);
/// TargetSelectInstruction - This method is called by target-independent
/// code when the normal FastISel process fails to select an instruction.
/// This gives targets a chance to emit code for anything that doesn't
/// fit into FastISel's framework. It returns true if it was successful.
///
virtual bool
TargetSelectInstruction(Instruction *I) = 0;
/// FastEmit_r - This method is called by target-independent code
/// to request that an instruction with the given type and opcode
/// be emitted.

View File

@ -532,7 +532,15 @@ bool FastISel::SelectBitCast(User *I) {
bool
FastISel::SelectInstruction(Instruction *I) {
return SelectOperator(I, I->getOpcode());
// First, try doing target-independent selection.
if (SelectOperator(I, I->getOpcode()))
return true;
// Next, try calling the target to attempt to handle the instruction.
if (TargetSelectInstruction(I))
return true;
return false;
}
/// FastEmitBranch - Emit an unconditional branch to the given block,

View File

@ -792,12 +792,6 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn,
continue;
}
// Next, try calling the target to attempt to handle the instruction.
if (FastIS->TargetSelectInstruction(BI)) {
ResetDebugLoc(SDB, FastIS);
continue;
}
// Clear out the debug location so that it doesn't carry over to
// unrelated instructions.
ResetDebugLoc(SDB, FastIS);