xref: /llvm-project/llvm/test/CodeGen/RISCV/fp-fcanonicalize.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
1c01ddbe9SYunQiang Su; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2c01ddbe9SYunQiang Su; FIXME: @llvm.canonicalize doesn't support soft-float abi yet.
3c01ddbe9SYunQiang Su; RUN: llc --mtriple=riscv64 --mattr=+d,+zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-FP16-RV64
4c01ddbe9SYunQiang Su; RUN: llc --mtriple=riscv64 --mattr=+d,-zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16-RV64
5c01ddbe9SYunQiang Su; RUN: llc --mtriple=riscv32 --mattr=+d,+zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-FP16-RV32
6c01ddbe9SYunQiang Su; RUN: llc --mtriple=riscv32 --mattr=+d,-zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16-RV32
7c01ddbe9SYunQiang Su
8c01ddbe9SYunQiang Sudeclare half @llvm.fcanonicalize.f16(half)
9c01ddbe9SYunQiang Sudeclare float @llvm.fcanonicalize.f32(float)
10c01ddbe9SYunQiang Sudeclare double @llvm.fcanonicalize.f64(double)
11c01ddbe9SYunQiang Su
12c01ddbe9SYunQiang Sudefine half @fcanonicalize_f16(half %x) {
13c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_f16:
14c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
15c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0
16c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
17c01ddbe9SYunQiang Su;
18c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_f16:
19c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
20c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -16
21c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 16
22c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
23c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
24c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
25c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
26c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
27c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0
28c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lui a1, 1048560
29c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    or a0, a0, a1
30c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a0
31c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
32*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
33c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 16
34*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
35c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
36c01ddbe9SYunQiang Su;
37c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_f16:
38c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
39c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0
40c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
41c01ddbe9SYunQiang Su;
42c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_f16:
43c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
44c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -16
45c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 16
46c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
47c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
48c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
49c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
50c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
51c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0
52c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lui a1, 1048560
53c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    or a0, a0, a1
54c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0
55c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
56*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
57c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16
58*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
59c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
60c01ddbe9SYunQiang Su  %z = call half @llvm.canonicalize.f16(half %x)
61c01ddbe9SYunQiang Su  ret half %z
62c01ddbe9SYunQiang Su}
63c01ddbe9SYunQiang Su
64c01ddbe9SYunQiang Sudefine half @fcanonicalize_f16_nnan(half %x) {
65c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_f16_nnan:
66c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
67c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0
68c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
69c01ddbe9SYunQiang Su;
70c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_f16_nnan:
71c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
72c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -16
73c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 16
74c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
75c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
76c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
77c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
78c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
79c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0
80c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lui a1, 1048560
81c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    or a0, a0, a1
82c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a0
83c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
84*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
85c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 16
86*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
87c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
88c01ddbe9SYunQiang Su;
89c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_f16_nnan:
90c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
91c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0
92c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
93c01ddbe9SYunQiang Su;
94c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_f16_nnan:
95c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
96c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -16
97c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 16
98c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
99c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
100c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
101c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
102c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
103c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0
104c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lui a1, 1048560
105c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    or a0, a0, a1
106c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0
107c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
108*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
109c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16
110*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
111c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
112c01ddbe9SYunQiang Su  %z = call nnan half @llvm.canonicalize.f16(half %x)
113c01ddbe9SYunQiang Su  ret half %z
114c01ddbe9SYunQiang Su}
115c01ddbe9SYunQiang Su
116c01ddbe9SYunQiang Sudefine <2 x half> @fcanonicalize_v2f16(<2 x half> %x) {
117c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_v2f16:
118c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
119c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0
120c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1
121c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
122c01ddbe9SYunQiang Su;
123c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v2f16:
124c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
125c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -32
126c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 32
127c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
128c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
129c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
130c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
131c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16
132c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24
133c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv s0, a1
134c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a0
135c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
136c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
137c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
138c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0
139c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s0
140c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
141c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
142c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
143c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a1, fa0
144c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv a0, s1
145c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
146c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
147c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
148*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
149*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0
150*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1
151c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 32
152*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
153c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
154c01ddbe9SYunQiang Su;
155c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_v2f16:
156c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
157c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0
158c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1
159c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
160c01ddbe9SYunQiang Su;
161c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v2f16:
162c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
163c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -16
164c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 16
165c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
166c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
167c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
168c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
169c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8
170c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -16
171c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a1
172c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0
173c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
174c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
175c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
176c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s0, fa0
177c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0
178c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
179c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
180c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
181c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a1, fa0
182c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    mv a0, s0
183c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
184c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
185c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
186*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
187*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0
188*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0
189c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16
190*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
191c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
192c01ddbe9SYunQiang Su  %z = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %x)
193c01ddbe9SYunQiang Su  ret <2 x half> %z
194c01ddbe9SYunQiang Su}
195c01ddbe9SYunQiang Su
196c01ddbe9SYunQiang Sudefine <2 x half> @fcanonicalize_v2f16_nnan(<2 x half> %x) {
197c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_v2f16_nnan:
198c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
199c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0
200c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1
201c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
202c01ddbe9SYunQiang Su;
203c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v2f16_nnan:
204c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
205c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -32
206c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 32
207c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
208c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
209c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
210c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
211c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16
212c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24
213c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv s0, a1
214c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a0
215c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
216c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
217c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
218c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0
219c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s0
220c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
221c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
222c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
223c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a1, fa0
224c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv a0, s1
225c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
226c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
227c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
228*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
229*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0
230*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1
231c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 32
232*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
233c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
234c01ddbe9SYunQiang Su;
235c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_v2f16_nnan:
236c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
237c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0
238c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1
239c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
240c01ddbe9SYunQiang Su;
241c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v2f16_nnan:
242c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
243c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -16
244c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 16
245c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
246c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
247c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
248c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
249c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8
250c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -16
251c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a1
252c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0
253c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
254c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
255c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
256c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s0, fa0
257c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0
258c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
259c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
260c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
261c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a1, fa0
262c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    mv a0, s0
263c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
264c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
265c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
266*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
267*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0
268*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0
269c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16
270*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
271c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
272c01ddbe9SYunQiang Su  %z = call nnan <2 x half> @llvm.canonicalize.v2f16(<2 x half> %x)
273c01ddbe9SYunQiang Su  ret <2 x half> %z
274c01ddbe9SYunQiang Su}
275c01ddbe9SYunQiang Su
276c01ddbe9SYunQiang Sudefine <4 x half> @fcanonicalize_v4f16(<4 x half> %x) {
277c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_v4f16:
278c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
279c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa0, fa0
280c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa1, fa1
281c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2
282c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3
283c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa5, 0(a0)
284c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa4, 2(a0)
285c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)
286c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)
287c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
288c01ddbe9SYunQiang Su;
289c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v4f16:
290c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
291c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -64
292c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 64
293c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
294c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
295c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
296c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
297c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
298c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
299c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
300c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
301c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
302c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16
303c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24
304c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32
305c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40
306c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -48
307c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -56
308c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -64
309c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)
310c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)
311c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)
312c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu a1, 24(a1)
313c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv s0, a0
314c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1
315c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
316c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0
317c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3
318c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
319c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
320c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
321c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0
322c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2
323c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
324c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
325c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
326c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0
327c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1
328c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
329c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
330c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
331c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0
332c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs2
333c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0
334c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs1
335c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
336c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0
337c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)
338c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)
339c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)
340c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh a0, 6(s0)
341c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
342c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
343c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
344c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
345c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
346c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
347c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
348c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
349*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
350*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0
351*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1
352*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2
353*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3
354*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0
355*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1
356*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2
357c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 64
358*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
359c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
360c01ddbe9SYunQiang Su;
361c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_v4f16:
362c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
363c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa0, fa0
364c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa1, fa1
365c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2
366c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3
367c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa5, 0(a0)
368c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa4, 2(a0)
369c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)
370c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)
371c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
372c01ddbe9SYunQiang Su;
373c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v4f16:
374c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
375c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -64
376c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 64
377c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
378c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
379c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s1, 52(sp) # 4-byte Folded Spill
380c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s2, 48(sp) # 4-byte Folded Spill
381c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s3, 44(sp) # 4-byte Folded Spill
382c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 32(sp) # 8-byte Folded Spill
383c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 24(sp) # 8-byte Folded Spill
384c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 16(sp) # 8-byte Folded Spill
385c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill
386c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
387c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8
388c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12
389c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16
390c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20
391c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -32
392c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -40
393c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -48
394c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -56
395c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    mv s0, a0
396c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)
397c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)
398c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)
399c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a1, 12(a1)
400c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0
401c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs1, a2
402c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a3
403c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1
404c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
405c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0
406c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2
407c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
408c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
409c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
410c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0
411c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs1
412c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
413c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
414c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
415c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0
416c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0
417c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
418c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
419c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
420c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0
421c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs1
422c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs3, fs3
423c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs2
424c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
425c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0
426c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)
427c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)
428c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)
429c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh a0, 6(s0)
430c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
431c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
432c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s1, 52(sp) # 4-byte Folded Reload
433c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload
434c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload
435c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs0, 32(sp) # 8-byte Folded Reload
436c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs1, 24(sp) # 8-byte Folded Reload
437c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs2, 16(sp) # 8-byte Folded Reload
438c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload
439*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
440*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0
441*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1
442*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2
443*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3
444*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0
445*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1
446*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2
447*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3
448c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 64
449*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
450c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
451c01ddbe9SYunQiang Su  %z = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %x)
452c01ddbe9SYunQiang Su  ret <4 x half> %z
453c01ddbe9SYunQiang Su}
454c01ddbe9SYunQiang Su
455c01ddbe9SYunQiang Sudefine <4 x half> @fcanonicalize_v4f16_nnan(<4 x half> %x) {
456c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_v4f16_nnan:
457c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
458c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa0, fa0
459c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa1, fa1
460c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2
461c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3
462c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa5, 0(a0)
463c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa4, 2(a0)
464c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)
465c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)
466c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
467c01ddbe9SYunQiang Su;
468c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v4f16_nnan:
469c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
470c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -64
471c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 64
472c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
473c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
474c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
475c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
476c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
477c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
478c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
479c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
480c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
481c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16
482c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24
483c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32
484c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40
485c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -48
486c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -56
487c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -64
488c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)
489c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)
490c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)
491c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu a1, 24(a1)
492c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv s0, a0
493c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1
494c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
495c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0
496c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3
497c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
498c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
499c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
500c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0
501c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2
502c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
503c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
504c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
505c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0
506c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1
507c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
508c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
509c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
510c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0
511c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs2
512c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0
513c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs1
514c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
515c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0
516c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)
517c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)
518c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)
519c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh a0, 6(s0)
520c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
521c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
522c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
523c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
524c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
525c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
526c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
527c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
528*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
529*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0
530*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1
531*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2
532*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3
533*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0
534*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1
535*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2
536c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 64
537*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
538c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
539c01ddbe9SYunQiang Su;
540c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_v4f16_nnan:
541c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
542c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa0, fa0
543c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa1, fa1
544c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2
545c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3
546c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa5, 0(a0)
547c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa4, 2(a0)
548c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)
549c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)
550c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
551c01ddbe9SYunQiang Su;
552c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v4f16_nnan:
553c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
554c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -64
555c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 64
556c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
557c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
558c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s1, 52(sp) # 4-byte Folded Spill
559c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s2, 48(sp) # 4-byte Folded Spill
560c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s3, 44(sp) # 4-byte Folded Spill
561c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 32(sp) # 8-byte Folded Spill
562c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 24(sp) # 8-byte Folded Spill
563c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 16(sp) # 8-byte Folded Spill
564c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill
565c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
566c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8
567c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12
568c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16
569c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20
570c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -32
571c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -40
572c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -48
573c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -56
574c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    mv s0, a0
575c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)
576c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)
577c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)
578c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a1, 12(a1)
579c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0
580c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs1, a2
581c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a3
582c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1
583c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
584c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0
585c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2
586c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
587c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
588c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
589c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0
590c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs1
591c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
592c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
593c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
594c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0
595c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0
596c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
597c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
598c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
599c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0
600c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs1
601c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs3, fs3
602c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs2
603c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
604c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0
605c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)
606c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)
607c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)
608c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh a0, 6(s0)
609c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
610c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
611c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s1, 52(sp) # 4-byte Folded Reload
612c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload
613c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload
614c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs0, 32(sp) # 8-byte Folded Reload
615c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs1, 24(sp) # 8-byte Folded Reload
616c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs2, 16(sp) # 8-byte Folded Reload
617c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload
618*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
619*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0
620*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1
621*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2
622*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3
623*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0
624*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1
625*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2
626*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3
627c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 64
628*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
629c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
630c01ddbe9SYunQiang Su  %z = call nnan <4 x half> @llvm.canonicalize.v4f16(<4 x half> %x)
631c01ddbe9SYunQiang Su  ret <4 x half> %z
632c01ddbe9SYunQiang Su}
633c01ddbe9SYunQiang Su
634c01ddbe9SYunQiang Sudefine <8 x half> @fcanonicalize_v8f16(<8 x half> %x) {
635c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_v8f16:
636c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
637c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0
638c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1
639c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2
640c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3
641c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa4, fa4
642c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa5, fa5
643c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h ft0, fa6, fa6
644c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h ft1, fa7, fa7
645c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa4, 8(a0)
646c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa5, 10(a0)
647c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh ft0, 12(a0)
648c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh ft1, 14(a0)
649c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa0, 0(a0)
650c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa1, 2(a0)
651c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)
652c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)
653c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
654c01ddbe9SYunQiang Su;
655c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v8f16:
656c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
657c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -128
658c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 128
659c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
660c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
661c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
662c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
663c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
664c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
665c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
666c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
667c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
668c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
669c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
670c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
671c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
672c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
673c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
674c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
675c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
676c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16
677c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24
678c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32
679c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40
680c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s4, -48
681c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s5, -56
682c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s6, -64
683c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s7, -72
684c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -80
685c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -88
686c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -96
687c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs3, -104
688c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs4, -112
689c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs5, -120
690c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs6, -128
691c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)
692c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)
693c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)
694c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s4, 24(a1)
695c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s5, 32(a1)
696c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s6, 40(a1)
697c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s7, 48(a1)
698c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu a1, 56(a1)
699c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv s0, a0
700c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1
701c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
702c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0
703c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s7
704c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
705c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
706c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
707c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0
708c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s6
709c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
710c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
711c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
712c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0
713c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s5
714c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
715c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
716c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
717c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs3, fa0
718c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s4
719c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
720c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
721c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
722c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs4, fa0
723c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3
724c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
725c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
726c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
727c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs5, fa0
728c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2
729c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
730c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
731c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
732c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs6, fa0
733c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1
734c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
735c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
736c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
737c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0
738c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs6
739c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs5
740c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s4, fs4
741c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s5, fs3
742c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s6, fs2
743c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0
744c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s7, fs1
745c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
746c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0
747c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s5, 8(s0)
748c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s6, 10(s0)
749c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s7, 12(s0)
750c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh a0, 14(s0)
751c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)
752c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)
753c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)
754c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s4, 6(s0)
755c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
756c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
757c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
758c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
759c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
760c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
761c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
762c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
763c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
764c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
765c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
766c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
767c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
768c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
769c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
770c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
771*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
772*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0
773*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1
774*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2
775*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3
776*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s4
777*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s5
778*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s6
779*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s7
780*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0
781*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1
782*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2
783*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs3
784*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs4
785*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs5
786*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs6
787c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 128
788*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
789c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
790c01ddbe9SYunQiang Su;
791c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_v8f16:
792c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
793c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0
794c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1
795c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2
796c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3
797c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa4, fa4
798c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa5, fa5
799c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h ft0, fa6, fa6
800c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h ft1, fa7, fa7
801c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa4, 8(a0)
802c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa5, 10(a0)
803c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh ft0, 12(a0)
804c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh ft1, 14(a0)
805c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa0, 0(a0)
806c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa1, 2(a0)
807c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)
808c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)
809c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
810c01ddbe9SYunQiang Su;
811c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v8f16:
812c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
813c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -112
814c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 112
815c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 108(sp) # 4-byte Folded Spill
816c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s0, 104(sp) # 4-byte Folded Spill
817c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s1, 100(sp) # 4-byte Folded Spill
818c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s2, 96(sp) # 4-byte Folded Spill
819c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s3, 92(sp) # 4-byte Folded Spill
820c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s4, 88(sp) # 4-byte Folded Spill
821c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s5, 84(sp) # 4-byte Folded Spill
822c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s6, 80(sp) # 4-byte Folded Spill
823c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s7, 76(sp) # 4-byte Folded Spill
824c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 64(sp) # 8-byte Folded Spill
825c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 56(sp) # 8-byte Folded Spill
826c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 48(sp) # 8-byte Folded Spill
827c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 40(sp) # 8-byte Folded Spill
828c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs4, 32(sp) # 8-byte Folded Spill
829c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs5, 24(sp) # 8-byte Folded Spill
830c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs6, 16(sp) # 8-byte Folded Spill
831c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill
832c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
833c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8
834c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12
835c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16
836c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20
837c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s4, -24
838c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s5, -28
839c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s6, -32
840c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s7, -36
841c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -48
842c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -56
843c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -64
844c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -72
845c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs4, -80
846c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs5, -88
847c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs6, -96
848c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs7, -104
849c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    mv s0, a0
850c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)
851c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)
852c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)
853c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a4, 12(a1)
854c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0
855c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a2
856c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs4, a3
857c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs5, a4
858c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a0, 16(a1)
859c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a2, 20(a1)
860c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a3, 24(a1)
861c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a1, 28(a1)
862c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs6, a0
863c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs7, a2
864c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs3, a3
865c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1
866c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
867c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0
868c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs3
869c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
870c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
871c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
872c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0
873c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs7
874c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
875c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
876c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
877c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs7, fa0
878c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs6
879c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
880c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
881c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
882c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs6, fa0
883c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs5
884c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
885c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
886c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
887c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs5, fa0
888c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs4
889c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
890c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
891c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
892c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs4, fa0
893c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2
894c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
895c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
896c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
897c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0
898c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0
899c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
900c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
901c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
902c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0
903c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs2
904c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs4
905c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s4, fs5
906c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s5, fs6
907c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s6, fs7
908c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs1, fs1
909c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s7, fs3
910c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
911c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0
912c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s5, 8(s0)
913c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s6, 10(s0)
914c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s7, 12(s0)
915c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh a0, 14(s0)
916c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)
917c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)
918c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)
919c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s4, 6(s0)
920c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 108(sp) # 4-byte Folded Reload
921c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s0, 104(sp) # 4-byte Folded Reload
922c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s1, 100(sp) # 4-byte Folded Reload
923c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s2, 96(sp) # 4-byte Folded Reload
924c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s3, 92(sp) # 4-byte Folded Reload
925c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s4, 88(sp) # 4-byte Folded Reload
926c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s5, 84(sp) # 4-byte Folded Reload
927c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s6, 80(sp) # 4-byte Folded Reload
928c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s7, 76(sp) # 4-byte Folded Reload
929c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs0, 64(sp) # 8-byte Folded Reload
930c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs1, 56(sp) # 8-byte Folded Reload
931c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs2, 48(sp) # 8-byte Folded Reload
932c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs3, 40(sp) # 8-byte Folded Reload
933c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs4, 32(sp) # 8-byte Folded Reload
934c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs5, 24(sp) # 8-byte Folded Reload
935c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs6, 16(sp) # 8-byte Folded Reload
936c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload
937*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
938*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0
939*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1
940*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2
941*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3
942*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s4
943*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s5
944*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s6
945*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s7
946*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0
947*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1
948*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2
949*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3
950*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs4
951*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs5
952*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs6
953*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs7
954c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 112
955*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
956c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
957c01ddbe9SYunQiang Su  %z = call <8 x half> @llvm.canonicalize.v8f16(<8 x half> %x)
958c01ddbe9SYunQiang Su  ret <8 x half> %z
959c01ddbe9SYunQiang Su}
960c01ddbe9SYunQiang Su
961c01ddbe9SYunQiang Sudefine <8 x half> @fcanonicalize_v8f16_nnan(<8 x half> %x) {
962c01ddbe9SYunQiang Su; CHECK-FP16-RV64-LABEL: fcanonicalize_v8f16_nnan:
963c01ddbe9SYunQiang Su; CHECK-FP16-RV64:       # %bb.0:
964c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0
965c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1
966c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2
967c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3
968c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa4, fa4
969c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa5, fa5
970c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h ft0, fa6, fa6
971c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fmin.h ft1, fa7, fa7
972c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa4, 8(a0)
973c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa5, 10(a0)
974c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh ft0, 12(a0)
975c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh ft1, 14(a0)
976c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa0, 0(a0)
977c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa1, 2(a0)
978c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)
979c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)
980c01ddbe9SYunQiang Su; CHECK-FP16-RV64-NEXT:    ret
981c01ddbe9SYunQiang Su;
982c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v8f16_nnan:
983c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64:       # %bb.0:
984c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -128
985c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 128
986c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
987c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
988c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
989c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
990c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
991c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
992c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
993c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
994c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
995c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
996c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
997c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
998c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
999c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
1000c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
1001c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
1002c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8
1003c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16
1004c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24
1005c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32
1006c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40
1007c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s4, -48
1008c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s5, -56
1009c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s6, -64
1010c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s7, -72
1011c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -80
1012c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -88
1013c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -96
1014c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs3, -104
1015c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs4, -112
1016c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs5, -120
1017c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs6, -128
1018c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)
1019c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)
1020c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)
1021c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s4, 24(a1)
1022c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s5, 32(a1)
1023c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s6, 40(a1)
1024c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu s7, 48(a1)
1025c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    lhu a1, 56(a1)
1026c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    mv s0, a0
1027c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1
1028c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1029c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0
1030c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s7
1031c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1032c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1033c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1034c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0
1035c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s6
1036c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1037c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1038c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1039c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0
1040c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s5
1041c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1042c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1043c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1044c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs3, fa0
1045c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s4
1046c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1047c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1048c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1049c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs4, fa0
1050c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3
1051c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1052c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1053c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1054c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs5, fa0
1055c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2
1056c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1057c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1058c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1059c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.s fs6, fa0
1060c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1
1061c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2
1062c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0
1063c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1064c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0
1065c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs6
1066c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs5
1067c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s4, fs4
1068c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s5, fs3
1069c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s6, fs2
1070c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0
1071c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s7, fs1
1072c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2
1073c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0
1074c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s5, 8(s0)
1075c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s6, 10(s0)
1076c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s7, 12(s0)
1077c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh a0, 14(s0)
1078c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)
1079c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)
1080c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)
1081c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    sh s4, 6(s0)
1082c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
1083c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
1084c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
1085c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
1086c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
1087c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
1088c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
1089c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
1090c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
1091c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
1092c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
1093c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
1094c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
1095c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
1096c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
1097c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
1098*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra
1099*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0
1100*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1
1101*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2
1102*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3
1103*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s4
1104*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s5
1105*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s6
1106*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s7
1107*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0
1108*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1
1109*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2
1110*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs3
1111*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs4
1112*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs5
1113*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs6
1114c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 128
1115*97982a8cSdlav-sc; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0
1116c01ddbe9SYunQiang Su; CHECK-NOFP16-RV64-NEXT:    ret
1117c01ddbe9SYunQiang Su;
1118c01ddbe9SYunQiang Su; CHECK-FP16-RV32-LABEL: fcanonicalize_v8f16_nnan:
1119c01ddbe9SYunQiang Su; CHECK-FP16-RV32:       # %bb.0:
1120c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0
1121c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1
1122c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2
1123c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3
1124c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa4, fa4
1125c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa5, fa5
1126c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h ft0, fa6, fa6
1127c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fmin.h ft1, fa7, fa7
1128c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa4, 8(a0)
1129c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa5, 10(a0)
1130c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh ft0, 12(a0)
1131c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh ft1, 14(a0)
1132c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa0, 0(a0)
1133c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa1, 2(a0)
1134c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)
1135c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)
1136c01ddbe9SYunQiang Su; CHECK-FP16-RV32-NEXT:    ret
1137c01ddbe9SYunQiang Su;
1138c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v8f16_nnan:
1139c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32:       # %bb.0:
1140c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -112
1141c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 112
1142c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw ra, 108(sp) # 4-byte Folded Spill
1143c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s0, 104(sp) # 4-byte Folded Spill
1144c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s1, 100(sp) # 4-byte Folded Spill
1145c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s2, 96(sp) # 4-byte Folded Spill
1146c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s3, 92(sp) # 4-byte Folded Spill
1147c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s4, 88(sp) # 4-byte Folded Spill
1148c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s5, 84(sp) # 4-byte Folded Spill
1149c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s6, 80(sp) # 4-byte Folded Spill
1150c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sw s7, 76(sp) # 4-byte Folded Spill
1151c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 64(sp) # 8-byte Folded Spill
1152c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 56(sp) # 8-byte Folded Spill
1153c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 48(sp) # 8-byte Folded Spill
1154c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 40(sp) # 8-byte Folded Spill
1155c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs4, 32(sp) # 8-byte Folded Spill
1156c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs5, 24(sp) # 8-byte Folded Spill
1157c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs6, 16(sp) # 8-byte Folded Spill
1158c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill
1159c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4
1160c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8
1161c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12
1162c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16
1163c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20
1164c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s4, -24
1165c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s5, -28
1166c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s6, -32
1167c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s7, -36
1168c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -48
1169c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -56
1170c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -64
1171c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -72
1172c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs4, -80
1173c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs5, -88
1174c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs6, -96
1175c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs7, -104
1176c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    mv s0, a0
1177c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)
1178c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)
1179c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)
1180c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a4, 12(a1)
1181c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0
1182c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a2
1183c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs4, a3
1184c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs5, a4
1185c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a0, 16(a1)
1186c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a2, 20(a1)
1187c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a3, 24(a1)
1188c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lhu a1, 28(a1)
1189c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs6, a0
1190c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs7, a2
1191c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs3, a3
1192c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1
1193c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1194c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0
1195c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs3
1196c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1197c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1198c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1199c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0
1200c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs7
1201c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1202c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1203c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1204c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs7, fa0
1205c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs6
1206c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1207c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1208c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1209c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs6, fa0
1210c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs5
1211c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1212c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1213c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1214c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs5, fa0
1215c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs4
1216c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1217c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1218c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1219c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs4, fa0
1220c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2
1221c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1222c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1223c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1224c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0
1225c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0
1226c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2
1227c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0
1228c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1229c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0
1230c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs2
1231c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs4
1232c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s4, fs5
1233c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s5, fs6
1234c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s6, fs7
1235c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs1, fs1
1236c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s7, fs3
1237c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2
1238c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0
1239c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s5, 8(s0)
1240c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s6, 10(s0)
1241c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s7, 12(s0)
1242c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh a0, 14(s0)
1243c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)
1244c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)
1245c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)
1246c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    sh s4, 6(s0)
1247c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw ra, 108(sp) # 4-byte Folded Reload
1248c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s0, 104(sp) # 4-byte Folded Reload
1249c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s1, 100(sp) # 4-byte Folded Reload
1250c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s2, 96(sp) # 4-byte Folded Reload
1251c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s3, 92(sp) # 4-byte Folded Reload
1252c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s4, 88(sp) # 4-byte Folded Reload
1253c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s5, 84(sp) # 4-byte Folded Reload
1254c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s6, 80(sp) # 4-byte Folded Reload
1255c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    lw s7, 76(sp) # 4-byte Folded Reload
1256c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs0, 64(sp) # 8-byte Folded Reload
1257c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs1, 56(sp) # 8-byte Folded Reload
1258c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs2, 48(sp) # 8-byte Folded Reload
1259c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs3, 40(sp) # 8-byte Folded Reload
1260c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs4, 32(sp) # 8-byte Folded Reload
1261c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs5, 24(sp) # 8-byte Folded Reload
1262c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs6, 16(sp) # 8-byte Folded Reload
1263c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload
1264*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra
1265*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0
1266*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1
1267*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2
1268*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3
1269*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s4
1270*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s5
1271*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s6
1272*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s7
1273*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0
1274*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1
1275*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2
1276*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3
1277*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs4
1278*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs5
1279*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs6
1280*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs7
1281c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 112
1282*97982a8cSdlav-sc; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0
1283c01ddbe9SYunQiang Su; CHECK-NOFP16-RV32-NEXT:    ret
1284c01ddbe9SYunQiang Su  %z = call nnan <8 x half> @llvm.canonicalize.v8f16(<8 x half> %x)
1285c01ddbe9SYunQiang Su  ret <8 x half> %z
1286c01ddbe9SYunQiang Su}
1287c01ddbe9SYunQiang Su
1288c01ddbe9SYunQiang Sudefine float @fcanonicalize_f32(float %x) {
1289c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_f32:
1290c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1291c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa0, fa0, fa0
1292c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1293c01ddbe9SYunQiang Su  %z = call float @llvm.canonicalize.f32(float %x)
1294c01ddbe9SYunQiang Su  ret float %z
1295c01ddbe9SYunQiang Su}
1296c01ddbe9SYunQiang Su
1297c01ddbe9SYunQiang Sudefine float @fcanonicalize_f32_nnan(float %x) {
1298c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_f32_nnan:
1299c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1300c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa0, fa0, fa0
1301c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1302c01ddbe9SYunQiang Su  %z = call nnan float @llvm.canonicalize.f32(float %x)
1303c01ddbe9SYunQiang Su  ret float %z
1304c01ddbe9SYunQiang Su}
1305c01ddbe9SYunQiang Su
1306c01ddbe9SYunQiang Sudefine <2 x float> @fcanonicalize_v2f32(<2 x float> %x) {
1307c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_v2f32:
1308c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1309c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa0, fa0, fa0
1310c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa1, fa1, fa1
1311c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1312c01ddbe9SYunQiang Su  %z = call <2 x float> @llvm.canonicalize.v2f32(<2 x float> %x)
1313c01ddbe9SYunQiang Su  ret <2 x float> %z
1314c01ddbe9SYunQiang Su}
1315c01ddbe9SYunQiang Su
1316c01ddbe9SYunQiang Sudefine <2 x float> @fcanonicalize_v2f32_nnan(<2 x float> %x) {
1317c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_v2f32_nnan:
1318c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1319c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa0, fa0, fa0
1320c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa1, fa1, fa1
1321c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1322c01ddbe9SYunQiang Su  %z = call nnan <2 x float> @llvm.canonicalize.v2f32(<2 x float> %x)
1323c01ddbe9SYunQiang Su  ret <2 x float> %z
1324c01ddbe9SYunQiang Su}
1325c01ddbe9SYunQiang Su
1326c01ddbe9SYunQiang Sudefine <4 x float> @fcanonicalize_v4f32(<4 x float> %x) {
1327c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_v4f32:
1328c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1329c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa5, fa0, fa0
1330c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa4, fa1, fa1
1331c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa2, fa2, fa2
1332c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa3, fa3, fa3
1333c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa5, 0(a0)
1334c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa4, 4(a0)
1335c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa2, 8(a0)
1336c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa3, 12(a0)
1337c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1338c01ddbe9SYunQiang Su  %z = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %x)
1339c01ddbe9SYunQiang Su  ret <4 x float> %z
1340c01ddbe9SYunQiang Su}
1341c01ddbe9SYunQiang Su
1342c01ddbe9SYunQiang Sudefine <4 x float> @fcanonicalize_v4f32_nnan(<4 x float> %x) {
1343c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_v4f32_nnan:
1344c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1345c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa5, fa0, fa0
1346c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa4, fa1, fa1
1347c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa2, fa2, fa2
1348c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.s fa3, fa3, fa3
1349c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa5, 0(a0)
1350c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa4, 4(a0)
1351c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa2, 8(a0)
1352c01ddbe9SYunQiang Su; CHECK-NEXT:    fsw fa3, 12(a0)
1353c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1354c01ddbe9SYunQiang Su  %z = call nnan <4 x float> @llvm.canonicalize.v4f32(<4 x float> %x)
1355c01ddbe9SYunQiang Su  ret <4 x float> %z
1356c01ddbe9SYunQiang Su}
1357c01ddbe9SYunQiang Su
1358c01ddbe9SYunQiang Sudefine double @fcanonicalize_f64(double %x) {
1359c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_f64:
1360c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1361c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.d fa0, fa0, fa0
1362c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1363c01ddbe9SYunQiang Su  %z = call double @llvm.canonicalize.f64(double %x)
1364c01ddbe9SYunQiang Su  ret double %z
1365c01ddbe9SYunQiang Su}
1366c01ddbe9SYunQiang Su
1367c01ddbe9SYunQiang Sudefine double @fcanonicalize_f64_nnan(double %x) {
1368c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_f64_nnan:
1369c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1370c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.d fa0, fa0, fa0
1371c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1372c01ddbe9SYunQiang Su  %z = call nnan double @llvm.canonicalize.f64(double %x)
1373c01ddbe9SYunQiang Su  ret double %z
1374c01ddbe9SYunQiang Su}
1375c01ddbe9SYunQiang Su
1376c01ddbe9SYunQiang Sudefine <2 x double> @fcanonicalize_v2f64(<2 x double> %x) {
1377c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_v2f64:
1378c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1379c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.d fa0, fa0, fa0
1380c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.d fa1, fa1, fa1
1381c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1382c01ddbe9SYunQiang Su  %z = call <2 x double> @llvm.canonicalize.v2f64(<2 x double> %x)
1383c01ddbe9SYunQiang Su  ret <2 x double> %z
1384c01ddbe9SYunQiang Su}
1385c01ddbe9SYunQiang Su
1386c01ddbe9SYunQiang Sudefine <2 x double> @fcanonicalize_v2f64_nnan(<2 x double> %x) {
1387c01ddbe9SYunQiang Su; CHECK-LABEL: fcanonicalize_v2f64_nnan:
1388c01ddbe9SYunQiang Su; CHECK:       # %bb.0:
1389c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.d fa0, fa0, fa0
1390c01ddbe9SYunQiang Su; CHECK-NEXT:    fmin.d fa1, fa1, fa1
1391c01ddbe9SYunQiang Su; CHECK-NEXT:    ret
1392c01ddbe9SYunQiang Su  %z = call nnan <2 x double> @llvm.canonicalize.v2f64(<2 x double> %x)
1393c01ddbe9SYunQiang Su  ret <2 x double> %z
1394c01ddbe9SYunQiang Su}
1395