mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-26 01:38:43 +00:00
StructurizeCFG: Add dependency on LowerSwitch pass
Switch instructions were crashing the StructurizeCFG pass, and it's probably easier anyway if we don't need to handle them in this pass. Reviewed-by: Christian König <christian.koenig@amd.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191841 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ea246d6af8
commit
af7ae9d689
@ -231,7 +231,7 @@ public:
|
|||||||
|
|
||||||
StructurizeCFG() :
|
StructurizeCFG() :
|
||||||
RegionPass(ID) {
|
RegionPass(ID) {
|
||||||
initializeRegionInfoPass(*PassRegistry::getPassRegistry());
|
initializeStructurizeCFGPass(*PassRegistry::getPassRegistry());
|
||||||
}
|
}
|
||||||
|
|
||||||
using Pass::doInitialization;
|
using Pass::doInitialization;
|
||||||
@ -244,6 +244,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void getAnalysisUsage(AnalysisUsage &AU) const {
|
void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||||
|
AU.addRequiredID(LowerSwitchID);
|
||||||
AU.addRequired<DominatorTree>();
|
AU.addRequired<DominatorTree>();
|
||||||
AU.addPreserved<DominatorTree>();
|
AU.addPreserved<DominatorTree>();
|
||||||
RegionPass::getAnalysisUsage(AU);
|
RegionPass::getAnalysisUsage(AU);
|
||||||
@ -256,6 +257,7 @@ char StructurizeCFG::ID = 0;
|
|||||||
|
|
||||||
INITIALIZE_PASS_BEGIN(StructurizeCFG, "structurizecfg", "Structurize the CFG",
|
INITIALIZE_PASS_BEGIN(StructurizeCFG, "structurizecfg", "Structurize the CFG",
|
||||||
false, false)
|
false, false)
|
||||||
|
INITIALIZE_PASS_DEPENDENCY(LowerSwitch)
|
||||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||||
INITIALIZE_PASS_DEPENDENCY(RegionInfo)
|
INITIALIZE_PASS_DEPENDENCY(RegionInfo)
|
||||||
INITIALIZE_PASS_END(StructurizeCFG, "structurizecfg", "Structurize the CFG",
|
INITIALIZE_PASS_END(StructurizeCFG, "structurizecfg", "Structurize the CFG",
|
||||||
|
23
test/Transforms/StructurizeCFG/switch.ll
Normal file
23
test/Transforms/StructurizeCFG/switch.ll
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
; RUN: opt -S -structurizecfg %s -o - | FileCheck %s
|
||||||
|
|
||||||
|
; The structurizecfg pass cannot handle switch instructions, so we need to
|
||||||
|
; make sure the lower switch pass is always run before structurizecfg.
|
||||||
|
|
||||||
|
; CHECK-LABEL: @switch
|
||||||
|
define void @switch(i32 addrspace(1)* %out, i32 %cond) nounwind {
|
||||||
|
entry:
|
||||||
|
; CHECK: icmp
|
||||||
|
switch i32 %cond, label %done [ i32 0, label %zero]
|
||||||
|
|
||||||
|
; CHECK: zero:
|
||||||
|
zero:
|
||||||
|
; CHECK: store i32 7, i32 addrspace(1)* %out
|
||||||
|
store i32 7, i32 addrspace(1)* %out
|
||||||
|
; CHECK: br label %done
|
||||||
|
br label %done
|
||||||
|
|
||||||
|
; CHECK: done:
|
||||||
|
done:
|
||||||
|
; CHECK: ret void
|
||||||
|
ret void
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user