[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp

Chris Lattner lattner at cs.uiuc.edu
Fri Sep 8 23:03:44 PDT 2006



Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.391 -> 1.392
SelectionDAG.cpp updated: 1.336 -> 1.337
SelectionDAGISel.cpp updated: 1.273 -> 1.274
---
Log message:

Implement the fpowi now by lowering to a libcall


---
Diffs of the changes:  (+16 -1)

 LegalizeDAG.cpp      |    9 ++++++++-
 SelectionDAG.cpp     |    1 +
 SelectionDAGISel.cpp |    7 +++++++
 3 files changed, 16 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.391 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.392
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.391	Fri Sep  8 19:20:27 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp	Sat Sep  9 01:03:30 2006
@@ -2581,7 +2581,14 @@
       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));


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.336 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.337
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.336	Tue Aug 29 01:42:35 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp	Sat Sep  9 01:03:30 2006
@@ -2404,6 +2404,7 @@
   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";


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.273 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.274
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.273	Wed Sep  6 20:59:34 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp	Sat Sep  9 01:03:30 2006
@@ -1620,6 +1620,13 @@
                              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));






More information about the llvm-commits mailing list