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