xref: /llvm-project/llvm/test/CodeGen/AArch64/fp16-vector-nvcast.ll (revision d39b4ce3ce8a3c256e01bdec2b140777a332a633)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=aarch64 | FileCheck %s
3
4; Test pattern (v4f16 (AArch64NvCast (v2i32 FPR64:$src)))
5define void @nvcast_v2i32(ptr %a) #0 {
6; CHECK-LABEL: nvcast_v2i32:
7; CHECK:       // %bb.0:
8; CHECK-NEXT:    movi v0.2s, #171, lsl #16
9; CHECK-NEXT:    str d0, [x0]
10; CHECK-NEXT:    ret
11  store volatile <4 x half> <half 0xH0000, half 0xH00AB, half 0xH0000, half 0xH00AB>, ptr %a
12  ret void
13}
14
15; Test pattern (v4f16 (AArch64NvCast (v4i16 FPR64:$src)))
16define void @nvcast_v4i16(ptr %a) #0 {
17; CHECK-LABEL: nvcast_v4i16:
18; CHECK:       // %bb.0:
19; CHECK-NEXT:    movi v0.4h, #171
20; CHECK-NEXT:    str d0, [x0]
21; CHECK-NEXT:    ret
22  store volatile <4 x half> <half 0xH00AB, half 0xH00AB, half 0xH00AB, half 0xH00AB>, ptr %a
23  ret void
24}
25
26; Test pattern (v4f16 (AArch64NvCast (v8i8 FPR64:$src)))
27define void @nvcast_v8i8(ptr %a) #0 {
28; CHECK-LABEL: nvcast_v8i8:
29; CHECK:       // %bb.0:
30; CHECK-NEXT:    movi v0.8b, #171
31; CHECK-NEXT:    str d0, [x0]
32; CHECK-NEXT:    ret
33  store volatile <4 x half> <half 0xHABAB, half 0xHABAB, half 0xHABAB, half 0xHABAB>, ptr %a
34  ret void
35}
36
37; Test pattern (v4f16 (AArch64NvCast (f64 FPR64:$src)))
38define void @nvcast_f64(ptr %a) #0 {
39; CHECK-LABEL: nvcast_f64:
40; CHECK:       // %bb.0:
41; CHECK-NEXT:    movi d0, #0000000000000000
42; CHECK-NEXT:    str d0, [x0]
43; CHECK-NEXT:    ret
44  store volatile <4 x half> zeroinitializer, ptr %a
45  ret void
46}
47
48; Test pattern (v8f16 (AArch64NvCast (v4i32 FPR128:$src)))
49define void @nvcast_v4i32(ptr %a) #0 {
50; CHECK-LABEL: nvcast_v4i32:
51; CHECK:       // %bb.0:
52; CHECK-NEXT:    movi v0.4s, #171, lsl #16
53; CHECK-NEXT:    str q0, [x0]
54; CHECK-NEXT:    ret
55  store volatile <8 x half> <half 0xH0000, half 0xH00AB, half 0xH0000, half 0xH00AB, half 0xH0000, half 0xH00AB, half 0xH0000, half 0xH00AB>, ptr %a
56  ret void
57}
58
59; Test pattern (v8f16 (AArch64NvCast (v8i16 FPR128:$src)))
60define void @nvcast_v8i16(ptr %a) #0 {
61; CHECK-LABEL: nvcast_v8i16:
62; CHECK:       // %bb.0:
63; CHECK-NEXT:    movi v0.8h, #171
64; CHECK-NEXT:    str q0, [x0]
65; CHECK-NEXT:    ret
66  store volatile <8 x half> <half 0xH00AB, half 0xH00AB, half 0xH00AB, half 0xH00AB, half 0xH00AB, half 0xH00AB, half 0xH00AB, half 0xH00AB>, ptr %a
67  ret void
68}
69
70; Test pattern (v8f16 (AArch64NvCast (v16i8 FPR128:$src)))
71define void @nvcast_v16i8(ptr %a) #0 {
72; CHECK-LABEL: nvcast_v16i8:
73; CHECK:       // %bb.0:
74; CHECK-NEXT:    movi v0.16b, #171
75; CHECK-NEXT:    str q0, [x0]
76; CHECK-NEXT:    ret
77  store volatile <8 x half> <half 0xHABAB, half 0xHABAB, half 0xHABAB, half 0xHABAB, half 0xHABAB, half 0xHABAB, half 0xHABAB, half 0xHABAB>, ptr %a
78  ret void
79}
80
81; Test pattern (v8f16 (AArch64NvCast (v2i64 FPR128:$src)))
82define void @nvcast_v2i64(ptr %a) #0 {
83; CHECK-LABEL: nvcast_v2i64:
84; CHECK:       // %bb.0:
85; CHECK-NEXT:    movi v0.2d, #0000000000000000
86; CHECK-NEXT:    str q0, [x0]
87; CHECK-NEXT:    ret
88  store volatile <8 x half> zeroinitializer, ptr %a
89  ret void
90}
91
92attributes #0 = { nounwind }
93