AW: [PATCH] StructurizeCFG: Add dependency on LowerSwitch pass
Koenig, Christian
Christian.Koenig at amd.com
Wed Oct 2 05:20:36 PDT 2013
Sounds reasonable to me, the patch is:
Reviewed-by: Christian König <christian.koenig at amd.com>
Sent from my Android phone using TouchDown (www.nitrodesk.com)
-----Original Message-----
From: Tom Stellard [tom at stellard.net]
Received: Mittwoch, 02 Okt. 2013, 4:21
To: llvm-commits at cs.uiuc.edu [llvm-commits at cs.uiuc.edu]
CC: Arsenault, Matthew [Matthew.Arsenault at amd.com]; Koenig, Christian [Christian.Koenig at amd.com]; Stellard, Thomas [Tom.Stellard at amd.com]
Subject: [PATCH] StructurizeCFG: Add dependency on LowerSwitch pass
From: Tom Stellard <thomas.stellard at amd.com>
Switch instructions were crashing the StructurizeCFG pass, and it's
probably easier anyway if we don't need to handle them in this pass.
---
lib/Transforms/Scalar/StructurizeCFG.cpp | 4 +++-
test/Transforms/StructurizeCFG/switch.ll | 23 +++++++++++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)
create mode 100644 test/Transforms/StructurizeCFG/switch.ll
diff --git a/lib/Transforms/Scalar/StructurizeCFG.cpp b/lib/Transforms/Scalar/StructurizeCFG.cpp
index bb6f163..72fea80 100644
--- a/lib/Transforms/Scalar/StructurizeCFG.cpp
+++ b/lib/Transforms/Scalar/StructurizeCFG.cpp
@@ -231,7 +231,7 @@ public:
StructurizeCFG() :
RegionPass(ID) {
- initializeRegionInfoPass(*PassRegistry::getPassRegistry());
+ initializeStructurizeCFGPass(*PassRegistry::getPassRegistry());
}
using Pass::doInitialization;
@@ -244,6 +244,7 @@ public:
}
void getAnalysisUsage(AnalysisUsage &AU) const {
+ AU.addRequiredID(LowerSwitchID);
AU.addRequired<DominatorTree>();
AU.addPreserved<DominatorTree>();
RegionPass::getAnalysisUsage(AU);
@@ -256,6 +257,7 @@ char StructurizeCFG::ID = 0;
INITIALIZE_PASS_BEGIN(StructurizeCFG, "structurizecfg", "Structurize the CFG",
false, false)
+INITIALIZE_PASS_DEPENDENCY(LowerSwitch)
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
INITIALIZE_PASS_DEPENDENCY(RegionInfo)
INITIALIZE_PASS_END(StructurizeCFG, "structurizecfg", "Structurize the CFG",
diff --git a/test/Transforms/StructurizeCFG/switch.ll b/test/Transforms/StructurizeCFG/switch.ll
new file mode 100644
index 0000000..316df57
--- /dev/null
+++ b/test/Transforms/StructurizeCFG/switch.ll
@@ -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
+}
--
1.7.11.4
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131002/0b47f03b/attachment.html>
More information about the llvm-commits
mailing list