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