diff options
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineBasicBlock.h | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/CodeGen.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineBasicBlock.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegionInfo.cpp | 20 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/machine-region-info.mir | 86 |
5 files changed, 101 insertions, 10 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h index ff9544c94ab..6f3f4ff4563 100644 --- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h +++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h @@ -128,7 +128,7 @@ public: /// to an LLVM basic block. const BasicBlock *getBasicBlock() const { return BB; } - /// Return the name of the corresponding LLVM basic block, or "(null)". + /// Return the name of the corresponding LLVM basic block, or an empty string. StringRef getName() const; /// Return a formatted string to identify this block and its parent function. diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 9fb796a6d20..25a865a0119 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -58,6 +58,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeMachineModuleInfoPass(Registry); initializeMachinePipelinerPass(Registry); initializeMachinePostDominatorTreePass(Registry); + initializeMachineRegionInfoPassPass(Registry); initializeMachineSchedulerPass(Registry); initializeMachineSinkingPass(Registry); initializeMachineVerifierPassPass(Registry); diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp index 4e91bb07aed..cbb69702269 100644 --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -232,7 +232,7 @@ StringRef MachineBasicBlock::getName() const { if (const BasicBlock *LBB = getBasicBlock()) return LBB->getName(); else - return "(null)"; + return StringRef("", 0); } /// Return a hopefully unique identifier for this block. diff --git a/llvm/lib/CodeGen/MachineRegionInfo.cpp b/llvm/lib/CodeGen/MachineRegionInfo.cpp index fc32183c7f6..254eb44d991 100644 --- a/llvm/lib/CodeGen/MachineRegionInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegionInfo.cpp @@ -4,7 +4,7 @@ #include "llvm/Analysis/RegionInfoImpl.h" #include "llvm/CodeGen/MachinePostDominators.h" -#define DEBUG_TYPE "region" +#define DEBUG_TYPE "machine-region-info" using namespace llvm; @@ -86,6 +86,9 @@ bool MachineRegionInfoPass::runOnMachineFunction(MachineFunction &F) { auto DF = &getAnalysis<MachineDominanceFrontier>(); RI.recalculate(F, DT, PDT, DF); + + DEBUG(RI.dump()); + return false; } @@ -103,9 +106,10 @@ void MachineRegionInfoPass::verifyAnalysis() const { void MachineRegionInfoPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); - AU.addRequiredTransitive<DominatorTreeWrapperPass>(); - AU.addRequired<PostDominatorTreeWrapperPass>(); - AU.addRequired<DominanceFrontierWrapperPass>(); + AU.addRequired<MachineDominatorTree>(); + AU.addRequired<MachinePostDominatorTree>(); + AU.addRequired<MachineDominanceFrontier>(); + MachineFunctionPass::getAnalysisUsage(AU); } void MachineRegionInfoPass::print(raw_ostream &OS, const Module *) const { @@ -120,13 +124,13 @@ LLVM_DUMP_METHOD void MachineRegionInfoPass::dump() const { char MachineRegionInfoPass::ID = 0; -INITIALIZE_PASS_BEGIN(MachineRegionInfoPass, "regions", - "Detect single entry single exit regions", true, true) +INITIALIZE_PASS_BEGIN(MachineRegionInfoPass, DEBUG_TYPE, + "Detect single entry single exit regions", true, true) INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree) INITIALIZE_PASS_DEPENDENCY(MachinePostDominatorTree) INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontier) -INITIALIZE_PASS_END(MachineRegionInfoPass, "regions", - "Detect single entry single exit regions", true, true) +INITIALIZE_PASS_END(MachineRegionInfoPass, DEBUG_TYPE, + "Detect single entry single exit regions", true, true) // Create methods available outside of this file, to use them // "include/llvm/LinkAllPasses.h". Otherwise the pass would be deleted by diff --git a/llvm/test/CodeGen/X86/machine-region-info.mir b/llvm/test/CodeGen/X86/machine-region-info.mir new file mode 100644 index 00000000000..b2037d4f6f0 --- /dev/null +++ b/llvm/test/CodeGen/X86/machine-region-info.mir @@ -0,0 +1,86 @@ +# RUN: llc -run-pass=machine-region-info %s -debug-only=machine-region-info -o /dev/null 2>&1 | FileCheck %s + +--- | + define void @fun() { ret void } +... +--- +name: fun +body: | + bb.0: + successors: %bb.1(0x40000000), %bb.7(0x40000000) + + CMP32ri8 %edi, 40, implicit-def %eflags + JNE_1 %bb.7, implicit killed %eflags + JMP_1 %bb.1 + + bb.1: + successors: %bb.2(0x40000000), %bb.11(0x40000000) + + CMP32ri8 %edi, 1, implicit-def %eflags + JNE_1 %bb.11, implicit killed %eflags + JMP_1 %bb.2 + + bb.2: + successors: %bb.3(0x40000000), %bb.5(0x40000000) + + CMP32ri8 %edi, 2, implicit-def %eflags + JNE_1 %bb.5, implicit killed %eflags + JMP_1 %bb.3 + + bb.3: + successors: %bb.4(0x40000000), %bb.5(0x40000000) + + CMP32ri8 %edi, 90, implicit-def %eflags + JNE_1 %bb.5, implicit killed %eflags + JMP_1 %bb.4 + + bb.4: + successors: %bb.5(0x80000000) + + bb.5: + successors: %bb.6(0x40000000), %bb.11(0x40000000) + + CMP32ri8 %edi, 4, implicit-def %eflags + JNE_1 %bb.11, implicit killed %eflags + JMP_1 %bb.6 + + bb.6: + successors: %bb.11(0x80000000) + + JMP_1 %bb.11 + + bb.7: + successors: %bb.9(0x40000000), %bb.8(0x40000000) + + CMP32ri8 %edi, 5, implicit-def %eflags + JE_1 %bb.9, implicit killed %eflags + JMP_1 %bb.8 + + bb.8: + successors: %bb.9(0x80000000) + + bb.9: + successors: %bb.11(0x40000000), %bb.10(0x40000000) + + CMP32ri8 %edi, 6, implicit-def %eflags + JE_1 %bb.11, implicit killed %eflags + JMP_1 %bb.10 + + bb.10: + successors: %bb.11(0x80000000) + + bb.11: + RET 0 + +... + +# CHECK: Region tree: +# CHECK-NEXT: [0] BB#0 => <Function Return> +# CHECK-NEXT: [1] BB#0 => BB#11 +# CHECK-NEXT: [2] BB#1 => BB#11 +# CHECK-NEXT: [3] BB#2 => BB#5 +# CHECK-NEXT: [4] BB#3 => BB#5 +# CHECK-NEXT: [3] BB#5 => BB#11 +# CHECK-NEXT: [2] BB#7 => BB#9 +# CHECK-NEXT: [2] BB#9 => BB#11 +# CHECK-NEXT: End region tree |

