mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
MachineInstr: Inline the fast path (non-bundle instruction) of hasProperty.
This is particularly helpful as both arguments tend to be constants. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152991 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
70de1e442d
commit
85f9cef27e
@ -308,7 +308,14 @@ public:
|
||||
/// The first argument is the property being queried.
|
||||
/// The second argument indicates whether the query should look inside
|
||||
/// instruction bundles.
|
||||
bool hasProperty(unsigned Flag, QueryType Type = AnyInBundle) const;
|
||||
bool hasProperty(unsigned MCFlag, QueryType Type = AnyInBundle) const {
|
||||
// Inline the fast path.
|
||||
if (Type == IgnoreBundle || !isBundle())
|
||||
return getDesc().getFlags() & (1 << MCFlag);
|
||||
|
||||
// If we have a bundle, take the slow path.
|
||||
return hasPropertyInBundle(1 << MCFlag, Type);
|
||||
}
|
||||
|
||||
/// isVariadic - Return true if this instruction can have a variable number of
|
||||
/// operands. In this case, the variable operands will be after the normal
|
||||
@ -911,6 +918,10 @@ private:
|
||||
/// this instruction from their respective use lists. This requires that the
|
||||
/// operands not be on their use lists yet.
|
||||
void AddRegOperandsToUseLists(MachineRegisterInfo &RegInfo);
|
||||
|
||||
/// hasPropertyInBundle - Slow path for hasProperty when we're dealing with a
|
||||
/// bundle.
|
||||
bool hasPropertyInBundle(unsigned Mask, QueryType Type) const;
|
||||
};
|
||||
|
||||
/// MachineInstrExpressionTrait - Special DenseMapInfo traits to compare
|
||||
|
@ -751,15 +751,11 @@ void MachineInstr::addMemOperand(MachineFunction &MF,
|
||||
NumMemRefs = NewNum;
|
||||
}
|
||||
|
||||
bool
|
||||
MachineInstr::hasProperty(unsigned MCFlag, QueryType Type) const {
|
||||
if (Type == IgnoreBundle || !isBundle())
|
||||
return getDesc().getFlags() & (1 << MCFlag);
|
||||
|
||||
bool MachineInstr::hasPropertyInBundle(unsigned Mask, QueryType Type) const {
|
||||
const MachineBasicBlock *MBB = getParent();
|
||||
MachineBasicBlock::const_instr_iterator MII = *this; ++MII;
|
||||
while (MII != MBB->end() && MII->isInsideBundle()) {
|
||||
if (MII->getDesc().getFlags() & (1 << MCFlag)) {
|
||||
if (MII->getDesc().getFlags() & Mask) {
|
||||
if (Type == AnyInBundle)
|
||||
return true;
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user