brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 75ad927 Raw
259 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s3 4define i8 @test0(i8 %a) {5; CHECK-LABEL: @test0(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[A:%.*]], 38; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]9; CHECK:       bb:10; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i8 [[A]], 5011; CHECK-NEXT:    ret i8 [[MUL]]12; CHECK:       exit:13; CHECK-NEXT:    ret i8 014;15entry:16  %cmp = icmp ult i8 %a, 317  br i1 %cmp, label %bb, label %exit18 19bb:20  %mul = mul i8 %a, 5021  ret i8 %mul22 23exit:24  ret i8 025}26 27define i8 @test1(i8 %a) {28; CHECK-LABEL: @test1(29; CHECK-NEXT:  entry:30; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[A:%.*]], 431; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]32; CHECK:       bb:33; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i8 [[A]], 5034; CHECK-NEXT:    ret i8 [[MUL]]35; CHECK:       exit:36; CHECK-NEXT:    ret i8 037;38entry:39  %cmp = icmp ult i8 %a, 440  br i1 %cmp, label %bb, label %exit41 42bb:43  %mul = mul i8 %a, 5044  ret i8 %mul45 46exit:47  ret i8 048}49 50define i8 @test2(i8 %a) {51; CHECK-LABEL: @test2(52; CHECK-NEXT:  entry:53; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[A:%.*]], 654; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]55; CHECK:       bb:56; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i8 [[A]], 5057; CHECK-NEXT:    ret i8 [[MUL]]58; CHECK:       exit:59; CHECK-NEXT:    ret i8 060;61entry:62  %cmp = icmp ult i8 %a, 663  br i1 %cmp, label %bb, label %exit64 65bb:66  %mul = mul i8 %a, 5067  ret i8 %mul68 69exit:70  ret i8 071}72 73define i8 @test3(i8 %a) {74; CHECK-LABEL: @test3(75; CHECK-NEXT:  entry:76; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[A:%.*]], 777; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]78; CHECK:       bb:79; CHECK-NEXT:    [[MUL:%.*]] = mul i8 [[A]], 5080; CHECK-NEXT:    ret i8 [[MUL]]81; CHECK:       exit:82; CHECK-NEXT:    ret i8 083;84entry:85  %cmp = icmp ult i8 %a, 786  br i1 %cmp, label %bb, label %exit87 88bb:89  %mul = mul i8 %a, 5090  ret i8 %mul91 92exit:93  ret i8 094}95 96define i8 @test4(i8 %a) {97; CHECK-LABEL: @test4(98; CHECK-NEXT:  entry:99; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i8 [[A:%.*]], 3100; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], -3101; CHECK-NEXT:    [[COND:%.*]] = and i1 [[CMP1]], [[CMP2]]102; CHECK-NEXT:    br i1 [[COND]], label [[BB:%.*]], label [[EXIT:%.*]]103; CHECK:       bb:104; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i8 [[A]], 50105; CHECK-NEXT:    ret i8 [[MUL]]106; CHECK:       exit:107; CHECK-NEXT:    ret i8 0108;109entry:110  %cmp1 = icmp slt i8 %a, 3111  %cmp2 = icmp sgt i8 %a, -3112  %cond = and i1 %cmp1, %cmp2113  br i1 %cond, label %bb, label %exit114 115bb:116  %mul = mul i8 %a, 50117  ret i8 %mul118 119exit:120  ret i8 0121}122 123define i8 @test5(i8 %a) {124; CHECK-LABEL: @test5(125; CHECK-NEXT:  entry:126; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i8 [[A:%.*]], 3127; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], -4128; CHECK-NEXT:    [[COND:%.*]] = and i1 [[CMP1]], [[CMP2]]129; CHECK-NEXT:    br i1 [[COND]], label [[BB:%.*]], label [[EXIT:%.*]]130; CHECK:       bb:131; CHECK-NEXT:    [[MUL:%.*]] = mul i8 [[A]], 50132; CHECK-NEXT:    ret i8 [[MUL]]133; CHECK:       exit:134; CHECK-NEXT:    ret i8 0135;136entry:137  %cmp1 = icmp slt i8 %a, 3138  %cmp2 = icmp sgt i8 %a, -4139  %cond = and i1 %cmp1, %cmp2140  br i1 %cond, label %bb, label %exit141 142bb:143  %mul = mul i8 %a, 50144  ret i8 %mul145 146exit:147  ret i8 0148}149 150define i8 @test6(i8 %a) {151; CHECK-LABEL: @test6(152; CHECK-NEXT:  entry:153; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i8 [[A:%.*]], 4154; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], -3155; CHECK-NEXT:    [[COND:%.*]] = and i1 [[CMP1]], [[CMP2]]156; CHECK-NEXT:    br i1 [[COND]], label [[BB:%.*]], label [[EXIT:%.*]]157; CHECK:       bb:158; CHECK-NEXT:    [[MUL:%.*]] = mul i8 [[A]], 50159; CHECK-NEXT:    ret i8 [[MUL]]160; CHECK:       exit:161; CHECK-NEXT:    ret i8 0162;163entry:164  %cmp1 = icmp slt i8 %a, 4165  %cmp2 = icmp sgt i8 %a, -3166  %cond = and i1 %cmp1, %cmp2167  br i1 %cond, label %bb, label %exit168 169bb:170  %mul = mul i8 %a, 50171  ret i8 %mul172 173exit:174  ret i8 0175}176 177define i1 @nuw_range1(i8 %b) {178; CHECK-LABEL: @nuw_range1(179; CHECK-NEXT:  entry:180; CHECK-NEXT:    [[C:%.*]] = add nuw nsw i8 [[B:%.*]], 1181; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i8 [[C]], 4182; CHECK-NEXT:    ret i1 false183;184entry:185  %c = add nuw nsw i8 %b, 1186  %mul = mul nuw i8 %c, 4187  %cmp = icmp eq i8 %mul, 0188  ret i1 %cmp189}190 191define i1 @nuw_range2(i8 %b) {192; CHECK-LABEL: @nuw_range2(193; CHECK-NEXT:  entry:194; CHECK-NEXT:    [[C:%.*]] = add nuw nsw i8 [[B:%.*]], 3195; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i8 [[C]], 4196; CHECK-NEXT:    ret i1 false197;198entry:199  %c = add nuw nsw i8 %b, 3200  %mul = mul nuw i8 %c, 4201  %cmp = icmp ult i8 %mul, 2202  ret i1 %cmp203}204 205define i1 @nsw_range1(i8 %b) {206; CHECK-LABEL: @nsw_range1(207; CHECK-NEXT:  entry:208; CHECK-NEXT:    [[C:%.*]] = add nuw nsw i8 [[B:%.*]], -3209; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i8 [[C]], 4210; CHECK-NEXT:    ret i1 false211;212entry:213  %c = add nuw nsw i8 %b, -3214  %mul = mul nsw i8 %c, 4215  %cmp = icmp slt i8 %c, %mul216  ret i1 %cmp217}218 219define i1 @one_bit(i1 %a, i1 %b) {220; CHECK-LABEL: @one_bit(221; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i1 [[A:%.*]], [[B:%.*]]222; CHECK-NEXT:    ret i1 [[MUL]]223;224  %mul = mul i1 %a, %b225  ret i1 %mul226}227 228define i1 @test_mul_nuw_nsw_nneg(i32 %x, i32 range(i32 3, 2147483648) %y) {229; CHECK-LABEL: @test_mul_nuw_nsw_nneg(230; CHECK-NEXT:  entry:231; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i32 [[X:%.*]], [[Y:%.*]]232; CHECK-NEXT:    ret i1 true233;234entry:235  %mul = mul nuw nsw i32 %x, %y236  %cmp = icmp sgt i32 %mul, -1237  ret i1 %cmp238}239 240define i1 @test_mul_nuw_nsw_nneg_complex(i32 %x, i32 noundef %y, i32 %z) {241; CHECK-LABEL: @test_mul_nuw_nsw_nneg_complex(242; CHECK-NEXT:  entry:243; CHECK-NEXT:    [[CMP1:%.*]] = icmp sgt i32 [[Y:%.*]], 2244; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 [[X:%.*]], 0245; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CMP2]], i32 3, i32 4246; CHECK-NEXT:    [[SEL2:%.*]] = select i1 [[CMP1]], i32 [[Y]], i32 [[SEL1]]247; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i32 [[X]], [[SEL2]]248; CHECK-NEXT:    ret i1 true249;250entry:251  %cmp1 = icmp sgt i32 %y, 2252  %cmp2 = icmp eq i32 %x, 0253  %sel1 = select i1 %cmp2, i32 3, i32 4254  %sel2 = select i1 %cmp1, i32 %y, i32 %sel1255  %mul = mul nuw nsw i32 %x, %sel2256  %cmp3 = icmp sgt i32 %mul, -1257  ret i1 %cmp3258}259