Re-apply the memory operand changes, with a fix for the static

initializer problem, a minor tweak to the way the
DAGISelEmitter finds load/store nodes, and a renaming of the
new PseudoSourceValue objects.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46827 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2008-02-06 22:27:42 +00:00
parent b745e88bf0
commit 69de1932b3
21 changed files with 595 additions and 157 deletions

View File

@ -15,6 +15,8 @@
#include "llvm/Value.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/PseudoSourceValue.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetInstrDesc.h"
@ -292,6 +294,7 @@ MachineInstr::MachineInstr(const MachineInstr &MI) {
TID = &MI.getDesc();
NumImplicitOps = MI.NumImplicitOps;
Operands.reserve(MI.getNumOperands());
MemOperands = MI.MemOperands;
// Add operands
for (unsigned i = 0; i != MI.getNumOperands(); ++i) {
@ -627,6 +630,34 @@ void MachineInstr::print(std::ostream &OS, const TargetMachine *TM) const {
getOperand(i).print(OS, TM);
}
if (getNumMemOperands() > 0) {
OS << ", SV:";
for (unsigned i = 0; i < getNumMemOperands(); i++) {
const MemOperand &MRO = getMemOperand(i);
const Value *V = MRO.getValue();
assert(V && "SV missing.");
assert((MRO.isLoad() || MRO.isStore()) &&
"SV has to be a load, store or both.");
if (MRO.isVolatile())
OS << "Volatile ";
if (MRO.isLoad())
OS << "LD ";
if (MRO.isStore())
OS << "ST ";
OS << MRO.getSize();
if (!V->getName().empty())
OS << "[" << V->getName() << " + " << MRO.getOffset() << "]";
else if (isa<PseudoSourceValue>(V))
OS << "[" << *V << " + " << MRO.getOffset() << "]";
else
OS << "[" << V << " + " << MRO.getOffset() << "]";
}
}
OS << "\n";
}