brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.1 KiB · 3e9ff63 Raw
422 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4declare void @foo()5 6define i1 @test1(i32 %a, i32 %b) {7; CHECK-LABEL: @test1(8; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]9; CHECK-NEXT:    [[OR_COND:%.*]] = icmp slt i32 [[TMP1]], 010; CHECK-NEXT:    ret i1 [[OR_COND]]11;12  %1 = icmp slt i32 %a, 013  %2 = icmp slt i32 %b, 014  %or.cond = or i1 %1, %215  ret i1 %or.cond16}17 18define <2 x i1> @test1_splat(<2 x i32> %a, <2 x i32> %b) {19; CHECK-LABEL: @test1_splat(20; CHECK-NEXT:    [[TMP1:%.*]] = or <2 x i32> [[A:%.*]], [[B:%.*]]21; CHECK-NEXT:    [[OR_COND:%.*]] = icmp slt <2 x i32> [[TMP1]], zeroinitializer22; CHECK-NEXT:    ret <2 x i1> [[OR_COND]]23;24  %1 = icmp slt <2 x i32> %a, zeroinitializer25  %2 = icmp slt <2 x i32> %b, zeroinitializer26  %or.cond = or <2 x i1> %1, %227  ret <2 x i1> %or.cond28}29 30define i1 @test1_logical(i32 %a, i32 %b) {31; CHECK-LABEL: @test1_logical(32; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[A:%.*]], 033; CHECK-NEXT:    [[TMP2:%.*]] = icmp slt i32 [[B:%.*]], 034; CHECK-NEXT:    [[OR_COND:%.*]] = select i1 [[TMP1]], i1 true, i1 [[TMP2]]35; CHECK-NEXT:    ret i1 [[OR_COND]]36;37  %1 = icmp slt i32 %a, 038  %2 = icmp slt i32 %b, 039  %or.cond = select i1 %1, i1 true, i1 %240  ret i1 %or.cond41}42 43define i1 @test2(i32 %a, i32 %b) {44; CHECK-LABEL: @test2(45; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]46; CHECK-NEXT:    [[OR_COND:%.*]] = icmp sgt i32 [[TMP1]], -147; CHECK-NEXT:    ret i1 [[OR_COND]]48;49  %1 = icmp sgt i32 %a, -150  %2 = icmp sgt i32 %b, -151  %or.cond = or i1 %1, %252  ret i1 %or.cond53}54 55define i1 @test2_logical(i32 %a, i32 %b) {56; CHECK-LABEL: @test2_logical(57; CHECK-NEXT:    [[TMP1:%.*]] = icmp sgt i32 [[A:%.*]], -158; CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt i32 [[B:%.*]], -159; CHECK-NEXT:    [[OR_COND:%.*]] = select i1 [[TMP1]], i1 true, i1 [[TMP2]]60; CHECK-NEXT:    ret i1 [[OR_COND]]61;62  %1 = icmp sgt i32 %a, -163  %2 = icmp sgt i32 %b, -164  %or.cond = select i1 %1, i1 true, i1 %265  ret i1 %or.cond66}67 68define i1 @test3(i32 %a, i32 %b) {69; CHECK-LABEL: @test3(70; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]71; CHECK-NEXT:    [[OR_COND:%.*]] = icmp slt i32 [[TMP1]], 072; CHECK-NEXT:    ret i1 [[OR_COND]]73;74  %1 = icmp slt i32 %a, 075  %2 = icmp slt i32 %b, 076  %or.cond = and i1 %1, %277  ret i1 %or.cond78}79 80define i1 @test3_logical(i32 %a, i32 %b) {81; CHECK-LABEL: @test3_logical(82; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[A:%.*]], 083; CHECK-NEXT:    [[TMP2:%.*]] = icmp slt i32 [[B:%.*]], 084; CHECK-NEXT:    [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false85; CHECK-NEXT:    ret i1 [[OR_COND]]86;87  %1 = icmp slt i32 %a, 088  %2 = icmp slt i32 %b, 089  %or.cond = select i1 %1, i1 %2, i1 false90  ret i1 %or.cond91}92 93define i1 @test4(i32 %a, i32 %b) {94; CHECK-LABEL: @test4(95; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]96; CHECK-NEXT:    [[OR_COND:%.*]] = icmp sgt i32 [[TMP1]], -197; CHECK-NEXT:    ret i1 [[OR_COND]]98;99  %1 = icmp sgt i32 %a, -1100  %2 = icmp sgt i32 %b, -1101  %or.cond = and i1 %1, %2102  ret i1 %or.cond103}104 105define i1 @test4_logical(i32 %a, i32 %b) {106; CHECK-LABEL: @test4_logical(107; CHECK-NEXT:    [[TMP1:%.*]] = icmp sgt i32 [[A:%.*]], -1108; CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt i32 [[B:%.*]], -1109; CHECK-NEXT:    [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false110; CHECK-NEXT:    ret i1 [[OR_COND]]111;112  %1 = icmp sgt i32 %a, -1113  %2 = icmp sgt i32 %b, -1114  %or.cond = select i1 %1, i1 %2, i1 false115  ret i1 %or.cond116}117 118define void @test5(i32 %a) {119; CHECK-LABEL: @test5(120; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920121; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i32 [[TMP1]], 0122; CHECK-NEXT:    br i1 [[OR_COND]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]123; CHECK:       if.then:124; CHECK-NEXT:    tail call void @foo() #[[ATTR0:[0-9]+]]125; CHECK-NEXT:    ret void126; CHECK:       if.end:127; CHECK-NEXT:    ret void128;129  %and = and i32 %a, 134217728130  %1 = icmp eq i32 %and, 0131  %2 = icmp sgt i32 %a, -1132  %or.cond = and i1 %1, %2133  br i1 %or.cond, label %if.then, label %if.end134 135 136if.then:137  tail call void @foo() nounwind138  ret void139 140if.end:141  ret void142}143 144define void @test5_logical(i32 %a) {145; CHECK-LABEL: @test5_logical(146; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920147; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i32 [[TMP1]], 0148; CHECK-NEXT:    br i1 [[OR_COND]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]149; CHECK:       if.then:150; CHECK-NEXT:    tail call void @foo() #[[ATTR0]]151; CHECK-NEXT:    ret void152; CHECK:       if.end:153; CHECK-NEXT:    ret void154;155  %and = and i32 %a, 134217728156  %1 = icmp eq i32 %and, 0157  %2 = icmp sgt i32 %a, -1158  %or.cond = select i1 %1, i1 %2, i1 false159  br i1 %or.cond, label %if.then, label %if.end160 161 162if.then:163  tail call void @foo() nounwind164  ret void165 166if.end:167  ret void168}169 170define void @test6(i32 %a) {171; CHECK-LABEL: @test6(172; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920173; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i32 [[TMP1]], 0174; CHECK-NEXT:    br i1 [[OR_COND]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]175; CHECK:       if.then:176; CHECK-NEXT:    tail call void @foo() #[[ATTR0]]177; CHECK-NEXT:    ret void178; CHECK:       if.end:179; CHECK-NEXT:    ret void180;181  %1 = icmp sgt i32 %a, -1182  %and = and i32 %a, 134217728183  %2 = icmp eq i32 %and, 0184  %or.cond = and i1 %1, %2185  br i1 %or.cond, label %if.then, label %if.end186 187 188if.then:189  tail call void @foo() nounwind190  ret void191 192if.end:193  ret void194}195 196define void @test6_logical(i32 %a) {197; CHECK-LABEL: @test6_logical(198; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920199; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i32 [[TMP1]], 0200; CHECK-NEXT:    br i1 [[OR_COND]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]201; CHECK:       if.then:202; CHECK-NEXT:    tail call void @foo() #[[ATTR0]]203; CHECK-NEXT:    ret void204; CHECK:       if.end:205; CHECK-NEXT:    ret void206;207  %1 = icmp sgt i32 %a, -1208  %and = and i32 %a, 134217728209  %2 = icmp eq i32 %and, 0210  %or.cond = select i1 %1, i1 %2, i1 false211  br i1 %or.cond, label %if.then, label %if.end212 213 214if.then:215  tail call void @foo() nounwind216  ret void217 218if.end:219  ret void220}221 222define void @test7(i32 %a) {223; CHECK-LABEL: @test7(224; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920225; CHECK-NEXT:    [[OR_COND_NOT:%.*]] = icmp eq i32 [[TMP1]], 0226; CHECK-NEXT:    br i1 [[OR_COND_NOT]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]227; CHECK:       if.then:228; CHECK-NEXT:    tail call void @foo() #[[ATTR0]]229; CHECK-NEXT:    ret void230; CHECK:       if.end:231; CHECK-NEXT:    ret void232;233  %and = and i32 %a, 134217728234  %1 = icmp ne i32 %and, 0235  %2 = icmp slt i32 %a, 0236  %or.cond = or i1 %1, %2237  br i1 %or.cond, label %if.then, label %if.end238 239 240if.then:241  tail call void @foo() nounwind242  ret void243 244if.end:245  ret void246}247 248define void @test7_logical(i32 %a) {249; CHECK-LABEL: @test7_logical(250; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920251; CHECK-NEXT:    [[OR_COND_NOT:%.*]] = icmp eq i32 [[TMP1]], 0252; CHECK-NEXT:    br i1 [[OR_COND_NOT]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]253; CHECK:       if.then:254; CHECK-NEXT:    tail call void @foo() #[[ATTR0]]255; CHECK-NEXT:    ret void256; CHECK:       if.end:257; CHECK-NEXT:    ret void258;259  %and = and i32 %a, 134217728260  %1 = icmp ne i32 %and, 0261  %2 = icmp slt i32 %a, 0262  %or.cond = select i1 %1, i1 true, i1 %2263  br i1 %or.cond, label %if.then, label %if.end264 265 266if.then:267  tail call void @foo() nounwind268  ret void269 270if.end:271  ret void272}273 274define void @test8(i32 %a) {275; CHECK-LABEL: @test8(276; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920277; CHECK-NEXT:    [[OR_COND_NOT:%.*]] = icmp eq i32 [[TMP1]], 0278; CHECK-NEXT:    br i1 [[OR_COND_NOT]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]279; CHECK:       if.then:280; CHECK-NEXT:    tail call void @foo()281; CHECK-NEXT:    ret void282; CHECK:       if.end:283; CHECK-NEXT:    ret void284;285  %1 = icmp slt i32 %a, 0286  %and = and i32 %a, 134217728287  %2 = icmp ne i32 %and, 0288  %or.cond = or i1 %1, %2289  br i1 %or.cond, label %if.then, label %if.end290 291 292if.then:293  tail call void @foo()294  ret void295 296if.end:297  ret void298}299 300define void @test8_logical(i32 %a) {301; CHECK-LABEL: @test8_logical(302; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -2013265920303; CHECK-NEXT:    [[OR_COND_NOT:%.*]] = icmp eq i32 [[TMP1]], 0304; CHECK-NEXT:    br i1 [[OR_COND_NOT]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]305; CHECK:       if.then:306; CHECK-NEXT:    tail call void @foo()307; CHECK-NEXT:    ret void308; CHECK:       if.end:309; CHECK-NEXT:    ret void310;311  %1 = icmp slt i32 %a, 0312  %and = and i32 %a, 134217728313  %2 = icmp ne i32 %and, 0314  %or.cond = select i1 %1, i1 true, i1 %2315  br i1 %or.cond, label %if.then, label %if.end316 317 318if.then:319  tail call void @foo()320  ret void321 322if.end:323  ret void324}325 326define i1 @test9(i32 %a) {327; CHECK-LABEL: @test9(328; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -1073741824329; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i32 [[TMP1]], 1073741824330; CHECK-NEXT:    ret i1 [[OR_COND]]331;332  %1 = and i32 %a, 1073741824333  %2 = icmp ne i32 %1, 0334  %3 = icmp sgt i32 %a, -1335  %or.cond = and i1 %2, %3336  ret i1 %or.cond337}338 339define i1 @test9_logical(i32 %a) {340; CHECK-LABEL: @test9_logical(341; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -1073741824342; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i32 [[TMP1]], 1073741824343; CHECK-NEXT:    ret i1 [[OR_COND]]344;345  %1 = and i32 %a, 1073741824346  %2 = icmp ne i32 %1, 0347  %3 = icmp sgt i32 %a, -1348  %or.cond = select i1 %2, i1 %3, i1 false349  ret i1 %or.cond350}351 352define i1 @test9_logical_samesign(i32 %a) {353; CHECK-LABEL: @test9_logical_samesign(354; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i32 [[A:%.*]], -1355; CHECK-NEXT:    ret i1 [[CMP2]]356;357  %masked = and i32 %a, -1073741825358  %cmp1 = icmp eq i32 %masked, 0359  %cmp2 = icmp samesign sgt i32 %a, -1360  %or.cond = select i1 %cmp1, i1 true, i1 %cmp2361  ret i1 %or.cond362}363 364define i1 @test_logical_or_icmp_icmp_samesign(i32 %a) {365; CHECK-LABEL: @test_logical_or_icmp_icmp_samesign(366; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i32 [[A:%.*]], -1367; CHECK-NEXT:    ret i1 [[CMP2]]368;369  %cmp1 = icmp eq i32 %a, 0370  %cmp2 = icmp samesign sgt i32 %a, -1371  %or = select i1 %cmp1, i1 true, i1 %cmp2372  ret i1 %or373}374 375define i1 @test10(i32 %a) {376; CHECK-LABEL: @test10(377; CHECK-NEXT:    [[OR_COND:%.*]] = icmp ult i32 [[A:%.*]], 2378; CHECK-NEXT:    ret i1 [[OR_COND]]379;380  %1 = and i32 %a, 2381  %2 = icmp eq i32 %1, 0382  %3 = icmp ult i32 %a, 4383  %or.cond = and i1 %2, %3384  ret i1 %or.cond385}386 387define i1 @test10_logical(i32 %a) {388; CHECK-LABEL: @test10_logical(389; CHECK-NEXT:    [[OR_COND:%.*]] = icmp ult i32 [[A:%.*]], 2390; CHECK-NEXT:    ret i1 [[OR_COND]]391;392  %1 = and i32 %a, 2393  %2 = icmp eq i32 %1, 0394  %3 = icmp ult i32 %a, 4395  %or.cond = select i1 %2, i1 %3, i1 false396  ret i1 %or.cond397}398 399define i1 @test11(i32 %a) {400; CHECK-LABEL: @test11(401; CHECK-NEXT:    [[OR_COND:%.*]] = icmp ugt i32 [[A:%.*]], 1402; CHECK-NEXT:    ret i1 [[OR_COND]]403;404  %1 = and i32 %a, 2405  %2 = icmp ne i32 %1, 0406  %3 = icmp ugt i32 %a, 3407  %or.cond = or i1 %2, %3408  ret i1 %or.cond409}410 411define i1 @test11_logical(i32 %a) {412; CHECK-LABEL: @test11_logical(413; CHECK-NEXT:    [[OR_COND:%.*]] = icmp ugt i32 [[A:%.*]], 1414; CHECK-NEXT:    ret i1 [[OR_COND]]415;416  %1 = and i32 %a, 2417  %2 = icmp ne i32 %1, 0418  %3 = icmp ugt i32 %a, 3419  %or.cond = select i1 %2, i1 true, i1 %3420  ret i1 %or.cond421}422