1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -verify-machineinstrs -mattr=+mve %s -o - | FileCheck %s 3 4@var_36 = hidden local_unnamed_addr global i8 0, align 1 5@arr_61 = hidden local_unnamed_addr global [1 x i32] zeroinitializer, align 4 6 7define i32 @test(i8 zeroext %var_2, i16 signext %var_15, ptr %arr_60) { 8; CHECK-LABEL: test: 9; CHECK: @ %bb.0: @ %entry 10; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr} 11; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr} 12; CHECK-NEXT: .pad #16 13; CHECK-NEXT: sub sp, #16 14; CHECK-NEXT: cmp r0, #0 15; CHECK-NEXT: beq.w .LBB0_11 16; CHECK-NEXT: @ %bb.1: @ %for.cond1.preheader 17; CHECK-NEXT: cmp r2, #0 18; CHECK-NEXT: beq.w .LBB0_12 19; CHECK-NEXT: @ %bb.2: @ %for.cond1.preheader1 20; CHECK-NEXT: addw r0, r2, #441 21; CHECK-NEXT: str r0, [sp, #8] @ 4-byte Spill 22; CHECK-NEXT: addw r0, r2, #419 23; CHECK-NEXT: str r0, [sp, #4] @ 4-byte Spill 24; CHECK-NEXT: addw r0, r2, #397 25; CHECK-NEXT: movw r5, :lower16:var_36 26; CHECK-NEXT: str r0, [sp] @ 4-byte Spill 27; CHECK-NEXT: movw r0, #27476 28; CHECK-NEXT: movt r5, :upper16:var_36 29; CHECK-NEXT: sdiv r1, r0, r1 30; CHECK-NEXT: str r2, [sp, #12] @ 4-byte Spill 31; CHECK-NEXT: .LBB0_3: @ %for.cond1 32; CHECK-NEXT: @ =>This Loop Header: Depth=1 33; CHECK-NEXT: @ Child Loop BB0_4 Depth 2 34; CHECK-NEXT: @ Child Loop BB0_5 Depth 3 35; CHECK-NEXT: @ Child Loop BB0_7 Depth 3 36; CHECK-NEXT: @ Child Loop BB0_9 Depth 3 37; CHECK-NEXT: ldr.w r12, [sp, #8] @ 4-byte Reload 38; CHECK-NEXT: mov.w r10, #0 39; CHECK-NEXT: ldrd r8, r0, [sp] @ 8-byte Folded Reload 40; CHECK-NEXT: .LBB0_4: @ %for.cond6.preheader 41; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1 42; CHECK-NEXT: @ => This Loop Header: Depth=2 43; CHECK-NEXT: @ Child Loop BB0_5 Depth 3 44; CHECK-NEXT: @ Child Loop BB0_7 Depth 3 45; CHECK-NEXT: @ Child Loop BB0_9 Depth 3 46; CHECK-NEXT: movw r3, :lower16:arr_61 47; CHECK-NEXT: movt r3, :upper16:arr_61 48; CHECK-NEXT: add.w r11, r3, #4 49; CHECK-NEXT: movs r3, #11 50; CHECK-NEXT: dls lr, r3 51; CHECK-NEXT: mov r4, r11 52; CHECK-NEXT: mov r3, r8 53; CHECK-NEXT: .LBB0_5: @ %for.body10 54; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1 55; CHECK-NEXT: @ Parent Loop BB0_4 Depth=2 56; CHECK-NEXT: @ => This Inner Loop Header: Depth=3 57; CHECK-NEXT: str r2, [r4, #-4] 58; CHECK-NEXT: ldrb r6, [r3, #-1] 59; CHECK-NEXT: cmp r6, #0 60; CHECK-NEXT: ite ne 61; CHECK-NEXT: sxthne.w r9, r1 62; CHECK-NEXT: moveq.w r9, #0 63; CHECK-NEXT: add.w r6, r2, #396 64; CHECK-NEXT: cmp.w r9, #0 65; CHECK-NEXT: str r6, [r4] 66; CHECK-NEXT: cset r6, ne 67; CHECK-NEXT: strb r6, [r5] 68; CHECK-NEXT: add.w r2, r2, #792 69; CHECK-NEXT: ldrb r6, [r3] 70; CHECK-NEXT: adds r4, #8 71; CHECK-NEXT: adds r3, #2 72; CHECK-NEXT: cmp r6, #0 73; CHECK-NEXT: ite ne 74; CHECK-NEXT: sxthne r6, r1 75; CHECK-NEXT: moveq r6, #0 76; CHECK-NEXT: cmp r6, #0 77; CHECK-NEXT: cset r6, ne 78; CHECK-NEXT: strb r6, [r5] 79; CHECK-NEXT: le lr, .LBB0_5 80; CHECK-NEXT: @ %bb.6: @ %for.cond.cleanup9 81; CHECK-NEXT: @ in Loop: Header=BB0_4 Depth=2 82; CHECK-NEXT: movs r2, #11 83; CHECK-NEXT: mov r4, r11 84; CHECK-NEXT: dls lr, r2 85; CHECK-NEXT: mov r3, r0 86; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload 87; CHECK-NEXT: .LBB0_7: @ %for.body10.1 88; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1 89; CHECK-NEXT: @ Parent Loop BB0_4 Depth=2 90; CHECK-NEXT: @ => This Inner Loop Header: Depth=3 91; CHECK-NEXT: str r2, [r4, #-4] 92; CHECK-NEXT: add.w r7, r2, #396 93; CHECK-NEXT: ldrb r6, [r3, #-1] 94; CHECK-NEXT: add.w r2, r2, #792 95; CHECK-NEXT: cmp r6, #0 96; CHECK-NEXT: ite ne 97; CHECK-NEXT: sxthne r6, r1 98; CHECK-NEXT: moveq r6, #0 99; CHECK-NEXT: cmp r6, #0 100; CHECK-NEXT: str r7, [r4] 101; CHECK-NEXT: cset r6, ne 102; CHECK-NEXT: adds r4, #8 103; CHECK-NEXT: strb r6, [r5] 104; CHECK-NEXT: ldrb r6, [r3] 105; CHECK-NEXT: adds r3, #2 106; CHECK-NEXT: cmp r6, #0 107; CHECK-NEXT: ite ne 108; CHECK-NEXT: sxthne r6, r1 109; CHECK-NEXT: moveq r6, #0 110; CHECK-NEXT: cmp r6, #0 111; CHECK-NEXT: cset r6, ne 112; CHECK-NEXT: strb r6, [r5] 113; CHECK-NEXT: le lr, .LBB0_7 114; CHECK-NEXT: @ %bb.8: @ %for.cond.cleanup9.1 115; CHECK-NEXT: @ in Loop: Header=BB0_4 Depth=2 116; CHECK-NEXT: movs r2, #11 117; CHECK-NEXT: mov r3, r12 118; CHECK-NEXT: dls lr, r2 119; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload 120; CHECK-NEXT: .LBB0_9: @ %for.body10.2 121; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1 122; CHECK-NEXT: @ Parent Loop BB0_4 Depth=2 123; CHECK-NEXT: @ => This Inner Loop Header: Depth=3 124; CHECK-NEXT: str r2, [r11, #-4] 125; CHECK-NEXT: add.w r6, r2, #396 126; CHECK-NEXT: ldrb r4, [r3, #-1] 127; CHECK-NEXT: add.w r2, r2, #792 128; CHECK-NEXT: cmp r4, #0 129; CHECK-NEXT: ite ne 130; CHECK-NEXT: sxthne r4, r1 131; CHECK-NEXT: moveq r4, #0 132; CHECK-NEXT: cmp r4, #0 133; CHECK-NEXT: str.w r6, [r11] 134; CHECK-NEXT: cset r4, ne 135; CHECK-NEXT: add.w r11, r11, #8 136; CHECK-NEXT: strb r4, [r5] 137; CHECK-NEXT: ldrb r4, [r3] 138; CHECK-NEXT: adds r3, #2 139; CHECK-NEXT: cmp r4, #0 140; CHECK-NEXT: ite ne 141; CHECK-NEXT: sxthne r4, r1 142; CHECK-NEXT: moveq r4, #0 143; CHECK-NEXT: cmp r4, #0 144; CHECK-NEXT: cset r4, ne 145; CHECK-NEXT: strb r4, [r5] 146; CHECK-NEXT: le lr, .LBB0_9 147; CHECK-NEXT: @ %bb.10: @ %for.cond.cleanup9.2 148; CHECK-NEXT: @ in Loop: Header=BB0_4 Depth=2 149; CHECK-NEXT: add.w r2, r10, #3 150; CHECK-NEXT: add.w r12, r12, #66 151; CHECK-NEXT: adds r0, #66 152; CHECK-NEXT: add.w r8, r8, #66 153; CHECK-NEXT: uxtb.w r10, r2 154; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload 155; CHECK-NEXT: cmp.w r10, #18 156; CHECK-NEXT: blo.w .LBB0_4 157; CHECK-NEXT: b .LBB0_3 158; CHECK-NEXT: .LBB0_11: @ %for.cond.cleanup 159; CHECK-NEXT: add sp, #16 160; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc} 161; CHECK-NEXT: .LBB0_12: @ %for.cond1.us.preheader 162; CHECK-NEXT: movw r0, :lower16:arr_61 163; CHECK-NEXT: movs r1, #0 164; CHECK-NEXT: movt r0, :upper16:arr_61 165; CHECK-NEXT: str r1, [r0, #84] 166; CHECK-NEXT: .inst.n 0xdefe 167entry: 168 %tobool.not = icmp eq i8 %var_2, 0 169 br i1 %tobool.not, label %for.cond.cleanup, label %for.cond1.preheader 170 171for.cond1.preheader: ; preds = %entry 172 %cmp11.not = icmp eq ptr %arr_60, null 173 br i1 %cmp11.not, label %for.cond1.us.preheader, label %for.cond1 174 175for.cond1.us.preheader: ; preds = %for.cond1.preheader 176 store i32 0, ptr getelementptr ([1 x i32], ptr @arr_61, i32 21, i32 0), align 4 177 call void @llvm.trap() 178 unreachable 179 180for.cond.cleanup: ; preds = %entry 181 ret i32 undef 182 183for.cond1: ; preds = %for.cond.cleanup9.2, %for.cond1.preheader 184 br label %for.cond6.preheader 185 186for.cond6.preheader: ; preds = %for.cond.cleanup9.2, %for.cond1 187 %conv45 = phi i32 [ 0, %for.cond1 ], [ %conv.2, %for.cond.cleanup9.2 ] 188 br label %for.body10 189 190for.cond.cleanup9: ; preds = %cond.end22.1 191 %add27 = add nuw nsw i32 %conv45, 1 192 %conv = and i32 %add27, 255 193 br label %for.body10.1 194 195for.body10: ; preds = %cond.end22.1, %for.cond6.preheader 196 %i_15.044 = phi i32 [ 0, %for.cond6.preheader ], [ %add.1, %cond.end22.1 ] 197 %arraydecay = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %i_15.044, i32 0 198 %0 = ptrtoint ptr %arraydecay to i32 199 %arrayidx13 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %i_15.044 200 store i32 %0, ptr %arrayidx13, align 4 201 %arrayidx16 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv45, i32 %i_15.044 202 %1 = load i8, ptr %arrayidx16, align 1 203 %tobool18.not = icmp eq i8 %1, 0 204 br i1 %tobool18.not, label %cond.end22, label %cond.true19 205 206cond.true19: ; preds = %for.body10 207 %div43 = sdiv i16 27476, %var_15 208 %div.sext = sext i16 %div43 to i32 209 br label %cond.end22 210 211cond.end22: ; preds = %for.body10, %cond.true19 212 %cond23 = phi i32 [ %div.sext, %cond.true19 ], [ 0, %for.body10 ] 213 %tobool24 = icmp ne i32 %cond23, 0 214 %frombool = zext i1 %tobool24 to i8 215 store i8 %frombool, ptr @var_36, align 1 216 %add = or disjoint i32 %i_15.044, 1 217 %arraydecay.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %add, i32 0 218 %2 = ptrtoint ptr %arraydecay.1 to i32 219 %arrayidx13.1 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %add 220 store i32 %2, ptr %arrayidx13.1, align 4 221 %arrayidx16.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv45, i32 %add 222 %3 = load i8, ptr %arrayidx16.1, align 1 223 %tobool18.not.1 = icmp eq i8 %3, 0 224 br i1 %tobool18.not.1, label %cond.end22.1, label %cond.true19.1 225 226cond.true19.1: ; preds = %cond.end22 227 %div43.1 = sdiv i16 27476, %var_15 228 %div.sext.1 = sext i16 %div43.1 to i32 229 br label %cond.end22.1 230 231cond.end22.1: ; preds = %cond.true19.1, %cond.end22 232 %cond23.1 = phi i32 [ %div.sext.1, %cond.true19.1 ], [ 0, %cond.end22 ] 233 %tobool24.1 = icmp ne i32 %cond23.1, 0 234 %frombool.1 = zext i1 %tobool24.1 to i8 235 store i8 %frombool.1, ptr @var_36, align 1 236 %add.1 = add nuw nsw i32 %i_15.044, 2 237 %exitcond105.not.1 = icmp eq i32 %add.1, 22 238 br i1 %exitcond105.not.1, label %for.cond.cleanup9, label %for.body10 239 240for.body10.1: ; preds = %cond.end22.1.1, %for.cond.cleanup9 241 %i_15.044.1 = phi i32 [ 0, %for.cond.cleanup9 ], [ %add.1.1, %cond.end22.1.1 ] 242 %arraydecay.1108 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %i_15.044.1, i32 0 243 %4 = ptrtoint ptr %arraydecay.1108 to i32 244 %arrayidx13.1109 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %i_15.044.1 245 store i32 %4, ptr %arrayidx13.1109, align 4 246 %arrayidx16.1110 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv, i32 %i_15.044.1 247 %5 = load i8, ptr %arrayidx16.1110, align 1 248 %tobool18.not.1111 = icmp eq i8 %5, 0 249 br i1 %tobool18.not.1111, label %cond.end22.1119, label %cond.true19.1114 250 251cond.true19.1114: ; preds = %for.body10.1 252 %div43.1112 = sdiv i16 27476, %var_15 253 %div.sext.1113 = sext i16 %div43.1112 to i32 254 br label %cond.end22.1119 255 256cond.end22.1119: ; preds = %cond.true19.1114, %for.body10.1 257 %cond23.1115 = phi i32 [ %div.sext.1113, %cond.true19.1114 ], [ 0, %for.body10.1 ] 258 %tobool24.1116 = icmp ne i32 %cond23.1115, 0 259 %frombool.1117 = zext i1 %tobool24.1116 to i8 260 store i8 %frombool.1117, ptr @var_36, align 1 261 %add.1118 = or disjoint i32 %i_15.044.1, 1 262 %arraydecay.1.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %add.1118, i32 0 263 %6 = ptrtoint ptr %arraydecay.1.1 to i32 264 %arrayidx13.1.1 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %add.1118 265 store i32 %6, ptr %arrayidx13.1.1, align 4 266 %arrayidx16.1.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv, i32 %add.1118 267 %7 = load i8, ptr %arrayidx16.1.1, align 1 268 %tobool18.not.1.1 = icmp eq i8 %7, 0 269 br i1 %tobool18.not.1.1, label %cond.end22.1.1, label %cond.true19.1.1 270 271cond.true19.1.1: ; preds = %cond.end22.1119 272 %div43.1.1 = sdiv i16 27476, %var_15 273 %div.sext.1.1 = sext i16 %div43.1.1 to i32 274 br label %cond.end22.1.1 275 276cond.end22.1.1: ; preds = %cond.true19.1.1, %cond.end22.1119 277 %cond23.1.1 = phi i32 [ %div.sext.1.1, %cond.true19.1.1 ], [ 0, %cond.end22.1119 ] 278 %tobool24.1.1 = icmp ne i32 %cond23.1.1, 0 279 %frombool.1.1 = zext i1 %tobool24.1.1 to i8 280 store i8 %frombool.1.1, ptr @var_36, align 1 281 %add.1.1 = add nuw nsw i32 %i_15.044.1, 2 282 %exitcond105.not.1.1 = icmp eq i32 %add.1.1, 22 283 br i1 %exitcond105.not.1.1, label %for.cond.cleanup9.1, label %for.body10.1 284 285for.cond.cleanup9.1: ; preds = %cond.end22.1.1 286 %add27.1 = add nuw nsw i32 %conv45, 2 287 %conv.1 = and i32 %add27.1, 255 288 br label %for.body10.2 289 290for.body10.2: ; preds = %cond.end22.1.2, %for.cond.cleanup9.1 291 %i_15.044.2 = phi i32 [ 0, %for.cond.cleanup9.1 ], [ %add.1.2, %cond.end22.1.2 ] 292 %arraydecay.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %i_15.044.2, i32 0 293 %8 = ptrtoint ptr %arraydecay.2 to i32 294 %arrayidx13.2 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %i_15.044.2 295 store i32 %8, ptr %arrayidx13.2, align 4 296 %arrayidx16.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv.1, i32 %i_15.044.2 297 %9 = load i8, ptr %arrayidx16.2, align 1 298 %tobool18.not.2 = icmp eq i8 %9, 0 299 br i1 %tobool18.not.2, label %cond.end22.2, label %cond.true19.2 300 301cond.true19.2: ; preds = %for.body10.2 302 %div43.2 = sdiv i16 27476, %var_15 303 %div.sext.2 = sext i16 %div43.2 to i32 304 br label %cond.end22.2 305 306cond.end22.2: ; preds = %cond.true19.2, %for.body10.2 307 %cond23.2 = phi i32 [ %div.sext.2, %cond.true19.2 ], [ 0, %for.body10.2 ] 308 %tobool24.2 = icmp ne i32 %cond23.2, 0 309 %frombool.2 = zext i1 %tobool24.2 to i8 310 store i8 %frombool.2, ptr @var_36, align 1 311 %add.2 = or disjoint i32 %i_15.044.2, 1 312 %arraydecay.1.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %add.2, i32 0 313 %10 = ptrtoint ptr %arraydecay.1.2 to i32 314 %arrayidx13.1.2 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %add.2 315 store i32 %10, ptr %arrayidx13.1.2, align 4 316 %arrayidx16.1.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv.1, i32 %add.2 317 %11 = load i8, ptr %arrayidx16.1.2, align 1 318 %tobool18.not.1.2 = icmp eq i8 %11, 0 319 br i1 %tobool18.not.1.2, label %cond.end22.1.2, label %cond.true19.1.2 320 321cond.true19.1.2: ; preds = %cond.end22.2 322 %div43.1.2 = sdiv i16 27476, %var_15 323 %div.sext.1.2 = sext i16 %div43.1.2 to i32 324 br label %cond.end22.1.2 325 326cond.end22.1.2: ; preds = %cond.true19.1.2, %cond.end22.2 327 %cond23.1.2 = phi i32 [ %div.sext.1.2, %cond.true19.1.2 ], [ 0, %cond.end22.2 ] 328 %tobool24.1.2 = icmp ne i32 %cond23.1.2, 0 329 %frombool.1.2 = zext i1 %tobool24.1.2 to i8 330 store i8 %frombool.1.2, ptr @var_36, align 1 331 %add.1.2 = add nuw nsw i32 %i_15.044.2, 2 332 %exitcond105.not.1.2 = icmp eq i32 %add.1.2, 22 333 br i1 %exitcond105.not.1.2, label %for.cond.cleanup9.2, label %for.body10.2 334 335for.cond.cleanup9.2: ; preds = %cond.end22.1.2 336 %add27.2 = add nuw nsw i32 %conv45, 3 337 %conv.2 = and i32 %add27.2, 255 338 %cmp.2 = icmp ult i32 %conv.2, 18 339 br i1 %cmp.2, label %for.cond6.preheader, label %for.cond1 340} 341 342declare void @llvm.trap() #1 343 344 345@b = hidden local_unnamed_addr global i32 0, align 4 346@a = hidden local_unnamed_addr global i32 0, align 4 347@c = hidden local_unnamed_addr global [1 x i32] zeroinitializer, align 4 348 349define i32 @d(i64 %e, i32 %f, i64 %g, i32 %h) { 350; CHECK-LABEL: d: 351; CHECK: @ %bb.0: @ %entry 352; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr} 353; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr} 354; CHECK-NEXT: .pad #4 355; CHECK-NEXT: sub sp, #4 356; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15} 357; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15} 358; CHECK-NEXT: .pad #16 359; CHECK-NEXT: sub sp, #16 360; CHECK-NEXT: mov lr, r0 361; CHECK-NEXT: subs r0, #1 362; CHECK-NEXT: sbcs r0, r1, #0 363; CHECK-NEXT: blt.w .LBB1_28 364; CHECK-NEXT: @ %bb.1: @ %for.cond2.preheader.lr.ph 365; CHECK-NEXT: movs r0, #1 366; CHECK-NEXT: cmp r2, #1 367; CHECK-NEXT: csel r7, r2, r0, lt 368; CHECK-NEXT: mov r12, r1 369; CHECK-NEXT: mov r1, r7 370; CHECK-NEXT: cmp r7, #3 371; CHECK-NEXT: it ls 372; CHECK-NEXT: movls r1, #3 373; CHECK-NEXT: mov r4, r2 374; CHECK-NEXT: subs r1, r1, r7 375; CHECK-NEXT: movw r2, #43691 376; CHECK-NEXT: adds r1, #2 377; CHECK-NEXT: movt r2, #43690 378; CHECK-NEXT: ldr r6, [sp, #128] 379; CHECK-NEXT: movw r8, :lower16:c 380; CHECK-NEXT: umull r1, r2, r1, r2 381; CHECK-NEXT: movt r8, :upper16:c 382; CHECK-NEXT: movs r1, #4 383; CHECK-NEXT: @ implicit-def: $r10 384; CHECK-NEXT: @ implicit-def: $r5 385; CHECK-NEXT: @ implicit-def: $r11 386; CHECK-NEXT: mov.w r9, #12 387; CHECK-NEXT: str r4, [sp, #12] @ 4-byte Spill 388; CHECK-NEXT: add.w r1, r1, r2, lsr #1 389; CHECK-NEXT: add.w r0, r0, r2, lsr #1 390; CHECK-NEXT: bic r3, r1, #3 391; CHECK-NEXT: adr r1, .LCPI1_0 392; CHECK-NEXT: vldrw.u32 q0, [r1] 393; CHECK-NEXT: adr r1, .LCPI1_1 394; CHECK-NEXT: vldrw.u32 q5, [r1] 395; CHECK-NEXT: vdup.32 q6, r0 396; CHECK-NEXT: vadd.i32 q4, q0, r7 397; CHECK-NEXT: vdup.32 q7, r0 398; CHECK-NEXT: strd r3, r7, [sp, #4] @ 8-byte Folded Spill 399; CHECK-NEXT: b .LBB1_6 400; CHECK-NEXT: .LBB1_2: @ %for.body6.preheader 401; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 402; CHECK-NEXT: mov r0, r11 403; CHECK-NEXT: cmn.w r11, #4 404; CHECK-NEXT: it le 405; CHECK-NEXT: mvnle r0, #3 406; CHECK-NEXT: movw r2, #18725 407; CHECK-NEXT: adds r0, #6 408; CHECK-NEXT: movt r2, #9362 409; CHECK-NEXT: sub.w r1, r0, r11 410; CHECK-NEXT: mov r10, r3 411; CHECK-NEXT: umull r2, r3, r1, r2 412; CHECK-NEXT: subs r2, r1, r3 413; CHECK-NEXT: add.w r2, r3, r2, lsr #1 414; CHECK-NEXT: lsrs r3, r2, #2 415; CHECK-NEXT: lsls r3, r3, #3 416; CHECK-NEXT: sub.w r2, r3, r2, lsr #2 417; CHECK-NEXT: subs r1, r2, r1 418; CHECK-NEXT: mov r3, r10 419; CHECK-NEXT: add r0, r1 420; CHECK-NEXT: .LBB1_3: @ %for.cond.cleanup5.loopexit134.split.loop.exit139 421; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 422; CHECK-NEXT: add.w r11, r0, #7 423; CHECK-NEXT: .LBB1_4: @ %for.cond.cleanup5 424; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 425; CHECK-NEXT: mov.w r10, #0 426; CHECK-NEXT: .LBB1_5: @ %for.cond.cleanup5 427; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 428; CHECK-NEXT: adds r5, #2 429; CHECK-NEXT: subs.w r1, r5, lr 430; CHECK-NEXT: asr.w r0, r5, #31 431; CHECK-NEXT: sbcs.w r0, r0, r12 432; CHECK-NEXT: bge.w .LBB1_28 433; CHECK-NEXT: .LBB1_6: @ %for.cond2.preheader 434; CHECK-NEXT: @ =>This Loop Header: Depth=1 435; CHECK-NEXT: @ Child Loop BB1_19 Depth 2 436; CHECK-NEXT: @ Child Loop BB1_10 Depth 2 437; CHECK-NEXT: @ Child Loop BB1_12 Depth 3 438; CHECK-NEXT: @ Child Loop BB1_14 Depth 3 439; CHECK-NEXT: cmp.w r11, #2 440; CHECK-NEXT: bgt .LBB1_5 441; CHECK-NEXT: @ %bb.7: @ %for.body6.lr.ph 442; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 443; CHECK-NEXT: cmp r7, #5 444; CHECK-NEXT: bhi .LBB1_17 445; CHECK-NEXT: @ %bb.8: @ %for.body6.us.preheader 446; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 447; CHECK-NEXT: ldrd r2, r3, [sp, #120] 448; CHECK-NEXT: movs r0, #32 449; CHECK-NEXT: movs r1, #0 450; CHECK-NEXT: mov r4, r6 451; CHECK-NEXT: mov r7, r12 452; CHECK-NEXT: mov r6, lr 453; CHECK-NEXT: bl __aeabi_ldivmod 454; CHECK-NEXT: mov lr, r6 455; CHECK-NEXT: mov r6, r4 456; CHECK-NEXT: mov r12, r7 457; CHECK-NEXT: ldr r3, [sp, #4] @ 4-byte Reload 458; CHECK-NEXT: ldr r4, [sp, #12] @ 4-byte Reload 459; CHECK-NEXT: vdup.32 q0, r2 460; CHECK-NEXT: ldr r7, [sp, #8] @ 4-byte Reload 461; CHECK-NEXT: mov r0, r11 462; CHECK-NEXT: b .LBB1_10 463; CHECK-NEXT: .LBB1_9: @ %for.cond.cleanup17.us 464; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2 465; CHECK-NEXT: add.w r11, r0, #7 466; CHECK-NEXT: cmn.w r0, #4 467; CHECK-NEXT: mov.w r10, #0 468; CHECK-NEXT: mov r0, r11 469; CHECK-NEXT: bge .LBB1_5 470; CHECK-NEXT: .LBB1_10: @ %for.body6.us 471; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1 472; CHECK-NEXT: @ => This Loop Header: Depth=2 473; CHECK-NEXT: @ Child Loop BB1_12 Depth 3 474; CHECK-NEXT: @ Child Loop BB1_14 Depth 3 475; CHECK-NEXT: movs r1, #0 476; CHECK-NEXT: cbz r4, .LBB1_13 477; CHECK-NEXT: @ %bb.11: @ %for.body13.us51.preheader 478; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2 479; CHECK-NEXT: movw r2, :lower16:a 480; CHECK-NEXT: vmov q1, q4 481; CHECK-NEXT: movt r2, :upper16:a 482; CHECK-NEXT: str r1, [r2] 483; CHECK-NEXT: movw r2, :lower16:b 484; CHECK-NEXT: movt r2, :upper16:b 485; CHECK-NEXT: str r1, [r2] 486; CHECK-NEXT: mov r2, r3 487; CHECK-NEXT: .LBB1_12: @ %vector.body111 488; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1 489; CHECK-NEXT: @ Parent Loop BB1_10 Depth=2 490; CHECK-NEXT: @ => This Inner Loop Header: Depth=3 491; CHECK-NEXT: vqadd.u32 q2, q5, r1 492; CHECK-NEXT: adds r1, #4 493; CHECK-NEXT: vcmp.u32 hi, q7, q2 494; CHECK-NEXT: vshl.i32 q2, q1, #2 495; CHECK-NEXT: subs r2, #4 496; CHECK-NEXT: vadd.i32 q2, q2, r8 497; CHECK-NEXT: vadd.i32 q1, q1, r9 498; CHECK-NEXT: vpst 499; CHECK-NEXT: vstrwt.32 q0, [q2] 500; CHECK-NEXT: bne .LBB1_12 501; CHECK-NEXT: b .LBB1_15 502; CHECK-NEXT: .LBB1_13: @ %vector.body.preheader 503; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2 504; CHECK-NEXT: mov r2, r3 505; CHECK-NEXT: vmov q1, q4 506; CHECK-NEXT: .LBB1_14: @ %vector.body 507; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1 508; CHECK-NEXT: @ Parent Loop BB1_10 Depth=2 509; CHECK-NEXT: @ => This Inner Loop Header: Depth=3 510; CHECK-NEXT: vqadd.u32 q2, q5, r1 511; CHECK-NEXT: adds r1, #4 512; CHECK-NEXT: vcmp.u32 hi, q6, q2 513; CHECK-NEXT: vshl.i32 q2, q1, #2 514; CHECK-NEXT: subs r2, #4 515; CHECK-NEXT: vadd.i32 q2, q2, r8 516; CHECK-NEXT: vadd.i32 q1, q1, r9 517; CHECK-NEXT: vpst 518; CHECK-NEXT: vstrwt.32 q0, [q2] 519; CHECK-NEXT: bne .LBB1_14 520; CHECK-NEXT: .LBB1_15: @ %for.cond9.for.cond15.preheader_crit_edge.us 521; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2 522; CHECK-NEXT: cmp r6, #0 523; CHECK-NEXT: beq .LBB1_9 524; CHECK-NEXT: @ %bb.16: @ %for.cond9.for.cond15.preheader_crit_edge.us 525; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2 526; CHECK-NEXT: eor r1, r10, #1 527; CHECK-NEXT: lsls r1, r1, #31 528; CHECK-NEXT: bne .LBB1_9 529; CHECK-NEXT: b .LBB1_26 530; CHECK-NEXT: .LBB1_17: @ %for.body6.lr.ph.split 531; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 532; CHECK-NEXT: cmp r6, #0 533; CHECK-NEXT: beq.w .LBB1_2 534; CHECK-NEXT: @ %bb.18: @ in Loop: Header=BB1_6 Depth=1 535; CHECK-NEXT: mov r0, r11 536; CHECK-NEXT: .LBB1_19: @ %for.body6.us60 537; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1 538; CHECK-NEXT: @ => This Inner Loop Header: Depth=2 539; CHECK-NEXT: lsls.w r1, r10, #31 540; CHECK-NEXT: bne .LBB1_27 541; CHECK-NEXT: @ %bb.20: @ %for.cond.cleanup17.us63 542; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2 543; CHECK-NEXT: cmn.w r0, #4 544; CHECK-NEXT: bge.w .LBB1_3 545; CHECK-NEXT: @ %bb.21: @ %for.cond.cleanup17.us63.1 546; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2 547; CHECK-NEXT: cmn.w r0, #12 548; CHECK-NEXT: bgt .LBB1_24 549; CHECK-NEXT: @ %bb.22: @ %for.cond.cleanup17.us63.2 550; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2 551; CHECK-NEXT: cmn.w r0, #19 552; CHECK-NEXT: bgt .LBB1_25 553; CHECK-NEXT: @ %bb.23: @ %for.cond.cleanup17.us63.3 554; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2 555; CHECK-NEXT: add.w r11, r0, #28 556; CHECK-NEXT: cmn.w r0, #25 557; CHECK-NEXT: mov.w r10, #0 558; CHECK-NEXT: mov r0, r11 559; CHECK-NEXT: blt .LBB1_19 560; CHECK-NEXT: b .LBB1_5 561; CHECK-NEXT: .LBB1_24: @ %for.cond.cleanup5.loopexit134.split.loop.exit137 562; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 563; CHECK-NEXT: add.w r11, r0, #14 564; CHECK-NEXT: b .LBB1_4 565; CHECK-NEXT: .LBB1_25: @ %for.cond.cleanup5.loopexit134.split.loop.exit135 566; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1 567; CHECK-NEXT: add.w r11, r0, #21 568; CHECK-NEXT: b .LBB1_4 569; CHECK-NEXT: .LBB1_26: @ %for.inc19.us 570; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 571; CHECK-NEXT: b .LBB1_26 572; CHECK-NEXT: .LBB1_27: @ %for.inc19.us66 573; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 574; CHECK-NEXT: b .LBB1_27 575; CHECK-NEXT: .LBB1_28: @ %for.cond.cleanup 576; CHECK-NEXT: add sp, #16 577; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15} 578; CHECK-NEXT: add sp, #4 579; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc} 580; CHECK-NEXT: .p2align 4 581; CHECK-NEXT: @ %bb.29: 582; CHECK-NEXT: .LCPI1_0: 583; CHECK-NEXT: .long 0 @ 0x0 584; CHECK-NEXT: .long 3 @ 0x3 585; CHECK-NEXT: .long 6 @ 0x6 586; CHECK-NEXT: .long 9 @ 0x9 587; CHECK-NEXT: .LCPI1_1: 588; CHECK-NEXT: .long 0 @ 0x0 589; CHECK-NEXT: .long 1 @ 0x1 590; CHECK-NEXT: .long 2 @ 0x2 591; CHECK-NEXT: .long 3 @ 0x3 592entry: 593 %cmp47 = icmp sgt i64 %e, 0 594 br i1 %cmp47, label %for.cond2.preheader.lr.ph, label %for.cond.cleanup 595 596for.cond2.preheader.lr.ph: ; preds = %entry 597 %cmp7.inv = icmp slt i32 %f, 1 598 %spec.select = select i1 %cmp7.inv, i32 %f, i32 1 599 %cmp1041 = icmp ult i32 %spec.select, 6 600 %tobool.not = icmp eq i32 %f, 0 601 %tobool20.not97 = icmp eq i32 %h, 0 602 %0 = icmp ugt i32 %spec.select, 3 603 %umax = select i1 %0, i32 %spec.select, i32 3 604 %1 = add i32 %umax, 2 605 %2 = sub i32 %1, %spec.select 606 %3 = udiv i32 %2, 3 607 %4 = add nuw nsw i32 %3, 1 608 %5 = icmp ugt i32 %spec.select, 3 609 %umax112 = select i1 %5, i32 %spec.select, i32 3 610 %6 = add i32 %umax112, 2 611 %7 = sub i32 %6, %spec.select 612 %8 = udiv i32 %7, 3 613 %9 = add nuw nsw i32 %8, 1 614 %n.rnd.up114 = add nuw nsw i32 %8, 4 615 %n.vec116 = and i32 %n.rnd.up114, 2147483644 616 %.splatinsert121 = insertelement <4 x i32> poison, i32 %spec.select, i32 0 617 %.splat122 = shufflevector <4 x i32> %.splatinsert121, <4 x i32> poison, <4 x i32> zeroinitializer 618 %induction123 = add <4 x i32> %.splat122, <i32 0, i32 3, i32 6, i32 9> 619 %n.rnd.up = add nuw nsw i32 %3, 4 620 %n.vec = and i32 %n.rnd.up, 2147483644 621 %.splatinsert = insertelement <4 x i32> poison, i32 %spec.select, i32 0 622 %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer 623 %induction = add <4 x i32> %.splat, <i32 0, i32 3, i32 6, i32 9> 624 br label %for.cond2.preheader 625 626for.cond2.preheader: ; preds = %for.cond2.preheader.lr.ph, %for.cond.cleanup5 627 %l.0.off050 = phi i1 [ undef, %for.cond2.preheader.lr.ph ], [ %l.1.off0.lcssa, %for.cond.cleanup5 ] 628 %i.049 = phi i32 [ undef, %for.cond2.preheader.lr.ph ], [ %add26, %for.cond.cleanup5 ] 629 %j.048 = phi i32 [ undef, %for.cond2.preheader.lr.ph ], [ %j.1.lcssa, %for.cond.cleanup5 ] 630 %cmp343 = icmp slt i32 %j.048, 3 631 br i1 %cmp343, label %for.body6.lr.ph, label %for.cond.cleanup5 632 633for.body6.lr.ph: ; preds = %for.cond2.preheader 634 br i1 %cmp1041, label %for.body6.us.preheader, label %for.body6.lr.ph.split 635 636for.body6.us.preheader: ; preds = %for.body6.lr.ph 637 %rem.us = srem i64 32, %g 638 %conv14.us = trunc i64 %rem.us to i32 639 %broadcast.splatinsert131 = insertelement <4 x i32> poison, i32 %conv14.us, i32 0 640 %broadcast.splat132 = shufflevector <4 x i32> %broadcast.splatinsert131, <4 x i32> poison, <4 x i32> zeroinitializer 641 %broadcast.splatinsert107 = insertelement <4 x i32> poison, i32 %conv14.us, i32 0 642 %broadcast.splat108 = shufflevector <4 x i32> %broadcast.splatinsert107, <4 x i32> poison, <4 x i32> zeroinitializer 643 br label %for.body6.us 644 645for.body6.us: ; preds = %for.body6.us.preheader, %for.cond.cleanup17.us 646 %l.1.off045.us = phi i1 [ false, %for.cond.cleanup17.us ], [ %l.0.off050, %for.body6.us.preheader ] 647 %j.144.us = phi i32 [ %add23.us, %for.cond.cleanup17.us ], [ %j.048, %for.body6.us.preheader ] 648 br i1 %tobool.not, label %vector.body, label %for.body13.us51.preheader 649 650vector.body: ; preds = %for.body6.us, %vector.body 651 %index = phi i32 [ %index.next, %vector.body ], [ 0, %for.body6.us ] 652 %vec.ind = phi <4 x i32> [ %vec.ind.next, %vector.body ], [ %induction, %for.body6.us ] 653 %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index, i32 %4) 654 %10 = getelementptr inbounds [1 x i32], ptr @c, i32 0, <4 x i32> %vec.ind 655 call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> %broadcast.splat108, <4 x ptr> %10, i32 4, <4 x i1> %active.lane.mask) 656 %index.next = add i32 %index, 4 657 %vec.ind.next = add <4 x i32> %vec.ind, <i32 12, i32 12, i32 12, i32 12> 658 %11 = icmp eq i32 %index.next, %n.vec 659 br i1 %11, label %for.cond9.for.cond15.preheader_crit_edge.us, label %vector.body 660 661for.body13.us51.preheader: ; preds = %for.body6.us 662 store i32 0, ptr @b, align 4 663 store i32 0, ptr @a, align 4 664 br label %vector.body111 665 666vector.body111: ; preds = %vector.body111, %for.body13.us51.preheader 667 %index117 = phi i32 [ 0, %for.body13.us51.preheader ], [ %index.next118, %vector.body111 ] 668 %vec.ind124 = phi <4 x i32> [ %induction123, %for.body13.us51.preheader ], [ %vec.ind.next125, %vector.body111 ] 669 %active.lane.mask130 = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index117, i32 %9) 670 %12 = getelementptr inbounds [1 x i32], ptr @c, i32 0, <4 x i32> %vec.ind124 671 call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> %broadcast.splat132, <4 x ptr> %12, i32 4, <4 x i1> %active.lane.mask130) 672 %index.next118 = add i32 %index117, 4 673 %vec.ind.next125 = add <4 x i32> %vec.ind124, <i32 12, i32 12, i32 12, i32 12> 674 %13 = icmp eq i32 %index.next118, %n.vec116 675 br i1 %13, label %for.cond9.for.cond15.preheader_crit_edge.us, label %vector.body111 676 677for.cond.cleanup17.us: ; preds = %for.cond9.for.cond15.preheader_crit_edge.us 678 %add23.us = add nsw i32 %j.144.us, 7 679 %cmp3.us = icmp slt i32 %j.144.us, -4 680 br i1 %cmp3.us, label %for.body6.us, label %for.cond.cleanup5 681 682for.inc19.us: ; preds = %for.cond9.for.cond15.preheader_crit_edge.us, %for.inc19.us 683 br label %for.inc19.us 684 685for.cond9.for.cond15.preheader_crit_edge.us: ; preds = %vector.body111, %vector.body 686 %l.1.off045.us.not = xor i1 %l.1.off045.us, true 687 %brmerge = or i1 %tobool20.not97, %l.1.off045.us.not 688 br i1 %brmerge, label %for.cond.cleanup17.us, label %for.inc19.us 689 690for.body6.lr.ph.split: ; preds = %for.body6.lr.ph 691 br i1 %tobool20.not97, label %for.body6.preheader, label %for.body6.us60 692 693for.body6.preheader: ; preds = %for.body6.lr.ph.split 694 %14 = icmp sgt i32 %j.048, -4 695 %smax = select i1 %14, i32 %j.048, i32 -4 696 %15 = add nsw i32 %smax, 6 697 %16 = sub i32 %15, %j.048 698 %17 = urem i32 %16, 7 699 %18 = sub i32 %16, %17 700 %19 = add nsw i32 %j.048, 7 701 %20 = add i32 %19, %18 702 br label %for.cond.cleanup5 703 704for.body6.us60: ; preds = %for.body6.lr.ph.split, %for.cond.cleanup17.us63.3 705 %l.1.off045.us61 = phi i1 [ false, %for.cond.cleanup17.us63.3 ], [ %l.0.off050, %for.body6.lr.ph.split ] 706 %j.144.us62 = phi i32 [ %add23.us64.3, %for.cond.cleanup17.us63.3 ], [ %j.048, %for.body6.lr.ph.split ] 707 br i1 %l.1.off045.us61, label %for.inc19.us66, label %for.cond.cleanup17.us63 708 709for.cond.cleanup17.us63: ; preds = %for.body6.us60 710 %cmp3.us65 = icmp slt i32 %j.144.us62, -4 711 br i1 %cmp3.us65, label %for.cond.cleanup17.us63.1, label %for.cond.cleanup5.loopexit134.split.loop.exit139 712 713for.inc19.us66: ; preds = %for.body6.us60, %for.inc19.us66 714 br label %for.inc19.us66 715 716for.cond.cleanup: ; preds = %for.cond.cleanup5, %entry 717 ret i32 undef 718 719for.cond.cleanup5.loopexit134.split.loop.exit135: ; preds = %for.cond.cleanup17.us63.2 720 %add23.us64.2.le = add nsw i32 %j.144.us62, 21 721 br label %for.cond.cleanup5 722 723for.cond.cleanup5.loopexit134.split.loop.exit137: ; preds = %for.cond.cleanup17.us63.1 724 %add23.us64.1.le = add nsw i32 %j.144.us62, 14 725 br label %for.cond.cleanup5 726 727for.cond.cleanup5.loopexit134.split.loop.exit139: ; preds = %for.cond.cleanup17.us63 728 %add23.us64.le = add nsw i32 %j.144.us62, 7 729 br label %for.cond.cleanup5 730 731for.cond.cleanup5: ; preds = %for.cond.cleanup5.loopexit134.split.loop.exit135, %for.cond.cleanup5.loopexit134.split.loop.exit137, %for.cond.cleanup5.loopexit134.split.loop.exit139, %for.cond.cleanup17.us63.3, %for.cond.cleanup17.us, %for.body6.preheader, %for.cond2.preheader 732 %j.1.lcssa = phi i32 [ %j.048, %for.cond2.preheader ], [ %20, %for.body6.preheader ], [ %add23.us, %for.cond.cleanup17.us ], [ %add23.us64.2.le, %for.cond.cleanup5.loopexit134.split.loop.exit135 ], [ %add23.us64.1.le, %for.cond.cleanup5.loopexit134.split.loop.exit137 ], [ %add23.us64.le, %for.cond.cleanup5.loopexit134.split.loop.exit139 ], [ %add23.us64.3, %for.cond.cleanup17.us63.3 ] 733 %l.1.off0.lcssa = phi i1 [ %l.0.off050, %for.cond2.preheader ], [ false, %for.body6.preheader ], [ false, %for.cond.cleanup17.us ], [ false, %for.cond.cleanup17.us63.3 ], [ false, %for.cond.cleanup5.loopexit134.split.loop.exit139 ], [ false, %for.cond.cleanup5.loopexit134.split.loop.exit137 ], [ false, %for.cond.cleanup5.loopexit134.split.loop.exit135 ] 734 %add26 = add nsw i32 %i.049, 2 735 %conv = sext i32 %add26 to i64 736 %cmp = icmp slt i64 %conv, %e 737 br i1 %cmp, label %for.cond2.preheader, label %for.cond.cleanup 738 739for.cond.cleanup17.us63.1: ; preds = %for.cond.cleanup17.us63 740 %cmp3.us65.1 = icmp slt i32 %j.144.us62, -11 741 br i1 %cmp3.us65.1, label %for.cond.cleanup17.us63.2, label %for.cond.cleanup5.loopexit134.split.loop.exit137 742 743for.cond.cleanup17.us63.2: ; preds = %for.cond.cleanup17.us63.1 744 %cmp3.us65.2 = icmp slt i32 %j.144.us62, -18 745 br i1 %cmp3.us65.2, label %for.cond.cleanup17.us63.3, label %for.cond.cleanup5.loopexit134.split.loop.exit135 746 747for.cond.cleanup17.us63.3: ; preds = %for.cond.cleanup17.us63.2 748 %add23.us64.3 = add nsw i32 %j.144.us62, 28 749 %cmp3.us65.3 = icmp slt i32 %j.144.us62, -25 750 br i1 %cmp3.us65.3, label %for.body6.us60, label %for.cond.cleanup5 751} 752 753declare <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32, i32) #1 754declare void @llvm.masked.scatter.v4i32.v4p0(<4 x i32>, <4 x ptr>, i32 immarg, <4 x i1>) #2 755