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