Split JMPL into JMPLCALL and JMPLRET so that IsCall and IsReturn can
authorVikram S. Adve <vadve@cs.uiuc.edu>
Mon, 22 Oct 2001 13:41:12 +0000 (13:41 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Mon, 22 Oct 2001 13:41:12 +0000 (13:41 +0000)
be used to distinguish those uses of the `jmpl' instruction.

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

lib/Target/SparcV9/SparcV9RegInfo.cpp

index d65d57edce515da6ca9a1818a746373c776a2529..b28ce51b9896b74e3dce3429fc70f6dcb8355eb5 100644 (file)
@@ -35,7 +35,7 @@ UltraSparcRegInfo::getCallInstRetVal(const MachineInstr *CallMI) const{
        return  CallMI->getImplicitRef(NumOfImpRefs-2); 
 
   }
-  else if( OpCode == JMPL) {
+  else if( OpCode == JMPLCALL) {
 
     // The last implicit operand is the return value of a JMPL in   
     if( NumOfImpRefs > 0 )
@@ -67,7 +67,7 @@ UltraSparcRegInfo::getCallInstRetAddr(const MachineInstr *CallMI)const {
     return  CallMI->getImplicitRef(NumOfImpRefs-1); 
 
   }
-  else if( OpCode == JMPL ) {
+  else if( OpCode == JMPLCALL ) {
 
     MachineOperand & MO  = ( MachineOperand &) CallMI->getOperand(2);
     return MO.getVRegValue();
@@ -84,7 +84,7 @@ UltraSparcRegInfo::getCallInstRetAddr(const MachineInstr *CallMI)const {
 
 
 //---------------------------------------------------------------------------
-// Finds the # of actaul arguments of the call instruction
+// Finds the # of actual arguments of the call instruction
 //---------------------------------------------------------------------------
 
 const unsigned 
@@ -111,7 +111,7 @@ UltraSparcRegInfo::getCallInstNumArgs(const MachineInstr *CallMI) const {
     }
 
   }
-  else if( OpCode == JMPL ) {
+  else if( OpCode == JMPLCALL ) {
 
     // The last implicit operand is the return value of a JMPL instr
     if( NumOfImpRefs > 0 ) {
@@ -136,19 +136,17 @@ UltraSparcRegInfo::getCallInstNumArgs(const MachineInstr *CallMI) const {
 //---------------------------------------------------------------------------
 // Suggests a register for the ret address in the RET machine instruction
 //---------------------------------------------------------------------------
+
 void UltraSparcRegInfo::suggestReg4RetAddr(const MachineInstr * RetMI, 
                                           LiveRangeInfo& LRI) const {
 
-  assert( (RetMI->getNumOperands() == 2) && "RETURN must have 2 operands");
+  assert( (RetMI->getNumOperands() >= 2)
+          && "JMPL/RETURN must have 3 and 2 operands respectively");
+  
   MachineOperand & MO  = ( MachineOperand &) RetMI->getOperand(0);
 
   MO.setRegForValue( getUnifiedRegNum( IntRegClassID, SparcIntRegOrder::i7) );
-
-  // ***TODO: If the JMPL can be also used as a return instruction, 
-  // change the assertion. The return address register of JMPL will still
-  // be Operand(0)
-
-
+  
   // TODO (Optimize): 
   // Instead of setting the color, we can suggest one. In that case,
   // we have to test later whether it received the suggested color.