本文整理汇总了C++中tr::Register::isDiscardable方法的典型用法代码示例。如果您正苦于以下问题:C++ Register::isDiscardable方法的具体用法?C++ Register::isDiscardable怎么用?C++ Register::isDiscardable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tr::Register
的用法示例。
在下文中一共展示了Register::isDiscardable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: self
void OMR::X86::Instruction::clobberRegsForRematerialisation()
{
// We assume most instructions modify all registers that appear in their
// postconditions, with a few exceptions.
//
if ( self()->cg()->enableRematerialisation()
&& self()->getDependencyConditions()
&& (self()->getOpCodeValue() != ASSOCREGS) // reg associations aren't really instructions, so they don't modify anything
&& (self()->getOpCodeValue() != LABEL) // labels must already be handled properly for a variety of reasons
&& (!self()->getOpCode().isShiftOp())
&& (!self()->getOpCode().isRotateOp()) // shifts and rotates often have a postcondition on ecx but don't clobber it
){
// Check the live discardable register list to see if this is the first
// instruction that kills the rematerialisable range of a register.
//
TR::ClobberingInstruction *clob = NULL;
TR_X86RegisterDependencyGroup *post = self()->getDependencyConditions()->getPostConditions();
for (uint32_t i = 0; i < self()->getDependencyConditions()->getNumPostConditions(); i++)
{
TR::Register *reg = post->getRegisterDependency(i)->getRegister();
if (reg->isDiscardable())
{
if (!clob)
{
clob = new (self()->cg()->trHeapMemory()) TR::ClobberingInstruction(self(), self()->cg()->trMemory());
self()->cg()->addClobberingInstruction(clob);
}
clob->addClobberedRegister(reg);
self()->cg()->removeLiveDiscardableRegister(reg);
self()->cg()->clobberLiveDependentDiscardableRegisters(clob, reg);
if (debug("dumpRemat"))
diagnostic("---> Clobbering %s discardable postcondition register %s at instruction %s\n",
self()->cg()->getDebug()->toString(reg->getRematerializationInfo()),
self()->cg()->getDebug()->getName(reg),
self()->cg()->getDebug()->getName(self()));
}
}
}
}