brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 8395895 Raw
154 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes=instcombine -S | FileCheck %s3declare void @subroutine(i16)4 5define void @test_as_arg(i8 %a, i8 %b) {6; CHECK-LABEL: define void @test_as_arg(7; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {8; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[A]], [[B]]9; CHECK-NEXT:    br i1 [[CMP]], label %[[COND_END:.*]], label %[[COND_FALSE:.*]]10; CHECK:       [[COND_FALSE]]:11; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i8 [[B]], [[A]]12; CHECK-NEXT:    [[CONV:%.*]] = zext nneg i8 [[SUB]] to i1613; CHECK-NEXT:    call void @subroutine(i16 [[CONV]])14; CHECK-NEXT:    br label %[[COND_END]]15; CHECK:       [[COND_END]]:16; CHECK-NEXT:    ret void17;18  %cmp = icmp sgt i8 %a, %b19  br i1 %cmp, label %cond.end, label %cond.false20 21cond.false:22  %sub = sub nsw i8 %b, %a23  %conv = sext i8 %sub to i1624  call void @subroutine(i16 %conv)25  br label %cond.end26 27cond.end:28  ret void29}30 31define i16 @test_as_retval(i8 %a, i8 %b) {32; CHECK-LABEL: define i16 @test_as_retval(33; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {34; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[A]], [[B]]35; CHECK-NEXT:    br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]36; CHECK:       [[COND_TRUE]]:37; CHECK-NEXT:    ret i16 038; CHECK:       [[COND_FALSE]]:39; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i8 [[B]], [[A]]40; CHECK-NEXT:    [[CONV:%.*]] = zext nneg i8 [[SUB]] to i1641; CHECK-NEXT:    ret i16 [[CONV]]42;43  %cmp = icmp sgt i8 %a, %b44  br i1 %cmp, label %cond.true, label %cond.false45 46cond.true:47  ret i16 048 49cond.false:50  %sub = sub nsw i8 %b, %a51  %conv = sext i8 %sub to i1652  ret i16 %conv53}54 55define void @test_as_arg_wrong_icmp(i8 %a, i8 %b) {56; CHECK-LABEL: define void @test_as_arg_wrong_icmp(57; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {58; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[A]], [[B]]59; CHECK-NEXT:    br i1 [[CMP]], label %[[COND_END:.*]], label %[[COND_FALSE:.*]]60; CHECK:       [[COND_FALSE]]:61; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i8 [[B]], [[A]]62; CHECK-NEXT:    [[CONV:%.*]] = sext i8 [[SUB]] to i1663; CHECK-NEXT:    call void @subroutine(i16 [[CONV]])64; CHECK-NEXT:    br label %[[COND_END]]65; CHECK:       [[COND_END]]:66; CHECK-NEXT:    ret void67;68  %cmp = icmp slt i8 %a, %b69  br i1 %cmp, label %cond.end, label %cond.false70 71cond.false:72  %sub = sub nsw i8 %b, %a73  %conv = sext i8 %sub to i1674  call void @subroutine(i16 %conv)75  br label %cond.end76 77cond.end:78  ret void79}80 81define void @test_as_arg_missing_nsw(i8 %a, i8 %b) {82; CHECK-LABEL: define void @test_as_arg_missing_nsw(83; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {84; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[A]], [[B]]85; CHECK-NEXT:    br i1 [[CMP]], label %[[COND_END:.*]], label %[[COND_FALSE:.*]]86; CHECK:       [[COND_FALSE]]:87; CHECK-NEXT:    [[SUB:%.*]] = sub i8 [[B]], [[A]]88; CHECK-NEXT:    [[CONV:%.*]] = sext i8 [[SUB]] to i1689; CHECK-NEXT:    call void @subroutine(i16 [[CONV]])90; CHECK-NEXT:    br label %[[COND_END]]91; CHECK:       [[COND_END]]:92; CHECK-NEXT:    ret void93;94  %cmp = icmp sgt i8 %a, %b95  br i1 %cmp, label %cond.end, label %cond.false96 97cond.false:98  %sub = sub i8 %b, %a99  %conv = sext i8 %sub to i16100  call void @subroutine(i16 %conv)101  br label %cond.end102 103cond.end:104  ret void105}106 107define i16 @test_as_retval_wrong_icmp(i8 %a, i8 %b) {108; CHECK-LABEL: define i16 @test_as_retval_wrong_icmp(109; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {110; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[A]], [[B]]111; CHECK-NEXT:    br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]112; CHECK:       [[COND_TRUE]]:113; CHECK-NEXT:    ret i16 0114; CHECK:       [[COND_FALSE]]:115; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i8 [[B]], [[A]]116; CHECK-NEXT:    [[CONV:%.*]] = sext i8 [[SUB]] to i16117; CHECK-NEXT:    ret i16 [[CONV]]118;119  %cmp = icmp slt i8 %a, %b120  br i1 %cmp, label %cond.true, label %cond.false121 122cond.true:123  ret i16 0124 125cond.false:126  %sub = sub nsw i8 %b, %a127  %conv = sext i8 %sub to i16128  ret i16 %conv129}130 131define i16 @test_as_retval_missing_nsw(i8 %a, i8 %b) {132; CHECK-LABEL: define i16 @test_as_retval_missing_nsw(133; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {134; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[A]], [[B]]135; CHECK-NEXT:    br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]136; CHECK:       [[COND_TRUE]]:137; CHECK-NEXT:    ret i16 0138; CHECK:       [[COND_FALSE]]:139; CHECK-NEXT:    [[SUB:%.*]] = sub i8 [[B]], [[A]]140; CHECK-NEXT:    [[CONV:%.*]] = sext i8 [[SUB]] to i16141; CHECK-NEXT:    ret i16 [[CONV]]142;143  %cmp = icmp sgt i8 %a, %b144  br i1 %cmp, label %cond.true, label %cond.false145 146cond.true:147  ret i16 0148 149cond.false:150  %sub = sub i8 %b, %a151  %conv = sext i8 %sub to i16152  ret i16 %conv153}154