90 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_neg(i32 %a) {5; CHECK-LABEL: define i1 @test_switch_with_neg(6; CHECK-SAME: i32 [[A:%.*]]) {7; CHECK-NEXT: entry:8; CHECK-NEXT: switch i32 [[A]], label [[SW_DEFAULT:%.*]] [9; CHECK-NEXT: i32 -37, label [[SW_BB:%.*]]10; CHECK-NEXT: i32 -38, label [[SW_BB]]11; CHECK-NEXT: i32 -39, label [[SW_BB]]12; CHECK-NEXT: ]13; CHECK: sw.bb:14; CHECK-NEXT: ret i1 true15; CHECK: sw.default:16; CHECK-NEXT: ret i1 false17;18entry:19 %a.neg = sub i32 0, %a20 switch i32 %a.neg, 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 true28sw.default:29 ret i1 false30}31 32define i1 @test_switch_with_sub(i32 %a) {33; CHECK-LABEL: define i1 @test_switch_with_sub(34; CHECK-SAME: i32 [[A:%.*]]) {35; CHECK-NEXT: entry:36; CHECK-NEXT: switch i32 [[A]], label [[SW_DEFAULT:%.*]] [37; CHECK-NEXT: i32 0, label [[SW_BB:%.*]]38; CHECK-NEXT: i32 -1, label [[SW_BB]]39; CHECK-NEXT: i32 -2, label [[SW_BB]]40; CHECK-NEXT: ]41; CHECK: sw.bb:42; CHECK-NEXT: ret i1 true43; CHECK: sw.default:44; CHECK-NEXT: ret i1 false45;46entry:47 %a.neg = sub i32 37, %a48 switch i32 %a.neg, 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 true56sw.default:57 ret i1 false58}59 60; Negative tests61 62define i1 @test_switch_with_sub_nonconst(i32 %a, i32 %b) {63; CHECK-LABEL: define i1 @test_switch_with_sub_nonconst(64; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {65; CHECK-NEXT: entry:66; CHECK-NEXT: [[A_NEG:%.*]] = sub i32 [[B]], [[A]]67; CHECK-NEXT: switch i32 [[A_NEG]], 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: ]72; CHECK: sw.bb:73; CHECK-NEXT: ret i1 true74; CHECK: sw.default:75; CHECK-NEXT: ret i1 false76;77entry:78 %a.neg = sub i32 %b, %a79 switch i32 %a.neg, label %sw.default [80 i32 37, label %sw.bb81 i32 38, label %sw.bb82 i32 39, label %sw.bb83 ]84 85sw.bb:86 ret i1 true87sw.default:88 ret i1 false89}90