11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2- ; RUN: llc < %s -verify-machineinstrs -mattr=+sve -global-isel=0 | FileCheck %s
3- ; RUN: llc < %s -verify-machineinstrs -mattr=+sme -global-isel=0 -force-streaming | FileCheck %s
4- ; RUN: llc < %s -verify-machineinstrs -mattr=+sve -global-isel=0 -force-streaming-compatible | FileCheck %s
2+ ; RUN: llc < %s -verify-machineinstrs -mattr=+sve -global-isel=0 | FileCheck %s --check-prefixes=CHECK,CHECK-NONSTREAMING
3+ ; RUN: llc < %s -verify-machineinstrs -mattr=+sme -global-isel=0 -force-streaming | FileCheck %s --check-prefixes=CHECK,STREAMING-COMPAT
4+ ; RUN: llc < %s -verify-machineinstrs -mattr=+sve -global-isel=0 -force-streaming-compatible | FileCheck %s --check-prefixes=CHECK,STREAMING-COMPAT
55
66target triple = "aarch64-unknown-linux-gnu"
77
@@ -106,24 +106,34 @@ entry:
106106}
107107
108108define void @test_str_lane_s8 (ptr %a , <vscale x 16 x i8 > %b ) {
109- ; CHECK-LABEL: test_str_lane_s8:
110- ; CHECK: // %bb.0: // %entry
111- ; CHECK-NEXT: mov z0.b, z0.b[7]
112- ; CHECK-NEXT: str b0, [x0]
113- ; CHECK-NEXT: ret
114-
109+ ; CHECK-NONSTREAMING-LABEL: test_str_lane_s8:
110+ ; CHECK-NONSTREAMING: // %bb.0: // %entry
111+ ; CHECK-NONSTREAMING-NEXT: mov v0.b[0], v0.b[7]
112+ ; CHECK-NONSTREAMING-NEXT: str b0, [x0]
113+ ; CHECK-NONSTREAMING-NEXT: ret
114+ ;
115+ ; STREAMING-COMPAT-LABEL: test_str_lane_s8:
116+ ; STREAMING-COMPAT: // %bb.0: // %entry
117+ ; STREAMING-COMPAT-NEXT: mov z0.b, z0.b[7]
118+ ; STREAMING-COMPAT-NEXT: str b0, [x0]
119+ ; STREAMING-COMPAT-NEXT: ret
115120entry:
116121 %0 = extractelement <vscale x 16 x i8 > %b , i32 7
117122 store i8 %0 , ptr %a , align 1
118123 ret void
119124}
120125
121126define void @test_str_lane0_s8 (ptr %a , <vscale x 16 x i8 > %b ) {
122- ; CHECK-LABEL: test_str_lane0_s8:
123- ; CHECK: // %bb.0: // %entry
124- ; CHECK-NEXT: str b0, [x0]
125- ; CHECK-NEXT: ret
126-
127+ ; CHECK-NONSTREAMING-LABEL: test_str_lane0_s8:
128+ ; CHECK-NONSTREAMING: // %bb.0: // %entry
129+ ; CHECK-NONSTREAMING-NEXT: mov v0.b[0], v0.b[0]
130+ ; CHECK-NONSTREAMING-NEXT: str b0, [x0]
131+ ; CHECK-NONSTREAMING-NEXT: ret
132+ ;
133+ ; STREAMING-COMPAT-LABEL: test_str_lane0_s8:
134+ ; STREAMING-COMPAT: // %bb.0: // %entry
135+ ; STREAMING-COMPAT-NEXT: str b0, [x0]
136+ ; STREAMING-COMPAT-NEXT: ret
127137entry:
128138 %0 = extractelement <vscale x 16 x i8 > %b , i32 0
129139 store i8 %0 , ptr %a , align 1
@@ -316,12 +326,17 @@ entry:
316326}
317327
318328define void @test_str_lane_s8_negative_offset (ptr %a , <vscale x 16 x i8 > %b ) {
319- ; CHECK-LABEL: test_str_lane_s8_negative_offset:
320- ; CHECK: // %bb.0: // %entry
321- ; CHECK-NEXT: mov z0.b, z0.b[7]
322- ; CHECK-NEXT: stur b0, [x0, #-8]
323- ; CHECK-NEXT: ret
324-
329+ ; CHECK-NONSTREAMING-LABEL: test_str_lane_s8_negative_offset:
330+ ; CHECK-NONSTREAMING: // %bb.0: // %entry
331+ ; CHECK-NONSTREAMING-NEXT: mov v0.b[0], v0.b[7]
332+ ; CHECK-NONSTREAMING-NEXT: stur b0, [x0, #-8]
333+ ; CHECK-NONSTREAMING-NEXT: ret
334+ ;
335+ ; STREAMING-COMPAT-LABEL: test_str_lane_s8_negative_offset:
336+ ; STREAMING-COMPAT: // %bb.0: // %entry
337+ ; STREAMING-COMPAT-NEXT: mov z0.b, z0.b[7]
338+ ; STREAMING-COMPAT-NEXT: stur b0, [x0, #-8]
339+ ; STREAMING-COMPAT-NEXT: ret
325340entry:
326341 %0 = extractelement <vscale x 16 x i8 > %b , i32 7
327342 %out_ptr = getelementptr inbounds i8 , ptr %a , i64 -8
@@ -330,11 +345,16 @@ entry:
330345}
331346
332347define void @test_str_lane0_s8_negative_offset (ptr %a , <vscale x 16 x i8 > %b ) {
333- ; CHECK-LABEL: test_str_lane0_s8_negative_offset:
334- ; CHECK: // %bb.0: // %entry
335- ; CHECK-NEXT: stur b0, [x0, #-8]
336- ; CHECK-NEXT: ret
337-
348+ ; CHECK-NONSTREAMING-LABEL: test_str_lane0_s8_negative_offset:
349+ ; CHECK-NONSTREAMING: // %bb.0: // %entry
350+ ; CHECK-NONSTREAMING-NEXT: mov v0.b[0], v0.b[0]
351+ ; CHECK-NONSTREAMING-NEXT: stur b0, [x0, #-8]
352+ ; CHECK-NONSTREAMING-NEXT: ret
353+ ;
354+ ; STREAMING-COMPAT-LABEL: test_str_lane0_s8_negative_offset:
355+ ; STREAMING-COMPAT: // %bb.0: // %entry
356+ ; STREAMING-COMPAT-NEXT: stur b0, [x0, #-8]
357+ ; STREAMING-COMPAT-NEXT: ret
338358entry:
339359 %0 = extractelement <vscale x 16 x i8 > %b , i32 0
340360 %out_ptr = getelementptr inbounds i8 , ptr %a , i64 -8
@@ -398,12 +418,18 @@ entry:
398418
399419
400420define void @test_str_trunc_lane_s32_to_s8 (ptr %a , <vscale x 4 x i32 > %b ) {
401- ; CHECK-LABEL: test_str_trunc_lane_s32_to_s8:
402- ; CHECK: // %bb.0: // %entry
403- ; CHECK-NEXT: mov z0.s, z0.s[3]
404- ; CHECK-NEXT: str b0, [x0]
405- ; CHECK-NEXT: ret
406-
421+ ; CHECK-NONSTREAMING-LABEL: test_str_trunc_lane_s32_to_s8:
422+ ; CHECK-NONSTREAMING: // %bb.0: // %entry
423+ ; CHECK-NONSTREAMING-NEXT: mov w8, v0.s[3]
424+ ; CHECK-NONSTREAMING-NEXT: fmov s0, w8
425+ ; CHECK-NONSTREAMING-NEXT: str b0, [x0]
426+ ; CHECK-NONSTREAMING-NEXT: ret
427+ ;
428+ ; STREAMING-COMPAT-LABEL: test_str_trunc_lane_s32_to_s8:
429+ ; STREAMING-COMPAT: // %bb.0: // %entry
430+ ; STREAMING-COMPAT-NEXT: mov z0.s, z0.s[3]
431+ ; STREAMING-COMPAT-NEXT: str b0, [x0]
432+ ; STREAMING-COMPAT-NEXT: ret
407433entry:
408434 %0 = extractelement <vscale x 4 x i32 > %b , i32 3
409435 %trunc = trunc i32 %0 to i8
@@ -468,12 +494,18 @@ entry:
468494}
469495
470496define void @test_str_trunc_lane_s32_to_s8_negative_offset (ptr %a , <vscale x 4 x i32 > %b ) {
471- ; CHECK-LABEL: test_str_trunc_lane_s32_to_s8_negative_offset:
472- ; CHECK: // %bb.0: // %entry
473- ; CHECK-NEXT: mov z0.s, z0.s[3]
474- ; CHECK-NEXT: stur b0, [x0, #-8]
475- ; CHECK-NEXT: ret
476-
497+ ; CHECK-NONSTREAMING-LABEL: test_str_trunc_lane_s32_to_s8_negative_offset:
498+ ; CHECK-NONSTREAMING: // %bb.0: // %entry
499+ ; CHECK-NONSTREAMING-NEXT: mov w8, v0.s[3]
500+ ; CHECK-NONSTREAMING-NEXT: fmov s0, w8
501+ ; CHECK-NONSTREAMING-NEXT: stur b0, [x0, #-8]
502+ ; CHECK-NONSTREAMING-NEXT: ret
503+ ;
504+ ; STREAMING-COMPAT-LABEL: test_str_trunc_lane_s32_to_s8_negative_offset:
505+ ; STREAMING-COMPAT: // %bb.0: // %entry
506+ ; STREAMING-COMPAT-NEXT: mov z0.s, z0.s[3]
507+ ; STREAMING-COMPAT-NEXT: stur b0, [x0, #-8]
508+ ; STREAMING-COMPAT-NEXT: ret
477509entry:
478510 %0 = extractelement <vscale x 4 x i32 > %b , i32 3
479511 %trunc = trunc i32 %0 to i8
0 commit comments