1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/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 Workerdefine i32 @test1(i32 %x) nounwind { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1( 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: a: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[I:%.*]] = shl i32 %x, 1 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[I]], 24 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[DOT:%.*]] = select i1 [[COND]], i32 5, i32 0 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[DOT]] 11*9880d681SAndroid Build Coastguard Worker; 12*9880d681SAndroid Build Coastguard Worker %i = shl i32 %x, 1 13*9880d681SAndroid Build Coastguard Worker switch i32 %i, label %a [ 14*9880d681SAndroid Build Coastguard Worker i32 21, label %b 15*9880d681SAndroid Build Coastguard Worker i32 24, label %c 16*9880d681SAndroid Build Coastguard Worker ] 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workera: 19*9880d681SAndroid Build Coastguard Worker ret i32 0 20*9880d681SAndroid Build Coastguard Workerb: 21*9880d681SAndroid Build Coastguard Worker ret i32 3 22*9880d681SAndroid Build Coastguard Workerc: 23*9880d681SAndroid Build Coastguard Worker ret i32 5 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %x) nounwind { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2( 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: a: 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 31*9880d681SAndroid Build Coastguard Worker; 32*9880d681SAndroid Build Coastguard Worker %i = shl i32 %x, 1 33*9880d681SAndroid Build Coastguard Worker switch i32 %i, label %a [ 34*9880d681SAndroid Build Coastguard Worker i32 21, label %b 35*9880d681SAndroid Build Coastguard Worker i32 23, label %c 36*9880d681SAndroid Build Coastguard Worker ] 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workera: 39*9880d681SAndroid Build Coastguard Worker ret i32 0 40*9880d681SAndroid Build Coastguard Workerb: 41*9880d681SAndroid Build Coastguard Worker ret i32 3 42*9880d681SAndroid Build Coastguard Workerc: 43*9880d681SAndroid Build Coastguard Worker ret i32 5 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; We're sign extending an 8-bit value. 47*9880d681SAndroid Build Coastguard Worker; The switch condition must be in the range [-128, 127], so any cases outside of that range must be dead. 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine i1 @repeated_signbits(i8 %condition) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @repeated_signbits( 51*9880d681SAndroid Build Coastguard Worker; CHECK: switch i32 52*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: i32 -128, label %a 53*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: i32 -1, label %a 54*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: i32 0, label %a 55*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: i32 127, label %a 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ] 57*9880d681SAndroid Build Coastguard Worker; 58*9880d681SAndroid Build Coastguard Workerentry: 59*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %condition to i32 60*9880d681SAndroid Build Coastguard Worker switch i32 %sext, label %default [ 61*9880d681SAndroid Build Coastguard Worker i32 -2147483648, label %a 62*9880d681SAndroid Build Coastguard Worker i32 -129, label %a 63*9880d681SAndroid Build Coastguard Worker i32 -128, label %a 64*9880d681SAndroid Build Coastguard Worker i32 -1, label %a 65*9880d681SAndroid Build Coastguard Worker i32 0, label %a 66*9880d681SAndroid Build Coastguard Worker i32 127, label %a 67*9880d681SAndroid Build Coastguard Worker i32 128, label %a 68*9880d681SAndroid Build Coastguard Worker i32 2147483647, label %a 69*9880d681SAndroid Build Coastguard Worker ] 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workera: 72*9880d681SAndroid Build Coastguard Worker ret i1 1 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefault: 75*9880d681SAndroid Build Coastguard Worker ret i1 0 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78