[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp

Evan Cheng evan.cheng at apple.com
Fri Dec 16 18:03:01 PST 2005



Changes in directory llvm/lib/Target/X86:

X86ISelDAGToDAG.cpp updated: 1.13 -> 1.14
---
Log message:

Added truncate.


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

 X86ISelDAGToDAG.cpp |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+)


Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.13 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.14
--- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.13	Fri Dec 16 19:24:02 2005
+++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp	Fri Dec 16 20:02:50 2005
@@ -391,6 +391,34 @@
       }
       break;
 
+    case ISD::TRUNCATE: {
+      unsigned Reg;
+      MVT::ValueType VT;
+      switch (Node->getOperand(0).getValueType()) {
+        default: assert(0 && "Unknown truncate!");
+        case MVT::i16: Reg = X86::AX;  Opc = X86::MOV16rr; VT = MVT::i16; break;
+        case MVT::i32: Reg = X86::EAX; Opc = X86::MOV32rr; VT = MVT::i32; break;
+      }
+      SDOperand Tmp0 = Select(Node->getOperand(0));
+      SDOperand Tmp1 = CurDAG->getTargetNode(Opc, VT, Tmp0);
+      SDOperand InFlag = SDOperand(0,0);
+      SDOperand Result = CurDAG->getCopyToReg(CurDAG->getEntryNode(),
+                                              Reg, Tmp1, InFlag).getValue(1);
+      SDOperand Chain = Result.getValue(0);
+      InFlag = Result.getValue(1);
+
+      switch (NVT) {
+        default: assert(0 && "Unknown truncate!");
+        case MVT::i8:  Reg = X86::AL;  Opc = X86::MOV8rr;  VT = MVT::i8;  break;
+        case MVT::i16: Reg = X86::AX;  Opc = X86::MOV16rr; VT = MVT::i16; break;
+      }
+
+      Result = CurDAG->getCopyFromReg(Chain,
+                                      Reg, VT, InFlag);
+      return CodeGenMap[N] = CurDAG->getTargetNode(Opc, VT, Result);
+      break;
+    }
+
     case ISD::RET: {
       SDOperand Chain = Node->getOperand(0);     // Token chain.
       unsigned NumOps = Node->getNumOperands();






More information about the llvm-commits mailing list