diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith-f16.mir b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith-f16.mir index 96f019948537f..855764a8b8c09 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith-f16.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith-f16.mir @@ -1,7 +1,7 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py -# RUN: llc -mtriple=riscv32 -mattr=+zfh -run-pass=instruction-select \ +# RUN: llc -mtriple=riscv32 -mattr=+zfh,+d -run-pass=instruction-select \ # RUN: -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s -# RUN: llc -mtriple=riscv64 -mattr=+zfh -run-pass=instruction-select \ +# RUN: llc -mtriple=riscv64 -mattr=+zfh,+d -run-pass=instruction-select \ # RUN: -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s --- @@ -241,7 +241,7 @@ body: | ... --- -name: fcopysign_f16 +name: fcopysign_f16_f16 legalized: true regBankSelected: true tracksRegLiveness: true @@ -249,7 +249,7 @@ body: | bb.0: liveins: $f10_h, $f11_h - ; CHECK-LABEL: name: fcopysign_f16 + ; CHECK-LABEL: name: fcopysign_f16_f16 ; CHECK: liveins: $f10_h, $f11_h ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $f10_h @@ -264,3 +264,103 @@ body: | PseudoRET implicit $f10_h ... +--- +name: fcopysign_f16_f32 +legalized: true +regBankSelected: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_h, $f11_f + + ; CHECK-LABEL: name: fcopysign_f16_f32 + ; CHECK: liveins: $f10_h, $f11_f + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $f10_h + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $f11_f + ; CHECK-NEXT: [[FCVT_H_S:%[0-9]+]]:fpr16 = nofpexcept FCVT_H_S [[COPY1]], 7 + ; CHECK-NEXT: [[FSGNJ_H:%[0-9]+]]:fpr16 = FSGNJ_H [[COPY]], [[FCVT_H_S]] + ; CHECK-NEXT: $f10_h = COPY [[FSGNJ_H]] + ; CHECK-NEXT: PseudoRET implicit $f10_h + %0:fprb(s16) = COPY $f10_h + %1:fprb(s32) = COPY $f11_f + %2:fprb(s16) = G_FCOPYSIGN %0, %1 + $f10_h = COPY %2(s16) + PseudoRET implicit $f10_h + +... +--- +name: fcopysign_f32_f16 +legalized: true +regBankSelected: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_f, $f11_h + + ; CHECK-LABEL: name: fcopysign_f32_f16 + ; CHECK: liveins: $f10_f, $f11_h + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $f11_h + ; CHECK-NEXT: [[FCVT_S_H:%[0-9]+]]:fpr32 = nofpexcept FCVT_S_H [[COPY1]], 0 + ; CHECK-NEXT: [[FSGNJ_S:%[0-9]+]]:fpr32 = FSGNJ_S [[COPY]], [[FCVT_S_H]] + ; CHECK-NEXT: $f10_f = COPY [[FSGNJ_S]] + ; CHECK-NEXT: PseudoRET implicit $f10_f + %0:fprb(s32) = COPY $f10_f + %1:fprb(s16) = COPY $f11_h + %2:fprb(s32) = G_FCOPYSIGN %0, %1 + $f10_f = COPY %2(s32) + PseudoRET implicit $f10_f + +... +--- +name: fcopysign_f16_f64 +legalized: true +regBankSelected: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_h, $f11_d + + ; CHECK-LABEL: name: fcopysign_f16_f64 + ; CHECK: liveins: $f10_h, $f11_d + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $f10_h + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d + ; CHECK-NEXT: [[FCVT_H_D:%[0-9]+]]:fpr16 = nofpexcept FCVT_H_D [[COPY1]], 7 + ; CHECK-NEXT: [[FSGNJ_H:%[0-9]+]]:fpr16 = FSGNJ_H [[COPY]], [[FCVT_H_D]] + ; CHECK-NEXT: $f10_h = COPY [[FSGNJ_H]] + ; CHECK-NEXT: PseudoRET implicit $f10_h + %0:fprb(s16) = COPY $f10_h + %1:fprb(s64) = COPY $f11_d + %2:fprb(s16) = G_FCOPYSIGN %0, %1 + $f10_h = COPY %2(s16) + PseudoRET implicit $f10_h + +... +--- +name: fcopysign_f64_f16 +legalized: true +regBankSelected: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_d, $f11_h + + ; CHECK-LABEL: name: fcopysign_f64_f16 + ; CHECK: liveins: $f10_d, $f11_h + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $f11_h + ; CHECK-NEXT: [[FCVT_D_H:%[0-9]+]]:fpr64 = nofpexcept FCVT_D_H [[COPY1]], 0 + ; CHECK-NEXT: [[FSGNJ_D:%[0-9]+]]:fpr64 = FSGNJ_D [[COPY]], [[FCVT_D_H]] + ; CHECK-NEXT: $f10_d = COPY [[FSGNJ_D]] + ; CHECK-NEXT: PseudoRET implicit $f10_d + %0:fprb(s64) = COPY $f10_d + %1:fprb(s16) = COPY $f11_h + %2:fprb(s64) = G_FCOPYSIGN %0, %1 + $f10_d = COPY %2(s64) + PseudoRET implicit $f10_d + +... diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith.mir b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith.mir index 037647ae68872..45cba58875341 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/fp-arith.mir @@ -241,7 +241,7 @@ body: | ... --- -name: fcopysign_f32 +name: fcopysign_f32_f32 legalized: true regBankSelected: true tracksRegLiveness: true @@ -249,7 +249,7 @@ body: | bb.0: liveins: $f10_f, $f11_f - ; CHECK-LABEL: name: fcopysign_f32 + ; CHECK-LABEL: name: fcopysign_f32_f32 ; CHECK: liveins: $f10_f, $f11_f ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f @@ -263,6 +263,31 @@ body: | $f10_f = COPY %2(s32) PseudoRET implicit $f10_f +... +--- +name: fcopysign_f32_f64 +legalized: true +regBankSelected: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_f, $f11_d + + ; CHECK-LABEL: name: fcopysign_f32_f64 + ; CHECK: liveins: $f10_f, $f11_d + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d + ; CHECK-NEXT: [[FCVT_S_D:%[0-9]+]]:fpr32 = nofpexcept FCVT_S_D [[COPY1]], 7 + ; CHECK-NEXT: [[FSGNJ_S:%[0-9]+]]:fpr32 = FSGNJ_S [[COPY]], [[FCVT_S_D]] + ; CHECK-NEXT: $f10_f = COPY [[FSGNJ_S]] + ; CHECK-NEXT: PseudoRET implicit $f10_f + %0:fprb(s32) = COPY $f10_f + %1:fprb(s64) = COPY $f11_d + %2:fprb(s32) = G_FCOPYSIGN %0, %1 + $f10_f = COPY %2(s32) + PseudoRET implicit $f10_f + ... --- name: fadd_f64 @@ -501,7 +526,7 @@ body: | ... --- -name: fcopysign_f64 +name: fcopysign_f64_f64 legalized: true regBankSelected: true tracksRegLiveness: true @@ -509,7 +534,7 @@ body: | bb.0: liveins: $f10_d, $f11_d - ; CHECK-LABEL: name: fcopysign_f64 + ; CHECK-LABEL: name: fcopysign_f64_f64 ; CHECK: liveins: $f10_d, $f11_d ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d @@ -524,3 +549,28 @@ body: | PseudoRET implicit $f10_d ... +--- +name: fcopysign_f64_f32 +legalized: true +regBankSelected: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_d, $f11_f + + ; CHECK-LABEL: name: fcopysign_f64_f32 + ; CHECK: liveins: $f10_d, $f11_f + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $f11_f + ; CHECK-NEXT: [[FCVT_D_S:%[0-9]+]]:fpr64 = nofpexcept FCVT_D_S [[COPY1]], 0 + ; CHECK-NEXT: [[FSGNJ_D:%[0-9]+]]:fpr64 = FSGNJ_D [[COPY]], [[FCVT_D_S]] + ; CHECK-NEXT: $f10_d = COPY [[FSGNJ_D]] + ; CHECK-NEXT: PseudoRET implicit $f10_d + %0:fprb(s64) = COPY $f10_d + %1:fprb(s32) = COPY $f11_f + %2:fprb(s64) = G_FCOPYSIGN %0, %1 + $f10_d = COPY %2(s64) + PseudoRET implicit $f10_d + +... diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith-f16.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith-f16.mir index f1777e945b12d..f9e459271e640 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith-f16.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith-f16.mir @@ -1,7 +1,7 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py -# RUN: llc -mtriple=riscv32 -mattr=+zfh -run-pass=legalizer %s -o - \ +# RUN: llc -mtriple=riscv32 -mattr=+zfh,+d -run-pass=legalizer %s -o - \ # RUN: | FileCheck %s -# RUN: llc -mtriple=riscv64 -mattr=+zfh -run-pass=legalizer %s -o - \ +# RUN: llc -mtriple=riscv64 -mattr=+zfh,+d -run-pass=legalizer %s -o - \ # RUN: | FileCheck %s --- @@ -211,12 +211,12 @@ body: | ... --- -name: fcopysign_f16 +name: fcopysign_f16_f16 body: | bb.0: liveins: $f10_h, $f11_h - ; CHECK-LABEL: name: fcopysign_f16 + ; CHECK-LABEL: name: fcopysign_f16_f16 ; CHECK: liveins: $f10_h, $f11_h ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h @@ -231,3 +231,87 @@ body: | PseudoRET implicit $f10_h ... +--- +name: fcopysign_f16_f32 +body: | + bb.0: + liveins: $f10_h, $f11_f + + ; CHECK-LABEL: name: fcopysign_f16_f32 + ; CHECK: liveins: $f10_h, $f11_f + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:_(s16) = G_FCOPYSIGN [[COPY]], [[COPY1]](s32) + ; CHECK-NEXT: $f10_h = COPY [[FCOPYSIGN]](s16) + ; CHECK-NEXT: PseudoRET implicit $f10_h + %0:_(s16) = COPY $f10_h + %1:_(s32) = COPY $f11_f + %2:_(s16) = G_FCOPYSIGN %0, %1 + $f10_h = COPY %2(s16) + PseudoRET implicit $f10_h + +... +--- +name: fcopysign_f32_f16 +body: | + bb.0: + liveins: $f10_f, $f11_h + + ; CHECK-LABEL: name: fcopysign_f32_f16 + ; CHECK: liveins: $f10_f, $f11_h + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f11_h + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:_(s32) = G_FCOPYSIGN [[COPY]], [[COPY1]](s16) + ; CHECK-NEXT: $f10_f = COPY [[FCOPYSIGN]](s32) + ; CHECK-NEXT: PseudoRET implicit $f10_f + %0:_(s32) = COPY $f10_f + %1:_(s16) = COPY $f11_h + %2:_(s32) = G_FCOPYSIGN %0, %1 + $f10_f = COPY %2(s32) + PseudoRET implicit $f10_f + +... +--- +name: fcopysign_f16_f64 +body: | + bb.0: + liveins: $f10_h, $f11_d + + ; CHECK-LABEL: name: fcopysign_f16_f64 + ; CHECK: liveins: $f10_h, $f11_d + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $f11_d + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:_(s16) = G_FCOPYSIGN [[COPY]], [[COPY1]](s64) + ; CHECK-NEXT: $f10_h = COPY [[FCOPYSIGN]](s16) + ; CHECK-NEXT: PseudoRET implicit $f10_h + %0:_(s16) = COPY $f10_h + %1:_(s64) = COPY $f11_d + %2:_(s16) = G_FCOPYSIGN %0, %1 + $f10_h = COPY %2(s16) + PseudoRET implicit $f10_h + +... +--- +name: fcopysign_f64_f16 +body: | + bb.0: + liveins: $f10_d, $f11_h + + ; CHECK-LABEL: name: fcopysign_f64_f16 + ; CHECK: liveins: $f10_d, $f11_h + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $f10_d + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f11_h + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:_(s64) = G_FCOPYSIGN [[COPY]], [[COPY1]](s16) + ; CHECK-NEXT: $f10_d = COPY [[FCOPYSIGN]](s64) + ; CHECK-NEXT: PseudoRET implicit $f10_d + %0:_(s64) = COPY $f10_d + %1:_(s16) = COPY $f11_h + %2:_(s64) = G_FCOPYSIGN %0, %1 + $f10_d = COPY %2(s64) + PseudoRET implicit $f10_d + +... diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith.mir index 599779d09c2c1..af4feac4e62fe 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fp-arith.mir @@ -211,12 +211,12 @@ body: | ... --- -name: fcopysign_f32 +name: fcopysign_f32_f32 body: | bb.0: liveins: $f10_f, $f11_f - ; CHECK-LABEL: name: fcopysign_f32 + ; CHECK-LABEL: name: fcopysign_f32_f32 ; CHECK: liveins: $f10_f, $f11_f ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f @@ -230,6 +230,27 @@ body: | $f10_f = COPY %2(s32) PseudoRET implicit $f10_f +... +--- +name: fcopysign_f32_f64 +body: | + bb.0: + liveins: $f10_f, $f11_d + + ; CHECK-LABEL: name: fcopysign_f32_f64 + ; CHECK: liveins: $f10_f, $f11_d + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $f11_d + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:_(s32) = G_FCOPYSIGN [[COPY]], [[COPY1]](s64) + ; CHECK-NEXT: $f10_f = COPY [[FCOPYSIGN]](s32) + ; CHECK-NEXT: PseudoRET implicit $f10_f + %0:_(s32) = COPY $f10_f + %1:_(s64) = COPY $f11_d + %2:_(s32) = G_FCOPYSIGN %0, %1 + $f10_f = COPY %2(s32) + PseudoRET implicit $f10_f + ... --- name: fadd_f64 @@ -438,12 +459,12 @@ body: | ... --- -name: fcopysign_f64 +name: fcopysign_f64_f64 body: | bb.0: liveins: $f10_d, $f11_d - ; CHECK-LABEL: name: fcopysign_f64 + ; CHECK-LABEL: name: fcopysign_f64_f64 ; CHECK: liveins: $f10_d, $f11_d ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $f10_d @@ -458,3 +479,24 @@ body: | PseudoRET implicit $f10_d ... +--- +name: fcopysign_f64_f32 +body: | + bb.0: + liveins: $f10_d, $f11_f + + ; CHECK-LABEL: name: fcopysign_f64_f32 + ; CHECK: liveins: $f10_d, $f11_f + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $f10_d + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:_(s64) = G_FCOPYSIGN [[COPY]], [[COPY1]](s32) + ; CHECK-NEXT: $f10_d = COPY [[FCOPYSIGN]](s64) + ; CHECK-NEXT: PseudoRET implicit $f10_d + %0:_(s64) = COPY $f10_d + %1:_(s32) = COPY $f11_f + %2:_(s64) = G_FCOPYSIGN %0, %1 + $f10_d = COPY %2(s64) + PseudoRET implicit $f10_d + +... diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith-f16.mir b/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith-f16.mir index ace4aa542377b..1ef5c48f0b5b6 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith-f16.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith-f16.mir @@ -1,8 +1,8 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py -# RUN: llc -mtriple=riscv32 -mattr=+zfh -run-pass=regbankselect \ +# RUN: llc -mtriple=riscv32 -mattr=+zfh,+d -run-pass=regbankselect \ # RUN: -simplify-mir -verify-machineinstrs %s \ # RUN: -o - | FileCheck %s -# RUN: llc -mtriple=riscv64 -mattr=+zfh -run-pass=regbankselect \ +# RUN: llc -mtriple=riscv64 -mattr=+zfh,+d -run-pass=regbankselect \ # RUN: -simplify-mir -verify-machineinstrs %s \ # RUN: -o - | FileCheck %s @@ -233,14 +233,14 @@ body: | ... --- -name: fcopysign_f16 +name: fcopysign_f16_f16 legalized: true tracksRegLiveness: true body: | bb.0: liveins: $f10_h, $f11_h - ; CHECK-LABEL: name: fcopysign_f16 + ; CHECK-LABEL: name: fcopysign_f16_f16 ; CHECK: liveins: $f10_h, $f11_h ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s16) = COPY $f10_h @@ -255,3 +255,95 @@ body: | PseudoRET implicit $f10_h ... +--- +name: fcopysign_f16_f32 +legalized: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_h, $f11_f + + ; CHECK-LABEL: name: fcopysign_f16_f32 + ; CHECK: liveins: $f10_h, $f11_f + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s16) = COPY $f10_h + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fprb(s32) = COPY $f11_f + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:fprb(s16) = G_FCOPYSIGN [[COPY]], [[COPY1]](s32) + ; CHECK-NEXT: $f10_h = COPY [[FCOPYSIGN]](s16) + ; CHECK-NEXT: PseudoRET implicit $f10_h + %0:_(s16) = COPY $f10_h + %1:_(s32) = COPY $f11_f + %2:_(s16) = G_FCOPYSIGN %0, %1 + $f10_h = COPY %2(s16) + PseudoRET implicit $f10_h + +... +--- +name: fcopysign_f32_f16 +legalized: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_f, $f11_h + + ; CHECK-LABEL: name: fcopysign_f32_f16 + ; CHECK: liveins: $f10_f, $f11_h + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f10_f + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fprb(s16) = COPY $f11_h + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:fprb(s32) = G_FCOPYSIGN [[COPY]], [[COPY1]](s16) + ; CHECK-NEXT: $f10_f = COPY [[FCOPYSIGN]](s32) + ; CHECK-NEXT: PseudoRET implicit $f10_f + %0:_(s32) = COPY $f10_f + %1:_(s16) = COPY $f11_h + %2:_(s32) = G_FCOPYSIGN %0, %1 + $f10_f = COPY %2(s32) + PseudoRET implicit $f10_f + +... +--- +name: fcopysign_f16_f64 +legalized: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_h, $f11_d + + ; CHECK-LABEL: name: fcopysign_f16_f64 + ; CHECK: liveins: $f10_h, $f11_d + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s16) = COPY $f10_h + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fprb(s64) = COPY $f11_d + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:fprb(s16) = G_FCOPYSIGN [[COPY]], [[COPY1]](s64) + ; CHECK-NEXT: $f10_h = COPY [[FCOPYSIGN]](s16) + ; CHECK-NEXT: PseudoRET implicit $f10_h + %0:_(s16) = COPY $f10_h + %1:_(s64) = COPY $f11_d + %2:_(s16) = G_FCOPYSIGN %0, %1 + $f10_h = COPY %2(s16) + PseudoRET implicit $f10_h + +... +--- +name: fcopysign_f64_f16 +legalized: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_d, $f11_h + + ; CHECK-LABEL: name: fcopysign_f64_f16 + ; CHECK: liveins: $f10_d, $f11_h + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s64) = COPY $f10_d + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fprb(s16) = COPY $f11_h + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:fprb(s64) = G_FCOPYSIGN [[COPY]], [[COPY1]](s16) + ; CHECK-NEXT: $f10_d = COPY [[FCOPYSIGN]](s64) + ; CHECK-NEXT: PseudoRET implicit $f10_d + %0:_(s64) = COPY $f10_d + %1:_(s16) = COPY $f11_h + %2:_(s64) = G_FCOPYSIGN %0, %1 + $f10_d = COPY %2(s64) + PseudoRET implicit $f10_d + +... diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith.mir b/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith.mir index 1ac6837a77bdb..2801faf76820b 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/regbankselect/fp-arith.mir @@ -233,14 +233,14 @@ body: | ... --- -name: fcopysign_f32 +name: fcopysign_f32_f32 legalized: true tracksRegLiveness: true body: | bb.0: liveins: $f10_f, $f11_f - ; CHECK-LABEL: name: fcopysign_f32 + ; CHECK-LABEL: name: fcopysign_f32_f32 ; CHECK: liveins: $f10_f, $f11_f ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f10_f @@ -254,6 +254,29 @@ body: | $f10_f = COPY %2(s32) PseudoRET implicit $f10_f +... +--- +name: fcopysign_f32_f64 +legalized: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_f, $f11_d + + ; CHECK-LABEL: name: fcopysign_f32_f64 + ; CHECK: liveins: $f10_f, $f11_d + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f10_f + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fprb(s64) = COPY $f11_d + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:fprb(s32) = G_FCOPYSIGN [[COPY]], [[COPY1]](s64) + ; CHECK-NEXT: $f10_f = COPY [[FCOPYSIGN]](s32) + ; CHECK-NEXT: PseudoRET implicit $f10_f + %0:_(s32) = COPY $f10_f + %1:_(s64) = COPY $f11_d + %2:_(s32) = G_FCOPYSIGN %0, %1 + $f10_f = COPY %2(s32) + PseudoRET implicit $f10_f + ... --- name: fadd_f64 @@ -482,14 +505,14 @@ body: | ... --- -name: fcopysign_f64 +name: fcopysign_f64_f64 legalized: true tracksRegLiveness: true body: | bb.0: liveins: $f10_d, $f11_d - ; CHECK-LABEL: name: fcopysign_f64 + ; CHECK-LABEL: name: fcopysign_f64_f64 ; CHECK: liveins: $f10_d, $f11_d ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s64) = COPY $f10_d @@ -504,3 +527,26 @@ body: | PseudoRET implicit $f10_d ... +--- +name: fcopysign_f64_f32 +legalized: true +tracksRegLiveness: true +body: | + bb.0: + liveins: $f10_d, $f11_f + + ; CHECK-LABEL: name: fcopysign_f64_f32 + ; CHECK: liveins: $f10_d, $f11_f + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s64) = COPY $f10_d + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fprb(s32) = COPY $f11_f + ; CHECK-NEXT: [[FCOPYSIGN:%[0-9]+]]:fprb(s64) = G_FCOPYSIGN [[COPY]], [[COPY1]](s32) + ; CHECK-NEXT: $f10_d = COPY [[FCOPYSIGN]](s64) + ; CHECK-NEXT: PseudoRET implicit $f10_d + %0:_(s64) = COPY $f10_d + %1:_(s32) = COPY $f11_f + %2:_(s64) = G_FCOPYSIGN %0, %1 + $f10_d = COPY %2(s64) + PseudoRET implicit $f10_d + +...