From 4b88702ac3fac540b970e2d92f3dcc5071f16a84 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Tue, 9 Sep 2008 23:02:14 +0000 Subject: [PATCH] Legalizer was missing code that expand fpow to a libcall. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56028 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 22 ++++++++++++---------- test/CodeGen/ARM/fpow.ll | 10 ++++++++++ 2 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 test/CodeGen/ARM/fpow.ll diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 1155addfe5f..86ae4088bb7 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -6602,13 +6602,9 @@ void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){ Lo = ExpandLibCall(LC, Node, true, Hi); break; } - case ISD::FPOWI: - Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::POWI_F32, - RTLIB::POWI_F64, - RTLIB::POWI_F80, - RTLIB::POWI_PPCF128), - Node, false, Hi); - break; + case ISD::FSQRT: + case ISD::FSIN: + case ISD::FCOS: case ISD::FLOG: case ISD::FLOG2: case ISD::FLOG10: @@ -6619,9 +6615,7 @@ void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){ case ISD::FCEIL: case ISD::FRINT: case ISD::FNEARBYINT: - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: { + case ISD::FPOW: { RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL; switch(Node->getOpcode()) { case ISD::FSQRT: @@ -6676,6 +6670,14 @@ void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){ LC = GetFPLibCall(VT, RTLIB::NEARBYINT_F32, RTLIB::NEARBYINT_F64, RTLIB::NEARBYINT_F80, RTLIB::NEARBYINT_PPCF128); break; + case ISD::FPOW: + LC = GetFPLibCall(VT, RTLIB::POW_F32, RTLIB::POW_F64, RTLIB::POW_F80, + RTLIB::POW_PPCF128); + break; + case ISD::FPOWI: + LC = GetFPLibCall(VT, RTLIB::POWI_F32, RTLIB::POWI_F64, RTLIB::POWI_F80, + RTLIB::POWI_PPCF128); + break; default: assert(0 && "Unreachable!"); } Lo = ExpandLibCall(LC, Node, false, Hi); diff --git a/test/CodeGen/ARM/fpow.ll b/test/CodeGen/ARM/fpow.ll new file mode 100644 index 00000000000..02a895bf96c --- /dev/null +++ b/test/CodeGen/ARM/fpow.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=arm +; RUN: llvm-as < %s | llc -march=thumb + +define double @t(double %x, double %y) nounwind notes(opt_size) { +entry: + %0 = tail call double @llvm.pow.f64( double %x, double %y ) ; [#uses=1] + ret double %0 +} + +declare double @llvm.pow.f64(double, double) nounwind readonly