brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.0 KiB · dc4da22 Raw
378 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve %s --verify-machineinstrs -o - | FileCheck %s3 4define dso_local arm_aapcs_vfpcc void @sink_shl_i32(ptr nocapture readonly %in, ptr noalias nocapture %out, i32 %shift, i32 %N) {5; CHECK-LABEL: sink_shl_i32:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    .save {r7, lr}8; CHECK-NEXT:    push {r7, lr}9; CHECK-NEXT:    bic r3, r3, #310; CHECK-NEXT:    sub.w r12, r3, #411; CHECK-NEXT:    movs r3, #112; CHECK-NEXT:    add.w lr, r3, r12, lsr #213; CHECK-NEXT:  .LBB0_1: @ %vector.body14; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=115; CHECK-NEXT:    vldrw.u32 q0, [r0], #1616; CHECK-NEXT:    vshl.u32 q0, r217; CHECK-NEXT:    vstrb.8 q0, [r1], #1618; CHECK-NEXT:    le lr, .LBB0_119; CHECK-NEXT:  @ %bb.2: @ %exit20; CHECK-NEXT:    pop {r7, pc}21entry:22  br label %vector.ph23 24vector.ph:25  %n.vec = and i32 %N, -426  %broadcast.splatinsert10 = insertelement <4 x i32> undef, i32 %shift, i32 027  %broadcast.splat11 = shufflevector <4 x i32> %broadcast.splatinsert10, <4 x i32> undef, <4 x i32> zeroinitializer28  br label %vector.body29 30vector.body:                                      ; preds = %vector.body, %vector.ph31  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]32  %gep.in = getelementptr inbounds i32, ptr %in, i32 %index33  %wide.load = load <4 x i32>, ptr %gep.in, align 434  %res = shl <4 x i32> %wide.load, %broadcast.splat1135  %gep.out = getelementptr inbounds i32, ptr %out, i32 %index36  store <4 x i32> %res, ptr %gep.out, align 437  %index.next = add i32 %index, 438  %cmp = icmp eq i32 %index.next, %n.vec39  br i1 %cmp, label %exit, label %vector.body40 41exit:42  ret void43}44 45define dso_local arm_aapcs_vfpcc void @sink_shl_i16(ptr nocapture readonly %in, ptr noalias nocapture %out, i16 %shift, i32 %N) {46; CHECK-LABEL: sink_shl_i16:47; CHECK:       @ %bb.0: @ %entry48; CHECK-NEXT:    .save {r7, lr}49; CHECK-NEXT:    push {r7, lr}50; CHECK-NEXT:    bic r3, r3, #351; CHECK-NEXT:    sub.w r12, r3, #452; CHECK-NEXT:    movs r3, #153; CHECK-NEXT:    add.w lr, r3, r12, lsr #254; CHECK-NEXT:  .LBB1_1: @ %vector.body55; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=156; CHECK-NEXT:    vldrw.u32 q0, [r0], #857; CHECK-NEXT:    vshl.u16 q0, r258; CHECK-NEXT:    vstrb.8 q0, [r1], #859; CHECK-NEXT:    le lr, .LBB1_160; CHECK-NEXT:  @ %bb.2: @ %exit61; CHECK-NEXT:    pop {r7, pc}62entry:63  br label %vector.ph64 65vector.ph:66  %n.vec = and i32 %N, -467  %broadcast.splatinsert10 = insertelement <8 x i16> undef, i16 %shift, i32 068  %broadcast.splat11 = shufflevector <8 x i16> %broadcast.splatinsert10, <8 x i16> undef, <8 x i32> zeroinitializer69  br label %vector.body70 71vector.body:                                      ; preds = %vector.body, %vector.ph72  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]73  %gep.in = getelementptr inbounds i16, ptr %in, i32 %index74  %wide.load = load <8 x i16>, ptr %gep.in, align 475  %res = shl <8 x i16> %wide.load, %broadcast.splat1176  %gep.out = getelementptr inbounds i16, ptr %out, i32 %index77  store <8 x i16> %res, ptr %gep.out, align 478  %index.next = add i32 %index, 479  %cmp = icmp eq i32 %index.next, %n.vec80  br i1 %cmp, label %exit, label %vector.body81 82exit:83  ret void84}85 86define dso_local arm_aapcs_vfpcc void @sink_shl_i8(ptr nocapture readonly %in, ptr noalias nocapture %out, i8 %shift, i32 %N) {87; CHECK-LABEL: sink_shl_i8:88; CHECK:       @ %bb.0: @ %entry89; CHECK-NEXT:    .save {r7, lr}90; CHECK-NEXT:    push {r7, lr}91; CHECK-NEXT:    bic r3, r3, #392; CHECK-NEXT:    sub.w r12, r3, #493; CHECK-NEXT:    movs r3, #194; CHECK-NEXT:    add.w lr, r3, r12, lsr #295; CHECK-NEXT:  .LBB2_1: @ %vector.body96; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=197; CHECK-NEXT:    vldrw.u32 q0, [r0], #498; CHECK-NEXT:    vshl.u8 q0, r299; CHECK-NEXT:    vstrb.8 q0, [r1], #4100; CHECK-NEXT:    le lr, .LBB2_1101; CHECK-NEXT:  @ %bb.2: @ %exit102; CHECK-NEXT:    pop {r7, pc}103entry:104  br label %vector.ph105 106vector.ph:107  %n.vec = and i32 %N, -4108  %broadcast.splatinsert10 = insertelement <16 x i8> undef, i8 %shift, i32 0109  %broadcast.splat11 = shufflevector <16 x i8> %broadcast.splatinsert10, <16 x i8> undef, <16 x i32> zeroinitializer110  br label %vector.body111 112vector.body:                                      ; preds = %vector.body, %vector.ph113  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]114  %gep.in = getelementptr inbounds i8, ptr %in, i32 %index115  %wide.load = load <16 x i8>, ptr %gep.in, align 4116  %res = shl <16 x i8> %wide.load, %broadcast.splat11117  %gep.out = getelementptr inbounds i8, ptr %out, i32 %index118  store <16 x i8> %res, ptr %gep.out, align 4119  %index.next = add i32 %index, 4120  %cmp = icmp eq i32 %index.next, %n.vec121  br i1 %cmp, label %exit, label %vector.body122 123exit:124  ret void125}126 127define dso_local arm_aapcs_vfpcc void @sink_lshr_i32(ptr nocapture readonly %in, ptr noalias nocapture %out, i32 %shift, i32 %N) {128; CHECK-LABEL: sink_lshr_i32:129; CHECK:       @ %bb.0: @ %entry130; CHECK-NEXT:    .save {r7, lr}131; CHECK-NEXT:    push {r7, lr}132; CHECK-NEXT:    bic r3, r3, #3133; CHECK-NEXT:    rsbs r2, r2, #0134; CHECK-NEXT:    sub.w r12, r3, #4135; CHECK-NEXT:    movs r3, #1136; CHECK-NEXT:    add.w lr, r3, r12, lsr #2137; CHECK-NEXT:  .LBB3_1: @ %vector.body138; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1139; CHECK-NEXT:    vldrw.u32 q0, [r0], #16140; CHECK-NEXT:    vshl.u32 q0, r2141; CHECK-NEXT:    vstrb.8 q0, [r1], #16142; CHECK-NEXT:    le lr, .LBB3_1143; CHECK-NEXT:  @ %bb.2: @ %exit144; CHECK-NEXT:    pop {r7, pc}145entry:146  br label %vector.ph147 148vector.ph:149  %n.vec = and i32 %N, -4150  %broadcast.splatinsert10 = insertelement <4 x i32> undef, i32 %shift, i32 0151  %broadcast.splat11 = shufflevector <4 x i32> %broadcast.splatinsert10, <4 x i32> undef, <4 x i32> zeroinitializer152  br label %vector.body153 154vector.body:                                      ; preds = %vector.body, %vector.ph155  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]156  %gep.in = getelementptr inbounds i32, ptr %in, i32 %index157  %wide.load = load <4 x i32>, ptr %gep.in, align 4158  %res = lshr <4 x i32> %wide.load, %broadcast.splat11159  %gep.out = getelementptr inbounds i32, ptr %out, i32 %index160  store <4 x i32> %res, ptr %gep.out, align 4161  %index.next = add i32 %index, 4162  %cmp = icmp eq i32 %index.next, %n.vec163  br i1 %cmp, label %exit, label %vector.body164 165exit:166  ret void167}168 169define dso_local arm_aapcs_vfpcc void @sink_lshr_i16(ptr nocapture readonly %in, ptr noalias nocapture %out, i16 %shift, i32 %N) {170; CHECK-LABEL: sink_lshr_i16:171; CHECK:       @ %bb.0: @ %entry172; CHECK-NEXT:    .save {r7, lr}173; CHECK-NEXT:    push {r7, lr}174; CHECK-NEXT:    bic r3, r3, #3175; CHECK-NEXT:    rsbs r2, r2, #0176; CHECK-NEXT:    sub.w r12, r3, #4177; CHECK-NEXT:    movs r3, #1178; CHECK-NEXT:    add.w lr, r3, r12, lsr #2179; CHECK-NEXT:  .LBB4_1: @ %vector.body180; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1181; CHECK-NEXT:    vldrw.u32 q0, [r0], #8182; CHECK-NEXT:    vshl.u16 q0, r2183; CHECK-NEXT:    vstrb.8 q0, [r1], #8184; CHECK-NEXT:    le lr, .LBB4_1185; CHECK-NEXT:  @ %bb.2: @ %exit186; CHECK-NEXT:    pop {r7, pc}187entry:188  br label %vector.ph189 190vector.ph:191  %n.vec = and i32 %N, -4192  %broadcast.splatinsert10 = insertelement <8 x i16> undef, i16 %shift, i32 0193  %broadcast.splat11 = shufflevector <8 x i16> %broadcast.splatinsert10, <8 x i16> undef, <8 x i32> zeroinitializer194  br label %vector.body195 196vector.body:                                      ; preds = %vector.body, %vector.ph197  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]198  %gep.in = getelementptr inbounds i16, ptr %in, i32 %index199  %wide.load = load <8 x i16>, ptr %gep.in, align 4200  %res = lshr <8 x i16> %wide.load, %broadcast.splat11201  %gep.out = getelementptr inbounds i16, ptr %out, i32 %index202  store <8 x i16> %res, ptr %gep.out, align 4203  %index.next = add i32 %index, 4204  %cmp = icmp eq i32 %index.next, %n.vec205  br i1 %cmp, label %exit, label %vector.body206 207exit:208  ret void209}210 211define dso_local arm_aapcs_vfpcc void @sink_lshr_i8(ptr nocapture readonly %in, ptr noalias nocapture %out, i8 %shift, i32 %N) {212; CHECK-LABEL: sink_lshr_i8:213; CHECK:       @ %bb.0: @ %entry214; CHECK-NEXT:    .save {r7, lr}215; CHECK-NEXT:    push {r7, lr}216; CHECK-NEXT:    bic r3, r3, #3217; CHECK-NEXT:    rsbs r2, r2, #0218; CHECK-NEXT:    sub.w r12, r3, #4219; CHECK-NEXT:    movs r3, #1220; CHECK-NEXT:    add.w lr, r3, r12, lsr #2221; CHECK-NEXT:  .LBB5_1: @ %vector.body222; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1223; CHECK-NEXT:    vldrw.u32 q0, [r0], #4224; CHECK-NEXT:    vshl.u8 q0, r2225; CHECK-NEXT:    vstrb.8 q0, [r1], #4226; CHECK-NEXT:    le lr, .LBB5_1227; CHECK-NEXT:  @ %bb.2: @ %exit228; CHECK-NEXT:    pop {r7, pc}229entry:230  br label %vector.ph231 232vector.ph:233  %n.vec = and i32 %N, -4234  %broadcast.splatinsert10 = insertelement <16 x i8> undef, i8 %shift, i32 0235  %broadcast.splat11 = shufflevector <16 x i8> %broadcast.splatinsert10, <16 x i8> undef, <16 x i32> zeroinitializer236  br label %vector.body237 238vector.body:                                      ; preds = %vector.body, %vector.ph239  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]240  %gep.in = getelementptr inbounds i8, ptr %in, i32 %index241  %wide.load = load <16 x i8>, ptr %gep.in, align 4242  %res = lshr <16 x i8> %wide.load, %broadcast.splat11243  %gep.out = getelementptr inbounds i8, ptr %out, i32 %index244  store <16 x i8> %res, ptr %gep.out, align 4245  %index.next = add i32 %index, 4246  %cmp = icmp eq i32 %index.next, %n.vec247  br i1 %cmp, label %exit, label %vector.body248 249exit:250  ret void251}252 253define dso_local arm_aapcs_vfpcc void @sink_ashr_i32(ptr nocapture readonly %in, ptr noalias nocapture %out, i32 %shift, i32 %N) {254; CHECK-LABEL: sink_ashr_i32:255; CHECK:       @ %bb.0: @ %entry256; CHECK-NEXT:    .save {r7, lr}257; CHECK-NEXT:    push {r7, lr}258; CHECK-NEXT:    bic r3, r3, #3259; CHECK-NEXT:    rsbs r2, r2, #0260; CHECK-NEXT:    sub.w r12, r3, #4261; CHECK-NEXT:    movs r3, #1262; CHECK-NEXT:    add.w lr, r3, r12, lsr #2263; CHECK-NEXT:  .LBB6_1: @ %vector.body264; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1265; CHECK-NEXT:    vldrw.u32 q0, [r0], #16266; CHECK-NEXT:    vshl.s32 q0, r2267; CHECK-NEXT:    vstrb.8 q0, [r1], #16268; CHECK-NEXT:    le lr, .LBB6_1269; CHECK-NEXT:  @ %bb.2: @ %exit270; CHECK-NEXT:    pop {r7, pc}271entry:272  br label %vector.ph273 274vector.ph:275  %n.vec = and i32 %N, -4276  %broadcast.splatinsert10 = insertelement <4 x i32> undef, i32 %shift, i32 0277  %broadcast.splat11 = shufflevector <4 x i32> %broadcast.splatinsert10, <4 x i32> undef, <4 x i32> zeroinitializer278  br label %vector.body279 280vector.body:                                      ; preds = %vector.body, %vector.ph281  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]282  %gep.in = getelementptr inbounds i32, ptr %in, i32 %index283  %wide.load = load <4 x i32>, ptr %gep.in, align 4284  %res = ashr <4 x i32> %wide.load, %broadcast.splat11285  %gep.out = getelementptr inbounds i32, ptr %out, i32 %index286  store <4 x i32> %res, ptr %gep.out, align 4287  %index.next = add i32 %index, 4288  %cmp = icmp eq i32 %index.next, %n.vec289  br i1 %cmp, label %exit, label %vector.body290 291exit:292  ret void293}294 295define dso_local arm_aapcs_vfpcc void @sink_ashr_i16(ptr nocapture readonly %in, ptr noalias nocapture %out, i16 %shift, i32 %N) {296; CHECK-LABEL: sink_ashr_i16:297; CHECK:       @ %bb.0: @ %entry298; CHECK-NEXT:    .save {r7, lr}299; CHECK-NEXT:    push {r7, lr}300; CHECK-NEXT:    bic r3, r3, #3301; CHECK-NEXT:    rsbs r2, r2, #0302; CHECK-NEXT:    sub.w r12, r3, #4303; CHECK-NEXT:    movs r3, #1304; CHECK-NEXT:    add.w lr, r3, r12, lsr #2305; CHECK-NEXT:  .LBB7_1: @ %vector.body306; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1307; CHECK-NEXT:    vldrw.u32 q0, [r0], #8308; CHECK-NEXT:    vshl.s16 q0, r2309; CHECK-NEXT:    vstrb.8 q0, [r1], #8310; CHECK-NEXT:    le lr, .LBB7_1311; CHECK-NEXT:  @ %bb.2: @ %exit312; CHECK-NEXT:    pop {r7, pc}313entry:314  br label %vector.ph315 316vector.ph:317  %n.vec = and i32 %N, -4318  %broadcast.splatinsert10 = insertelement <8 x i16> undef, i16 %shift, i32 0319  %broadcast.splat11 = shufflevector <8 x i16> %broadcast.splatinsert10, <8 x i16> undef, <8 x i32> zeroinitializer320  br label %vector.body321 322vector.body:                                      ; preds = %vector.body, %vector.ph323  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]324  %gep.in = getelementptr inbounds i16, ptr %in, i32 %index325  %wide.load = load <8 x i16>, ptr %gep.in, align 4326  %res = ashr <8 x i16> %wide.load, %broadcast.splat11327  %gep.out = getelementptr inbounds i16, ptr %out, i32 %index328  store <8 x i16> %res, ptr %gep.out, align 4329  %index.next = add i32 %index, 4330  %cmp = icmp eq i32 %index.next, %n.vec331  br i1 %cmp, label %exit, label %vector.body332 333exit:334  ret void335}336 337define dso_local arm_aapcs_vfpcc void @sink_ashr_i8(ptr nocapture readonly %in, ptr noalias nocapture %out, i8 %shift, i32 %N) {338; CHECK-LABEL: sink_ashr_i8:339; CHECK:       @ %bb.0: @ %entry340; CHECK-NEXT:    .save {r7, lr}341; CHECK-NEXT:    push {r7, lr}342; CHECK-NEXT:    bic r3, r3, #3343; CHECK-NEXT:    rsbs r2, r2, #0344; CHECK-NEXT:    sub.w r12, r3, #4345; CHECK-NEXT:    movs r3, #1346; CHECK-NEXT:    add.w lr, r3, r12, lsr #2347; CHECK-NEXT:  .LBB8_1: @ %vector.body348; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1349; CHECK-NEXT:    vldrw.u32 q0, [r0], #4350; CHECK-NEXT:    vshl.s8 q0, r2351; CHECK-NEXT:    vstrb.8 q0, [r1], #4352; CHECK-NEXT:    le lr, .LBB8_1353; CHECK-NEXT:  @ %bb.2: @ %exit354; CHECK-NEXT:    pop {r7, pc}355entry:356  br label %vector.ph357 358vector.ph:359  %n.vec = and i32 %N, -4360  %broadcast.splatinsert10 = insertelement <16 x i8> undef, i8 %shift, i32 0361  %broadcast.splat11 = shufflevector <16 x i8> %broadcast.splatinsert10, <16 x i8> undef, <16 x i32> zeroinitializer362  br label %vector.body363 364vector.body:                                      ; preds = %vector.body, %vector.ph365  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]366  %gep.in = getelementptr inbounds i8, ptr %in, i32 %index367  %wide.load = load <16 x i8>, ptr %gep.in, align 4368  %res = ashr <16 x i8> %wide.load, %broadcast.splat11369  %gep.out = getelementptr inbounds i8, ptr %out, i32 %index370  store <16 x i8> %res, ptr %gep.out, align 4371  %index.next = add i32 %index, 4372  %cmp = icmp eq i32 %index.next, %n.vec373  br i1 %cmp, label %exit, label %vector.body374 375exit:376  ret void377}378