1 ; NOTE: Assertions have been autogenerated by update_test_checks.py 2 ; RUN: opt < %s -simplifycfg -S | FileCheck %s 3 4 ; Test normal folding 5 define i32 @test1() { 6 ; CHECK-LABEL: @test1( 7 ; CHECK-NEXT: TheDest: 8 ; CHECK-NEXT: ret i32 1234 9 ; 10 switch i32 5, label %Default [ 11 i32 0, label %Foo 12 i32 1, label %Bar 13 i32 2, label %Baz 14 i32 5, label %TheDest 15 ] 16 Default: 17 ret i32 -1 18 Foo: 19 ret i32 -2 20 Bar: 21 ret i32 -3 22 Baz: 23 ret i32 -4 24 TheDest: 25 ret i32 1234 26 } 27 28 ; Test folding to default dest 29 define i32 @test2() { 30 ; CHECK-LABEL: @test2( 31 ; CHECK-NEXT: Default: 32 ; CHECK-NEXT: ret i32 1234 33 ; 34 switch i32 3, label %Default [ 35 i32 0, label %Foo 36 i32 1, label %Bar 37 i32 2, label %Baz 38 i32 5, label %TheDest 39 ] 40 Default: 41 ret i32 1234 42 Foo: 43 ret i32 -2 44 Bar: 45 ret i32 -5 46 Baz: 47 ret i32 -6 48 TheDest: 49 ret i32 -8 50 } 51 52 ; Test folding all to same dest 53 define i32 @test3(i1 %C) { 54 ; CHECK-LABEL: @test3( 55 ; CHECK-NEXT: TheDest: 56 ; CHECK-NEXT: ret i32 1234 57 ; 58 br i1 %C, label %Start, label %TheDest 59 Start: ; preds = %0 60 switch i32 3, label %TheDest [ 61 i32 0, label %TheDest 62 i32 1, label %TheDest 63 i32 2, label %TheDest 64 i32 5, label %TheDest 65 ] 66 TheDest: 67 ret i32 1234 68 } 69 70 ; Test folding switch -> branch 71 define i32 @test4(i32 %C) { 72 ; CHECK-LABEL: @test4( 73 ; CHECK-NEXT: L1: 74 ; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 %C, 0 75 ; CHECK-NEXT: [[DOT:%.*]] = select i1 [[COND]], i32 1, i32 0 76 ; CHECK-NEXT: ret i32 [[DOT]] 77 ; 78 switch i32 %C, label %L1 [ 79 i32 0, label %L2 80 ] 81 L1: 82 ret i32 0 83 L2: 84 ret i32 1 85 } 86 87 ; Can fold into a cond branch! 88 define i32 @test5(i32 %C) { 89 ; CHECK-LABEL: @test5( 90 ; CHECK-NEXT: L1: 91 ; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 %C, 0 92 ; CHECK-NEXT: [[DOT:%.*]] = select i1 [[COND]], i32 1, i32 0 93 ; CHECK-NEXT: ret i32 [[DOT]] 94 ; 95 switch i32 %C, label %L1 [ 96 i32 0, label %L2 97 i32 123, label %L1 98 ] 99 L1: 100 ret i32 0 101 L2: 102 ret i32 1 103 } 104 105