本文整理汇总了C++中tr::Compilation类的典型用法代码示例。如果您正苦于以下问题:C++ Compilation类的具体用法?C++ Compilation怎么用?C++ Compilation使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Compilation类的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: RematSafetyInformation
RematSafetyInformation(TR::Compilation *comp) :
dependentSymRefs(getTypedAllocator<TR::SparseBitVector>(comp->allocator())),
argumentTreeTops(getTypedAllocator<TR::TreeTop*>(comp->allocator())),
rematTreeTops(getTypedAllocator<TR::TreeTop*>(comp->allocator())),
comp(comp)
{
}
开发者ID:bjornvar,项目名称:omr,代码行数:7,代码来源:RematTools.hpp
示例2: sizeof
void
OMR::IlValue::storeToAuto()
{
if (_symRefThatCanBeUsedInOtherBlocks == NULL)
{
TR::Compilation *comp = TR::comp();
// first use from another block, need to create symref and insert store tree where node was computed
TR::SymbolReference *symRef = comp->getSymRefTab()->createTemporary(_methodBuilder->methodSymbol(), _nodeThatComputesValue->getDataType());
symRef->getSymbol()->setNotCollected();
char *name = (char *) comp->trMemory()->allocateHeapMemory((2+10+1) * sizeof(char)); // 2 ("_T") + max 10 digits + trailing zero
sprintf(name, "_T%u", symRef->getCPIndex());
symRef->getSymbol()->getAutoSymbol()->setName(name);
_methodBuilder->defineSymbol(name, symRef);
// create store and its treetop
TR::Node *storeNode = TR::Node::createStore(symRef, _nodeThatComputesValue);
TR::TreeTop *prevTreeTop = _treeTopThatAnchorsValue->getPrevTreeTop();
TR::TreeTop *newTree = TR::TreeTop::create(comp, storeNode);
newTree->insertNewTreeTop(prevTreeTop, _treeTopThatAnchorsValue);
_treeTopThatAnchorsValue->unlink(true);
_treeTopThatAnchorsValue = newTree;
_symRefThatCanBeUsedInOtherBlocks = symRef;
}
}
开发者ID:lmaisons,项目名称:omr,代码行数:27,代码来源:OMRIlValue.cpp
示例3: getUpdateLocation
void TR::ExternalRelocation::apply(TR::CodeGenerator *codeGen)
{
TR::Compilation *comp = codeGen->comp();
AOTcgDiag1(comp, "TR::ExternalRelocation::apply updateLocation=" POINTER_PRINTF_FORMAT " \n", getUpdateLocation());
uint8_t * relocatableMethodCodeStart = (uint8_t *)comp->getRelocatableMethodCodeStart();
getRelocationRecord()->addRelocationEntry((uint32_t)(getUpdateLocation() - relocatableMethodCodeStart));
}
开发者ID:LinHu2016,项目名称:omr,代码行数:7,代码来源:Relocation.cpp
示例4: getTargetKind
uint8_t TR::ExternalOrderedPair32BitRelocation::collectModifier()
{
TR::Compilation *comp = TR::comp();
uint8_t * relocatableMethodCodeStart = (uint8_t *)comp->getRelocatableMethodCodeStart();
uint8_t * updateLocation;
uint8_t * updateLocation2;
TR_ExternalRelocationTargetKind kind = getTargetKind();
if (TR::Compiler->target.cpu.isPower() &&
(kind == TR_ArrayCopyHelper || kind == TR_ArrayCopyToc || kind == TR_RamMethod || kind == TR_GlobalValue || kind == TR_BodyInfoAddressLoad || kind == TR_DataAddress || kind == TR_DebugCounter))
{
TR::Instruction *instr = (TR::Instruction *)getUpdateLocation();
TR::Instruction *instr2 = (TR::Instruction *)getLocation2();
updateLocation = instr->getBinaryEncoding();
updateLocation2 = instr2->getBinaryEncoding();
}
else
{
updateLocation = getUpdateLocation();
updateLocation2 = getLocation2();
}
int32_t iLoc = updateLocation - relocatableMethodCodeStart;
int32_t iLoc2 = updateLocation2 - relocatableMethodCodeStart;
AOTcgDiag0(comp, "TR::ExternalOrderedPair32BitRelocation::collectModifier\n");
if ( (iLoc < MIN_SHORT_OFFSET || iLoc > MAX_SHORT_OFFSET ) || (iLoc2 < MIN_SHORT_OFFSET || iLoc2 > MAX_SHORT_OFFSET ) )
return RELOCATION_TYPE_WIDE_OFFSET | RELOCATION_TYPE_ORDERED_PAIR;
return RELOCATION_TYPE_ORDERED_PAIR;
}
开发者ID:LinHu2016,项目名称:omr,代码行数:30,代码来源:Relocation.cpp
示例5: if
TR_RuntimeHelper TR::S390CallSnippet::getInterpretedDispatchHelper(
TR::SymbolReference *methodSymRef,
TR::DataType type)
{
TR::Compilation *comp = cg()->comp();
TR::MethodSymbol * methodSymbol = methodSymRef->getSymbol()->castToMethodSymbol();
bool isJitInduceOSRCall = false;
if (methodSymbol->isHelper() &&
methodSymRef->isOSRInductionHelper())
{
isJitInduceOSRCall = true;
}
if (methodSymRef->isUnresolved() || comp->compileRelocatableCode())
{
TR_ASSERT(!isJitInduceOSRCall || !comp->compileRelocatableCode(), "calling jitInduceOSR is not supported yet under AOT\n");
if (methodSymbol->isSpecial())
return TR_S390interpreterUnresolvedSpecialGlue;
else if (methodSymbol->isStatic())
return TR_S390interpreterUnresolvedStaticGlue;
else
return TR_S390interpreterUnresolvedDirectVirtualGlue;
}
else if (isJitInduceOSRCall)
return (TR_RuntimeHelper) methodSymRef->getReferenceNumber();
else
return getHelper(methodSymbol, type, cg());
}
开发者ID:jduimovich,项目名称:omr,代码行数:28,代码来源:CallSnippet.cpp
示例6:
void
OMR::CodeGenPhase::performInliningReportPhase(TR::CodeGenerator * cg, TR::CodeGenPhase * phase)
{
TR::Compilation * comp = cg->comp();
if (comp->getOptions()->insertDebuggingCounters()>1)
TR_DebuggingCounters::inliningReportForMethod(comp);
}
开发者ID:jduimovich,项目名称:omr,代码行数:7,代码来源:OMRCodeGenPhase.cpp
示例7: switch
void
TR::PPCImmInstruction::addMetaDataForCodeAddress(uint8_t *cursor)
{
if (needsAOTRelocation())
{
switch(getReloKind())
{
case TR_AbsoluteHelperAddress:
cg()->addExternalRelocation(new (cg()->trHeapMemory()) TR::ExternalRelocation(cursor, (uint8_t *)getSymbolReference(), TR_AbsoluteHelperAddress, cg()), __FILE__, __LINE__, getNode());
break;
case TR_RamMethod:
if (comp()->getOption(TR_UseSymbolValidationManager))
{
cg()->addExternalRelocation(
new (comp()->trHeapMemory()) TR::ExternalRelocation(
cursor,
(uint8_t *)comp()->getJittedMethodSymbol()->getResolvedMethod()->resolvedMethodAddress(),
(uint8_t *)TR::SymbolType::typeMethod,
TR_SymbolFromManager,
cg()),
__FILE__,
__LINE__,
getNode());
}
else
{
cg()->addExternalRelocation(new (cg()->trHeapMemory()) TR::ExternalRelocation(cursor, NULL, TR_RamMethod, cg()), __FILE__, __LINE__, getNode());
}
break;
case TR_BodyInfoAddress:
cg()->addExternalRelocation(new (cg()->trHeapMemory()) TR::ExternalRelocation(cursor, 0, TR_BodyInfoAddress, cg()), __FILE__, __LINE__, getNode());
break;
default:
TR_ASSERT(false, "Unsupported AOT relocation type specified.");
}
}
TR::Compilation *comp = cg()->comp();
if (std::find(comp->getStaticPICSites()->begin(), comp->getStaticPICSites()->end(), this) != comp->getStaticPICSites()->end())
{
// none-HCR: low-tag to invalidate -- BE or LE is relevant
//
void *valueToHash = *(void**)(cursor - (TR::Compiler->target.is64Bit()?4:0));
void *addressToPatch = TR::Compiler->target.is64Bit()?
(TR::Compiler->target.cpu.isBigEndian()?cursor:(cursor-4)) : cursor;
cg()->jitAddPicToPatchOnClassUnload(valueToHash, addressToPatch);
}
if (std::find(comp->getStaticHCRPICSites()->begin(), comp->getStaticHCRPICSites()->end(), this) != comp->getStaticHCRPICSites()->end())
{
// HCR: whole pointer replacement.
//
void **locationToPatch = (void**)(cursor - (TR::Compiler->target.is64Bit()?4:0));
cg()->jitAddPicToPatchOnClassRedefinition(*locationToPatch, locationToPatch);
cg()->addExternalRelocation(new (cg()->trHeapMemory()) TR::ExternalRelocation((uint8_t *)locationToPatch, (uint8_t *)*locationToPatch, TR_HCR, cg()), __FILE__,__LINE__, getNode());
}
}
开发者ID:LinHu2016,项目名称:omr,代码行数:59,代码来源:PPCBinaryEncoding.cpp
示例8: mp
void
OMR::CodeGenPhase::performRemoveUnusedLocalsPhase(TR::CodeGenerator * cg, TR::CodeGenPhase * phase)
{
TR::Compilation *comp = cg->comp();
phase->reportPhase(RemoveUnusedLocalsPhase);
TR::LexicalMemProfiler mp(phase->getName(), comp->phaseMemProfiler());
LexicalTimer pt(phase->getName(), comp->phaseTimer());
cg->removeUnusedLocals();
}
开发者ID:jduimovich,项目名称:omr,代码行数:9,代码来源:OMRCodeGenPhase.cpp
示例9: self
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()));
}
开发者ID:LinHu2016,项目名称:omr,代码行数:11,代码来源:Aliases.cpp
示例10: if
bool
OMR::SymbolReference::sharesSymbol(bool includingGCSafePoint)
{
TR::Compilation * c = TR::comp();
if (self()->reallySharesSymbol(c))
return true;
// At this point, we'd like to call getUseDefAliases(c, false) and return
// true iff that is non-NULL. However, doing so caused floatSanity
// (specifically CompactNullChecks) to consume immense amounts (1GB+) of
// memory and run for a long, long time (half an hour or more in some
// cases), so we need to copy some of that logic in here as a short-circuit.
//
// !!! NOTE !!!
// THERE IS A COPY OF THIS LOGIC IN getUseDefAliases
//
int32_t kind = _symbol->getKind();
TR::SymbolReferenceTable * symRefTab = c->getSymRefTab();
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() && c->getMethodSymbol()->hasVeryRefinedAliasSets()))
{
// getUseDefAliases might not return NULL
}
else if (!symRefTab->aliasBuilder.mutableGenericIntShadowHasBeenCreated())
{
// getUseDefAliases must return NULL
return false;
}
else if (kind == TR::Symbol::IsStatic && !symRefTab->aliasBuilder.litPoolGenericIntShadowHasBeenCreated())
{
// getUseDefAliases must return NULL
return false;
}
break;
}
}
return !self()->getUseDefAliases(false, includingGCSafePoint).isZero(c);
}
开发者ID:LinHu2016,项目名称:omr,代码行数:52,代码来源:Aliases.cpp
示例11: self
OMR::LabelSymbol::LabelSymbol(TR::CodeGenerator *codeGen, TR::Block *labb) :
TR::Symbol(),
_instruction(NULL),
_codeLocation(NULL),
_estimatedCodeLocation(0),
_snippet(NULL)
{
self()->setIsLabel();
TR::Compilation *comp = TR::comp();
if (comp && comp->getDebug())
comp->getDebug()->newLabelSymbol(self());
}
开发者ID:LinHu2016,项目名称:omr,代码行数:13,代码来源:OMRLabelSymbol.cpp
示例12: cg
void
TR::PPCTrg1Src1ImmInstruction::addMetaDataForCodeAddress(uint8_t *cursor)
{
TR::Compilation *comp = cg()->comp();
if (std::find(comp->getStaticPICSites()->begin(), comp->getStaticPICSites()->end(), this) != comp->getStaticPICSites()->end())
{
cg()->jitAddPicToPatchOnClassUnload((void *)(getSourceImmPtr()), (void *)cursor);
}
if (std::find(comp->getStaticMethodPICSites()->begin(), comp->getStaticMethodPICSites()->end(), this) != comp->getStaticMethodPICSites()->end())
{
cg()->jitAddPicToPatchOnClassUnload((void *) (cg()->fe()->createResolvedMethod(cg()->trMemory(), (TR_OpaqueMethodBlock *) (getSourceImmPtr()), comp->getCurrentMethod())->classOfMethod()), (void *)cursor);
}
}
开发者ID:LinHu2016,项目名称:omr,代码行数:14,代码来源:PPCBinaryEncoding.cpp
示例13: findAndMarkBranchTargets
/// called to identify the branches and their targets in the method
/// causes the _blocks array to be filled in with the basic blocks of the method
void findAndMarkBranchTargets()
{
TR::Compilation *comp = this->comp();
if (debug("branchTargets"))
diagnostic("findAndMarkBranchTargets for %s\n", comp->signature());
aboutToFindBranchTargets();
for (ByteCode bc = this->first(); bc != BCunknown; bc = this->next())
{
if (_printByteCodes)
this->printByteCode();
int32_t i = this->bcIndex();
if (this->isBranch())
markTarget(i, this->branchDestination(i) - i);
markAnySpecialBranchTargets(bc);
}
finishedFindingBranchTargets();
}
开发者ID:dinogun,项目名称:omr,代码行数:22,代码来源:ByteCodeIteratorWithState.hpp
示例14: getRelocationRecord
void TR::ExternalOrderedPair32BitRelocation::apply(TR::CodeGenerator *codeGen)
{
TR::Compilation *comp = codeGen->comp();
AOTcgDiag0(comp, "TR::ExternalOrderedPair32BitRelocation::apply\n");
TR::IteratedExternalRelocation *rec = getRelocationRecord();
uint8_t *codeStart = (uint8_t *)comp->getRelocatableMethodCodeStart();
TR_ExternalRelocationTargetKind kind = getRelocationRecord()->getTargetKind();
if (TR::Compiler->target.cpu.isPower() &&
(kind == TR_ArrayCopyHelper || kind == TR_ArrayCopyToc || kind == TR_RamMethodSequence || kind == TR_GlobalValue || kind == TR_BodyInfoAddressLoad || kind == TR_DataAddress || kind == TR_DebugCounter))
{
TR::Instruction *instr = (TR::Instruction *)getUpdateLocation();
TR::Instruction *instr2 = (TR::Instruction *)getLocation2();
rec->addRelocationEntry((uint32_t)(instr->getBinaryEncoding() - codeStart));
rec->addRelocationEntry((uint32_t)(instr2->getBinaryEncoding() - codeStart));
}
else
{
rec->addRelocationEntry(getUpdateLocation() - codeStart);
rec->addRelocationEntry(getLocation2() - codeStart);
}
}
开发者ID:LinHu2016,项目名称:omr,代码行数:22,代码来源:Relocation.cpp
示例15: feGetEnv
void
TestCompiler::FrontEnd::generateBinaryEncodingPrologue(
TR_BinaryEncodingData *beData,
TR::CodeGenerator *cg)
{
TR::Compilation* comp = cg->comp();
TR_S390BinaryEncodingData *data = (TR_S390BinaryEncodingData *)beData;
data->cursorInstruction = comp->getFirstInstruction();
data->estimate = 0;
data->preProcInstruction = data->cursorInstruction;
data->jitTojitStart = data->cursorInstruction;
data->cursorInstruction = NULL;
TR::Instruction * preLoadArgs, * endLoadArgs;
preLoadArgs = data->preProcInstruction;
endLoadArgs = preLoadArgs;
TR::Instruction * oldFirstInstruction = data->cursorInstruction;
data->cursorInstruction = comp->getFirstInstruction();
static char *disableAlignJITEP = feGetEnv("TR_DisableAlignJITEP");
// Padding for JIT Entry Point
if (!disableAlignJITEP)
{
data->estimate += 256;
}
while (data->cursorInstruction && data->cursorInstruction->getOpCodeValue() != TR::InstOpCode::PROC)
{
data->estimate = data->cursorInstruction->estimateBinaryLength(data->estimate);
data->cursorInstruction = data->cursorInstruction->getNext();
}
cg->getLinkage()->createPrologue(data->cursorInstruction);
//cg->getLinkage()->analyzePrologue();
}
开发者ID:TianyuZuo,项目名称:omr,代码行数:39,代码来源:Evaluator.cpp
示例16: generateRegImmInstruction
TR::Register *OMR::X86::AMD64::TreeEvaluator::i2lEvaluator(TR::Node *node, TR::CodeGenerator *cg)
{
TR::Compilation *comp = cg->comp();
if (node->getFirstChild()->getOpCode().isLoadConst())
{
TR::Register *targetRegister = cg->allocateRegister();
generateRegImmInstruction(MOV8RegImm4, node, targetRegister, node->getFirstChild()->getInt(), cg);
node->setRegister(targetRegister);
cg->decReferenceCount(node->getFirstChild());
return targetRegister;
}
else
{
// In theory, because iRegStore has chosen to disregard needsSignExtension,
// we must disregard skipSignExtension here for correctness.
//
// However, in fact, it is actually safe to obey skipSignExtension so
// long as the optimizer only uses it on nodes known to be non-negative
// when the i2l occurs. We do already have isNonNegative for that
// purpose, but it may not always be set by the optimizer if a node known
// to be non-negative at one point in a block is commoned up above the
// BNDCHK or branch that determines the node's non-negativity. The
// codegen does set the flag during tree evaluation, but the
// skipSignExtension flag is set by the optimizer with more global
// knowledge than the tree evaluator, so we will trust it.
//
TR_X86OpCodes regMemOpCode,regRegOpCode;
if( node->isNonNegative()
|| (node->skipSignExtension() && performTransformation(comp, "TREE EVALUATION: skipping sign extension on node %s despite lack of isNonNegative\n", comp->getDebug()->getName(node))))
{
// We prefer these plain (zero-extending) opcodes because the analyser can often eliminate them
//
regMemOpCode = L4RegMem;
regRegOpCode = MOVZXReg8Reg4;
}
else
{
regMemOpCode = MOVSXReg8Mem4;
regRegOpCode = MOVSXReg8Reg4;
}
return TR::TreeEvaluator::conversionAnalyser(node, regMemOpCode, regRegOpCode, cg);
}
}
开发者ID:dinogun,项目名称:omr,代码行数:46,代码来源:OMRTreeEvaluator.cpp
示例17: cg
LexicalXmlTag::LexicalXmlTag(TR::CodeGenerator * cg): cg(cg)
{
TR::Compilation *comp = cg->comp();
if (comp->getOption(TR_TraceOptDetails) || comp->getOption(TR_TraceCG))
{
const char *hotnessString = comp->getHotnessName(comp->getMethodHotness());
traceMsg(comp, "<codegen\n"
"\tmethod=\"%s\"\n"
"\thotness=\"%s\">\n",
comp->signature(), hotnessString);
}
}
开发者ID:jduimovich,项目名称:omr,代码行数:12,代码来源:OMRCodeGenPhase.cpp
示例18: assignRegisters
void TR_PPCRegisterDependencyGroup::assignRegisters(TR::Instruction *currentInstruction,
TR_RegisterKinds kindToBeAssigned,
uint32_t numberOfRegisters,
TR::CodeGenerator *cg)
{
// *this swipeable for debugging purposes
TR::Machine *machine = cg->machine();
TR::Register *virtReg;
TR::RealRegister::RegNum dependentRegNum;
TR::RealRegister *dependentRealReg, *assignedRegister, *realReg;
int i, j;
TR::Compilation *comp = cg->comp();
int num_gprs = 0;
int num_fprs = 0;
int num_vrfs = 0;
// Use to do lookups using real register numbers
TR_PPCRegisterDependencyMap map(_dependencies, numberOfRegisters);
if (!comp->getOption(TR_DisableOOL))
{
for (i = 0; i< numberOfRegisters; i++)
{
virtReg = _dependencies[i].getRegister();
dependentRegNum = _dependencies[i].getRealRegister();
if (dependentRegNum == TR::RealRegister::SpilledReg)
{
TR_ASSERT(virtReg->getBackingStorage(),"should have a backing store if dependentRegNum == spillRegIndex()\n");
if (virtReg->getAssignedRealRegister())
{
// this happens when the register was first spilled in main line path then was reverse spilled
// and assigned to a real register in OOL path. We protected the backing store when doing
// the reverse spill so we could re-spill to the same slot now
traceMsg (comp,"\nOOL: Found register spilled in main line and re-assigned inside OOL");
TR::Node *currentNode = currentInstruction->getNode();
TR::RealRegister *assignedReg = toRealRegister(virtReg->getAssignedRegister());
TR::MemoryReference *tempMR = new (cg->trHeapMemory()) TR::MemoryReference(currentNode, (TR::SymbolReference*)virtReg->getBackingStorage()->getSymbolReference(), sizeof(uintptr_t), cg);
TR::InstOpCode::Mnemonic opCode;
TR_RegisterKinds rk = virtReg->getKind();
switch (rk)
{
case TR_GPR:
opCode =TR::InstOpCode::Op_load;
break;
case TR_FPR:
opCode = virtReg->isSinglePrecision() ? TR::InstOpCode::lfs : TR::InstOpCode::lfd;
break;
default:
TR_ASSERT(0, "\nRegister kind not supported in OOL spill\n");
break;
}
TR::Instruction *inst = generateTrg1MemInstruction(cg, opCode, currentNode, assignedReg, tempMR, currentInstruction);
assignedReg->setAssignedRegister(NULL);
virtReg->setAssignedRegister(NULL);
assignedReg->setState(TR::RealRegister::Free);
if (comp->getDebug())
cg->traceRegisterAssignment("Generate reload of virt %s due to spillRegIndex dep at inst %p\n",comp->getDebug()->getName(virtReg),currentInstruction);
cg->traceRAInstruction(inst);
}
if (!(std::find(cg->getSpilledRegisterList()->begin(), cg->getSpilledRegisterList()->end(), virtReg) != cg->getSpilledRegisterList()->end()))
cg->getSpilledRegisterList()->push_front(virtReg);
}
// we also need to free up all locked backing storage if we are exiting the OOL during backwards RA assignment
else if (currentInstruction->isLabel() && virtReg->getAssignedRealRegister())
{
TR::PPCLabelInstruction *labelInstr = (TR::PPCLabelInstruction *)currentInstruction;
TR_BackingStore * location = virtReg->getBackingStorage();
TR_RegisterKinds rk = virtReg->getKind();
int32_t dataSize;
if (labelInstr->getLabelSymbol()->isStartOfColdInstructionStream() && location)
{
traceMsg (comp,"\nOOL: Releasing backing storage (%p)\n", location);
if (rk == TR_GPR)
dataSize = TR::Compiler->om.sizeofReferenceAddress();
else
dataSize = 8;
location->setMaxSpillDepth(0);
cg->freeSpill(location,dataSize,0);
virtReg->setBackingStorage(NULL);
}
}
}
}
for (i = 0; i < numberOfRegisters; i++)
{
map.addDependency(_dependencies[i], i);
virtReg = _dependencies[i].getRegister();
dependentRegNum = _dependencies[i].getRealRegister();
if (dependentRegNum != TR::RealRegister::SpilledReg)
{
if (virtReg->getKind() == TR_GPR)
num_gprs++;
else if (virtReg->getKind() == TR_FPR)
//.........这里部分代码省略.........
开发者ID:rservant,项目名称:omr,代码行数:101,代码来源:OMRRegisterDependency.cpp
注:本文中的tr::Compilation类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论