[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp X86ISelLowering.h X86ISelPattern.cpp X86InstrInfo.td

Andrew Lenharth alenhar2 at cs.uiuc.edu
Sun Nov 20 13:41:22 PST 2005



Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.1 -> 1.2
X86ISelLowering.h updated: 1.1 -> 1.2
X86ISelPattern.cpp updated: 1.185 -> 1.186
X86InstrInfo.td updated: 1.139 -> 1.140
---
Log message:

The second patch of X86 support for read cycle counter.

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

 X86ISelLowering.cpp |    7 +++++++
 X86ISelLowering.h   |    4 ++++
 X86ISelPattern.cpp  |    5 +++++
 X86InstrInfo.td     |    4 ++++
 4 files changed, 20 insertions(+)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.1 llvm/lib/Target/X86/X86ISelLowering.cpp:1.2
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.1	Mon Nov 14 18:40:24 2005
+++ llvm/lib/Target/X86/X86ISelLowering.cpp	Sun Nov 20 15:41:10 2005
@@ -101,6 +101,7 @@
   setOperationAction(ISD::CTPOP            , MVT::i32  , Expand);
   setOperationAction(ISD::CTTZ             , MVT::i32  , Expand);
   setOperationAction(ISD::CTLZ             , MVT::i32  , Expand);
+  setOperationAction(ISD::READCYCLECOUNTER , MVT::i64  , Custom);
 
   setOperationAction(ISD::READIO           , MVT::i1   , Expand);
   setOperationAction(ISD::READIO           , MVT::i8   , Expand);
@@ -912,5 +913,11 @@
     return DAG.getLoad(Op.getValueType(), FIST, StackSlot,
                        DAG.getSrcValue(NULL));
   }
+  case ISD::READCYCLECOUNTER: {
+    SDOperand rd = DAG.getNode(X86ISD::RDTSC_DAG, MVT::Other, Op.getOperand(0));
+    SDOperand Lo = DAG.getCopyFromReg(rd, X86::EAX, MVT::i32);
+    SDOperand Hi = DAG.getCopyFromReg(rd, X86::EDX, MVT::i32);
+    return DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Lo, Hi);
+  }
   }
 }


Index: llvm/lib/Target/X86/X86ISelLowering.h
diff -u llvm/lib/Target/X86/X86ISelLowering.h:1.1 llvm/lib/Target/X86/X86ISelLowering.h:1.2
--- llvm/lib/Target/X86/X86ISelLowering.h:1.1	Mon Nov 14 18:40:24 2005
+++ llvm/lib/Target/X86/X86ISelLowering.h	Sun Nov 20 15:41:10 2005
@@ -62,6 +62,10 @@
       /// LLVM.
       CALL,
       TAILCALL,
+      
+      /// RDTSC_DAG - This operation implements the lowering for 
+      /// readcyclecounter
+      RDTSC_DAG,
     };
   }
 


Index: llvm/lib/Target/X86/X86ISelPattern.cpp
diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.185 llvm/lib/Target/X86/X86ISelPattern.cpp:1.186
--- llvm/lib/Target/X86/X86ISelPattern.cpp:1.185	Mon Nov 14 18:40:24 2005
+++ llvm/lib/Target/X86/X86ISelPattern.cpp	Sun Nov 20 15:41:10 2005
@@ -3090,6 +3090,11 @@
   default:
     Node->dump(); std::cerr << "\n";
     assert(0 && "Node not handled yet!");
+  case X86ISD::RDTSC_DAG:
+    Select(Node->getOperand(0)); //Chain
+    BuildMI(BB, X86::RDTSC, 0);
+    return;
+
   case ISD::EntryToken: return;  // Noop
   case ISD::TokenFactor:
     if (Node->getNumOperands() == 2) {


Index: llvm/lib/Target/X86/X86InstrInfo.td
diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.139 llvm/lib/Target/X86/X86InstrInfo.td:1.140
--- llvm/lib/Target/X86/X86InstrInfo.td:1.139	Sat Nov 19 01:01:30 2005
+++ llvm/lib/Target/X86/X86InstrInfo.td	Sun Nov 20 15:41:10 2005
@@ -167,6 +167,10 @@
 def PHI : I<0, Pseudo, (ops variable_ops), "PHINODE">;        // PHI node.
 def NOOP : I<0x90, RawFrm, (ops), "nop">; // nop
 
+//FIXME: encode this correctly
+let Defs = [EAX, EDX] in
+  def RDTSC : I<0, Pseudo, (ops ), "rdtsc">; //in binary, this inst is 0x0f 0x31
+
 def ADJCALLSTACKDOWN : I<0, Pseudo, (ops i32imm:$amt), "#ADJCALLSTACKDOWN">;
 def ADJCALLSTACKUP   : I<0, Pseudo, (ops i32imm:$amt1, i32imm:$amt2),
                          "#ADJCALLSTACKUP">;






More information about the llvm-commits mailing list