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:
parent
fee8b04935
commit
bf47a27643
@ -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 {
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user