brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.6 KiB · 60f5a60 Raw
428 lines · plain
1; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+sve -mattr=+bf16 < %s | FileCheck %s2 3; This file checks that unpredicated load/store instructions to locals4; use the right instructions and offsets.5 6; Data fills7 8define void @fill_nxv16i8() {9; CHECK-LABEL: fill_nxv16i810; CHECK-DAG: ldr    z{{[01]}}, [sp]11; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]12  %local0 = alloca <vscale x 16 x i8>13  %local1 = alloca <vscale x 16 x i8>14  load volatile <vscale x 16 x i8>, ptr %local015  load volatile <vscale x 16 x i8>, ptr %local116  ret void17}18 19define void @fill_nxv8i8() {20; CHECK-LABEL: fill_nxv8i821; CHECK-DAG: ld1b    { z{{[01]}}.h }, p0/z, [sp]22; CHECK-DAG: ld1b    { z{{[01]}}.h }, p0/z, [sp, #1, mul vl]23  %local0 = alloca <vscale x 8 x i8>24  %local1 = alloca <vscale x 8 x i8>25  load volatile <vscale x 8 x i8>, ptr %local026  load volatile <vscale x 8 x i8>, ptr %local127  ret void28}29 30define <vscale x 8 x i16> @fill_signed_nxv8i8() {31; CHECK-LABEL: fill_signed_nxv8i832; CHECK-DAG: ld1sb    { z{{[01]}}.h }, p0/z, [sp]33; CHECK-DAG: ld1sb    { z{{[01]}}.h }, p0/z, [sp, #1, mul vl]34  %local0 = alloca <vscale x 8 x i8>35  %local1 = alloca <vscale x 8 x i8>36  %a = load volatile <vscale x 8 x i8>, ptr %local037  %a_ext = sext <vscale x 8 x i8> %a to <vscale x 8 x i16>38  %b = load volatile <vscale x 8 x i8>, ptr %local139  %b_ext = sext <vscale x 8 x i8> %b to <vscale x 8 x i16>40  %sum = add <vscale x 8 x i16> %a_ext, %b_ext41  ret <vscale x 8 x i16> %sum42}43 44define void @fill_nxv4i8() {45; CHECK-LABEL: fill_nxv4i846; CHECK-DAG: ld1b    { z{{[01]}}.s }, p0/z, [sp, #3, mul vl]47; CHECK-DAG: ld1b    { z{{[01]}}.s }, p0/z, [sp, #2, mul vl]48  %local0 = alloca <vscale x 4 x i8>49  %local1 = alloca <vscale x 4 x i8>50  load volatile <vscale x 4 x i8>, ptr %local051  load volatile <vscale x 4 x i8>, ptr %local152  ret void53}54 55define <vscale x 4 x i32> @fill_signed_nxv4i8() {56; CHECK-LABEL: fill_signed_nxv4i857; CHECK-DAG: ld1sb    { z{{[01]}}.s }, p0/z, [sp, #3, mul vl]58; CHECK-DAG: ld1sb    { z{{[01]}}.s }, p0/z, [sp, #2, mul vl]59  %local0 = alloca <vscale x 4 x i8>60  %local1 = alloca <vscale x 4 x i8>61  %a = load volatile <vscale x 4 x i8>, ptr %local062  %a_ext = sext <vscale x 4 x i8> %a to <vscale x 4 x i32>63  %b = load volatile <vscale x 4 x i8>, ptr %local164  %b_ext = sext <vscale x 4 x i8> %b to <vscale x 4 x i32>65  %sum = add <vscale x 4 x i32> %a_ext, %b_ext66  ret <vscale x 4 x i32> %sum67}68 69define void @fill_nxv2i8() {70; CHECK-LABEL: fill_nxv2i871; CHECK-DAG: ld1b    { z{{[01]}}.d }, p0/z, [sp, #7, mul vl]72; CHECK-DAG: ld1b    { z{{[01]}}.d }, p0/z, [sp, #6, mul vl]73  %local0 = alloca <vscale x 2 x i8>74  %local1 = alloca <vscale x 2 x i8>75  load volatile <vscale x 2 x i8>, ptr %local076  load volatile <vscale x 2 x i8>, ptr %local177  ret void78}79 80define <vscale x 2 x i64> @fill_signed_nxv2i8() {81; CHECK-LABEL: fill_signed_nxv2i882; CHECK-DAG: ld1sb    { z{{[01]}}.d }, p0/z, [sp, #7, mul vl]83; CHECK-DAG: ld1sb    { z{{[01]}}.d }, p0/z, [sp, #6, mul vl]84  %local0 = alloca <vscale x 2 x i8>85  %local1 = alloca <vscale x 2 x i8>86  %a = load volatile <vscale x 2 x i8>, ptr %local087  %a_ext = sext <vscale x 2 x i8> %a to <vscale x 2 x i64>88  %b = load volatile <vscale x 2 x i8>, ptr %local189  %b_ext = sext <vscale x 2 x i8> %b to <vscale x 2 x i64>90  %sum = add <vscale x 2 x i64> %a_ext, %b_ext91  ret <vscale x 2 x i64> %sum92}93 94define void @fill_nxv8i16() {95; CHECK-LABEL: fill_nxv8i1696; CHECK-DAG: ldr    z{{[01]}}, [sp]97; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]98  %local0 = alloca <vscale x 8 x i16>99  %local1 = alloca <vscale x 8 x i16>100  load volatile <vscale x 8 x i16>, ptr %local0101  load volatile <vscale x 8 x i16>, ptr %local1102  ret void103}104 105define void @fill_nxv4i16() {106; CHECK-LABEL: fill_nxv4i16107; CHECK-DAG: ld1h    { z{{[01]}}.s }, p0/z, [sp]108; CHECK-DAG: ld1h    { z{{[01]}}.s }, p0/z, [sp, #1, mul vl]109  %local0 = alloca <vscale x 4 x i16>110  %local1 = alloca <vscale x 4 x i16>111  load volatile <vscale x 4 x i16>, ptr %local0112  load volatile <vscale x 4 x i16>, ptr %local1113  ret void114}115 116define <vscale x 4 x i32> @fill_signed_nxv4i16() {117; CHECK-LABEL: fill_signed_nxv4i16118; CHECK-DAG: ld1sh    { z{{[01]}}.s }, p0/z, [sp]119; CHECK-DAG: ld1sh    { z{{[01]}}.s }, p0/z, [sp, #1, mul vl]120  %local0 = alloca <vscale x 4 x i16>121  %local1 = alloca <vscale x 4 x i16>122  %a = load volatile <vscale x 4 x i16>, ptr %local0123  %a_ext = sext <vscale x 4 x i16> %a to <vscale x 4 x i32>124  %b = load volatile <vscale x 4 x i16>, ptr %local1125  %b_ext = sext <vscale x 4 x i16> %b to <vscale x 4 x i32>126  %sum = add <vscale x 4 x i32> %a_ext, %b_ext127  ret <vscale x 4 x i32> %sum128}129 130define void @fill_nxv2i16() {131; CHECK-LABEL: fill_nxv2i16132; CHECK-DAG: ld1h    { z{{[01]}}.d }, p0/z, [sp, #3, mul vl]133; CHECK-DAG: ld1h    { z{{[01]}}.d }, p0/z, [sp, #2, mul vl]134  %local0 = alloca <vscale x 2 x i16>135  %local1 = alloca <vscale x 2 x i16>136  load volatile <vscale x 2 x i16>, ptr %local0137  load volatile <vscale x 2 x i16>, ptr %local1138  ret void139}140 141define <vscale x 2 x i64> @fill_signed_nxv2i16() {142; CHECK-LABEL: fill_signed_nxv2i16143; CHECK-DAG: ld1sh    { z{{[01]}}.d }, p0/z, [sp, #3, mul vl]144; CHECK-DAG: ld1sh    { z{{[01]}}.d }, p0/z, [sp, #2, mul vl]145  %local0 = alloca <vscale x 2 x i16>146  %local1 = alloca <vscale x 2 x i16>147  %a = load volatile <vscale x 2 x i16>, ptr %local0148  %a_ext = sext <vscale x 2 x i16> %a to <vscale x 2 x i64>149  %b = load volatile <vscale x 2 x i16>, ptr %local1150  %b_ext = sext <vscale x 2 x i16> %b to <vscale x 2 x i64>151  %sum = add <vscale x 2 x i64> %a_ext, %b_ext152  ret <vscale x 2 x i64> %sum153}154 155define void @fill_nxv4i32() {156; CHECK-LABEL: fill_nxv4i32157; CHECK-DAG: ldr    z{{[01]}}, [sp]158; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]159  %local0 = alloca <vscale x 4 x i32>160  %local1 = alloca <vscale x 4 x i32>161  load volatile <vscale x 4 x i32>, ptr %local0162  load volatile <vscale x 4 x i32>, ptr %local1163  ret void164}165 166define void @fill_nxv2i32() {167; CHECK-LABEL: fill_nxv2i32168; CHECK-DAG: ld1w    { z{{[01]}}.d }, p0/z, [sp]169; CHECK-DAG: ld1w    { z{{[01]}}.d }, p0/z, [sp, #1, mul vl]170  %local0 = alloca <vscale x 2 x i32>171  %local1 = alloca <vscale x 2 x i32>172  load volatile <vscale x 2 x i32>, ptr %local0173  load volatile <vscale x 2 x i32>, ptr %local1174  ret void175}176 177define <vscale x 2 x i64> @fill_signed_nxv2i32() {178; CHECK-LABEL: fill_signed_nxv2i32179; CHECK-DAG: ld1sw    { z{{[01]}}.d }, p0/z, [sp]180; CHECK-DAG: ld1sw    { z{{[01]}}.d }, p0/z, [sp, #1, mul vl]181  %local0 = alloca <vscale x 2 x i32>182  %local1 = alloca <vscale x 2 x i32>183  %a = load volatile <vscale x 2 x i32>, ptr %local0184  %a_ext = sext <vscale x 2 x i32> %a to <vscale x 2 x i64>185  %b = load volatile <vscale x 2 x i32>, ptr %local1186  %b_ext = sext <vscale x 2 x i32> %b to <vscale x 2 x i64>187  %sum = add <vscale x 2 x i64> %a_ext, %b_ext188  ret <vscale x 2 x i64> %sum189}190 191define void @fill_nxv2i64() {192; CHECK-LABEL: fill_nxv2i64193; CHECK-DAG: ldr    z{{[01]}}, [sp]194; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]195  %local0 = alloca <vscale x 2 x i64>196  %local1 = alloca <vscale x 2 x i64>197  load volatile <vscale x 2 x i64>, ptr %local0198  load volatile <vscale x 2 x i64>, ptr %local1199  ret void200}201 202define void @fill_nxv8bf16() {203; CHECK-LABEL: fill_nxv8bf16204; CHECK-DAG: ldr    z{{[01]}}, [sp]205; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]206  %local0 = alloca <vscale x 8 x bfloat>207  %local1 = alloca <vscale x 8 x bfloat>208  load volatile <vscale x 8 x bfloat>, ptr %local0209  load volatile <vscale x 8 x bfloat>, ptr %local1210  ret void211}212 213define void @fill_nxv8f16() {214; CHECK-LABEL: fill_nxv8f16215; CHECK-DAG: ldr    z{{[01]}}, [sp]216; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]217  %local0 = alloca <vscale x 8 x half>218  %local1 = alloca <vscale x 8 x half>219  load volatile <vscale x 8 x half>, ptr %local0220  load volatile <vscale x 8 x half>, ptr %local1221  ret void222}223 224define void @fill_nxv4f32() {225; CHECK-LABEL: fill_nxv4f32226; CHECK-DAG: ldr    z{{[01]}}, [sp]227; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]228  %local0 = alloca <vscale x 4 x float>229  %local1 = alloca <vscale x 4 x float>230  load volatile <vscale x 4 x float>, ptr %local0231  load volatile <vscale x 4 x float>, ptr %local1232  ret void233}234 235define void @fill_nxv2f64() {236; CHECK-LABEL: fill_nxv2f64237; CHECK-DAG: ldr    z{{[01]}}, [sp]238; CHECK-DAG: ldr    z{{[01]}}, [sp, #1, mul vl]239  %local0 = alloca <vscale x 2 x double>240  %local1 = alloca <vscale x 2 x double>241  load volatile <vscale x 2 x double>, ptr %local0242  load volatile <vscale x 2 x double>, ptr %local1243  ret void244}245 246 247; Data spills248 249define void @spill_nxv16i8(<vscale x 16 x i8> %v0, <vscale x 16 x i8> %v1) {250; CHECK-LABEL: spill_nxv16i8251; CHECK-DAG: str    z{{[01]}}, [sp]252; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]253  %local0 = alloca <vscale x 16 x i8>254  %local1 = alloca <vscale x 16 x i8>255  store volatile <vscale x 16 x i8> %v0, ptr %local0256  store volatile <vscale x 16 x i8> %v1, ptr %local1257  ret void258}259 260define void @spill_nxv8i8(<vscale x 8 x i8> %v0, <vscale x 8 x i8> %v1) {261; CHECK-LABEL: spill_nxv8i8262; CHECK-DAG: st1b    { z{{[01]}}.h }, p0, [sp]263; CHECK-DAG: st1b    { z{{[01]}}.h }, p0, [sp, #1, mul vl]264  %local0 = alloca <vscale x 8 x i8>265  %local1 = alloca <vscale x 8 x i8>266  store volatile <vscale x 8 x i8> %v0, ptr %local0267  store volatile <vscale x 8 x i8> %v1, ptr %local1268  ret void269}270 271define void @spill_nxv4i8(<vscale x 4 x i8> %v0, <vscale x 4 x i8> %v1) {272; CHECK-LABEL: spill_nxv4i8273; CHECK-DAG: st1b    { z{{[01]}}.s }, p0, [sp, #3, mul vl]274; CHECK-DAG: st1b    { z{{[01]}}.s }, p0, [sp, #2, mul vl]275  %local0 = alloca <vscale x 4 x i8>276  %local1 = alloca <vscale x 4 x i8>277  store volatile <vscale x 4 x i8> %v0, ptr %local0278  store volatile <vscale x 4 x i8> %v1, ptr %local1279  ret void280}281 282define void @spill_nxv2i8(<vscale x 2 x i8> %v0, <vscale x 2 x i8> %v1) {283; CHECK-LABEL: spill_nxv2i8284; CHECK-DAG: st1b    { z{{[01]}}.d }, p0, [sp, #7, mul vl]285; CHECK-DAG: st1b    { z{{[01]}}.d }, p0, [sp, #6, mul vl]286  %local0 = alloca <vscale x 2 x i8>287  %local1 = alloca <vscale x 2 x i8>288  store volatile <vscale x 2 x i8> %v0, ptr %local0289  store volatile <vscale x 2 x i8> %v1, ptr %local1290  ret void291}292 293define void @spill_nxv8i16(<vscale x 8 x i16> %v0, <vscale x 8 x i16> %v1) {294; CHECK-LABEL: spill_nxv8i16295; CHECK-DAG: str    z{{[01]}}, [sp]296; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]297  %local0 = alloca <vscale x 8 x i16>298  %local1 = alloca <vscale x 8 x i16>299  store volatile <vscale x 8 x i16> %v0, ptr %local0300  store volatile <vscale x 8 x i16> %v1, ptr %local1301  ret void302}303 304define void @spill_nxv4i16(<vscale x 4 x i16> %v0, <vscale x 4 x i16> %v1) {305; CHECK-LABEL: spill_nxv4i16306; CHECK-DAG: st1h    { z{{[01]}}.s }, p0, [sp]307; CHECK-DAG: st1h    { z{{[01]}}.s }, p0, [sp, #1, mul vl]308  %local0 = alloca <vscale x 4 x i16>309  %local1 = alloca <vscale x 4 x i16>310  store volatile <vscale x 4 x i16> %v0, ptr %local0311  store volatile <vscale x 4 x i16> %v1, ptr %local1312  ret void313}314 315define void @spill_nxv2i16(<vscale x 2 x i16> %v0, <vscale x 2 x i16> %v1) {316; CHECK-LABEL: spill_nxv2i16317; CHECK-DAG: st1h    { z{{[01]}}.d }, p0, [sp, #3, mul vl]318; CHECK-DAG: st1h    { z{{[01]}}.d }, p0, [sp, #2, mul vl]319  %local0 = alloca <vscale x 2 x i16>320  %local1 = alloca <vscale x 2 x i16>321  store volatile <vscale x 2 x i16> %v0, ptr %local0322  store volatile <vscale x 2 x i16> %v1, ptr %local1323  ret void324}325 326define void @spill_nxv4i32(<vscale x 4 x i32> %v0, <vscale x 4 x i32> %v1) {327; CHECK-LABEL: spill_nxv4i32328; CHECK-DAG: str    z{{[01]}}, [sp]329; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]330  %local0 = alloca <vscale x 4 x i32>331  %local1 = alloca <vscale x 4 x i32>332  store volatile <vscale x 4 x i32> %v0, ptr %local0333  store volatile <vscale x 4 x i32> %v1, ptr %local1334  ret void335}336 337define void @spill_nxv2i32(<vscale x 2 x i32> %v0, <vscale x 2 x i32> %v1) {338; CHECK-LABEL: spill_nxv2i32339; CHECK-DAG: st1w    { z{{[01]}}.d }, p0, [sp]340; CHECK-DAG: st1w    { z{{[01]}}.d }, p0, [sp, #1, mul vl]341  %local0 = alloca <vscale x 2 x i32>342  %local1 = alloca <vscale x 2 x i32>343  store volatile <vscale x 2 x i32> %v0, ptr %local0344  store volatile <vscale x 2 x i32> %v1, ptr %local1345  ret void346}347 348define void @spill_nxv2i64(<vscale x 2 x i64> %v0, <vscale x 2 x i64> %v1) {349; CHECK-LABEL: spill_nxv2i64350; CHECK-DAG: str    z{{[01]}}, [sp]351; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]352  %local0 = alloca <vscale x 2 x i64>353  %local1 = alloca <vscale x 2 x i64>354  store volatile <vscale x 2 x i64> %v0, ptr %local0355  store volatile <vscale x 2 x i64> %v1, ptr %local1356  ret void357}358 359define void @spill_nxv8f16(<vscale x 8 x half> %v0, <vscale x 8 x half> %v1) {360; CHECK-LABEL: spill_nxv8f16361; CHECK-DAG: str    z{{[01]}}, [sp]362; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]363  %local0 = alloca <vscale x 8 x half>364  %local1 = alloca <vscale x 8 x half>365  store volatile <vscale x 8 x half> %v0, ptr %local0366  store volatile <vscale x 8 x half> %v1, ptr %local1367  ret void368}369 370define void @spill_nxv8bf16(<vscale x 8 x bfloat> %v0, <vscale x 8 x bfloat> %v1) {371; CHECK-LABEL: spill_nxv8bf16372; CHECK-DAG: str    z{{[01]}}, [sp]373; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]374  %local0 = alloca <vscale x 8 x bfloat>375  %local1 = alloca <vscale x 8 x bfloat>376  store volatile <vscale x 8 x bfloat> %v0, ptr %local0377  store volatile <vscale x 8 x bfloat> %v1, ptr %local1378  ret void379}380 381define void @spill_nxv4f32(<vscale x 4 x float> %v0, <vscale x 4 x float> %v1) {382; CHECK-LABEL: spill_nxv4f32383; CHECK-DAG: str    z{{[01]}}, [sp]384; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]385  %local0 = alloca <vscale x 4 x float>386  %local1 = alloca <vscale x 4 x float>387  store volatile <vscale x 4 x float> %v0, ptr %local0388  store volatile <vscale x 4 x float> %v1, ptr %local1389  ret void390}391 392define void @spill_nxv2f64(<vscale x 2 x double> %v0, <vscale x 2 x double> %v1) {393; CHECK-LABEL: spill_nxv2f64394; CHECK-DAG: str    z{{[01]}}, [sp]395; CHECK-DAG: str    z{{[01]}}, [sp, #1, mul vl]396  %local0 = alloca <vscale x 2 x double>397  %local1 = alloca <vscale x 2 x double>398  store volatile <vscale x 2 x double> %v0, ptr %local0399  store volatile <vscale x 2 x double> %v1, ptr %local1400  ret void401}402 403; Predicate fills404 405define void @fill_nxv16i1() {406; CHECK-LABEL: fill_nxv16i1407; CHECK-DAG: ldr    p{{[01]}}, [sp, #7, mul vl]408; CHECK-DAG: ldr    p{{[01]}}, [sp, #6, mul vl]409  %local0 = alloca <vscale x 16 x i1>410  %local1 = alloca <vscale x 16 x i1>411  load volatile <vscale x 16 x i1>, ptr %local0412  load volatile <vscale x 16 x i1>, ptr %local1413  ret void414}415 416; Predicate spills417 418define void @spill_nxv16i1(<vscale x 16 x i1> %v0, <vscale x 16 x i1> %v1) {419; CHECK-LABEL: spill_nxv16i1420; CHECK-DAG: str    p{{[01]}}, [sp, #7, mul vl]421; CHECK-DAG: str    p{{[01]}}, [sp, #6, mul vl]422  %local0 = alloca <vscale x 16 x i1>423  %local1 = alloca <vscale x 16 x i1>424  store volatile <vscale x 16 x i1> %v0, ptr %local0425  store volatile <vscale x 16 x i1> %v1, ptr %local1426  ret void427}428