brintos

brintos / llvm-project-archived public Read only

0
0
Text · 63.4 KiB · 1f55a47 Raw
1391 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; FIXME: @llvm.canonicalize doesn't support soft-float abi yet.3; RUN: llc --mtriple=riscv64 --mattr=+d,+zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-FP16-RV644; RUN: llc --mtriple=riscv64 --mattr=+d,-zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16-RV645; RUN: llc --mtriple=riscv32 --mattr=+d,+zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-FP16-RV326; RUN: llc --mtriple=riscv32 --mattr=+d,-zfh < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16-RV327 8define half @fcanonicalize_f16(half %x) {9; CHECK-FP16-RV64-LABEL: fcanonicalize_f16:10; CHECK-FP16-RV64:       # %bb.0:11; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa012; CHECK-FP16-RV64-NEXT:    ret13;14; CHECK-NOFP16-RV64-LABEL: fcanonicalize_f16:15; CHECK-NOFP16-RV64:       # %bb.0:16; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -1617; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 1618; CHECK-NOFP16-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill19; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -820; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf221; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa022; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf223; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa024; CHECK-NOFP16-RV64-NEXT:    lui a1, 104856025; CHECK-NOFP16-RV64-NEXT:    or a0, a0, a126; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a027; CHECK-NOFP16-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload28; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra29; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 1630; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 031; CHECK-NOFP16-RV64-NEXT:    ret32;33; CHECK-FP16-RV32-LABEL: fcanonicalize_f16:34; CHECK-FP16-RV32:       # %bb.0:35; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa036; CHECK-FP16-RV32-NEXT:    ret37;38; CHECK-NOFP16-RV32-LABEL: fcanonicalize_f16:39; CHECK-NOFP16-RV32:       # %bb.0:40; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -1641; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 1642; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill43; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -444; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf245; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa046; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf247; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa048; CHECK-NOFP16-RV32-NEXT:    lui a1, 104856049; CHECK-NOFP16-RV32-NEXT:    or a0, a0, a150; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a051; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload52; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra53; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 1654; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 055; CHECK-NOFP16-RV32-NEXT:    ret56  %z = call half @llvm.canonicalize.f16(half %x)57  ret half %z58}59 60define half @fcanonicalize_f16_nnan(half %x) {61; CHECK-FP16-RV64-LABEL: fcanonicalize_f16_nnan:62; CHECK-FP16-RV64:       # %bb.0:63; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa064; CHECK-FP16-RV64-NEXT:    ret65;66; CHECK-NOFP16-RV64-LABEL: fcanonicalize_f16_nnan:67; CHECK-NOFP16-RV64:       # %bb.0:68; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -1669; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 1670; CHECK-NOFP16-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill71; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -872; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf273; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa074; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf275; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa076; CHECK-NOFP16-RV64-NEXT:    lui a1, 104856077; CHECK-NOFP16-RV64-NEXT:    or a0, a0, a178; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a079; CHECK-NOFP16-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload80; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra81; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 1682; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 083; CHECK-NOFP16-RV64-NEXT:    ret84;85; CHECK-FP16-RV32-LABEL: fcanonicalize_f16_nnan:86; CHECK-FP16-RV32:       # %bb.0:87; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa088; CHECK-FP16-RV32-NEXT:    ret89;90; CHECK-NOFP16-RV32-LABEL: fcanonicalize_f16_nnan:91; CHECK-NOFP16-RV32:       # %bb.0:92; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -1693; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 1694; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill95; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -496; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf297; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa098; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf299; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0100; CHECK-NOFP16-RV32-NEXT:    lui a1, 1048560101; CHECK-NOFP16-RV32-NEXT:    or a0, a0, a1102; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0103; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload104; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra105; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16106; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0107; CHECK-NOFP16-RV32-NEXT:    ret108  %z = call nnan half @llvm.canonicalize.f16(half %x)109  ret half %z110}111 112define <2 x half> @fcanonicalize_v2f16(<2 x half> %x) {113; CHECK-FP16-RV64-LABEL: fcanonicalize_v2f16:114; CHECK-FP16-RV64:       # %bb.0:115; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0116; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1117; CHECK-FP16-RV64-NEXT:    ret118;119; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v2f16:120; CHECK-NOFP16-RV64:       # %bb.0:121; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -32122; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 32123; CHECK-NOFP16-RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill124; CHECK-NOFP16-RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill125; CHECK-NOFP16-RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill126; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8127; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16128; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24129; CHECK-NOFP16-RV64-NEXT:    mv s0, a1130; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a0131; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2132; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0133; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2134; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0135; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s0136; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2137; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0138; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2139; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a1, fa0140; CHECK-NOFP16-RV64-NEXT:    mv a0, s1141; CHECK-NOFP16-RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload142; CHECK-NOFP16-RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload143; CHECK-NOFP16-RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload144; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra145; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0146; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1147; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 32148; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0149; CHECK-NOFP16-RV64-NEXT:    ret150;151; CHECK-FP16-RV32-LABEL: fcanonicalize_v2f16:152; CHECK-FP16-RV32:       # %bb.0:153; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0154; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1155; CHECK-FP16-RV32-NEXT:    ret156;157; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v2f16:158; CHECK-NOFP16-RV32:       # %bb.0:159; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -16160; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 16161; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill162; CHECK-NOFP16-RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill163; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill164; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4165; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8166; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -16167; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a1168; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0169; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2170; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0171; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2172; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s0, fa0173; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0174; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2175; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0176; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2177; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a1, fa0178; CHECK-NOFP16-RV32-NEXT:    mv a0, s0179; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload180; CHECK-NOFP16-RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload181; CHECK-NOFP16-RV32-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload182; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra183; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0184; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0185; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16186; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0187; CHECK-NOFP16-RV32-NEXT:    ret188  %z = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %x)189  ret <2 x half> %z190}191 192define <2 x half> @fcanonicalize_v2f16_nnan(<2 x half> %x) {193; CHECK-FP16-RV64-LABEL: fcanonicalize_v2f16_nnan:194; CHECK-FP16-RV64:       # %bb.0:195; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0196; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1197; CHECK-FP16-RV64-NEXT:    ret198;199; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v2f16_nnan:200; CHECK-NOFP16-RV64:       # %bb.0:201; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -32202; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 32203; CHECK-NOFP16-RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill204; CHECK-NOFP16-RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill205; CHECK-NOFP16-RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill206; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8207; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16208; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24209; CHECK-NOFP16-RV64-NEXT:    mv s0, a1210; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a0211; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2212; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0213; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2214; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0215; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s0216; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2217; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0218; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2219; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a1, fa0220; CHECK-NOFP16-RV64-NEXT:    mv a0, s1221; CHECK-NOFP16-RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload222; CHECK-NOFP16-RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload223; CHECK-NOFP16-RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload224; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra225; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0226; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1227; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 32228; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0229; CHECK-NOFP16-RV64-NEXT:    ret230;231; CHECK-FP16-RV32-LABEL: fcanonicalize_v2f16_nnan:232; CHECK-FP16-RV32:       # %bb.0:233; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0234; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1235; CHECK-FP16-RV32-NEXT:    ret236;237; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v2f16_nnan:238; CHECK-NOFP16-RV32:       # %bb.0:239; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -16240; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 16241; CHECK-NOFP16-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill242; CHECK-NOFP16-RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill243; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill244; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4245; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8246; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -16247; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a1248; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a0249; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2250; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0251; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2252; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s0, fa0253; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0254; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2255; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0256; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2257; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a1, fa0258; CHECK-NOFP16-RV32-NEXT:    mv a0, s0259; CHECK-NOFP16-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload260; CHECK-NOFP16-RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload261; CHECK-NOFP16-RV32-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload262; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra263; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0264; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0265; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 16266; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0267; CHECK-NOFP16-RV32-NEXT:    ret268  %z = call nnan <2 x half> @llvm.canonicalize.v2f16(<2 x half> %x)269  ret <2 x half> %z270}271 272define <4 x half> @fcanonicalize_v4f16(<4 x half> %x) {273; CHECK-FP16-RV64-LABEL: fcanonicalize_v4f16:274; CHECK-FP16-RV64:       # %bb.0:275; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa0, fa0276; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa1, fa1277; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2278; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3279; CHECK-FP16-RV64-NEXT:    fsh fa5, 0(a0)280; CHECK-FP16-RV64-NEXT:    fsh fa4, 2(a0)281; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)282; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)283; CHECK-FP16-RV64-NEXT:    ret284;285; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v4f16:286; CHECK-NOFP16-RV64:       # %bb.0:287; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -64288; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 64289; CHECK-NOFP16-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill290; CHECK-NOFP16-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill291; CHECK-NOFP16-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill292; CHECK-NOFP16-RV64-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill293; CHECK-NOFP16-RV64-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill294; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill295; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill296; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill297; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8298; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16299; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24300; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32301; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40302; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -48303; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -56304; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -64305; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)306; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)307; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)308; CHECK-NOFP16-RV64-NEXT:    lhu a1, 24(a1)309; CHECK-NOFP16-RV64-NEXT:    mv s0, a0310; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1311; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2312; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0313; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3314; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2315; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0316; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2317; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0318; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2319; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2320; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0321; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2322; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0323; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1324; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2325; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0326; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2327; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0328; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs2329; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0330; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs1331; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2332; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0333; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)334; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)335; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)336; CHECK-NOFP16-RV64-NEXT:    sh a0, 6(s0)337; CHECK-NOFP16-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload338; CHECK-NOFP16-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload339; CHECK-NOFP16-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload340; CHECK-NOFP16-RV64-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload341; CHECK-NOFP16-RV64-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload342; CHECK-NOFP16-RV64-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload343; CHECK-NOFP16-RV64-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload344; CHECK-NOFP16-RV64-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload345; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra346; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0347; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1348; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2349; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3350; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0351; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1352; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2353; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 64354; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0355; CHECK-NOFP16-RV64-NEXT:    ret356;357; CHECK-FP16-RV32-LABEL: fcanonicalize_v4f16:358; CHECK-FP16-RV32:       # %bb.0:359; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa0, fa0360; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa1, fa1361; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2362; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3363; CHECK-FP16-RV32-NEXT:    fsh fa5, 0(a0)364; CHECK-FP16-RV32-NEXT:    fsh fa4, 2(a0)365; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)366; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)367; CHECK-FP16-RV32-NEXT:    ret368;369; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v4f16:370; CHECK-NOFP16-RV32:       # %bb.0:371; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -64372; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 64373; CHECK-NOFP16-RV32-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill374; CHECK-NOFP16-RV32-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill375; CHECK-NOFP16-RV32-NEXT:    sw s1, 52(sp) # 4-byte Folded Spill376; CHECK-NOFP16-RV32-NEXT:    sw s2, 48(sp) # 4-byte Folded Spill377; CHECK-NOFP16-RV32-NEXT:    sw s3, 44(sp) # 4-byte Folded Spill378; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 32(sp) # 8-byte Folded Spill379; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 24(sp) # 8-byte Folded Spill380; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 16(sp) # 8-byte Folded Spill381; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill382; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4383; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8384; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12385; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16386; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20387; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -32388; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -40389; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -48390; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -56391; CHECK-NOFP16-RV32-NEXT:    mv s0, a0392; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)393; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)394; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)395; CHECK-NOFP16-RV32-NEXT:    lhu a1, 12(a1)396; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0397; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs1, a2398; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a3399; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1400; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2401; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0402; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2403; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2404; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0405; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2406; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0407; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs1408; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2409; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0410; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2411; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0412; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0413; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2414; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0415; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2416; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0417; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs1418; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs3, fs3419; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs2420; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2421; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0422; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)423; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)424; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)425; CHECK-NOFP16-RV32-NEXT:    sh a0, 6(s0)426; CHECK-NOFP16-RV32-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload427; CHECK-NOFP16-RV32-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload428; CHECK-NOFP16-RV32-NEXT:    lw s1, 52(sp) # 4-byte Folded Reload429; CHECK-NOFP16-RV32-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload430; CHECK-NOFP16-RV32-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload431; CHECK-NOFP16-RV32-NEXT:    fld fs0, 32(sp) # 8-byte Folded Reload432; CHECK-NOFP16-RV32-NEXT:    fld fs1, 24(sp) # 8-byte Folded Reload433; CHECK-NOFP16-RV32-NEXT:    fld fs2, 16(sp) # 8-byte Folded Reload434; CHECK-NOFP16-RV32-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload435; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra436; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0437; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1438; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2439; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3440; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0441; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1442; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2443; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3444; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 64445; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0446; CHECK-NOFP16-RV32-NEXT:    ret447  %z = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %x)448  ret <4 x half> %z449}450 451define <4 x half> @fcanonicalize_v4f16_nnan(<4 x half> %x) {452; CHECK-FP16-RV64-LABEL: fcanonicalize_v4f16_nnan:453; CHECK-FP16-RV64:       # %bb.0:454; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa0, fa0455; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa1, fa1456; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2457; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3458; CHECK-FP16-RV64-NEXT:    fsh fa5, 0(a0)459; CHECK-FP16-RV64-NEXT:    fsh fa4, 2(a0)460; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)461; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)462; CHECK-FP16-RV64-NEXT:    ret463;464; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v4f16_nnan:465; CHECK-NOFP16-RV64:       # %bb.0:466; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -64467; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 64468; CHECK-NOFP16-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill469; CHECK-NOFP16-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill470; CHECK-NOFP16-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill471; CHECK-NOFP16-RV64-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill472; CHECK-NOFP16-RV64-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill473; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill474; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill475; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill476; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8477; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16478; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24479; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32480; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40481; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -48482; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -56483; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -64484; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)485; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)486; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)487; CHECK-NOFP16-RV64-NEXT:    lhu a1, 24(a1)488; CHECK-NOFP16-RV64-NEXT:    mv s0, a0489; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1490; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2491; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0492; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3493; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2494; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0495; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2496; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0497; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2498; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2499; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0500; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2501; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0502; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1503; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2504; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0505; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2506; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0507; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs2508; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0509; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs1510; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2511; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0512; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)513; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)514; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)515; CHECK-NOFP16-RV64-NEXT:    sh a0, 6(s0)516; CHECK-NOFP16-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload517; CHECK-NOFP16-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload518; CHECK-NOFP16-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload519; CHECK-NOFP16-RV64-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload520; CHECK-NOFP16-RV64-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload521; CHECK-NOFP16-RV64-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload522; CHECK-NOFP16-RV64-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload523; CHECK-NOFP16-RV64-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload524; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra525; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0526; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1527; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2528; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3529; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0530; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1531; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2532; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 64533; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0534; CHECK-NOFP16-RV64-NEXT:    ret535;536; CHECK-FP16-RV32-LABEL: fcanonicalize_v4f16_nnan:537; CHECK-FP16-RV32:       # %bb.0:538; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa0, fa0539; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa1, fa1540; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2541; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3542; CHECK-FP16-RV32-NEXT:    fsh fa5, 0(a0)543; CHECK-FP16-RV32-NEXT:    fsh fa4, 2(a0)544; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)545; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)546; CHECK-FP16-RV32-NEXT:    ret547;548; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v4f16_nnan:549; CHECK-NOFP16-RV32:       # %bb.0:550; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -64551; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 64552; CHECK-NOFP16-RV32-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill553; CHECK-NOFP16-RV32-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill554; CHECK-NOFP16-RV32-NEXT:    sw s1, 52(sp) # 4-byte Folded Spill555; CHECK-NOFP16-RV32-NEXT:    sw s2, 48(sp) # 4-byte Folded Spill556; CHECK-NOFP16-RV32-NEXT:    sw s3, 44(sp) # 4-byte Folded Spill557; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 32(sp) # 8-byte Folded Spill558; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 24(sp) # 8-byte Folded Spill559; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 16(sp) # 8-byte Folded Spill560; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill561; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4562; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8563; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12564; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16565; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20566; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -32567; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -40568; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -48569; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -56570; CHECK-NOFP16-RV32-NEXT:    mv s0, a0571; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)572; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)573; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)574; CHECK-NOFP16-RV32-NEXT:    lhu a1, 12(a1)575; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0576; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs1, a2577; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a3578; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1579; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2580; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0581; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2582; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2583; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0584; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2585; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0586; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs1587; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2588; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0589; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2590; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0591; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0592; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2593; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0594; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2595; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0596; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs1597; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs3, fs3598; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs2599; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2600; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0601; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)602; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)603; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)604; CHECK-NOFP16-RV32-NEXT:    sh a0, 6(s0)605; CHECK-NOFP16-RV32-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload606; CHECK-NOFP16-RV32-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload607; CHECK-NOFP16-RV32-NEXT:    lw s1, 52(sp) # 4-byte Folded Reload608; CHECK-NOFP16-RV32-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload609; CHECK-NOFP16-RV32-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload610; CHECK-NOFP16-RV32-NEXT:    fld fs0, 32(sp) # 8-byte Folded Reload611; CHECK-NOFP16-RV32-NEXT:    fld fs1, 24(sp) # 8-byte Folded Reload612; CHECK-NOFP16-RV32-NEXT:    fld fs2, 16(sp) # 8-byte Folded Reload613; CHECK-NOFP16-RV32-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload614; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra615; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0616; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1617; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2618; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3619; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0620; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1621; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2622; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3623; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 64624; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0625; CHECK-NOFP16-RV32-NEXT:    ret626  %z = call nnan <4 x half> @llvm.canonicalize.v4f16(<4 x half> %x)627  ret <4 x half> %z628}629 630define <8 x half> @fcanonicalize_v8f16(<8 x half> %x) {631; CHECK-FP16-RV64-LABEL: fcanonicalize_v8f16:632; CHECK-FP16-RV64:       # %bb.0:633; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0634; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1635; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2636; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3637; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa4, fa4638; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa5, fa5639; CHECK-FP16-RV64-NEXT:    fmin.h ft0, fa6, fa6640; CHECK-FP16-RV64-NEXT:    fmin.h ft1, fa7, fa7641; CHECK-FP16-RV64-NEXT:    fsh fa4, 8(a0)642; CHECK-FP16-RV64-NEXT:    fsh fa5, 10(a0)643; CHECK-FP16-RV64-NEXT:    fsh ft0, 12(a0)644; CHECK-FP16-RV64-NEXT:    fsh ft1, 14(a0)645; CHECK-FP16-RV64-NEXT:    fsh fa0, 0(a0)646; CHECK-FP16-RV64-NEXT:    fsh fa1, 2(a0)647; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)648; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)649; CHECK-FP16-RV64-NEXT:    ret650;651; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v8f16:652; CHECK-NOFP16-RV64:       # %bb.0:653; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -128654; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 128655; CHECK-NOFP16-RV64-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill656; CHECK-NOFP16-RV64-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill657; CHECK-NOFP16-RV64-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill658; CHECK-NOFP16-RV64-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill659; CHECK-NOFP16-RV64-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill660; CHECK-NOFP16-RV64-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill661; CHECK-NOFP16-RV64-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill662; CHECK-NOFP16-RV64-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill663; CHECK-NOFP16-RV64-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill664; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill665; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill666; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill667; CHECK-NOFP16-RV64-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill668; CHECK-NOFP16-RV64-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill669; CHECK-NOFP16-RV64-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill670; CHECK-NOFP16-RV64-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill671; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8672; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -16673; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -24674; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -32675; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -40676; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s4, -48677; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s5, -56678; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s6, -64679; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s7, -72680; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -80681; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -88682; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -96683; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs3, -104684; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs4, -112685; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs5, -120686; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs6, -128687; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)688; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)689; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)690; CHECK-NOFP16-RV64-NEXT:    lhu s4, 24(a1)691; CHECK-NOFP16-RV64-NEXT:    lhu s5, 32(a1)692; CHECK-NOFP16-RV64-NEXT:    lhu s6, 40(a1)693; CHECK-NOFP16-RV64-NEXT:    lhu s7, 48(a1)694; CHECK-NOFP16-RV64-NEXT:    lhu a1, 56(a1)695; CHECK-NOFP16-RV64-NEXT:    mv s0, a0696; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a1697; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2698; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa0699; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s7700; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2701; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0702; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2703; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa0704; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s6705; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2706; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0707; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2708; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa0709; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s5710; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2711; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0712; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2713; CHECK-NOFP16-RV64-NEXT:    fmv.s fs3, fa0714; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s4715; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2716; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0717; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2718; CHECK-NOFP16-RV64-NEXT:    fmv.s fs4, fa0719; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s3720; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2721; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0722; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2723; CHECK-NOFP16-RV64-NEXT:    fmv.s fs5, fa0724; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s2725; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2726; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0727; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2728; CHECK-NOFP16-RV64-NEXT:    fmv.s fs6, fa0729; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s1730; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf2731; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa0732; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2733; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa0734; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs6735; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs5736; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s4, fs4737; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s5, fs3738; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s6, fs2739; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs0740; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s7, fs1741; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf2742; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa0743; CHECK-NOFP16-RV64-NEXT:    sh s5, 8(s0)744; CHECK-NOFP16-RV64-NEXT:    sh s6, 10(s0)745; CHECK-NOFP16-RV64-NEXT:    sh s7, 12(s0)746; CHECK-NOFP16-RV64-NEXT:    sh a0, 14(s0)747; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)748; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)749; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)750; CHECK-NOFP16-RV64-NEXT:    sh s4, 6(s0)751; CHECK-NOFP16-RV64-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload752; CHECK-NOFP16-RV64-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload753; CHECK-NOFP16-RV64-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload754; CHECK-NOFP16-RV64-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload755; CHECK-NOFP16-RV64-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload756; CHECK-NOFP16-RV64-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload757; CHECK-NOFP16-RV64-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload758; CHECK-NOFP16-RV64-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload759; CHECK-NOFP16-RV64-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload760; CHECK-NOFP16-RV64-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload761; CHECK-NOFP16-RV64-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload762; CHECK-NOFP16-RV64-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload763; CHECK-NOFP16-RV64-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload764; CHECK-NOFP16-RV64-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload765; CHECK-NOFP16-RV64-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload766; CHECK-NOFP16-RV64-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload767; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra768; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s0769; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s1770; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s2771; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s3772; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s4773; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s5774; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s6775; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s7776; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs0777; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs1778; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs2779; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs3780; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs4781; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs5782; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs6783; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 128784; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 0785; CHECK-NOFP16-RV64-NEXT:    ret786;787; CHECK-FP16-RV32-LABEL: fcanonicalize_v8f16:788; CHECK-FP16-RV32:       # %bb.0:789; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa0790; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa1791; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa2792; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa3793; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa4, fa4794; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa5, fa5795; CHECK-FP16-RV32-NEXT:    fmin.h ft0, fa6, fa6796; CHECK-FP16-RV32-NEXT:    fmin.h ft1, fa7, fa7797; CHECK-FP16-RV32-NEXT:    fsh fa4, 8(a0)798; CHECK-FP16-RV32-NEXT:    fsh fa5, 10(a0)799; CHECK-FP16-RV32-NEXT:    fsh ft0, 12(a0)800; CHECK-FP16-RV32-NEXT:    fsh ft1, 14(a0)801; CHECK-FP16-RV32-NEXT:    fsh fa0, 0(a0)802; CHECK-FP16-RV32-NEXT:    fsh fa1, 2(a0)803; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)804; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)805; CHECK-FP16-RV32-NEXT:    ret806;807; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v8f16:808; CHECK-NOFP16-RV32:       # %bb.0:809; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -112810; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 112811; CHECK-NOFP16-RV32-NEXT:    sw ra, 108(sp) # 4-byte Folded Spill812; CHECK-NOFP16-RV32-NEXT:    sw s0, 104(sp) # 4-byte Folded Spill813; CHECK-NOFP16-RV32-NEXT:    sw s1, 100(sp) # 4-byte Folded Spill814; CHECK-NOFP16-RV32-NEXT:    sw s2, 96(sp) # 4-byte Folded Spill815; CHECK-NOFP16-RV32-NEXT:    sw s3, 92(sp) # 4-byte Folded Spill816; CHECK-NOFP16-RV32-NEXT:    sw s4, 88(sp) # 4-byte Folded Spill817; CHECK-NOFP16-RV32-NEXT:    sw s5, 84(sp) # 4-byte Folded Spill818; CHECK-NOFP16-RV32-NEXT:    sw s6, 80(sp) # 4-byte Folded Spill819; CHECK-NOFP16-RV32-NEXT:    sw s7, 76(sp) # 4-byte Folded Spill820; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 64(sp) # 8-byte Folded Spill821; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 56(sp) # 8-byte Folded Spill822; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 48(sp) # 8-byte Folded Spill823; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 40(sp) # 8-byte Folded Spill824; CHECK-NOFP16-RV32-NEXT:    fsd fs4, 32(sp) # 8-byte Folded Spill825; CHECK-NOFP16-RV32-NEXT:    fsd fs5, 24(sp) # 8-byte Folded Spill826; CHECK-NOFP16-RV32-NEXT:    fsd fs6, 16(sp) # 8-byte Folded Spill827; CHECK-NOFP16-RV32-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill828; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -4829; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -8830; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -12831; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -16832; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -20833; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s4, -24834; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s5, -28835; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s6, -32836; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s7, -36837; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -48838; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -56839; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -64840; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -72841; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs4, -80842; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs5, -88843; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs6, -96844; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs7, -104845; CHECK-NOFP16-RV32-NEXT:    mv s0, a0846; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)847; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)848; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)849; CHECK-NOFP16-RV32-NEXT:    lhu a4, 12(a1)850; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a0851; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a2852; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs4, a3853; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs5, a4854; CHECK-NOFP16-RV32-NEXT:    lhu a0, 16(a1)855; CHECK-NOFP16-RV32-NEXT:    lhu a2, 20(a1)856; CHECK-NOFP16-RV32-NEXT:    lhu a3, 24(a1)857; CHECK-NOFP16-RV32-NEXT:    lhu a1, 28(a1)858; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs6, a0859; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs7, a2860; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs3, a3861; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a1862; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2863; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa0864; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs3865; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2866; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0867; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2868; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa0869; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs7870; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2871; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0872; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2873; CHECK-NOFP16-RV32-NEXT:    fmv.s fs7, fa0874; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs6875; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2876; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0877; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2878; CHECK-NOFP16-RV32-NEXT:    fmv.s fs6, fa0879; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs5880; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2881; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0882; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2883; CHECK-NOFP16-RV32-NEXT:    fmv.s fs5, fa0884; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs4885; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2886; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0887; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2888; CHECK-NOFP16-RV32-NEXT:    fmv.s fs4, fa0889; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs2890; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2891; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0892; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2893; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa0894; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs0895; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf2896; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa0897; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2898; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa0899; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs2900; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs4901; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s4, fs5902; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s5, fs6903; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s6, fs7904; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs1, fs1905; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s7, fs3906; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf2907; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa0908; CHECK-NOFP16-RV32-NEXT:    sh s5, 8(s0)909; CHECK-NOFP16-RV32-NEXT:    sh s6, 10(s0)910; CHECK-NOFP16-RV32-NEXT:    sh s7, 12(s0)911; CHECK-NOFP16-RV32-NEXT:    sh a0, 14(s0)912; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)913; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)914; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)915; CHECK-NOFP16-RV32-NEXT:    sh s4, 6(s0)916; CHECK-NOFP16-RV32-NEXT:    lw ra, 108(sp) # 4-byte Folded Reload917; CHECK-NOFP16-RV32-NEXT:    lw s0, 104(sp) # 4-byte Folded Reload918; CHECK-NOFP16-RV32-NEXT:    lw s1, 100(sp) # 4-byte Folded Reload919; CHECK-NOFP16-RV32-NEXT:    lw s2, 96(sp) # 4-byte Folded Reload920; CHECK-NOFP16-RV32-NEXT:    lw s3, 92(sp) # 4-byte Folded Reload921; CHECK-NOFP16-RV32-NEXT:    lw s4, 88(sp) # 4-byte Folded Reload922; CHECK-NOFP16-RV32-NEXT:    lw s5, 84(sp) # 4-byte Folded Reload923; CHECK-NOFP16-RV32-NEXT:    lw s6, 80(sp) # 4-byte Folded Reload924; CHECK-NOFP16-RV32-NEXT:    lw s7, 76(sp) # 4-byte Folded Reload925; CHECK-NOFP16-RV32-NEXT:    fld fs0, 64(sp) # 8-byte Folded Reload926; CHECK-NOFP16-RV32-NEXT:    fld fs1, 56(sp) # 8-byte Folded Reload927; CHECK-NOFP16-RV32-NEXT:    fld fs2, 48(sp) # 8-byte Folded Reload928; CHECK-NOFP16-RV32-NEXT:    fld fs3, 40(sp) # 8-byte Folded Reload929; CHECK-NOFP16-RV32-NEXT:    fld fs4, 32(sp) # 8-byte Folded Reload930; CHECK-NOFP16-RV32-NEXT:    fld fs5, 24(sp) # 8-byte Folded Reload931; CHECK-NOFP16-RV32-NEXT:    fld fs6, 16(sp) # 8-byte Folded Reload932; CHECK-NOFP16-RV32-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload933; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra934; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s0935; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s1936; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s2937; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s3938; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s4939; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s5940; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s6941; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s7942; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs0943; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs1944; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs2945; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs3946; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs4947; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs5948; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs6949; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs7950; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 112951; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 0952; CHECK-NOFP16-RV32-NEXT:    ret953  %z = call <8 x half> @llvm.canonicalize.v8f16(<8 x half> %x)954  ret <8 x half> %z955}956 957define <8 x half> @fcanonicalize_v8f16_nnan(<8 x half> %x) {958; CHECK-FP16-RV64-LABEL: fcanonicalize_v8f16_nnan:959; CHECK-FP16-RV64:       # %bb.0:960; CHECK-FP16-RV64-NEXT:    fmin.h fa0, fa0, fa0961; CHECK-FP16-RV64-NEXT:    fmin.h fa1, fa1, fa1962; CHECK-FP16-RV64-NEXT:    fmin.h fa2, fa2, fa2963; CHECK-FP16-RV64-NEXT:    fmin.h fa3, fa3, fa3964; CHECK-FP16-RV64-NEXT:    fmin.h fa4, fa4, fa4965; CHECK-FP16-RV64-NEXT:    fmin.h fa5, fa5, fa5966; CHECK-FP16-RV64-NEXT:    fmin.h ft0, fa6, fa6967; CHECK-FP16-RV64-NEXT:    fmin.h ft1, fa7, fa7968; CHECK-FP16-RV64-NEXT:    fsh fa4, 8(a0)969; CHECK-FP16-RV64-NEXT:    fsh fa5, 10(a0)970; CHECK-FP16-RV64-NEXT:    fsh ft0, 12(a0)971; CHECK-FP16-RV64-NEXT:    fsh ft1, 14(a0)972; CHECK-FP16-RV64-NEXT:    fsh fa0, 0(a0)973; CHECK-FP16-RV64-NEXT:    fsh fa1, 2(a0)974; CHECK-FP16-RV64-NEXT:    fsh fa2, 4(a0)975; CHECK-FP16-RV64-NEXT:    fsh fa3, 6(a0)976; CHECK-FP16-RV64-NEXT:    ret977;978; CHECK-NOFP16-RV64-LABEL: fcanonicalize_v8f16_nnan:979; CHECK-NOFP16-RV64:       # %bb.0:980; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, -128981; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 128982; CHECK-NOFP16-RV64-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill983; CHECK-NOFP16-RV64-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill984; CHECK-NOFP16-RV64-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill985; CHECK-NOFP16-RV64-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill986; CHECK-NOFP16-RV64-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill987; CHECK-NOFP16-RV64-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill988; CHECK-NOFP16-RV64-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill989; CHECK-NOFP16-RV64-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill990; CHECK-NOFP16-RV64-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill991; CHECK-NOFP16-RV64-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill992; CHECK-NOFP16-RV64-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill993; CHECK-NOFP16-RV64-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill994; CHECK-NOFP16-RV64-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill995; CHECK-NOFP16-RV64-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill996; CHECK-NOFP16-RV64-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill997; CHECK-NOFP16-RV64-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill998; CHECK-NOFP16-RV64-NEXT:    .cfi_offset ra, -8999; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s0, -161000; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s1, -241001; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s2, -321002; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s3, -401003; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s4, -481004; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s5, -561005; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s6, -641006; CHECK-NOFP16-RV64-NEXT:    .cfi_offset s7, -721007; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs0, -801008; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs1, -881009; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs2, -961010; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs3, -1041011; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs4, -1121012; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs5, -1201013; CHECK-NOFP16-RV64-NEXT:    .cfi_offset fs6, -1281014; CHECK-NOFP16-RV64-NEXT:    lhu s1, 0(a1)1015; CHECK-NOFP16-RV64-NEXT:    lhu s2, 8(a1)1016; CHECK-NOFP16-RV64-NEXT:    lhu s3, 16(a1)1017; CHECK-NOFP16-RV64-NEXT:    lhu s4, 24(a1)1018; CHECK-NOFP16-RV64-NEXT:    lhu s5, 32(a1)1019; CHECK-NOFP16-RV64-NEXT:    lhu s6, 40(a1)1020; CHECK-NOFP16-RV64-NEXT:    lhu s7, 48(a1)1021; CHECK-NOFP16-RV64-NEXT:    lhu a1, 56(a1)1022; CHECK-NOFP16-RV64-NEXT:    mv s0, a01023; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, a11024; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21025; CHECK-NOFP16-RV64-NEXT:    fmv.s fs0, fa01026; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s71027; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21028; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01029; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21030; CHECK-NOFP16-RV64-NEXT:    fmv.s fs1, fa01031; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s61032; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21033; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01034; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21035; CHECK-NOFP16-RV64-NEXT:    fmv.s fs2, fa01036; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s51037; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21038; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01039; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21040; CHECK-NOFP16-RV64-NEXT:    fmv.s fs3, fa01041; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s41042; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21043; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01044; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21045; CHECK-NOFP16-RV64-NEXT:    fmv.s fs4, fa01046; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s31047; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21048; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01049; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21050; CHECK-NOFP16-RV64-NEXT:    fmv.s fs5, fa01051; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s21052; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21053; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01054; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21055; CHECK-NOFP16-RV64-NEXT:    fmv.s fs6, fa01056; CHECK-NOFP16-RV64-NEXT:    fmv.w.x fa0, s11057; CHECK-NOFP16-RV64-NEXT:    call __extendhfsf21058; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fa0, fa01059; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21060; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s1, fa01061; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s2, fs61062; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s3, fs51063; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s4, fs41064; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s5, fs31065; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s6, fs21066; CHECK-NOFP16-RV64-NEXT:    fmin.s fa0, fs0, fs01067; CHECK-NOFP16-RV64-NEXT:    fmv.x.w s7, fs11068; CHECK-NOFP16-RV64-NEXT:    call __truncsfhf21069; CHECK-NOFP16-RV64-NEXT:    fmv.x.w a0, fa01070; CHECK-NOFP16-RV64-NEXT:    sh s5, 8(s0)1071; CHECK-NOFP16-RV64-NEXT:    sh s6, 10(s0)1072; CHECK-NOFP16-RV64-NEXT:    sh s7, 12(s0)1073; CHECK-NOFP16-RV64-NEXT:    sh a0, 14(s0)1074; CHECK-NOFP16-RV64-NEXT:    sh s1, 0(s0)1075; CHECK-NOFP16-RV64-NEXT:    sh s2, 2(s0)1076; CHECK-NOFP16-RV64-NEXT:    sh s3, 4(s0)1077; CHECK-NOFP16-RV64-NEXT:    sh s4, 6(s0)1078; CHECK-NOFP16-RV64-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload1079; CHECK-NOFP16-RV64-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload1080; CHECK-NOFP16-RV64-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload1081; CHECK-NOFP16-RV64-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload1082; CHECK-NOFP16-RV64-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload1083; CHECK-NOFP16-RV64-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload1084; CHECK-NOFP16-RV64-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload1085; CHECK-NOFP16-RV64-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload1086; CHECK-NOFP16-RV64-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload1087; CHECK-NOFP16-RV64-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload1088; CHECK-NOFP16-RV64-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload1089; CHECK-NOFP16-RV64-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload1090; CHECK-NOFP16-RV64-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload1091; CHECK-NOFP16-RV64-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload1092; CHECK-NOFP16-RV64-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload1093; CHECK-NOFP16-RV64-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload1094; CHECK-NOFP16-RV64-NEXT:    .cfi_restore ra1095; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s01096; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s11097; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s21098; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s31099; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s41100; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s51101; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s61102; CHECK-NOFP16-RV64-NEXT:    .cfi_restore s71103; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs01104; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs11105; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs21106; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs31107; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs41108; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs51109; CHECK-NOFP16-RV64-NEXT:    .cfi_restore fs61110; CHECK-NOFP16-RV64-NEXT:    addi sp, sp, 1281111; CHECK-NOFP16-RV64-NEXT:    .cfi_def_cfa_offset 01112; CHECK-NOFP16-RV64-NEXT:    ret1113;1114; CHECK-FP16-RV32-LABEL: fcanonicalize_v8f16_nnan:1115; CHECK-FP16-RV32:       # %bb.0:1116; CHECK-FP16-RV32-NEXT:    fmin.h fa0, fa0, fa01117; CHECK-FP16-RV32-NEXT:    fmin.h fa1, fa1, fa11118; CHECK-FP16-RV32-NEXT:    fmin.h fa2, fa2, fa21119; CHECK-FP16-RV32-NEXT:    fmin.h fa3, fa3, fa31120; CHECK-FP16-RV32-NEXT:    fmin.h fa4, fa4, fa41121; CHECK-FP16-RV32-NEXT:    fmin.h fa5, fa5, fa51122; CHECK-FP16-RV32-NEXT:    fmin.h ft0, fa6, fa61123; CHECK-FP16-RV32-NEXT:    fmin.h ft1, fa7, fa71124; CHECK-FP16-RV32-NEXT:    fsh fa4, 8(a0)1125; CHECK-FP16-RV32-NEXT:    fsh fa5, 10(a0)1126; CHECK-FP16-RV32-NEXT:    fsh ft0, 12(a0)1127; CHECK-FP16-RV32-NEXT:    fsh ft1, 14(a0)1128; CHECK-FP16-RV32-NEXT:    fsh fa0, 0(a0)1129; CHECK-FP16-RV32-NEXT:    fsh fa1, 2(a0)1130; CHECK-FP16-RV32-NEXT:    fsh fa2, 4(a0)1131; CHECK-FP16-RV32-NEXT:    fsh fa3, 6(a0)1132; CHECK-FP16-RV32-NEXT:    ret1133;1134; CHECK-NOFP16-RV32-LABEL: fcanonicalize_v8f16_nnan:1135; CHECK-NOFP16-RV32:       # %bb.0:1136; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, -1121137; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 1121138; CHECK-NOFP16-RV32-NEXT:    sw ra, 108(sp) # 4-byte Folded Spill1139; CHECK-NOFP16-RV32-NEXT:    sw s0, 104(sp) # 4-byte Folded Spill1140; CHECK-NOFP16-RV32-NEXT:    sw s1, 100(sp) # 4-byte Folded Spill1141; CHECK-NOFP16-RV32-NEXT:    sw s2, 96(sp) # 4-byte Folded Spill1142; CHECK-NOFP16-RV32-NEXT:    sw s3, 92(sp) # 4-byte Folded Spill1143; CHECK-NOFP16-RV32-NEXT:    sw s4, 88(sp) # 4-byte Folded Spill1144; CHECK-NOFP16-RV32-NEXT:    sw s5, 84(sp) # 4-byte Folded Spill1145; CHECK-NOFP16-RV32-NEXT:    sw s6, 80(sp) # 4-byte Folded Spill1146; CHECK-NOFP16-RV32-NEXT:    sw s7, 76(sp) # 4-byte Folded Spill1147; CHECK-NOFP16-RV32-NEXT:    fsd fs0, 64(sp) # 8-byte Folded Spill1148; CHECK-NOFP16-RV32-NEXT:    fsd fs1, 56(sp) # 8-byte Folded Spill1149; CHECK-NOFP16-RV32-NEXT:    fsd fs2, 48(sp) # 8-byte Folded Spill1150; CHECK-NOFP16-RV32-NEXT:    fsd fs3, 40(sp) # 8-byte Folded Spill1151; CHECK-NOFP16-RV32-NEXT:    fsd fs4, 32(sp) # 8-byte Folded Spill1152; CHECK-NOFP16-RV32-NEXT:    fsd fs5, 24(sp) # 8-byte Folded Spill1153; CHECK-NOFP16-RV32-NEXT:    fsd fs6, 16(sp) # 8-byte Folded Spill1154; CHECK-NOFP16-RV32-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill1155; CHECK-NOFP16-RV32-NEXT:    .cfi_offset ra, -41156; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s0, -81157; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s1, -121158; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s2, -161159; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s3, -201160; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s4, -241161; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s5, -281162; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s6, -321163; CHECK-NOFP16-RV32-NEXT:    .cfi_offset s7, -361164; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs0, -481165; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs1, -561166; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs2, -641167; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs3, -721168; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs4, -801169; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs5, -881170; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs6, -961171; CHECK-NOFP16-RV32-NEXT:    .cfi_offset fs7, -1041172; CHECK-NOFP16-RV32-NEXT:    mv s0, a01173; CHECK-NOFP16-RV32-NEXT:    lhu a0, 0(a1)1174; CHECK-NOFP16-RV32-NEXT:    lhu a2, 4(a1)1175; CHECK-NOFP16-RV32-NEXT:    lhu a3, 8(a1)1176; CHECK-NOFP16-RV32-NEXT:    lhu a4, 12(a1)1177; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs0, a01178; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs2, a21179; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs4, a31180; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs5, a41181; CHECK-NOFP16-RV32-NEXT:    lhu a0, 16(a1)1182; CHECK-NOFP16-RV32-NEXT:    lhu a2, 20(a1)1183; CHECK-NOFP16-RV32-NEXT:    lhu a3, 24(a1)1184; CHECK-NOFP16-RV32-NEXT:    lhu a1, 28(a1)1185; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs6, a01186; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs7, a21187; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fs3, a31188; CHECK-NOFP16-RV32-NEXT:    fmv.w.x fa0, a11189; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21190; CHECK-NOFP16-RV32-NEXT:    fmv.s fs1, fa01191; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs31192; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21193; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01194; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21195; CHECK-NOFP16-RV32-NEXT:    fmv.s fs3, fa01196; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs71197; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21198; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01199; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21200; CHECK-NOFP16-RV32-NEXT:    fmv.s fs7, fa01201; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs61202; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21203; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01204; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21205; CHECK-NOFP16-RV32-NEXT:    fmv.s fs6, fa01206; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs51207; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21208; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01209; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21210; CHECK-NOFP16-RV32-NEXT:    fmv.s fs5, fa01211; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs41212; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21213; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01214; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21215; CHECK-NOFP16-RV32-NEXT:    fmv.s fs4, fa01216; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs21217; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21218; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01219; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21220; CHECK-NOFP16-RV32-NEXT:    fmv.s fs2, fa01221; CHECK-NOFP16-RV32-NEXT:    fmv.s fa0, fs01222; CHECK-NOFP16-RV32-NEXT:    call __extendhfsf21223; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fa0, fa01224; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21225; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s1, fa01226; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s2, fs21227; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s3, fs41228; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s4, fs51229; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s5, fs61230; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s6, fs71231; CHECK-NOFP16-RV32-NEXT:    fmin.s fa0, fs1, fs11232; CHECK-NOFP16-RV32-NEXT:    fmv.x.w s7, fs31233; CHECK-NOFP16-RV32-NEXT:    call __truncsfhf21234; CHECK-NOFP16-RV32-NEXT:    fmv.x.w a0, fa01235; CHECK-NOFP16-RV32-NEXT:    sh s5, 8(s0)1236; CHECK-NOFP16-RV32-NEXT:    sh s6, 10(s0)1237; CHECK-NOFP16-RV32-NEXT:    sh s7, 12(s0)1238; CHECK-NOFP16-RV32-NEXT:    sh a0, 14(s0)1239; CHECK-NOFP16-RV32-NEXT:    sh s1, 0(s0)1240; CHECK-NOFP16-RV32-NEXT:    sh s2, 2(s0)1241; CHECK-NOFP16-RV32-NEXT:    sh s3, 4(s0)1242; CHECK-NOFP16-RV32-NEXT:    sh s4, 6(s0)1243; CHECK-NOFP16-RV32-NEXT:    lw ra, 108(sp) # 4-byte Folded Reload1244; CHECK-NOFP16-RV32-NEXT:    lw s0, 104(sp) # 4-byte Folded Reload1245; CHECK-NOFP16-RV32-NEXT:    lw s1, 100(sp) # 4-byte Folded Reload1246; CHECK-NOFP16-RV32-NEXT:    lw s2, 96(sp) # 4-byte Folded Reload1247; CHECK-NOFP16-RV32-NEXT:    lw s3, 92(sp) # 4-byte Folded Reload1248; CHECK-NOFP16-RV32-NEXT:    lw s4, 88(sp) # 4-byte Folded Reload1249; CHECK-NOFP16-RV32-NEXT:    lw s5, 84(sp) # 4-byte Folded Reload1250; CHECK-NOFP16-RV32-NEXT:    lw s6, 80(sp) # 4-byte Folded Reload1251; CHECK-NOFP16-RV32-NEXT:    lw s7, 76(sp) # 4-byte Folded Reload1252; CHECK-NOFP16-RV32-NEXT:    fld fs0, 64(sp) # 8-byte Folded Reload1253; CHECK-NOFP16-RV32-NEXT:    fld fs1, 56(sp) # 8-byte Folded Reload1254; CHECK-NOFP16-RV32-NEXT:    fld fs2, 48(sp) # 8-byte Folded Reload1255; CHECK-NOFP16-RV32-NEXT:    fld fs3, 40(sp) # 8-byte Folded Reload1256; CHECK-NOFP16-RV32-NEXT:    fld fs4, 32(sp) # 8-byte Folded Reload1257; CHECK-NOFP16-RV32-NEXT:    fld fs5, 24(sp) # 8-byte Folded Reload1258; CHECK-NOFP16-RV32-NEXT:    fld fs6, 16(sp) # 8-byte Folded Reload1259; CHECK-NOFP16-RV32-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload1260; CHECK-NOFP16-RV32-NEXT:    .cfi_restore ra1261; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s01262; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s11263; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s21264; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s31265; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s41266; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s51267; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s61268; CHECK-NOFP16-RV32-NEXT:    .cfi_restore s71269; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs01270; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs11271; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs21272; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs31273; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs41274; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs51275; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs61276; CHECK-NOFP16-RV32-NEXT:    .cfi_restore fs71277; CHECK-NOFP16-RV32-NEXT:    addi sp, sp, 1121278; CHECK-NOFP16-RV32-NEXT:    .cfi_def_cfa_offset 01279; CHECK-NOFP16-RV32-NEXT:    ret1280  %z = call nnan <8 x half> @llvm.canonicalize.v8f16(<8 x half> %x)1281  ret <8 x half> %z1282}1283 1284define float @fcanonicalize_f32(float %x) {1285; CHECK-LABEL: fcanonicalize_f32:1286; CHECK:       # %bb.0:1287; CHECK-NEXT:    fmin.s fa0, fa0, fa01288; CHECK-NEXT:    ret1289  %z = call float @llvm.canonicalize.f32(float %x)1290  ret float %z1291}1292 1293define float @fcanonicalize_f32_nnan(float %x) {1294; CHECK-LABEL: fcanonicalize_f32_nnan:1295; CHECK:       # %bb.0:1296; CHECK-NEXT:    fmin.s fa0, fa0, fa01297; CHECK-NEXT:    ret1298  %z = call nnan float @llvm.canonicalize.f32(float %x)1299  ret float %z1300}1301 1302define <2 x float> @fcanonicalize_v2f32(<2 x float> %x) {1303; CHECK-LABEL: fcanonicalize_v2f32:1304; CHECK:       # %bb.0:1305; CHECK-NEXT:    fmin.s fa0, fa0, fa01306; CHECK-NEXT:    fmin.s fa1, fa1, fa11307; CHECK-NEXT:    ret1308  %z = call <2 x float> @llvm.canonicalize.v2f32(<2 x float> %x)1309  ret <2 x float> %z1310}1311 1312define <2 x float> @fcanonicalize_v2f32_nnan(<2 x float> %x) {1313; CHECK-LABEL: fcanonicalize_v2f32_nnan:1314; CHECK:       # %bb.0:1315; CHECK-NEXT:    fmin.s fa0, fa0, fa01316; CHECK-NEXT:    fmin.s fa1, fa1, fa11317; CHECK-NEXT:    ret1318  %z = call nnan <2 x float> @llvm.canonicalize.v2f32(<2 x float> %x)1319  ret <2 x float> %z1320}1321 1322define <4 x float> @fcanonicalize_v4f32(<4 x float> %x) {1323; CHECK-LABEL: fcanonicalize_v4f32:1324; CHECK:       # %bb.0:1325; CHECK-NEXT:    fmin.s fa5, fa0, fa01326; CHECK-NEXT:    fmin.s fa4, fa1, fa11327; CHECK-NEXT:    fmin.s fa2, fa2, fa21328; CHECK-NEXT:    fmin.s fa3, fa3, fa31329; CHECK-NEXT:    fsw fa5, 0(a0)1330; CHECK-NEXT:    fsw fa4, 4(a0)1331; CHECK-NEXT:    fsw fa2, 8(a0)1332; CHECK-NEXT:    fsw fa3, 12(a0)1333; CHECK-NEXT:    ret1334  %z = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %x)1335  ret <4 x float> %z1336}1337 1338define <4 x float> @fcanonicalize_v4f32_nnan(<4 x float> %x) {1339; CHECK-LABEL: fcanonicalize_v4f32_nnan:1340; CHECK:       # %bb.0:1341; CHECK-NEXT:    fmin.s fa5, fa0, fa01342; CHECK-NEXT:    fmin.s fa4, fa1, fa11343; CHECK-NEXT:    fmin.s fa2, fa2, fa21344; CHECK-NEXT:    fmin.s fa3, fa3, fa31345; CHECK-NEXT:    fsw fa5, 0(a0)1346; CHECK-NEXT:    fsw fa4, 4(a0)1347; CHECK-NEXT:    fsw fa2, 8(a0)1348; CHECK-NEXT:    fsw fa3, 12(a0)1349; CHECK-NEXT:    ret1350  %z = call nnan <4 x float> @llvm.canonicalize.v4f32(<4 x float> %x)1351  ret <4 x float> %z1352}1353 1354define double @fcanonicalize_f64(double %x) {1355; CHECK-LABEL: fcanonicalize_f64:1356; CHECK:       # %bb.0:1357; CHECK-NEXT:    fmin.d fa0, fa0, fa01358; CHECK-NEXT:    ret1359  %z = call double @llvm.canonicalize.f64(double %x)1360  ret double %z1361}1362 1363define double @fcanonicalize_f64_nnan(double %x) {1364; CHECK-LABEL: fcanonicalize_f64_nnan:1365; CHECK:       # %bb.0:1366; CHECK-NEXT:    fmin.d fa0, fa0, fa01367; CHECK-NEXT:    ret1368  %z = call nnan double @llvm.canonicalize.f64(double %x)1369  ret double %z1370}1371 1372define <2 x double> @fcanonicalize_v2f64(<2 x double> %x) {1373; CHECK-LABEL: fcanonicalize_v2f64:1374; CHECK:       # %bb.0:1375; CHECK-NEXT:    fmin.d fa0, fa0, fa01376; CHECK-NEXT:    fmin.d fa1, fa1, fa11377; CHECK-NEXT:    ret1378  %z = call <2 x double> @llvm.canonicalize.v2f64(<2 x double> %x)1379  ret <2 x double> %z1380}1381 1382define <2 x double> @fcanonicalize_v2f64_nnan(<2 x double> %x) {1383; CHECK-LABEL: fcanonicalize_v2f64_nnan:1384; CHECK:       # %bb.0:1385; CHECK-NEXT:    fmin.d fa0, fa0, fa01386; CHECK-NEXT:    fmin.d fa1, fa1, fa11387; CHECK-NEXT:    ret1388  %z = call nnan <2 x double> @llvm.canonicalize.v2f64(<2 x double> %x)1389  ret <2 x double> %z1390}1391