260 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv6-eabi %s -o - | FileCheck %s3 4define i32 @test1(i32 %x) {5; CHECK-LABEL: test1:6; CHECK: @ %bb.0: @ %entry7; CHECK-NEXT: lsls r0, r0, #208; CHECK-NEXT: lsrs r0, r0, #229; CHECK-NEXT: bx lr10entry:11 %0 = lshr i32 %x, 212 %shr = and i32 %0, 102313 ret i32 %shr14}15 16define i32 @test2(i32 %x) {17; CHECK-LABEL: test2:18; CHECK: @ %bb.0: @ %entry19; CHECK-NEXT: lsrs r1, r0, #220; CHECK-NEXT: ldr r0, .LCPI1_021; CHECK-NEXT: ands r0, r122; CHECK-NEXT: bx lr23; CHECK-NEXT: .p2align 224; CHECK-NEXT: @ %bb.1:25; CHECK-NEXT: .LCPI1_0:26; CHECK-NEXT: .long 1022 @ 0x3fe27entry:28 %0 = lshr i32 %x, 229 %shr = and i32 %0, 102230 ret i32 %shr31}32 33define i32 @test3(i32 %x) {34; CHECK-LABEL: test3:35; CHECK: @ %bb.0: @ %entry36; CHECK-NEXT: lsrs r0, r0, #237; CHECK-NEXT: uxtb r0, r038; CHECK-NEXT: bx lr39entry:40 %0 = lshr i32 %x, 241 %shr = and i32 %0, 25542 ret i32 %shr43}44 45define i32 @test4(i32 %x) {46; CHECK-LABEL: test4:47; CHECK: @ %bb.0: @ %entry48; CHECK-NEXT: lsrs r0, r0, #349; CHECK-NEXT: lsls r0, r0, #750; CHECK-NEXT: bx lr51entry:52 %0 = shl i32 %x, 453 %shr = and i32 %0, -12854 ret i32 %shr55}56 57define i32 @test5(i32 %x) {58; CHECK-LABEL: test5:59; CHECK: @ %bb.0: @ %entry60; CHECK-NEXT: lsls r0, r0, #3161; CHECK-NEXT: lsrs r0, r0, #262; CHECK-NEXT: bx lr63entry:64 %0 = shl i32 %x, 2965 %shr = and i32 %0, 53687091266 ret i32 %shr67}68 69define i32 @test6(i32 %x) {70; CHECK-LABEL: test6:71; CHECK: @ %bb.0: @ %entry72; CHECK-NEXT: movs r1, #573; CHECK-NEXT: ands r1, r074; CHECK-NEXT: lsls r0, r1, #2975; CHECK-NEXT: bx lr76entry:77 %0 = shl i32 %x, 2978 %shr = and i32 %0, 268435456079 ret i32 %shr80}81 82define i32 @test7(i32 %x) {83; CHECK-LABEL: test7:84; CHECK: @ %bb.0: @ %entry85; CHECK-NEXT: lsrs r0, r0, #3186; CHECK-NEXT: lsls r0, r0, #287; CHECK-NEXT: bx lr88entry:89 %0 = lshr i32 %x, 2990 %shr = and i32 %0, 491 ret i32 %shr92}93 94define i32 @test8(i32 %x) {95; CHECK-LABEL: test8:96; CHECK: @ %bb.0: @ %entry97; CHECK-NEXT: lsrs r1, r0, #2998; CHECK-NEXT: movs r0, #599; CHECK-NEXT: ands r0, r1100; CHECK-NEXT: bx lr101entry:102 %0 = lshr i32 %x, 29103 %shr = and i32 %0, 5104 ret i32 %shr105}106 107define i32 @test9(i32 %x) {108; CHECK-LABEL: test9:109; CHECK: @ %bb.0: @ %entry110; CHECK-NEXT: lsrs r0, r0, #3111; CHECK-NEXT: lsls r0, r0, #1112; CHECK-NEXT: bx lr113entry:114 %and = lshr i32 %x, 2115 %shr = and i32 %and, 1073741822116 ret i32 %shr117}118 119define i32 @test10(i32 %x) {120; CHECK-LABEL: test10:121; CHECK: @ %bb.0: @ %entry122; CHECK-NEXT: lsls r0, r0, #2123; CHECK-NEXT: uxtb r0, r0124; CHECK-NEXT: bx lr125entry:126 %0 = shl i32 %x, 2127 %shr = and i32 %0, 255128 ret i32 %shr129}130 131define i32 @test11(i32 %x) {132; CHECK-LABEL: test11:133; CHECK: @ %bb.0: @ %entry134; CHECK-NEXT: lsrs r0, r0, #24135; CHECK-NEXT: lsls r0, r0, #2136; CHECK-NEXT: bx lr137entry:138 %shl = lshr i32 %x, 22139 %and = and i32 %shl, 1020140 ret i32 %and141}142 143define i32 @test12(i32 %x) {144; CHECK-LABEL: test12:145; CHECK: @ %bb.0: @ %entry146; CHECK-NEXT: lsrs r0, r0, #3147; CHECK-NEXT: lsls r0, r0, #4148; CHECK-NEXT: bx lr149entry:150 %0 = shl i32 %x, 1151 %shr = and i32 %0, -16152 ret i32 %shr153}154 155define i32 @test13(i32 %x) {156; CHECK-LABEL: test13:157; CHECK: @ %bb.0: @ %entry158; CHECK-NEXT: lsrs r0, r0, #3159; CHECK-NEXT: lsls r0, r0, #4160; CHECK-NEXT: bx lr161entry:162 %shr = lshr i32 %x, 3163 %shl = shl i32 %shr, 4164 ret i32 %shl165}166 167define i32 @test14(i32 %x) {168; CHECK-LABEL: test14:169; CHECK: @ %bb.0: @ %entry170; CHECK-NEXT: lsrs r0, r0, #6171; CHECK-NEXT: lsls r0, r0, #10172; CHECK-NEXT: bx lr173entry:174 %shl = shl i32 %x, 4175 %and = and i32 %shl, -1024176 ret i32 %and177}178 179define i32 @test15(i32 %x) {180; CHECK-LABEL: test15:181; CHECK: @ %bb.0: @ %entry182; CHECK-NEXT: lsrs r0, r0, #4183; CHECK-NEXT: lsls r0, r0, #3184; CHECK-NEXT: bx lr185entry:186 %shr = lshr i32 %x, 4187 %shl = shl i32 %shr, 3188 ret i32 %shl189}190 191define i32 @test16(i32 %x) {192; CHECK-LABEL: test16:193; CHECK: @ %bb.0: @ %entry194; CHECK-NEXT: lsls r0, r0, #28195; CHECK-NEXT: lsrs r0, r0, #26196; CHECK-NEXT: bx lr197entry:198 %0 = and i32 %x, 15199 %shl = shl i32 %0, 2200 ret i32 %shl201}202 203define ptr @test17(ptr %p, i32 %x) {204; CHECK-LABEL: test17:205; CHECK: @ %bb.0: @ %entry206; CHECK-NEXT: lsls r1, r1, #28207; CHECK-NEXT: lsrs r1, r1, #26208; CHECK-NEXT: adds r0, r0, r1209; CHECK-NEXT: bx lr210entry:211 %0 = and i32 %x, 15212 %shl = getelementptr i32, ptr %p, i32 %0213 ret ptr %shl214}215 216define ptr @test18(ptr %p, i32 %x) {217; CHECK-LABEL: test18:218; CHECK: @ %bb.0: @ %entry219; CHECK-NEXT: adds r1, r1, #1220; CHECK-NEXT: lsls r1, r1, #28221; CHECK-NEXT: lsrs r1, r1, #26222; CHECK-NEXT: adds r0, r0, r1223; CHECK-NEXT: bx lr224entry:225 %xx = add i32 %x, 1226 %0 = and i32 %xx, 15227 %shl = getelementptr i32, ptr %p, i32 %0228 ret ptr %shl229}230 231define ptr @test19(ptr %p, i32 %x) {232; CHECK-LABEL: test19:233; CHECK: @ %bb.0: @ %entry234; CHECK-NEXT: subs r1, r1, #1235; CHECK-NEXT: lsls r1, r1, #28236; CHECK-NEXT: lsrs r1, r1, #26237; CHECK-NEXT: adds r0, r0, r1238; CHECK-NEXT: bx lr239entry:240 %xx = sub i32 %x, 1241 %0 = and i32 %xx, 15242 %shl = getelementptr i32, ptr %p, i32 %0243 ret ptr %shl244}245 246define ptr @test20(ptr %p, i32 %x) {247; CHECK-LABEL: test20:248; CHECK: @ %bb.0: @ %entry249; CHECK-NEXT: subs r1, r1, #1250; CHECK-NEXT: lsls r1, r1, #28251; CHECK-NEXT: lsrs r1, r1, #26252; CHECK-NEXT: adds r0, r0, r1253; CHECK-NEXT: bx lr254entry:255 %xx = add i32 %x, 15256 %0 = and i32 %xx, 15257 %shl = getelementptr i32, ptr %p, i32 %0258 ret ptr %shl259}260