[llvm-commits] CVS: llvm/lib/Target/Sparc/SparcInstrSelection.cpp SparcRegInfo.cpp
Vikram Adve
vadve at cs.uiuc.edu
Tue Jul 1 20:15:01 PDT 2003
Changes in directory llvm/lib/Target/Sparc:
SparcInstrSelection.cpp updated: 1.103 -> 1.104
SparcRegInfo.cpp updated: 1.99 -> 1.100
---
Log message:
Bug/case fixes:
(1) select: Ok to convert a pointer to a float or double.
(2) regalloc: Some MachineInstr* for caller-saving code before a call
were being inserted before and after the call!
(3) Don't insert the caller-saving instructions in the
MachineCodeForInstruction for the Call instruction.
*All* instructions generated by register allocation need to be
recorded in those maps, but it needs to be done uniformly.
---
Diffs of the changes:
Index: llvm/lib/Target/Sparc/SparcInstrSelection.cpp
diff -u llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.103 llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.104
--- llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.103 Sun Jun 22 21:13:57 2003
+++ llvm/lib/Target/Sparc/SparcInstrSelection.cpp Tue Jul 1 20:13:57 2003
@@ -477,14 +477,15 @@
opType == Type::ShortTy || opType == Type::UShortTy ||
opType == Type::IntTy || opType == Type::UIntTy)
opCode = (vopCode == ToFloatTy? V9::FITOS : V9::FITOD);
- else if (opType == Type::LongTy || opType == Type::ULongTy)
+ else if (opType == Type::LongTy || opType == Type::ULongTy ||
+ isa<PointerType>(opType))
opCode = (vopCode == ToFloatTy? V9::FXTOS : V9::FXTOD);
else if (opType == Type::FloatTy)
opCode = (vopCode == ToFloatTy? V9::INVALID_OPCODE : V9::FSTOD);
else if (opType == Type::DoubleTy)
opCode = (vopCode == ToFloatTy? V9::FDTOS : V9::INVALID_OPCODE);
else
- assert(0 && "Cannot convert this type to DOUBLE on SPARC");
+ assert(0 && "Trying to convert a non-scalar type to DOUBLE?");
return opCode;
}
Index: llvm/lib/Target/Sparc/SparcRegInfo.cpp
diff -u llvm/lib/Target/Sparc/SparcRegInfo.cpp:1.99 llvm/lib/Target/Sparc/SparcRegInfo.cpp:1.100
--- llvm/lib/Target/Sparc/SparcRegInfo.cpp:1.99 Mon Jun 16 07:03:00 2003
+++ llvm/lib/Target/Sparc/SparcRegInfo.cpp Tue Jul 1 20:13:57 2003
@@ -942,14 +942,23 @@
for(unsigned i=0; i < ReorderedVec.size(); i++)
CallAI->InstrnsBefore.push_back( ReorderedVec[i] );
- //Insert machine instructions before and after call into the
- //call instructions map --- Anand
- const CallInst *callInst = argDesc->getCallInst();
- MachineCodeForInstruction &mvec = MachineCodeForInstruction::get(callInst);
- mvec.insert(mvec.begin(), CallAI->InstrnsBefore.begin(),
- CallAI->InstrnsBefore.end());
- mvec.insert(mvec.end(), CallAI->InstrnsAfter.begin(),
- CallAI->InstrnsAfter.end());
+#ifndef NDEBUG
+ // Temporary sanity checking code to detect whether the same machine
+ // instruction is ever inserted twice before/after a call.
+ // I suspect this is happening but am not sure. --Vikram, 7/1/03.
+ //
+ std::set<const MachineInstr*> instrsSeen;
+ for (int i = 0, N = CallAI->InstrnsBefore.size(); i < N; ++i) {
+ assert(instrsSeen.find(CallAI->InstrnsBefore[i]) == instrsSeen.end() &&
+ "Duplicate machine instruction in InstrnsBefore!");
+ instrsSeen.insert(CallAI->InstrnsBefore[i]);
+ }
+ for (int i = 0, N = CallAI->InstrnsAfter.size(); i < N; ++i) {
+ assert(instrsSeen.find(CallAI->InstrnsAfter[i]) == instrsSeen.end() &&
+ "Duplicate machine instruction in InstrnsBefore/After!");
+ instrsSeen.insert(CallAI->InstrnsAfter[i]);
+ }
+#endif
}
//---------------------------------------------------------------------------
@@ -1361,10 +1370,10 @@
int StackOff =
PRA.MF.getInfo()->pushTempValue(getSpilledRegSize(RegType));
- std::vector<MachineInstr*> AdIBef, AdIAft;
-
//---- Insert code for pushing the reg on stack ----------
+ std::vector<MachineInstr*> AdIBef, AdIAft;
+
// We may need a scratch register to copy the saved value
// to/from memory. This may itself have to insert code to
// free up a scratch register. Any such code should go before
@@ -1395,6 +1404,9 @@
//---- Insert code for popping the reg from the stack ----------
+ AdIBef.clear();
+ AdIAft.clear();
+
// We may need a scratch register to copy the saved value
// from memory. This may itself have to insert code to
// free up a scratch register. Any such code should go
More information about the llvm-commits
mailing list