brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.1 KiB · 00922b1 Raw
528 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=armv7-none-eabi -mcpu=cortex-a8 | FileCheck %s -check-prefix=CHECK-ARM3; RUN: llc < %s -mtriple=armv7-none-eabi -mcpu=cortex-a9 | FileCheck %s -check-prefix=CHECK-ARM4; RUN: llc < %s -mtriple=thumbv7m-none-eabi | FileCheck %s -check-prefix=CHECK-THUMB5; rdar://85767556 7 8define i32 @test1(i32 %X, i32 %Y, i8 %sh) {9; CHECK-ARM-LABEL: test1:10; CHECK-ARM:       @ %bb.0:11; CHECK-ARM-NEXT:    uxtb r2, r212; CHECK-ARM-NEXT:    add r0, r0, r1, lsl r213; CHECK-ARM-NEXT:    bx lr14;15; CHECK-THUMB-LABEL: test1:16; CHECK-THUMB:       @ %bb.0:17; CHECK-THUMB-NEXT:    uxtb r2, r218; CHECK-THUMB-NEXT:    lsls r1, r219; CHECK-THUMB-NEXT:    add r0, r120; CHECK-THUMB-NEXT:    bx lr21        %shift.upgrd.1 = zext i8 %sh to i3222        %A = shl i32 %Y, %shift.upgrd.123        %B = add i32 %X, %A24        ret i32 %B25}26 27define i32 @test2(i32 %X, i32 %Y, i8 %sh) {28; CHECK-ARM-LABEL: test2:29; CHECK-ARM:       @ %bb.0:30; CHECK-ARM-NEXT:    uxtb r2, r231; CHECK-ARM-NEXT:    bic r0, r0, r1, asr r232; CHECK-ARM-NEXT:    bx lr33;34; CHECK-THUMB-LABEL: test2:35; CHECK-THUMB:       @ %bb.0:36; CHECK-THUMB-NEXT:    uxtb r2, r237; CHECK-THUMB-NEXT:    asrs r1, r238; CHECK-THUMB-NEXT:    bics r0, r139; CHECK-THUMB-NEXT:    bx lr40        %shift.upgrd.2 = zext i8 %sh to i3241        %A = ashr i32 %Y, %shift.upgrd.242        %B = xor i32 %A, -143        %C = and i32 %X, %B44        ret i32 %C45}46 47define i32 @test3(i32 %base, i32 %base2, i32 %offset) {48; CHECK-ARM-LABEL: test3:49; CHECK-ARM:       @ %bb.0: @ %entry50; CHECK-ARM-NEXT:    ldr r0, [r0, r2, lsl #2]51; CHECK-ARM-NEXT:    ldr r1, [r1, r2, lsl #2]52; CHECK-ARM-NEXT:    add r0, r1, r053; CHECK-ARM-NEXT:    bx lr54;55; CHECK-THUMB-LABEL: test3:56; CHECK-THUMB:       @ %bb.0: @ %entry57; CHECK-THUMB-NEXT:    ldr.w r0, [r0, r2, lsl #2]58; CHECK-THUMB-NEXT:    ldr.w r1, [r1, r2, lsl #2]59; CHECK-THUMB-NEXT:    add r0, r160; CHECK-THUMB-NEXT:    bx lr61entry:62        %tmp1 = shl i32 %offset, 263        %tmp2 = add i32 %base, %tmp164        %tmp3 = inttoptr i32 %tmp2 to ptr65        %tmp4 = add i32 %base2, %tmp166        %tmp5 = inttoptr i32 %tmp4 to ptr67        %tmp6 = load i32, ptr %tmp368        %tmp7 = load i32, ptr %tmp569        %tmp8 = add i32 %tmp7, %tmp670        ret i32 %tmp871}72 73declare ptr @malloc(...)74 75define fastcc void @test4(i16 %addr) nounwind {76; CHECK-ARM-LABEL: test4:77; CHECK-ARM:       @ %bb.0: @ %entry78; CHECK-ARM-NEXT:    .save {r4, lr}79; CHECK-ARM-NEXT:    push {r4, lr}80; CHECK-ARM-NEXT:    mov r4, r081; CHECK-ARM-NEXT:    bl malloc82; CHECK-ARM-NEXT:    sxth r1, r483; CHECK-ARM-NEXT:    ldr r2, [r0, r1, lsl #2]84; CHECK-ARM-NEXT:    add r2, r2, #185; CHECK-ARM-NEXT:    str r2, [r0, r1, lsl #2]86; CHECK-ARM-NEXT:    pop {r4, pc}87;88; CHECK-THUMB-LABEL: test4:89; CHECK-THUMB:       @ %bb.0: @ %entry90; CHECK-THUMB-NEXT:    .save {r4, lr}91; CHECK-THUMB-NEXT:    push {r4, lr}92; CHECK-THUMB-NEXT:    mov r4, r093; CHECK-THUMB-NEXT:    bl malloc94; CHECK-THUMB-NEXT:    sxth r1, r495; CHECK-THUMB-NEXT:    ldr.w r2, [r0, r1, lsl #2]96; CHECK-THUMB-NEXT:    adds r2, #197; CHECK-THUMB-NEXT:    str.w r2, [r0, r1, lsl #2]98; CHECK-THUMB-NEXT:    pop {r4, pc}99entry:100  %0 = tail call ptr (...) @malloc(i32 undef) nounwind101  %1 = sext i16 %addr to i32102  %2 = getelementptr inbounds i32, ptr %0, i32 %1103  %3 = load i32, ptr %2, align 4104  %4 = add nsw i32 %3, 1105  store i32 %4, ptr %2, align 4106  ret void107}108 109define i32 @test_orr_extract_from_mul_1(i32 %x, i32 %y) {110; CHECK-ARM-LABEL: test_orr_extract_from_mul_1:111; CHECK-ARM:       @ %bb.0: @ %entry112; CHECK-ARM-NEXT:    movw r2, #63767113; CHECK-ARM-NEXT:    mul r1, r1, r2114; CHECK-ARM-NEXT:    orr r0, r1, r0115; CHECK-ARM-NEXT:    bx lr116;117; CHECK-THUMB-LABEL: test_orr_extract_from_mul_1:118; CHECK-THUMB:       @ %bb.0: @ %entry119; CHECK-THUMB-NEXT:    movw r2, #63767120; CHECK-THUMB-NEXT:    muls r1, r2, r1121; CHECK-THUMB-NEXT:    orrs r0, r1122; CHECK-THUMB-NEXT:    bx lr123entry:124  %mul = mul i32 %y, 63767125  %or = or i32 %mul, %x126  ret i32 %or127}128 129define i32 @test_orr_extract_from_mul_2(i32 %x, i32 %y) {130; CHECK-ARM-LABEL: test_orr_extract_from_mul_2:131; CHECK-ARM:       @ %bb.0: @ %entry132; CHECK-ARM-NEXT:    movw r2, #63767133; CHECK-ARM-NEXT:    mul r1, r1, r2134; CHECK-ARM-NEXT:    orr r0, r0, r1, lsl #1135; CHECK-ARM-NEXT:    bx lr136;137; CHECK-THUMB-LABEL: test_orr_extract_from_mul_2:138; CHECK-THUMB:       @ %bb.0: @ %entry139; CHECK-THUMB-NEXT:    movw r2, #63767140; CHECK-THUMB-NEXT:    muls r1, r2, r1141; CHECK-THUMB-NEXT:    orr.w r0, r0, r1, lsl #1142; CHECK-THUMB-NEXT:    bx lr143entry:144  %mul1 = mul i32 %y, 127534145  %or = or i32 %mul1, %x146  ret i32 %or147}148 149define i32 @test_orr_extract_from_mul_3(i32 %x, i32 %y) {150; CHECK-ARM-LABEL: test_orr_extract_from_mul_3:151; CHECK-ARM:       @ %bb.0: @ %entry152; CHECK-ARM-NEXT:    movw r2, #63767153; CHECK-ARM-NEXT:    mul r1, r1, r2154; CHECK-ARM-NEXT:    orr r0, r0, r1, lsl #2155; CHECK-ARM-NEXT:    bx lr156;157; CHECK-THUMB-LABEL: test_orr_extract_from_mul_3:158; CHECK-THUMB:       @ %bb.0: @ %entry159; CHECK-THUMB-NEXT:    movw r2, #63767160; CHECK-THUMB-NEXT:    muls r1, r2, r1161; CHECK-THUMB-NEXT:    orr.w r0, r0, r1, lsl #2162; CHECK-THUMB-NEXT:    bx lr163entry:164  %mul1 = mul i32 %y, 255068165  %or = or i32 %mul1, %x166  ret i32 %or167}168 169define i32 @test_orr_extract_from_mul_4(i32 %x, i32 %y) {170; CHECK-ARM-LABEL: test_orr_extract_from_mul_4:171; CHECK-ARM:       @ %bb.0: @ %entry172; CHECK-ARM-NEXT:    movw r2, #63767173; CHECK-ARM-NEXT:    mul r1, r1, r2174; CHECK-ARM-NEXT:    orr r0, r0, r1, lsl #3175; CHECK-ARM-NEXT:    bx lr176;177; CHECK-THUMB-LABEL: test_orr_extract_from_mul_4:178; CHECK-THUMB:       @ %bb.0: @ %entry179; CHECK-THUMB-NEXT:    movw r2, #63767180; CHECK-THUMB-NEXT:    muls r1, r2, r1181; CHECK-THUMB-NEXT:    orr.w r0, r0, r1, lsl #3182; CHECK-THUMB-NEXT:    bx lr183entry:184  %mul1 = mul i32 %y, 510136185  %or = or i32 %mul1, %x186  ret i32 %or187}188 189define i32 @test_orr_extract_from_mul_5(i32 %x, i32 %y) {190; CHECK-ARM-LABEL: test_orr_extract_from_mul_5:191; CHECK-ARM:       @ %bb.0: @ %entry192; CHECK-ARM-NEXT:    movw r2, #63767193; CHECK-ARM-NEXT:    mul r1, r1, r2194; CHECK-ARM-NEXT:    orr r0, r0, r1, lsl #4195; CHECK-ARM-NEXT:    bx lr196;197; CHECK-THUMB-LABEL: test_orr_extract_from_mul_5:198; CHECK-THUMB:       @ %bb.0: @ %entry199; CHECK-THUMB-NEXT:    movw r2, #63767200; CHECK-THUMB-NEXT:    muls r1, r2, r1201; CHECK-THUMB-NEXT:    orr.w r0, r0, r1, lsl #4202; CHECK-THUMB-NEXT:    bx lr203entry:204  %mul1 = mul i32 %y, 1020272205  %or = or i32 %mul1, %x206  ret i32 %or207}208 209define i32 @test_orr_extract_from_mul_6(i32 %x, i32 %y) {210; CHECK-ARM-LABEL: test_orr_extract_from_mul_6:211; CHECK-ARM:       @ %bb.0: @ %entry212; CHECK-ARM-NEXT:    movw r2, #63767213; CHECK-ARM-NEXT:    mul r1, r1, r2214; CHECK-ARM-NEXT:    orr r0, r0, r1, lsl #16215; CHECK-ARM-NEXT:    bx lr216;217; CHECK-THUMB-LABEL: test_orr_extract_from_mul_6:218; CHECK-THUMB:       @ %bb.0: @ %entry219; CHECK-THUMB-NEXT:    movw r2, #63767220; CHECK-THUMB-NEXT:    muls r1, r2, r1221; CHECK-THUMB-NEXT:    orr.w r0, r0, r1, lsl #16222; CHECK-THUMB-NEXT:    bx lr223entry:224  %mul = mul i32 %y, -115933184225  %or = or i32 %mul, %x226  ret i32 %or227}228 229define i32 @test_load_extract_from_mul_1(ptr %x, i32 %y) {230; CHECK-ARM-LABEL: test_load_extract_from_mul_1:231; CHECK-ARM:       @ %bb.0: @ %entry232; CHECK-ARM-NEXT:    movw r2, #63767233; CHECK-ARM-NEXT:    mul r1, r1, r2234; CHECK-ARM-NEXT:    ldrb r0, [r0, r1]235; CHECK-ARM-NEXT:    bx lr236;237; CHECK-THUMB-LABEL: test_load_extract_from_mul_1:238; CHECK-THUMB:       @ %bb.0: @ %entry239; CHECK-THUMB-NEXT:    movw r2, #63767240; CHECK-THUMB-NEXT:    muls r1, r2, r1241; CHECK-THUMB-NEXT:    ldrb r0, [r0, r1]242; CHECK-THUMB-NEXT:    bx lr243entry:244  %mul = mul i32 %y, 63767245  %arrayidx = getelementptr inbounds i8, ptr %x, i32 %mul246  %0 = load i8, ptr %arrayidx, align 1247  %conv = zext i8 %0 to i32248  ret i32 %conv249}250 251define i32 @test_load_extract_from_mul_2(ptr %x, i32 %y) {252; CHECK-ARM-LABEL: test_load_extract_from_mul_2:253; CHECK-ARM:       @ %bb.0: @ %entry254; CHECK-ARM-NEXT:    movw r2, #63767255; CHECK-ARM-NEXT:    mul r1, r1, r2256; CHECK-ARM-NEXT:    ldrb r0, [r0, r1, lsl #1]257; CHECK-ARM-NEXT:    bx lr258;259; CHECK-THUMB-LABEL: test_load_extract_from_mul_2:260; CHECK-THUMB:       @ %bb.0: @ %entry261; CHECK-THUMB-NEXT:    movw r2, #63767262; CHECK-THUMB-NEXT:    muls r1, r2, r1263; CHECK-THUMB-NEXT:    ldrb.w r0, [r0, r1, lsl #1]264; CHECK-THUMB-NEXT:    bx lr265entry:266  %mul1 = mul i32 %y, 127534267  %arrayidx = getelementptr inbounds i8, ptr %x, i32 %mul1268  %0 = load i8, ptr %arrayidx, align 1269  %conv = zext i8 %0 to i32270  ret i32 %conv271}272 273define i32 @test_load_extract_from_mul_3(ptr %x, i32 %y) {274; CHECK-ARM-LABEL: test_load_extract_from_mul_3:275; CHECK-ARM:       @ %bb.0: @ %entry276; CHECK-ARM-NEXT:    movw r2, #63767277; CHECK-ARM-NEXT:    mul r1, r1, r2278; CHECK-ARM-NEXT:    ldrb r0, [r0, r1, lsl #2]279; CHECK-ARM-NEXT:    bx lr280;281; CHECK-THUMB-LABEL: test_load_extract_from_mul_3:282; CHECK-THUMB:       @ %bb.0: @ %entry283; CHECK-THUMB-NEXT:    movw r2, #63767284; CHECK-THUMB-NEXT:    muls r1, r2, r1285; CHECK-THUMB-NEXT:    ldrb.w r0, [r0, r1, lsl #2]286; CHECK-THUMB-NEXT:    bx lr287entry:288  %mul1 = mul i32 %y, 255068289  %arrayidx = getelementptr inbounds i8, ptr %x, i32 %mul1290  %0 = load i8, ptr %arrayidx, align 1291  %conv = zext i8 %0 to i32292  ret i32 %conv293}294 295define i32 @test_load_extract_from_mul_4(ptr %x, i32 %y) {296; CHECK-ARM-LABEL: test_load_extract_from_mul_4:297; CHECK-ARM:       @ %bb.0: @ %entry298; CHECK-ARM-NEXT:    movw r2, #63767299; CHECK-ARM-NEXT:    mul r1, r1, r2300; CHECK-ARM-NEXT:    ldrb r0, [r0, r1, lsl #3]301; CHECK-ARM-NEXT:    bx lr302;303; CHECK-THUMB-LABEL: test_load_extract_from_mul_4:304; CHECK-THUMB:       @ %bb.0: @ %entry305; CHECK-THUMB-NEXT:    movw r2, #63767306; CHECK-THUMB-NEXT:    muls r1, r2, r1307; CHECK-THUMB-NEXT:    ldrb.w r0, [r0, r1, lsl #3]308; CHECK-THUMB-NEXT:    bx lr309entry:310  %mul1 = mul i32 %y, 510136311  %arrayidx = getelementptr inbounds i8, ptr %x, i32 %mul1312  %0 = load i8, ptr %arrayidx, align 1313  %conv = zext i8 %0 to i32314  ret i32 %conv315}316 317define i32 @test_load_extract_from_mul_5(ptr %x, i32 %y) {318; CHECK-ARM-LABEL: test_load_extract_from_mul_5:319; CHECK-ARM:       @ %bb.0: @ %entry320; CHECK-ARM-NEXT:    movw r2, #63767321; CHECK-ARM-NEXT:    mul r1, r1, r2322; CHECK-ARM-NEXT:    ldrb r0, [r0, r1, lsl #4]323; CHECK-ARM-NEXT:    bx lr324;325; CHECK-THUMB-LABEL: test_load_extract_from_mul_5:326; CHECK-THUMB:       @ %bb.0: @ %entry327; CHECK-THUMB-NEXT:    movw r2, #37232328; CHECK-THUMB-NEXT:    movt r2, #15329; CHECK-THUMB-NEXT:    muls r1, r2, r1330; CHECK-THUMB-NEXT:    ldrb r0, [r0, r1]331; CHECK-THUMB-NEXT:    bx lr332entry:333  %mul1 = mul i32 %y, 1020272334  %arrayidx = getelementptr inbounds i8, ptr %x, i32 %mul1335  %0 = load i8, ptr %arrayidx, align 1336  %conv = zext i8 %0 to i32337  ret i32 %conv338}339 340define i32 @test_load_extract_from_mul_6(ptr %x, i32 %y) {341; CHECK-ARM-LABEL: test_load_extract_from_mul_6:342; CHECK-ARM:       @ %bb.0: @ %entry343; CHECK-ARM-NEXT:    movw r2, #63767344; CHECK-ARM-NEXT:    mul r1, r1, r2345; CHECK-ARM-NEXT:    ldrb r0, [r0, r1, lsl #16]346; CHECK-ARM-NEXT:    bx lr347;348; CHECK-THUMB-LABEL: test_load_extract_from_mul_6:349; CHECK-THUMB:       @ %bb.0: @ %entry350; CHECK-THUMB-NEXT:    movs r2, #0351; CHECK-THUMB-NEXT:    movt r2, #63767352; CHECK-THUMB-NEXT:    muls r1, r2, r1353; CHECK-THUMB-NEXT:    ldrb r0, [r0, r1]354; CHECK-THUMB-NEXT:    bx lr355entry:356  %mul = mul i32 %y, -115933184357  %arrayidx = getelementptr inbounds i8, ptr %x, i32 %mul358  %0 = load i8, ptr %arrayidx, align 1359  %conv = zext i8 %0 to i32360  ret i32 %conv361}362 363 364define void @test_well_formed_dag(i32 %in1, i32 %in2, ptr %addr) {365; CHECK-ARM-LABEL: test_well_formed_dag:366; CHECK-ARM:       @ %bb.0:367; CHECK-ARM-NEXT:    movw r3, #675368; CHECK-ARM-NEXT:    mul r0, r0, r3369; CHECK-ARM-NEXT:    add r0, r1, r0, lsl #7370; CHECK-ARM-NEXT:    str r0, [r2]371; CHECK-ARM-NEXT:    bx lr372;373; CHECK-THUMB-LABEL: test_well_formed_dag:374; CHECK-THUMB:       @ %bb.0:375; CHECK-THUMB-NEXT:    movw r3, #675376; CHECK-THUMB-NEXT:    muls r0, r3, r0377; CHECK-THUMB-NEXT:    add.w r0, r1, r0, lsl #7378; CHECK-THUMB-NEXT:    str r0, [r2]379; CHECK-THUMB-NEXT:    bx lr380 381  %mul.small = mul i32 %in1, 675382  store i32 %mul.small, ptr %addr383  %mul.big = mul i32 %in1, 86400384  %add = add i32 %in2, %mul.big385  store i32 %add, ptr %addr386  ret void387}388 389define { i32, i32 } @test_multi_use_add(i32 %base, i32 %offset) {390; CHECK-ARM-LABEL: test_multi_use_add:391; CHECK-ARM:       @ %bb.0:392; CHECK-ARM-NEXT:    movw r2, #28393; CHECK-ARM-NEXT:    movt r2, #1394; CHECK-ARM-NEXT:    mul r1, r1, r2395; CHECK-ARM-NEXT:    ldr r1, [r0, r1]!396; CHECK-ARM-NEXT:    bx lr397;398; CHECK-THUMB-LABEL: test_multi_use_add:399; CHECK-THUMB:       @ %bb.0:400; CHECK-THUMB-NEXT:    movs r3, #28401; CHECK-THUMB-NEXT:    movt r3, #1402; CHECK-THUMB-NEXT:    mla r2, r1, r3, r0403; CHECK-THUMB-NEXT:    muls r1, r3, r1404; CHECK-THUMB-NEXT:    ldr r1, [r0, r1]405; CHECK-THUMB-NEXT:    mov r0, r2406; CHECK-THUMB-NEXT:    bx lr407 408  %prod = mul i32 %offset, 65564409  %sum = add i32 %base, %prod410 411  %ptr = inttoptr i32 %sum to ptr412  %loaded = load i32, ptr %ptr413 414  %ret.tmp = insertvalue { i32, i32 } undef, i32 %sum, 0415  %ret = insertvalue { i32, i32 } %ret.tmp, i32 %loaded, 1416 417  ret { i32, i32 } %ret418}419 420define i32 @test_new(i32 %x, i32 %y) {421; CHECK-ARM-LABEL: test_new:422; CHECK-ARM:       @ %bb.0: @ %entry423; CHECK-ARM-NEXT:    movw r2, #48047424; CHECK-ARM-NEXT:    mul r1, r1, r2425; CHECK-ARM-NEXT:    add r0, r0, r1, lsl #1426; CHECK-ARM-NEXT:    bx lr427;428; CHECK-THUMB-LABEL: test_new:429; CHECK-THUMB:       @ %bb.0: @ %entry430; CHECK-THUMB-NEXT:    movw r2, #48047431; CHECK-THUMB-NEXT:    muls r1, r2, r1432; CHECK-THUMB-NEXT:    add.w r0, r0, r1, lsl #1433; CHECK-THUMB-NEXT:    bx lr434entry:435  %mul = mul i32 %y, 96094436  %conv = add i32 %mul, %x437  ret i32 %conv438}439 440; This test was hitting issues with deleted nodes because ComplexPatternFuncMutatesDAG441; was not defined.442@arr_9 = external dso_local local_unnamed_addr global [15 x [25 x [18 x i8]]], align 1443define void @test_mutateddag(i32 %b, i32 %c, i32 %d, i1 %cc) {444; CHECK-THUMB-LABEL: test_mutateddag:445; CHECK-THUMB:       @ %bb.0: @ %entry446; CHECK-THUMB-NEXT:    .save {r4, r5, r7, lr}447; CHECK-THUMB-NEXT:    push {r4, r5, r7, lr}448; CHECK-THUMB-NEXT:    movw r12, #50608449; CHECK-THUMB-NEXT:    movw r4, #51512450; CHECK-THUMB-NEXT:    movt r12, #17917451; CHECK-THUMB-NEXT:    movt r4, #52452; CHECK-THUMB-NEXT:    mla r12, r1, r4, r12453; CHECK-THUMB-NEXT:    mov.w r4, #450454; CHECK-THUMB-NEXT:    movw r5, :lower16:arr_9455; CHECK-THUMB-NEXT:    mul lr, r0, r4456; CHECK-THUMB-NEXT:    movw r0, #12878457; CHECK-THUMB-NEXT:    movt r0, #13458; CHECK-THUMB-NEXT:    muls r0, r1, r0459; CHECK-THUMB-NEXT:    add.w r4, r2, r2, lsl #3460; CHECK-THUMB-NEXT:    movw r2, #60920461; CHECK-THUMB-NEXT:    movt r5, :upper16:arr_9462; CHECK-THUMB-NEXT:    movt r2, #64028463; CHECK-THUMB-NEXT:    lsls r3, r3, #31464; CHECK-THUMB-NEXT:    add.w r0, r0, r4, lsl #1465; CHECK-THUMB-NEXT:    add r0, r5466; CHECK-THUMB-NEXT:    add r2, r0467; CHECK-THUMB-NEXT:    movw r0, #25756468; CHECK-THUMB-NEXT:    movt r0, #26469; CHECK-THUMB-NEXT:    muls r0, r1, r0470; CHECK-THUMB-NEXT:    movw r1, #24420471; CHECK-THUMB-NEXT:    movt r1, #19356472; CHECK-THUMB-NEXT:    add.w r0, r0, r4, lsl #1473; CHECK-THUMB-NEXT:    add r0, r5474; CHECK-THUMB-NEXT:    add r1, r0475; CHECK-THUMB-NEXT:    movs r0, #0476; CHECK-THUMB-NEXT:    b .LBB19_2477; CHECK-THUMB-NEXT:  .LBB19_1: @ %for.cond1.for.cond.cleanup_crit_edge478; CHECK-THUMB-NEXT:    @ in Loop: Header=BB19_2 Depth=1479; CHECK-THUMB-NEXT:    add r2, lr480; CHECK-THUMB-NEXT:    add r1, lr481; CHECK-THUMB-NEXT:  .LBB19_2: @ %for.cond482; CHECK-THUMB-NEXT:    @ =>This Loop Header: Depth=1483; CHECK-THUMB-NEXT:    @ Child Loop BB19_3 Depth 2484; CHECK-THUMB-NEXT:    movs r4, #0485; CHECK-THUMB-NEXT:  .LBB19_3: @ %for.cond2.preheader486; CHECK-THUMB-NEXT:    @ Parent Loop BB19_2 Depth=1487; CHECK-THUMB-NEXT:    @ => This Inner Loop Header: Depth=2488; CHECK-THUMB-NEXT:    cmp r3, #0489; CHECK-THUMB-NEXT:    str r0, [r2, r4]490; CHECK-THUMB-NEXT:    bne .LBB19_1491; CHECK-THUMB-NEXT:  @ %bb.4: @ %for.cond2.preheader.2492; CHECK-THUMB-NEXT:    @ in Loop: Header=BB19_3 Depth=2493; CHECK-THUMB-NEXT:    str r0, [r1, r4]494; CHECK-THUMB-NEXT:    add r4, r12495; CHECK-THUMB-NEXT:    b .LBB19_3496entry:497  %0 = add i32 %d, -4498  %1 = mul i32 %c, 864846499  %2 = add i32 %1, 1367306604500  br label %for.cond501 502for.cond:                                         ; preds = %for.cond1.for.cond.cleanup_crit_edge, %for.cond.preheader503  %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %for.cond1.for.cond.cleanup_crit_edge ]504  %3 = mul i32 %indvar, %b505  %4 = add i32 %3, -2506  br label %for.cond2.preheader507 508for.cond2.preheader:                              ; preds = %for.cond2.preheader.2, %for.cond509  %indvar24 = phi i32 [ 0, %for.cond ], [ %indvar.next25.3, %for.cond2.preheader.2 ]510  %indvar.next25 = or disjoint i32 %indvar24, 1511  %l5 = mul i32 %2, %indvar.next25512  %scevgep.1 = getelementptr [15 x [25 x [18 x i8]]], ptr @arr_9, i32 -217196, i32 %4, i32 %0, i32 %l5513  store i32 0, ptr %scevgep.1, align 1514  br i1 %cc, label %for.cond1.for.cond.cleanup_crit_edge, label %for.cond2.preheader.2515 516for.cond2.preheader.2:                            ; preds = %for.cond2.preheader517  %indvar.next25.1 = or disjoint i32 %indvar24, 2518  %l8 = mul i32 %2, %indvar.next25.1519  %scevgep.2 = getelementptr [15 x [25 x [18 x i8]]], ptr @arr_9, i32 -217196, i32 %4, i32 %0, i32 %l8520  store i32 0, ptr %scevgep.2, align 1521  %indvar.next25.3 = add i32 %indvar24, 4522  br label %for.cond2.preheader523 524for.cond1.for.cond.cleanup_crit_edge:             ; preds = %for.cond2.preheader525  %indvar.next = add i32 %indvar, 1526  br label %for.cond527}528