[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-intrinsics-ld1ro-addressing-mode-reg-reg.ll
blobb4ac587c0b794fdd431261fc0cf7bf58003b7bb1
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+f64mm,+bf16 -asm-verbose=0 < %s | FileCheck %s
4 ; LD1ROB
7 define <vscale x 16 x i8> @ld1rob_i8(<vscale x 16 x i1> %pg, i8* %a, i64 %index) nounwind {
8 ; CHECK-LABEL: ld1rob_i8:
9 ; CHECK-NEXT:  ld1rob { z0.b }, p0/z, [x0, x1]
10 ; CHECK-NEXT:  ret
11   %base = getelementptr i8, i8* %a, i64 %index
12   %load = call <vscale x 16 x i8> @llvm.aarch64.sve.ld1ro.nxv16i8(<vscale x 16 x i1> %pg, i8* %base)
13   ret <vscale x 16 x i8> %load
17 ; LD1ROH
20 define <vscale x 8 x i16> @ld1roh_i16(<vscale x 8 x i1> %pg, i16* %a, i64 %index) nounwind {
21 ; CHECK-LABEL: ld1roh_i16:
22 ; CHECK-NEXT:  ld1roh { z0.h }, p0/z, [x0, x1, lsl #1]
23 ; CHECK-NEXT:  ret
24   %base = getelementptr i16, i16* %a, i64 %index
25   %load = call <vscale x 8 x i16> @llvm.aarch64.sve.ld1ro.nxv8i16(<vscale x 8 x i1> %pg, i16* %base)
26   ret <vscale x 8 x i16> %load
29 define <vscale x 8 x half> @ld1roh_f16(<vscale x 8 x i1> %pg, half* %a, i64 %index) nounwind {
30 ; CHECK-LABEL: ld1roh_f16:
31 ; CHECK-NEXT:  ld1roh { z0.h }, p0/z, [x0, x1, lsl #1]
32 ; CHECK-NEXT:  ret
33   %base = getelementptr half, half* %a, i64 %index
34   %load = call <vscale x 8 x half> @llvm.aarch64.sve.ld1ro.nxv8f16(<vscale x 8 x i1> %pg, half* %base)
35   ret <vscale x 8 x half> %load
38 ; bfloat - requires -mattr=+bf16
39 define <vscale x 8 x bfloat> @ld1roh_bf16(<vscale x 8 x i1> %pg, bfloat* %a, i64 %index) nounwind {
40 ; CHECK-LABEL: ld1roh_bf16:
41 ; CHECK-NEXT:  ld1roh { z0.h }, p0/z, [x0, x1, lsl #1]
42 ; CHECK-NEXT:  ret
43   %base = getelementptr bfloat, bfloat* %a, i64 %index
44   %load = call <vscale x 8 x bfloat> @llvm.aarch64.sve.ld1ro.nxv8bf16(<vscale x 8 x i1> %pg, bfloat* %base)
45   ret <vscale x 8 x bfloat> %load
49 ; LD1ROW
52 define<vscale x 4 x i32> @ld1row_i32(<vscale x 4 x i1> %pg, i32* %a, i64 %index) nounwind {
53 ; CHECK-LABEL: ld1row_i32:
54 ; CHECK-NEXT:  ld1row { z0.s }, p0/z, [x0, x1, lsl #2]
55 ; CHECK-NEXT:  ret
56   %base = getelementptr i32, i32* %a, i64 %index
57   %load = call <vscale x 4 x i32> @llvm.aarch64.sve.ld1ro.nxv4i32(<vscale x 4 x i1> %pg, i32* %base)
58   ret <vscale x 4 x i32> %load
61 define<vscale x 4 x float> @ld1row_f32(<vscale x 4 x i1> %pg, float* %a, i64 %index) nounwind {
62 ; CHECK-LABEL: ld1row_f32:
63 ; CHECK-NEXT:  ld1row { z0.s }, p0/z, [x0, x1, lsl #2]
64 ; CHECK-NEXT:  ret
65   %base = getelementptr float, float* %a, i64 %index
66   %load = call <vscale x 4 x float> @llvm.aarch64.sve.ld1ro.nxv4f32(<vscale x 4 x i1> %pg, float* %base)
67   ret <vscale x 4 x float> %load
71 ; LD1ROD
74 define <vscale x 2 x i64> @ld1rod_i64(<vscale x 2 x i1> %pg, i64* %a, i64 %index) nounwind {
75 ; CHECK-LABEL: ld1rod_i64:
76 ; CHECK-NEXT:  ld1rod { z0.d }, p0/z, [x0, x1, lsl #3]
77 ; CHECK-NEXT:  ret
78   %base = getelementptr i64, i64* %a, i64 %index
79   %load = call <vscale x 2 x i64> @llvm.aarch64.sve.ld1ro.nxv2i64(<vscale x 2 x i1> %pg, i64* %base)
80   ret <vscale x 2 x i64> %load
83 define <vscale x 2 x double> @ld1rod_f64(<vscale x 2 x i1> %pg, double* %a, i64 %index) nounwind {
84 ; CHECK-LABEL: ld1rod_f64:
85 ; CHECK-NEXT:  ld1rod { z0.d }, p0/z, [x0, x1, lsl #3]
86 ; CHECK-NEXT:  ret
87   %base = getelementptr double, double* %a, i64 %index
88   %load = call <vscale x 2 x double> @llvm.aarch64.sve.ld1ro.nxv2f64(<vscale x 2 x i1> %pg, double* %base)
89   ret <vscale x 2 x double> %load
92 declare <vscale x 16 x i8> @llvm.aarch64.sve.ld1ro.nxv16i8(<vscale x 16 x i1>, i8*)
94 declare <vscale x 8 x i16> @llvm.aarch64.sve.ld1ro.nxv8i16(<vscale x 8 x i1>, i16*)
95 declare <vscale x 8 x half> @llvm.aarch64.sve.ld1ro.nxv8f16(<vscale x 8 x i1>, half*)
96 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.ld1ro.nxv8bf16(<vscale x 8 x i1>, bfloat*)
98 declare <vscale x 4 x i32> @llvm.aarch64.sve.ld1ro.nxv4i32(<vscale x 4 x i1>, i32*)
99 declare <vscale x 4 x float> @llvm.aarch64.sve.ld1ro.nxv4f32(<vscale x 4 x i1>, float*)
101 declare <vscale x 2 x i64> @llvm.aarch64.sve.ld1ro.nxv2i64(<vscale x 2 x i1>, i64*)
102 declare <vscale x 2 x double> @llvm.aarch64.sve.ld1ro.nxv2f64(<vscale x 2 x i1>, double*)