Skip to content

Commit cec924f

Browse files
committedMay 4, 2020
Change to postconditions only for ICF end labels
For the internal control flow end labels, there is no change to the register state. Hence, instead of adding both the pre-conditions and the post-conditions to such labels; it is sufficient to use post-conditions only. This commit addresses such cases for the power codegen. Resolves: #4991 Signed-off-by: Mohammad Nazmul Alam <mohammad.nazmul.alam@ibm.com>
1 parent 580cb25 commit cec924f

File tree

2 files changed

+24
-25
lines changed

2 files changed

+24
-25
lines changed
 

‎compiler/p/codegen/FPTreeEvaluator.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,9 @@ TR::Register *OMR::Power::TreeEvaluator::fbits2iEvaluator(TR::Node *node, TR::Co
135135
nanNormalizeStartLabel->setStartInternalControlFlow();
136136
nanNormalizeEndLabel->setEndInternalControlFlow();
137137

138-
TR::RegisterDependencyConditions *deps = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(2, 2, cg->trMemory());
139-
TR::addDependency(deps, condReg, TR::RealRegister::NoReg, TR_CCR, cg);
140-
TR::addDependency(deps, target, TR::RealRegister::NoReg, TR_GPR, cg);
138+
TR::RegisterDependencyConditions *deps = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(0, 2, cg->trMemory());
139+
deps->addPostCondition(condReg, TR::RealRegister::NoReg);
140+
deps->addPostCondition(target, TR::RealRegister::NoReg);
141141

142142
generateTrg1Src2Instruction(cg, TR::InstOpCode::fcmpu, node, condReg, floatReg, floatReg);
143143
generateLabelInstruction(cg, TR::InstOpCode::label, node, nanNormalizeStartLabel);

‎compiler/p/codegen/OMRTreeEvaluator.cpp

+21-22
Original file line numberDiff line numberDiff line change
@@ -2902,12 +2902,12 @@ TR::Register *OMR::Power::TreeEvaluator::inlineVectorCompareAllOrAnyOp(TR::Node
29022902
TR::Node *firstChild = node->getFirstChild();
29032903
TR::Node *secondChild = node->getSecondChild();
29042904

2905-
TR::RegisterDependencyConditions *conditions = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(3, 3, cg->trMemory());
2905+
TR::RegisterDependencyConditions *conditions = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(0, 2, cg->trMemory());
29062906
TR::Register *resReg = cg->allocateRegister(TR_GPR);
29072907
TR::Register *cndReg = cg->allocateRegister(TR_CCR);
29082908
TR::Register *vecTmpReg = cg->allocateRegister(TR_VRF);
2909-
TR::addDependency(conditions, cndReg, TR::RealRegister::cr6, TR_CCR, cg);
2910-
TR::addDependency(conditions, vecTmpReg, TR::RealRegister::NoReg, TR_VRF, cg);
2909+
conditions->addPostCondition(cndReg, TR::RealRegister::cr6);
2910+
conditions->addPostCondition(vecTmpReg, TR::RealRegister::NoReg);
29112911

29122912
TR::Register *lhsReg = cg->evaluate(firstChild);
29132913
TR::Register *rhsReg = cg->evaluate(secondChild);
@@ -4259,17 +4259,17 @@ static TR::Register *inlineArrayCmp(TR::Node *node, TR::CodeGenerator *cg)
42594259

42604260
int32_t numRegs = 10;
42614261

4262-
TR::RegisterDependencyConditions *dependencies = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(numRegs, numRegs, cg->trMemory());
4263-
TR::addDependency(dependencies, src1Reg, TR::RealRegister::NoReg, TR_GPR, cg);
4264-
TR::addDependency(dependencies, src2Reg, TR::RealRegister::NoReg, TR_GPR, cg);
4265-
TR::addDependency(dependencies, src1AddrReg, TR::RealRegister::NoReg, TR_GPR, cg);
4266-
TR::addDependency(dependencies, src2AddrReg, TR::RealRegister::NoReg, TR_GPR, cg);
4267-
TR::addDependency(dependencies, byteLenRegister, TR::RealRegister::NoReg, TR_GPR, cg);
4268-
TR::addDependency(dependencies, byteLenRemainingRegister, TR::RealRegister::NoReg, TR_GPR, cg);
4269-
TR::addDependency(dependencies, tempReg, TR::RealRegister::NoReg, TR_GPR, cg);
4270-
TR::addDependency(dependencies, ccReg, TR::RealRegister::NoReg, TR_GPR, cg);
4271-
TR::addDependency(dependencies, condReg, TR::RealRegister::NoReg, TR_CCR, cg);
4272-
TR::addDependency(dependencies, condReg2, TR::RealRegister::NoReg, TR_CCR, cg);
4262+
TR::RegisterDependencyConditions *dependencies = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(0, numRegs, cg->trMemory());
4263+
dependencies->addPostCondition(src1Reg, TR::RealRegister::NoReg);
4264+
dependencies->addPostCondition(src2Reg, TR::RealRegister::NoReg);
4265+
dependencies->addPostCondition(src1AddrReg, TR::RealRegister::NoReg);
4266+
dependencies->addPostCondition(src2AddrReg, TR::RealRegister::NoReg);
4267+
dependencies->addPostCondition(byteLenRegister, TR::RealRegister::NoReg);
4268+
dependencies->addPostCondition(byteLenRemainingRegister, TR::RealRegister::NoReg);
4269+
dependencies->addPostCondition(tempReg, TR::RealRegister::NoReg);
4270+
dependencies->addPostCondition(ccReg, TR::RealRegister::NoReg);
4271+
dependencies->addPostCondition(condReg, TR::RealRegister::NoReg);
4272+
dependencies->addPostCondition(condReg2, TR::RealRegister::NoReg);
42734273

42744274
generateDepLabelInstruction(cg, TR::InstOpCode::label, node, residueEndLabel, dependencies);
42754275
residueEndLabel->setEndInternalControlFlow();
@@ -5267,24 +5267,23 @@ static TR::Register *inlineSimpleAtomicUpdate(TR::Node *node, bool isAddOp, bool
52675267
TR::RegisterDependencyConditions *conditions;
52685268

52695269
//Set the conditions and dependencies
5270-
conditions = new (cg->trHeapMemory()) TR::RegisterDependencyConditions((uint16_t) numDeps, (uint16_t) numDeps, cg->trMemory());
5270+
conditions = new (cg->trHeapMemory()) TR::RegisterDependencyConditions(0, (uint16_t) numDeps, cg->trMemory());
52715271

5272-
TR::addDependency(conditions, valueAddrReg, TR::RealRegister::NoReg, TR_GPR, cg);
5273-
TR::addDependency(conditions, oldValueReg, TR::RealRegister::NoReg, TR_GPR, cg);
5274-
conditions->getPreConditions()->getRegisterDependency(1)->setExcludeGPR0();
5272+
conditions->addPostCondition(valueAddrReg, TR::RealRegister::NoReg);
5273+
conditions->addPostCondition(oldValueReg, TR::RealRegister::NoReg);
52755274
conditions->getPostConditions()->getRegisterDependency(1)->setExcludeGPR0();
5276-
TR::addDependency(conditions, cndReg, TR::RealRegister::cr0, TR_CCR, cg);
5275+
conditions->addPostCondition(cndReg, TR::RealRegister::cr0);
52775276
numDeps = numDeps - 3;
52785277

52795278
if (newValueReg)
52805279
{
5281-
TR::addDependency(conditions, newValueReg, TR::RealRegister::NoReg, TR_GPR, cg);
5280+
conditions->addPostCondition(newValueReg, TR::RealRegister::NoReg);
52825281
numDeps--;
52835282
}
52845283

52855284
if (deltaReg)
52865285
{
5287-
TR::addDependency(conditions, deltaReg, TR::RealRegister::NoReg, TR_GPR, cg);
5286+
conditions->addPostCondition(deltaReg, TR::RealRegister::NoReg);
52885287
numDeps--;
52895288
}
52905289

@@ -5887,7 +5886,7 @@ TR::Register *OMR::Power::TreeEvaluator::cmpsetEvaluator(
58875886
TR::LabelSymbol *startLabel = generateLabelSymbol(cg);
58885887
TR::LabelSymbol *endLabel = generateLabelSymbol(cg);
58895888
startLabel->setStartInternalControlFlow();
5890-
endLabel ->setEndInternalControlFlow();
5889+
endLabel->setEndInternalControlFlow();
58915890
TR::RegisterDependencyConditions *deps
58925891
= new (cg->trHeapMemory()) TR::RegisterDependencyConditions(0, 7, cg->trMemory());
58935892
deps->addPostCondition(result, TR::RealRegister::NoReg);

0 commit comments

Comments
 (0)
Please sign in to comment.