brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · 58697e6 Raw
303 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=aarch64 -mattr=+sve %s -o - | FileCheck %s3 4define <vscale x 16 x i8> @i8_1v_4s(ptr %b) {5; CHECK-LABEL: i8_1v_4s:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    rdvl x8, #18; CHECK-NEXT:    ptrue p0.b9; CHECK-NEXT:    mov w9, #4 // =0x410; CHECK-NEXT:    add x8, x0, x811; CHECK-NEXT:    ld1b { z0.b }, p0/z, [x8, x9]12; CHECK-NEXT:    ret13entry:14  %0 = tail call i64 @llvm.vscale.i64()15  %1 = shl nuw nsw i64 %0, 416  %add.ptr = getelementptr inbounds i8, ptr %b, i64 %117  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 418  %2 = load <vscale x 16 x i8>, ptr %add.ptr1, align 1619  ret <vscale x 16 x i8> %220}21 22define <vscale x 16 x i8> @i8_4s_1v(ptr %b) {23; CHECK-LABEL: i8_4s_1v:24; CHECK:       // %bb.0: // %entry25; CHECK-NEXT:    add x8, x0, #426; CHECK-NEXT:    ldr z0, [x8, #1, mul vl]27; CHECK-NEXT:    ret28entry:29  %add.ptr = getelementptr inbounds i8, ptr %b, i64 430  %0 = tail call i64 @llvm.vscale.i64()31  %1 = shl nuw nsw i64 %0, 432  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 %133  %2 = load <vscale x 16 x i8>, ptr %add.ptr1, align 1634  ret <vscale x 16 x i8> %235}36 37define <vscale x 8 x i16> @i16_1v_8s(ptr %b) {38; CHECK-LABEL: i16_1v_8s:39; CHECK:       // %bb.0: // %entry40; CHECK-NEXT:    rdvl x8, #141; CHECK-NEXT:    ptrue p0.h42; CHECK-NEXT:    mov x9, #4 // =0x443; CHECK-NEXT:    add x8, x0, x844; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x8, x9, lsl #1]45; CHECK-NEXT:    ret46entry:47  %0 = tail call i64 @llvm.vscale.i64()48  %1 = shl nuw nsw i64 %0, 349  %add.ptr = getelementptr inbounds i16, ptr %b, i64 %150  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 851  %2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 1652  ret <vscale x 8 x i16> %253}54 55define <vscale x 8 x i16> @i16_8s_1v(ptr %b) {56; CHECK-LABEL: i16_8s_1v:57; CHECK:       // %bb.0: // %entry58; CHECK-NEXT:    add x8, x0, #859; CHECK-NEXT:    ldr z0, [x8, #1, mul vl]60; CHECK-NEXT:    ret61entry:62  %add.ptr = getelementptr inbounds i8, ptr %b, i64 863  %0 = tail call i64 @llvm.vscale.i64()64  %1 = shl nuw nsw i64 %0, 365  %add.ptr1 = getelementptr inbounds i16, ptr %add.ptr, i64 %166  %2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 1667  ret <vscale x 8 x i16> %268}69 70define <vscale x 8 x i16> @i16_2v_8s(ptr %b) {71; CHECK-LABEL: i16_2v_8s:72; CHECK:       // %bb.0: // %entry73; CHECK-NEXT:    rdvl x8, #274; CHECK-NEXT:    ptrue p0.h75; CHECK-NEXT:    mov x9, #4 // =0x476; CHECK-NEXT:    add x8, x0, x877; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x8, x9, lsl #1]78; CHECK-NEXT:    ret79entry:80  %0 = tail call i64 @llvm.vscale.i64()81  %1 = shl nuw nsw i64 %0, 482  %add.ptr = getelementptr inbounds i16, ptr %b, i64 %183  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 884  %2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 1685  ret <vscale x 8 x i16> %286}87 88define <vscale x 8 x i16> @i16_8s_2v(ptr %b) {89; CHECK-LABEL: i16_8s_2v:90; CHECK:       // %bb.0: // %entry91; CHECK-NEXT:    add x8, x0, #892; CHECK-NEXT:    ldr z0, [x8, #2, mul vl]93; CHECK-NEXT:    ret94entry:95  %add.ptr = getelementptr inbounds i8, ptr %b, i64 896  %0 = tail call i64 @llvm.vscale.i64()97  %1 = shl nuw nsw i64 %0, 498  %add.ptr1 = getelementptr inbounds i16, ptr %add.ptr, i64 %199  %2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16100  ret <vscale x 8 x i16> %2101}102 103define <vscale x 4 x i32> @i32_1v_16s(ptr %b) {104; CHECK-LABEL: i32_1v_16s:105; CHECK:       // %bb.0: // %entry106; CHECK-NEXT:    rdvl x8, #1107; CHECK-NEXT:    ptrue p0.s108; CHECK-NEXT:    mov x9, #4 // =0x4109; CHECK-NEXT:    add x8, x0, x8110; CHECK-NEXT:    ld1w { z0.s }, p0/z, [x8, x9, lsl #2]111; CHECK-NEXT:    ret112entry:113  %0 = tail call i64 @llvm.vscale.i64()114  %1 = shl nuw nsw i64 %0, 2115  %add.ptr = getelementptr inbounds i32, ptr %b, i64 %1116  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 16117  %2 = load <vscale x 4 x i32>, ptr %add.ptr1, align 16118  ret <vscale x 4 x i32> %2119}120 121define <vscale x 4 x i32> @i32_16s_2v(ptr %b) {122; CHECK-LABEL: i32_16s_2v:123; CHECK:       // %bb.0: // %entry124; CHECK-NEXT:    add x8, x0, #16125; CHECK-NEXT:    ldr z0, [x8, #1, mul vl]126; CHECK-NEXT:    ret127entry:128  %add.ptr = getelementptr inbounds i8, ptr %b, i64 16129  %0 = tail call i64 @llvm.vscale.i64()130  %1 = shl nuw nsw i64 %0, 2131  %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i64 %1132  %2 = load <vscale x 4 x i32>, ptr %add.ptr1, align 16133  ret <vscale x 4 x i32> %2134}135 136define <vscale x 2 x i64> @i64_1v_32s(ptr %b) {137; CHECK-LABEL: i64_1v_32s:138; CHECK:       // %bb.0: // %entry139; CHECK-NEXT:    rdvl x8, #1140; CHECK-NEXT:    ptrue p0.d141; CHECK-NEXT:    mov x9, #4 // =0x4142; CHECK-NEXT:    add x8, x0, x8143; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x8, x9, lsl #3]144; CHECK-NEXT:    ret145entry:146  %0 = tail call i64 @llvm.vscale.i64()147  %1 = shl nuw nsw i64 %0, 1148  %add.ptr = getelementptr inbounds i64, ptr %b, i64 %1149  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 32150  %2 = load <vscale x 2 x i64>, ptr %add.ptr1, align 16151  ret <vscale x 2 x i64> %2152}153 154define <vscale x 2 x i64> @i64_32s_2v(ptr %b) {155; CHECK-LABEL: i64_32s_2v:156; CHECK:       // %bb.0: // %entry157; CHECK-NEXT:    add x8, x0, #32158; CHECK-NEXT:    ldr z0, [x8, #1, mul vl]159; CHECK-NEXT:    ret160entry:161  %add.ptr = getelementptr inbounds i8, ptr %b, i64 32162  %0 = tail call i64 @llvm.vscale.i64()163  %1 = shl nuw nsw i64 %0, 1164  %add.ptr1 = getelementptr inbounds i64, ptr %add.ptr, i64 %1165  %2 = load <vscale x 2 x i64>, ptr %add.ptr1, align 16166  ret <vscale x 2 x i64> %2167}168 169 170define <vscale x 16 x i8> @i8_m2v_4s(ptr %b) {171; CHECK-LABEL: i8_m2v_4s:172; CHECK:       // %bb.0: // %entry173; CHECK-NEXT:    cnth x8, all, mul #4174; CHECK-NEXT:    ptrue p0.b175; CHECK-NEXT:    mov w9, #4 // =0x4176; CHECK-NEXT:    sub x8, x0, x8177; CHECK-NEXT:    ld1b { z0.b }, p0/z, [x8, x9]178; CHECK-NEXT:    ret179entry:180  %0 = tail call i64 @llvm.vscale.i64()181  %1 = mul i64 %0, -32182  %add.ptr = getelementptr inbounds i8, ptr %b, i64 %1183  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 4184  %2 = load <vscale x 16 x i8>, ptr %add.ptr1, align 16185  ret <vscale x 16 x i8> %2186}187 188define <vscale x 16 x i8> @i8_4s_m2v(ptr %b) {189; CHECK-LABEL: i8_4s_m2v:190; CHECK:       // %bb.0: // %entry191; CHECK-NEXT:    add x8, x0, #4192; CHECK-NEXT:    ldr z0, [x8, #-2, mul vl]193; CHECK-NEXT:    ret194entry:195  %add.ptr = getelementptr inbounds i8, ptr %b, i64 4196  %0 = tail call i64 @llvm.vscale.i64()197  %1 = mul i64 %0, -32198  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 %1199  %2 = load <vscale x 16 x i8>, ptr %add.ptr1, align 16200  ret <vscale x 16 x i8> %2201}202 203define <vscale x 8 x i16> @i16_m2v_8s(ptr %b) {204; CHECK-LABEL: i16_m2v_8s:205; CHECK:       // %bb.0: // %entry206; CHECK-NEXT:    cnth x8, all, mul #4207; CHECK-NEXT:    ptrue p0.h208; CHECK-NEXT:    mov x9, #4 // =0x4209; CHECK-NEXT:    sub x8, x0, x8210; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x8, x9, lsl #1]211; CHECK-NEXT:    ret212entry:213  %0 = tail call i64 @llvm.vscale.i64()214  %1 = mul i64 %0, -32215  %add.ptr = getelementptr inbounds i8, ptr %b, i64 %1216  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 8217  %2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16218  ret <vscale x 8 x i16> %2219}220 221define <vscale x 8 x i16> @i16_8s_m2v(ptr %b) {222; CHECK-LABEL: i16_8s_m2v:223; CHECK:       // %bb.0: // %entry224; CHECK-NEXT:    add x8, x0, #8225; CHECK-NEXT:    ldr z0, [x8, #-2, mul vl]226; CHECK-NEXT:    ret227entry:228  %add.ptr = getelementptr inbounds i8, ptr %b, i64 8229  %0 = tail call i64 @llvm.vscale.i64()230  %1 = mul i64 %0, -32231  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 %1232  %2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16233  ret <vscale x 8 x i16> %2234}235 236define <vscale x 4 x i32> @i32_m2v_16s(ptr %b) {237; CHECK-LABEL: i32_m2v_16s:238; CHECK:       // %bb.0: // %entry239; CHECK-NEXT:    cnth x8, all, mul #4240; CHECK-NEXT:    ptrue p0.s241; CHECK-NEXT:    mov x9, #4 // =0x4242; CHECK-NEXT:    sub x8, x0, x8243; CHECK-NEXT:    ld1w { z0.s }, p0/z, [x8, x9, lsl #2]244; CHECK-NEXT:    ret245entry:246  %0 = tail call i64 @llvm.vscale.i64()247  %1 = mul i64 %0, -32248  %add.ptr = getelementptr inbounds i8, ptr %b, i64 %1249  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 16250  %2 = load <vscale x 4 x i32>, ptr %add.ptr1, align 16251  ret <vscale x 4 x i32> %2252}253 254define <vscale x 4 x i32> @i32_16s_m2v(ptr %b) {255; CHECK-LABEL: i32_16s_m2v:256; CHECK:       // %bb.0: // %entry257; CHECK-NEXT:    add x8, x0, #16258; CHECK-NEXT:    ldr z0, [x8, #-2, mul vl]259; CHECK-NEXT:    ret260entry:261  %add.ptr = getelementptr inbounds i8, ptr %b, i64 16262  %0 = tail call i64 @llvm.vscale.i64()263  %1 = mul i64 %0, -32264  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 %1265  %2 = load <vscale x 4 x i32>, ptr %add.ptr1, align 16266  ret <vscale x 4 x i32> %2267}268 269define <vscale x 2 x i64> @i64_m2v_32s(ptr %b) {270; CHECK-LABEL: i64_m2v_32s:271; CHECK:       // %bb.0: // %entry272; CHECK-NEXT:    cnth x8, all, mul #4273; CHECK-NEXT:    ptrue p0.d274; CHECK-NEXT:    mov x9, #4 // =0x4275; CHECK-NEXT:    sub x8, x0, x8276; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x8, x9, lsl #3]277; CHECK-NEXT:    ret278entry:279  %0 = tail call i64 @llvm.vscale.i64()280  %1 = mul i64 %0, -32281  %add.ptr = getelementptr inbounds i8, ptr %b, i64 %1282  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 32283  %2 = load <vscale x 2 x i64>, ptr %add.ptr1, align 16284  ret <vscale x 2 x i64> %2285}286 287define <vscale x 2 x i64> @i64_32s_m2v(ptr %b) {288; CHECK-LABEL: i64_32s_m2v:289; CHECK:       // %bb.0: // %entry290; CHECK-NEXT:    add x8, x0, #32291; CHECK-NEXT:    ldr z0, [x8, #-2, mul vl]292; CHECK-NEXT:    ret293entry:294  %add.ptr = getelementptr inbounds i8, ptr %b, i64 32295  %0 = tail call i64 @llvm.vscale.i64()296  %1 = mul i64 %0, -32297  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 %1298  %2 = load <vscale x 2 x i64>, ptr %add.ptr1, align 16299  ret <vscale x 2 x i64> %2300}301 302declare i64 @llvm.vscale.i64()303