[llvm-commits] CVS: llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp ARMInstrInfo.td

Rafael Espindola rafael.espindola at gmail.com
Tue Oct 10 13:39:12 PDT 2006



Changes in directory llvm/lib/Target/ARM:

ARMISelDAGToDAG.cpp updated: 1.64 -> 1.65
ARMInstrInfo.td updated: 1.42 -> 1.43
---
Log message:

uint <-> double conversion


---
Diffs of the changes:  (+26 -0)

 ARMISelDAGToDAG.cpp |   18 ++++++++++++++++++
 ARMInstrInfo.td     |    8 ++++++++
 2 files changed, 26 insertions(+)


Index: llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
diff -u llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp:1.64 llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp:1.65
--- llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp:1.64	Tue Oct 10 13:55:14 2006
+++ llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp	Tue Oct 10 15:38:57 2006
@@ -52,6 +52,7 @@
   setOperationAction(ISD::FP_TO_SINT, MVT::i32, Custom);
   setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom);
 
+  setOperationAction(ISD::FP_TO_UINT, MVT::i32, Custom);
   setOperationAction(ISD::UINT_TO_FP, MVT::i32, Custom);
 
   setOperationAction(ISD::RET,           MVT::Other, Custom);
@@ -103,8 +104,10 @@
       FTOSID,
 
       FUITOS,
+      FTOUIS,
 
       FUITOD,
+      FTOUID,
 
       FMRRD,
 
@@ -155,7 +158,9 @@
   case ARMISD::FSITOD:        return "ARMISD::FSITOD";
   case ARMISD::FTOSID:        return "ARMISD::FTOSID";
   case ARMISD::FUITOS:        return "ARMISD::FUITOS";
+  case ARMISD::FTOUIS:        return "ARMISD::FTOUIS";
   case ARMISD::FUITOD:        return "ARMISD::FUITOD";
+  case ARMISD::FTOUID:        return "ARMISD::FTOUID";
   case ARMISD::FMRRD:         return "ARMISD::FMRRD";
   case ARMISD::FMDRR:         return "ARMISD::FMDRR";
   case ARMISD::FMSTAT:        return "ARMISD::FMSTAT";
@@ -614,6 +619,17 @@
   return DAG.getNode(op, vt, Tmp);
 }
 
+static SDOperand LowerFP_TO_UINT(SDOperand Op, SelectionDAG &DAG) {
+  assert(Op.getValueType() == MVT::i32);
+  SDOperand FloatVal = Op.getOperand(0);
+  MVT::ValueType  vt = FloatVal.getValueType();
+  assert(vt == MVT::f32 || vt == MVT::f64);
+
+  ARMISD::NodeType op = vt == MVT::f32 ? ARMISD::FTOUIS : ARMISD::FTOUID;
+  SDOperand Tmp = DAG.getNode(op, MVT::f32, FloatVal);
+  return DAG.getNode(ISD::BIT_CONVERT, MVT::i32, Tmp);
+}
+
 SDOperand ARMTargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
   switch (Op.getOpcode()) {
   default:
@@ -627,6 +643,8 @@
     return LowerFP_TO_SINT(Op, DAG);
   case ISD::SINT_TO_FP:
     return LowerSINT_TO_FP(Op, DAG);
+  case ISD::FP_TO_UINT:
+    return LowerFP_TO_UINT(Op, DAG);
   case ISD::UINT_TO_FP:
     return LowerUINT_TO_FP(Op, DAG);
   case ISD::FORMAL_ARGUMENTS:


Index: llvm/lib/Target/ARM/ARMInstrInfo.td
diff -u llvm/lib/Target/ARM/ARMInstrInfo.td:1.42 llvm/lib/Target/ARM/ARMInstrInfo.td:1.43
--- llvm/lib/Target/ARM/ARMInstrInfo.td:1.42	Tue Oct 10 14:35:00 2006
+++ llvm/lib/Target/ARM/ARMInstrInfo.td	Tue Oct 10 15:38:57 2006
@@ -81,7 +81,9 @@
 def armfsitod      : SDNode<"ARMISD::FSITOD", SDTUnaryOp>;
 def armftosid      : SDNode<"ARMISD::FTOSID", SDTUnaryOp>;
 def armfuitos      : SDNode<"ARMISD::FUITOS", SDTUnaryOp>;
+def armftouis      : SDNode<"ARMISD::FTOUIS", SDTUnaryOp>;
 def armfuitod      : SDNode<"ARMISD::FUITOD", SDTUnaryOp>;
+def armftouid      : SDNode<"ARMISD::FTOUID", SDTUnaryOp>;
 
 def SDTarmfmrrd    : SDTypeProfile<0, 3, [SDTCisInt<0>, SDTCisInt<1>, SDTCisFP<2>]>;
 def armfmrrd       : SDNode<"ARMISD::FMRRD", SDTarmfmrrd,
@@ -215,9 +217,15 @@
 def FUITOS  : InstARM<(ops FPRegs:$dst, FPRegs:$src),
                        "fuitos $dst, $src", [(set FPRegs:$dst, (armfuitos FPRegs:$src))]>;
 
+def FTOUIS  : InstARM<(ops FPRegs:$dst, FPRegs:$src),
+                       "ftouis $dst, $src", [(set FPRegs:$dst, (armftouis FPRegs:$src))]>;
+
 def FUITOD  : InstARM<(ops DFPRegs:$dst, FPRegs:$src),
                        "fuitod $dst, $src", [(set DFPRegs:$dst, (armfuitod FPRegs:$src))]>;
 
+def FTOUID  : InstARM<(ops FPRegs:$dst, DFPRegs:$src),
+                       "ftouid $dst, $src", [(set FPRegs:$dst, (armftouid DFPRegs:$src))]>;
+
 def FCVTDS  : InstARM<(ops DFPRegs:$dst, FPRegs:$src),
                        "fcvtds $dst, $src", [(set DFPRegs:$dst, (fextend FPRegs:$src))]>;
 






More information about the llvm-commits mailing list