brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · fd7e125 Raw
112 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 %s3 4define i1 @test-same-operands-sub-add-nsw-icmp-sgt(i8 %a, i8 %b) {5; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-sgt(6; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {7; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[B]], 08; CHECK-NEXT:    ret i1 [[CMP]]9;10  %sub = sub nsw i8 %a, %b11  %add = add nsw i8 %a, %b12  %cmp = icmp sgt i8 %sub, %add13  ret i1 %cmp14}15 16define i1 @test-same-operands-sub-add-nsw-icmp-slt(i8 %a, i8 %b) {17; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-slt(18; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {19; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[B]], 020; CHECK-NEXT:    ret i1 [[CMP]]21;22  %sub = sub nsw i8 %a, %b23  %add = add nsw i8 %a, %b24  %cmp = icmp slt i8 %sub, %add25  ret i1 %cmp26}27 28define i1 @test-same-operands-sub-add-nsw-icmp-sle(i8 %a, i8 %b) {29; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-sle(30; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {31; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[B]], -132; CHECK-NEXT:    ret i1 [[CMP]]33;34  %sub = sub nsw i8 %a, %b35  %add = add nsw i8 %a, %b36  %cmp = icmp sle i8 %sub, %add37  ret i1 %cmp38}39 40define i1 @test-same-operands-sub-add-nsw-nuw-icmp-eq(i8 %a, i8 %b) {41; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-nuw-icmp-eq(42; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {43; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[B]], 044; CHECK-NEXT:    ret i1 [[CMP]]45;46  %sub = sub nsw i8 %a, %b47  %add = add nuw i8 %a, %b48  %cmp = icmp eq i8 %sub, %add49  ret i1 %cmp50}51 52define i1 @test-same-operands-sub-add-nsw-icmp-eq(i8 %a, i8 %b) {53; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-eq(54; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {55; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[B]], 056; CHECK-NEXT:    ret i1 [[CMP]]57;58  %sub = sub nsw i8 %a, %b59  %add = add nsw i8 %a, %b60  %cmp = icmp eq i8 %sub, %add61  ret i1 %cmp62}63 64define i1 @test-add-sub-nsw-icmp-sgt(i8 %a, i8 %b) {65; CHECK-LABEL: define i1 @test-add-sub-nsw-icmp-sgt(66; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {67; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[B]], 068; CHECK-NEXT:    ret i1 [[CMP]]69;70  %sub = sub nsw i8 %a, %b71  %add = add nsw i8 %a, %b72  %cmp = icmp sgt i8 %add, %sub73  ret i1 %cmp74}75 76define i1 @test-add-sub-nuw-icmp-uge(i8 %a, i8 %b) {77; CHECK-LABEL: define i1 @test-add-sub-nuw-icmp-uge(78; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {79; CHECK-NEXT:    ret i1 true80;81  %sub = sub nuw i8 %a, %b82  %add = add nuw i8 %a, %b83  %cmp = icmp uge i8 %add, %sub84  ret i1 %cmp85}86 87; Check not folded88define i1 @test-add-sub-nuw-icmp-sge(i8 %a, i8 %b) {89; CHECK-LABEL: define i1 @test-add-sub-nuw-icmp-sge(90; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {91; CHECK-NEXT:    [[SUB:%.*]] = sub nuw i8 [[A]], [[B]]92; CHECK-NEXT:    [[ADD:%.*]] = add nuw i8 [[A]], [[B]]93; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i8 [[ADD]], [[SUB]]94; CHECK-NEXT:    ret i1 [[CMP]]95;96  %sub = sub nuw i8 %a, %b97  %add = add nuw i8 %a, %b98  %cmp = icmp sge i8 %add, %sub99  ret i1 %cmp100}101 102define i1 @test-add-swap-sub-nuw-icmp-uge(i8 %a, i8 %b) {103; CHECK-LABEL: define i1 @test-add-swap-sub-nuw-icmp-uge(104; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {105; CHECK-NEXT:    ret i1 true106;107  %sub = sub nuw i8 %a, %b108  %add = add nuw i8 %b, %a109  %cmp = icmp uge i8 %add, %sub110  ret i1 %cmp111}112