brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.5 KiB · b1b1289 Raw
1079 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64 -mattr=+fullfp16,+bf16,+sve | FileCheck %s3 4define <8 x i8> @loadv8i8(ptr %p) {5; CHECK-LABEL: loadv8i8:6; CHECK:       // %bb.0:7; CHECK-NEXT:    ldr b0, [x0]8; CHECK-NEXT:    ret9  %l = load i8, ptr %p10  %v = insertelement <8 x i8> poison, i8 %l, i32 011  ret <8 x i8> %v12}13 14define <16 x i8> @loadv16i8(ptr %p) {15; CHECK-LABEL: loadv16i8:16; CHECK:       // %bb.0:17; CHECK-NEXT:    ldr b0, [x0]18; CHECK-NEXT:    ret19  %l = load i8, ptr %p20  %v = insertelement <16 x i8> poison, i8 %l, i32 021  ret <16 x i8> %v22}23 24define <4 x i16> @loadv4i16(ptr %p) {25; CHECK-LABEL: loadv4i16:26; CHECK:       // %bb.0:27; CHECK-NEXT:    ldr h0, [x0]28; CHECK-NEXT:    ret29  %l = load i16, ptr %p30  %v = insertelement <4 x i16> poison, i16 %l, i32 031  ret <4 x i16> %v32}33 34define <8 x i16> @loadv8i16(ptr %p) {35; CHECK-LABEL: loadv8i16:36; CHECK:       // %bb.0:37; CHECK-NEXT:    ldr h0, [x0]38; CHECK-NEXT:    ret39  %l = load i16, ptr %p40  %v = insertelement <8 x i16> poison, i16 %l, i32 041  ret <8 x i16> %v42}43 44define <2 x i32> @loadv2i32(ptr %p) {45; CHECK-LABEL: loadv2i32:46; CHECK:       // %bb.0:47; CHECK-NEXT:    ldr s0, [x0]48; CHECK-NEXT:    ret49  %l = load i32, ptr %p50  %v = insertelement <2 x i32> poison, i32 %l, i32 051  ret <2 x i32> %v52}53 54define <4 x i32> @loadv4i32(ptr %p) {55; CHECK-LABEL: loadv4i32:56; CHECK:       // %bb.0:57; CHECK-NEXT:    ldr s0, [x0]58; CHECK-NEXT:    ret59  %l = load i32, ptr %p60  %v = insertelement <4 x i32> poison, i32 %l, i32 061  ret <4 x i32> %v62}63 64define <2 x i64> @loadv2i64(ptr %p) {65; CHECK-LABEL: loadv2i64:66; CHECK:       // %bb.0:67; CHECK-NEXT:    ldr d0, [x0]68; CHECK-NEXT:    ret69  %l = load i64, ptr %p70  %v = insertelement <2 x i64> poison, i64 %l, i32 071  ret <2 x i64> %v72}73 74 75define <4 x half> @loadv4f16(ptr %p) {76; CHECK-LABEL: loadv4f16:77; CHECK:       // %bb.0:78; CHECK-NEXT:    ldr h0, [x0]79; CHECK-NEXT:    ret80  %l = load half, ptr %p81  %v = insertelement <4 x half> poison, half %l, i32 082  ret <4 x half> %v83}84 85define <8 x half> @loadv8f16(ptr %p) {86; CHECK-LABEL: loadv8f16:87; CHECK:       // %bb.0:88; CHECK-NEXT:    ldr h0, [x0]89; CHECK-NEXT:    ret90  %l = load half, ptr %p91  %v = insertelement <8 x half> poison, half %l, i32 092  ret <8 x half> %v93}94 95define <4 x bfloat> @loadv4bf16(ptr %p) {96; CHECK-LABEL: loadv4bf16:97; CHECK:       // %bb.0:98; CHECK-NEXT:    ldr h0, [x0]99; CHECK-NEXT:    ret100  %l = load bfloat, ptr %p101  %v = insertelement <4 x bfloat> poison, bfloat %l, i32 0102  ret <4 x bfloat> %v103}104 105define <8 x bfloat> @loadv8bf16(ptr %p) {106; CHECK-LABEL: loadv8bf16:107; CHECK:       // %bb.0:108; CHECK-NEXT:    ldr h0, [x0]109; CHECK-NEXT:    ret110  %l = load bfloat, ptr %p111  %v = insertelement <8 x bfloat> poison, bfloat %l, i32 0112  ret <8 x bfloat> %v113}114 115define <2 x float> @loadv2f32(ptr %p) {116; CHECK-LABEL: loadv2f32:117; CHECK:       // %bb.0:118; CHECK-NEXT:    ldr s0, [x0]119; CHECK-NEXT:    ret120  %l = load float, ptr %p121  %v = insertelement <2 x float> poison, float %l, i32 0122  ret <2 x float> %v123}124 125define <4 x float> @loadv4f32(ptr %p) {126; CHECK-LABEL: loadv4f32:127; CHECK:       // %bb.0:128; CHECK-NEXT:    ldr s0, [x0]129; CHECK-NEXT:    ret130  %l = load float, ptr %p131  %v = insertelement <4 x float> poison, float %l, i32 0132  ret <4 x float> %v133}134 135define <2 x double> @loadv2f64(ptr %p) {136; CHECK-LABEL: loadv2f64:137; CHECK:       // %bb.0:138; CHECK-NEXT:    ldr d0, [x0]139; CHECK-NEXT:    ret140  %l = load double, ptr %p141  %v = insertelement <2 x double> poison, double %l, i32 0142  ret <2 x double> %v143}144 145 146; Unscaled147 148define <8 x i8> @loadv8i8_offset(ptr %p) {149; CHECK-LABEL: loadv8i8_offset:150; CHECK:       // %bb.0:151; CHECK-NEXT:    ldr b0, [x0, #1]152; CHECK-NEXT:    ret153  %g = getelementptr inbounds i8, ptr %p, i64 1154  %l = load i8, ptr %g155  %v = insertelement <8 x i8> poison, i8 %l, i32 0156  ret <8 x i8> %v157}158 159define <16 x i8> @loadv16i8_offset(ptr %p) {160; CHECK-LABEL: loadv16i8_offset:161; CHECK:       // %bb.0:162; CHECK-NEXT:    ldr b0, [x0, #1]163; CHECK-NEXT:    ret164  %g = getelementptr inbounds i8, ptr %p, i64 1165  %l = load i8, ptr %g166  %v = insertelement <16 x i8> poison, i8 %l, i32 0167  ret <16 x i8> %v168}169 170define <4 x i16> @loadv4i16_offset(ptr %p) {171; CHECK-LABEL: loadv4i16_offset:172; CHECK:       // %bb.0:173; CHECK-NEXT:    ldur h0, [x0, #1]174; CHECK-NEXT:    ret175  %g = getelementptr inbounds i8, ptr %p, i64 1176  %l = load i16, ptr %g177  %v = insertelement <4 x i16> poison, i16 %l, i32 0178  ret <4 x i16> %v179}180 181define <8 x i16> @loadv8i16_offset(ptr %p) {182; CHECK-LABEL: loadv8i16_offset:183; CHECK:       // %bb.0:184; CHECK-NEXT:    ldur h0, [x0, #1]185; CHECK-NEXT:    ret186  %g = getelementptr inbounds i8, ptr %p, i64 1187  %l = load i16, ptr %g188  %v = insertelement <8 x i16> poison, i16 %l, i32 0189  ret <8 x i16> %v190}191 192define <2 x i32> @loadv2i32_offset(ptr %p) {193; CHECK-LABEL: loadv2i32_offset:194; CHECK:       // %bb.0:195; CHECK-NEXT:    ldur s0, [x0, #1]196; CHECK-NEXT:    ret197  %g = getelementptr inbounds i8, ptr %p, i64 1198  %l = load i32, ptr %g199  %v = insertelement <2 x i32> poison, i32 %l, i32 0200  ret <2 x i32> %v201}202 203define <4 x i32> @loadv4i32_offset(ptr %p) {204; CHECK-LABEL: loadv4i32_offset:205; CHECK:       // %bb.0:206; CHECK-NEXT:    ldur s0, [x0, #1]207; CHECK-NEXT:    ret208  %g = getelementptr inbounds i8, ptr %p, i64 1209  %l = load i32, ptr %g210  %v = insertelement <4 x i32> poison, i32 %l, i32 0211  ret <4 x i32> %v212}213 214define <2 x i64> @loadv2i64_offset(ptr %p) {215; CHECK-LABEL: loadv2i64_offset:216; CHECK:       // %bb.0:217; CHECK-NEXT:    ldur d0, [x0, #1]218; CHECK-NEXT:    ret219  %g = getelementptr inbounds i8, ptr %p, i64 1220  %l = load i64, ptr %g221  %v = insertelement <2 x i64> poison, i64 %l, i32 0222  ret <2 x i64> %v223}224 225 226define <4 x half> @loadv4f16_offset(ptr %p) {227; CHECK-LABEL: loadv4f16_offset:228; CHECK:       // %bb.0:229; CHECK-NEXT:    ldur h0, [x0, #1]230; CHECK-NEXT:    ret231  %g = getelementptr inbounds i8, ptr %p, i64 1232  %l = load half, ptr %g233  %v = insertelement <4 x half> poison, half %l, i32 0234  ret <4 x half> %v235}236 237define <8 x half> @loadv8f16_offset(ptr %p) {238; CHECK-LABEL: loadv8f16_offset:239; CHECK:       // %bb.0:240; CHECK-NEXT:    ldur h0, [x0, #1]241; CHECK-NEXT:    ret242  %g = getelementptr inbounds i8, ptr %p, i64 1243  %l = load half, ptr %g244  %v = insertelement <8 x half> poison, half %l, i32 0245  ret <8 x half> %v246}247 248define <4 x bfloat> @loadv4bf16_offset(ptr %p) {249; CHECK-LABEL: loadv4bf16_offset:250; CHECK:       // %bb.0:251; CHECK-NEXT:    ldur h0, [x0, #1]252; CHECK-NEXT:    ret253  %g = getelementptr inbounds i8, ptr %p, i64 1254  %l = load bfloat, ptr %g255  %v = insertelement <4 x bfloat> poison, bfloat %l, i32 0256  ret <4 x bfloat> %v257}258 259define <8 x bfloat> @loadv8bf16_offset(ptr %p) {260; CHECK-LABEL: loadv8bf16_offset:261; CHECK:       // %bb.0:262; CHECK-NEXT:    ldur h0, [x0, #1]263; CHECK-NEXT:    ret264  %g = getelementptr inbounds i8, ptr %p, i64 1265  %l = load bfloat, ptr %g266  %v = insertelement <8 x bfloat> poison, bfloat %l, i32 0267  ret <8 x bfloat> %v268}269 270define <2 x float> @loadv2f32_offset(ptr %p) {271; CHECK-LABEL: loadv2f32_offset:272; CHECK:       // %bb.0:273; CHECK-NEXT:    ldur s0, [x0, #1]274; CHECK-NEXT:    ret275  %g = getelementptr inbounds i8, ptr %p, i64 1276  %l = load float, ptr %g277  %v = insertelement <2 x float> poison, float %l, i32 0278  ret <2 x float> %v279}280 281define <4 x float> @loadv4f32_offset(ptr %p) {282; CHECK-LABEL: loadv4f32_offset:283; CHECK:       // %bb.0:284; CHECK-NEXT:    ldur s0, [x0, #1]285; CHECK-NEXT:    ret286  %g = getelementptr inbounds i8, ptr %p, i64 1287  %l = load float, ptr %g288  %v = insertelement <4 x float> poison, float %l, i32 0289  ret <4 x float> %v290}291 292define <2 x double> @loadv2f64_offset(ptr %p) {293; CHECK-LABEL: loadv2f64_offset:294; CHECK:       // %bb.0:295; CHECK-NEXT:    ldur d0, [x0, #1]296; CHECK-NEXT:    ret297  %g = getelementptr inbounds i8, ptr %p, i64 1298  %l = load double, ptr %g299  %v = insertelement <2 x double> poison, double %l, i32 0300  ret <2 x double> %v301}302 303 304define <8 x i8> @loadv8i8_noffset(ptr %p) {305; CHECK-LABEL: loadv8i8_noffset:306; CHECK:       // %bb.0:307; CHECK-NEXT:    ldur b0, [x0, #-1]308; CHECK-NEXT:    ret309  %g = getelementptr inbounds i8, ptr %p, i64 -1310  %l = load i8, ptr %g311  %v = insertelement <8 x i8> poison, i8 %l, i32 0312  ret <8 x i8> %v313}314 315define <16 x i8> @loadv16i8_noffset(ptr %p) {316; CHECK-LABEL: loadv16i8_noffset:317; CHECK:       // %bb.0:318; CHECK-NEXT:    ldur b0, [x0, #-1]319; CHECK-NEXT:    ret320  %g = getelementptr inbounds i8, ptr %p, i64 -1321  %l = load i8, ptr %g322  %v = insertelement <16 x i8> poison, i8 %l, i32 0323  ret <16 x i8> %v324}325 326define <4 x i16> @loadv4i16_noffset(ptr %p) {327; CHECK-LABEL: loadv4i16_noffset:328; CHECK:       // %bb.0:329; CHECK-NEXT:    ldur h0, [x0, #-1]330; CHECK-NEXT:    ret331  %g = getelementptr inbounds i8, ptr %p, i64 -1332  %l = load i16, ptr %g333  %v = insertelement <4 x i16> poison, i16 %l, i32 0334  ret <4 x i16> %v335}336 337define <8 x i16> @loadv8i16_noffset(ptr %p) {338; CHECK-LABEL: loadv8i16_noffset:339; CHECK:       // %bb.0:340; CHECK-NEXT:    ldur h0, [x0, #-1]341; CHECK-NEXT:    ret342  %g = getelementptr inbounds i8, ptr %p, i64 -1343  %l = load i16, ptr %g344  %v = insertelement <8 x i16> poison, i16 %l, i32 0345  ret <8 x i16> %v346}347 348define <2 x i32> @loadv2i32_noffset(ptr %p) {349; CHECK-LABEL: loadv2i32_noffset:350; CHECK:       // %bb.0:351; CHECK-NEXT:    ldur s0, [x0, #-1]352; CHECK-NEXT:    ret353  %g = getelementptr inbounds i8, ptr %p, i64 -1354  %l = load i32, ptr %g355  %v = insertelement <2 x i32> poison, i32 %l, i32 0356  ret <2 x i32> %v357}358 359define <4 x i32> @loadv4i32_noffset(ptr %p) {360; CHECK-LABEL: loadv4i32_noffset:361; CHECK:       // %bb.0:362; CHECK-NEXT:    ldur s0, [x0, #-1]363; CHECK-NEXT:    ret364  %g = getelementptr inbounds i8, ptr %p, i64 -1365  %l = load i32, ptr %g366  %v = insertelement <4 x i32> poison, i32 %l, i32 0367  ret <4 x i32> %v368}369 370define <2 x i64> @loadv2i64_noffset(ptr %p) {371; CHECK-LABEL: loadv2i64_noffset:372; CHECK:       // %bb.0:373; CHECK-NEXT:    ldur d0, [x0, #-1]374; CHECK-NEXT:    ret375  %g = getelementptr inbounds i8, ptr %p, i64 -1376  %l = load i64, ptr %g377  %v = insertelement <2 x i64> poison, i64 %l, i32 0378  ret <2 x i64> %v379}380 381 382define <4 x half> @loadv4f16_noffset(ptr %p) {383; CHECK-LABEL: loadv4f16_noffset:384; CHECK:       // %bb.0:385; CHECK-NEXT:    ldur h0, [x0, #-1]386; CHECK-NEXT:    ret387  %g = getelementptr inbounds i8, ptr %p, i64 -1388  %l = load half, ptr %g389  %v = insertelement <4 x half> poison, half %l, i32 0390  ret <4 x half> %v391}392 393define <8 x half> @loadv8f16_noffset(ptr %p) {394; CHECK-LABEL: loadv8f16_noffset:395; CHECK:       // %bb.0:396; CHECK-NEXT:    ldur h0, [x0, #-1]397; CHECK-NEXT:    ret398  %g = getelementptr inbounds i8, ptr %p, i64 -1399  %l = load half, ptr %g400  %v = insertelement <8 x half> poison, half %l, i32 0401  ret <8 x half> %v402}403 404define <4 x bfloat> @loadv4bf16_noffset(ptr %p) {405; CHECK-LABEL: loadv4bf16_noffset:406; CHECK:       // %bb.0:407; CHECK-NEXT:    ldur h0, [x0, #-1]408; CHECK-NEXT:    ret409  %g = getelementptr inbounds i8, ptr %p, i64 -1410  %l = load bfloat, ptr %g411  %v = insertelement <4 x bfloat> poison, bfloat %l, i32 0412  ret <4 x bfloat> %v413}414 415define <8 x bfloat> @loadv8bf16_noffset(ptr %p) {416; CHECK-LABEL: loadv8bf16_noffset:417; CHECK:       // %bb.0:418; CHECK-NEXT:    ldur h0, [x0, #-1]419; CHECK-NEXT:    ret420  %g = getelementptr inbounds i8, ptr %p, i64 -1421  %l = load bfloat, ptr %g422  %v = insertelement <8 x bfloat> poison, bfloat %l, i32 0423  ret <8 x bfloat> %v424}425 426define <2 x float> @loadv2f32_noffset(ptr %p) {427; CHECK-LABEL: loadv2f32_noffset:428; CHECK:       // %bb.0:429; CHECK-NEXT:    ldur s0, [x0, #-1]430; CHECK-NEXT:    ret431  %g = getelementptr inbounds i8, ptr %p, i64 -1432  %l = load float, ptr %g433  %v = insertelement <2 x float> poison, float %l, i32 0434  ret <2 x float> %v435}436 437define <4 x float> @loadv4f32_noffset(ptr %p) {438; CHECK-LABEL: loadv4f32_noffset:439; CHECK:       // %bb.0:440; CHECK-NEXT:    ldur s0, [x0, #-1]441; CHECK-NEXT:    ret442  %g = getelementptr inbounds i8, ptr %p, i64 -1443  %l = load float, ptr %g444  %v = insertelement <4 x float> poison, float %l, i32 0445  ret <4 x float> %v446}447 448define <2 x double> @loadv2f64_noffset(ptr %p) {449; CHECK-LABEL: loadv2f64_noffset:450; CHECK:       // %bb.0:451; CHECK-NEXT:    ldur d0, [x0, #-1]452; CHECK-NEXT:    ret453  %g = getelementptr inbounds i8, ptr %p, i64 -1454  %l = load double, ptr %g455  %v = insertelement <2 x double> poison, double %l, i32 0456  ret <2 x double> %v457}458 459 460; ROW addressing modes461 462define <8 x i8> @loadv8i8_roW(ptr %p, i32 %o) {463; CHECK-LABEL: loadv8i8_roW:464; CHECK:       // %bb.0:465; CHECK-NEXT:    ldr b0, [x0, w1, sxtw]466; CHECK-NEXT:    ret467  %g = getelementptr inbounds i8, ptr %p, i32 %o468  %l = load i8, ptr %g469  %v = insertelement <8 x i8> poison, i8 %l, i32 0470  ret <8 x i8> %v471}472 473define <16 x i8> @loadv16i8_roW(ptr %p, i32 %o) {474; CHECK-LABEL: loadv16i8_roW:475; CHECK:       // %bb.0:476; CHECK-NEXT:    ldr b0, [x0, w1, sxtw]477; CHECK-NEXT:    ret478  %g = getelementptr inbounds i8, ptr %p, i32 %o479  %l = load i8, ptr %g480  %v = insertelement <16 x i8> poison, i8 %l, i32 0481  ret <16 x i8> %v482}483 484define <4 x i16> @loadv4i16_roW(ptr %p, i32 %o) {485; CHECK-LABEL: loadv4i16_roW:486; CHECK:       // %bb.0:487; CHECK-NEXT:    ldr h0, [x0, w1, sxtw #1]488; CHECK-NEXT:    ret489  %g = getelementptr inbounds i16, ptr %p, i32 %o490  %l = load i16, ptr %g491  %v = insertelement <4 x i16> poison, i16 %l, i32 0492  ret <4 x i16> %v493}494 495define <8 x i16> @loadv8i16_roW(ptr %p, i32 %o) {496; CHECK-LABEL: loadv8i16_roW:497; CHECK:       // %bb.0:498; CHECK-NEXT:    ldr h0, [x0, w1, sxtw #1]499; CHECK-NEXT:    ret500  %g = getelementptr inbounds i16, ptr %p, i32 %o501  %l = load i16, ptr %g502  %v = insertelement <8 x i16> poison, i16 %l, i32 0503  ret <8 x i16> %v504}505 506define <2 x i32> @loadv2i32_roW(ptr %p, i32 %o) {507; CHECK-LABEL: loadv2i32_roW:508; CHECK:       // %bb.0:509; CHECK-NEXT:    ldr s0, [x0, w1, sxtw #2]510; CHECK-NEXT:    ret511  %g = getelementptr inbounds i32, ptr %p, i32 %o512  %l = load i32, ptr %g513  %v = insertelement <2 x i32> poison, i32 %l, i32 0514  ret <2 x i32> %v515}516 517define <4 x i32> @loadv4i32_roW(ptr %p, i32 %o) {518; CHECK-LABEL: loadv4i32_roW:519; CHECK:       // %bb.0:520; CHECK-NEXT:    ldr s0, [x0, w1, sxtw #2]521; CHECK-NEXT:    ret522  %g = getelementptr inbounds i32, ptr %p, i32 %o523  %l = load i32, ptr %g524  %v = insertelement <4 x i32> poison, i32 %l, i32 0525  ret <4 x i32> %v526}527 528define <2 x i64> @loadv2i64_roW(ptr %p, i32 %o) {529; CHECK-LABEL: loadv2i64_roW:530; CHECK:       // %bb.0:531; CHECK-NEXT:    ldr d0, [x0, w1, sxtw #3]532; CHECK-NEXT:    ret533  %g = getelementptr inbounds i64, ptr %p, i32 %o534  %l = load i64, ptr %g535  %v = insertelement <2 x i64> poison, i64 %l, i32 0536  ret <2 x i64> %v537}538 539define <4 x half> @loadv4f16_roW(ptr %p, i32 %o) {540; CHECK-LABEL: loadv4f16_roW:541; CHECK:       // %bb.0:542; CHECK-NEXT:    ldr h0, [x0, w1, sxtw #1]543; CHECK-NEXT:    ret544  %g = getelementptr inbounds half, ptr %p, i32 %o545  %l = load half, ptr %g546  %v = insertelement <4 x half> poison, half %l, i32 0547  ret <4 x half> %v548}549 550define <8 x half> @loadv8f16_roW(ptr %p, i32 %o) {551; CHECK-LABEL: loadv8f16_roW:552; CHECK:       // %bb.0:553; CHECK-NEXT:    ldr h0, [x0, w1, sxtw #1]554; CHECK-NEXT:    ret555  %g = getelementptr inbounds half, ptr %p, i32 %o556  %l = load half, ptr %g557  %v = insertelement <8 x half> poison, half %l, i32 0558  ret <8 x half> %v559}560 561define <4 x bfloat> @loadv4bf16_roW(ptr %p, i32 %o) {562; CHECK-LABEL: loadv4bf16_roW:563; CHECK:       // %bb.0:564; CHECK-NEXT:    ldr h0, [x0, w1, sxtw #1]565; CHECK-NEXT:    ret566  %g = getelementptr inbounds bfloat, ptr %p, i32 %o567  %l = load bfloat, ptr %g568  %v = insertelement <4 x bfloat> poison, bfloat %l, i32 0569  ret <4 x bfloat> %v570}571 572define <8 x bfloat> @loadv8bf16_roW(ptr %p, i32 %o) {573; CHECK-LABEL: loadv8bf16_roW:574; CHECK:       // %bb.0:575; CHECK-NEXT:    ldr h0, [x0, w1, sxtw #1]576; CHECK-NEXT:    ret577  %g = getelementptr inbounds bfloat, ptr %p, i32 %o578  %l = load bfloat, ptr %g579  %v = insertelement <8 x bfloat> poison, bfloat %l, i32 0580  ret <8 x bfloat> %v581}582 583define <2 x float> @loadv2f32_roW(ptr %p, i32 %o) {584; CHECK-LABEL: loadv2f32_roW:585; CHECK:       // %bb.0:586; CHECK-NEXT:    ldr s0, [x0, w1, sxtw #2]587; CHECK-NEXT:    ret588  %g = getelementptr inbounds float, ptr %p, i32 %o589  %l = load float, ptr %g590  %v = insertelement <2 x float> poison, float %l, i32 0591  ret <2 x float> %v592}593 594define <4 x float> @loadv4f32_roW(ptr %p, i32 %o) {595; CHECK-LABEL: loadv4f32_roW:596; CHECK:       // %bb.0:597; CHECK-NEXT:    ldr s0, [x0, w1, sxtw #2]598; CHECK-NEXT:    ret599  %g = getelementptr inbounds float, ptr %p, i32 %o600  %l = load float, ptr %g601  %v = insertelement <4 x float> poison, float %l, i32 0602  ret <4 x float> %v603}604 605define <2 x double> @loadv2f64_roW(ptr %p, i32 %o) {606; CHECK-LABEL: loadv2f64_roW:607; CHECK:       // %bb.0:608; CHECK-NEXT:    ldr d0, [x0, w1, sxtw #3]609; CHECK-NEXT:    ret610  %g = getelementptr inbounds double, ptr %p, i32 %o611  %l = load double, ptr %g612  %v = insertelement <2 x double> poison, double %l, i32 0613  ret <2 x double> %v614}615 616; roX617 618define <8 x i8> @loadv8i8_roX(ptr %p, i64 %o) {619; CHECK-LABEL: loadv8i8_roX:620; CHECK:       // %bb.0:621; CHECK-NEXT:    ldr b0, [x0, x1]622; CHECK-NEXT:    ret623  %g = getelementptr inbounds i8, ptr %p, i64 %o624  %l = load i8, ptr %g625  %v = insertelement <8 x i8> poison, i8 %l, i32 0626  ret <8 x i8> %v627}628 629define <16 x i8> @loadv16i8_roX(ptr %p, i64 %o) {630; CHECK-LABEL: loadv16i8_roX:631; CHECK:       // %bb.0:632; CHECK-NEXT:    ldr b0, [x0, x1]633; CHECK-NEXT:    ret634  %g = getelementptr inbounds i8, ptr %p, i64 %o635  %l = load i8, ptr %g636  %v = insertelement <16 x i8> poison, i8 %l, i32 0637  ret <16 x i8> %v638}639 640define <4 x i16> @loadv4i16_roX(ptr %p, i64 %o) {641; CHECK-LABEL: loadv4i16_roX:642; CHECK:       // %bb.0:643; CHECK-NEXT:    ldr h0, [x0, x1, lsl #1]644; CHECK-NEXT:    ret645  %g = getelementptr inbounds i16, ptr %p, i64 %o646  %l = load i16, ptr %g647  %v = insertelement <4 x i16> poison, i16 %l, i32 0648  ret <4 x i16> %v649}650 651define <8 x i16> @loadv8i16_roX(ptr %p, i64 %o) {652; CHECK-LABEL: loadv8i16_roX:653; CHECK:       // %bb.0:654; CHECK-NEXT:    ldr h0, [x0, x1, lsl #1]655; CHECK-NEXT:    ret656  %g = getelementptr inbounds i16, ptr %p, i64 %o657  %l = load i16, ptr %g658  %v = insertelement <8 x i16> poison, i16 %l, i32 0659  ret <8 x i16> %v660}661 662define <2 x i32> @loadv2i32_roX(ptr %p, i64 %o) {663; CHECK-LABEL: loadv2i32_roX:664; CHECK:       // %bb.0:665; CHECK-NEXT:    ldr s0, [x0, x1, lsl #2]666; CHECK-NEXT:    ret667  %g = getelementptr inbounds i32, ptr %p, i64 %o668  %l = load i32, ptr %g669  %v = insertelement <2 x i32> poison, i32 %l, i32 0670  ret <2 x i32> %v671}672 673define <4 x i32> @loadv4i32_roX(ptr %p, i64 %o) {674; CHECK-LABEL: loadv4i32_roX:675; CHECK:       // %bb.0:676; CHECK-NEXT:    ldr s0, [x0, x1, lsl #2]677; CHECK-NEXT:    ret678  %g = getelementptr inbounds i32, ptr %p, i64 %o679  %l = load i32, ptr %g680  %v = insertelement <4 x i32> poison, i32 %l, i32 0681  ret <4 x i32> %v682}683 684define <2 x i64> @loadv2i64_roX(ptr %p, i64 %o) {685; CHECK-LABEL: loadv2i64_roX:686; CHECK:       // %bb.0:687; CHECK-NEXT:    ldr d0, [x0, x1, lsl #3]688; CHECK-NEXT:    ret689  %g = getelementptr inbounds i64, ptr %p, i64 %o690  %l = load i64, ptr %g691  %v = insertelement <2 x i64> poison, i64 %l, i32 0692  ret <2 x i64> %v693}694 695define <4 x half> @loadv4f16_roX(ptr %p, i64 %o) {696; CHECK-LABEL: loadv4f16_roX:697; CHECK:       // %bb.0:698; CHECK-NEXT:    ldr h0, [x0, x1, lsl #1]699; CHECK-NEXT:    ret700  %g = getelementptr inbounds half, ptr %p, i64 %o701  %l = load half, ptr %g702  %v = insertelement <4 x half> poison, half %l, i32 0703  ret <4 x half> %v704}705 706define <8 x half> @loadv8f16_roX(ptr %p, i64 %o) {707; CHECK-LABEL: loadv8f16_roX:708; CHECK:       // %bb.0:709; CHECK-NEXT:    ldr h0, [x0, x1, lsl #1]710; CHECK-NEXT:    ret711  %g = getelementptr inbounds half, ptr %p, i64 %o712  %l = load half, ptr %g713  %v = insertelement <8 x half> poison, half %l, i32 0714  ret <8 x half> %v715}716 717define <4 x bfloat> @loadv4bf16_roX(ptr %p, i64 %o) {718; CHECK-LABEL: loadv4bf16_roX:719; CHECK:       // %bb.0:720; CHECK-NEXT:    ldr h0, [x0, x1, lsl #1]721; CHECK-NEXT:    ret722  %g = getelementptr inbounds bfloat, ptr %p, i64 %o723  %l = load bfloat, ptr %g724  %v = insertelement <4 x bfloat> poison, bfloat %l, i32 0725  ret <4 x bfloat> %v726}727 728define <8 x bfloat> @loadv8bf16_roX(ptr %p, i64 %o) {729; CHECK-LABEL: loadv8bf16_roX:730; CHECK:       // %bb.0:731; CHECK-NEXT:    ldr h0, [x0, x1, lsl #1]732; CHECK-NEXT:    ret733  %g = getelementptr inbounds bfloat, ptr %p, i64 %o734  %l = load bfloat, ptr %g735  %v = insertelement <8 x bfloat> poison, bfloat %l, i32 0736  ret <8 x bfloat> %v737}738 739define <2 x float> @loadv2f32_roX(ptr %p, i64 %o) {740; CHECK-LABEL: loadv2f32_roX:741; CHECK:       // %bb.0:742; CHECK-NEXT:    ldr s0, [x0, x1, lsl #2]743; CHECK-NEXT:    ret744  %g = getelementptr inbounds float, ptr %p, i64 %o745  %l = load float, ptr %g746  %v = insertelement <2 x float> poison, float %l, i32 0747  ret <2 x float> %v748}749 750define <4 x float> @loadv4f32_roX(ptr %p, i64 %o) {751; CHECK-LABEL: loadv4f32_roX:752; CHECK:       // %bb.0:753; CHECK-NEXT:    ldr s0, [x0, x1, lsl #2]754; CHECK-NEXT:    ret755  %g = getelementptr inbounds float, ptr %p, i64 %o756  %l = load float, ptr %g757  %v = insertelement <4 x float> poison, float %l, i32 0758  ret <4 x float> %v759}760 761define <2 x double> @loadv2f64_roX(ptr %p, i64 %o) {762; CHECK-LABEL: loadv2f64_roX:763; CHECK:       // %bb.0:764; CHECK-NEXT:    ldr d0, [x0, x1, lsl #3]765; CHECK-NEXT:    ret766  %g = getelementptr inbounds double, ptr %p, i64 %o767  %l = load double, ptr %g768  %v = insertelement <2 x double> poison, double %l, i32 0769  ret <2 x double> %v770}771 772 773; SVE774 775define <vscale x 8 x i8> @loadnxv8i8(ptr %p) {776; CHECK-LABEL: loadnxv8i8:777; CHECK:       // %bb.0:778; CHECK-NEXT:    ldrb w8, [x0]779; CHECK-NEXT:    fmov s0, w8780; CHECK-NEXT:    ret781  %l = load i8, ptr %p782  %v = insertelement <vscale x 8 x i8> poison, i8 %l, i32 0783  ret <vscale x 8 x i8> %v784}785 786define <vscale x 16 x i8> @loadnxv16i8(ptr %p) {787; CHECK-LABEL: loadnxv16i8:788; CHECK:       // %bb.0:789; CHECK-NEXT:    ldr b0, [x0]790; CHECK-NEXT:    ret791  %l = load i8, ptr %p792  %v = insertelement <vscale x 16 x i8> poison, i8 %l, i32 0793  ret <vscale x 16 x i8> %v794}795 796define <vscale x 4 x i16> @loadnxv4i16(ptr %p) {797; CHECK-LABEL: loadnxv4i16:798; CHECK:       // %bb.0:799; CHECK-NEXT:    ldrh w8, [x0]800; CHECK-NEXT:    fmov s0, w8801; CHECK-NEXT:    ret802  %l = load i16, ptr %p803  %v = insertelement <vscale x 4 x i16> poison, i16 %l, i32 0804  ret <vscale x 4 x i16> %v805}806 807define <vscale x 8 x i16> @loadnxv8i16(ptr %p) {808; CHECK-LABEL: loadnxv8i16:809; CHECK:       // %bb.0:810; CHECK-NEXT:    ldr h0, [x0]811; CHECK-NEXT:    ret812  %l = load i16, ptr %p813  %v = insertelement <vscale x 8 x i16> poison, i16 %l, i32 0814  ret <vscale x 8 x i16> %v815}816 817define <vscale x 2 x i32> @loadnxv2i32(ptr %p) {818; CHECK-LABEL: loadnxv2i32:819; CHECK:       // %bb.0:820; CHECK-NEXT:    ldr w8, [x0]821; CHECK-NEXT:    fmov d0, x8822; CHECK-NEXT:    ret823  %l = load i32, ptr %p824  %v = insertelement <vscale x 2 x i32> poison, i32 %l, i32 0825  ret <vscale x 2 x i32> %v826}827 828define <vscale x 4 x i32> @loadnxv4i32(ptr %p) {829; CHECK-LABEL: loadnxv4i32:830; CHECK:       // %bb.0:831; CHECK-NEXT:    ldr s0, [x0]832; CHECK-NEXT:    ret833  %l = load i32, ptr %p834  %v = insertelement <vscale x 4 x i32> poison, i32 %l, i32 0835  ret <vscale x 4 x i32> %v836}837 838define <vscale x 2 x i64> @loadnxv2i64(ptr %p) {839; CHECK-LABEL: loadnxv2i64:840; CHECK:       // %bb.0:841; CHECK-NEXT:    ldr d0, [x0]842; CHECK-NEXT:    ret843  %l = load i64, ptr %p844  %v = insertelement <vscale x 2 x i64> poison, i64 %l, i32 0845  ret <vscale x 2 x i64> %v846}847 848 849define <vscale x 4 x half> @loadnxv4f16(ptr %p) {850; CHECK-LABEL: loadnxv4f16:851; CHECK:       // %bb.0:852; CHECK-NEXT:    ldr h0, [x0]853; CHECK-NEXT:    ret854  %l = load half, ptr %p855  %v = insertelement <vscale x 4 x half> poison, half %l, i32 0856  ret <vscale x 4 x half> %v857}858 859define <vscale x 8 x half> @loadnxv8f16(ptr %p) {860; CHECK-LABEL: loadnxv8f16:861; CHECK:       // %bb.0:862; CHECK-NEXT:    ldr h0, [x0]863; CHECK-NEXT:    ret864  %l = load half, ptr %p865  %v = insertelement <vscale x 8 x half> poison, half %l, i32 0866  ret <vscale x 8 x half> %v867}868 869define <vscale x 4 x bfloat> @loadnxv4bf16(ptr %p) {870; CHECK-LABEL: loadnxv4bf16:871; CHECK:       // %bb.0:872; CHECK-NEXT:    ldr h0, [x0]873; CHECK-NEXT:    ret874  %l = load bfloat, ptr %p875  %v = insertelement <vscale x 4 x bfloat> poison, bfloat %l, i32 0876  ret <vscale x 4 x bfloat> %v877}878 879define <vscale x 8 x bfloat> @loadnxv8bf16(ptr %p) {880; CHECK-LABEL: loadnxv8bf16:881; CHECK:       // %bb.0:882; CHECK-NEXT:    ldr h0, [x0]883; CHECK-NEXT:    ret884  %l = load bfloat, ptr %p885  %v = insertelement <vscale x 8 x bfloat> poison, bfloat %l, i32 0886  ret <vscale x 8 x bfloat> %v887}888 889define <vscale x 2 x float> @loadnxv2f32(ptr %p) {890; CHECK-LABEL: loadnxv2f32:891; CHECK:       // %bb.0:892; CHECK-NEXT:    ldr s0, [x0]893; CHECK-NEXT:    ret894  %l = load float, ptr %p895  %v = insertelement <vscale x 2 x float> poison, float %l, i32 0896  ret <vscale x 2 x float> %v897}898 899define <vscale x 4 x float> @loadnxv4f32(ptr %p) {900; CHECK-LABEL: loadnxv4f32:901; CHECK:       // %bb.0:902; CHECK-NEXT:    ldr s0, [x0]903; CHECK-NEXT:    ret904  %l = load float, ptr %p905  %v = insertelement <vscale x 4 x float> poison, float %l, i32 0906  ret <vscale x 4 x float> %v907}908 909define <vscale x 2 x double> @loadnxv2f64(ptr %p) {910; CHECK-LABEL: loadnxv2f64:911; CHECK:       // %bb.0:912; CHECK-NEXT:    ldr d0, [x0]913; CHECK-NEXT:    ret914  %l = load double, ptr %p915  %v = insertelement <vscale x 2 x double> poison, double %l, i32 0916  ret <vscale x 2 x double> %v917}918 919 920; Unscaled921 922define <vscale x 8 x i8> @loadnxv8i8_offset(ptr %p) {923; CHECK-LABEL: loadnxv8i8_offset:924; CHECK:       // %bb.0:925; CHECK-NEXT:    ldrb w8, [x0, #1]926; CHECK-NEXT:    fmov s0, w8927; CHECK-NEXT:    ret928  %g = getelementptr inbounds i8, ptr %p, i64 1929  %l = load i8, ptr %g930  %v = insertelement <vscale x 8 x i8> poison, i8 %l, i32 0931  ret <vscale x 8 x i8> %v932}933 934define <vscale x 16 x i8> @loadnxv16i8_offset(ptr %p) {935; CHECK-LABEL: loadnxv16i8_offset:936; CHECK:       // %bb.0:937; CHECK-NEXT:    ldr b0, [x0, #1]938; CHECK-NEXT:    ret939  %g = getelementptr inbounds i8, ptr %p, i64 1940  %l = load i8, ptr %g941  %v = insertelement <vscale x 16 x i8> poison, i8 %l, i32 0942  ret <vscale x 16 x i8> %v943}944 945define <vscale x 4 x i16> @loadnxv4i16_offset(ptr %p) {946; CHECK-LABEL: loadnxv4i16_offset:947; CHECK:       // %bb.0:948; CHECK-NEXT:    ldurh w8, [x0, #1]949; CHECK-NEXT:    fmov s0, w8950; CHECK-NEXT:    ret951  %g = getelementptr inbounds i8, ptr %p, i64 1952  %l = load i16, ptr %g953  %v = insertelement <vscale x 4 x i16> poison, i16 %l, i32 0954  ret <vscale x 4 x i16> %v955}956 957define <vscale x 8 x i16> @loadnxv8i16_offset(ptr %p) {958; CHECK-LABEL: loadnxv8i16_offset:959; CHECK:       // %bb.0:960; CHECK-NEXT:    ldur h0, [x0, #1]961; CHECK-NEXT:    ret962  %g = getelementptr inbounds i8, ptr %p, i64 1963  %l = load i16, ptr %g964  %v = insertelement <vscale x 8 x i16> poison, i16 %l, i32 0965  ret <vscale x 8 x i16> %v966}967 968define <vscale x 2 x i32> @loadnxv2i32_offset(ptr %p) {969; CHECK-LABEL: loadnxv2i32_offset:970; CHECK:       // %bb.0:971; CHECK-NEXT:    ldur w8, [x0, #1]972; CHECK-NEXT:    fmov d0, x8973; CHECK-NEXT:    ret974  %g = getelementptr inbounds i8, ptr %p, i64 1975  %l = load i32, ptr %g976  %v = insertelement <vscale x 2 x i32> poison, i32 %l, i32 0977  ret <vscale x 2 x i32> %v978}979 980define <vscale x 4 x i32> @loadnxv4i32_offset(ptr %p) {981; CHECK-LABEL: loadnxv4i32_offset:982; CHECK:       // %bb.0:983; CHECK-NEXT:    ldur s0, [x0, #1]984; CHECK-NEXT:    ret985  %g = getelementptr inbounds i8, ptr %p, i64 1986  %l = load i32, ptr %g987  %v = insertelement <vscale x 4 x i32> poison, i32 %l, i32 0988  ret <vscale x 4 x i32> %v989}990 991define <vscale x 2 x i64> @loadnxv2i64_offset(ptr %p) {992; CHECK-LABEL: loadnxv2i64_offset:993; CHECK:       // %bb.0:994; CHECK-NEXT:    ldur d0, [x0, #1]995; CHECK-NEXT:    ret996  %g = getelementptr inbounds i8, ptr %p, i64 1997  %l = load i64, ptr %g998  %v = insertelement <vscale x 2 x i64> poison, i64 %l, i32 0999  ret <vscale x 2 x i64> %v1000}1001 1002 1003define <vscale x 4 x half> @loadnxv4f16_offset(ptr %p) {1004; CHECK-LABEL: loadnxv4f16_offset:1005; CHECK:       // %bb.0:1006; CHECK-NEXT:    ldur h0, [x0, #1]1007; CHECK-NEXT:    ret1008  %g = getelementptr inbounds i8, ptr %p, i64 11009  %l = load half, ptr %g1010  %v = insertelement <vscale x 4 x half> poison, half %l, i32 01011  ret <vscale x 4 x half> %v1012}1013 1014define <vscale x 8 x half> @loadnxv8f16_offset(ptr %p) {1015; CHECK-LABEL: loadnxv8f16_offset:1016; CHECK:       // %bb.0:1017; CHECK-NEXT:    ldur h0, [x0, #1]1018; CHECK-NEXT:    ret1019  %g = getelementptr inbounds i8, ptr %p, i64 11020  %l = load half, ptr %g1021  %v = insertelement <vscale x 8 x half> poison, half %l, i32 01022  ret <vscale x 8 x half> %v1023}1024 1025define <vscale x 4 x bfloat> @loadnxv4bf16_offset(ptr %p) {1026; CHECK-LABEL: loadnxv4bf16_offset:1027; CHECK:       // %bb.0:1028; CHECK-NEXT:    ldur h0, [x0, #1]1029; CHECK-NEXT:    ret1030  %g = getelementptr inbounds i8, ptr %p, i64 11031  %l = load bfloat, ptr %g1032  %v = insertelement <vscale x 4 x bfloat> poison, bfloat %l, i32 01033  ret <vscale x 4 x bfloat> %v1034}1035 1036define <vscale x 8 x bfloat> @loadnxv8bf16_offset(ptr %p) {1037; CHECK-LABEL: loadnxv8bf16_offset:1038; CHECK:       // %bb.0:1039; CHECK-NEXT:    ldur h0, [x0, #1]1040; CHECK-NEXT:    ret1041  %g = getelementptr inbounds i8, ptr %p, i64 11042  %l = load bfloat, ptr %g1043  %v = insertelement <vscale x 8 x bfloat> poison, bfloat %l, i32 01044  ret <vscale x 8 x bfloat> %v1045}1046 1047define <vscale x 2 x float> @loadnxv2f32_offset(ptr %p) {1048; CHECK-LABEL: loadnxv2f32_offset:1049; CHECK:       // %bb.0:1050; CHECK-NEXT:    ldur s0, [x0, #1]1051; CHECK-NEXT:    ret1052  %g = getelementptr inbounds i8, ptr %p, i64 11053  %l = load float, ptr %g1054  %v = insertelement <vscale x 2 x float> poison, float %l, i32 01055  ret <vscale x 2 x float> %v1056}1057 1058define <vscale x 4 x float> @loadnxv4f32_offset(ptr %p) {1059; CHECK-LABEL: loadnxv4f32_offset:1060; CHECK:       // %bb.0:1061; CHECK-NEXT:    ldur s0, [x0, #1]1062; CHECK-NEXT:    ret1063  %g = getelementptr inbounds i8, ptr %p, i64 11064  %l = load float, ptr %g1065  %v = insertelement <vscale x 4 x float> poison, float %l, i32 01066  ret <vscale x 4 x float> %v1067}1068 1069define <vscale x 2 x double> @loadnxv2f64_offset(ptr %p) {1070; CHECK-LABEL: loadnxv2f64_offset:1071; CHECK:       // %bb.0:1072; CHECK-NEXT:    ldur d0, [x0, #1]1073; CHECK-NEXT:    ret1074  %g = getelementptr inbounds i8, ptr %p, i64 11075  %l = load double, ptr %g1076  %v = insertelement <vscale x 2 x double> poison, double %l, i32 01077  ret <vscale x 2 x double> %v1078}1079