diff options
author | Chris Lattner <sabre@nondot.org> | 2006-09-09 06:03:30 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-09-09 06:03:30 +0000 |
commit | f0359b343a45a78441c0cc284aaad13172040f82 (patch) | |
tree | 4d10fd15638695cf1ff1562212d304fe71a81a77 /llvm/lib/CodeGen | |
parent | a4b7de8669a1c0db74d3a8783cd631f0fb9e6766 (diff) | |
download | bcm5719-llvm-f0359b343a45a78441c0cc284aaad13172040f82.tar.gz bcm5719-llvm-f0359b343a45a78441c0cc284aaad13172040f82.zip |
Implement the fpowi now by lowering to a libcall
llvm-svn: 30225
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 1 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 7 |
3 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index c32da68454a..3545b246894 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -2581,7 +2581,14 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { break; } break; - + case ISD::FPOWI: { + // We always lower FPOWI into a libcall. No target support it yet. + const char *FnName = Node->getValueType(0) == MVT::f32 + ? "__powisf2" : "__powidf2"; + SDOperand Dummy; + Result = ExpandLibCall(FnName, Node, Dummy); + break; + } case ISD::BIT_CONVERT: if (!isTypeLegal(Node->getOperand(0).getValueType())) { Result = ExpandBIT_CONVERT(Node->getValueType(0), Node->getOperand(0)); diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 4fa168fccde..044a2fa976f 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -2404,6 +2404,7 @@ const char *SDNode::getOperationName(const SelectionDAG *G) const { case ISD::FSQRT: return "fsqrt"; case ISD::FSIN: return "fsin"; case ISD::FCOS: return "fcos"; + case ISD::FPOWI: return "fpowi"; // Binary operators case ISD::ADD: return "add"; diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index f1cdcdfa979..578f8d2f3da 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -1620,6 +1620,13 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { getValue(I.getOperand(1)).getValueType(), getValue(I.getOperand(1)))); return 0; + case Intrinsic::powi_f32: + case Intrinsic::powi_f64: + setValue(&I, DAG.getNode(ISD::FPOWI, + getValue(I.getOperand(1)).getValueType(), + getValue(I.getOperand(1)), + getValue(I.getOperand(2)))); + return 0; case Intrinsic::pcmarker: { SDOperand Tmp = getValue(I.getOperand(1)); DAG.setRoot(DAG.getNode(ISD::PCMARKER, MVT::Other, getRoot(), Tmp)); |