llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-sparc Author: Koakuma (koachan) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/135717.diff 2 Files Affected: - (modified) llvm/lib/Target/Sparc/SparcInstrVIS.td (+13) - (added) llvm/test/CodeGen/SPARC/float-vis3.ll (+59) ``````````diff diff --git a/llvm/lib/Target/Sparc/SparcInstrVIS.td b/llvm/lib/Target/Sparc/SparcInstrVIS.td index b806f0c413899..27f8358576789 100644 --- a/llvm/lib/Target/Sparc/SparcInstrVIS.td +++ b/llvm/lib/Target/Sparc/SparcInstrVIS.td @@ -316,4 +316,17 @@ def : Pat<(i64 (sext (i32 (bitconvert f32:$src)))), (MOVSTOSW $src)>; def : Pat<(f32 (bitconvert i32:$src)), (MOVWTOS $src)>; def : Pat<(i64 (bitconvert f64:$src)), (MOVDTOX $src)>; def : Pat<(f64 (bitconvert i64:$src)), (MOVXTOD $src)>; + +// OP-then-neg FP operations. +def : Pat<(f32 (fneg (fadd f32:$rs1, f32:$rs2))), (FNADDS $rs1, $rs2)>; +def : Pat<(f64 (fneg (fadd f64:$rs1, f64:$rs2))), (FNADDD $rs1, $rs2)>; +def : Pat<(f32 (fneg (fmul f32:$rs1, f32:$rs2))), (FNMULS $rs1, $rs2)>; +def : Pat<(f32 (fmul (fneg f32:$rs1), f32:$rs2)), (FNMULS $rs1, $rs2)>; +def : Pat<(f32 (fmul f32:$rs1, (fneg f32:$rs2))), (FNMULS $rs1, $rs2)>; +def : Pat<(f64 (fneg (fmul f64:$rs1, f64:$rs2))), (FNMULD $rs1, $rs2)>; +def : Pat<(f64 (fmul (fneg f64:$rs1), f64:$rs2)), (FNMULD $rs1, $rs2)>; +def : Pat<(f64 (fmul f64:$rs1, (fneg f64:$rs2))), (FNMULD $rs1, $rs2)>; +def : Pat<(f64 (fneg (fmul (fpextend f32:$rs1), (fpextend f32:$rs2)))), (FNSMULD $rs1, $rs2)>; +def : Pat<(f64 (fmul (fneg (fpextend f32:$rs1)), (fpextend f32:$rs2))), (FNSMULD $rs1, $rs2)>; +def : Pat<(f64 (fmul (fpextend f32:$rs1), (fneg (fpextend f32:$rs2)))), (FNSMULD $rs1, $rs2)>; } // Predicates = [HasVIS3] diff --git a/llvm/test/CodeGen/SPARC/float-vis3.ll b/llvm/test/CodeGen/SPARC/float-vis3.ll new file mode 100644 index 0000000000000..bc9904dfa356a --- /dev/null +++ b/llvm/test/CodeGen/SPARC/float-vis3.ll @@ -0,0 +1,59 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc -mtriple=sparc64 -mattr=+vis3 < %s | FileCheck %s + +define float @fnadds(float %a, float %b) nounwind { +; CHECK-LABEL: fnadds: +; CHECK: ! %bb.0: ! %entry +; CHECK-NEXT: retl +; CHECK-NEXT: fnadds %f1, %f3, %f0 +entry: + %add = fadd float %a, %b + %fneg = fneg float %add + ret float %fneg +} + +define double @fnaddd(double %a, double %b) nounwind { +; CHECK-LABEL: fnaddd: +; CHECK: ! %bb.0: ! %entry +; CHECK-NEXT: retl +; CHECK-NEXT: fnaddd %f0, %f2, %f0 +entry: + %add = fadd double %a, %b + %fneg = fneg double %add + ret double %fneg +} + +define float @fnmuls(float %a, float %b) nounwind { +; CHECK-LABEL: fnmuls: +; CHECK: ! %bb.0: ! %entry +; CHECK-NEXT: retl +; CHECK-NEXT: fnmuls %f1, %f3, %f0 +entry: + %mul = fmul float %a, %b + %fneg = fneg float %mul + ret float %fneg +} + +define double @fnmuld(double %a, double %b) nounwind { +; CHECK-LABEL: fnmuld: +; CHECK: ! %bb.0: ! %entry +; CHECK-NEXT: retl +; CHECK-NEXT: fnmuld %f0, %f2, %f0 +entry: + %mul = fmul double %a, %b + %fneg = fneg double %mul + ret double %fneg +} + +define double @fnsmuld(float %a, float %b) nounwind { +; CHECK-LABEL: fnsmuld: +; CHECK: ! %bb.0: ! %entry +; CHECK-NEXT: retl +; CHECK-NEXT: fnsmuld %f1, %f3, %f0 +entry: + %conv.i = fpext float %a to double + %conv1.i = fpext float %b to double + %mul = fmul double %conv.i, %conv1.i + %fneg = fneg double %mul + ret double %fneg +} `````````` </details> https://github.com/llvm/llvm-project/pull/135717 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits