brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 3fedfdd Raw
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