Legalizer was missing code that expand fpow to a libcall.
llvm-svn: 56028
This commit is contained in:
parent
ab6676a46a
commit
f4e5de4583
|
@ -6602,13 +6602,9 @@ void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){
|
||||||
Lo = ExpandLibCall(LC, Node, true, Hi);
|
Lo = ExpandLibCall(LC, Node, true, Hi);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ISD::FPOWI:
|
case ISD::FSQRT:
|
||||||
Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::POWI_F32,
|
case ISD::FSIN:
|
||||||
RTLIB::POWI_F64,
|
case ISD::FCOS:
|
||||||
RTLIB::POWI_F80,
|
|
||||||
RTLIB::POWI_PPCF128),
|
|
||||||
Node, false, Hi);
|
|
||||||
break;
|
|
||||||
case ISD::FLOG:
|
case ISD::FLOG:
|
||||||
case ISD::FLOG2:
|
case ISD::FLOG2:
|
||||||
case ISD::FLOG10:
|
case ISD::FLOG10:
|
||||||
|
@ -6619,9 +6615,7 @@ void SelectionDAGLegalize::ExpandOp(SDValue Op, SDValue &Lo, SDValue &Hi){
|
||||||
case ISD::FCEIL:
|
case ISD::FCEIL:
|
||||||
case ISD::FRINT:
|
case ISD::FRINT:
|
||||||
case ISD::FNEARBYINT:
|
case ISD::FNEARBYINT:
|
||||||
case ISD::FSQRT:
|
case ISD::FPOW: {
|
||||||
case ISD::FSIN:
|
|
||||||
case ISD::FCOS: {
|
|
||||||
RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
|
RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
|
||||||
switch(Node->getOpcode()) {
|
switch(Node->getOpcode()) {
|
||||||
case ISD::FSQRT:
|
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,
|
LC = GetFPLibCall(VT, RTLIB::NEARBYINT_F32, RTLIB::NEARBYINT_F64,
|
||||||
RTLIB::NEARBYINT_F80, RTLIB::NEARBYINT_PPCF128);
|
RTLIB::NEARBYINT_F80, RTLIB::NEARBYINT_PPCF128);
|
||||||
break;
|
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!");
|
default: assert(0 && "Unreachable!");
|
||||||
}
|
}
|
||||||
Lo = ExpandLibCall(LC, Node, false, Hi);
|
Lo = ExpandLibCall(LC, Node, false, Hi);
|
||||||
|
|
|
@ -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 ) ; <double> [#uses=1]
|
||||||
|
ret double %0
|
||||||
|
}
|
||||||
|
|
||||||
|
declare double @llvm.pow.f64(double, double) nounwind readonly
|
Loading…
Reference in New Issue