[llvm-commits] CVS: llvm/lib/Target/Sparc/SparcInstrSelection.cpp
Vikram Adve
vadve at cs.uiuc.edu
Sat Sep 28 11:56:01 PDT 2002
Changes in directory llvm/lib/Target/Sparc:
SparcInstrSelection.cpp updated: 1.73 -> 1.74
---
Log message:
Simplify Call translation slightly.
---
Diffs of the changes:
Index: llvm/lib/Target/Sparc/SparcInstrSelection.cpp
diff -u llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.73 llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.74
--- llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.73 Fri Sep 27 09:33:08 2002
+++ llvm/lib/Target/Sparc/SparcInstrSelection.cpp Sat Sep 28 11:55:41 2002
@@ -1965,11 +1965,11 @@
}
case 61: // reg: Call
- { // Generate a direct (CALL) or indirect (JMPL). depending
- // Mark the return-address register and the indirection
- // register (if any) as hidden virtual registers.
- // Also, mark the operands of the Call and return value (if
- // any) as implicit operands of the CALL machine instruction.
+ { // Generate a direct (CALL) or indirect (JMPL) call.
+ // Mark the return-address register, the indirection
+ // register (for indirect calls), the operands of the Call,
+ // and the return value (if any) as implicit operands
+ // of the machine instruction.
//
// If this is a varargs function, floating point arguments
// have to passed in integer registers so insert
@@ -1977,34 +1977,22 @@
//
CallInst *callInstr = cast<CallInst>(subtreeRoot->getInstruction());
Value *callee = callInstr->getCalledValue();
-
- // Create hidden virtual register for return address, with type void*.
+
+ // Create hidden virtual register for return address with type void*
TmpInstruction* retAddrReg =
new TmpInstruction(PointerType::get(Type::VoidTy), callInstr);
MachineCodeForInstruction::get(callInstr).addTemp(retAddrReg);
-
+
// Generate the machine instruction and its operands.
// Use CALL for direct function calls; this optimistically assumes
// the PC-relative address fits in the CALL address field (22 bits).
// Use JMPL for indirect calls.
//
- if (isa<Function>(callee))
- { // direct function call
- M = new MachineInstr(CALL);
- M->SetMachineOperandVal(0, MachineOperand::MO_PCRelativeDisp,
- callee);
- }
- else
- { // indirect function call
- M = new MachineInstr(JMPLCALL);
- M->SetMachineOperandVal(0, MachineOperand::MO_VirtualRegister,
- callee);
- M->SetMachineOperandConst(1, MachineOperand::MO_SignExtendedImmed,
- (int64_t) 0);
- M->SetMachineOperandVal(2, MachineOperand::MO_VirtualRegister,
- retAddrReg);
- }
-
+ if (isa<Function>(callee)) // direct function call
+ M = Create1OperandInstr_Addr(CALL, callee);
+ else // indirect function call
+ M = Create3OperandInstr_SImmed(JMPLCALL, callee,
+ (int64_t) 0, retAddrReg);
mvec.push_back(M);
const FunctionType* funcType =
More information about the llvm-commits
mailing list