I think you broke clang's test/CodeGenObjC/exceptions.m which now branches to a block with "ret void" instead of ret void'ing itself. Please take a look!<div><br></div><div>Nick<br><div><br><div class="gmail_quote">

On 27 January 2011 18:19, Evan Cheng <span dir="ltr"><<a href="mailto:evan.cheng@apple.com">evan.cheng@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Author: evancheng<br>
Date: Thu Jan 27 20:19:21 2011<br>
New Revision: 124462<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=124462&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=124462&view=rev</a><br>
Log:<br>
- Stop simplifycfg from duplicating "ret" instructions into unconditional<br>
  branches. PR8575, rdar://5134905, rdar://8911460.<br>
- Allow codegen tail duplication to dup small return blocks after register<br>
  allocation is done.<br>
<br>
Removed:<br>
    llvm/trunk/test/CodeGen/X86/critical-edge-split.ll<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/TailDuplication.cpp<br>
    llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp<br>
    llvm/trunk/test/CodeGen/X86/loop-blocks.ll<br>
    llvm/trunk/test/Transforms/JumpThreading/and-and-cond.ll<br>
    llvm/trunk/test/Transforms/JumpThreading/and-cond.ll<br>
    llvm/trunk/test/Transforms/JumpThreading/thread-loads.ll<br>
    llvm/trunk/test/Transforms/SimplifyCFG/MagicPointer.ll<br>
    llvm/trunk/test/Transforms/SimplifyCFG/basictest.ll<br>
    llvm/trunk/test/Transforms/SimplifyCFG/switch_create.ll<br>
    llvm/trunk/test/Transforms/SimplifyCFG/switch_formation.dbg.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/TailDuplication.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TailDuplication.cpp?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TailDuplication.cpp?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/TailDuplication.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/TailDuplication.cpp Thu Jan 27 20:19:21 2011<br>
@@ -465,9 +465,12 @@<br>
     MaxDuplicateCount = TailDuplicateSize;<br>
<br>
   if (PreRegAlloc) {<br>
-      // Pre-regalloc tail duplication hurts compile time and doesn't help<br>
-      // much except for indirect branches.<br>
-    if (TailBB->empty() || !TailBB->back().getDesc().isIndirectBranch())<br>
+    if (TailBB->empty())<br>
+      return false;<br>
+    const TargetInstrDesc &TID = TailBB->back().getDesc();<br>
+    // Pre-regalloc tail duplication hurts compile time and doesn't help<br>
+    // much except for indirect branches and returns.<br>
+    if (!TID.isIndirectBranch() && !TID.isReturn())<br>
       return false;<br>
     // If the target has hardware branch prediction that can handle indirect<br>
     // branches, duplicating them can often make them predictable when there<br>
@@ -502,7 +505,7 @@<br>
   }<br>
   // Heuristically, don't tail-duplicate calls if it would expand code size,<br>
   // as it's less likely to be worth the extra cost.<br>
-  if (InstrCount > 1 && HasCall)<br>
+  if (InstrCount > 1 && (PreRegAlloc && HasCall))<br>
     return false;<br>
<br>
   DEBUG(dbgs() << "\n*** Tail-duplicating BB#" << TailBB->getNumber() << '\n');<br>
<br>
Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Thu Jan 27 20:19:21 2011<br>
@@ -28,6 +28,7 @@<br>
 #include "llvm/ADT/Statistic.h"<br>
 #include "llvm/ADT/STLExtras.h"<br>
 #include "llvm/Support/CFG.h"<br>
+#include "llvm/Support/CommandLine.h"<br>
 #include "llvm/Support/ConstantRange.h"<br>
 #include "llvm/Support/Debug.h"<br>
 #include "llvm/Support/raw_ostream.h"<br>
@@ -36,6 +37,10 @@<br>
 #include <map><br>
 using namespace llvm;<br>
<br>
+static cl::opt<bool><br>
+DupRet("simplifycfg-dup-ret", cl::Hidden, cl::init(false),<br>
+       cl::desc("Duplicate return instructions into unconditional branches"));<br>
+<br>
 STATISTIC(NumSpeculations, "Number of speculative executed instructions");<br>
<br>
 namespace {<br>
@@ -2027,7 +2032,7 @@<br>
   }<br>
<br>
   // If we found some, do the transformation!<br>
-  if (!UncondBranchPreds.empty()) {<br>
+  if (!UncondBranchPreds.empty() && DupRet) {<br>
     while (!UncondBranchPreds.empty()) {<br>
       BasicBlock *Pred = UncondBranchPreds.pop_back_val();<br>
       DEBUG(dbgs() << "FOLDING: " << *BB<br>
<br>
Removed: llvm/trunk/test/CodeGen/X86/critical-edge-split.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/critical-edge-split.ll?rev=124461&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/critical-edge-split.ll?rev=124461&view=auto</a><br>


==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/critical-edge-split.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/critical-edge-split.ll (removed)<br>
@@ -1,50 +0,0 @@<br>
-; RUN: llc < %s -mtriple=i386-apple-darwin -o /dev/null -stats -info-output-file - | grep asm-printer | grep 29<br>
-<br>
-       %CC = type { %Register }<br>
-       %II = type { %"struct.XX::II::$_74" }<br>
-       %JITFunction = type %YYValue* (%CC*, %YYValue**)<br>
-       %YYValue = type { i32 (...)** }<br>
-       %Register = type { %"struct.XX::ByteCodeFeatures" }<br>
-       %"struct.XX::ByteCodeFeatures" = type { i32 }<br>
-       %"struct.XX::II::$_74" = type { i8* }<br>
-@llvm.used = appending global [1 x i8*] [ i8* bitcast (%JITFunction* @loop to i8*) ], section "llvm.metadata"          ; <[1 x i8*]*> [#uses=0]<br>
-<br>
-define %YYValue* @loop(%CC*, %YYValue**) nounwind {<br>
-; <label>:2<br>
-       %3 = getelementptr %CC* %0, i32 -9              ; <%CC*> [#uses=1]<br>
-       %4 = bitcast %CC* %3 to %YYValue**              ; <%YYValue**> [#uses=2]<br>
-       %5 = load %YYValue** %4         ; <%YYValue*> [#uses=3]<br>
-       %unique_1.i = ptrtoint %YYValue* %5 to i1               ; <i1> [#uses=1]<br>
-       br i1 %unique_1.i, label %loop, label %11<br>
-<br>
-loop:          ; preds = %6, %2<br>
-       %.1 = phi %YYValue* [ inttoptr (i32 1 to %YYValue*), %2 ], [ %intAddValue, %6 ]         ; <%YYValue*> [#uses=3]<br>
-       %immediateCmp = icmp slt %YYValue* %.1, %5              ; <i1> [#uses=1]<br>
-       br i1 %immediateCmp, label %6, label %8<br>
-<br>
-; <label>:6            ; preds = %loop<br>
-       %lhsInt = ptrtoint %YYValue* %.1 to i32         ; <i32> [#uses=1]<br>
-       %7 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %lhsInt, i32 2)          ; <{ i32, i1 }> [#uses=2]<br>
-       %intAdd = extractvalue { i32, i1 } %7, 0                ; <i32> [#uses=1]<br>
-       %intAddValue = inttoptr i32 %intAdd to %YYValue*                ; <%YYValue*> [#uses=1]<br>
-       %intAddOverflow = extractvalue { i32, i1 } %7, 1                ; <i1> [#uses=1]<br>
-       br i1 %intAddOverflow, label %.loopexit, label %loop<br>
-<br>
-; <label>:8            ; preds = %loop<br>
-       ret %YYValue* inttoptr (i32 10 to %YYValue*)<br>
-<br>
-.loopexit:             ; preds = %6<br>
-       %9 = bitcast %CC* %0 to %YYValue**              ; <%YYValue**> [#uses=1]<br>
-       store %YYValue* %.1, %YYValue** %9<br>
-       store %YYValue* %5, %YYValue** %4<br>
-       %10 = call fastcc %YYValue* @foobar(%II* inttoptr (i32 3431104 to %II*), %CC* %0, %YYValue** %1)                ; <%YYValue*> [#uses=1]<br>
-       ret %YYValue* %10<br>
-<br>
-; <label>:11           ; preds = %2<br>
-       %12 = call fastcc %YYValue* @foobar(%II* inttoptr (i32 3431080 to %II*), %CC* %0, %YYValue** %1)                ; <%YYValue*> [#uses=1]<br>
-       ret %YYValue* %12<br>
-}<br>
-<br>
-declare fastcc %YYValue* @foobar(%II*, %CC*, %YYValue**) nounwind<br>
-<br>
-declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) nounwind<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/loop-blocks.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/loop-blocks.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/loop-blocks.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/loop-blocks.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/loop-blocks.ll Thu Jan 27 20:19:21 2011<br>
@@ -70,6 +70,7 @@<br>
<br>
 ; Same as slightly_more_involved, but block_a is now a CFG diamond with<br>
 ; fallthrough edges which should be preserved.<br>
+; "callq block_a_merge_func" is tail duped.<br>
<br>
 ; CHECK: yet_more_involved:<br>
 ;      CHECK:   jmp .LBB2_1<br>
@@ -78,12 +79,12 @@<br>
 ; CHECK-NEXT:   callq bar99<br>
 ; CHECK-NEXT:   callq get<br>
 ; CHECK-NEXT:   cmpl $2999, %eax<br>
-; CHECK-NEXT:   jg .LBB2_6<br>
-; CHECK-NEXT:   callq block_a_true_func<br>
-; CHECK-NEXT:   jmp .LBB2_7<br>
-; CHECK-NEXT: .LBB2_6:<br>
+; CHECK-NEXT:   jle .LBB2_5<br>
 ; CHECK-NEXT:   callq block_a_false_func<br>
-; CHECK-NEXT: .LBB2_7:<br>
+; CHECK-NEXT:   callq block_a_merge_func<br>
+; CHECK-NEXT:   jmp .LBB2_1<br>
+; CHECK-NEXT: .LBB2_5:<br>
+; CHECK-NEXT:   callq block_a_true_func<br>
 ; CHECK-NEXT:   callq block_a_merge_func<br>
 ; CHECK-NEXT: .LBB2_1:<br>
 ; CHECK-NEXT:   callq body<br>
<br>
Modified: llvm/trunk/test/Transforms/JumpThreading/and-and-cond.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/and-and-cond.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/and-and-cond.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/JumpThreading/and-and-cond.ll (original)<br>
+++ llvm/trunk/test/Transforms/JumpThreading/and-and-cond.ll Thu Jan 27 20:19:21 2011<br>
@@ -1,14 +1,14 @@<br>
-; RUN: opt < %s -jump-threading -mem2reg -instcombine -simplifycfg  -S | grep {ret i32 %v1}<br>
-; There should be no uncond branches left.<br>
-; RUN: opt < %s -jump-threading -mem2reg -instcombine -simplifycfg  -S | not grep {br label}<br>
+; RUN: opt < %s -jump-threading -mem2reg -instcombine -simplifycfg  -S | FileCheck %s<br>
<br>
 declare i32 @f1()<br>
 declare i32 @f2()<br>
 declare void @f3()<br>
<br>
 define i32 @test(i1 %cond, i1 %cond2, i1 %cond3) {<br>
+; CHECK: test<br>
        br i1 %cond, label %T1, label %F1<br>
<br>
+; CHECK-NOT: T1:<br>
 T1:<br>
        %v1 = call i32 @f1()<br>
        br label %Merge<br>
@@ -18,6 +18,10 @@<br>
        br label %Merge<br>
<br>
 Merge:<br>
+; CHECK: Merge:<br>
+; CHECK: %v1 = call i32 @f1()<br>
+; CHECK-NEXT: %D = and i1 %cond2, %cond3<br>
+; CHECK-NEXT: br i1 %D<br>
        %A = phi i1 [true, %T1], [false, %F1]<br>
        %B = phi i32 [%v1, %T1], [%v2, %F1]<br>
        %C = and i1 %A, %cond2<br>
<br>
Modified: llvm/trunk/test/Transforms/JumpThreading/and-cond.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/and-cond.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/and-cond.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/JumpThreading/and-cond.ll (original)<br>
+++ llvm/trunk/test/Transforms/JumpThreading/and-cond.ll Thu Jan 27 20:19:21 2011<br>
@@ -1,14 +1,14 @@<br>
-; RUN: opt < %s -jump-threading -mem2reg -instcombine -simplifycfg  -S | grep {ret i32 %v1}<br>
-; There should be no uncond branches left.<br>
-; RUN: opt < %s -jump-threading -mem2reg -instcombine -simplifycfg  -S | not grep {br label}<br>
+; RUN: opt < %s -jump-threading -mem2reg -instcombine -simplifycfg  -S | FileCheck %s<br>
<br>
 declare i32 @f1()<br>
 declare i32 @f2()<br>
 declare void @f3()<br>
<br>
 define i32 @test(i1 %cond, i1 %cond2) {<br>
+; CHECK: test<br>
        br i1 %cond, label %T1, label %F1<br>
<br>
+; CHECK-NOT: T1<br>
 T1:<br>
        %v1 = call i32 @f1()<br>
        br label %Merge<br>
@@ -18,6 +18,9 @@<br>
        br label %Merge<br>
<br>
 Merge:<br>
+; CHECK: Merge:<br>
+; CHECK: %v1 = call i32 @f1()<br>
+; CHECK-NEXT: br i1 %cond2<br>
        %A = phi i1 [true, %T1], [false, %F1]<br>
        %B = phi i32 [%v1, %T1], [%v2, %F1]<br>
        %C = and i1 %A, %cond2<br>
<br>
Modified: llvm/trunk/test/Transforms/JumpThreading/thread-loads.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/thread-loads.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/thread-loads.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/JumpThreading/thread-loads.ll (original)<br>
+++ llvm/trunk/test/Transforms/JumpThreading/thread-loads.ll Thu Jan 27 20:19:21 2011<br>
@@ -1,4 +1,4 @@<br>
-; RUN: opt < %s -jump-threading -simplifycfg -S | grep {ret i32 1}<br>
+; RUN: opt < %s -jump-threading -S | FileCheck %s<br>
 ; rdar://6402033<br>
<br>
 ; Test that we can thread through the block with the partially redundant load (%2).<br>
@@ -6,12 +6,16 @@<br>
 target triple = "i386-apple-darwin7"<br>
<br>
 define i32 @foo(i32* %P) nounwind {<br>
+; CHECK: foo<br>
 entry:<br>
        %0 = tail call i32 (...)* @f1() nounwind                ; <i32> [#uses=1]<br>
        %1 = icmp eq i32 %0, 0          ; <i1> [#uses=1]<br>
        br i1 %1, label %bb1, label %bb<br>
<br>
 bb:            ; preds = %entry<br>
+; CHECK: bb1.thread:<br>
+; CHECK: store<br>
+; CHECK: br label %bb3<br>
        store i32 42, i32* %P, align 4<br>
        br label %bb1<br>
<br>
@@ -26,6 +30,9 @@<br>
        ret i32 %res.0<br>
<br>
 bb3:           ; preds = %bb1<br>
+; CHECK: bb3:<br>
+; CHECK: %res.01 = phi i32 [ 1, %bb1.thread ], [ 0, %bb1 ]<br>
+; CHECK: ret i32 %res.01<br>
        ret i32 %res.0<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/test/Transforms/SimplifyCFG/MagicPointer.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/MagicPointer.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/MagicPointer.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/SimplifyCFG/MagicPointer.ll (original)<br>
+++ llvm/trunk/test/Transforms/SimplifyCFG/MagicPointer.ll Thu Jan 27 20:19:21 2011<br>
@@ -8,7 +8,6 @@<br>
 ; CHECK: i64 2, label<br>
 ; CHECK: i64 3, label<br>
 ; CHECK: i64 4, label<br>
-; CHECK-NOT: br<br>
 ; CHECK: }<br>
<br>
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"<br>
<br>
Modified: llvm/trunk/test/Transforms/SimplifyCFG/basictest.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/basictest.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/basictest.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/SimplifyCFG/basictest.ll (original)<br>
+++ llvm/trunk/test/Transforms/SimplifyCFG/basictest.ll Thu Jan 27 20:19:21 2011<br>
@@ -25,16 +25,6 @@<br>
 }<br>
<br>
<br>
-define void @test4() {<br>
-  br label %return<br>
-return:<br>
-  ret void<br>
-; CHECK: @test4<br>
-; CHECK-NEXT: ret void<br>
-}<br>
-@test4g = global i8* blockaddress(@test4, %return)<br>
-<br>
-<br>
 ; PR5795<br>
 define void @test5(i32 %A) {<br>
   switch i32 %A, label %return [<br>
<br>
Modified: llvm/trunk/test/Transforms/SimplifyCFG/switch_create.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/switch_create.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/switch_create.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/SimplifyCFG/switch_create.ll (original)<br>
+++ llvm/trunk/test/Transforms/SimplifyCFG/switch_create.ll Thu Jan 27 20:19:21 2011<br>
@@ -147,7 +147,7 @@<br>
 ; CHECK:       i32 16, label %UnifiedReturnBlock<br>
 ; CHECK:       i32 17, label %UnifiedReturnBlock<br>
 ; CHECK:       i32 18, label %UnifiedReturnBlock<br>
-; CHECK:       i32 19, label %switch.edge<br>
+; CHECK:       i32 19, label %UnifiedReturnBlock<br>
 ; CHECK:     ]<br>
 }<br>
<br>
@@ -441,3 +441,29 @@<br>
 ; CHECK-NOT: switch<br>
 ; CHECK: ret void<br>
 }<br>
+<br>
+; PR8675<br>
+; rdar://5134905<br>
+define zeroext i1 @test16(i32 %x) nounwind {<br>
+entry:<br>
+; CHECK: @test16<br>
+; CHECK: switch i32 %x, label %lor.rhs [<br>
+; CHECK:   i32 1, label %lor.end<br>
+; CHECK:   i32 2, label %lor.end<br>
+; CHECK:   i32 3, label %lor.end<br>
+; CHECK: ]<br>
+  %cmp.i = icmp eq i32 %x, 1<br>
+  br i1 %cmp.i, label %lor.end, label %lor.lhs.false<br>
+<br>
+lor.lhs.false:<br>
+  %cmp.i2 = icmp eq i32 %x, 2<br>
+  br i1 %cmp.i2, label %lor.end, label %lor.rhs<br>
+<br>
+lor.rhs:<br>
+  %cmp.i1 = icmp eq i32 %x, 3<br>
+  br label %lor.end<br>
+<br>
+lor.end:<br>
+  %0 = phi i1 [ true, %lor.lhs.false ], [ true, %entry ], [ %cmp.i1, %lor.rhs ]<br>
+  ret i1 %0<br>
+}<br>
<br>
Modified: llvm/trunk/test/Transforms/SimplifyCFG/switch_formation.dbg.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/switch_formation.dbg.ll?rev=124462&r1=124461&r2=124462&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/switch_formation.dbg.ll?rev=124462&r1=124461&r2=124462&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Transforms/SimplifyCFG/switch_formation.dbg.ll (original)<br>
+++ llvm/trunk/test/Transforms/SimplifyCFG/switch_formation.dbg.ll Thu Jan 27 20:19:21 2011<br>
@@ -1,5 +1,4 @@<br>
-; RUN: opt < %s -simplifycfg -S | not grep br<br>
-<br>
+; RUN: opt < %s -simplifycfg -S | FileCheck %s<br>
<br>
         %llvm.dbg.anchor.type = type { i32, i32 }<br>
         %llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8*, i1, i1, i8* }<br>
@@ -13,7 +12,16 @@<br>
<br>
 declare void @llvm.dbg.stoppoint(i32, i32, { }*) nounwind<br>
<br>
-define i1 @_ZN4llvm11SetCondInst7classofEPKNS_11InstructionE({ i32, i32 }* %I) {<br>
+define i1 @t({ i32, i32 }* %I) {<br>
+; CHECK: t<br>
+; CHECK:  switch i32 %tmp.2.i, label %shortcirc_next.4 [<br>
+; CHECK:    i32 14, label %UnifiedReturnBlock<br>
+; CHECK:    i32 15, label %UnifiedReturnBlock<br>
+; CHECK:    i32 16, label %UnifiedReturnBlock<br>
+; CHECK:    i32 17, label %UnifiedReturnBlock<br>
+; CHECK:    i32 18, label %UnifiedReturnBlock<br>
+; CHECK:    i32 19, label %UnifiedReturnBlock<br>
+; CHECK:  ]<br>
 entry:<br>
         %tmp.1.i = getelementptr { i32, i32 }* %I, i64 0, i32 1         ; <i32*> [#uses=1]<br>
         %tmp.2.i = load i32* %tmp.1.i           ; <i32> [#uses=6]<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>