aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/BreakCriticalMachineEdge.h (renamed from lib/CodeGen/BreakCriticalMachineEdges.cpp)61
-rw-r--r--include/llvm/CodeGen/Passes.h4
-rw-r--r--lib/CodeGen/StrongPHIElimination.cpp1
-rw-r--r--lib/CodeGen/TwoAddressInstructionPass.cpp1
4 files changed, 13 insertions, 54 deletions
diff --git a/lib/CodeGen/BreakCriticalMachineEdges.cpp b/include/llvm/CodeGen/BreakCriticalMachineEdge.h
index 21d9dbbd6c..c02eaa784a 100644
--- a/lib/CodeGen/BreakCriticalMachineEdges.cpp
+++ b/include/llvm/CodeGen/BreakCriticalMachineEdge.h
@@ -1,4 +1,4 @@
-//===----------- BreakCriticalMachineEdges - Break critical edges ---------===//
+//===--------- BreakCriticalMachineEdges.h - Break critical edges ---------===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,44 +7,23 @@
//
//===---------------------------------------------------------------------===//
//
-// Break all of the critical edges in the CFG by inserting a dummy basic block.
-// This pass may be "required" by passes that cannot deal with critical edges.
-// Notice that this pass invalidates the CFG, because the same BasicBlock is
-// used as parameter for the src MachineBasicBlock and the new dummy
-// MachineBasicBlock.
+// Helper function to break a critical machine edge.
//
//===---------------------------------------------------------------------===//
-#include "llvm/CodeGen/Passes.h"
-#include "llvm/CodeGen/MachineFunctionPass.h"
+#ifndef LLVM_CODEGEN_ASMPRINTER_H
+#define LLVM_CODEGEN_ASMPRINTER_H
+
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetMachine.h"
-#include "llvm/ADT/Statistic.h"
#include "llvm/Support/Compiler.h"
-using namespace llvm;
+namespace llvm {
-namespace {
- struct VISIBILITY_HIDDEN BreakCriticalMachineEdges :
- public MachineFunctionPass {
- static char ID; // Pass identification
- BreakCriticalMachineEdges() : MachineFunctionPass((intptr_t)&ID) {}
-
- bool runOnMachineFunction(MachineFunction& Fn);
- void splitCriticalEdge(MachineBasicBlock* A, MachineBasicBlock* B);
- };
-
- char BreakCriticalMachineEdges::ID = 0;
- RegisterPass<BreakCriticalMachineEdges> X("critical-machine-edges",
- "Break critical machine code edges");
-}
-
-const PassInfo *llvm::BreakCriticalMachineEdgesID = X.getPassInfo();
-
-void BreakCriticalMachineEdges::splitCriticalEdge(MachineBasicBlock* src,
- MachineBasicBlock* dst) {
+MachineBasicBlock* SplitCriticalMachineEdge(MachineBasicBlock* src,
+ MachineBasicBlock* dst) {
const BasicBlock* srcBB = src->getBasicBlock();
MachineBasicBlock* crit_mbb = new MachineBasicBlock(srcBB);
@@ -106,26 +85,10 @@ void BreakCriticalMachineEdges::splitCriticalEdge(MachineBasicBlock* src,
mii->getOperand(u).getMachineBasicBlock() == src)
mii->getOperand(u).setMachineBasicBlock(crit_mbb);
}
+
+ return crit_mbb;
}
-bool BreakCriticalMachineEdges::runOnMachineFunction(MachineFunction& F) {
- std::vector<MachineBasicBlock *> SourceBlocks;
- std::vector<MachineBasicBlock *> DestBlocks;
-
- for(MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
- for(MachineBasicBlock::succ_iterator SI = FI->succ_begin(),
- SE = FI->succ_end(); SI != SE; ++SI) {
- // predecessor with multiple successors, successor with multiple
- // predecessors.
- if (FI->succ_size() > 1 && (*SI)->pred_size() > 1) {
- SourceBlocks.push_back(FI);
- DestBlocks.push_back(*SI);
- }
- }
- }
-
- for(unsigned u = 0; u < SourceBlocks.size(); u++)
- splitCriticalEdge(SourceBlocks[u], DestBlocks[u]);
-
- return false;
}
+
+#endif
diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h
index 89e8ba9b37..5e93525ab4 100644
--- a/include/llvm/CodeGen/Passes.h
+++ b/include/llvm/CodeGen/Passes.h
@@ -58,10 +58,6 @@ namespace llvm {
///
extern const PassInfo *SimpleRegisterCoalescingID;
- /// BreakCriticalMachineEdges pass. Breaks critical edges between
- /// machine basic blocks.
- extern const PassInfo *BreakCriticalMachineEdgesID;
-
/// TwoAddressInstruction pass - This pass reduces two-address instructions to
/// use two operands. This destroys SSA information but it is desired by
/// register allocators.
diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp
index 5f84b586cb..f64186e8e8 100644
--- a/lib/CodeGen/StrongPHIElimination.cpp
+++ b/lib/CodeGen/StrongPHIElimination.cpp
@@ -21,6 +21,7 @@
#define DEBUG_TYPE "strongphielim"
#include "llvm/CodeGen/Passes.h"
+#include "llvm/CodeGen/BreakCriticalMachineEdge.h"
#include "llvm/CodeGen/LiveVariables.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
diff --git a/lib/CodeGen/TwoAddressInstructionPass.cpp b/lib/CodeGen/TwoAddressInstructionPass.cpp
index defd6ce6fb..b8d38dc229 100644
--- a/lib/CodeGen/TwoAddressInstructionPass.cpp
+++ b/lib/CodeGen/TwoAddressInstructionPass.cpp
@@ -70,7 +70,6 @@ void TwoAddressInstructionPass::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<LiveVariables>();
AU.addPreserved<LiveVariables>();
AU.addPreservedID(PHIEliminationID);
- AU.addPreservedID(BreakCriticalMachineEdgesID);
MachineFunctionPass::getAnalysisUsage(AU);
}