brintos

brintos / llvm-project-archived public Read only

0
0
Text · 104.9 KiB · 3a3fdbe Raw
2595 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zvfbfmin,+v \3; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \4; RUN:     --check-prefixes=CHECK,ZVFH5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zvfbfmin,+v \6; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \7; RUN:     --check-prefixes=CHECK,ZVFH8; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zvfbfmin,+v \9; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \10; RUN:     --check-prefixes=CHECK,ZVFHMIN11; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zvfbfmin,+v \12; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \13; RUN:     --check-prefixes=CHECK,ZVFHMIN14; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+experimental-zvfbfa,+v \15; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \16; RUN:     --check-prefixes=CHECK,ZVFBFA17; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+experimental-zvfbfa,+v \18; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \19; RUN:     --check-prefixes=CHECK,ZVFBFA20 21define <vscale x 1 x bfloat> @nxv1bf16(<vscale x 1 x bfloat> %vm, <vscale x 1 x bfloat> %vs) {22; ZVFH-LABEL: nxv1bf16:23; ZVFH:       # %bb.0:24; ZVFH-NEXT:    lui a0, 825; ZVFH-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma26; ZVFH-NEXT:    vand.vx v9, v9, a027; ZVFH-NEXT:    addi a0, a0, -128; ZVFH-NEXT:    vand.vx v8, v8, a029; ZVFH-NEXT:    vor.vv v8, v8, v930; ZVFH-NEXT:    ret31;32; ZVFHMIN-LABEL: nxv1bf16:33; ZVFHMIN:       # %bb.0:34; ZVFHMIN-NEXT:    lui a0, 835; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma36; ZVFHMIN-NEXT:    vand.vx v9, v9, a037; ZVFHMIN-NEXT:    addi a0, a0, -138; ZVFHMIN-NEXT:    vand.vx v8, v8, a039; ZVFHMIN-NEXT:    vor.vv v8, v8, v940; ZVFHMIN-NEXT:    ret41;42; ZVFBFA-LABEL: nxv1bf16:43; ZVFBFA:       # %bb.0:44; ZVFBFA-NEXT:    vsetvli a0, zero, e16alt, mf4, ta, ma45; ZVFBFA-NEXT:    vfsgnj.vv v8, v8, v946; ZVFBFA-NEXT:    ret47  %r = call <vscale x 1 x bfloat> @llvm.copysign.nxv1bf16(<vscale x 1 x bfloat> %vm, <vscale x 1 x bfloat> %vs)48  ret <vscale x 1 x bfloat> %r49}50 51define <vscale x 2 x bfloat> @nxv2bf16(<vscale x 2 x bfloat> %vm, <vscale x 2 x bfloat> %vs) {52; ZVFH-LABEL: nxv2bf16:53; ZVFH:       # %bb.0:54; ZVFH-NEXT:    lui a0, 855; ZVFH-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma56; ZVFH-NEXT:    vand.vx v9, v9, a057; ZVFH-NEXT:    addi a0, a0, -158; ZVFH-NEXT:    vand.vx v8, v8, a059; ZVFH-NEXT:    vor.vv v8, v8, v960; ZVFH-NEXT:    ret61;62; ZVFHMIN-LABEL: nxv2bf16:63; ZVFHMIN:       # %bb.0:64; ZVFHMIN-NEXT:    lui a0, 865; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma66; ZVFHMIN-NEXT:    vand.vx v9, v9, a067; ZVFHMIN-NEXT:    addi a0, a0, -168; ZVFHMIN-NEXT:    vand.vx v8, v8, a069; ZVFHMIN-NEXT:    vor.vv v8, v8, v970; ZVFHMIN-NEXT:    ret71;72; ZVFBFA-LABEL: nxv2bf16:73; ZVFBFA:       # %bb.0:74; ZVFBFA-NEXT:    vsetvli a0, zero, e16alt, mf2, ta, ma75; ZVFBFA-NEXT:    vfsgnj.vv v8, v8, v976; ZVFBFA-NEXT:    ret77  %r = call <vscale x 2 x bfloat> @llvm.copysign.nxv2bf16(<vscale x 2 x bfloat> %vm, <vscale x 2 x bfloat> %vs)78  ret <vscale x 2 x bfloat> %r79}80 81define <vscale x 4 x bfloat> @nxv4bf16(<vscale x 4 x bfloat> %vm, <vscale x 4 x bfloat> %vs) {82; ZVFH-LABEL: nxv4bf16:83; ZVFH:       # %bb.0:84; ZVFH-NEXT:    lui a0, 885; ZVFH-NEXT:    vsetvli a1, zero, e16, m1, ta, ma86; ZVFH-NEXT:    vand.vx v9, v9, a087; ZVFH-NEXT:    addi a0, a0, -188; ZVFH-NEXT:    vand.vx v8, v8, a089; ZVFH-NEXT:    vor.vv v8, v8, v990; ZVFH-NEXT:    ret91;92; ZVFHMIN-LABEL: nxv4bf16:93; ZVFHMIN:       # %bb.0:94; ZVFHMIN-NEXT:    lui a0, 895; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma96; ZVFHMIN-NEXT:    vand.vx v9, v9, a097; ZVFHMIN-NEXT:    addi a0, a0, -198; ZVFHMIN-NEXT:    vand.vx v8, v8, a099; ZVFHMIN-NEXT:    vor.vv v8, v8, v9100; ZVFHMIN-NEXT:    ret101;102; ZVFBFA-LABEL: nxv4bf16:103; ZVFBFA:       # %bb.0:104; ZVFBFA-NEXT:    vsetvli a0, zero, e16alt, m1, ta, ma105; ZVFBFA-NEXT:    vfsgnj.vv v8, v8, v9106; ZVFBFA-NEXT:    ret107  %r = call <vscale x 4 x bfloat> @llvm.copysign.nxv4bf16(<vscale x 4 x bfloat> %vm, <vscale x 4 x bfloat> %vs)108  ret <vscale x 4 x bfloat> %r109}110 111define <vscale x 8 x bfloat> @nxv8bf16(<vscale x 8 x bfloat> %vm, <vscale x 8 x bfloat> %vs) {112; ZVFH-LABEL: nxv8bf16:113; ZVFH:       # %bb.0:114; ZVFH-NEXT:    lui a0, 8115; ZVFH-NEXT:    vsetvli a1, zero, e16, m2, ta, ma116; ZVFH-NEXT:    vand.vx v10, v10, a0117; ZVFH-NEXT:    addi a0, a0, -1118; ZVFH-NEXT:    vand.vx v8, v8, a0119; ZVFH-NEXT:    vor.vv v8, v8, v10120; ZVFH-NEXT:    ret121;122; ZVFHMIN-LABEL: nxv8bf16:123; ZVFHMIN:       # %bb.0:124; ZVFHMIN-NEXT:    lui a0, 8125; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma126; ZVFHMIN-NEXT:    vand.vx v10, v10, a0127; ZVFHMIN-NEXT:    addi a0, a0, -1128; ZVFHMIN-NEXT:    vand.vx v8, v8, a0129; ZVFHMIN-NEXT:    vor.vv v8, v8, v10130; ZVFHMIN-NEXT:    ret131;132; ZVFBFA-LABEL: nxv8bf16:133; ZVFBFA:       # %bb.0:134; ZVFBFA-NEXT:    vsetvli a0, zero, e16alt, m2, ta, ma135; ZVFBFA-NEXT:    vfsgnj.vv v8, v8, v10136; ZVFBFA-NEXT:    ret137  %r = call <vscale x 8 x bfloat> @llvm.copysign.nxv8bf16(<vscale x 8 x bfloat> %vm, <vscale x 8 x bfloat> %vs)138  ret <vscale x 8 x bfloat> %r139}140 141define <vscale x 16 x bfloat> @nxv16bf16(<vscale x 16 x bfloat> %vm, <vscale x 16 x bfloat> %vs) {142; ZVFH-LABEL: nxv16bf16:143; ZVFH:       # %bb.0:144; ZVFH-NEXT:    lui a0, 8145; ZVFH-NEXT:    vsetvli a1, zero, e16, m4, ta, ma146; ZVFH-NEXT:    vand.vx v12, v12, a0147; ZVFH-NEXT:    addi a0, a0, -1148; ZVFH-NEXT:    vand.vx v8, v8, a0149; ZVFH-NEXT:    vor.vv v8, v8, v12150; ZVFH-NEXT:    ret151;152; ZVFHMIN-LABEL: nxv16bf16:153; ZVFHMIN:       # %bb.0:154; ZVFHMIN-NEXT:    lui a0, 8155; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma156; ZVFHMIN-NEXT:    vand.vx v12, v12, a0157; ZVFHMIN-NEXT:    addi a0, a0, -1158; ZVFHMIN-NEXT:    vand.vx v8, v8, a0159; ZVFHMIN-NEXT:    vor.vv v8, v8, v12160; ZVFHMIN-NEXT:    ret161;162; ZVFBFA-LABEL: nxv16bf16:163; ZVFBFA:       # %bb.0:164; ZVFBFA-NEXT:    vsetvli a0, zero, e16alt, m4, ta, ma165; ZVFBFA-NEXT:    vfsgnj.vv v8, v8, v12166; ZVFBFA-NEXT:    ret167  %r = call <vscale x 16 x bfloat> @llvm.copysign.nxv16bf16(<vscale x 16 x bfloat> %vm, <vscale x 16 x bfloat> %vs)168  ret <vscale x 16 x bfloat> %r169}170 171define <vscale x 32 x bfloat> @nxv32bf32(<vscale x 32 x bfloat> %vm, <vscale x 32 x bfloat> %vs) {172; ZVFH-LABEL: nxv32bf32:173; ZVFH:       # %bb.0:174; ZVFH-NEXT:    lui a0, 8175; ZVFH-NEXT:    vsetvli a1, zero, e16, m8, ta, ma176; ZVFH-NEXT:    vand.vx v16, v16, a0177; ZVFH-NEXT:    addi a0, a0, -1178; ZVFH-NEXT:    vand.vx v8, v8, a0179; ZVFH-NEXT:    vor.vv v8, v8, v16180; ZVFH-NEXT:    ret181;182; ZVFHMIN-LABEL: nxv32bf32:183; ZVFHMIN:       # %bb.0:184; ZVFHMIN-NEXT:    lui a0, 8185; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma186; ZVFHMIN-NEXT:    vand.vx v16, v16, a0187; ZVFHMIN-NEXT:    addi a0, a0, -1188; ZVFHMIN-NEXT:    vand.vx v8, v8, a0189; ZVFHMIN-NEXT:    vor.vv v8, v8, v16190; ZVFHMIN-NEXT:    ret191;192; ZVFBFA-LABEL: nxv32bf32:193; ZVFBFA:       # %bb.0:194; ZVFBFA-NEXT:    vsetvli a0, zero, e16alt, m8, ta, ma195; ZVFBFA-NEXT:    vfsgnj.vv v8, v8, v16196; ZVFBFA-NEXT:    ret197  %r = call <vscale x 32 x bfloat> @llvm.copysign.nxv32bf32(<vscale x 32 x bfloat> %vm, <vscale x 32 x bfloat> %vs)198  ret <vscale x 32 x bfloat> %r199}200 201define <vscale x 1 x half> @vfcopysign_vv_nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %vs) {202; ZVFH-LABEL: vfcopysign_vv_nxv1f16:203; ZVFH:       # %bb.0:204; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma205; ZVFH-NEXT:    vfsgnj.vv v8, v8, v9206; ZVFH-NEXT:    ret207;208; ZVFHMIN-LABEL: vfcopysign_vv_nxv1f16:209; ZVFHMIN:       # %bb.0:210; ZVFHMIN-NEXT:    lui a0, 8211; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma212; ZVFHMIN-NEXT:    vand.vx v9, v9, a0213; ZVFHMIN-NEXT:    addi a0, a0, -1214; ZVFHMIN-NEXT:    vand.vx v8, v8, a0215; ZVFHMIN-NEXT:    vor.vv v8, v8, v9216; ZVFHMIN-NEXT:    ret217;218; ZVFBFA-LABEL: vfcopysign_vv_nxv1f16:219; ZVFBFA:       # %bb.0:220; ZVFBFA-NEXT:    lui a0, 8221; ZVFBFA-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma222; ZVFBFA-NEXT:    vand.vx v9, v9, a0223; ZVFBFA-NEXT:    addi a0, a0, -1224; ZVFBFA-NEXT:    vand.vx v8, v8, a0225; ZVFBFA-NEXT:    vor.vv v8, v8, v9226; ZVFBFA-NEXT:    ret227  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %vs)228  ret <vscale x 1 x half> %r229}230 231define <vscale x 1 x half> @vfcopysign_vf_nxv1f16(<vscale x 1 x half> %vm, half %s) {232; ZVFH-LABEL: vfcopysign_vf_nxv1f16:233; ZVFH:       # %bb.0:234; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma235; ZVFH-NEXT:    vfsgnj.vf v8, v8, fa0236; ZVFH-NEXT:    ret237;238; ZVFHMIN-LABEL: vfcopysign_vf_nxv1f16:239; ZVFHMIN:       # %bb.0:240; ZVFHMIN-NEXT:    fmv.x.h a0, fa0241; ZVFHMIN-NEXT:    lui a1, 8242; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma243; ZVFHMIN-NEXT:    vmv.v.x v9, a0244; ZVFHMIN-NEXT:    addi a0, a1, -1245; ZVFHMIN-NEXT:    vand.vx v8, v8, a0246; ZVFHMIN-NEXT:    vand.vx v9, v9, a1247; ZVFHMIN-NEXT:    vor.vv v8, v8, v9248; ZVFHMIN-NEXT:    ret249;250; ZVFBFA-LABEL: vfcopysign_vf_nxv1f16:251; ZVFBFA:       # %bb.0:252; ZVFBFA-NEXT:    fmv.x.h a0, fa0253; ZVFBFA-NEXT:    lui a1, 8254; ZVFBFA-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma255; ZVFBFA-NEXT:    vmv.v.x v9, a0256; ZVFBFA-NEXT:    addi a0, a1, -1257; ZVFBFA-NEXT:    vand.vx v8, v8, a0258; ZVFBFA-NEXT:    vand.vx v9, v9, a1259; ZVFBFA-NEXT:    vor.vv v8, v8, v9260; ZVFBFA-NEXT:    ret261  %head = insertelement <vscale x 1 x half> poison, half %s, i32 0262  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer263  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %splat)264  ret <vscale x 1 x half> %r265}266 267define <vscale x 1 x half> @vfcopynsign_vv_nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %vs) {268; ZVFH-LABEL: vfcopynsign_vv_nxv1f16:269; ZVFH:       # %bb.0:270; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma271; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v9272; ZVFH-NEXT:    ret273;274; ZVFHMIN-LABEL: vfcopynsign_vv_nxv1f16:275; ZVFHMIN:       # %bb.0:276; ZVFHMIN-NEXT:    lui a0, 8277; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma278; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0279; ZVFHMIN-NEXT:    vand.vx v9, v9, a0280; ZVFHMIN-NEXT:    addi a0, a0, -1281; ZVFHMIN-NEXT:    vand.vx v8, v8, a0282; ZVFHMIN-NEXT:    vor.vv v8, v8, v9283; ZVFHMIN-NEXT:    ret284;285; ZVFBFA-LABEL: vfcopynsign_vv_nxv1f16:286; ZVFBFA:       # %bb.0:287; ZVFBFA-NEXT:    lui a0, 8288; ZVFBFA-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma289; ZVFBFA-NEXT:    vxor.vx v9, v9, a0290; ZVFBFA-NEXT:    vand.vx v9, v9, a0291; ZVFBFA-NEXT:    addi a0, a0, -1292; ZVFBFA-NEXT:    vand.vx v8, v8, a0293; ZVFBFA-NEXT:    vor.vv v8, v8, v9294; ZVFBFA-NEXT:    ret295  %n = fneg <vscale x 1 x half> %vs296  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %n)297  ret <vscale x 1 x half> %r298}299 300define <vscale x 1 x half> @vfcopynsign_vf_nxv1f16(<vscale x 1 x half> %vm, half %s) {301; ZVFH-LABEL: vfcopynsign_vf_nxv1f16:302; ZVFH:       # %bb.0:303; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma304; ZVFH-NEXT:    vfsgnjn.vf v8, v8, fa0305; ZVFH-NEXT:    ret306;307; ZVFHMIN-LABEL: vfcopynsign_vf_nxv1f16:308; ZVFHMIN:       # %bb.0:309; ZVFHMIN-NEXT:    fmv.x.h a0, fa0310; ZVFHMIN-NEXT:    lui a1, 8311; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma312; ZVFHMIN-NEXT:    vmv.v.x v9, a0313; ZVFHMIN-NEXT:    addi a0, a1, -1314; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1315; ZVFHMIN-NEXT:    vand.vx v8, v8, a0316; ZVFHMIN-NEXT:    vand.vx v9, v9, a1317; ZVFHMIN-NEXT:    vor.vv v8, v8, v9318; ZVFHMIN-NEXT:    ret319;320; ZVFBFA-LABEL: vfcopynsign_vf_nxv1f16:321; ZVFBFA:       # %bb.0:322; ZVFBFA-NEXT:    fmv.x.h a0, fa0323; ZVFBFA-NEXT:    lui a1, 8324; ZVFBFA-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma325; ZVFBFA-NEXT:    vmv.v.x v9, a0326; ZVFBFA-NEXT:    addi a0, a1, -1327; ZVFBFA-NEXT:    vxor.vx v9, v9, a1328; ZVFBFA-NEXT:    vand.vx v8, v8, a0329; ZVFBFA-NEXT:    vand.vx v9, v9, a1330; ZVFBFA-NEXT:    vor.vv v8, v8, v9331; ZVFBFA-NEXT:    ret332  %head = insertelement <vscale x 1 x half> poison, half %s, i32 0333  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer334  %n = fneg <vscale x 1 x half> %splat335  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %n)336  ret <vscale x 1 x half> %r337}338 339define <vscale x 1 x half> @vfcopysign_exttrunc_vv_nxv1f16_nxv1f32(<vscale x 1 x half> %vm, <vscale x 1 x float> %vs) {340; ZVFH-LABEL: vfcopysign_exttrunc_vv_nxv1f16_nxv1f32:341; ZVFH:       # %bb.0:342; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma343; ZVFH-NEXT:    vfncvt.f.f.w v10, v9344; ZVFH-NEXT:    vfsgnj.vv v8, v8, v10345; ZVFH-NEXT:    ret346;347; ZVFHMIN-LABEL: vfcopysign_exttrunc_vv_nxv1f16_nxv1f32:348; ZVFHMIN:       # %bb.0:349; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma350; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9351; ZVFHMIN-NEXT:    lui a0, 8352; ZVFHMIN-NEXT:    vand.vx v9, v10, a0353; ZVFHMIN-NEXT:    addi a0, a0, -1354; ZVFHMIN-NEXT:    vand.vx v8, v8, a0355; ZVFHMIN-NEXT:    vor.vv v8, v8, v9356; ZVFHMIN-NEXT:    ret357;358; ZVFBFA-LABEL: vfcopysign_exttrunc_vv_nxv1f16_nxv1f32:359; ZVFBFA:       # %bb.0:360; ZVFBFA-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma361; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v9362; ZVFBFA-NEXT:    lui a0, 8363; ZVFBFA-NEXT:    vand.vx v9, v10, a0364; ZVFBFA-NEXT:    addi a0, a0, -1365; ZVFBFA-NEXT:    vand.vx v8, v8, a0366; ZVFBFA-NEXT:    vor.vv v8, v8, v9367; ZVFBFA-NEXT:    ret368  %e = fptrunc <vscale x 1 x float> %vs to <vscale x 1 x half>369  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %e)370  ret <vscale x 1 x half> %r371}372 373define <vscale x 1 x half> @vfcopysign_exttrunc_vf_nxv1f16_nxv1f32(<vscale x 1 x half> %vm, float %s) {374; ZVFH-LABEL: vfcopysign_exttrunc_vf_nxv1f16_nxv1f32:375; ZVFH:       # %bb.0:376; ZVFH-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma377; ZVFH-NEXT:    vfmv.v.f v9, fa0378; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma379; ZVFH-NEXT:    vfncvt.f.f.w v10, v9380; ZVFH-NEXT:    vfsgnj.vv v8, v8, v10381; ZVFH-NEXT:    ret382;383; ZVFHMIN-LABEL: vfcopysign_exttrunc_vf_nxv1f16_nxv1f32:384; ZVFHMIN:       # %bb.0:385; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma386; ZVFHMIN-NEXT:    vfmv.v.f v9, fa0387; ZVFHMIN-NEXT:    lui a0, 8388; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma389; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9390; ZVFHMIN-NEXT:    addi a1, a0, -1391; ZVFHMIN-NEXT:    vand.vx v8, v8, a1392; ZVFHMIN-NEXT:    vand.vx v9, v10, a0393; ZVFHMIN-NEXT:    vor.vv v8, v8, v9394; ZVFHMIN-NEXT:    ret395;396; ZVFBFA-LABEL: vfcopysign_exttrunc_vf_nxv1f16_nxv1f32:397; ZVFBFA:       # %bb.0:398; ZVFBFA-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma399; ZVFBFA-NEXT:    vfmv.v.f v9, fa0400; ZVFBFA-NEXT:    lui a0, 8401; ZVFBFA-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma402; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v9403; ZVFBFA-NEXT:    addi a1, a0, -1404; ZVFBFA-NEXT:    vand.vx v8, v8, a1405; ZVFBFA-NEXT:    vand.vx v9, v10, a0406; ZVFBFA-NEXT:    vor.vv v8, v8, v9407; ZVFBFA-NEXT:    ret408  %head = insertelement <vscale x 1 x float> poison, float %s, i32 0409  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer410  %esplat = fptrunc <vscale x 1 x float> %splat to <vscale x 1 x half>411  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %esplat)412  ret <vscale x 1 x half> %r413}414 415define <vscale x 1 x half> @vfcopynsign_exttrunc_vv_nxv1f16_nxv1f32(<vscale x 1 x half> %vm, <vscale x 1 x float> %vs) {416; ZVFH-LABEL: vfcopynsign_exttrunc_vv_nxv1f16_nxv1f32:417; ZVFH:       # %bb.0:418; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma419; ZVFH-NEXT:    vfncvt.f.f.w v10, v9420; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v10421; ZVFH-NEXT:    ret422;423; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vv_nxv1f16_nxv1f32:424; ZVFHMIN:       # %bb.0:425; ZVFHMIN-NEXT:    lui a0, 8426; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma427; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9428; ZVFHMIN-NEXT:    addi a1, a0, -1429; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0430; ZVFHMIN-NEXT:    vand.vx v8, v8, a1431; ZVFHMIN-NEXT:    vand.vx v9, v9, a0432; ZVFHMIN-NEXT:    vor.vv v8, v8, v9433; ZVFHMIN-NEXT:    ret434;435; ZVFBFA-LABEL: vfcopynsign_exttrunc_vv_nxv1f16_nxv1f32:436; ZVFBFA:       # %bb.0:437; ZVFBFA-NEXT:    lui a0, 8438; ZVFBFA-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma439; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v9440; ZVFBFA-NEXT:    addi a1, a0, -1441; ZVFBFA-NEXT:    vxor.vx v9, v10, a0442; ZVFBFA-NEXT:    vand.vx v8, v8, a1443; ZVFBFA-NEXT:    vand.vx v9, v9, a0444; ZVFBFA-NEXT:    vor.vv v8, v8, v9445; ZVFBFA-NEXT:    ret446  %n = fneg <vscale x 1 x float> %vs447  %eneg = fptrunc <vscale x 1 x float> %n to <vscale x 1 x half>448  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %eneg)449  ret <vscale x 1 x half> %r450}451 452define <vscale x 1 x half> @vfcopynsign_exttrunc_vf_nxv1f16_nxv1f32(<vscale x 1 x half> %vm, float %s) {453; ZVFH-LABEL: vfcopynsign_exttrunc_vf_nxv1f16_nxv1f32:454; ZVFH:       # %bb.0:455; ZVFH-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma456; ZVFH-NEXT:    vfmv.v.f v9, fa0457; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma458; ZVFH-NEXT:    vfncvt.f.f.w v10, v9459; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v10460; ZVFH-NEXT:    ret461;462; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vf_nxv1f16_nxv1f32:463; ZVFHMIN:       # %bb.0:464; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma465; ZVFHMIN-NEXT:    vfmv.v.f v9, fa0466; ZVFHMIN-NEXT:    lui a0, 8467; ZVFHMIN-NEXT:    addi a1, a0, -1468; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma469; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9470; ZVFHMIN-NEXT:    vand.vx v8, v8, a1471; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0472; ZVFHMIN-NEXT:    vand.vx v9, v9, a0473; ZVFHMIN-NEXT:    vor.vv v8, v8, v9474; ZVFHMIN-NEXT:    ret475;476; ZVFBFA-LABEL: vfcopynsign_exttrunc_vf_nxv1f16_nxv1f32:477; ZVFBFA:       # %bb.0:478; ZVFBFA-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma479; ZVFBFA-NEXT:    vfmv.v.f v9, fa0480; ZVFBFA-NEXT:    lui a0, 8481; ZVFBFA-NEXT:    addi a1, a0, -1482; ZVFBFA-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma483; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v9484; ZVFBFA-NEXT:    vand.vx v8, v8, a1485; ZVFBFA-NEXT:    vxor.vx v9, v10, a0486; ZVFBFA-NEXT:    vand.vx v9, v9, a0487; ZVFBFA-NEXT:    vor.vv v8, v8, v9488; ZVFBFA-NEXT:    ret489  %head = insertelement <vscale x 1 x float> poison, float %s, i32 0490  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer491  %n = fneg <vscale x 1 x float> %splat492  %eneg = fptrunc <vscale x 1 x float> %n to <vscale x 1 x half>493  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %eneg)494  ret <vscale x 1 x half> %r495}496 497define <vscale x 1 x half> @vfcopysign_exttrunc_vv_nxv1f16_nxv1f64(<vscale x 1 x half> %vm, <vscale x 1 x double> %vs) {498; ZVFH-LABEL: vfcopysign_exttrunc_vv_nxv1f16_nxv1f64:499; ZVFH:       # %bb.0:500; ZVFH-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma501; ZVFH-NEXT:    vfncvt.rod.f.f.w v10, v9502; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma503; ZVFH-NEXT:    vfncvt.f.f.w v9, v10504; ZVFH-NEXT:    vfsgnj.vv v8, v8, v9505; ZVFH-NEXT:    ret506;507; ZVFHMIN-LABEL: vfcopysign_exttrunc_vv_nxv1f16_nxv1f64:508; ZVFHMIN:       # %bb.0:509; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma510; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v10, v9511; ZVFHMIN-NEXT:    lui a0, 8512; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma513; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10514; ZVFHMIN-NEXT:    addi a1, a0, -1515; ZVFHMIN-NEXT:    vand.vx v8, v8, a1516; ZVFHMIN-NEXT:    vand.vx v9, v9, a0517; ZVFHMIN-NEXT:    vor.vv v8, v8, v9518; ZVFHMIN-NEXT:    ret519;520; ZVFBFA-LABEL: vfcopysign_exttrunc_vv_nxv1f16_nxv1f64:521; ZVFBFA:       # %bb.0:522; ZVFBFA-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma523; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v10, v9524; ZVFBFA-NEXT:    lui a0, 8525; ZVFBFA-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma526; ZVFBFA-NEXT:    vfncvt.f.f.w v9, v10527; ZVFBFA-NEXT:    addi a1, a0, -1528; ZVFBFA-NEXT:    vand.vx v8, v8, a1529; ZVFBFA-NEXT:    vand.vx v9, v9, a0530; ZVFBFA-NEXT:    vor.vv v8, v8, v9531; ZVFBFA-NEXT:    ret532  %e = fptrunc <vscale x 1 x double> %vs to <vscale x 1 x half>533  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %e)534  ret <vscale x 1 x half> %r535}536 537define <vscale x 1 x half> @vfcopysign_exttrunc_vf_nxv1f16_nxv1f64(<vscale x 1 x half> %vm, double %s) {538; ZVFH-LABEL: vfcopysign_exttrunc_vf_nxv1f16_nxv1f64:539; ZVFH:       # %bb.0:540; ZVFH-NEXT:    vsetvli a0, zero, e64, m1, ta, ma541; ZVFH-NEXT:    vfmv.v.f v9, fa0542; ZVFH-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma543; ZVFH-NEXT:    vfncvt.rod.f.f.w v10, v9544; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma545; ZVFH-NEXT:    vfncvt.f.f.w v9, v10546; ZVFH-NEXT:    vfsgnj.vv v8, v8, v9547; ZVFH-NEXT:    ret548;549; ZVFHMIN-LABEL: vfcopysign_exttrunc_vf_nxv1f16_nxv1f64:550; ZVFHMIN:       # %bb.0:551; ZVFHMIN-NEXT:    vsetvli a0, zero, e64, m1, ta, ma552; ZVFHMIN-NEXT:    vfmv.v.f v9, fa0553; ZVFHMIN-NEXT:    lui a0, 8554; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma555; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v10, v9556; ZVFHMIN-NEXT:    addi a1, a0, -1557; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma558; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10559; ZVFHMIN-NEXT:    vand.vx v8, v8, a1560; ZVFHMIN-NEXT:    vand.vx v9, v9, a0561; ZVFHMIN-NEXT:    vor.vv v8, v8, v9562; ZVFHMIN-NEXT:    ret563;564; ZVFBFA-LABEL: vfcopysign_exttrunc_vf_nxv1f16_nxv1f64:565; ZVFBFA:       # %bb.0:566; ZVFBFA-NEXT:    vsetvli a0, zero, e64, m1, ta, ma567; ZVFBFA-NEXT:    vfmv.v.f v9, fa0568; ZVFBFA-NEXT:    lui a0, 8569; ZVFBFA-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma570; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v10, v9571; ZVFBFA-NEXT:    addi a1, a0, -1572; ZVFBFA-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma573; ZVFBFA-NEXT:    vfncvt.f.f.w v9, v10574; ZVFBFA-NEXT:    vand.vx v8, v8, a1575; ZVFBFA-NEXT:    vand.vx v9, v9, a0576; ZVFBFA-NEXT:    vor.vv v8, v8, v9577; ZVFBFA-NEXT:    ret578  %head = insertelement <vscale x 1 x double> poison, double %s, i32 0579  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer580  %esplat = fptrunc <vscale x 1 x double> %splat to <vscale x 1 x half>581  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %esplat)582  ret <vscale x 1 x half> %r583}584 585define <vscale x 1 x half> @vfcopynsign_exttrunc_vv_nxv1f16_nxv1f64(<vscale x 1 x half> %vm, <vscale x 1 x double> %vs) {586; ZVFH-LABEL: vfcopynsign_exttrunc_vv_nxv1f16_nxv1f64:587; ZVFH:       # %bb.0:588; ZVFH-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma589; ZVFH-NEXT:    vfncvt.rod.f.f.w v10, v9590; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma591; ZVFH-NEXT:    vfncvt.f.f.w v9, v10592; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v9593; ZVFH-NEXT:    ret594;595; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vv_nxv1f16_nxv1f64:596; ZVFHMIN:       # %bb.0:597; ZVFHMIN-NEXT:    lui a0, 8598; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma599; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v10, v9600; ZVFHMIN-NEXT:    addi a1, a0, -1601; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma602; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10603; ZVFHMIN-NEXT:    vand.vx v8, v8, a1604; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0605; ZVFHMIN-NEXT:    vand.vx v9, v9, a0606; ZVFHMIN-NEXT:    vor.vv v8, v8, v9607; ZVFHMIN-NEXT:    ret608;609; ZVFBFA-LABEL: vfcopynsign_exttrunc_vv_nxv1f16_nxv1f64:610; ZVFBFA:       # %bb.0:611; ZVFBFA-NEXT:    lui a0, 8612; ZVFBFA-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma613; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v10, v9614; ZVFBFA-NEXT:    addi a1, a0, -1615; ZVFBFA-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma616; ZVFBFA-NEXT:    vfncvt.f.f.w v9, v10617; ZVFBFA-NEXT:    vand.vx v8, v8, a1618; ZVFBFA-NEXT:    vxor.vx v9, v9, a0619; ZVFBFA-NEXT:    vand.vx v9, v9, a0620; ZVFBFA-NEXT:    vor.vv v8, v8, v9621; ZVFBFA-NEXT:    ret622  %n = fneg <vscale x 1 x double> %vs623  %eneg = fptrunc <vscale x 1 x double> %n to <vscale x 1 x half>624  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %eneg)625  ret <vscale x 1 x half> %r626}627 628define <vscale x 1 x half> @vfcopynsign_exttrunc_vf_nxv1f16_nxv1f64(<vscale x 1 x half> %vm, double %s) {629; ZVFH-LABEL: vfcopynsign_exttrunc_vf_nxv1f16_nxv1f64:630; ZVFH:       # %bb.0:631; ZVFH-NEXT:    vsetvli a0, zero, e64, m1, ta, ma632; ZVFH-NEXT:    vfmv.v.f v9, fa0633; ZVFH-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma634; ZVFH-NEXT:    vfncvt.rod.f.f.w v10, v9635; ZVFH-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma636; ZVFH-NEXT:    vfncvt.f.f.w v9, v10637; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v9638; ZVFH-NEXT:    ret639;640; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vf_nxv1f16_nxv1f64:641; ZVFHMIN:       # %bb.0:642; ZVFHMIN-NEXT:    vsetvli a0, zero, e64, m1, ta, ma643; ZVFHMIN-NEXT:    vfmv.v.f v9, fa0644; ZVFHMIN-NEXT:    lui a0, 8645; ZVFHMIN-NEXT:    addi a1, a0, -1646; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma647; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v10, v9648; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma649; ZVFHMIN-NEXT:    vand.vx v8, v8, a1650; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10651; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0652; ZVFHMIN-NEXT:    vand.vx v9, v9, a0653; ZVFHMIN-NEXT:    vor.vv v8, v8, v9654; ZVFHMIN-NEXT:    ret655;656; ZVFBFA-LABEL: vfcopynsign_exttrunc_vf_nxv1f16_nxv1f64:657; ZVFBFA:       # %bb.0:658; ZVFBFA-NEXT:    vsetvli a0, zero, e64, m1, ta, ma659; ZVFBFA-NEXT:    vfmv.v.f v9, fa0660; ZVFBFA-NEXT:    lui a0, 8661; ZVFBFA-NEXT:    addi a1, a0, -1662; ZVFBFA-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma663; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v10, v9664; ZVFBFA-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma665; ZVFBFA-NEXT:    vand.vx v8, v8, a1666; ZVFBFA-NEXT:    vfncvt.f.f.w v9, v10667; ZVFBFA-NEXT:    vxor.vx v9, v9, a0668; ZVFBFA-NEXT:    vand.vx v9, v9, a0669; ZVFBFA-NEXT:    vor.vv v8, v8, v9670; ZVFBFA-NEXT:    ret671  %head = insertelement <vscale x 1 x double> poison, double %s, i32 0672  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer673  %n = fneg <vscale x 1 x double> %splat674  %eneg = fptrunc <vscale x 1 x double> %n to <vscale x 1 x half>675  %r = call <vscale x 1 x half> @llvm.copysign.nxv1f16(<vscale x 1 x half> %vm, <vscale x 1 x half> %eneg)676  ret <vscale x 1 x half> %r677}678 679define <vscale x 2 x half> @vfcopysign_vv_nxv2f16(<vscale x 2 x half> %vm, <vscale x 2 x half> %vs) {680; ZVFH-LABEL: vfcopysign_vv_nxv2f16:681; ZVFH:       # %bb.0:682; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma683; ZVFH-NEXT:    vfsgnj.vv v8, v8, v9684; ZVFH-NEXT:    ret685;686; ZVFHMIN-LABEL: vfcopysign_vv_nxv2f16:687; ZVFHMIN:       # %bb.0:688; ZVFHMIN-NEXT:    lui a0, 8689; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma690; ZVFHMIN-NEXT:    vand.vx v9, v9, a0691; ZVFHMIN-NEXT:    addi a0, a0, -1692; ZVFHMIN-NEXT:    vand.vx v8, v8, a0693; ZVFHMIN-NEXT:    vor.vv v8, v8, v9694; ZVFHMIN-NEXT:    ret695;696; ZVFBFA-LABEL: vfcopysign_vv_nxv2f16:697; ZVFBFA:       # %bb.0:698; ZVFBFA-NEXT:    lui a0, 8699; ZVFBFA-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma700; ZVFBFA-NEXT:    vand.vx v9, v9, a0701; ZVFBFA-NEXT:    addi a0, a0, -1702; ZVFBFA-NEXT:    vand.vx v8, v8, a0703; ZVFBFA-NEXT:    vor.vv v8, v8, v9704; ZVFBFA-NEXT:    ret705  %r = call <vscale x 2 x half> @llvm.copysign.nxv2f16(<vscale x 2 x half> %vm, <vscale x 2 x half> %vs)706  ret <vscale x 2 x half> %r707}708 709define <vscale x 2 x half> @vfcopysign_vf_nxv2f16(<vscale x 2 x half> %vm, half %s) {710; ZVFH-LABEL: vfcopysign_vf_nxv2f16:711; ZVFH:       # %bb.0:712; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma713; ZVFH-NEXT:    vfsgnj.vf v8, v8, fa0714; ZVFH-NEXT:    ret715;716; ZVFHMIN-LABEL: vfcopysign_vf_nxv2f16:717; ZVFHMIN:       # %bb.0:718; ZVFHMIN-NEXT:    fmv.x.h a0, fa0719; ZVFHMIN-NEXT:    lui a1, 8720; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma721; ZVFHMIN-NEXT:    vmv.v.x v9, a0722; ZVFHMIN-NEXT:    addi a0, a1, -1723; ZVFHMIN-NEXT:    vand.vx v8, v8, a0724; ZVFHMIN-NEXT:    vand.vx v9, v9, a1725; ZVFHMIN-NEXT:    vor.vv v8, v8, v9726; ZVFHMIN-NEXT:    ret727;728; ZVFBFA-LABEL: vfcopysign_vf_nxv2f16:729; ZVFBFA:       # %bb.0:730; ZVFBFA-NEXT:    fmv.x.h a0, fa0731; ZVFBFA-NEXT:    lui a1, 8732; ZVFBFA-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma733; ZVFBFA-NEXT:    vmv.v.x v9, a0734; ZVFBFA-NEXT:    addi a0, a1, -1735; ZVFBFA-NEXT:    vand.vx v8, v8, a0736; ZVFBFA-NEXT:    vand.vx v9, v9, a1737; ZVFBFA-NEXT:    vor.vv v8, v8, v9738; ZVFBFA-NEXT:    ret739  %head = insertelement <vscale x 2 x half> poison, half %s, i32 0740  %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer741  %r = call <vscale x 2 x half> @llvm.copysign.nxv2f16(<vscale x 2 x half> %vm, <vscale x 2 x half> %splat)742  ret <vscale x 2 x half> %r743}744 745define <vscale x 2 x half> @vfcopynsign_vv_nxv2f16(<vscale x 2 x half> %vm, <vscale x 2 x half> %vs) {746; ZVFH-LABEL: vfcopynsign_vv_nxv2f16:747; ZVFH:       # %bb.0:748; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma749; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v9750; ZVFH-NEXT:    ret751;752; ZVFHMIN-LABEL: vfcopynsign_vv_nxv2f16:753; ZVFHMIN:       # %bb.0:754; ZVFHMIN-NEXT:    lui a0, 8755; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma756; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0757; ZVFHMIN-NEXT:    vand.vx v9, v9, a0758; ZVFHMIN-NEXT:    addi a0, a0, -1759; ZVFHMIN-NEXT:    vand.vx v8, v8, a0760; ZVFHMIN-NEXT:    vor.vv v8, v8, v9761; ZVFHMIN-NEXT:    ret762;763; ZVFBFA-LABEL: vfcopynsign_vv_nxv2f16:764; ZVFBFA:       # %bb.0:765; ZVFBFA-NEXT:    lui a0, 8766; ZVFBFA-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma767; ZVFBFA-NEXT:    vxor.vx v9, v9, a0768; ZVFBFA-NEXT:    vand.vx v9, v9, a0769; ZVFBFA-NEXT:    addi a0, a0, -1770; ZVFBFA-NEXT:    vand.vx v8, v8, a0771; ZVFBFA-NEXT:    vor.vv v8, v8, v9772; ZVFBFA-NEXT:    ret773  %n = fneg <vscale x 2 x half> %vs774  %r = call <vscale x 2 x half> @llvm.copysign.nxv2f16(<vscale x 2 x half> %vm, <vscale x 2 x half> %n)775  ret <vscale x 2 x half> %r776}777 778define <vscale x 2 x half> @vfcopynsign_vf_nxv2f16(<vscale x 2 x half> %vm, half %s) {779; ZVFH-LABEL: vfcopynsign_vf_nxv2f16:780; ZVFH:       # %bb.0:781; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma782; ZVFH-NEXT:    vfsgnjn.vf v8, v8, fa0783; ZVFH-NEXT:    ret784;785; ZVFHMIN-LABEL: vfcopynsign_vf_nxv2f16:786; ZVFHMIN:       # %bb.0:787; ZVFHMIN-NEXT:    fmv.x.h a0, fa0788; ZVFHMIN-NEXT:    lui a1, 8789; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma790; ZVFHMIN-NEXT:    vmv.v.x v9, a0791; ZVFHMIN-NEXT:    addi a0, a1, -1792; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1793; ZVFHMIN-NEXT:    vand.vx v8, v8, a0794; ZVFHMIN-NEXT:    vand.vx v9, v9, a1795; ZVFHMIN-NEXT:    vor.vv v8, v8, v9796; ZVFHMIN-NEXT:    ret797;798; ZVFBFA-LABEL: vfcopynsign_vf_nxv2f16:799; ZVFBFA:       # %bb.0:800; ZVFBFA-NEXT:    fmv.x.h a0, fa0801; ZVFBFA-NEXT:    lui a1, 8802; ZVFBFA-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma803; ZVFBFA-NEXT:    vmv.v.x v9, a0804; ZVFBFA-NEXT:    addi a0, a1, -1805; ZVFBFA-NEXT:    vxor.vx v9, v9, a1806; ZVFBFA-NEXT:    vand.vx v8, v8, a0807; ZVFBFA-NEXT:    vand.vx v9, v9, a1808; ZVFBFA-NEXT:    vor.vv v8, v8, v9809; ZVFBFA-NEXT:    ret810  %head = insertelement <vscale x 2 x half> poison, half %s, i32 0811  %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer812  %n = fneg <vscale x 2 x half> %splat813  %r = call <vscale x 2 x half> @llvm.copysign.nxv2f16(<vscale x 2 x half> %vm, <vscale x 2 x half> %n)814  ret <vscale x 2 x half> %r815}816 817define <vscale x 4 x half> @vfcopysign_vv_nxv4f16(<vscale x 4 x half> %vm, <vscale x 4 x half> %vs) {818; ZVFH-LABEL: vfcopysign_vv_nxv4f16:819; ZVFH:       # %bb.0:820; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma821; ZVFH-NEXT:    vfsgnj.vv v8, v8, v9822; ZVFH-NEXT:    ret823;824; ZVFHMIN-LABEL: vfcopysign_vv_nxv4f16:825; ZVFHMIN:       # %bb.0:826; ZVFHMIN-NEXT:    lui a0, 8827; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma828; ZVFHMIN-NEXT:    vand.vx v9, v9, a0829; ZVFHMIN-NEXT:    addi a0, a0, -1830; ZVFHMIN-NEXT:    vand.vx v8, v8, a0831; ZVFHMIN-NEXT:    vor.vv v8, v8, v9832; ZVFHMIN-NEXT:    ret833;834; ZVFBFA-LABEL: vfcopysign_vv_nxv4f16:835; ZVFBFA:       # %bb.0:836; ZVFBFA-NEXT:    lui a0, 8837; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m1, ta, ma838; ZVFBFA-NEXT:    vand.vx v9, v9, a0839; ZVFBFA-NEXT:    addi a0, a0, -1840; ZVFBFA-NEXT:    vand.vx v8, v8, a0841; ZVFBFA-NEXT:    vor.vv v8, v8, v9842; ZVFBFA-NEXT:    ret843  %r = call <vscale x 4 x half> @llvm.copysign.nxv4f16(<vscale x 4 x half> %vm, <vscale x 4 x half> %vs)844  ret <vscale x 4 x half> %r845}846 847define <vscale x 4 x half> @vfcopysign_vf_nxv4f16(<vscale x 4 x half> %vm, half %s) {848; ZVFH-LABEL: vfcopysign_vf_nxv4f16:849; ZVFH:       # %bb.0:850; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma851; ZVFH-NEXT:    vfsgnj.vf v8, v8, fa0852; ZVFH-NEXT:    ret853;854; ZVFHMIN-LABEL: vfcopysign_vf_nxv4f16:855; ZVFHMIN:       # %bb.0:856; ZVFHMIN-NEXT:    fmv.x.h a0, fa0857; ZVFHMIN-NEXT:    lui a1, 8858; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m1, ta, ma859; ZVFHMIN-NEXT:    vmv.v.x v9, a0860; ZVFHMIN-NEXT:    addi a0, a1, -1861; ZVFHMIN-NEXT:    vand.vx v8, v8, a0862; ZVFHMIN-NEXT:    vand.vx v9, v9, a1863; ZVFHMIN-NEXT:    vor.vv v8, v8, v9864; ZVFHMIN-NEXT:    ret865;866; ZVFBFA-LABEL: vfcopysign_vf_nxv4f16:867; ZVFBFA:       # %bb.0:868; ZVFBFA-NEXT:    fmv.x.h a0, fa0869; ZVFBFA-NEXT:    lui a1, 8870; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m1, ta, ma871; ZVFBFA-NEXT:    vmv.v.x v9, a0872; ZVFBFA-NEXT:    addi a0, a1, -1873; ZVFBFA-NEXT:    vand.vx v8, v8, a0874; ZVFBFA-NEXT:    vand.vx v9, v9, a1875; ZVFBFA-NEXT:    vor.vv v8, v8, v9876; ZVFBFA-NEXT:    ret877  %head = insertelement <vscale x 4 x half> poison, half %s, i32 0878  %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer879  %r = call <vscale x 4 x half> @llvm.copysign.nxv4f16(<vscale x 4 x half> %vm, <vscale x 4 x half> %splat)880  ret <vscale x 4 x half> %r881}882 883define <vscale x 4 x half> @vfcopynsign_vv_nxv4f16(<vscale x 4 x half> %vm, <vscale x 4 x half> %vs) {884; ZVFH-LABEL: vfcopynsign_vv_nxv4f16:885; ZVFH:       # %bb.0:886; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma887; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v9888; ZVFH-NEXT:    ret889;890; ZVFHMIN-LABEL: vfcopynsign_vv_nxv4f16:891; ZVFHMIN:       # %bb.0:892; ZVFHMIN-NEXT:    lui a0, 8893; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma894; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0895; ZVFHMIN-NEXT:    vand.vx v9, v9, a0896; ZVFHMIN-NEXT:    addi a0, a0, -1897; ZVFHMIN-NEXT:    vand.vx v8, v8, a0898; ZVFHMIN-NEXT:    vor.vv v8, v8, v9899; ZVFHMIN-NEXT:    ret900;901; ZVFBFA-LABEL: vfcopynsign_vv_nxv4f16:902; ZVFBFA:       # %bb.0:903; ZVFBFA-NEXT:    lui a0, 8904; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m1, ta, ma905; ZVFBFA-NEXT:    vxor.vx v9, v9, a0906; ZVFBFA-NEXT:    vand.vx v9, v9, a0907; ZVFBFA-NEXT:    addi a0, a0, -1908; ZVFBFA-NEXT:    vand.vx v8, v8, a0909; ZVFBFA-NEXT:    vor.vv v8, v8, v9910; ZVFBFA-NEXT:    ret911  %n = fneg <vscale x 4 x half> %vs912  %r = call <vscale x 4 x half> @llvm.copysign.nxv4f16(<vscale x 4 x half> %vm, <vscale x 4 x half> %n)913  ret <vscale x 4 x half> %r914}915 916define <vscale x 4 x half> @vfcopynsign_vf_nxv4f16(<vscale x 4 x half> %vm, half %s) {917; ZVFH-LABEL: vfcopynsign_vf_nxv4f16:918; ZVFH:       # %bb.0:919; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma920; ZVFH-NEXT:    vfsgnjn.vf v8, v8, fa0921; ZVFH-NEXT:    ret922;923; ZVFHMIN-LABEL: vfcopynsign_vf_nxv4f16:924; ZVFHMIN:       # %bb.0:925; ZVFHMIN-NEXT:    fmv.x.h a0, fa0926; ZVFHMIN-NEXT:    lui a1, 8927; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m1, ta, ma928; ZVFHMIN-NEXT:    vmv.v.x v9, a0929; ZVFHMIN-NEXT:    addi a0, a1, -1930; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1931; ZVFHMIN-NEXT:    vand.vx v8, v8, a0932; ZVFHMIN-NEXT:    vand.vx v9, v9, a1933; ZVFHMIN-NEXT:    vor.vv v8, v8, v9934; ZVFHMIN-NEXT:    ret935;936; ZVFBFA-LABEL: vfcopynsign_vf_nxv4f16:937; ZVFBFA:       # %bb.0:938; ZVFBFA-NEXT:    fmv.x.h a0, fa0939; ZVFBFA-NEXT:    lui a1, 8940; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m1, ta, ma941; ZVFBFA-NEXT:    vmv.v.x v9, a0942; ZVFBFA-NEXT:    addi a0, a1, -1943; ZVFBFA-NEXT:    vxor.vx v9, v9, a1944; ZVFBFA-NEXT:    vand.vx v8, v8, a0945; ZVFBFA-NEXT:    vand.vx v9, v9, a1946; ZVFBFA-NEXT:    vor.vv v8, v8, v9947; ZVFBFA-NEXT:    ret948  %head = insertelement <vscale x 4 x half> poison, half %s, i32 0949  %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer950  %n = fneg <vscale x 4 x half> %splat951  %r = call <vscale x 4 x half> @llvm.copysign.nxv4f16(<vscale x 4 x half> %vm, <vscale x 4 x half> %n)952  ret <vscale x 4 x half> %r953}954 955define <vscale x 8 x half> @vfcopysign_vv_nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %vs) {956; ZVFH-LABEL: vfcopysign_vv_nxv8f16:957; ZVFH:       # %bb.0:958; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma959; ZVFH-NEXT:    vfsgnj.vv v8, v8, v10960; ZVFH-NEXT:    ret961;962; ZVFHMIN-LABEL: vfcopysign_vv_nxv8f16:963; ZVFHMIN:       # %bb.0:964; ZVFHMIN-NEXT:    lui a0, 8965; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma966; ZVFHMIN-NEXT:    vand.vx v10, v10, a0967; ZVFHMIN-NEXT:    addi a0, a0, -1968; ZVFHMIN-NEXT:    vand.vx v8, v8, a0969; ZVFHMIN-NEXT:    vor.vv v8, v8, v10970; ZVFHMIN-NEXT:    ret971;972; ZVFBFA-LABEL: vfcopysign_vv_nxv8f16:973; ZVFBFA:       # %bb.0:974; ZVFBFA-NEXT:    lui a0, 8975; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m2, ta, ma976; ZVFBFA-NEXT:    vand.vx v10, v10, a0977; ZVFBFA-NEXT:    addi a0, a0, -1978; ZVFBFA-NEXT:    vand.vx v8, v8, a0979; ZVFBFA-NEXT:    vor.vv v8, v8, v10980; ZVFBFA-NEXT:    ret981  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %vs)982  ret <vscale x 8 x half> %r983}984 985define <vscale x 8 x half> @vfcopysign_vf_nxv8f16(<vscale x 8 x half> %vm, half %s) {986; ZVFH-LABEL: vfcopysign_vf_nxv8f16:987; ZVFH:       # %bb.0:988; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma989; ZVFH-NEXT:    vfsgnj.vf v8, v8, fa0990; ZVFH-NEXT:    ret991;992; ZVFHMIN-LABEL: vfcopysign_vf_nxv8f16:993; ZVFHMIN:       # %bb.0:994; ZVFHMIN-NEXT:    fmv.x.h a0, fa0995; ZVFHMIN-NEXT:    lui a1, 8996; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m2, ta, ma997; ZVFHMIN-NEXT:    vmv.v.x v10, a0998; ZVFHMIN-NEXT:    addi a0, a1, -1999; ZVFHMIN-NEXT:    vand.vx v8, v8, a01000; ZVFHMIN-NEXT:    vand.vx v10, v10, a11001; ZVFHMIN-NEXT:    vor.vv v8, v8, v101002; ZVFHMIN-NEXT:    ret1003;1004; ZVFBFA-LABEL: vfcopysign_vf_nxv8f16:1005; ZVFBFA:       # %bb.0:1006; ZVFBFA-NEXT:    fmv.x.h a0, fa01007; ZVFBFA-NEXT:    lui a1, 81008; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m2, ta, ma1009; ZVFBFA-NEXT:    vmv.v.x v10, a01010; ZVFBFA-NEXT:    addi a0, a1, -11011; ZVFBFA-NEXT:    vand.vx v8, v8, a01012; ZVFBFA-NEXT:    vand.vx v10, v10, a11013; ZVFBFA-NEXT:    vor.vv v8, v8, v101014; ZVFBFA-NEXT:    ret1015  %head = insertelement <vscale x 8 x half> poison, half %s, i32 01016  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer1017  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %splat)1018  ret <vscale x 8 x half> %r1019}1020 1021define <vscale x 8 x half> @vfcopynsign_vv_nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %vs) {1022; ZVFH-LABEL: vfcopynsign_vv_nxv8f16:1023; ZVFH:       # %bb.0:1024; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1025; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v101026; ZVFH-NEXT:    ret1027;1028; ZVFHMIN-LABEL: vfcopynsign_vv_nxv8f16:1029; ZVFHMIN:       # %bb.0:1030; ZVFHMIN-NEXT:    lui a0, 81031; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma1032; ZVFHMIN-NEXT:    vxor.vx v10, v10, a01033; ZVFHMIN-NEXT:    vand.vx v10, v10, a01034; ZVFHMIN-NEXT:    addi a0, a0, -11035; ZVFHMIN-NEXT:    vand.vx v8, v8, a01036; ZVFHMIN-NEXT:    vor.vv v8, v8, v101037; ZVFHMIN-NEXT:    ret1038;1039; ZVFBFA-LABEL: vfcopynsign_vv_nxv8f16:1040; ZVFBFA:       # %bb.0:1041; ZVFBFA-NEXT:    lui a0, 81042; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m2, ta, ma1043; ZVFBFA-NEXT:    vxor.vx v10, v10, a01044; ZVFBFA-NEXT:    vand.vx v10, v10, a01045; ZVFBFA-NEXT:    addi a0, a0, -11046; ZVFBFA-NEXT:    vand.vx v8, v8, a01047; ZVFBFA-NEXT:    vor.vv v8, v8, v101048; ZVFBFA-NEXT:    ret1049  %n = fneg <vscale x 8 x half> %vs1050  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %n)1051  ret <vscale x 8 x half> %r1052}1053 1054define <vscale x 8 x half> @vfcopynsign_vf_nxv8f16(<vscale x 8 x half> %vm, half %s) {1055; ZVFH-LABEL: vfcopynsign_vf_nxv8f16:1056; ZVFH:       # %bb.0:1057; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1058; ZVFH-NEXT:    vfsgnjn.vf v8, v8, fa01059; ZVFH-NEXT:    ret1060;1061; ZVFHMIN-LABEL: vfcopynsign_vf_nxv8f16:1062; ZVFHMIN:       # %bb.0:1063; ZVFHMIN-NEXT:    fmv.x.h a0, fa01064; ZVFHMIN-NEXT:    lui a1, 81065; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m2, ta, ma1066; ZVFHMIN-NEXT:    vmv.v.x v10, a01067; ZVFHMIN-NEXT:    addi a0, a1, -11068; ZVFHMIN-NEXT:    vxor.vx v10, v10, a11069; ZVFHMIN-NEXT:    vand.vx v8, v8, a01070; ZVFHMIN-NEXT:    vand.vx v10, v10, a11071; ZVFHMIN-NEXT:    vor.vv v8, v8, v101072; ZVFHMIN-NEXT:    ret1073;1074; ZVFBFA-LABEL: vfcopynsign_vf_nxv8f16:1075; ZVFBFA:       # %bb.0:1076; ZVFBFA-NEXT:    fmv.x.h a0, fa01077; ZVFBFA-NEXT:    lui a1, 81078; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m2, ta, ma1079; ZVFBFA-NEXT:    vmv.v.x v10, a01080; ZVFBFA-NEXT:    addi a0, a1, -11081; ZVFBFA-NEXT:    vxor.vx v10, v10, a11082; ZVFBFA-NEXT:    vand.vx v8, v8, a01083; ZVFBFA-NEXT:    vand.vx v10, v10, a11084; ZVFBFA-NEXT:    vor.vv v8, v8, v101085; ZVFBFA-NEXT:    ret1086  %head = insertelement <vscale x 8 x half> poison, half %s, i32 01087  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer1088  %n = fneg <vscale x 8 x half> %splat1089  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %n)1090  ret <vscale x 8 x half> %r1091}1092 1093define <vscale x 8 x half> @vfcopysign_exttrunc_vv_nxv8f16_nxv8f32(<vscale x 8 x half> %vm, <vscale x 8 x float> %vs) {1094; ZVFH-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f32:1095; ZVFH:       # %bb.0:1096; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1097; ZVFH-NEXT:    vfncvt.f.f.w v10, v121098; ZVFH-NEXT:    vfsgnj.vv v8, v8, v101099; ZVFH-NEXT:    ret1100;1101; ZVFHMIN-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f32:1102; ZVFHMIN:       # %bb.0:1103; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1104; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121105; ZVFHMIN-NEXT:    lui a0, 81106; ZVFHMIN-NEXT:    vand.vx v10, v10, a01107; ZVFHMIN-NEXT:    addi a0, a0, -11108; ZVFHMIN-NEXT:    vand.vx v8, v8, a01109; ZVFHMIN-NEXT:    vor.vv v8, v8, v101110; ZVFHMIN-NEXT:    ret1111;1112; ZVFBFA-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f32:1113; ZVFBFA:       # %bb.0:1114; ZVFBFA-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1115; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121116; ZVFBFA-NEXT:    lui a0, 81117; ZVFBFA-NEXT:    vand.vx v10, v10, a01118; ZVFBFA-NEXT:    addi a0, a0, -11119; ZVFBFA-NEXT:    vand.vx v8, v8, a01120; ZVFBFA-NEXT:    vor.vv v8, v8, v101121; ZVFBFA-NEXT:    ret1122  %e = fptrunc <vscale x 8 x float> %vs to <vscale x 8 x half>1123  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %e)1124  ret <vscale x 8 x half> %r1125}1126 1127define <vscale x 8 x half> @vfcopysign_exttrunc_vf_nxv8f16_nxv8f32(<vscale x 8 x half> %vm, float %s) {1128; ZVFH-LABEL: vfcopysign_exttrunc_vf_nxv8f16_nxv8f32:1129; ZVFH:       # %bb.0:1130; ZVFH-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1131; ZVFH-NEXT:    vfmv.v.f v12, fa01132; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1133; ZVFH-NEXT:    vfncvt.f.f.w v10, v121134; ZVFH-NEXT:    vfsgnj.vv v8, v8, v101135; ZVFH-NEXT:    ret1136;1137; ZVFHMIN-LABEL: vfcopysign_exttrunc_vf_nxv8f16_nxv8f32:1138; ZVFHMIN:       # %bb.0:1139; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1140; ZVFHMIN-NEXT:    vfmv.v.f v12, fa01141; ZVFHMIN-NEXT:    lui a0, 81142; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1143; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121144; ZVFHMIN-NEXT:    addi a1, a0, -11145; ZVFHMIN-NEXT:    vand.vx v8, v8, a11146; ZVFHMIN-NEXT:    vand.vx v10, v10, a01147; ZVFHMIN-NEXT:    vor.vv v8, v8, v101148; ZVFHMIN-NEXT:    ret1149;1150; ZVFBFA-LABEL: vfcopysign_exttrunc_vf_nxv8f16_nxv8f32:1151; ZVFBFA:       # %bb.0:1152; ZVFBFA-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1153; ZVFBFA-NEXT:    vfmv.v.f v12, fa01154; ZVFBFA-NEXT:    lui a0, 81155; ZVFBFA-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1156; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121157; ZVFBFA-NEXT:    addi a1, a0, -11158; ZVFBFA-NEXT:    vand.vx v8, v8, a11159; ZVFBFA-NEXT:    vand.vx v10, v10, a01160; ZVFBFA-NEXT:    vor.vv v8, v8, v101161; ZVFBFA-NEXT:    ret1162  %head = insertelement <vscale x 8 x float> poison, float %s, i32 01163  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1164  %esplat = fptrunc <vscale x 8 x float> %splat to <vscale x 8 x half>1165  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %esplat)1166  ret <vscale x 8 x half> %r1167}1168 1169define <vscale x 8 x half> @vfcopynsign_exttrunc_vv_nxv8f16_nxv8f32(<vscale x 8 x half> %vm, <vscale x 8 x float> %vs) {1170; ZVFH-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f32:1171; ZVFH:       # %bb.0:1172; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1173; ZVFH-NEXT:    vfncvt.f.f.w v10, v121174; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v101175; ZVFH-NEXT:    ret1176;1177; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f32:1178; ZVFHMIN:       # %bb.0:1179; ZVFHMIN-NEXT:    lui a0, 81180; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma1181; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121182; ZVFHMIN-NEXT:    addi a1, a0, -11183; ZVFHMIN-NEXT:    vxor.vx v10, v10, a01184; ZVFHMIN-NEXT:    vand.vx v8, v8, a11185; ZVFHMIN-NEXT:    vand.vx v10, v10, a01186; ZVFHMIN-NEXT:    vor.vv v8, v8, v101187; ZVFHMIN-NEXT:    ret1188;1189; ZVFBFA-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f32:1190; ZVFBFA:       # %bb.0:1191; ZVFBFA-NEXT:    lui a0, 81192; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m2, ta, ma1193; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121194; ZVFBFA-NEXT:    addi a1, a0, -11195; ZVFBFA-NEXT:    vxor.vx v10, v10, a01196; ZVFBFA-NEXT:    vand.vx v8, v8, a11197; ZVFBFA-NEXT:    vand.vx v10, v10, a01198; ZVFBFA-NEXT:    vor.vv v8, v8, v101199; ZVFBFA-NEXT:    ret1200  %n = fneg <vscale x 8 x float> %vs1201  %eneg = fptrunc <vscale x 8 x float> %n to <vscale x 8 x half>1202  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %eneg)1203  ret <vscale x 8 x half> %r1204}1205 1206define <vscale x 8 x half> @vfcopynsign_exttrunc_vf_nxv8f16_nxv8f32(<vscale x 8 x half> %vm, float %s) {1207; ZVFH-LABEL: vfcopynsign_exttrunc_vf_nxv8f16_nxv8f32:1208; ZVFH:       # %bb.0:1209; ZVFH-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1210; ZVFH-NEXT:    vfmv.v.f v12, fa01211; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1212; ZVFH-NEXT:    vfncvt.f.f.w v10, v121213; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v101214; ZVFH-NEXT:    ret1215;1216; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vf_nxv8f16_nxv8f32:1217; ZVFHMIN:       # %bb.0:1218; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1219; ZVFHMIN-NEXT:    vfmv.v.f v12, fa01220; ZVFHMIN-NEXT:    lui a0, 81221; ZVFHMIN-NEXT:    addi a1, a0, -11222; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1223; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121224; ZVFHMIN-NEXT:    vand.vx v8, v8, a11225; ZVFHMIN-NEXT:    vxor.vx v10, v10, a01226; ZVFHMIN-NEXT:    vand.vx v10, v10, a01227; ZVFHMIN-NEXT:    vor.vv v8, v8, v101228; ZVFHMIN-NEXT:    ret1229;1230; ZVFBFA-LABEL: vfcopynsign_exttrunc_vf_nxv8f16_nxv8f32:1231; ZVFBFA:       # %bb.0:1232; ZVFBFA-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1233; ZVFBFA-NEXT:    vfmv.v.f v12, fa01234; ZVFBFA-NEXT:    lui a0, 81235; ZVFBFA-NEXT:    addi a1, a0, -11236; ZVFBFA-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1237; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121238; ZVFBFA-NEXT:    vand.vx v8, v8, a11239; ZVFBFA-NEXT:    vxor.vx v10, v10, a01240; ZVFBFA-NEXT:    vand.vx v10, v10, a01241; ZVFBFA-NEXT:    vor.vv v8, v8, v101242; ZVFBFA-NEXT:    ret1243  %head = insertelement <vscale x 8 x float> poison, float %s, i32 01244  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1245  %n = fneg <vscale x 8 x float> %splat1246  %eneg = fptrunc <vscale x 8 x float> %n to <vscale x 8 x half>1247  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %eneg)1248  ret <vscale x 8 x half> %r1249}1250 1251define <vscale x 8 x half> @vfcopysign_exttrunc_vv_nxv8f16_nxv8f64(<vscale x 8 x half> %vm, <vscale x 8 x double> %vs) {1252; ZVFH-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f64:1253; ZVFH:       # %bb.0:1254; ZVFH-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1255; ZVFH-NEXT:    vfncvt.rod.f.f.w v12, v161256; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1257; ZVFH-NEXT:    vfncvt.f.f.w v10, v121258; ZVFH-NEXT:    vfsgnj.vv v8, v8, v101259; ZVFH-NEXT:    ret1260;1261; ZVFHMIN-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f64:1262; ZVFHMIN:       # %bb.0:1263; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1264; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v12, v161265; ZVFHMIN-NEXT:    lui a0, 81266; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1267; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121268; ZVFHMIN-NEXT:    addi a1, a0, -11269; ZVFHMIN-NEXT:    vand.vx v8, v8, a11270; ZVFHMIN-NEXT:    vand.vx v10, v10, a01271; ZVFHMIN-NEXT:    vor.vv v8, v8, v101272; ZVFHMIN-NEXT:    ret1273;1274; ZVFBFA-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f64:1275; ZVFBFA:       # %bb.0:1276; ZVFBFA-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1277; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v12, v161278; ZVFBFA-NEXT:    lui a0, 81279; ZVFBFA-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1280; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121281; ZVFBFA-NEXT:    addi a1, a0, -11282; ZVFBFA-NEXT:    vand.vx v8, v8, a11283; ZVFBFA-NEXT:    vand.vx v10, v10, a01284; ZVFBFA-NEXT:    vor.vv v8, v8, v101285; ZVFBFA-NEXT:    ret1286  %e = fptrunc <vscale x 8 x double> %vs to <vscale x 8 x half>1287  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %e)1288  ret <vscale x 8 x half> %r1289}1290 1291define <vscale x 8 x half> @vfcopysign_exttrunc_vf_nxv8f16_nxv8f64(<vscale x 8 x half> %vm, double %s) {1292; ZVFH-LABEL: vfcopysign_exttrunc_vf_nxv8f16_nxv8f64:1293; ZVFH:       # %bb.0:1294; ZVFH-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1295; ZVFH-NEXT:    vfmv.v.f v16, fa01296; ZVFH-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1297; ZVFH-NEXT:    vfncvt.rod.f.f.w v12, v161298; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1299; ZVFH-NEXT:    vfncvt.f.f.w v10, v121300; ZVFH-NEXT:    vfsgnj.vv v8, v8, v101301; ZVFH-NEXT:    ret1302;1303; ZVFHMIN-LABEL: vfcopysign_exttrunc_vf_nxv8f16_nxv8f64:1304; ZVFHMIN:       # %bb.0:1305; ZVFHMIN-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1306; ZVFHMIN-NEXT:    vfmv.v.f v16, fa01307; ZVFHMIN-NEXT:    lui a0, 81308; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1309; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v12, v161310; ZVFHMIN-NEXT:    addi a1, a0, -11311; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1312; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121313; ZVFHMIN-NEXT:    vand.vx v8, v8, a11314; ZVFHMIN-NEXT:    vand.vx v10, v10, a01315; ZVFHMIN-NEXT:    vor.vv v8, v8, v101316; ZVFHMIN-NEXT:    ret1317;1318; ZVFBFA-LABEL: vfcopysign_exttrunc_vf_nxv8f16_nxv8f64:1319; ZVFBFA:       # %bb.0:1320; ZVFBFA-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1321; ZVFBFA-NEXT:    vfmv.v.f v16, fa01322; ZVFBFA-NEXT:    lui a0, 81323; ZVFBFA-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1324; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v12, v161325; ZVFBFA-NEXT:    addi a1, a0, -11326; ZVFBFA-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1327; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121328; ZVFBFA-NEXT:    vand.vx v8, v8, a11329; ZVFBFA-NEXT:    vand.vx v10, v10, a01330; ZVFBFA-NEXT:    vor.vv v8, v8, v101331; ZVFBFA-NEXT:    ret1332  %head = insertelement <vscale x 8 x double> poison, double %s, i32 01333  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1334  %esplat = fptrunc <vscale x 8 x double> %splat to <vscale x 8 x half>1335  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %esplat)1336  ret <vscale x 8 x half> %r1337}1338 1339define <vscale x 8 x half> @vfcopynsign_exttrunc_vv_nxv8f16_nxv8f64(<vscale x 8 x half> %vm, <vscale x 8 x double> %vs) {1340; ZVFH-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f64:1341; ZVFH:       # %bb.0:1342; ZVFH-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1343; ZVFH-NEXT:    vfncvt.rod.f.f.w v12, v161344; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1345; ZVFH-NEXT:    vfncvt.f.f.w v10, v121346; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v101347; ZVFH-NEXT:    ret1348;1349; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f64:1350; ZVFHMIN:       # %bb.0:1351; ZVFHMIN-NEXT:    lui a0, 81352; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1353; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v12, v161354; ZVFHMIN-NEXT:    addi a1, a0, -11355; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1356; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121357; ZVFHMIN-NEXT:    vand.vx v8, v8, a11358; ZVFHMIN-NEXT:    vxor.vx v10, v10, a01359; ZVFHMIN-NEXT:    vand.vx v10, v10, a01360; ZVFHMIN-NEXT:    vor.vv v8, v8, v101361; ZVFHMIN-NEXT:    ret1362;1363; ZVFBFA-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f64:1364; ZVFBFA:       # %bb.0:1365; ZVFBFA-NEXT:    lui a0, 81366; ZVFBFA-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1367; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v12, v161368; ZVFBFA-NEXT:    addi a1, a0, -11369; ZVFBFA-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1370; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121371; ZVFBFA-NEXT:    vand.vx v8, v8, a11372; ZVFBFA-NEXT:    vxor.vx v10, v10, a01373; ZVFBFA-NEXT:    vand.vx v10, v10, a01374; ZVFBFA-NEXT:    vor.vv v8, v8, v101375; ZVFBFA-NEXT:    ret1376  %n = fneg <vscale x 8 x double> %vs1377  %eneg = fptrunc <vscale x 8 x double> %n to <vscale x 8 x half>1378  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %eneg)1379  ret <vscale x 8 x half> %r1380}1381 1382define <vscale x 8 x half> @vfcopynsign_exttrunc_vf_nxv8f16_nxv8f64(<vscale x 8 x half> %vm, double %s) {1383; ZVFH-LABEL: vfcopynsign_exttrunc_vf_nxv8f16_nxv8f64:1384; ZVFH:       # %bb.0:1385; ZVFH-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1386; ZVFH-NEXT:    vfmv.v.f v16, fa01387; ZVFH-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1388; ZVFH-NEXT:    vfncvt.rod.f.f.w v12, v161389; ZVFH-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1390; ZVFH-NEXT:    vfncvt.f.f.w v10, v121391; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v101392; ZVFH-NEXT:    ret1393;1394; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vf_nxv8f16_nxv8f64:1395; ZVFHMIN:       # %bb.0:1396; ZVFHMIN-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1397; ZVFHMIN-NEXT:    vfmv.v.f v16, fa01398; ZVFHMIN-NEXT:    lui a0, 81399; ZVFHMIN-NEXT:    addi a1, a0, -11400; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1401; ZVFHMIN-NEXT:    vfncvt.rod.f.f.w v12, v161402; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1403; ZVFHMIN-NEXT:    vand.vx v8, v8, a11404; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v121405; ZVFHMIN-NEXT:    vxor.vx v10, v10, a01406; ZVFHMIN-NEXT:    vand.vx v10, v10, a01407; ZVFHMIN-NEXT:    vor.vv v8, v8, v101408; ZVFHMIN-NEXT:    ret1409;1410; ZVFBFA-LABEL: vfcopynsign_exttrunc_vf_nxv8f16_nxv8f64:1411; ZVFBFA:       # %bb.0:1412; ZVFBFA-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1413; ZVFBFA-NEXT:    vfmv.v.f v16, fa01414; ZVFBFA-NEXT:    lui a0, 81415; ZVFBFA-NEXT:    addi a1, a0, -11416; ZVFBFA-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1417; ZVFBFA-NEXT:    vfncvt.rod.f.f.w v12, v161418; ZVFBFA-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1419; ZVFBFA-NEXT:    vand.vx v8, v8, a11420; ZVFBFA-NEXT:    vfncvt.f.f.w v10, v121421; ZVFBFA-NEXT:    vxor.vx v10, v10, a01422; ZVFBFA-NEXT:    vand.vx v10, v10, a01423; ZVFBFA-NEXT:    vor.vv v8, v8, v101424; ZVFBFA-NEXT:    ret1425  %head = insertelement <vscale x 8 x double> poison, double %s, i32 01426  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1427  %n = fneg <vscale x 8 x double> %splat1428  %eneg = fptrunc <vscale x 8 x double> %n to <vscale x 8 x half>1429  %r = call <vscale x 8 x half> @llvm.copysign.nxv8f16(<vscale x 8 x half> %vm, <vscale x 8 x half> %eneg)1430  ret <vscale x 8 x half> %r1431}1432 1433define <vscale x 16 x half> @vfcopysign_vv_nxv16f16(<vscale x 16 x half> %vm, <vscale x 16 x half> %vs) {1434; ZVFH-LABEL: vfcopysign_vv_nxv16f16:1435; ZVFH:       # %bb.0:1436; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma1437; ZVFH-NEXT:    vfsgnj.vv v8, v8, v121438; ZVFH-NEXT:    ret1439;1440; ZVFHMIN-LABEL: vfcopysign_vv_nxv16f16:1441; ZVFHMIN:       # %bb.0:1442; ZVFHMIN-NEXT:    lui a0, 81443; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma1444; ZVFHMIN-NEXT:    vand.vx v12, v12, a01445; ZVFHMIN-NEXT:    addi a0, a0, -11446; ZVFHMIN-NEXT:    vand.vx v8, v8, a01447; ZVFHMIN-NEXT:    vor.vv v8, v8, v121448; ZVFHMIN-NEXT:    ret1449;1450; ZVFBFA-LABEL: vfcopysign_vv_nxv16f16:1451; ZVFBFA:       # %bb.0:1452; ZVFBFA-NEXT:    lui a0, 81453; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m4, ta, ma1454; ZVFBFA-NEXT:    vand.vx v12, v12, a01455; ZVFBFA-NEXT:    addi a0, a0, -11456; ZVFBFA-NEXT:    vand.vx v8, v8, a01457; ZVFBFA-NEXT:    vor.vv v8, v8, v121458; ZVFBFA-NEXT:    ret1459  %r = call <vscale x 16 x half> @llvm.copysign.nxv16f16(<vscale x 16 x half> %vm, <vscale x 16 x half> %vs)1460  ret <vscale x 16 x half> %r1461}1462 1463define <vscale x 16 x half> @vfcopysign_vf_nxv16f16(<vscale x 16 x half> %vm, half %s) {1464; ZVFH-LABEL: vfcopysign_vf_nxv16f16:1465; ZVFH:       # %bb.0:1466; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma1467; ZVFH-NEXT:    vfsgnj.vf v8, v8, fa01468; ZVFH-NEXT:    ret1469;1470; ZVFHMIN-LABEL: vfcopysign_vf_nxv16f16:1471; ZVFHMIN:       # %bb.0:1472; ZVFHMIN-NEXT:    fmv.x.h a0, fa01473; ZVFHMIN-NEXT:    lui a1, 81474; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma1475; ZVFHMIN-NEXT:    vmv.v.x v12, a01476; ZVFHMIN-NEXT:    addi a0, a1, -11477; ZVFHMIN-NEXT:    vand.vx v8, v8, a01478; ZVFHMIN-NEXT:    vand.vx v12, v12, a11479; ZVFHMIN-NEXT:    vor.vv v8, v8, v121480; ZVFHMIN-NEXT:    ret1481;1482; ZVFBFA-LABEL: vfcopysign_vf_nxv16f16:1483; ZVFBFA:       # %bb.0:1484; ZVFBFA-NEXT:    fmv.x.h a0, fa01485; ZVFBFA-NEXT:    lui a1, 81486; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m4, ta, ma1487; ZVFBFA-NEXT:    vmv.v.x v12, a01488; ZVFBFA-NEXT:    addi a0, a1, -11489; ZVFBFA-NEXT:    vand.vx v8, v8, a01490; ZVFBFA-NEXT:    vand.vx v12, v12, a11491; ZVFBFA-NEXT:    vor.vv v8, v8, v121492; ZVFBFA-NEXT:    ret1493  %head = insertelement <vscale x 16 x half> poison, half %s, i32 01494  %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1495  %r = call <vscale x 16 x half> @llvm.copysign.nxv16f16(<vscale x 16 x half> %vm, <vscale x 16 x half> %splat)1496  ret <vscale x 16 x half> %r1497}1498 1499define <vscale x 16 x half> @vfcopynsign_vv_nxv16f16(<vscale x 16 x half> %vm, <vscale x 16 x half> %vs) {1500; ZVFH-LABEL: vfcopynsign_vv_nxv16f16:1501; ZVFH:       # %bb.0:1502; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma1503; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v121504; ZVFH-NEXT:    ret1505;1506; ZVFHMIN-LABEL: vfcopynsign_vv_nxv16f16:1507; ZVFHMIN:       # %bb.0:1508; ZVFHMIN-NEXT:    lui a0, 81509; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma1510; ZVFHMIN-NEXT:    vxor.vx v12, v12, a01511; ZVFHMIN-NEXT:    vand.vx v12, v12, a01512; ZVFHMIN-NEXT:    addi a0, a0, -11513; ZVFHMIN-NEXT:    vand.vx v8, v8, a01514; ZVFHMIN-NEXT:    vor.vv v8, v8, v121515; ZVFHMIN-NEXT:    ret1516;1517; ZVFBFA-LABEL: vfcopynsign_vv_nxv16f16:1518; ZVFBFA:       # %bb.0:1519; ZVFBFA-NEXT:    lui a0, 81520; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m4, ta, ma1521; ZVFBFA-NEXT:    vxor.vx v12, v12, a01522; ZVFBFA-NEXT:    vand.vx v12, v12, a01523; ZVFBFA-NEXT:    addi a0, a0, -11524; ZVFBFA-NEXT:    vand.vx v8, v8, a01525; ZVFBFA-NEXT:    vor.vv v8, v8, v121526; ZVFBFA-NEXT:    ret1527  %n = fneg <vscale x 16 x half> %vs1528  %r = call <vscale x 16 x half> @llvm.copysign.nxv16f16(<vscale x 16 x half> %vm, <vscale x 16 x half> %n)1529  ret <vscale x 16 x half> %r1530}1531 1532define <vscale x 16 x half> @vfcopynsign_vf_nxv16f16(<vscale x 16 x half> %vm, half %s) {1533; ZVFH-LABEL: vfcopynsign_vf_nxv16f16:1534; ZVFH:       # %bb.0:1535; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma1536; ZVFH-NEXT:    vfsgnjn.vf v8, v8, fa01537; ZVFH-NEXT:    ret1538;1539; ZVFHMIN-LABEL: vfcopynsign_vf_nxv16f16:1540; ZVFHMIN:       # %bb.0:1541; ZVFHMIN-NEXT:    fmv.x.h a0, fa01542; ZVFHMIN-NEXT:    lui a1, 81543; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma1544; ZVFHMIN-NEXT:    vmv.v.x v12, a01545; ZVFHMIN-NEXT:    addi a0, a1, -11546; ZVFHMIN-NEXT:    vxor.vx v12, v12, a11547; ZVFHMIN-NEXT:    vand.vx v8, v8, a01548; ZVFHMIN-NEXT:    vand.vx v12, v12, a11549; ZVFHMIN-NEXT:    vor.vv v8, v8, v121550; ZVFHMIN-NEXT:    ret1551;1552; ZVFBFA-LABEL: vfcopynsign_vf_nxv16f16:1553; ZVFBFA:       # %bb.0:1554; ZVFBFA-NEXT:    fmv.x.h a0, fa01555; ZVFBFA-NEXT:    lui a1, 81556; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m4, ta, ma1557; ZVFBFA-NEXT:    vmv.v.x v12, a01558; ZVFBFA-NEXT:    addi a0, a1, -11559; ZVFBFA-NEXT:    vxor.vx v12, v12, a11560; ZVFBFA-NEXT:    vand.vx v8, v8, a01561; ZVFBFA-NEXT:    vand.vx v12, v12, a11562; ZVFBFA-NEXT:    vor.vv v8, v8, v121563; ZVFBFA-NEXT:    ret1564  %head = insertelement <vscale x 16 x half> poison, half %s, i32 01565  %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1566  %n = fneg <vscale x 16 x half> %splat1567  %r = call <vscale x 16 x half> @llvm.copysign.nxv16f16(<vscale x 16 x half> %vm, <vscale x 16 x half> %n)1568  ret <vscale x 16 x half> %r1569}1570 1571define <vscale x 32 x half> @vfcopysign_vv_nxv32f16(<vscale x 32 x half> %vm, <vscale x 32 x half> %vs) {1572; ZVFH-LABEL: vfcopysign_vv_nxv32f16:1573; ZVFH:       # %bb.0:1574; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma1575; ZVFH-NEXT:    vfsgnj.vv v8, v8, v161576; ZVFH-NEXT:    ret1577;1578; ZVFHMIN-LABEL: vfcopysign_vv_nxv32f16:1579; ZVFHMIN:       # %bb.0:1580; ZVFHMIN-NEXT:    lui a0, 81581; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma1582; ZVFHMIN-NEXT:    vand.vx v16, v16, a01583; ZVFHMIN-NEXT:    addi a0, a0, -11584; ZVFHMIN-NEXT:    vand.vx v8, v8, a01585; ZVFHMIN-NEXT:    vor.vv v8, v8, v161586; ZVFHMIN-NEXT:    ret1587;1588; ZVFBFA-LABEL: vfcopysign_vv_nxv32f16:1589; ZVFBFA:       # %bb.0:1590; ZVFBFA-NEXT:    lui a0, 81591; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m8, ta, ma1592; ZVFBFA-NEXT:    vand.vx v16, v16, a01593; ZVFBFA-NEXT:    addi a0, a0, -11594; ZVFBFA-NEXT:    vand.vx v8, v8, a01595; ZVFBFA-NEXT:    vor.vv v8, v8, v161596; ZVFBFA-NEXT:    ret1597  %r = call <vscale x 32 x half> @llvm.copysign.nxv32f16(<vscale x 32 x half> %vm, <vscale x 32 x half> %vs)1598  ret <vscale x 32 x half> %r1599}1600 1601define <vscale x 32 x half> @vfcopysign_vf_nxv32f16(<vscale x 32 x half> %vm, half %s) {1602; ZVFH-LABEL: vfcopysign_vf_nxv32f16:1603; ZVFH:       # %bb.0:1604; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma1605; ZVFH-NEXT:    vfsgnj.vf v8, v8, fa01606; ZVFH-NEXT:    ret1607;1608; ZVFHMIN-LABEL: vfcopysign_vf_nxv32f16:1609; ZVFHMIN:       # %bb.0:1610; ZVFHMIN-NEXT:    fmv.x.h a0, fa01611; ZVFHMIN-NEXT:    lui a1, 81612; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m8, ta, ma1613; ZVFHMIN-NEXT:    vmv.v.x v16, a01614; ZVFHMIN-NEXT:    addi a0, a1, -11615; ZVFHMIN-NEXT:    vand.vx v8, v8, a01616; ZVFHMIN-NEXT:    vand.vx v16, v16, a11617; ZVFHMIN-NEXT:    vor.vv v8, v8, v161618; ZVFHMIN-NEXT:    ret1619;1620; ZVFBFA-LABEL: vfcopysign_vf_nxv32f16:1621; ZVFBFA:       # %bb.0:1622; ZVFBFA-NEXT:    fmv.x.h a0, fa01623; ZVFBFA-NEXT:    lui a1, 81624; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m8, ta, ma1625; ZVFBFA-NEXT:    vmv.v.x v16, a01626; ZVFBFA-NEXT:    addi a0, a1, -11627; ZVFBFA-NEXT:    vand.vx v8, v8, a01628; ZVFBFA-NEXT:    vand.vx v16, v16, a11629; ZVFBFA-NEXT:    vor.vv v8, v8, v161630; ZVFBFA-NEXT:    ret1631  %head = insertelement <vscale x 32 x half> poison, half %s, i32 01632  %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer1633  %r = call <vscale x 32 x half> @llvm.copysign.nxv32f16(<vscale x 32 x half> %vm, <vscale x 32 x half> %splat)1634  ret <vscale x 32 x half> %r1635}1636 1637define <vscale x 32 x half> @vfcopynsign_vv_nxv32f16(<vscale x 32 x half> %vm, <vscale x 32 x half> %vs) {1638; ZVFH-LABEL: vfcopynsign_vv_nxv32f16:1639; ZVFH:       # %bb.0:1640; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma1641; ZVFH-NEXT:    vfsgnjn.vv v8, v8, v161642; ZVFH-NEXT:    ret1643;1644; ZVFHMIN-LABEL: vfcopynsign_vv_nxv32f16:1645; ZVFHMIN:       # %bb.0:1646; ZVFHMIN-NEXT:    lui a0, 81647; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma1648; ZVFHMIN-NEXT:    vxor.vx v16, v16, a01649; ZVFHMIN-NEXT:    vand.vx v16, v16, a01650; ZVFHMIN-NEXT:    addi a0, a0, -11651; ZVFHMIN-NEXT:    vand.vx v8, v8, a01652; ZVFHMIN-NEXT:    vor.vv v8, v8, v161653; ZVFHMIN-NEXT:    ret1654;1655; ZVFBFA-LABEL: vfcopynsign_vv_nxv32f16:1656; ZVFBFA:       # %bb.0:1657; ZVFBFA-NEXT:    lui a0, 81658; ZVFBFA-NEXT:    vsetvli a1, zero, e16, m8, ta, ma1659; ZVFBFA-NEXT:    vxor.vx v16, v16, a01660; ZVFBFA-NEXT:    vand.vx v16, v16, a01661; ZVFBFA-NEXT:    addi a0, a0, -11662; ZVFBFA-NEXT:    vand.vx v8, v8, a01663; ZVFBFA-NEXT:    vor.vv v8, v8, v161664; ZVFBFA-NEXT:    ret1665  %n = fneg <vscale x 32 x half> %vs1666  %r = call <vscale x 32 x half> @llvm.copysign.nxv32f16(<vscale x 32 x half> %vm, <vscale x 32 x half> %n)1667  ret <vscale x 32 x half> %r1668}1669 1670define <vscale x 32 x half> @vfcopynsign_vf_nxv32f16(<vscale x 32 x half> %vm, half %s) {1671; ZVFH-LABEL: vfcopynsign_vf_nxv32f16:1672; ZVFH:       # %bb.0:1673; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma1674; ZVFH-NEXT:    vfsgnjn.vf v8, v8, fa01675; ZVFH-NEXT:    ret1676;1677; ZVFHMIN-LABEL: vfcopynsign_vf_nxv32f16:1678; ZVFHMIN:       # %bb.0:1679; ZVFHMIN-NEXT:    fmv.x.h a0, fa01680; ZVFHMIN-NEXT:    lui a1, 81681; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m8, ta, ma1682; ZVFHMIN-NEXT:    vmv.v.x v16, a01683; ZVFHMIN-NEXT:    addi a0, a1, -11684; ZVFHMIN-NEXT:    vxor.vx v16, v16, a11685; ZVFHMIN-NEXT:    vand.vx v8, v8, a01686; ZVFHMIN-NEXT:    vand.vx v16, v16, a11687; ZVFHMIN-NEXT:    vor.vv v8, v8, v161688; ZVFHMIN-NEXT:    ret1689;1690; ZVFBFA-LABEL: vfcopynsign_vf_nxv32f16:1691; ZVFBFA:       # %bb.0:1692; ZVFBFA-NEXT:    fmv.x.h a0, fa01693; ZVFBFA-NEXT:    lui a1, 81694; ZVFBFA-NEXT:    vsetvli a2, zero, e16, m8, ta, ma1695; ZVFBFA-NEXT:    vmv.v.x v16, a01696; ZVFBFA-NEXT:    addi a0, a1, -11697; ZVFBFA-NEXT:    vxor.vx v16, v16, a11698; ZVFBFA-NEXT:    vand.vx v8, v8, a01699; ZVFBFA-NEXT:    vand.vx v16, v16, a11700; ZVFBFA-NEXT:    vor.vv v8, v8, v161701; ZVFBFA-NEXT:    ret1702  %head = insertelement <vscale x 32 x half> poison, half %s, i32 01703  %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer1704  %n = fneg <vscale x 32 x half> %splat1705  %r = call <vscale x 32 x half> @llvm.copysign.nxv32f16(<vscale x 32 x half> %vm, <vscale x 32 x half> %n)1706  ret <vscale x 32 x half> %r1707}1708 1709define <vscale x 1 x float> @vfcopysign_vv_nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %vs) {1710; CHECK-LABEL: vfcopysign_vv_nxv1f32:1711; CHECK:       # %bb.0:1712; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1713; CHECK-NEXT:    vfsgnj.vv v8, v8, v91714; CHECK-NEXT:    ret1715  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %vs)1716  ret <vscale x 1 x float> %r1717}1718 1719define <vscale x 1 x float> @vfcopysign_vf_nxv1f32(<vscale x 1 x float> %vm, float %s) {1720; CHECK-LABEL: vfcopysign_vf_nxv1f32:1721; CHECK:       # %bb.0:1722; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1723; CHECK-NEXT:    vfsgnj.vf v8, v8, fa01724; CHECK-NEXT:    ret1725  %head = insertelement <vscale x 1 x float> poison, float %s, i32 01726  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1727  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %splat)1728  ret <vscale x 1 x float> %r1729}1730 1731define <vscale x 1 x float> @vfcopynsign_vv_nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %vs) {1732; CHECK-LABEL: vfcopynsign_vv_nxv1f32:1733; CHECK:       # %bb.0:1734; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1735; CHECK-NEXT:    vfsgnjn.vv v8, v8, v91736; CHECK-NEXT:    ret1737  %n = fneg <vscale x 1 x float> %vs1738  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %n)1739  ret <vscale x 1 x float> %r1740}1741 1742define <vscale x 1 x float> @vfcopynsign_vf_nxv1f32(<vscale x 1 x float> %vm, float %s) {1743; CHECK-LABEL: vfcopynsign_vf_nxv1f32:1744; CHECK:       # %bb.0:1745; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1746; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa01747; CHECK-NEXT:    ret1748  %head = insertelement <vscale x 1 x float> poison, float %s, i32 01749  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1750  %n = fneg <vscale x 1 x float> %splat1751  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %n)1752  ret <vscale x 1 x float> %r1753}1754 1755define <vscale x 1 x float> @vfcopysign_exttrunc_vv_nxv1f32_nxv1f16(<vscale x 1 x float> %vm, <vscale x 1 x half> %vs) {1756; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv1f32_nxv1f16:1757; CHECK:       # %bb.0:1758; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1759; CHECK-NEXT:    vfwcvt.f.f.v v10, v91760; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1761; CHECK-NEXT:    vfsgnj.vv v8, v8, v101762; CHECK-NEXT:    ret1763  %e = fpext <vscale x 1 x half> %vs to <vscale x 1 x float>1764  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %e)1765  ret <vscale x 1 x float> %r1766}1767 1768define <vscale x 1 x float> @vfcopysign_exttrunc_vf_nxv1f32_nxv1f16(<vscale x 1 x float> %vm, half %s) {1769; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv1f32_nxv1f16:1770; CHECK:       # %bb.0:1771; CHECK-NEXT:    fcvt.s.h fa5, fa01772; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1773; CHECK-NEXT:    vfsgnj.vf v8, v8, fa51774; CHECK-NEXT:    ret1775  %head = insertelement <vscale x 1 x half> poison, half %s, i32 01776  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer1777  %esplat = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>1778  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %esplat)1779  ret <vscale x 1 x float> %r1780}1781 1782define <vscale x 1 x float> @vfcopynsign_exttrunc_vv_nxv1f32_nxv1f16(<vscale x 1 x float> %vm, <vscale x 1 x half> %vs) {1783; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv1f32_nxv1f16:1784; CHECK:       # %bb.0:1785; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1786; CHECK-NEXT:    vfwcvt.f.f.v v10, v91787; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1788; CHECK-NEXT:    vfsgnjn.vv v8, v8, v101789; CHECK-NEXT:    ret1790  %n = fneg <vscale x 1 x half> %vs1791  %eneg = fpext <vscale x 1 x half> %n to <vscale x 1 x float>1792  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %eneg)1793  ret <vscale x 1 x float> %r1794}1795 1796define <vscale x 1 x float> @vfcopynsign_exttrunc_vf_nxv1f32_nxv1f16(<vscale x 1 x float> %vm, half %s) {1797; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv1f32_nxv1f16:1798; CHECK:       # %bb.0:1799; CHECK-NEXT:    fcvt.s.h fa5, fa01800; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1801; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa51802; CHECK-NEXT:    ret1803  %head = insertelement <vscale x 1 x half> poison, half %s, i32 01804  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer1805  %n = fneg <vscale x 1 x half> %splat1806  %eneg = fpext <vscale x 1 x half> %n to <vscale x 1 x float>1807  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %eneg)1808  ret <vscale x 1 x float> %r1809}1810 1811define <vscale x 1 x float> @vfcopysign_exttrunc_vv_nxv1f32_nxv1f64(<vscale x 1 x float> %vm, <vscale x 1 x double> %vs) {1812; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv1f32_nxv1f64:1813; CHECK:       # %bb.0:1814; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1815; CHECK-NEXT:    vfncvt.f.f.w v10, v91816; CHECK-NEXT:    vfsgnj.vv v8, v8, v101817; CHECK-NEXT:    ret1818  %e = fptrunc <vscale x 1 x double> %vs to <vscale x 1 x float>1819  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %e)1820  ret <vscale x 1 x float> %r1821}1822 1823define <vscale x 1 x float> @vfcopysign_exttrunc_vf_nxv1f32_nxv1f64(<vscale x 1 x float> %vm, double %s) {1824; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv1f32_nxv1f64:1825; CHECK:       # %bb.0:1826; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1827; CHECK-NEXT:    vfmv.v.f v9, fa01828; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1829; CHECK-NEXT:    vfncvt.f.f.w v10, v91830; CHECK-NEXT:    vfsgnj.vv v8, v8, v101831; CHECK-NEXT:    ret1832  %head = insertelement <vscale x 1 x double> poison, double %s, i32 01833  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1834  %esplat = fptrunc <vscale x 1 x double> %splat to <vscale x 1 x float>1835  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %esplat)1836  ret <vscale x 1 x float> %r1837}1838 1839define <vscale x 1 x float> @vfcopynsign_exttrunc_vv_nxv1f32_nxv1f64(<vscale x 1 x float> %vm, <vscale x 1 x double> %vs) {1840; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv1f32_nxv1f64:1841; CHECK:       # %bb.0:1842; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma1843; CHECK-NEXT:    vfncvt.f.f.w v10, v91844; CHECK-NEXT:    vfsgnjn.vv v8, v8, v101845; CHECK-NEXT:    ret1846  %n = fneg <vscale x 1 x double> %vs1847  %eneg = fptrunc <vscale x 1 x double> %n to <vscale x 1 x float>1848  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %eneg)1849  ret <vscale x 1 x float> %r1850}1851 1852define <vscale x 1 x float> @vfcopynsign_exttrunc_vf_nxv1f32_nxv1f64(<vscale x 1 x float> %vm, double %s) {1853; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv1f32_nxv1f64:1854; CHECK:       # %bb.0:1855; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1856; CHECK-NEXT:    vfmv.v.f v9, fa01857; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1858; CHECK-NEXT:    vfncvt.f.f.w v10, v91859; CHECK-NEXT:    vfsgnjn.vv v8, v8, v101860; CHECK-NEXT:    ret1861  %head = insertelement <vscale x 1 x double> poison, double %s, i32 01862  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1863  %n = fneg <vscale x 1 x double> %splat1864  %eneg = fptrunc <vscale x 1 x double> %n to <vscale x 1 x float>1865  %r = call <vscale x 1 x float> @llvm.copysign.nxv1f32(<vscale x 1 x float> %vm, <vscale x 1 x float> %eneg)1866  ret <vscale x 1 x float> %r1867}1868 1869define <vscale x 2 x float> @vfcopysign_vv_nxv2f32(<vscale x 2 x float> %vm, <vscale x 2 x float> %vs) {1870; CHECK-LABEL: vfcopysign_vv_nxv2f32:1871; CHECK:       # %bb.0:1872; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma1873; CHECK-NEXT:    vfsgnj.vv v8, v8, v91874; CHECK-NEXT:    ret1875  %r = call <vscale x 2 x float> @llvm.copysign.nxv2f32(<vscale x 2 x float> %vm, <vscale x 2 x float> %vs)1876  ret <vscale x 2 x float> %r1877}1878 1879define <vscale x 2 x float> @vfcopysign_vf_nxv2f32(<vscale x 2 x float> %vm, float %s) {1880; CHECK-LABEL: vfcopysign_vf_nxv2f32:1881; CHECK:       # %bb.0:1882; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma1883; CHECK-NEXT:    vfsgnj.vf v8, v8, fa01884; CHECK-NEXT:    ret1885  %head = insertelement <vscale x 2 x float> poison, float %s, i32 01886  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1887  %r = call <vscale x 2 x float> @llvm.copysign.nxv2f32(<vscale x 2 x float> %vm, <vscale x 2 x float> %splat)1888  ret <vscale x 2 x float> %r1889}1890 1891define <vscale x 2 x float> @vfcopynsign_vv_nxv2f32(<vscale x 2 x float> %vm, <vscale x 2 x float> %vs) {1892; CHECK-LABEL: vfcopynsign_vv_nxv2f32:1893; CHECK:       # %bb.0:1894; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma1895; CHECK-NEXT:    vfsgnjn.vv v8, v8, v91896; CHECK-NEXT:    ret1897  %n = fneg <vscale x 2 x float> %vs1898  %r = call <vscale x 2 x float> @llvm.copysign.nxv2f32(<vscale x 2 x float> %vm, <vscale x 2 x float> %n)1899  ret <vscale x 2 x float> %r1900}1901 1902define <vscale x 2 x float> @vfcopynsign_vf_nxv2f32(<vscale x 2 x float> %vm, float %s) {1903; CHECK-LABEL: vfcopynsign_vf_nxv2f32:1904; CHECK:       # %bb.0:1905; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma1906; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa01907; CHECK-NEXT:    ret1908  %head = insertelement <vscale x 2 x float> poison, float %s, i32 01909  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1910  %n = fneg <vscale x 2 x float> %splat1911  %r = call <vscale x 2 x float> @llvm.copysign.nxv2f32(<vscale x 2 x float> %vm, <vscale x 2 x float> %n)1912  ret <vscale x 2 x float> %r1913}1914 1915define <vscale x 4 x float> @vfcopysign_vv_nxv4f32(<vscale x 4 x float> %vm, <vscale x 4 x float> %vs) {1916; CHECK-LABEL: vfcopysign_vv_nxv4f32:1917; CHECK:       # %bb.0:1918; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma1919; CHECK-NEXT:    vfsgnj.vv v8, v8, v101920; CHECK-NEXT:    ret1921  %r = call <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float> %vm, <vscale x 4 x float> %vs)1922  ret <vscale x 4 x float> %r1923}1924 1925define <vscale x 4 x float> @vfcopysign_vf_nxv4f32(<vscale x 4 x float> %vm, float %s) {1926; CHECK-LABEL: vfcopysign_vf_nxv4f32:1927; CHECK:       # %bb.0:1928; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma1929; CHECK-NEXT:    vfsgnj.vf v8, v8, fa01930; CHECK-NEXT:    ret1931  %head = insertelement <vscale x 4 x float> poison, float %s, i32 01932  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1933  %r = call <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float> %vm, <vscale x 4 x float> %splat)1934  ret <vscale x 4 x float> %r1935}1936 1937define <vscale x 4 x float> @vfcopynsign_vv_nxv4f32(<vscale x 4 x float> %vm, <vscale x 4 x float> %vs) {1938; CHECK-LABEL: vfcopynsign_vv_nxv4f32:1939; CHECK:       # %bb.0:1940; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma1941; CHECK-NEXT:    vfsgnjn.vv v8, v8, v101942; CHECK-NEXT:    ret1943  %n = fneg <vscale x 4 x float> %vs1944  %r = call <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float> %vm, <vscale x 4 x float> %n)1945  ret <vscale x 4 x float> %r1946}1947 1948define <vscale x 4 x float> @vfcopynsign_vf_nxv4f32(<vscale x 4 x float> %vm, float %s) {1949; CHECK-LABEL: vfcopynsign_vf_nxv4f32:1950; CHECK:       # %bb.0:1951; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma1952; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa01953; CHECK-NEXT:    ret1954  %head = insertelement <vscale x 4 x float> poison, float %s, i32 01955  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1956  %n = fneg <vscale x 4 x float> %splat1957  %r = call <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float> %vm, <vscale x 4 x float> %n)1958  ret <vscale x 4 x float> %r1959}1960 1961define <vscale x 8 x float> @vfcopysign_vv_nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %vs) {1962; CHECK-LABEL: vfcopysign_vv_nxv8f32:1963; CHECK:       # %bb.0:1964; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1965; CHECK-NEXT:    vfsgnj.vv v8, v8, v121966; CHECK-NEXT:    ret1967  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %vs)1968  ret <vscale x 8 x float> %r1969}1970 1971define <vscale x 8 x float> @vfcopysign_vf_nxv8f32(<vscale x 8 x float> %vm, float %s) {1972; CHECK-LABEL: vfcopysign_vf_nxv8f32:1973; CHECK:       # %bb.0:1974; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1975; CHECK-NEXT:    vfsgnj.vf v8, v8, fa01976; CHECK-NEXT:    ret1977  %head = insertelement <vscale x 8 x float> poison, float %s, i32 01978  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1979  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %splat)1980  ret <vscale x 8 x float> %r1981}1982 1983define <vscale x 8 x float> @vfcopynsign_vv_nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %vs) {1984; CHECK-LABEL: vfcopynsign_vv_nxv8f32:1985; CHECK:       # %bb.0:1986; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1987; CHECK-NEXT:    vfsgnjn.vv v8, v8, v121988; CHECK-NEXT:    ret1989  %n = fneg <vscale x 8 x float> %vs1990  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %n)1991  ret <vscale x 8 x float> %r1992}1993 1994define <vscale x 8 x float> @vfcopynsign_vf_nxv8f32(<vscale x 8 x float> %vm, float %s) {1995; CHECK-LABEL: vfcopynsign_vf_nxv8f32:1996; CHECK:       # %bb.0:1997; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1998; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa01999; CHECK-NEXT:    ret2000  %head = insertelement <vscale x 8 x float> poison, float %s, i32 02001  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer2002  %n = fneg <vscale x 8 x float> %splat2003  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %n)2004  ret <vscale x 8 x float> %r2005}2006 2007define <vscale x 8 x float> @vfcopysign_exttrunc_vv_nxv8f32_nxv8f16(<vscale x 8 x float> %vm, <vscale x 8 x half> %vs) {2008; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv8f32_nxv8f16:2009; CHECK:       # %bb.0:2010; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2011; CHECK-NEXT:    vfwcvt.f.f.v v16, v122012; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma2013; CHECK-NEXT:    vfsgnj.vv v8, v8, v162014; CHECK-NEXT:    ret2015  %e = fpext <vscale x 8 x half> %vs to <vscale x 8 x float>2016  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %e)2017  ret <vscale x 8 x float> %r2018}2019 2020define <vscale x 8 x float> @vfcopysign_exttrunc_vf_nxv8f32_nxv8f16(<vscale x 8 x float> %vm, half %s) {2021; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv8f32_nxv8f16:2022; CHECK:       # %bb.0:2023; CHECK-NEXT:    fcvt.s.h fa5, fa02024; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2025; CHECK-NEXT:    vfsgnj.vf v8, v8, fa52026; CHECK-NEXT:    ret2027  %head = insertelement <vscale x 8 x half> poison, half %s, i32 02028  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer2029  %esplat = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>2030  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %esplat)2031  ret <vscale x 8 x float> %r2032}2033 2034define <vscale x 8 x float> @vfcopynsign_exttrunc_vv_nxv8f32_nxv8f16(<vscale x 8 x float> %vm, <vscale x 8 x half> %vs) {2035; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv8f32_nxv8f16:2036; CHECK:       # %bb.0:2037; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2038; CHECK-NEXT:    vfwcvt.f.f.v v16, v122039; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma2040; CHECK-NEXT:    vfsgnjn.vv v8, v8, v162041; CHECK-NEXT:    ret2042  %n = fneg <vscale x 8 x half> %vs2043  %eneg = fpext <vscale x 8 x half> %n to <vscale x 8 x float>2044  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %eneg)2045  ret <vscale x 8 x float> %r2046}2047 2048define <vscale x 8 x float> @vfcopynsign_exttrunc_vf_nxv8f32_nxv8f16(<vscale x 8 x float> %vm, half %s) {2049; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv8f32_nxv8f16:2050; CHECK:       # %bb.0:2051; CHECK-NEXT:    fcvt.s.h fa5, fa02052; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2053; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa52054; CHECK-NEXT:    ret2055  %head = insertelement <vscale x 8 x half> poison, half %s, i32 02056  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer2057  %n = fneg <vscale x 8 x half> %splat2058  %eneg = fpext <vscale x 8 x half> %n to <vscale x 8 x float>2059  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %eneg)2060  ret <vscale x 8 x float> %r2061}2062 2063define <vscale x 8 x float> @vfcopysign_exttrunc_vv_nxv8f32_nxv8f64(<vscale x 8 x float> %vm, <vscale x 8 x double> %vs) {2064; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv8f32_nxv8f64:2065; CHECK:       # %bb.0:2066; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2067; CHECK-NEXT:    vfncvt.f.f.w v12, v162068; CHECK-NEXT:    vfsgnj.vv v8, v8, v122069; CHECK-NEXT:    ret2070  %e = fptrunc <vscale x 8 x double> %vs to <vscale x 8 x float>2071  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %e)2072  ret <vscale x 8 x float> %r2073}2074 2075define <vscale x 8 x float> @vfcopysign_exttrunc_vf_nxv8f32_nxv8f64(<vscale x 8 x float> %vm, double %s) {2076; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv8f32_nxv8f64:2077; CHECK:       # %bb.0:2078; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2079; CHECK-NEXT:    vfmv.v.f v16, fa02080; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma2081; CHECK-NEXT:    vfncvt.f.f.w v12, v162082; CHECK-NEXT:    vfsgnj.vv v8, v8, v122083; CHECK-NEXT:    ret2084  %head = insertelement <vscale x 8 x double> poison, double %s, i32 02085  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer2086  %esplat = fptrunc <vscale x 8 x double> %splat to <vscale x 8 x float>2087  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %esplat)2088  ret <vscale x 8 x float> %r2089}2090 2091define <vscale x 8 x float> @vfcopynsign_exttrunc_vv_nxv8f32_nxv8f64(<vscale x 8 x float> %vm, <vscale x 8 x double> %vs) {2092; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv8f32_nxv8f64:2093; CHECK:       # %bb.0:2094; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2095; CHECK-NEXT:    vfncvt.f.f.w v12, v162096; CHECK-NEXT:    vfsgnjn.vv v8, v8, v122097; CHECK-NEXT:    ret2098  %n = fneg <vscale x 8 x double> %vs2099  %eneg = fptrunc <vscale x 8 x double> %n to <vscale x 8 x float>2100  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %eneg)2101  ret <vscale x 8 x float> %r2102}2103 2104define <vscale x 8 x float> @vfcopynsign_exttrunc_vf_nxv8f32_nxv8f64(<vscale x 8 x float> %vm, double %s) {2105; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv8f32_nxv8f64:2106; CHECK:       # %bb.0:2107; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2108; CHECK-NEXT:    vfmv.v.f v16, fa02109; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma2110; CHECK-NEXT:    vfncvt.f.f.w v12, v162111; CHECK-NEXT:    vfsgnjn.vv v8, v8, v122112; CHECK-NEXT:    ret2113  %head = insertelement <vscale x 8 x double> poison, double %s, i32 02114  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer2115  %n = fneg <vscale x 8 x double> %splat2116  %eneg = fptrunc <vscale x 8 x double> %n to <vscale x 8 x float>2117  %r = call <vscale x 8 x float> @llvm.copysign.nxv8f32(<vscale x 8 x float> %vm, <vscale x 8 x float> %eneg)2118  ret <vscale x 8 x float> %r2119}2120 2121define <vscale x 16 x float> @vfcopysign_vv_nxv16f32(<vscale x 16 x float> %vm, <vscale x 16 x float> %vs) {2122; CHECK-LABEL: vfcopysign_vv_nxv16f32:2123; CHECK:       # %bb.0:2124; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2125; CHECK-NEXT:    vfsgnj.vv v8, v8, v162126; CHECK-NEXT:    ret2127  %r = call <vscale x 16 x float> @llvm.copysign.nxv16f32(<vscale x 16 x float> %vm, <vscale x 16 x float> %vs)2128  ret <vscale x 16 x float> %r2129}2130 2131define <vscale x 16 x float> @vfcopysign_vf_nxv16f32(<vscale x 16 x float> %vm, float %s) {2132; CHECK-LABEL: vfcopysign_vf_nxv16f32:2133; CHECK:       # %bb.0:2134; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2135; CHECK-NEXT:    vfsgnj.vf v8, v8, fa02136; CHECK-NEXT:    ret2137  %head = insertelement <vscale x 16 x float> poison, float %s, i32 02138  %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer2139  %r = call <vscale x 16 x float> @llvm.copysign.nxv16f32(<vscale x 16 x float> %vm, <vscale x 16 x float> %splat)2140  ret <vscale x 16 x float> %r2141}2142 2143define <vscale x 16 x float> @vfcopynsign_vv_nxv16f32(<vscale x 16 x float> %vm, <vscale x 16 x float> %vs) {2144; CHECK-LABEL: vfcopynsign_vv_nxv16f32:2145; CHECK:       # %bb.0:2146; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2147; CHECK-NEXT:    vfsgnjn.vv v8, v8, v162148; CHECK-NEXT:    ret2149  %n = fneg <vscale x 16 x float> %vs2150  %r = call <vscale x 16 x float> @llvm.copysign.nxv16f32(<vscale x 16 x float> %vm, <vscale x 16 x float> %n)2151  ret <vscale x 16 x float> %r2152}2153 2154define <vscale x 16 x float> @vfcopynsign_vf_nxv16f32(<vscale x 16 x float> %vm, float %s) {2155; CHECK-LABEL: vfcopynsign_vf_nxv16f32:2156; CHECK:       # %bb.0:2157; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2158; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa02159; CHECK-NEXT:    ret2160  %head = insertelement <vscale x 16 x float> poison, float %s, i32 02161  %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer2162  %n = fneg <vscale x 16 x float> %splat2163  %r = call <vscale x 16 x float> @llvm.copysign.nxv16f32(<vscale x 16 x float> %vm, <vscale x 16 x float> %n)2164  ret <vscale x 16 x float> %r2165}2166 2167define <vscale x 1 x double> @vfcopysign_vv_nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %vs) {2168; CHECK-LABEL: vfcopysign_vv_nxv1f64:2169; CHECK:       # %bb.0:2170; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2171; CHECK-NEXT:    vfsgnj.vv v8, v8, v92172; CHECK-NEXT:    ret2173  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %vs)2174  ret <vscale x 1 x double> %r2175}2176 2177define <vscale x 1 x double> @vfcopysign_vf_nxv1f64(<vscale x 1 x double> %vm, double %s) {2178; CHECK-LABEL: vfcopysign_vf_nxv1f64:2179; CHECK:       # %bb.0:2180; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2181; CHECK-NEXT:    vfsgnj.vf v8, v8, fa02182; CHECK-NEXT:    ret2183  %head = insertelement <vscale x 1 x double> poison, double %s, i32 02184  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer2185  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %splat)2186  ret <vscale x 1 x double> %r2187}2188 2189define <vscale x 1 x double> @vfcopynsign_vv_nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %vs) {2190; CHECK-LABEL: vfcopynsign_vv_nxv1f64:2191; CHECK:       # %bb.0:2192; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2193; CHECK-NEXT:    vfsgnjn.vv v8, v8, v92194; CHECK-NEXT:    ret2195  %n = fneg <vscale x 1 x double> %vs2196  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %n)2197  ret <vscale x 1 x double> %r2198}2199 2200define <vscale x 1 x double> @vfcopynsign_vf_nxv1f64(<vscale x 1 x double> %vm, double %s) {2201; CHECK-LABEL: vfcopynsign_vf_nxv1f64:2202; CHECK:       # %bb.0:2203; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2204; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa02205; CHECK-NEXT:    ret2206  %head = insertelement <vscale x 1 x double> poison, double %s, i32 02207  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer2208  %n = fneg <vscale x 1 x double> %splat2209  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %n)2210  ret <vscale x 1 x double> %r2211}2212 2213define <vscale x 1 x double> @vfcopysign_exttrunc_vv_nxv1f64_nxv1f16(<vscale x 1 x double> %vm, <vscale x 1 x half> %vs) {2214; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv1f64_nxv1f16:2215; CHECK:       # %bb.0:2216; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2217; CHECK-NEXT:    vfwcvt.f.f.v v10, v92218; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma2219; CHECK-NEXT:    vfwcvt.f.f.v v9, v102220; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma2221; CHECK-NEXT:    vfsgnj.vv v8, v8, v92222; CHECK-NEXT:    ret2223  %e = fpext <vscale x 1 x half> %vs to <vscale x 1 x double>2224  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %e)2225  ret <vscale x 1 x double> %r2226}2227 2228define <vscale x 1 x double> @vfcopysign_exttrunc_vf_nxv1f64_nxv1f16(<vscale x 1 x double> %vm, half %s) {2229; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv1f64_nxv1f16:2230; CHECK:       # %bb.0:2231; CHECK-NEXT:    fcvt.d.h fa5, fa02232; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2233; CHECK-NEXT:    vfsgnj.vf v8, v8, fa52234; CHECK-NEXT:    ret2235  %head = insertelement <vscale x 1 x half> poison, half %s, i32 02236  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer2237  %esplat = fpext <vscale x 1 x half> %splat to <vscale x 1 x double>2238  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %esplat)2239  ret <vscale x 1 x double> %r2240}2241 2242define <vscale x 1 x double> @vfcopynsign_exttrunc_vv_nxv1f64_nxv1f16(<vscale x 1 x double> %vm, <vscale x 1 x half> %vs) {2243; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv1f64_nxv1f16:2244; CHECK:       # %bb.0:2245; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2246; CHECK-NEXT:    vfwcvt.f.f.v v10, v92247; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma2248; CHECK-NEXT:    vfwcvt.f.f.v v9, v102249; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma2250; CHECK-NEXT:    vfsgnjn.vv v8, v8, v92251; CHECK-NEXT:    ret2252  %n = fneg <vscale x 1 x half> %vs2253  %eneg = fpext <vscale x 1 x half> %n to <vscale x 1 x double>2254  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %eneg)2255  ret <vscale x 1 x double> %r2256}2257 2258define <vscale x 1 x double> @vfcopynsign_exttrunc_vf_nxv1f64_nxv1f16(<vscale x 1 x double> %vm, half %s) {2259; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv1f64_nxv1f16:2260; CHECK:       # %bb.0:2261; CHECK-NEXT:    fcvt.d.h fa5, fa02262; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2263; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa52264; CHECK-NEXT:    ret2265  %head = insertelement <vscale x 1 x half> poison, half %s, i32 02266  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer2267  %n = fneg <vscale x 1 x half> %splat2268  %eneg = fpext <vscale x 1 x half> %n to <vscale x 1 x double>2269  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %eneg)2270  ret <vscale x 1 x double> %r2271}2272 2273define <vscale x 1 x double> @vfcopysign_exttrunc_vv_nxv1f64_nxv1f32(<vscale x 1 x double> %vm, <vscale x 1 x float> %vs) {2274; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv1f64_nxv1f32:2275; CHECK:       # %bb.0:2276; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2277; CHECK-NEXT:    vfwcvt.f.f.v v10, v92278; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma2279; CHECK-NEXT:    vfsgnj.vv v8, v8, v102280; CHECK-NEXT:    ret2281  %e = fpext <vscale x 1 x float> %vs to <vscale x 1 x double>2282  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %e)2283  ret <vscale x 1 x double> %r2284}2285 2286define <vscale x 1 x double> @vfcopysign_exttrunc_vf_nxv1f64_nxv1f32(<vscale x 1 x double> %vm, float %s) {2287; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv1f64_nxv1f32:2288; CHECK:       # %bb.0:2289; CHECK-NEXT:    fcvt.d.s fa5, fa02290; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2291; CHECK-NEXT:    vfsgnj.vf v8, v8, fa52292; CHECK-NEXT:    ret2293  %head = insertelement <vscale x 1 x float> poison, float %s, i32 02294  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer2295  %esplat = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>2296  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %esplat)2297  ret <vscale x 1 x double> %r2298}2299 2300define <vscale x 1 x double> @vfcopynsign_exttrunc_vv_nxv1f64_nxv1f32(<vscale x 1 x double> %vm, <vscale x 1 x float> %vs) {2301; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv1f64_nxv1f32:2302; CHECK:       # %bb.0:2303; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2304; CHECK-NEXT:    vfwcvt.f.f.v v10, v92305; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma2306; CHECK-NEXT:    vfsgnjn.vv v8, v8, v102307; CHECK-NEXT:    ret2308  %n = fneg <vscale x 1 x float> %vs2309  %eneg = fpext <vscale x 1 x float> %n to <vscale x 1 x double>2310  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %eneg)2311  ret <vscale x 1 x double> %r2312}2313 2314define <vscale x 1 x double> @vfcopynsign_exttrunc_vf_nxv1f64_nxv1f32(<vscale x 1 x double> %vm, float %s) {2315; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv1f64_nxv1f32:2316; CHECK:       # %bb.0:2317; CHECK-NEXT:    fcvt.d.s fa5, fa02318; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2319; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa52320; CHECK-NEXT:    ret2321  %head = insertelement <vscale x 1 x float> poison, float %s, i32 02322  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer2323  %n = fneg <vscale x 1 x float> %splat2324  %eneg = fpext <vscale x 1 x float> %n to <vscale x 1 x double>2325  %r = call <vscale x 1 x double> @llvm.copysign.nxv1f64(<vscale x 1 x double> %vm, <vscale x 1 x double> %eneg)2326  ret <vscale x 1 x double> %r2327}2328 2329define <vscale x 2 x double> @vfcopysign_vv_nxv2f64(<vscale x 2 x double> %vm, <vscale x 2 x double> %vs) {2330; CHECK-LABEL: vfcopysign_vv_nxv2f64:2331; CHECK:       # %bb.0:2332; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2333; CHECK-NEXT:    vfsgnj.vv v8, v8, v102334; CHECK-NEXT:    ret2335  %r = call <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> %vm, <vscale x 2 x double> %vs)2336  ret <vscale x 2 x double> %r2337}2338 2339define <vscale x 2 x double> @vfcopysign_vf_nxv2f64(<vscale x 2 x double> %vm, double %s) {2340; CHECK-LABEL: vfcopysign_vf_nxv2f64:2341; CHECK:       # %bb.0:2342; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2343; CHECK-NEXT:    vfsgnj.vf v8, v8, fa02344; CHECK-NEXT:    ret2345  %head = insertelement <vscale x 2 x double> poison, double %s, i32 02346  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer2347  %r = call <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> %vm, <vscale x 2 x double> %splat)2348  ret <vscale x 2 x double> %r2349}2350 2351define <vscale x 2 x double> @vfcopynsign_vv_nxv2f64(<vscale x 2 x double> %vm, <vscale x 2 x double> %vs) {2352; CHECK-LABEL: vfcopynsign_vv_nxv2f64:2353; CHECK:       # %bb.0:2354; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2355; CHECK-NEXT:    vfsgnjn.vv v8, v8, v102356; CHECK-NEXT:    ret2357  %n = fneg <vscale x 2 x double> %vs2358  %r = call <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> %vm, <vscale x 2 x double> %n)2359  ret <vscale x 2 x double> %r2360}2361 2362define <vscale x 2 x double> @vfcopynsign_vf_nxv2f64(<vscale x 2 x double> %vm, double %s) {2363; CHECK-LABEL: vfcopynsign_vf_nxv2f64:2364; CHECK:       # %bb.0:2365; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2366; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa02367; CHECK-NEXT:    ret2368  %head = insertelement <vscale x 2 x double> poison, double %s, i32 02369  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer2370  %n = fneg <vscale x 2 x double> %splat2371  %r = call <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> %vm, <vscale x 2 x double> %n)2372  ret <vscale x 2 x double> %r2373}2374 2375define <vscale x 4 x double> @vfcopysign_vv_nxv4f64(<vscale x 4 x double> %vm, <vscale x 4 x double> %vs) {2376; CHECK-LABEL: vfcopysign_vv_nxv4f64:2377; CHECK:       # %bb.0:2378; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2379; CHECK-NEXT:    vfsgnj.vv v8, v8, v122380; CHECK-NEXT:    ret2381  %r = call <vscale x 4 x double> @llvm.copysign.nxv4f64(<vscale x 4 x double> %vm, <vscale x 4 x double> %vs)2382  ret <vscale x 4 x double> %r2383}2384 2385define <vscale x 4 x double> @vfcopysign_vf_nxv4f64(<vscale x 4 x double> %vm, double %s) {2386; CHECK-LABEL: vfcopysign_vf_nxv4f64:2387; CHECK:       # %bb.0:2388; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2389; CHECK-NEXT:    vfsgnj.vf v8, v8, fa02390; CHECK-NEXT:    ret2391  %head = insertelement <vscale x 4 x double> poison, double %s, i32 02392  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer2393  %r = call <vscale x 4 x double> @llvm.copysign.nxv4f64(<vscale x 4 x double> %vm, <vscale x 4 x double> %splat)2394  ret <vscale x 4 x double> %r2395}2396 2397define <vscale x 4 x double> @vfcopynsign_vv_nxv4f64(<vscale x 4 x double> %vm, <vscale x 4 x double> %vs) {2398; CHECK-LABEL: vfcopynsign_vv_nxv4f64:2399; CHECK:       # %bb.0:2400; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2401; CHECK-NEXT:    vfsgnjn.vv v8, v8, v122402; CHECK-NEXT:    ret2403  %n = fneg <vscale x 4 x double> %vs2404  %r = call <vscale x 4 x double> @llvm.copysign.nxv4f64(<vscale x 4 x double> %vm, <vscale x 4 x double> %n)2405  ret <vscale x 4 x double> %r2406}2407 2408define <vscale x 4 x double> @vfcopynsign_vf_nxv4f64(<vscale x 4 x double> %vm, double %s) {2409; CHECK-LABEL: vfcopynsign_vf_nxv4f64:2410; CHECK:       # %bb.0:2411; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2412; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa02413; CHECK-NEXT:    ret2414  %head = insertelement <vscale x 4 x double> poison, double %s, i32 02415  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer2416  %n = fneg <vscale x 4 x double> %splat2417  %r = call <vscale x 4 x double> @llvm.copysign.nxv4f64(<vscale x 4 x double> %vm, <vscale x 4 x double> %n)2418  ret <vscale x 4 x double> %r2419}2420 2421define <vscale x 8 x double> @vfcopysign_vv_nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %vs) {2422; CHECK-LABEL: vfcopysign_vv_nxv8f64:2423; CHECK:       # %bb.0:2424; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2425; CHECK-NEXT:    vfsgnj.vv v8, v8, v162426; CHECK-NEXT:    ret2427  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %vs)2428  ret <vscale x 8 x double> %r2429}2430 2431define <vscale x 8 x double> @vfcopysign_vf_nxv8f64(<vscale x 8 x double> %vm, double %s) {2432; CHECK-LABEL: vfcopysign_vf_nxv8f64:2433; CHECK:       # %bb.0:2434; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2435; CHECK-NEXT:    vfsgnj.vf v8, v8, fa02436; CHECK-NEXT:    ret2437  %head = insertelement <vscale x 8 x double> poison, double %s, i32 02438  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer2439  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %splat)2440  ret <vscale x 8 x double> %r2441}2442 2443define <vscale x 8 x double> @vfcopynsign_vv_nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %vs) {2444; CHECK-LABEL: vfcopynsign_vv_nxv8f64:2445; CHECK:       # %bb.0:2446; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2447; CHECK-NEXT:    vfsgnjn.vv v8, v8, v162448; CHECK-NEXT:    ret2449  %n = fneg <vscale x 8 x double> %vs2450  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %n)2451  ret <vscale x 8 x double> %r2452}2453 2454define <vscale x 8 x double> @vfcopynsign_vf_nxv8f64(<vscale x 8 x double> %vm, double %s) {2455; CHECK-LABEL: vfcopynsign_vf_nxv8f64:2456; CHECK:       # %bb.0:2457; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2458; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa02459; CHECK-NEXT:    ret2460  %head = insertelement <vscale x 8 x double> poison, double %s, i32 02461  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer2462  %n = fneg <vscale x 8 x double> %splat2463  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %n)2464  ret <vscale x 8 x double> %r2465}2466 2467define <vscale x 8 x double> @vfcopysign_exttrunc_vv_nxv8f64_nxv8f16(<vscale x 8 x double> %vm, <vscale x 8 x half> %vs) {2468; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv8f64_nxv8f16:2469; CHECK:       # %bb.0:2470; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2471; CHECK-NEXT:    vfwcvt.f.f.v v24, v162472; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma2473; CHECK-NEXT:    vfwcvt.f.f.v v16, v242474; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma2475; CHECK-NEXT:    vfsgnj.vv v8, v8, v162476; CHECK-NEXT:    ret2477  %e = fpext <vscale x 8 x half> %vs to <vscale x 8 x double>2478  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %e)2479  ret <vscale x 8 x double> %r2480}2481 2482define <vscale x 8 x double> @vfcopysign_exttrunc_vf_nxv8f64_nxv8f16(<vscale x 8 x double> %vm, half %s) {2483; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv8f64_nxv8f16:2484; CHECK:       # %bb.0:2485; CHECK-NEXT:    fcvt.d.h fa5, fa02486; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2487; CHECK-NEXT:    vfsgnj.vf v8, v8, fa52488; CHECK-NEXT:    ret2489  %head = insertelement <vscale x 8 x half> poison, half %s, i32 02490  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer2491  %esplat = fpext <vscale x 8 x half> %splat to <vscale x 8 x double>2492  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %esplat)2493  ret <vscale x 8 x double> %r2494}2495 2496define <vscale x 8 x double> @vfcopynsign_exttrunc_vv_nxv8f64_nxv8f16(<vscale x 8 x double> %vm, <vscale x 8 x half> %vs) {2497; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv8f64_nxv8f16:2498; CHECK:       # %bb.0:2499; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2500; CHECK-NEXT:    vfwcvt.f.f.v v24, v162501; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma2502; CHECK-NEXT:    vfwcvt.f.f.v v16, v242503; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma2504; CHECK-NEXT:    vfsgnjn.vv v8, v8, v162505; CHECK-NEXT:    ret2506  %n = fneg <vscale x 8 x half> %vs2507  %eneg = fpext <vscale x 8 x half> %n to <vscale x 8 x double>2508  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %eneg)2509  ret <vscale x 8 x double> %r2510}2511 2512define <vscale x 8 x double> @vfcopynsign_exttrunc_vf_nxv8f64_nxv8f16(<vscale x 8 x double> %vm, half %s) {2513; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv8f64_nxv8f16:2514; CHECK:       # %bb.0:2515; CHECK-NEXT:    fcvt.d.h fa5, fa02516; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2517; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa52518; CHECK-NEXT:    ret2519  %head = insertelement <vscale x 8 x half> poison, half %s, i32 02520  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer2521  %n = fneg <vscale x 8 x half> %splat2522  %eneg = fpext <vscale x 8 x half> %n to <vscale x 8 x double>2523  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %eneg)2524  ret <vscale x 8 x double> %r2525}2526 2527define <vscale x 8 x double> @vfcopysign_exttrunc_vv_nxv8f64_nxv8f32(<vscale x 8 x double> %vm, <vscale x 8 x float> %vs) {2528; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv8f64_nxv8f32:2529; CHECK:       # %bb.0:2530; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2531; CHECK-NEXT:    vfwcvt.f.f.v v24, v162532; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma2533; CHECK-NEXT:    vfsgnj.vv v8, v8, v242534; CHECK-NEXT:    ret2535  %e = fpext <vscale x 8 x float> %vs to <vscale x 8 x double>2536  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %e)2537  ret <vscale x 8 x double> %r2538}2539 2540define <vscale x 8 x double> @vfcopysign_exttrunc_vf_nxv8f64_nxv8f32(<vscale x 8 x double> %vm, float %s) {2541; CHECK-LABEL: vfcopysign_exttrunc_vf_nxv8f64_nxv8f32:2542; CHECK:       # %bb.0:2543; CHECK-NEXT:    fcvt.d.s fa5, fa02544; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2545; CHECK-NEXT:    vfsgnj.vf v8, v8, fa52546; CHECK-NEXT:    ret2547  %head = insertelement <vscale x 8 x float> poison, float %s, i32 02548  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer2549  %esplat = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>2550  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %esplat)2551  ret <vscale x 8 x double> %r2552}2553 2554define <vscale x 8 x double> @vfcopynsign_exttrunc_vv_nxv8f64_nxv8f32(<vscale x 8 x double> %vm, <vscale x 8 x float> %vs) {2555; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv8f64_nxv8f32:2556; CHECK:       # %bb.0:2557; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2558; CHECK-NEXT:    vfwcvt.f.f.v v24, v162559; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma2560; CHECK-NEXT:    vfsgnjn.vv v8, v8, v242561; CHECK-NEXT:    ret2562  %n = fneg <vscale x 8 x float> %vs2563  %eneg = fpext <vscale x 8 x float> %n to <vscale x 8 x double>2564  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %eneg)2565  ret <vscale x 8 x double> %r2566}2567 2568define <vscale x 8 x double> @vfcopynsign_exttrunc_vf_nxv8f64_nxv8f32(<vscale x 8 x double> %vm, float %s) {2569; CHECK-LABEL: vfcopynsign_exttrunc_vf_nxv8f64_nxv8f32:2570; CHECK:       # %bb.0:2571; CHECK-NEXT:    fcvt.d.s fa5, fa02572; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2573; CHECK-NEXT:    vfsgnjn.vf v8, v8, fa52574; CHECK-NEXT:    ret2575  %head = insertelement <vscale x 8 x float> poison, float %s, i32 02576  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer2577  %n = fneg <vscale x 8 x float> %splat2578  %eneg = fpext <vscale x 8 x float> %n to <vscale x 8 x double>2579  %r = call <vscale x 8 x double> @llvm.copysign.nxv8f64(<vscale x 8 x double> %vm, <vscale x 8 x double> %eneg)2580  ret <vscale x 8 x double> %r2581}2582 2583define <vscale x 2 x float> @fptrunc_of_copysign_nxv2f32_nxv2f64(<vscale x 2 x double> %X, <vscale x 2 x double> %Y) {2584; CHECK-LABEL: fptrunc_of_copysign_nxv2f32_nxv2f64:2585; CHECK:       # %bb.0:2586; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2587; CHECK-NEXT:    vfsgnj.vv v10, v8, v102588; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma2589; CHECK-NEXT:    vfncvt.f.f.w v8, v102590; CHECK-NEXT:    ret2591  %copy = call fast <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> %X, <vscale x 2 x double> %Y)2592  %trunc = fptrunc <vscale x 2 x double> %copy to <vscale x 2 x float>2593  ret <vscale x 2 x float> %trunc2594}2595