brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · c094413 Raw
123 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt %s -passes=instcombine -S | FileCheck %s3 4define i1 @test_switch_with_zext(i16 %a, i1 %b, i1 %c) {5; CHECK-LABEL: define i1 @test_switch_with_zext(6; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    switch i16 [[A]], label [[SW_DEFAULT:%.*]] [9; CHECK-NEXT:      i16 37, label [[SW_BB:%.*]]10; CHECK-NEXT:      i16 38, label [[SW_BB]]11; CHECK-NEXT:      i16 39, label [[SW_BB]]12; CHECK-NEXT:    ]13; CHECK:       sw.bb:14; CHECK-NEXT:    ret i1 [[B]]15; CHECK:       sw.default:16; CHECK-NEXT:    ret i1 [[C]]17;18entry:19  %a.ext = zext i16 %a to i3220  switch i32 %a.ext, label %sw.default [21  i32 37, label %sw.bb22  i32 38, label %sw.bb23  i32 39, label %sw.bb24  ]25 26sw.bb:27  ret i1 %b28sw.default:29  ret i1 %c30}31 32define i1 @test_switch_with_sext(i16 %a, i1 %b, i1 %c) {33; CHECK-LABEL: define i1 @test_switch_with_sext(34; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) {35; CHECK-NEXT:  entry:36; CHECK-NEXT:    switch i16 [[A]], label [[SW_DEFAULT:%.*]] [37; CHECK-NEXT:      i16 37, label [[SW_BB:%.*]]38; CHECK-NEXT:      i16 38, label [[SW_BB]]39; CHECK-NEXT:      i16 39, label [[SW_BB]]40; CHECK-NEXT:    ]41; CHECK:       sw.bb:42; CHECK-NEXT:    ret i1 [[B]]43; CHECK:       sw.default:44; CHECK-NEXT:    ret i1 [[C]]45;46entry:47  %a.ext = sext i16 %a to i3248  switch i32 %a.ext, label %sw.default [49  i32 37, label %sw.bb50  i32 38, label %sw.bb51  i32 39, label %sw.bb52  ]53 54sw.bb:55  ret i1 %b56sw.default:57  ret i1 %c58}59 60; Negative tests61 62define i1 @test_switch_with_zext_unreachable_case(i16 %a, i1 %b, i1 %c) {63; CHECK-LABEL: define i1 @test_switch_with_zext_unreachable_case(64; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) {65; CHECK-NEXT:  entry:66; CHECK-NEXT:    [[A_EXT:%.*]] = zext i16 [[A]] to i3267; CHECK-NEXT:    switch i32 [[A_EXT]], label [[SW_DEFAULT:%.*]] [68; CHECK-NEXT:      i32 37, label [[SW_BB:%.*]]69; CHECK-NEXT:      i32 38, label [[SW_BB]]70; CHECK-NEXT:      i32 39, label [[SW_BB]]71; CHECK-NEXT:      i32 65537, label [[SW_BB]]72; CHECK-NEXT:    ]73; CHECK:       sw.bb:74; CHECK-NEXT:    ret i1 [[B]]75; CHECK:       sw.default:76; CHECK-NEXT:    ret i1 [[C]]77;78entry:79  %a.ext = zext i16 %a to i3280  switch i32 %a.ext, label %sw.default [81  i32 37, label %sw.bb82  i32 38, label %sw.bb83  i32 39, label %sw.bb84  i32 65537, label %sw.bb85  ]86 87sw.bb:88  ret i1 %b89sw.default:90  ret i1 %c91}92 93define i1 @test_switch_with_sext_unreachable_case(i16 %a, i1 %b, i1 %c) {94; CHECK-LABEL: define i1 @test_switch_with_sext_unreachable_case(95; CHECK-SAME: i16 [[A:%.*]], i1 [[B:%.*]], i1 [[C:%.*]]) {96; CHECK-NEXT:  entry:97; CHECK-NEXT:    [[A_EXT:%.*]] = sext i16 [[A]] to i3298; CHECK-NEXT:    switch i32 [[A_EXT]], label [[SW_DEFAULT:%.*]] [99; CHECK-NEXT:      i32 37, label [[SW_BB:%.*]]100; CHECK-NEXT:      i32 38, label [[SW_BB]]101; CHECK-NEXT:      i32 39, label [[SW_BB]]102; CHECK-NEXT:      i32 -65537, label [[SW_BB]]103; CHECK-NEXT:    ]104; CHECK:       sw.bb:105; CHECK-NEXT:    ret i1 [[B]]106; CHECK:       sw.default:107; CHECK-NEXT:    ret i1 [[C]]108;109entry:110  %a.ext = sext i16 %a to i32111  switch i32 %a.ext, label %sw.default [112  i32 37, label %sw.bb113  i32 38, label %sw.bb114  i32 39, label %sw.bb115  i32 -65537, label %sw.bb116  ]117 118sw.bb:119  ret i1 %b120sw.default:121  ret i1 %c122}123