mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-28 06:35:49 +00:00
- Set the "HasCalls" flag after instruction selection is finished.
- Change the logic DisableFramePointerElim() to check for the -disable-non-leaf-fp-elim before -disable-fp-elim. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103990 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ebe7fcd041
commit
53f7602b61
@ -233,6 +233,24 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
|
||||
}
|
||||
}
|
||||
|
||||
// Determine if there are any calls in this machine function.
|
||||
MachineFrameInfo *MFI = MF->getFrameInfo();
|
||||
if (!MFI->hasCalls()) {
|
||||
for (MachineFunction::const_iterator
|
||||
I = MF->begin(), E = MF->end(); I != E; ++I) {
|
||||
const MachineBasicBlock *MBB = I;
|
||||
for (MachineBasicBlock::const_iterator
|
||||
II = MBB->begin(), IE = MBB->end(); II != IE; ++II) {
|
||||
const TargetInstrDesc &TID = TM.getInstrInfo()->get(II->getOpcode());
|
||||
if (II->isInlineAsm() || (TID.isCall() && !TID.isReturn())) {
|
||||
MFI->setHasCalls(true);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
done:;
|
||||
}
|
||||
|
||||
// Release function-specific state. SDB and CurDAG are already cleared
|
||||
// at this point.
|
||||
FuncInfo->clear();
|
||||
@ -606,19 +624,6 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
|
||||
delete Scheduler;
|
||||
}
|
||||
|
||||
// Determine if there are any calls in this machine function.
|
||||
MachineFrameInfo *MFI = MF->getFrameInfo();
|
||||
if (!MFI->hasCalls()) {
|
||||
for (MachineBasicBlock::iterator
|
||||
I = BB->begin(), E = BB->end(); I != E; ++I) {
|
||||
const TargetInstrDesc &TID = TM.getInstrInfo()->get(I->getOpcode());
|
||||
if (I->isInlineAsm() || (TID.isCall() && !TID.isReturn())) {
|
||||
MFI->setHasCalls(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Free the SelectionDAG state, now that we're finished with it.
|
||||
CurDAG->clear();
|
||||
|
||||
@ -676,6 +681,7 @@ void SelectionDAGISel::DoInstructionSelection() {
|
||||
|
||||
CurDAG->setRoot(Dummy.getValue());
|
||||
}
|
||||
|
||||
DEBUG(errs() << "===== Instruction selection ends:\n");
|
||||
|
||||
PostprocessISelDAG();
|
||||
|
@ -273,13 +273,14 @@ namespace llvm {
|
||||
/// DisableFramePointerElim - This returns true if frame pointer elimination
|
||||
/// optimization should be disabled for the given machine function.
|
||||
bool DisableFramePointerElim(const MachineFunction &MF) {
|
||||
if (NoFramePointerElim)
|
||||
return true;
|
||||
// Check to see if we should eliminate non-leaf frame pointers and then
|
||||
// check to see if we should eliminate all frame pointers.
|
||||
if (NoFramePointerElimNonLeaf) {
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
return MFI->hasCalls();
|
||||
}
|
||||
return false;
|
||||
|
||||
return NoFramePointerElim;
|
||||
}
|
||||
|
||||
/// LessPreciseFPMAD - This flag return true when -enable-fp-mad option
|
||||
|
Loading…
x
Reference in New Issue
Block a user