Skip to content

Commit

Permalink
Modify some Z RegisterDependencyConditions APIs to accept a TR::Regis…
Browse files Browse the repository at this point in the history
…terDependency

In compiler/z/codegen/OMRRegisterDependency.cpp:

* Add alternate APIs for `addPreConditionIfNotAlreadyInserted()` and
  `addPostConditionIfNotAlreadyInserted()` that accept a `TR::RegisterDependency *`
  parameter.

* Modify the APIs for `doesPreConditionExist()`, `doesPostConditionExist()`, and
  `doesConditionExist()` to accept a `TR::RegisterDependency *` parameter.
  Eliminate the unused optional parameter `overwriteAssignAny` from all.

* Add Doxygen comments to all APIs changed.

Signed-off-by: Daryl Maier <maier@ca.ibm.com>
  • Loading branch information
0xdaryl committed Nov 9, 2020
1 parent 6af1a09 commit 89680ab
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 34 deletions.
66 changes: 36 additions & 30 deletions compiler/z/codegen/OMRRegisterDependency.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2019 IBM Corp. and others
* Copyright (c) 2000, 2020 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -253,15 +253,11 @@ OMR::Z::RegisterDependencyConditions::RegisterDependencyConditions(TR::RegisterD
{
TR::RegisterDependency* dep = depGroup->getRegisterDependency(i);

flag = dep->getFlags();
vr = dep->getRegister();
rr = dep->getRealRegister();

if( doesPreConditionExist( vr, rr, flag, true ) )
if( doesPreConditionExist( dep ) )
{
_numPreConditions--;
}
else if( !addPreConditionIfNotAlreadyInserted( vr, rr, flag ) )
else if( !addPreConditionIfNotAlreadyInserted( dep ) )
{
_numPreConditions--;
}
Expand All @@ -272,15 +268,11 @@ OMR::Z::RegisterDependencyConditions::RegisterDependencyConditions(TR::RegisterD
{
TR::RegisterDependency* dep = depGroup->getRegisterDependency(i);

flag = dep->getFlags();
vr = dep->getRegister();
rr = dep->getRealRegister();

if( doesPreConditionExist( vr, rr, flag, true ) )
if( doesPreConditionExist( dep ) )
{
_numPreConditions--;
}
else if( !addPreConditionIfNotAlreadyInserted( vr, rr, flag ) )
else if( !addPreConditionIfNotAlreadyInserted( dep ) )
{
_numPreConditions--;
}
Expand All @@ -292,15 +284,11 @@ OMR::Z::RegisterDependencyConditions::RegisterDependencyConditions(TR::RegisterD
{
TR::RegisterDependency* dep = depGroup->getRegisterDependency(i);

flag = dep->getFlags();
vr = dep->getRegister();
rr = dep->getRealRegister();

if( doesPostConditionExist( vr, rr, flag, true ) )
if( doesPostConditionExist( dep ) )
{
_numPostConditions--;
}
else if( !addPostConditionIfNotAlreadyInserted( vr, rr, flag ) )
else if( !addPostConditionIfNotAlreadyInserted( dep ) )
{
_numPostConditions--;
}
Expand All @@ -311,15 +299,11 @@ OMR::Z::RegisterDependencyConditions::RegisterDependencyConditions(TR::RegisterD
{
TR::RegisterDependency* dep = depGroup->getRegisterDependency(i);

flag = dep->getFlags();
vr = dep->getRegister();
rr = dep->getRealRegister();

if( doesPostConditionExist( vr, rr, flag, true ) )
if( doesPostConditionExist( dep ) )
{
_numPostConditions--;
}
else if( !addPostConditionIfNotAlreadyInserted( vr, rr, flag ) )
else if( !addPostConditionIfNotAlreadyInserted( dep ) )
{
_numPostConditions--;
}
Expand Down Expand Up @@ -1412,8 +1396,12 @@ OMR::Z::RegisterDependencyConditions::createRegisterAssociationDirective(TR::Ins
}
}

bool OMR::Z::RegisterDependencyConditions::doesConditionExist( TR_S390RegisterDependencyGroup * regDepArr, TR::Register * vr, TR::RealRegister::RegNum rr, uint32_t flag, uint32_t numberOfRegisters, bool overwriteAssignAny )
bool OMR::Z::RegisterDependencyConditions::doesConditionExist( TR_S390RegisterDependencyGroup * regDepArr, TR::RegisterDependency *depToCheck, uint32_t numberOfRegisters )
{
uint32_t flag = depToCheck->getFlags();
TR::Register *vr = depToCheck->getRegister();
TR::RealRegister::RegNum rr = depToCheck->getRealRegister();

for( int32_t i = 0; i < numberOfRegisters; i++ )
{
TR::RegisterDependency * regDep = regDepArr->getRegisterDependency(i);
Expand Down Expand Up @@ -1457,16 +1445,24 @@ bool OMR::Z::RegisterDependencyConditions::doesConditionExist( TR_S390RegisterDe
return false;
}

bool OMR::Z::RegisterDependencyConditions::doesPreConditionExist( TR::Register * vr, TR::RealRegister::RegNum rr, uint32_t flag, bool overwriteAssignAny )
bool OMR::Z::RegisterDependencyConditions::doesPreConditionExist( TR::RegisterDependency *depToCheck )
{
return doesConditionExist( _preConditions, vr, rr, flag, _addCursorForPre, overwriteAssignAny );
return doesConditionExist( _preConditions, depToCheck, _addCursorForPre );
}

bool OMR::Z::RegisterDependencyConditions::doesPostConditionExist( TR::Register * vr, TR::RealRegister::RegNum rr, uint32_t flag, bool overwriteAssignAny )
bool OMR::Z::RegisterDependencyConditions::doesPostConditionExist( TR::RegisterDependency *depToCheck )
{
return doesConditionExist( _postConditions, vr, rr, flag, _addCursorForPost, overwriteAssignAny );
return doesConditionExist( _postConditions, depToCheck, _addCursorForPost );
}

bool OMR::Z::RegisterDependencyConditions::addPreConditionIfNotAlreadyInserted(TR::RegisterDependency *regDep)
{
uint32_t flag = regDep->getFlags();
TR::Register* vr = regDep->getRegister();
TR::RealRegister::RegNum rr = regDep->getRealRegister();

return addPreConditionIfNotAlreadyInserted(vr, static_cast<TR::RealRegister::RegDep>(rr), flag);
}

bool OMR::Z::RegisterDependencyConditions::addPreConditionIfNotAlreadyInserted(TR::Register *vr,
TR::RealRegister::RegNum rr,
Expand Down Expand Up @@ -1504,6 +1500,16 @@ bool OMR::Z::RegisterDependencyConditions::addPreConditionIfNotAlreadyInserted(T
return false;
}


bool OMR::Z::RegisterDependencyConditions::addPostConditionIfNotAlreadyInserted(TR::RegisterDependency *regDep)
{
uint32_t flag = regDep->getFlags();
TR::Register* vr = regDep->getRegister();
TR::RealRegister::RegNum rr = regDep->getRealRegister();

return addPostConditionIfNotAlreadyInserted(vr, static_cast<TR::RealRegister::RegDep>(rr), flag);
}

bool OMR::Z::RegisterDependencyConditions::addPostConditionIfNotAlreadyInserted(TR::Register *vr,
TR::RealRegister::RegNum rr,
uint8_t flag)
Expand Down
53 changes: 49 additions & 4 deletions compiler/z/codegen/OMRRegisterDependency.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2019 IBM Corp. and others
* Copyright (c) 2000, 2020 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -458,13 +458,33 @@ class RegisterDependencyConditions: public OMR::RegisterDependencyConditions

// These methods are temporary until dependencies are re-engineered down the road
// We only add in the post condition if the desired virt reg is not already spoken for

/**
* @brief Adds the provided \c TR::RegisterDependency to the set of preconditions if it
* has not been added already
*
* @param[in] \a regDep : the \c TR::RegisterDependency to add
*
* @return \c true if successfully added; \c false otherwise
*/
bool addPreConditionIfNotAlreadyInserted(TR::RegisterDependency *regDep);
bool addPreConditionIfNotAlreadyInserted(TR::Register *vr,
TR::RealRegister::RegNum rr,
uint8_t flag = ReferencesDependentRegister);
bool addPreConditionIfNotAlreadyInserted(TR::Register *vr,
TR::RealRegister::RegDep rr,
uint8_t flag = ReferencesDependentRegister);

/**
* @brief Adds the provided \c TR::RegisterDependency to the set of postconditions if it
* has not been added already
*
* @param[in] \a regDep : the \c TR::RegisterDependency to add
*
* @return \c true if successfully added; \c false otherwise
*/
bool addPostConditionIfNotAlreadyInserted(TR::RegisterDependency *regDep);

bool addPostConditionIfNotAlreadyInserted(TR::Register *vr,
TR::RealRegister::RegNum rr,
uint8_t flag = ReferencesDependentRegister);
Expand All @@ -482,9 +502,34 @@ class RegisterDependencyConditions: public OMR::RegisterDependencyConditions
void bookKeepingRegisterUses(TR::Instruction *instr, TR::CodeGenerator *cg, int32_t oldPreCursor=0, int32_t oldPostCursor=0);
void createRegisterAssociationDirective(TR::Instruction *instruction, TR::CodeGenerator *cg);

bool doesConditionExist( TR_S390RegisterDependencyGroup * regDepArr, TR::Register * vr, TR::RealRegister::RegNum rr, uint32_t flag, uint32_t numberOfRegisters, bool overwriteAssignAny = false );
bool doesPreConditionExist( TR::Register * vr, TR::RealRegister::RegNum rr, uint32_t flag, bool overwriteAssignAny = false );
bool doesPostConditionExist( TR::Register * vr, TR::RealRegister::RegNum rr, uint32_t flag, bool overwriteAssignAny = false );
/**
* @brief Inquires whether a register dependency exists within a given \c TR_S390RegisterDependencyGroup
*
* @param[in] \a regDepArr : the \c TR_S390RegisterDependencyGroup to check
* @param[in] \a regDep : the \c TR::RegisterDependency to check for inclusion
* @param[in] \a numberOfRegisters : the number of registers in the dependency group to check
*
* @return \c true if the register dependency is found; \c false otherwise
*/
bool doesConditionExist( TR_S390RegisterDependencyGroup * regDepArr, TR::RegisterDependency *regDep, uint32_t numberOfRegisters );

/**
* @brief Inquires whether a given register dependency exists within the preconditions
*
* @param[in] \a regDep : the \c TR::RegisterDependency to check for inclusion
*
* @return \c true if the register dependency is found; \c false otherwise
*/
bool doesPreConditionExist( TR::RegisterDependency *regDep );

/**
* @brief Inquires whether a given register dependency exists within the postconditions
*
* @param[in] \a regDep : the \c TR::RegisterDependency to check for inclusion
*
* @return \c true if the register dependency is found; \c false otherwise
*/
bool doesPostConditionExist( TR::RegisterDependency *regDep );

TR::CodeGenerator *cg() { return _cg; }
};
Expand Down

0 comments on commit 89680ab

Please sign in to comment.