Add function returning which operand holds immediate constant
authorVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 14 Nov 2001 18:48:36 +0000 (18:48 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 14 Nov 2001 18:48:36 +0000 (18:48 +0000)
for a given opcode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1307 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/MachineInstrInfo.h
include/llvm/Target/TargetInstrInfo.h
lib/Target/SparcV9/SparcV9Internals.h

index a64cbbe86282a8fa89777c0ea42e8d9d9af0b6ce..506cb9f7a029fa21147e650f47c93aff27f4c528 100644 (file)
@@ -209,6 +209,13 @@ public:
   virtual int maxLatency(MachineOpCode opCode) const {
     return getDescriptor(opCode).latency;
   }
+
+  //
+  // Which operand holds an immediate constant?  Returns -1 if none
+  // 
+  virtual int getImmmedConstantPos(MachineOpCode opCode) const {
+    return -1; // immediate position is machine specific, so say -1 == "none"
+  }
   
   // Check if the specified constant fits in the immediate field
   // of this machine instruction
index a64cbbe86282a8fa89777c0ea42e8d9d9af0b6ce..506cb9f7a029fa21147e650f47c93aff27f4c528 100644 (file)
@@ -209,6 +209,13 @@ public:
   virtual int maxLatency(MachineOpCode opCode) const {
     return getDescriptor(opCode).latency;
   }
+
+  //
+  // Which operand holds an immediate constant?  Returns -1 if none
+  // 
+  virtual int getImmmedConstantPos(MachineOpCode opCode) const {
+    return -1; // immediate position is machine specific, so say -1 == "none"
+  }
   
   // Check if the specified constant fits in the immediate field
   // of this machine instruction
index 53a4beb6cecf7c2d570a8a791f2a6fab76566d69..c24b9bd3841975ea08f08402b289f230236568ed 100644 (file)
@@ -89,6 +89,22 @@ extern const MachineInstrDescriptor SparcMachineInstrDesc[];
 class UltraSparcInstrInfo : public MachineInstrInfo {
 public:
   /*ctor*/     UltraSparcInstrInfo(const TargetMachine& tgt);
+
+  //
+  // All immediate constants are in position 0 except the
+  // store instructions.
+  // 
+  virtual int getImmmedConstantPos(MachineOpCode opCode) const {
+    bool ignore;
+    if (this->maxImmedConstant(opCode, ignore) != 0)
+      {
+        assert(! this->isStore((MachineOpCode) STB - 1)); // first store is STB
+        assert(! this->isStore((MachineOpCode) STD + 1)); // last  store is STD
+        return (opCode >= STB || opCode <= STD)? 2 : 1;
+      }
+    else
+      return -1;
+  }
   
   virtual bool         hasResultInterlock      (MachineOpCode opCode) const
   {