1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

Add a utility function to MachineInstr for testing whether an instruction

has exactly one MachineMemOperand, and change some X86 lowering code to
make use of it.

llvm-svn: 53498
This commit is contained in:
Dan Gohman 2008-07-12 00:10:52 +00:00
parent fee8b04935
commit bf47a27643
2 changed files with 10 additions and 7 deletions

View File

@ -115,6 +115,13 @@ public:
{ return MemOperands.end(); }
bool memoperands_empty() const { return MemOperands.empty(); }
/// hasOneMemOperand - Return true if this instruction has exactly one
/// MachineMemOperand.
bool hasOneMemOperand() const {
return !memoperands_empty() &&
next(memoperands_begin()) == memoperands_end();
}
/// isIdenticalTo - Return true if this instruction is identical to (same
/// opcode and same operands as) the specified instruction.
bool isIdenticalTo(const MachineInstr *Other) const {

View File

@ -2030,14 +2030,10 @@ MachineInstr* X86InstrInfo::foldMemoryOperand(MachineFunction &MF,
// Check switch flag
if (NoFusing) return NULL;
// Determine the alignment of the load.
unsigned Alignment = 0;
for (alist<MachineMemOperand>::iterator i = LoadMI->memoperands_begin(),
e = LoadMI->memoperands_end(); i != e; ++i) {
const MachineMemOperand &MRO = *i;
unsigned Align = MRO.getAlignment();
if (Align > Alignment)
Alignment = Align;
}
if (LoadMI->hasOneMemOperand())
Alignment = LoadMI->memoperands_begin()->getAlignment();
// FIXME: Move alignment requirement into tables?
if (Alignment < 16) {