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