1*7c3bcc30SYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2*7c3bcc30SYingwei Zheng; RUN: opt %s -passes=instcombine -S | FileCheck %s 3*7c3bcc30SYingwei Zheng 4*7c3bcc30SYingwei Zhengdefine i1 @test_switch_with_zext(i16 %a, i1 %b, i1 %c) { 5*7c3bcc30SYingwei Zheng; CHECK-LABEL: define i1 @test_switch_with_zext( 6*7c3bcc30SYingwei Zheng; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) { 7*7c3bcc30SYingwei Zheng; CHECK-NEXT: entry: 8*7c3bcc30SYingwei Zheng; CHECK-NEXT: switch i16 [[A]], label [[SW_DEFAULT:%.*]] [ 9*7c3bcc30SYingwei Zheng; CHECK-NEXT: i16 37, label [[SW_BB:%.*]] 10*7c3bcc30SYingwei Zheng; CHECK-NEXT: i16 38, label [[SW_BB]] 11*7c3bcc30SYingwei Zheng; CHECK-NEXT: i16 39, label [[SW_BB]] 12*7c3bcc30SYingwei Zheng; CHECK-NEXT: ] 13*7c3bcc30SYingwei Zheng; CHECK: sw.bb: 14*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[B]] 15*7c3bcc30SYingwei Zheng; CHECK: sw.default: 16*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[C]] 17*7c3bcc30SYingwei Zheng; 18*7c3bcc30SYingwei Zhengentry: 19*7c3bcc30SYingwei Zheng %a.ext = zext i16 %a to i32 20*7c3bcc30SYingwei Zheng switch i32 %a.ext, label %sw.default [ 21*7c3bcc30SYingwei Zheng i32 37, label %sw.bb 22*7c3bcc30SYingwei Zheng i32 38, label %sw.bb 23*7c3bcc30SYingwei Zheng i32 39, label %sw.bb 24*7c3bcc30SYingwei Zheng ] 25*7c3bcc30SYingwei Zheng 26*7c3bcc30SYingwei Zhengsw.bb: 27*7c3bcc30SYingwei Zheng ret i1 %b 28*7c3bcc30SYingwei Zhengsw.default: 29*7c3bcc30SYingwei Zheng ret i1 %c 30*7c3bcc30SYingwei Zheng} 31*7c3bcc30SYingwei Zheng 32*7c3bcc30SYingwei Zhengdefine i1 @test_switch_with_sext(i16 %a, i1 %b, i1 %c) { 33*7c3bcc30SYingwei Zheng; CHECK-LABEL: define i1 @test_switch_with_sext( 34*7c3bcc30SYingwei Zheng; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) { 35*7c3bcc30SYingwei Zheng; CHECK-NEXT: entry: 36*7c3bcc30SYingwei Zheng; CHECK-NEXT: switch i16 [[A]], label [[SW_DEFAULT:%.*]] [ 37*7c3bcc30SYingwei Zheng; CHECK-NEXT: i16 37, label [[SW_BB:%.*]] 38*7c3bcc30SYingwei Zheng; CHECK-NEXT: i16 38, label [[SW_BB]] 39*7c3bcc30SYingwei Zheng; CHECK-NEXT: i16 39, label [[SW_BB]] 40*7c3bcc30SYingwei Zheng; CHECK-NEXT: ] 41*7c3bcc30SYingwei Zheng; CHECK: sw.bb: 42*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[B]] 43*7c3bcc30SYingwei Zheng; CHECK: sw.default: 44*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[C]] 45*7c3bcc30SYingwei Zheng; 46*7c3bcc30SYingwei Zhengentry: 47*7c3bcc30SYingwei Zheng %a.ext = sext i16 %a to i32 48*7c3bcc30SYingwei Zheng switch i32 %a.ext, label %sw.default [ 49*7c3bcc30SYingwei Zheng i32 37, label %sw.bb 50*7c3bcc30SYingwei Zheng i32 38, label %sw.bb 51*7c3bcc30SYingwei Zheng i32 39, label %sw.bb 52*7c3bcc30SYingwei Zheng ] 53*7c3bcc30SYingwei Zheng 54*7c3bcc30SYingwei Zhengsw.bb: 55*7c3bcc30SYingwei Zheng ret i1 %b 56*7c3bcc30SYingwei Zhengsw.default: 57*7c3bcc30SYingwei Zheng ret i1 %c 58*7c3bcc30SYingwei Zheng} 59*7c3bcc30SYingwei Zheng 60*7c3bcc30SYingwei Zheng; Negative tests 61*7c3bcc30SYingwei Zheng 62*7c3bcc30SYingwei Zhengdefine i1 @test_switch_with_zext_unreachable_case(i16 %a, i1 %b, i1 %c) { 63*7c3bcc30SYingwei Zheng; CHECK-LABEL: define i1 @test_switch_with_zext_unreachable_case( 64*7c3bcc30SYingwei Zheng; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) { 65*7c3bcc30SYingwei Zheng; CHECK-NEXT: entry: 66*7c3bcc30SYingwei Zheng; CHECK-NEXT: [[A_EXT:%.*]] = zext i16 [[A]] to i32 67*7c3bcc30SYingwei Zheng; CHECK-NEXT: switch i32 [[A_EXT]], label [[SW_DEFAULT:%.*]] [ 68*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 37, label [[SW_BB:%.*]] 69*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 38, label [[SW_BB]] 70*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 39, label [[SW_BB]] 71*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 65537, label [[SW_BB]] 72*7c3bcc30SYingwei Zheng; CHECK-NEXT: ] 73*7c3bcc30SYingwei Zheng; CHECK: sw.bb: 74*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[B]] 75*7c3bcc30SYingwei Zheng; CHECK: sw.default: 76*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[C]] 77*7c3bcc30SYingwei Zheng; 78*7c3bcc30SYingwei Zhengentry: 79*7c3bcc30SYingwei Zheng %a.ext = zext i16 %a to i32 80*7c3bcc30SYingwei Zheng switch i32 %a.ext, label %sw.default [ 81*7c3bcc30SYingwei Zheng i32 37, label %sw.bb 82*7c3bcc30SYingwei Zheng i32 38, label %sw.bb 83*7c3bcc30SYingwei Zheng i32 39, label %sw.bb 84*7c3bcc30SYingwei Zheng i32 65537, label %sw.bb 85*7c3bcc30SYingwei Zheng ] 86*7c3bcc30SYingwei Zheng 87*7c3bcc30SYingwei Zhengsw.bb: 88*7c3bcc30SYingwei Zheng ret i1 %b 89*7c3bcc30SYingwei Zhengsw.default: 90*7c3bcc30SYingwei Zheng ret i1 %c 91*7c3bcc30SYingwei Zheng} 92*7c3bcc30SYingwei Zheng 93*7c3bcc30SYingwei Zhengdefine i1 @test_switch_with_sext_unreachable_case(i16 %a, i1 %b, i1 %c) { 94*7c3bcc30SYingwei Zheng; CHECK-LABEL: define i1 @test_switch_with_sext_unreachable_case( 95*7c3bcc30SYingwei Zheng; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) { 96*7c3bcc30SYingwei Zheng; CHECK-NEXT: entry: 97*7c3bcc30SYingwei Zheng; CHECK-NEXT: [[A_EXT:%.*]] = sext i16 [[A]] to i32 98*7c3bcc30SYingwei Zheng; CHECK-NEXT: switch i32 [[A_EXT]], label [[SW_DEFAULT:%.*]] [ 99*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 37, label [[SW_BB:%.*]] 100*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 38, label [[SW_BB]] 101*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 39, label [[SW_BB]] 102*7c3bcc30SYingwei Zheng; CHECK-NEXT: i32 -65537, label [[SW_BB]] 103*7c3bcc30SYingwei Zheng; CHECK-NEXT: ] 104*7c3bcc30SYingwei Zheng; CHECK: sw.bb: 105*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[B]] 106*7c3bcc30SYingwei Zheng; CHECK: sw.default: 107*7c3bcc30SYingwei Zheng; CHECK-NEXT: ret i1 [[C]] 108*7c3bcc30SYingwei Zheng; 109*7c3bcc30SYingwei Zhengentry: 110*7c3bcc30SYingwei Zheng %a.ext = sext i16 %a to i32 111*7c3bcc30SYingwei Zheng switch i32 %a.ext, label %sw.default [ 112*7c3bcc30SYingwei Zheng i32 37, label %sw.bb 113*7c3bcc30SYingwei Zheng i32 38, label %sw.bb 114*7c3bcc30SYingwei Zheng i32 39, label %sw.bb 115*7c3bcc30SYingwei Zheng i32 -65537, label %sw.bb 116*7c3bcc30SYingwei Zheng ] 117*7c3bcc30SYingwei Zheng 118*7c3bcc30SYingwei Zhengsw.bb: 119*7c3bcc30SYingwei Zheng ret i1 %b 120*7c3bcc30SYingwei Zhengsw.default: 121*7c3bcc30SYingwei Zheng ret i1 %c 122*7c3bcc30SYingwei Zheng} 123