brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.0 KiB · 1d6e54c Raw
491 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, i8 %b) {5; CHECK-LABEL: @test0(6; CHECK-NEXT:    [[SHL:%.*]] = shl i8 [[A:%.*]], [[B:%.*]]7; CHECK-NEXT:    ret i8 [[SHL]]8;9  %shl = shl i8 %a, %b10  ret i8 %shl11}12 13define i8 @test1(i8 %a, i8 %b) {14; CHECK-LABEL: @test1(15; CHECK-NEXT:  entry:16; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 817; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]18; CHECK:       bb:19; CHECK-NEXT:    [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]20; CHECK-NEXT:    ret i8 [[SHL]]21; CHECK:       exit:22; CHECK-NEXT:    ret i8 023;24entry:25  %cmp = icmp ult i8 %b, 826  br i1 %cmp, label %bb, label %exit27 28bb:29  %shl = shl i8 %a, %b30  ret i8 %shl31 32exit:33  ret i8 034}35 36define i8 @test2(i8 %a, i8 %b) {37; CHECK-LABEL: @test2(38; CHECK-NEXT:  entry:39; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 940; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]41; CHECK:       bb:42; CHECK-NEXT:    [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]43; CHECK-NEXT:    ret i8 [[SHL]]44; CHECK:       exit:45; CHECK-NEXT:    ret i8 046;47entry:48  %cmp = icmp ult i8 %b, 949  br i1 %cmp, label %bb, label %exit50 51bb:52  %shl = shl i8 %a, %b53  ret i8 %shl54 55exit:56  ret i8 057}58 59define i8 @test3(i8 %a, i8 %b) {60; CHECK-LABEL: @test3(61; CHECK-NEXT:  entry:62; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[B:%.*]], 663; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]64; CHECK:       bb:65; CHECK-NEXT:    [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]66; CHECK-NEXT:    ret i8 [[SHL]]67; CHECK:       exit:68; CHECK-NEXT:    ret i8 069;70entry:71  %cmp = icmp ugt i8 %b, 672  br i1 %cmp, label %bb, label %exit73 74bb:75  %shl = shl i8 %a, %b76  ret i8 %shl77 78exit:79  ret i8 080}81 82define i8 @test4(i8 %a, i8 %b) {83; CHECK-LABEL: @test4(84; CHECK-NEXT:  entry:85; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[B:%.*]], 786; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]87; CHECK:       bb:88; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i8 [[A:%.*]], [[B]]89; CHECK-NEXT:    ret i8 [[SHL]]90; CHECK:       exit:91; CHECK-NEXT:    ret i8 092;93entry:94  %cmp = icmp ugt i8 %b, 795  br i1 %cmp, label %bb, label %exit96 97bb:98  %shl = shl i8 %a, %b99  ret i8 %shl100 101exit:102  ret i8 0103}104 105define i8 @test5(i8 %b) {106; CHECK-LABEL: @test5(107; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i8 0, [[B:%.*]]108; CHECK-NEXT:    ret i8 0109;110  %shl = shl i8 0, %b111  ret i8 %shl112}113 114define i8 @test6(i8 %b) {115; CHECK-LABEL: @test6(116; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i8 1, [[B:%.*]]117; CHECK-NEXT:    ret i8 [[SHL]]118;119  %shl = shl i8 1, %b120  ret i8 %shl121}122 123define i8 @test7(i8 %b) {124; CHECK-LABEL: @test7(125; CHECK-NEXT:  entry:126; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 7127; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]128; CHECK:       bb:129; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i8 1, [[B]]130; CHECK-NEXT:    ret i8 [[SHL]]131; CHECK:       exit:132; CHECK-NEXT:    ret i8 0133;134entry:135  %cmp = icmp ult i8 %b, 7136  br i1 %cmp, label %bb, label %exit137 138bb:139  %shl = shl i8 1, %b140  ret i8 %shl141 142exit:143  ret i8 0144}145 146define i8 @test8(i8 %b) {147; CHECK-LABEL: @test8(148; CHECK-NEXT:    [[SHL:%.*]] = shl nsw i8 -1, [[B:%.*]]149; CHECK-NEXT:    ret i8 [[SHL]]150;151  %shl = shl i8 -1, %b152  ret i8 %shl153}154 155define i8 @test9(i8 %b) {156; CHECK-LABEL: @test9(157; CHECK-NEXT:  entry:158; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[B:%.*]], 0159; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]160; CHECK:       bb:161; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i8 -1, [[B]]162; CHECK-NEXT:    ret i8 -1163; CHECK:       exit:164; CHECK-NEXT:    ret i8 0165;166entry:167  %cmp = icmp eq i8 %b, 0168  br i1 %cmp, label %bb, label %exit169 170bb:171  %shl = shl i8 -1, %b172  ret i8 %shl173 174exit:175  ret i8 0176}177 178define i8 @test10(i8 %b) {179; CHECK-LABEL: @test10(180; CHECK-NEXT:    [[SHL:%.*]] = shl i8 42, [[B:%.*]]181; CHECK-NEXT:    ret i8 [[SHL]]182;183  %shl = shl i8 42, %b184  ret i8 %shl185}186 187define i8 @test11(i8 %b) {188; CHECK-LABEL: @test11(189; CHECK-NEXT:  entry:190; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 2191; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]192; CHECK:       bb:193; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i8 42, [[B]]194; CHECK-NEXT:    ret i8 [[SHL]]195; CHECK:       exit:196; CHECK-NEXT:    ret i8 0197;198entry:199  %cmp = icmp ult i8 %b, 2200  br i1 %cmp, label %bb, label %exit201 202bb:203  %shl = shl i8 42, %b204  ret i8 %shl205 206exit:207  ret i8 0208}209 210define i8 @test12(i8 %b) {211; CHECK-LABEL: @test12(212; CHECK-NEXT:  entry:213; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 3214; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]215; CHECK:       bb:216; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i8 42, [[B]]217; CHECK-NEXT:    ret i8 [[SHL]]218; CHECK:       exit:219; CHECK-NEXT:    ret i8 0220;221entry:222  %cmp = icmp ult i8 %b, 3223  br i1 %cmp, label %bb, label %exit224 225bb:226  %shl = shl i8 42, %b227  ret i8 %shl228 229exit:230  ret i8 0231}232 233define i8 @test13(i8 %b) {234; CHECK-LABEL: @test13(235; CHECK-NEXT:  entry:236; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 4237; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]238; CHECK:       bb:239; CHECK-NEXT:    [[SHL:%.*]] = shl i8 42, [[B]]240; CHECK-NEXT:    ret i8 [[SHL]]241; CHECK:       exit:242; CHECK-NEXT:    ret i8 0243;244entry:245  %cmp = icmp ult i8 %b, 4246  br i1 %cmp, label %bb, label %exit247 248bb:249  %shl = shl i8 42, %b250  ret i8 %shl251 252exit:253  ret i8 0254}255 256define i8 @test14(i8 %b) {257; CHECK-LABEL: @test14(258; CHECK-NEXT:    [[SHL:%.*]] = shl i8 -42, [[B:%.*]]259; CHECK-NEXT:    ret i8 [[SHL]]260;261  %shl = shl i8 -42, %b262  ret i8 %shl263}264 265define i8 @test15(i8 %b) {266; CHECK-LABEL: @test15(267; CHECK-NEXT:  entry:268; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 2269; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]270; CHECK:       bb:271; CHECK-NEXT:    [[SHL:%.*]] = shl nsw i8 -42, [[B]]272; CHECK-NEXT:    ret i8 [[SHL]]273; CHECK:       exit:274; CHECK-NEXT:    ret i8 0275;276entry:277  %cmp = icmp ult i8 %b, 2278  br i1 %cmp, label %bb, label %exit279 280bb:281  %shl = shl i8 -42, %b282  ret i8 %shl283 284exit:285  ret i8 0286}287 288define i8 @test16(i8 %b) {289; CHECK-LABEL: @test16(290; CHECK-NEXT:  entry:291; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 3292; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]293; CHECK:       bb:294; CHECK-NEXT:    [[SHL:%.*]] = shl i8 -42, [[B]]295; CHECK-NEXT:    ret i8 [[SHL]]296; CHECK:       exit:297; CHECK-NEXT:    ret i8 0298;299entry:300  %cmp = icmp ult i8 %b, 3301  br i1 %cmp, label %bb, label %exit302 303bb:304  %shl = shl i8 -42, %b305  ret i8 %shl306 307exit:308  ret i8 0309}310 311define i8 @test17(i8 %b) {312; CHECK-LABEL: @test17(313; CHECK-NEXT:  entry:314; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[B:%.*]], 2315; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]316; CHECK:       bb:317; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i8 42, [[B]]318; CHECK-NEXT:    ret i8 [[SHL]]319; CHECK:       exit:320; CHECK-NEXT:    ret i8 0321;322entry:323  %cmp = icmp slt i8 %b, 2324  br i1 %cmp, label %bb, label %exit325 326bb:327  %shl = shl i8 42, %b328  ret i8 %shl329 330exit:331  ret i8 0332}333 334define i8 @test18(i8 %b) {335; CHECK-LABEL: @test18(336; CHECK-NEXT:  entry:337; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[B:%.*]], 3338; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]339; CHECK:       bb:340; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i8 42, [[B]]341; CHECK-NEXT:    ret i8 [[SHL]]342; CHECK:       exit:343; CHECK-NEXT:    ret i8 0344;345entry:346  %cmp = icmp slt i8 %b, 3347  br i1 %cmp, label %bb, label %exit348 349bb:350  %shl = shl i8 42, %b351  ret i8 %shl352 353exit:354  ret i8 0355}356 357define i8 @test19(i8 %b) {358; CHECK-LABEL: @test19(359; CHECK-NEXT:  entry:360; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[B:%.*]], 4361; CHECK-NEXT:    br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]362; CHECK:       bb:363; CHECK-NEXT:    [[SHL:%.*]] = shl i8 42, [[B]]364; CHECK-NEXT:    ret i8 [[SHL]]365; CHECK:       exit:366; CHECK-NEXT:    ret i8 0367;368entry:369  %cmp = icmp slt i8 %b, 4370  br i1 %cmp, label %bb, label %exit371 372bb:373  %shl = shl i8 42, %b374  ret i8 %shl375 376exit:377  ret i8 0378}379 380define i1 @nuw_range1(i8 %b) {381; CHECK-LABEL: @nuw_range1(382; CHECK-NEXT:  entry:383; CHECK-NEXT:    [[C:%.*]] = add nuw nsw i8 [[B:%.*]], 1384; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i8 [[C]], 2385; CHECK-NEXT:    ret i1 false386;387entry:388  %c = add nuw nsw i8 %b, 1389  %shl = shl nuw i8 %c, 2390  %cmp = icmp eq i8 %shl, 0391  ret i1 %cmp392}393 394define i1 @nuw_range2(i8 %b) {395; CHECK-LABEL: @nuw_range2(396; CHECK-NEXT:  entry:397; CHECK-NEXT:    [[C:%.*]] = add nuw nsw i8 [[B:%.*]], 3398; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i8 [[C]], 2399; CHECK-NEXT:    ret i1 false400;401entry:402  %c = add nuw nsw i8 %b, 3403  %shl = shl nuw i8 %c, 2404  %cmp = icmp ult i8 %shl, 2405  ret i1 %cmp406}407 408define i1 @nsw_range1(i8 %b) {409; CHECK-LABEL: @nsw_range1(410; CHECK-NEXT:  entry:411; CHECK-NEXT:    [[C:%.*]] = add nuw nsw i8 [[B:%.*]], -3412; CHECK-NEXT:    [[SHL:%.*]] = shl nsw i8 [[C]], 2413; CHECK-NEXT:    ret i1 false414;415entry:416  %c = add nuw nsw i8 %b, -3417  %shl = shl nsw i8 %c, 2418  %cmp = icmp slt i8 %c, %shl419  ret i1 %cmp420}421 422define i64 @shl_nuw_nsw_test1(i32 %x) {423; CHECK-LABEL: @shl_nuw_nsw_test1(424; CHECK-NEXT:    [[SHL1:%.*]] = shl nuw nsw i32 1, [[X:%.*]]425; CHECK-NEXT:    [[ADD1:%.*]] = add nsw i32 [[SHL1]], -1426; CHECK-NEXT:    [[EXT:%.*]] = zext nneg i32 [[ADD1]] to i64427; CHECK-NEXT:    [[SHL2:%.*]] = shl nuw nsw i64 [[EXT]], 2428; CHECK-NEXT:    [[ADD2:%.*]] = add nuw nsw i64 [[SHL2]], 39429; CHECK-NEXT:    [[LSHR:%.*]] = lshr i64 [[ADD2]], 3430; CHECK-NEXT:    ret i64 [[LSHR]]431;432  %shl1 = shl nuw nsw i32 1, %x433  %add1 = add nsw i32 %shl1, -1434  %ext = sext i32 %add1 to i64435  %shl2 = shl nsw i64 %ext, 2436  %add2 = add nsw i64 %shl2, 39437  %lshr = lshr i64 %add2, 3438  %and = and i64 %lshr, 4294967295439  ret i64 %and440}441 442define i32 @shl_nuw_nsw_test2(i32 range(i32 -2147483248, 1) %x) {443; CHECK-LABEL: @shl_nuw_nsw_test2(444; CHECK-NEXT:    [[SHL:%.*]] = shl nsw i32 [[X:%.*]], 1445; CHECK-NEXT:    ret i32 200446;447  %shl = shl nsw i32 %x, 1448  %smax = call i32 @llvm.smax.i32(i32 %shl, i32 200)449  ret i32 %smax450}451 452define i64 @shl_nuw_nsw_test3(i1 %cond, i64 range(i64 1, 0) %x, i64 range(i64 3, 0) %y) {453; CHECK-LABEL: @shl_nuw_nsw_test3(454; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i64 1, [[X:%.*]]455; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i64 [[Y:%.*]], i64 [[SHL]]456; CHECK-NEXT:    ret i64 [[SEL]]457;458  %shl = shl nuw i64 1, %x459  %sel = select i1 %cond, i64 %y, i64 %shl460  %umax = call i64 @llvm.umax.i64(i64 %sel, i64 2)461  ret i64 %umax462}463 464define i1 @shl_nuw_nsw_test4(i32 %x, i32 range(i32 0, 32) %k) {465; CHECK-LABEL: @shl_nuw_nsw_test4(466; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[X:%.*]] to i64467; CHECK-NEXT:    [[SH_PROM:%.*]] = zext nneg i32 [[K:%.*]] to i64468; CHECK-NEXT:    [[SHL:%.*]] = shl nsw i64 [[CONV]], [[SH_PROM]]469; CHECK-NEXT:    ret i1 false470;471  %conv = sext i32 %x to i64472  %sh_prom = zext nneg i32 %k to i64473  %shl = shl nsw i64 %conv, %sh_prom474  %cmp = icmp eq i64 %shl, -9223372036854775808475  ret i1 %cmp476}477 478define i1 @shl_nuw_nsw_test5(i32 %x) {479; CHECK-LABEL: @shl_nuw_nsw_test5(480; CHECK-NEXT:  entry:481; CHECK-NEXT:    [[SHL:%.*]] = shl nuw nsw i32 768, [[X:%.*]]482; CHECK-NEXT:    [[ADD:%.*]] = add nuw nsw i32 [[SHL]], 1846483; CHECK-NEXT:    ret i1 true484;485entry:486  %shl = shl nuw nsw i32 768, %x487  %add = add nuw i32 %shl, 1846488  %cmp = icmp sgt i32 %add, 0489  ret i1 %cmp490}491