brintos

brintos / llvm-project-archived public Read only

0
0
Text · 40.7 KiB · da59cb2 Raw
940 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --arm-memtransfer-tploop=allow -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve --verify-machineinstrs %s -o - | FileCheck %s3 4; Check that WLSTP loop is not generated for alignment < 45; void test1(char* dest, char* src, int n){6;    memcpy(dest, src, n);7; }8 9declare void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i32, i1 immarg)10declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)11declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)12 13define void @test1(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n){14; CHECK-LABEL: test1:15; CHECK:       @ %bb.0: @ %entry16; CHECK-NEXT:    .save {r7, lr}17; CHECK-NEXT:    push {r7, lr}18; CHECK-NEXT:    bl __aeabi_memcpy19; CHECK-NEXT:    pop {r7, pc}20entry:21  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %X, ptr align 1 %Y, i32 %n, i1 false)22  ret void23}24 25 26; Check that WLSTP loop is generated for alignment >= 427; void test2(int* restrict X, int* restrict Y, int n){28;     memcpy(X, Y, n);29; }30 31define void @test2(ptr noalias %X, ptr noalias readonly %Y, i32 %n){32; CHECK-LABEL: test2:33; CHECK:       @ %bb.0: @ %entry34; CHECK-NEXT:    .save {r7, lr}35; CHECK-NEXT:    push {r7, lr}36; CHECK-NEXT:    wlstp.8 lr, r2, .LBB1_237; CHECK-NEXT:  .LBB1_1: @ =>This Inner Loop Header: Depth=138; CHECK-NEXT:    vldrb.u8 q0, [r1], #1639; CHECK-NEXT:    vstrb.8 q0, [r0], #1640; CHECK-NEXT:    letp lr, .LBB1_141; CHECK-NEXT:  .LBB1_2: @ %entry42; CHECK-NEXT:    pop {r7, pc}43entry:44  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 %n, i1 false)45  ret void46}47 48 49; Checks that transform handles some arithmetic on the input arguments.50; void test3(int* restrict X, int* restrict Y, int n)51; {52;     memcpy(X+2, Y+3, (n*2)+10);53; }54 55define void @test3(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n) {56; CHECK-LABEL: test3:57; CHECK:       @ %bb.0: @ %entry58; CHECK-NEXT:    .save {r7, lr}59; CHECK-NEXT:    push {r7, lr}60; CHECK-NEXT:    movs r3, #1061; CHECK-NEXT:    add.w r2, r3, r2, lsl #162; CHECK-NEXT:    adds r1, #1263; CHECK-NEXT:    adds r0, #864; CHECK-NEXT:    wlstp.8 lr, r2, .LBB2_265; CHECK-NEXT:  .LBB2_1: @ =>This Inner Loop Header: Depth=166; CHECK-NEXT:    vldrb.u8 q0, [r1], #1667; CHECK-NEXT:    vstrb.8 q0, [r0], #1668; CHECK-NEXT:    letp lr, .LBB2_169; CHECK-NEXT:  .LBB2_2: @ %entry70; CHECK-NEXT:    pop {r7, pc}71entry:72  %add.ptr = getelementptr inbounds i32, ptr %X, i32 273  %add.ptr1 = getelementptr inbounds i32, ptr %Y, i32 374  %mul = shl nsw i32 %n, 175  %add = add nsw i32 %mul, 1076  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 4 %add.ptr, ptr nonnull align 4 %add.ptr1, i32 %add, i1 false)77  ret void78}79 80 81; Checks that transform handles for loops that are implicitly converted to mempcy82; void test4(int* restrict X, int* restrict Y, int n){83;     for(int i = 0; i < n; ++i){84;         X[i] = Y[i];85;     }86; }87 88define void @test4(ptr noalias %X, ptr noalias readonly %Y, i32 %n) {89; CHECK-LABEL: test4:90; CHECK:       @ %bb.0: @ %entry91; CHECK-NEXT:    cmp r2, #192; CHECK-NEXT:    it lt93; CHECK-NEXT:    bxlt lr94; CHECK-NEXT:  .LBB3_1: @ %for.body.preheader95; CHECK-NEXT:    .save {r7, lr}96; CHECK-NEXT:    push {r7, lr}97; CHECK-NEXT:    wlstp.8 lr, r2, .LBB3_398; CHECK-NEXT:  .LBB3_2: @ =>This Inner Loop Header: Depth=199; CHECK-NEXT:    vldrb.u8 q0, [r1], #16100; CHECK-NEXT:    vstrb.8 q0, [r0], #16101; CHECK-NEXT:    letp lr, .LBB3_2102; CHECK-NEXT:  .LBB3_3: @ %for.body.preheader103; CHECK-NEXT:    pop.w {r7, lr}104; CHECK-NEXT:    bx lr105entry:106  %cmp6 = icmp sgt i32 %n, 0107  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup108 109for.body.preheader:                               ; preds = %entry110  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 %n, i1 false)111  br label %for.cond.cleanup112 113for.cond.cleanup:                                 ; preds = %for.body.preheader, %entry114  ret void115}116 117; Checks that transform can handle > i32 size inputs118define void @test5(ptr noalias %X, ptr noalias %Y, i64 %n){119; CHECK-LABEL: test5:120; CHECK:       @ %bb.0:121; CHECK-NEXT:    .save {r7, lr}122; CHECK-NEXT:    push {r7, lr}123; CHECK-NEXT:    wlstp.8 lr, r2, .LBB4_2124; CHECK-NEXT:  .LBB4_1: @ =>This Inner Loop Header: Depth=1125; CHECK-NEXT:    vldrb.u8 q0, [r1], #16126; CHECK-NEXT:    vstrb.8 q0, [r0], #16127; CHECK-NEXT:    letp lr, .LBB4_1128; CHECK-NEXT:  .LBB4_2:129; CHECK-NEXT:    pop {r7, pc}130    call void @llvm.memcpy.p0.p0.i64(ptr align 4 %X, ptr align 4 %Y, i64 %n, i1 false)131    ret void132}133 134; Checks the transform is applied for constant size inputs below a certain threshold (128 in this case)135define void @test6(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n) {136; CHECK-LABEL: test6:137; CHECK:       @ %bb.0: @ %entry138; CHECK-NEXT:    .save {r7, lr}139; CHECK-NEXT:    push {r7, lr}140; CHECK-NEXT:    movs r2, #127141; CHECK-NEXT:    wlstp.8 lr, r2, .LBB5_2142; CHECK-NEXT:  .LBB5_1: @ =>This Inner Loop Header: Depth=1143; CHECK-NEXT:    vldrb.u8 q0, [r1], #16144; CHECK-NEXT:    vstrb.8 q0, [r0], #16145; CHECK-NEXT:    letp lr, .LBB5_1146; CHECK-NEXT:  .LBB5_2: @ %entry147; CHECK-NEXT:    pop {r7, pc}148entry:149  call void @llvm.memcpy.p0.p0.i32(ptr noundef nonnull align 4 dereferenceable(127) %X, ptr noundef nonnull align 4 dereferenceable(127) %Y, i32 127, i1 false)150  ret void151}152 153; Checks the transform is NOT applied for constant size inputs above a certain threshold (128 in this case)154define void @test7(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n) {155; CHECK-LABEL: test7:156; CHECK:       @ %bb.0: @ %entry157; CHECK-NEXT:    .save {r7, lr}158; CHECK-NEXT:    push {r7, lr}159; CHECK-NEXT:    movs r2, #128160; CHECK-NEXT:    bl __aeabi_memcpy4161; CHECK-NEXT:    pop {r7, pc}162entry:163  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 128, i1 false)164  ret void165}166 167; Checks the transform is NOT applied for constant size inputs below a certain threshold (64 in this case)168define void @test8(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n) {169; CHECK-LABEL: test8:170; CHECK:       @ %bb.0: @ %entry171; CHECK-NEXT:    .save {r4, lr}172; CHECK-NEXT:    push {r4, lr}173; CHECK-NEXT:    ldm.w r1!, {r2, r3, r4, r12, lr}174; CHECK-NEXT:    stm.w r0!, {r2, r3, r4, r12, lr}175; CHECK-NEXT:    ldm.w r1!, {r2, r3, r4, r12, lr}176; CHECK-NEXT:    stm.w r0!, {r2, r3, r4, r12, lr}177; CHECK-NEXT:    ldm.w r1, {r2, r3, r4, r12, lr}178; CHECK-NEXT:    stm.w r0, {r2, r3, r4, r12, lr}179; CHECK-NEXT:    pop {r4, pc}180entry:181  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 60, i1 false)182  ret void183}184 185; Checks the transform is NOT applied (regardless of alignment) when optimizations are disabled186define void @test9(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n) #0 {187; CHECK-LABEL: test9:188; CHECK:       @ %bb.0: @ %entry189; CHECK-NEXT:    .save {r7, lr}190; CHECK-NEXT:    push {r7, lr}191; CHECK-NEXT:    bl __aeabi_memcpy4192; CHECK-NEXT:    pop {r7, pc}193entry:194  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 %n, i1 false)195  ret void196}197 198; Checks the transform is NOT applied (regardless of alignment) when optimization for size is on (-Os or -Oz)199define void @test10(ptr noalias nocapture %X, ptr noalias nocapture readonly %Y, i32 %n) #1 {200; CHECK-LABEL: test10:201; CHECK:       @ %bb.0: @ %entry202; CHECK-NEXT:    .save {r7, lr}203; CHECK-NEXT:    push {r7, lr}204; CHECK-NEXT:    bl __aeabi_memcpy4205; CHECK-NEXT:    pop {r7, pc}206entry:207  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 %n, i1 false)208  ret void209}210 211define void @test11(ptr nocapture %x, ptr nocapture %y, i32 %n) {212; CHECK-LABEL: test11:213; CHECK:       @ %bb.0: @ %entry214; CHECK-NEXT:    cmp.w r2, #-1215; CHECK-NEXT:    it gt216; CHECK-NEXT:    bxgt lr217; CHECK-NEXT:  .LBB10_1: @ %prehead218; CHECK-NEXT:    .save {r4, lr}219; CHECK-NEXT:    push {r4, lr}220; CHECK-NEXT:    mov r12, r1221; CHECK-NEXT:    mov r4, r0222; CHECK-NEXT:    wlstp.8 lr, r2, .LBB10_3223; CHECK-NEXT:  .LBB10_2: @ =>This Inner Loop Header: Depth=1224; CHECK-NEXT:    vldrb.u8 q0, [r12], #16225; CHECK-NEXT:    vstrb.8 q0, [r4], #16226; CHECK-NEXT:    letp lr, .LBB10_2227; CHECK-NEXT:  .LBB10_3: @ %for.body228; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1229; CHECK-NEXT:    ldrb r3, [r0], #1230; CHECK-NEXT:    subs r2, #2231; CHECK-NEXT:    strb r3, [r1], #1232; CHECK-NEXT:    bne .LBB10_3233; CHECK-NEXT:  @ %bb.4:234; CHECK-NEXT:    pop.w {r4, lr}235; CHECK-NEXT:    bx lr236entry:237  %cmp6 = icmp slt i32 %n, 0238  br i1 %cmp6, label %prehead, label %for.cond.cleanup239 240prehead:                                          ; preds = %entry241  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %x, ptr align 4 %y, i32 %n, i1 false)242  br label %for.body243 244for.body:                                         ; preds = %for.body, %prehead245  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %prehead ]246  %x.addr.08 = phi ptr [ %add.ptr, %for.body ], [ %x, %prehead ]247  %y.addr.07 = phi ptr [ %add.ptr1, %for.body ], [ %y, %prehead ]248  %add.ptr = getelementptr inbounds i8, ptr %x.addr.08, i32 1249  %add.ptr1 = getelementptr inbounds i8, ptr %y.addr.07, i32 1250  %l = load i8, ptr %x.addr.08, align 1251  store i8 %l, ptr %y.addr.07, align 1252  %inc = add nuw nsw i32 %i.09, 2253  %exitcond.not = icmp eq i32 %inc, %n254  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body255 256for.cond.cleanup:                                 ; preds = %entry257  ret void258}259 260; Check that WLSTP loop is generated for simplest case of align = 1261define void @test12(ptr %X, i8 zeroext %c, i32 %n) {262; CHECK-LABEL: test12:263; CHECK:       @ %bb.0: @ %entry264; CHECK-NEXT:    .save {r7, lr}265; CHECK-NEXT:    push {r7, lr}266; CHECK-NEXT:    vdup.8 q0, r1267; CHECK-NEXT:    wlstp.8 lr, r2, .LBB11_2268; CHECK-NEXT:  .LBB11_1: @ =>This Inner Loop Header: Depth=1269; CHECK-NEXT:    vstrb.8 q0, [r0], #16270; CHECK-NEXT:    letp lr, .LBB11_1271; CHECK-NEXT:  .LBB11_2: @ %entry272; CHECK-NEXT:    pop {r7, pc}273entry:274  call void @llvm.memset.p0.i32(ptr align 1 %X, i8 %c, i32 %n, i1 false)275  ret void276}277 278 279; Check that WLSTP loop is generated for alignment >= 4280define void @test13(ptr %X, i8 zeroext %c, i32 %n) {281; CHECK-LABEL: test13:282; CHECK:       @ %bb.0: @ %entry283; CHECK-NEXT:    .save {r7, lr}284; CHECK-NEXT:    push {r7, lr}285; CHECK-NEXT:    vdup.8 q0, r1286; CHECK-NEXT:    wlstp.8 lr, r2, .LBB12_2287; CHECK-NEXT:  .LBB12_1: @ =>This Inner Loop Header: Depth=1288; CHECK-NEXT:    vstrb.8 q0, [r0], #16289; CHECK-NEXT:    letp lr, .LBB12_1290; CHECK-NEXT:  .LBB12_2: @ %entry291; CHECK-NEXT:    pop {r7, pc}292entry:293  call void @llvm.memset.p0.i32(ptr align 4 %X, i8 %c, i32 %n, i1 false)294  ret void295}296 297define void @twoloops(ptr %X, i32 %n, i32 %m) {298; CHECK-LABEL: twoloops:299; CHECK:       @ %bb.0: @ %entry300; CHECK-NEXT:    .save {r7, lr}301; CHECK-NEXT:    push {r7, lr}302; CHECK-NEXT:    vmov.i32 q0, #0x0303; CHECK-NEXT:    mov r3, r0304; CHECK-NEXT:    wlstp.8 lr, r2, .LBB13_2305; CHECK-NEXT:  .LBB13_1: @ =>This Inner Loop Header: Depth=1306; CHECK-NEXT:    vstrb.8 q0, [r3], #16307; CHECK-NEXT:    letp lr, .LBB13_1308; CHECK-NEXT:  .LBB13_2: @ %entry309; CHECK-NEXT:    wlstp.8 lr, r2, .LBB13_4310; CHECK-NEXT:  .LBB13_3: @ =>This Inner Loop Header: Depth=1311; CHECK-NEXT:    vstrb.8 q0, [r0], #16312; CHECK-NEXT:    letp lr, .LBB13_3313; CHECK-NEXT:  .LBB13_4: @ %entry314; CHECK-NEXT:    pop {r7, pc}315entry:316  call void @llvm.memset.p0.i32(ptr align 4 %X, i8 0, i32 %m, i1 false)317  call void @llvm.memset.p0.i32(ptr align 4 %X, i8 0, i32 %m, i1 false)318  ret void319}320 321 322; Checks that transform correctly handles input with some arithmetic on input arguments.323; void test14(int* X, char c, int n)324; {325;     memset(X+2, c, (n*2)+10);326; }327 328define void @test14(ptr %X, i8 zeroext %c, i32 %n) {329; CHECK-LABEL: test14:330; CHECK:       @ %bb.0: @ %entry331; CHECK-NEXT:    .save {r7, lr}332; CHECK-NEXT:    push {r7, lr}333; CHECK-NEXT:    movs r3, #10334; CHECK-NEXT:    add.w r2, r3, r2, lsl #1335; CHECK-NEXT:    vdup.8 q0, r1336; CHECK-NEXT:    adds r0, #8337; CHECK-NEXT:    wlstp.8 lr, r2, .LBB14_2338; CHECK-NEXT:  .LBB14_1: @ =>This Inner Loop Header: Depth=1339; CHECK-NEXT:    vstrb.8 q0, [r0], #16340; CHECK-NEXT:    letp lr, .LBB14_1341; CHECK-NEXT:  .LBB14_2: @ %entry342; CHECK-NEXT:    pop {r7, pc}343entry:344  %add.ptr = getelementptr inbounds i32, ptr %X, i32 2345  %mul = shl nsw i32 %n, 1346  %add = add nsw i32 %mul, 10347  call void @llvm.memset.p0.i32(ptr nonnull align 4 %add.ptr, i8 %c, i32 %add, i1 false)348  ret void349}350 351 352 353 354; Checks that transform handles for-loops (that get implicitly converted to memset)355; void test15(int* X, char Y, int n){356;     for(int i = 0; i < n; ++i){357;         X[i] = c;358;     }359; }360 361define void @test15(ptr nocapture %X, i8 zeroext %c, i32 %n) {362; CHECK-LABEL: test15:363; CHECK:       @ %bb.0: @ %entry364; CHECK-NEXT:    cmp r2, #1365; CHECK-NEXT:    it lt366; CHECK-NEXT:    bxlt lr367; CHECK-NEXT:  .LBB15_1: @ %for.body.preheader368; CHECK-NEXT:    .save {r7, lr}369; CHECK-NEXT:    push {r7, lr}370; CHECK-NEXT:    vdup.8 q0, r1371; CHECK-NEXT:    wlstp.8 lr, r2, .LBB15_3372; CHECK-NEXT:  .LBB15_2: @ =>This Inner Loop Header: Depth=1373; CHECK-NEXT:    vstrb.8 q0, [r0], #16374; CHECK-NEXT:    letp lr, .LBB15_2375; CHECK-NEXT:  .LBB15_3: @ %for.body.preheader376; CHECK-NEXT:    pop.w {r7, lr}377; CHECK-NEXT:    bx lr378entry:379  %cmp4 = icmp sgt i32 %n, 0380  br i1 %cmp4, label %for.body.preheader, label %for.cond.cleanup381 382for.body.preheader:                               ; preds = %entry383  call void @llvm.memset.p0.i32(ptr align 4 %X, i8 %c, i32 %n, i1 false)384  br label %for.cond.cleanup385 386for.cond.cleanup:                                 ; preds = %for.body.preheader, %entry387  ret void388}389 390; Checks that transform handles case with 0 as src value. No difference is expected.391define void @test16(ptr %X, i8 zeroext %c, i32 %n) {392; CHECK-LABEL: test16:393; CHECK:       @ %bb.0: @ %entry394; CHECK-NEXT:    .save {r7, lr}395; CHECK-NEXT:    push {r7, lr}396; CHECK-NEXT:    vmov.i32 q0, #0x0397; CHECK-NEXT:    wlstp.8 lr, r2, .LBB16_2398; CHECK-NEXT:  .LBB16_1: @ =>This Inner Loop Header: Depth=1399; CHECK-NEXT:    vstrb.8 q0, [r0], #16400; CHECK-NEXT:    letp lr, .LBB16_1401; CHECK-NEXT:  .LBB16_2: @ %entry402; CHECK-NEXT:    pop {r7, pc}403entry:404  call void @llvm.memset.p0.i32(ptr align 4 %X, i8 0, i32 %n, i1 false)405  ret void406}407 408define void @csprlive(ptr noalias %X, ptr noalias readonly %Y, i32 %n) {409; CHECK-LABEL: csprlive:410; CHECK:       @ %bb.0: @ %entry411; CHECK-NEXT:    .save {r7, lr}412; CHECK-NEXT:    push {r7, lr}413; CHECK-NEXT:    wlstp.8 lr, r2, .LBB17_2414; CHECK-NEXT:  .LBB17_1: @ =>This Inner Loop Header: Depth=1415; CHECK-NEXT:    vldrb.u8 q0, [r1], #16416; CHECK-NEXT:    vstrb.8 q0, [r0], #16417; CHECK-NEXT:    letp lr, .LBB17_1418; CHECK-NEXT:  .LBB17_2: @ %entry419; CHECK-NEXT:    bl other420; CHECK-NEXT:    pop {r7, pc}421entry:422  %cmp6 = icmp sgt i32 %n, 0423  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %X, ptr align 4 %Y, i32 %n, i1 false)424  br i1 %cmp6, label %if, label %else425 426if:427  call void @other()428  br label %cleanup429 430else:431  call void @other()432  br label %cleanup433 434cleanup:435  ret void436}437 438declare void @other()439 440@arr_56 = external dso_local local_unnamed_addr global [21 x [16 x [11 x i8]]], align 1441define void @multilooped_exit(i32 %b) {442; CHECK-LABEL: multilooped_exit:443; CHECK:       @ %bb.0: @ %entry444; CHECK-NEXT:    cmp r0, #1445; CHECK-NEXT:    it lt446; CHECK-NEXT:    bxlt lr447; CHECK-NEXT:  .LBB18_1: @ %loop.preheader448; CHECK-NEXT:    .save {r4, lr}449; CHECK-NEXT:    push {r4, lr}450; CHECK-NEXT:    mov.w r4, #-1451; CHECK-NEXT:    vmov.i32 q0, #0x0452; CHECK-NEXT:    b .LBB18_3453; CHECK-NEXT:  .LBB18_2: @ %loop454; CHECK-NEXT:    @ in Loop: Header=BB18_3 Depth=1455; CHECK-NEXT:    adds r4, #1456; CHECK-NEXT:    cmp.w r4, #1024457; CHECK-NEXT:    bge .LBB18_12458; CHECK-NEXT:  .LBB18_3: @ %loop459; CHECK-NEXT:    @ =>This Loop Header: Depth=1460; CHECK-NEXT:    @ Child Loop BB18_4 Depth 2461; CHECK-NEXT:    @ Child Loop BB18_6 Depth 2462; CHECK-NEXT:    @ Child Loop BB18_8 Depth 2463; CHECK-NEXT:    @ Child Loop BB18_11 Depth 2464; CHECK-NEXT:    movw r3, :lower16:arr_56465; CHECK-NEXT:    add.w r1, r0, #15466; CHECK-NEXT:    movt r3, :upper16:arr_56467; CHECK-NEXT:    lsr.w r12, r1, #4468; CHECK-NEXT:    mov r2, r3469; CHECK-NEXT:    wlstp.8 lr, r0, .LBB18_5470; CHECK-NEXT:  .LBB18_4: @ Parent Loop BB18_3 Depth=1471; CHECK-NEXT:    @ => This Inner Loop Header: Depth=2472; CHECK-NEXT:    vstrb.8 q0, [r2], #16473; CHECK-NEXT:    letp lr, .LBB18_4474; CHECK-NEXT:  .LBB18_5: @ %loop475; CHECK-NEXT:    @ in Loop: Header=BB18_3 Depth=1476; CHECK-NEXT:    mov r2, r3477; CHECK-NEXT:    wlstp.8 lr, r0, .LBB18_7478; CHECK-NEXT:  .LBB18_6: @ Parent Loop BB18_3 Depth=1479; CHECK-NEXT:    @ => This Inner Loop Header: Depth=2480; CHECK-NEXT:    vstrb.8 q0, [r2], #16481; CHECK-NEXT:    letp lr, .LBB18_6482; CHECK-NEXT:  .LBB18_7: @ %loop483; CHECK-NEXT:    @ in Loop: Header=BB18_3 Depth=1484; CHECK-NEXT:    mov r2, r3485; CHECK-NEXT:    wlstp.8 lr, r0, .LBB18_9486; CHECK-NEXT:  .LBB18_8: @ Parent Loop BB18_3 Depth=1487; CHECK-NEXT:    @ => This Inner Loop Header: Depth=2488; CHECK-NEXT:    vstrb.8 q0, [r2], #16489; CHECK-NEXT:    letp lr, .LBB18_8490; CHECK-NEXT:  .LBB18_9: @ %loop491; CHECK-NEXT:    @ in Loop: Header=BB18_3 Depth=1492; CHECK-NEXT:    cmp.w r12, #0493; CHECK-NEXT:    beq .LBB18_2494; CHECK-NEXT:  @ %bb.10: @ %loop495; CHECK-NEXT:    @ in Loop: Header=BB18_3 Depth=1496; CHECK-NEXT:    dlstp.8 lr, r0497; CHECK-NEXT:  .LBB18_11: @ Parent Loop BB18_3 Depth=1498; CHECK-NEXT:    @ => This Inner Loop Header: Depth=2499; CHECK-NEXT:    vstrb.8 q0, [r3], #16500; CHECK-NEXT:    letp lr, .LBB18_11501; CHECK-NEXT:    b .LBB18_2502; CHECK-NEXT:  .LBB18_12:503; CHECK-NEXT:    pop.w {r4, lr}504; CHECK-NEXT:    bx lr505entry:506  %cmp8 = icmp sgt i32 %b, 0507  br i1 %cmp8, label %loop, label %exit508 509loop:510  %p = phi i32 [ 0, %entry ], [ %inc, %loop ]511  call void @llvm.memset.p0.i32(ptr align 1 getelementptr ([21 x [16 x [11 x i8]]], ptr @arr_56, i32 0, i32 0, i32 undef, i32 0), i8 0, i32 %b, i1 false)512  call void @llvm.memset.p0.i32(ptr align 1 getelementptr ([21 x [16 x [11 x i8]]], ptr @arr_56, i32 0, i32 0, i32 undef, i32 0), i8 0, i32 %b, i1 false)513  call void @llvm.memset.p0.i32(ptr align 1 getelementptr ([21 x [16 x [11 x i8]]], ptr @arr_56, i32 0, i32 0, i32 undef, i32 0), i8 0, i32 %b, i1 false)514  call void @llvm.memset.p0.i32(ptr align 1 getelementptr ([21 x [16 x [11 x i8]]], ptr @arr_56, i32 0, i32 0, i32 undef, i32 0), i8 0, i32 %b, i1 false)515  %inc = add i32 %p, 1516  %c = icmp slt i32 %p, 1024517  br i1 %c, label %loop, label %exit518 519exit:520  ret void521}522 523@arr_21 = external dso_local local_unnamed_addr global [17 x [12 x [19 x i16]]], align 2524@arr_20 = external dso_local local_unnamed_addr global [17 x [12 x [19 x i64]]], align 8525@arr_22 = external dso_local local_unnamed_addr global [17 x [12 x [19 x i16]]], align 2526define i32 @reverted(i1 zeroext %b) {527; CHECK-LABEL: reverted:528; CHECK:       @ %bb.0: @ %entry529; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}530; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}531; CHECK-NEXT:    .pad #12532; CHECK-NEXT:    sub sp, #12533; CHECK-NEXT:    cmp r0, #0534; CHECK-NEXT:    mov.w r1, #11535; CHECK-NEXT:    cinc r1, r1, ne536; CHECK-NEXT:    movs r0, #38537; CHECK-NEXT:    mul r2, r1, r0538; CHECK-NEXT:    str r1, [sp, #8] @ 4-byte Spill539; CHECK-NEXT:    movw r0, :lower16:arr_22540; CHECK-NEXT:    vmov.i32 q0, #0x0541; CHECK-NEXT:    movt r0, :upper16:arr_22542; CHECK-NEXT:    add.w r1, r2, #15543; CHECK-NEXT:    lsrs r3, r1, #4544; CHECK-NEXT:    strd r3, r2, [sp] @ 8-byte Folded Spill545; CHECK-NEXT:    wlstp.8 lr, r2, .LBB19_2546; CHECK-NEXT:  .LBB19_1: @ =>This Inner Loop Header: Depth=1547; CHECK-NEXT:    vstrb.8 q0, [r0], #16548; CHECK-NEXT:    letp lr, .LBB19_1549; CHECK-NEXT:  .LBB19_2: @ %entry550; CHECK-NEXT:    ldr r0, [sp, #8] @ 4-byte Reload551; CHECK-NEXT:    movw r6, :lower16:arr_20552; CHECK-NEXT:    movt r6, :upper16:arr_20553; CHECK-NEXT:    add.w r3, r6, #80554; CHECK-NEXT:    dls lr, r0555; CHECK-NEXT:    movw r0, :lower16:arr_21556; CHECK-NEXT:    movt r0, :upper16:arr_21557; CHECK-NEXT:    add.w r5, r0, #36558; CHECK-NEXT:    add.w r11, r6, #128559; CHECK-NEXT:    add.w r7, r6, #112560; CHECK-NEXT:    add.w r2, r6, #96561; CHECK-NEXT:    add.w r4, r6, #64562; CHECK-NEXT:    add.w r0, r6, #48563; CHECK-NEXT:    add.w r1, r6, #32564; CHECK-NEXT:    add.w r12, r6, #16565; CHECK-NEXT:    adr r6, .LCPI19_0566; CHECK-NEXT:    vldrw.u32 q0, [r6]567; CHECK-NEXT:    movw r6, :lower16:arr_20568; CHECK-NEXT:    mov.w r8, #327685569; CHECK-NEXT:    mov.w r9, #5570; CHECK-NEXT:    vmov.i16 q1, #0x5571; CHECK-NEXT:    mov.w r10, #0572; CHECK-NEXT:    movt r6, :upper16:arr_20573; CHECK-NEXT:  .LBB19_3: @ %for.cond8.preheader574; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1575; CHECK-NEXT:    str r8, [r5, #-4]576; CHECK-NEXT:    vstrh.16 q1, [r5, #-36]577; CHECK-NEXT:    strh.w r9, [r5]578; CHECK-NEXT:    vstrh.16 q1, [r5, #-20]579; CHECK-NEXT:    vstrw.32 q0, [r3]580; CHECK-NEXT:    vstrh.16 q0, [r12], #152581; CHECK-NEXT:    vstrh.16 q0, [r6], #152582; CHECK-NEXT:    vstrh.16 q0, [r1], #152583; CHECK-NEXT:    vstrh.16 q0, [r0], #152584; CHECK-NEXT:    vstrh.16 q0, [r4], #152585; CHECK-NEXT:    vstrh.16 q0, [r2], #152586; CHECK-NEXT:    vstrh.16 q0, [r7], #152587; CHECK-NEXT:    vstrh.16 q0, [r11], #152588; CHECK-NEXT:    strd r9, r10, [r3, #64]589; CHECK-NEXT:    adds r5, #38590; CHECK-NEXT:    adds r3, #152591; CHECK-NEXT:    le lr, .LBB19_3592; CHECK-NEXT:  @ %bb.4: @ %for.cond.cleanup6593; CHECK-NEXT:    movw r0, :lower16:arr_22594; CHECK-NEXT:    ldr r2, [sp, #4] @ 4-byte Reload595; CHECK-NEXT:    movt r0, :upper16:arr_22596; CHECK-NEXT:    ldr r3, [sp] @ 4-byte Reload597; CHECK-NEXT:    add.w r0, r0, #1824598; CHECK-NEXT:    vmov.i32 q1, #0x0599; CHECK-NEXT:    wlstp.8 lr, r2, .LBB19_6600; CHECK-NEXT:  .LBB19_5: @ =>This Inner Loop Header: Depth=1601; CHECK-NEXT:    vstrb.8 q1, [r0], #16602; CHECK-NEXT:    letp lr, .LBB19_5603; CHECK-NEXT:  .LBB19_6: @ %for.cond.cleanup6604; CHECK-NEXT:    movw r6, :lower16:arr_20605; CHECK-NEXT:    movw r0, #7376606; CHECK-NEXT:    movt r6, :upper16:arr_20607; CHECK-NEXT:    adds r3, r6, r0608; CHECK-NEXT:    movw r0, #7408609; CHECK-NEXT:    add.w r12, r6, r0610; CHECK-NEXT:    movw r0, #7344611; CHECK-NEXT:    add.w r9, r6, r0612; CHECK-NEXT:    movw r0, #7312613; CHECK-NEXT:    adds r2, r6, r0614; CHECK-NEXT:    movw r0, :lower16:arr_21615; CHECK-NEXT:    add.w r1, r6, #7424616; CHECK-NEXT:    add.w r7, r6, #7392617; CHECK-NEXT:    add.w r4, r6, #7360618; CHECK-NEXT:    add.w r5, r6, #7328619; CHECK-NEXT:    add.w r8, r6, #7296620; CHECK-NEXT:    ldr r6, [sp, #8] @ 4-byte Reload621; CHECK-NEXT:    movt r0, :upper16:arr_21622; CHECK-NEXT:    addw r0, r0, #1860623; CHECK-NEXT:    mov.w r10, #5624; CHECK-NEXT:    dls lr, r6625; CHECK-NEXT:    mov.w r6, #327685626; CHECK-NEXT:    vmov.i16 q1, #0x5627; CHECK-NEXT:    mov.w r11, #0628; CHECK-NEXT:  .LBB19_7: @ %for.cond8.preheader.1629; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1630; CHECK-NEXT:    str r6, [r0, #-4]631; CHECK-NEXT:    vstrh.16 q1, [r0, #-36]632; CHECK-NEXT:    strh.w r10, [r0]633; CHECK-NEXT:    vstrh.16 q1, [r0, #-20]634; CHECK-NEXT:    vstrw.32 q0, [r3]635; CHECK-NEXT:    vstrh.16 q0, [r2], #152636; CHECK-NEXT:    vstrh.16 q0, [r8], #152637; CHECK-NEXT:    vstrh.16 q0, [r5], #152638; CHECK-NEXT:    vstrh.16 q0, [r9], #152639; CHECK-NEXT:    vstrh.16 q0, [r4], #152640; CHECK-NEXT:    vstrh.16 q0, [r7], #152641; CHECK-NEXT:    vstrh.16 q0, [r12], #152642; CHECK-NEXT:    vstrh.16 q0, [r1], #152643; CHECK-NEXT:    strd r10, r11, [r3, #64]644; CHECK-NEXT:    adds r0, #38645; CHECK-NEXT:    adds r3, #152646; CHECK-NEXT:    le lr, .LBB19_7647; CHECK-NEXT:  @ %bb.8: @ %for.cond.cleanup6.1648; CHECK-NEXT:    movw r0, :lower16:arr_22649; CHECK-NEXT:    ldr r2, [sp, #4] @ 4-byte Reload650; CHECK-NEXT:    movt r0, :upper16:arr_22651; CHECK-NEXT:    ldr r3, [sp] @ 4-byte Reload652; CHECK-NEXT:    add.w r0, r0, #3648653; CHECK-NEXT:    vmov.i32 q1, #0x0654; CHECK-NEXT:    wlstp.8 lr, r2, .LBB19_10655; CHECK-NEXT:  .LBB19_9: @ =>This Inner Loop Header: Depth=1656; CHECK-NEXT:    vstrb.8 q1, [r0], #16657; CHECK-NEXT:    letp lr, .LBB19_9658; CHECK-NEXT:  .LBB19_10: @ %for.cond.cleanup6.1659; CHECK-NEXT:    movw r7, :lower16:arr_20660; CHECK-NEXT:    movw r0, #14672661; CHECK-NEXT:    movt r7, :upper16:arr_20662; CHECK-NEXT:    adds r3, r7, r0663; CHECK-NEXT:    movw r0, #14704664; CHECK-NEXT:    add.w r12, r7, r0665; CHECK-NEXT:    movw r0, #14688666; CHECK-NEXT:    add.w r8, r7, r0667; CHECK-NEXT:    movw r0, #14640668; CHECK-NEXT:    add.w r9, r7, r0669; CHECK-NEXT:    movw r0, #14624670; CHECK-NEXT:    adds r2, r7, r0671; CHECK-NEXT:    movw r0, #14608672; CHECK-NEXT:    movw r1, :lower16:arr_21673; CHECK-NEXT:    add r0, r7674; CHECK-NEXT:    add.w r4, r7, #14720675; CHECK-NEXT:    add.w r5, r7, #14656676; CHECK-NEXT:    add.w r6, r7, #14592677; CHECK-NEXT:    ldr r7, [sp, #8] @ 4-byte Reload678; CHECK-NEXT:    movt r1, :upper16:arr_21679; CHECK-NEXT:    addw r1, r1, #3684680; CHECK-NEXT:    mov.w r10, #5681; CHECK-NEXT:    dls lr, r7682; CHECK-NEXT:    mov.w r7, #327685683; CHECK-NEXT:    vmov.i16 q1, #0x5684; CHECK-NEXT:    mov.w r11, #0685; CHECK-NEXT:  .LBB19_11: @ %for.cond8.preheader.2686; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1687; CHECK-NEXT:    str r7, [r1, #-4]688; CHECK-NEXT:    vstrh.16 q1, [r1, #-36]689; CHECK-NEXT:    strh.w r10, [r1]690; CHECK-NEXT:    vstrh.16 q1, [r1, #-20]691; CHECK-NEXT:    vstrw.32 q0, [r3]692; CHECK-NEXT:    vstrh.16 q0, [r0], #152693; CHECK-NEXT:    vstrh.16 q0, [r6], #152694; CHECK-NEXT:    vstrh.16 q0, [r2], #152695; CHECK-NEXT:    vstrh.16 q0, [r9], #152696; CHECK-NEXT:    vstrh.16 q0, [r5], #152697; CHECK-NEXT:    vstrh.16 q0, [r8], #152698; CHECK-NEXT:    vstrh.16 q0, [r12], #152699; CHECK-NEXT:    vstrh.16 q0, [r4], #152700; CHECK-NEXT:    strd r10, r11, [r3, #64]701; CHECK-NEXT:    adds r1, #38702; CHECK-NEXT:    adds r3, #152703; CHECK-NEXT:    le lr, .LBB19_11704; CHECK-NEXT:  @ %bb.12: @ %for.cond.cleanup6.2705; CHECK-NEXT:    movw r0, :lower16:arr_22706; CHECK-NEXT:    ldrd r2, r1, [sp] @ 8-byte Folded Reload707; CHECK-NEXT:    movt r0, :upper16:arr_22708; CHECK-NEXT:    vmov.i32 q1, #0x0709; CHECK-NEXT:    add.w r0, r0, #5472710; CHECK-NEXT:    wlstp.8 lr, r1, .LBB19_14711; CHECK-NEXT:  .LBB19_13: @ =>This Inner Loop Header: Depth=1712; CHECK-NEXT:    vstrb.8 q1, [r0], #16713; CHECK-NEXT:    letp lr, .LBB19_13714; CHECK-NEXT:  .LBB19_14: @ %for.cond.cleanup6.2715; CHECK-NEXT:    movw r2, :lower16:arr_21716; CHECK-NEXT:    movw r1, #5508717; CHECK-NEXT:    movt r2, :upper16:arr_21718; CHECK-NEXT:    movw r7, :lower16:arr_20719; CHECK-NEXT:    add r2, r1720; CHECK-NEXT:    movw r1, #22000721; CHECK-NEXT:    movt r7, :upper16:arr_20722; CHECK-NEXT:    add.w r12, r7, r1723; CHECK-NEXT:    movw r1, #21984724; CHECK-NEXT:    add.w r8, r7, r1725; CHECK-NEXT:    movw r1, #21952726; CHECK-NEXT:    add.w r9, r7, r1727; CHECK-NEXT:    movw r1, #21936728; CHECK-NEXT:    movw r0, #21968729; CHECK-NEXT:    adds r5, r7, r1730; CHECK-NEXT:    movw r1, #21920731; CHECK-NEXT:    movw r3, #21904732; CHECK-NEXT:    adds r4, r7, r3733; CHECK-NEXT:    add r0, r7734; CHECK-NEXT:    add r1, r7735; CHECK-NEXT:    add.w r3, r7, #22016736; CHECK-NEXT:    add.w r6, r7, #21888737; CHECK-NEXT:    ldr r7, [sp, #8] @ 4-byte Reload738; CHECK-NEXT:    mov.w r10, #5739; CHECK-NEXT:    vmov.i16 q1, #0x5740; CHECK-NEXT:    mov.w r11, #0741; CHECK-NEXT:    dls lr, r7742; CHECK-NEXT:    mov.w r7, #327685743; CHECK-NEXT:  .LBB19_15: @ %for.cond8.preheader.3744; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1745; CHECK-NEXT:    str r7, [r2, #-4]746; CHECK-NEXT:    vstrh.16 q1, [r2, #-36]747; CHECK-NEXT:    strh.w r10, [r2]748; CHECK-NEXT:    vstrh.16 q1, [r2, #-20]749; CHECK-NEXT:    vstrw.32 q0, [r0]750; CHECK-NEXT:    vstrh.16 q0, [r4], #152751; CHECK-NEXT:    vstrh.16 q0, [r6], #152752; CHECK-NEXT:    vstrh.16 q0, [r1], #152753; CHECK-NEXT:    vstrh.16 q0, [r5], #152754; CHECK-NEXT:    vstrh.16 q0, [r9], #152755; CHECK-NEXT:    vstrh.16 q0, [r8], #152756; CHECK-NEXT:    vstrh.16 q0, [r12], #152757; CHECK-NEXT:    vstrh.16 q0, [r3], #152758; CHECK-NEXT:    strd r10, r11, [r0, #64]759; CHECK-NEXT:    adds r2, #38760; CHECK-NEXT:    adds r0, #152761; CHECK-NEXT:    le lr, .LBB19_15762; CHECK-NEXT:  @ %bb.16: @ %for.cond.cleanup6.3763; CHECK-NEXT:    add sp, #12764; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}765; CHECK-NEXT:    .p2align 4766; CHECK-NEXT:  @ %bb.17:767; CHECK-NEXT:  .LCPI19_0:768; CHECK-NEXT:    .long 5 @ 0x5769; CHECK-NEXT:    .long 0 @ 0x0770; CHECK-NEXT:    .long 5 @ 0x5771; CHECK-NEXT:    .long 0 @ 0x0772entry:773  %add = select i1 %b, i32 12, i32 11774  %0 = mul nuw nsw i32 %add, 38775  call void @llvm.memset.p0.i32(ptr noundef nonnull align 2 dereferenceable(1) @arr_22, i8 0, i32 %0, i1 false)776  br label %for.cond8.preheader777 778for.cond8.preheader:                              ; preds = %entry, %for.cond8.preheader779  %d.051 = phi i32 [ 0, %entry ], [ %inc, %for.cond8.preheader ]780  %arrayidx16 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 0, i32 %d.051, i32 0781  %arrayidx21 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 0782  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21, align 8783  %arrayidx21.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 2784  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.2, align 8785  %arrayidx21.4 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 4786  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.4, align 8787  %arrayidx21.6 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 6788  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16, align 2789  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.6, align 8790  %arrayidx16.8 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 0, i32 %d.051, i32 8791  %arrayidx21.8 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 8792  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.8, align 8793  %arrayidx21.10 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 10794  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.10, align 8795  %arrayidx21.12 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 12796  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.12, align 8797  %arrayidx21.14 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 14798  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.8, align 2799  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.14, align 8800  %arrayidx16.16 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 0, i32 %d.051, i32 16801  store i16 5, ptr %arrayidx16.16, align 2802  %arrayidx21.16 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 16803  %arrayidx16.17 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 0, i32 %d.051, i32 17804  store i16 5, ptr %arrayidx16.17, align 2805  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.16, align 8806  %arrayidx16.18 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 0, i32 %d.051, i32 18807  store i16 5, ptr %arrayidx16.18, align 2808  %arrayidx21.18 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 0, i32 %d.051, i32 18809  store i64 5, ptr %arrayidx21.18, align 8810  %inc = add nuw nsw i32 %d.051, 1811  %exitcond.not = icmp eq i32 %inc, %add812  br i1 %exitcond.not, label %for.cond.cleanup6, label %for.cond8.preheader813 814for.cond.cleanup6:                                ; preds = %for.cond8.preheader815  call void @llvm.memset.p0.i32(ptr noundef nonnull align 2 dereferenceable(1) getelementptr inbounds ([17 x [12 x [19 x i16]]], ptr @arr_22, i32 0, i32 4, i32 0, i32 0), i8 0, i32 %0, i1 false)816  br label %for.cond8.preheader.1817 818for.cond8.preheader.1:                            ; preds = %for.cond8.preheader.1, %for.cond.cleanup6819  %d.051.1 = phi i32 [ 0, %for.cond.cleanup6 ], [ %inc.1, %for.cond8.preheader.1 ]820  %arrayidx16.1 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 4, i32 %d.051.1, i32 0821  %arrayidx21.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 0822  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.1, align 8823  %arrayidx21.2.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 2824  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.2.1, align 8825  %arrayidx21.4.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 4826  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.4.1, align 8827  %arrayidx21.6.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 6828  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.1, align 2829  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.6.1, align 8830  %arrayidx16.8.1 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 4, i32 %d.051.1, i32 8831  %arrayidx21.8.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 8832  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.8.1, align 8833  %arrayidx21.10.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 10834  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.10.1, align 8835  %arrayidx21.12.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 12836  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.12.1, align 8837  %arrayidx21.14.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 14838  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.8.1, align 2839  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.14.1, align 8840  %arrayidx16.16.1 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 4, i32 %d.051.1, i32 16841  store i16 5, ptr %arrayidx16.16.1, align 2842  %arrayidx21.16.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 16843  %arrayidx16.17.1 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 4, i32 %d.051.1, i32 17844  store i16 5, ptr %arrayidx16.17.1, align 2845  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.16.1, align 8846  %arrayidx16.18.1 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 4, i32 %d.051.1, i32 18847  store i16 5, ptr %arrayidx16.18.1, align 2848  %arrayidx21.18.1 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 4, i32 %d.051.1, i32 18849  store i64 5, ptr %arrayidx21.18.1, align 8850  %inc.1 = add nuw nsw i32 %d.051.1, 1851  %exitcond.not.1 = icmp eq i32 %inc.1, %add852  br i1 %exitcond.not.1, label %for.cond.cleanup6.1, label %for.cond8.preheader.1853 854for.cond.cleanup6.1:                              ; preds = %for.cond8.preheader.1855  call void @llvm.memset.p0.i32(ptr noundef nonnull align 2 dereferenceable(1) getelementptr inbounds ([17 x [12 x [19 x i16]]], ptr @arr_22, i32 0, i32 8, i32 0, i32 0), i8 0, i32 %0, i1 false)856  br label %for.cond8.preheader.2857 858for.cond8.preheader.2:                            ; preds = %for.cond8.preheader.2, %for.cond.cleanup6.1859  %d.051.2 = phi i32 [ 0, %for.cond.cleanup6.1 ], [ %inc.2, %for.cond8.preheader.2 ]860  %arrayidx16.2 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 8, i32 %d.051.2, i32 0861  %arrayidx21.254 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 0862  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.254, align 8863  %arrayidx21.2.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 2864  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.2.2, align 8865  %arrayidx21.4.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 4866  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.4.2, align 8867  %arrayidx21.6.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 6868  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.2, align 2869  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.6.2, align 8870  %arrayidx16.8.2 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 8, i32 %d.051.2, i32 8871  %arrayidx21.8.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 8872  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.8.2, align 8873  %arrayidx21.10.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 10874  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.10.2, align 8875  %arrayidx21.12.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 12876  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.12.2, align 8877  %arrayidx21.14.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 14878  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.8.2, align 2879  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.14.2, align 8880  %arrayidx16.16.2 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 8, i32 %d.051.2, i32 16881  store i16 5, ptr %arrayidx16.16.2, align 2882  %arrayidx21.16.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 16883  %arrayidx16.17.2 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 8, i32 %d.051.2, i32 17884  store i16 5, ptr %arrayidx16.17.2, align 2885  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.16.2, align 8886  %arrayidx16.18.2 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 8, i32 %d.051.2, i32 18887  store i16 5, ptr %arrayidx16.18.2, align 2888  %arrayidx21.18.2 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 8, i32 %d.051.2, i32 18889  store i64 5, ptr %arrayidx21.18.2, align 8890  %inc.2 = add nuw nsw i32 %d.051.2, 1891  %exitcond.not.2 = icmp eq i32 %inc.2, %add892  br i1 %exitcond.not.2, label %for.cond.cleanup6.2, label %for.cond8.preheader.2893 894for.cond.cleanup6.2:                              ; preds = %for.cond8.preheader.2895  call void @llvm.memset.p0.i32(ptr noundef nonnull align 2 dereferenceable(1) getelementptr inbounds ([17 x [12 x [19 x i16]]], ptr @arr_22, i32 0, i32 12, i32 0, i32 0), i8 0, i32 %0, i1 false)896  br label %for.cond8.preheader.3897 898for.cond8.preheader.3:                            ; preds = %for.cond8.preheader.3, %for.cond.cleanup6.2899  %d.051.3 = phi i32 [ 0, %for.cond.cleanup6.2 ], [ %inc.3, %for.cond8.preheader.3 ]900  %arrayidx16.3 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 12, i32 %d.051.3, i32 0901  %arrayidx21.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 0902  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.3, align 8903  %arrayidx21.2.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 2904  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.2.3, align 8905  %arrayidx21.4.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 4906  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.4.3, align 8907  %arrayidx21.6.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 6908  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.3, align 2909  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.6.3, align 8910  %arrayidx16.8.3 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 12, i32 %d.051.3, i32 8911  %arrayidx21.8.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 8912  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.8.3, align 8913  %arrayidx21.10.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 10914  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.10.3, align 8915  %arrayidx21.12.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 12916  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.12.3, align 8917  %arrayidx21.14.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 14918  store <8 x i16> <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>, ptr %arrayidx16.8.3, align 2919  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.14.3, align 8920  %arrayidx16.16.3 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 12, i32 %d.051.3, i32 16921  store i16 5, ptr %arrayidx16.16.3, align 2922  %arrayidx21.16.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 16923  %arrayidx16.17.3 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 12, i32 %d.051.3, i32 17924  store i16 5, ptr %arrayidx16.17.3, align 2925  store <2 x i64> <i64 5, i64 5>, ptr %arrayidx21.16.3, align 8926  %arrayidx16.18.3 = getelementptr inbounds [17 x [12 x [19 x i16]]], ptr @arr_21, i32 0, i32 12, i32 %d.051.3, i32 18927  store i16 5, ptr %arrayidx16.18.3, align 2928  %arrayidx21.18.3 = getelementptr inbounds [17 x [12 x [19 x i64]]], ptr @arr_20, i32 0, i32 12, i32 %d.051.3, i32 18929  store i64 5, ptr %arrayidx21.18.3, align 8930  %inc.3 = add nuw nsw i32 %d.051.3, 1931  %exitcond.not.3 = icmp eq i32 %inc.3, %add932  br i1 %exitcond.not.3, label %for.cond.cleanup6.3, label %for.cond8.preheader.3933 934for.cond.cleanup6.3:                              ; preds = %for.cond8.preheader.3935  ret i32 undef936}937 938attributes #0 = { noinline  optnone }939attributes #1 = { optsize }940