<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:11pt; color:black">
<span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:11pt; color:black">Sounds reasonable to me, the patch is:<br>
<br>
Reviewed-by: Christian König <christian.koenig@amd.com><br>
<br>
<br>
Sent from my Android phone using TouchDown (www.nitrodesk.com)<br>
<br>
<span style="color:black">-----Original Message----- <br>
<b>From:</b> Tom Stellard [tom@stellard.net]<br>
<b>Received:</b> Mittwoch, 02 Okt. 2013, 4:21<br>
<b>To:</b> llvm-commits@cs.uiuc.edu [llvm-commits@cs.uiuc.edu]<br>
<b>CC:</b> Arsenault, Matthew [Matthew.Arsenault@amd.com]; Koenig, Christian [Christian.Koenig@amd.com]; Stellard, Thomas [Tom.Stellard@amd.com]<br>
<b>Subject:</b> [PATCH] StructurizeCFG: Add dependency on LowerSwitch pass<br>
<br>
</span></span></div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">From: Tom Stellard <thomas.stellard@amd.com><br>
<br>
Switch instructions were crashing the StructurizeCFG pass, and it's<br>
probably easier anyway if we don't need to handle them in this pass.<br>
---<br>
 lib/Transforms/Scalar/StructurizeCFG.cpp |  4 +++-<br>
 test/Transforms/StructurizeCFG/switch.ll | 23 +++++++++++++++++++++++<br>
 2 files changed, 26 insertions(+), 1 deletion(-)<br>
 create mode 100644 test/Transforms/StructurizeCFG/switch.ll<br>
<br>
diff --git a/lib/Transforms/Scalar/StructurizeCFG.cpp b/lib/Transforms/Scalar/StructurizeCFG.cpp<br>
index bb6f163..72fea80 100644<br>
--- a/lib/Transforms/Scalar/StructurizeCFG.cpp<br>
+++ b/lib/Transforms/Scalar/StructurizeCFG.cpp<br>
@@ -231,7 +231,7 @@ public:<br>
 <br>
   StructurizeCFG() :<br>
     RegionPass(ID) {<br>
-    initializeRegionInfoPass(*PassRegistry::getPassRegistry());<br>
+    initializeStructurizeCFGPass(*PassRegistry::getPassRegistry());<br>
   }<br>
 <br>
   using Pass::doInitialization;<br>
@@ -244,6 +244,7 @@ public:<br>
   }<br>
 <br>
   void getAnalysisUsage(AnalysisUsage &AU) const {<br>
+    AU.addRequiredID(LowerSwitchID);<br>
     AU.addRequired<DominatorTree>();<br>
     AU.addPreserved<DominatorTree>();<br>
     RegionPass::getAnalysisUsage(AU);<br>
@@ -256,6 +257,7 @@ char StructurizeCFG::ID = 0;<br>
 <br>
 INITIALIZE_PASS_BEGIN(StructurizeCFG, "structurizecfg", "Structurize the CFG",<br>
                       false, false)<br>
+INITIALIZE_PASS_DEPENDENCY(LowerSwitch)<br>
 INITIALIZE_PASS_DEPENDENCY(DominatorTree)<br>
 INITIALIZE_PASS_DEPENDENCY(RegionInfo)<br>
 INITIALIZE_PASS_END(StructurizeCFG, "structurizecfg", "Structurize the CFG",<br>
diff --git a/test/Transforms/StructurizeCFG/switch.ll b/test/Transforms/StructurizeCFG/switch.ll<br>
new file mode 100644<br>
index 0000000..316df57<br>
--- /dev/null<br>
+++ b/test/Transforms/StructurizeCFG/switch.ll<br>
@@ -0,0 +1,23 @@<br>
+; RUN: opt -S -structurizecfg %s -o - | FileCheck %s<br>
+<br>
+; The structurizecfg pass cannot handle switch instructions, so we need to<br>
+; make sure the lower switch pass is always run before structurizecfg.<br>
+<br>
+; CHECK-LABEL: @switch<br>
+define void @switch(i32 addrspace(1)* %out, i32 %cond) nounwind {<br>
+entry:<br>
+; CHECK: icmp<br>
+  switch i32 %cond, label %done [ i32 0, label %zero]<br>
+<br>
+; CHECK: zero:<br>
+zero:<br>
+; CHECK: store i32 7, i32 addrspace(1)* %out<br>
+  store i32 7, i32 addrspace(1)* %out<br>
+; CHECK: br label %done<br>
+  br label %done<br>
+<br>
+; CHECK: done:<br>
+done:<br>
+; CHECK: ret void<br>
+  ret void<br>
+}<br>
-- <br>
1.7.11.4<br>
<br>
<br>
</div>
</span></font>
</body>
</html>