diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-09-09 23:35:53 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-09-09 23:35:53 +0000 |
commit | 0fff397a134b156cb4b9d60472b2d1ebd19cd3cd (patch) | |
tree | 4e8774048d576420d3f8430857a0d44a6aa948c2 /llvm/lib | |
parent | 613855c8afc3d04cf746d6e2f0c43c2d5346b97e (diff) | |
download | bcm5719-llvm-0fff397a134b156cb4b9d60472b2d1ebd19cd3cd.tar.gz bcm5719-llvm-0fff397a134b156cb4b9d60472b2d1ebd19cd3cd.zip |
A few more places where FPOW is being ignored.
llvm-svn: 56032
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 86ae4088bb7..79f03468f0d 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -3531,6 +3531,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) { Result = DAG.getNode(ISD::SELECT, VT, Tmp2, Tmp1, Tmp3); break; } + case ISD::FSQRT: + case ISD::FSIN: + case ISD::FCOS: case ISD::FLOG: case ISD::FLOG2: case ISD::FLOG10: @@ -3540,10 +3543,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) { case ISD::FFLOOR: case ISD::FCEIL: case ISD::FRINT: - case ISD::FNEARBYINT: - case ISD::FSQRT: - case ISD::FSIN: - case ISD::FCOS: { + case ISD::FNEARBYINT: { MVT VT = Node->getValueType(0); // Expand unsupported unary vector operators by unrolling them. @@ -3606,6 +3606,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) { LC = GetFPLibCall(VT, RTLIB::NEARBYINT_F32, RTLIB::NEARBYINT_F64, RTLIB::NEARBYINT_F80, RTLIB::NEARBYINT_PPCF128); break; + break; default: assert(0 && "Unreachable!"); } SDValue Dummy; @@ -4214,12 +4215,16 @@ SDValue SelectionDAGLegalize::PromoteOp(SDValue Op) { DAG.getValueType(VT)); break; + case ISD::FPOW: case ISD::FPOWI: { - // Promote f32 powi to f64 powi. Note that this could insert a libcall + // Promote f32 pow(i) to f64 pow(i). Note that this could insert a libcall // directly as well, which may be better. Tmp1 = PromoteOp(Node->getOperand(0)); + Tmp2 = Node->getOperand(1); + if (Node->getOpcode() == ISD::FPOW) + Tmp2 = PromoteOp(Tmp2); assert(Tmp1.getValueType() == NVT); - Result = DAG.getNode(ISD::FPOWI, NVT, Tmp1, Node->getOperand(1)); + Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2); if (NoExcessFPPrecision) Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result, DAG.getValueType(VT)); @@ -6615,7 +6620,8 @@ void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){ case ISD::FCEIL: case ISD::FRINT: case ISD::FNEARBYINT: - case ISD::FPOW: { + case ISD::FPOW: + case ISD::FPOWI: { RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL; switch(Node->getOpcode()) { case ISD::FSQRT: |