brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 3ea60d2 Raw
130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4define i1 @test_decompose_sub_nsw_sgt_nonneg(i32 %x, i32 %y) {5; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_nonneg(6; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {7; CHECK-NEXT:  [[ENTRY:.*:]]8; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]9; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 1010; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]11; CHECK:       [[IF_THEN]]:12; CHECK-NEXT:    ret i1 true13; CHECK:       [[IF_ELSE]]:14; CHECK-NEXT:    ret i1 true15;16entry:17  %sub = sub nsw i32 %y, %x18  %cond = icmp sgt i32 %sub, 1019  br i1 %cond, label %if.then, label %if.else20 21if.then:22  %ret = icmp slt i32 %x, %y23  ret i1 %ret24 25if.else:26  ret i1 true27}28 29define i1 @test_decompose_sub_nsw_sgt_zero(i32 %x, i32 %y) {30; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_zero(31; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {32; CHECK-NEXT:  [[ENTRY:.*:]]33; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]34; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 035; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]36; CHECK:       [[IF_THEN]]:37; CHECK-NEXT:    ret i1 true38; CHECK:       [[IF_ELSE]]:39; CHECK-NEXT:    ret i1 true40;41entry:42  %sub = sub nsw i32 %y, %x43  %cond = icmp sgt i32 %sub, 044  br i1 %cond, label %if.then, label %if.else45 46if.then:47  %ret = icmp slt i32 %x, %y48  ret i1 %ret49 50if.else:51  ret i1 true52}53 54define i1 @test_decompose_sub_nsw_sgt_zero_inv(i32 %x, i32 %y) {55; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_zero_inv(56; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {57; CHECK-NEXT:  [[ENTRY:.*:]]58; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]59; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 1060; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]61; CHECK:       [[IF_THEN]]:62; CHECK-NEXT:    ret i1 false63; CHECK:       [[IF_ELSE]]:64; CHECK-NEXT:    ret i1 true65;66entry:67  %sub = sub nsw i32 %y, %x68  %cond = icmp sgt i32 %sub, 1069  br i1 %cond, label %if.then, label %if.else70 71if.then:72  %ret = icmp sge i32 %x, %y73  ret i1 %ret74 75if.else:76  ret i1 true77}78 79define i1 @test_decompose_sub_nonsw_sgt_zero(i32 %x, i32 %y) {80; CHECK-LABEL: define i1 @test_decompose_sub_nonsw_sgt_zero(81; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {82; CHECK-NEXT:  [[ENTRY:.*:]]83; CHECK-NEXT:    [[SUB:%.*]] = sub i32 [[Y]], [[X]]84; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 1085; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]86; CHECK:       [[IF_THEN]]:87; CHECK-NEXT:    [[RET:%.*]] = icmp slt i32 [[X]], [[Y]]88; CHECK-NEXT:    ret i1 [[RET]]89; CHECK:       [[IF_ELSE]]:90; CHECK-NEXT:    ret i1 true91;92entry:93  %sub = sub i32 %y, %x94  %cond = icmp sgt i32 %sub, 1095  br i1 %cond, label %if.then, label %if.else96 97if.then:98  %ret = icmp slt i32 %x, %y99  ret i1 %ret100 101if.else:102  ret i1 true103}104 105define i1 @test_decompose_sub_nsw_sgt_neg(i32 %x, i32 %y) {106; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_neg(107; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {108; CHECK-NEXT:  [[ENTRY:.*:]]109; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]110; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], -10111; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]112; CHECK:       [[IF_THEN]]:113; CHECK-NEXT:    [[RET:%.*]] = icmp slt i32 [[X]], [[Y]]114; CHECK-NEXT:    ret i1 [[RET]]115; CHECK:       [[IF_ELSE]]:116; CHECK-NEXT:    ret i1 true117;118entry:119  %sub = sub nsw i32 %y, %x120  %cond = icmp sgt i32 %sub, -10121  br i1 %cond, label %if.then, label %if.else122 123if.then:124  %ret = icmp slt i32 %x, %y125  ret i1 %ret126 127if.else:128  ret i1 true129}130