本文整理汇总了C++中tr::ResolvedMethodSymbol::hasVeryRefinedAliasSets方法的典型用法代码示例。如果您正苦于以下问题:C++ ResolvedMethodSymbol::hasVeryRefinedAliasSets方法的具体用法?C++ ResolvedMethodSymbol::hasVeryRefinedAliasSets怎么用?C++ ResolvedMethodSymbol::hasVeryRefinedAliasSets使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tr::ResolvedMethodSymbol
的用法示例。
在下文中一共展示了ResolvedMethodSymbol::hasVeryRefinedAliasSets方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
TR_BitVector *
OMR::SymbolReference::getUseDefAliasesBV(bool isDirectCall, bool includeGCSafePoint)
{
TR::Compilation *comp = TR::comp();
TR::Region &aliasRegion = comp->aliasRegion();
int32_t bvInitialSize = comp->getSymRefCount();
TR_BitVectorGrowable growability = growable;
// allow more than one shadow for an array type. Used by LoopAliasRefiner
const bool supportArrayRefinement=true;
int32_t kind = _symbol->getKind();
TR::SymbolReferenceTable * symRefTab = comp->getSymRefTab();
// !!! NOTE !!!
// THERE IS A COPY OF THIS LOGIC IN sharesSymbol
//
if (!self()->reallySharesSymbol(comp))
{
switch (kind)
{
case TR::Symbol::IsShadow:
case TR::Symbol::IsStatic:
{
// For unresolved constant dynamic, we need to invoke a Java bootstrap method,
// which can have arbitrary side effects, so the aliasing should be conservative here.
// isConstObjectRef now returns true for condy, so we add an explicit condition,
// more like a short-circuit, to say if we are unresolved and not isConstObjectRef
// (this is the same as before), or if we are unresolved and condy
// (this is the extra condition added), we would return conservative aliases.
if ((self()->isUnresolved() && (_symbol->isConstantDynamic() || !_symbol->isConstObjectRef())) ||
_symbol->isVolatile() || self()->isLiteralPoolAddress() ||
self()->isFromLiteralPool() || _symbol->isUnsafeShadowSymbol() ||
(_symbol->isArrayShadowSymbol() && comp->getMethodSymbol()->hasVeryRefinedAliasSets()))
{
// getUseDefAliases might not return NULL
}
else if (!symRefTab->aliasBuilder.mutableGenericIntShadowHasBeenCreated())
{
// getUseDefAliases must return NULL
return NULL;
}
else if (kind == TR::Symbol::IsStatic && !symRefTab->aliasBuilder.litPoolGenericIntShadowHasBeenCreated())
{
// getUseDefAliases must return NULL
return NULL;
}
break;
}
}
}
// now do stuff for various kinds of symbols
//
switch (kind)
{
case TR::Symbol::IsMethod:
{
TR::MethodSymbol * methodSymbol = _symbol->castToMethodSymbol();
if (!methodSymbol->isHelper())
return symRefTab->aliasBuilder.methodAliases(self());
if (symRefTab->isNonHelper(self(), TR::SymbolReferenceTable::arraySetSymbol) ||
symRefTab->isNonHelper(self(), TR::SymbolReferenceTable::osrFearPointHelperSymbol) ||
symRefTab->isNonHelper(self(), TR::SymbolReferenceTable::potentialOSRPointHelperSymbol))
{
return &symRefTab->aliasBuilder.defaultMethodDefAliases();
}
if (symRefTab->isNonHelper(self(), TR::SymbolReferenceTable::arrayCmpSymbol))
return 0;
switch (self()->getReferenceNumber())
{
case TR_methodTypeCheck:
case TR_nullCheck:
return &symRefTab->aliasBuilder.defaultMethodDefAliasesWithoutImmutable();
case TR_arrayBoundsCheck:
case TR_checkCast:
case TR_divCheck:
case TR_typeCheckArrayStore:
case TR_arrayStoreException:
case TR_incompatibleReceiver:
case TR_IncompatibleClassChangeError:
case TR_reportFinalFieldModified:
case TR_reportMethodEnter:
case TR_reportStaticMethodEnter:
case TR_reportMethodExit:
case TR_acquireVMAccess:
case TR_instanceOf:
case TR_checkAssignable:
case TR_throwCurrentException:
case TR_releaseVMAccess:
case TR_stackOverflow:
case TR_writeBarrierStore:
case TR_writeBarrierBatchStore:
case TR_jitProfileAddress:
case TR_jitProfileWarmCompilePICAddress:
//.........这里部分代码省略.........