// Volatile memory operands are not allowed in long subtractions // if we are compiling for an SMP machine, as the carry flag can // get clobbered by the memory barrier immediately preceding the // SBB4RegMem instruction. // static bool isVolatileMemoryOperand(TR::Node *node) { if (TR::Compiler->target.isSMP() && node->getOpCode().isMemoryReference()) { TR_ASSERT(node->getSymbolReference(), "expecting a symbol reference\n"); TR::Symbol *sym = node->getSymbolReference()->getSymbol(); return (sym && sym->isVolatile()); } return false; }
bool OMR::SymbolReference::storeCanBeRemoved() { TR::Compilation *comp = TR::comp(); TR::Symbol * s = self()->getSymbol(); return !s->isVolatile() && (((s->getDataType() != TR::Double) && (s->getDataType() != TR::Float)) || comp->cg()->getSupportsJavaFloatSemantics() || (self()->isTemporary(comp) && !s->behaveLikeNonTemp())); }