[llvm-commits] CVS: llvm/lib/Target/Sparc/SparcInstrSelection.cpp

Vikram Adve vadve at cs.uiuc.edu
Mon Aug 11 22:05:00 PDT 2003


Changes in directory llvm/lib/Target/Sparc:

SparcInstrSelection.cpp updated: 1.115 -> 1.116

---
Log message:

Fix va_arg to generate LDDFi for floating point values, instead of LDXi.
All non-FP cases use LDXi as before.


---
Diffs of the changes:

Index: llvm/lib/Target/Sparc/SparcInstrSelection.cpp
diff -u llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.115 llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.116
--- llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.115	Mon Aug 11 13:42:47 2003
+++ llvm/lib/Target/Sparc/SparcInstrSelection.cpp	Mon Aug 11 22:04:05 2003
@@ -2807,13 +2807,15 @@
       case 64:	// reg:   Phi(reg,reg)
         break;                          // don't forward the value
 
-      case 65:	// reg:   VaArg(reg)
+      case 65:	// reg:   VaArg(reg): the va_arg instruction
       {
         // Use value initialized by va_start as pointer to args on the stack.
         // Load argument via current pointer value, then increment pointer.
         int argSize = target.getFrameInfo().getSizeOfEachArgOnStack();
         Instruction* vaArgI = subtreeRoot->getInstruction();
-        mvec.push_back(BuildMI(V9::LDXi, 3).addReg(vaArgI->getOperand(0)).
+        MachineOpCode loadOp = vaArgI->getType()->isFloatingPoint()? V9::LDDFi
+                                                                   : V9::LDXi;
+        mvec.push_back(BuildMI(loadOp, 3).addReg(vaArgI->getOperand(0)).
                        addSImm(0).addRegDef(vaArgI));
         mvec.push_back(BuildMI(V9::ADDi, 3).addReg(vaArgI->getOperand(0)).
                        addSImm(argSize).addRegDef(vaArgI->getOperand(0)));





More information about the llvm-commits mailing list