[llvm-commits] [llvm] r66204 - in /llvm/branches/Apple/Dib/lib: CodeGen/PreAllocSplitting.cpp ExecutionEngine/JIT/JITEmitter.cpp
Bill Wendling
isanbard at gmail.com
Thu Mar 5 12:59:58 PST 2009
Author: void
Date: Thu Mar 5 14:59:57 2009
New Revision: 66204
URL: http://llvm.org/viewvc/llvm-project?rev=66204&view=rev
Log:
--- Merging (from foreign repository) r66147 into '.':
U lib/CodeGen/PreAllocSplitting.cpp
Be more careful about choosing restore points when doing restore folding. This
fixes some subtle miscompilations.
Modified:
llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp
llvm/branches/Apple/Dib/lib/ExecutionEngine/JIT/JITEmitter.cpp
Modified: llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp?rev=66204&r1=66203&r2=66204&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp (original)
+++ llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp Thu Mar 5 14:59:57 2009
@@ -38,10 +38,12 @@
static cl::opt<int> PreSplitLimit("pre-split-limit", cl::init(-1), cl::Hidden);
static cl::opt<int> DeadSplitLimit("dead-split-limit", cl::init(-1), cl::Hidden);
+static cl::opt<int> RestoreFoldLimit("restore-fold-limit", cl::init(-1), cl::Hidden);
STATISTIC(NumSplits, "Number of intervals split");
STATISTIC(NumRemats, "Number of intervals split by rematerialization");
STATISTIC(NumFolds, "Number of intervals split with spill folding");
+STATISTIC(NumRestoreFolds, "Number of intervals split with restore folding");
STATISTIC(NumRenumbers, "Number of intervals renumbered into new registers");
STATISTIC(NumDeadSpills, "Number of dead spills removed");
@@ -1013,15 +1015,32 @@
MachineBasicBlock* MBB,
int SS,
SmallPtrSet<MachineInstr*, 4>& RefsInMBB) {
+ if ((int)RestoreFoldLimit != -1 && RestoreFoldLimit == NumRestoreFolds)
+ return 0;
+
// Go top down if RefsInMBB is empty.
if (RefsInMBB.empty())
return 0;
// Can't fold a restore between a call stack setup and teardown.
MachineBasicBlock::iterator FoldPt = Barrier;
- while (FoldPt != MBB->getFirstTerminator() && !RefsInMBB.count(FoldPt)) {
- ++FoldPt;
+
+ // Advance from barrier to call frame teardown.
+ while (FoldPt != MBB->getFirstTerminator() &&
+ FoldPt->getOpcode() != TRI->getCallFrameDestroyOpcode()) {
+ if (RefsInMBB.count(FoldPt))
+ return 0;
+ ++FoldPt;
+ }
+
+ if (FoldPt == MBB->getFirstTerminator())
+ return 0;
+ else
+ ++FoldPt;
+
+ // Now find the restore point.
+ while (FoldPt != MBB->getFirstTerminator() && !RefsInMBB.count(FoldPt)) {
if (FoldPt->getOpcode() == TRI->getCallFrameSetupOpcode()) {
while (FoldPt != MBB->getFirstTerminator() &&
FoldPt->getOpcode() != TRI->getCallFrameDestroyOpcode()) {
@@ -1031,8 +1050,11 @@
++FoldPt;
}
- ++FoldPt;
- }
+ if (FoldPt == MBB->getFirstTerminator())
+ return 0;
+ }
+
+ ++FoldPt;
}
if (FoldPt == MBB->getFirstTerminator())
@@ -1054,7 +1076,7 @@
if (FMI) {
LIs->ReplaceMachineInstrInMaps(FoldPt, FMI);
FMI = MBB->insert(MBB->erase(FoldPt), FMI);
- ++NumFolds;
+ ++NumRestoreFolds;
}
return FMI;
@@ -1171,6 +1193,7 @@
if (MachineInstr* LMI = FoldRestore(CurrLI->reg, RC, Barrier,
BarrierMBB, SS, RefsInMBB)) {
RestorePt = LMI;
+ RestoreIndex = LIs->getInstructionIndex(RestorePt);
FoldedRestore = true;
} else {
TII->loadRegFromStackSlot(*BarrierMBB, RestorePt, CurrLI->reg, SS, RC);
Modified: llvm/branches/Apple/Dib/lib/ExecutionEngine/JIT/JITEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/ExecutionEngine/JIT/JITEmitter.cpp?rev=66204&r1=66203&r2=66204&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/lib/ExecutionEngine/JIT/JITEmitter.cpp (original)
+++ llvm/branches/Apple/Dib/lib/ExecutionEngine/JIT/JITEmitter.cpp Thu Mar 5 14:59:57 2009
@@ -204,7 +204,7 @@
TheJIT->updateGlobalMapping(F, Stub);
}
- cerr << "JIT: Stub emitted at [" << Stub << "] for function '"
+ DOUT << "JIT: Stub emitted at [" << Stub << "] for function '"
<< F->getName() << "'\n";
// Finally, keep track of the stub-to-Function mapping so that the
More information about the llvm-commits
mailing list