Skip to content

Commit 189e2e5

Browse files
authored
Merge pull request eclipse-omr#8144 from hzongaro/avoid-marking-symbol-with-J9JNILinkage
Remove marking of symbol with TR_J9JNILinkage on x86
2 parents 3b22d56 + ac602af commit 189e2e5

File tree

10 files changed

+33
-58
lines changed

10 files changed

+33
-58
lines changed

compiler/aarch64/codegen/OMRTreeEvaluator.cpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7217,10 +7217,7 @@ TR::Register *OMR::ARM64::TreeEvaluator::directCallEvaluator(TR::Node *node, TR:
72177217
{
72187218
TR::Register *resultReg;
72197219
if (!cg->inlineDirectCall(node, resultReg)) {
7220-
TR::SymbolReference *symRef = node->getSymbolReference();
7221-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
7222-
TR::Linkage *linkage = cg->getLinkage(callee->getLinkageConvention());
7223-
7220+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, false /* isIndirect */);
72247221
resultReg = linkage->buildDirectDispatch(node);
72257222
}
72267223
return resultReg;
@@ -7229,10 +7226,7 @@ TR::Register *OMR::ARM64::TreeEvaluator::directCallEvaluator(TR::Node *node, TR:
72297226
// handles calli, icalli, lcalli, fcalli, dcalli, acalli
72307227
TR::Register *OMR::ARM64::TreeEvaluator::indirectCallEvaluator(TR::Node *node, TR::CodeGenerator *cg)
72317228
{
7232-
TR::SymbolReference *symRef = node->getSymbolReference();
7233-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
7234-
TR::Linkage *linkage = cg->getLinkage(callee->getLinkageConvention());
7235-
7229+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, true /* isIndirect */);
72367230
return linkage->buildIndirectDispatch(node);
72377231
}
72387232

@@ -7506,9 +7500,7 @@ TR::Register *OMR::ARM64::TreeEvaluator::PrefetchEvaluator(TR::Node *node, TR::C
75067500

75077501
TR::Register *OMR::ARM64::TreeEvaluator::performCall(TR::Node *node, bool isIndirect, TR::CodeGenerator *cg)
75087502
{
7509-
TR::SymbolReference *symRef = node->getSymbolReference();
7510-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
7511-
TR::Linkage *linkage = cg->getLinkage(callee->getLinkageConvention());
7503+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, isIndirect);
75127504
TR::Register *returnRegister;
75137505

75147506
if (isIndirect)

compiler/arm/codegen/OMRTreeEvaluator.cpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3542,18 +3542,13 @@ TR::Register *OMR::ARM::TreeEvaluator::multianewArrayEvaluator(TR::Node *node, T
35423542
// handles: TR::call, TR::acall, TR::icall, TR::lcall, TR::fcall, TR::dcall
35433543
TR::Register *OMR::ARM::TreeEvaluator::directCallEvaluator(TR::Node *node, TR::CodeGenerator *cg)
35443544
{
3545-
TR::SymbolReference *symRef = node->getSymbolReference();
3546-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
3547-
TR::Linkage *linkage = cg->getLinkage(callee->getLinkageConvention());
3548-
3545+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, false /* isIndirect */);
35493546
return linkage->buildDirectDispatch(node);
35503547
}
35513548

35523549
TR::Register *OMR::ARM::TreeEvaluator::performCall(TR::Node *node, bool isIndirect, TR::CodeGenerator *cg)
35533550
{
3554-
TR::SymbolReference *symRef = node->getSymbolReference();
3555-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
3556-
TR::Linkage *linkage = cg->getLinkage(callee->getLinkageConvention());
3551+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, isIndirect);
35573552
TR::Register *returnRegister;
35583553

35593554
if (isIndirect)
@@ -3567,10 +3562,7 @@ TR::Register *OMR::ARM::TreeEvaluator::performCall(TR::Node *node, bool isIndire
35673562
// handles: TR::icalli, TR::acalli, TR::fcalli, TR::dcalli, TR::lcalli, TR::calli
35683563
TR::Register *OMR::ARM::TreeEvaluator::indirectCallEvaluator(TR::Node *node, TR::CodeGenerator *cg)
35693564
{
3570-
TR::SymbolReference *symRef = node->getSymbolReference();
3571-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
3572-
TR::Linkage *linkage = cg->getLinkage(callee->getLinkageConvention());
3573-
3565+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, true /* isIndirect */);
35743566
return linkage->buildIndirectDispatch(node);
35753567
}
35763568

compiler/codegen/OMRCodeGenerator.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3229,3 +3229,12 @@ TR::LabelSymbol *OMR::CodeGenerator::assignConstRefLabelImpl(TR::KnownObjectTabl
32293229

32303230
return label;
32313231
}
3232+
3233+
TR::Linkage *OMR::CodeGenerator::deriveCallingLinkage(TR::Node *node, bool isIndirect)
3234+
{
3235+
TR::SymbolReference *symRef = node->getSymbolReference();
3236+
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
3237+
TR::Linkage *linkage = self()->getLinkage(callee->getLinkageConvention());
3238+
3239+
return linkage;
3240+
}

compiler/codegen/OMRCodeGenerator.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,16 @@ class OMR_EXTENSIBLE CodeGenerator {
689689

690690
TR::Linkage *setLinkage(TR_LinkageConventions lc, TR::Linkage *l) { return _linkages[lc] = l; }
691691

692+
/**
693+
* Return the proper linkage for this call, especially for the case when the methodSymbol
694+
* doesn't capture the complete information.
695+
*
696+
* @param[in] node, this calling node
697+
* @param[in] isIndirect true if this call is an indirect call
698+
* @return appropriate linkage for this call
699+
*/
700+
TR::Linkage *deriveCallingLinkage(TR::Node *node, bool isIndirect);
701+
692702
// --------------------------------------------------------------------------
693703
// Optimizer, code generator capabilities
694704
//

compiler/il/OMRNode.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5088,13 +5088,7 @@ bool OMR::Node::isPreparedForDirectJNI()
50885088
&& self()->getOpCodeValue() != TR::arraycopy;
50895089
}
50905090

5091-
void OMR::Node::setPreparedForDirectJNI()
5092-
{
5093-
_flags.set(preparedForDirectToJNI, true);
5094-
#if defined(TR_TARGET_X86)
5095-
self()->getSymbol()->castToMethodSymbol()->setLinkage(TR_J9JNILinkage);
5096-
#endif
5097-
}
5091+
void OMR::Node::setPreparedForDirectJNI() { _flags.set(preparedForDirectToJNI, true); }
50985092

50995093
bool OMR::Node::isSafeForCGToFastPathUnsafeCall()
51005094
{

compiler/p/codegen/OMRCodeGenerator.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -364,15 +364,6 @@ void OMR::Power::CodeGenerator::initialize()
364364
}
365365
}
366366

367-
TR::Linkage *OMR::Power::CodeGenerator::deriveCallingLinkage(TR::Node *node, bool isIndirect)
368-
{
369-
TR::SymbolReference *symRef = node->getSymbolReference();
370-
TR::MethodSymbol *callee = symRef->getSymbol()->castToMethodSymbol();
371-
TR::Linkage *linkage = self()->getLinkage(callee->getLinkageConvention());
372-
373-
return linkage;
374-
}
375-
376367
uintptr_t *OMR::Power::CodeGenerator::getTOCBase()
377368
{
378369
TR_PPCTableOfConstants *pTOC = toPPCTableOfConstants(self()->comp()->getPersistentInfo()->getPersistentTOC());

compiler/p/codegen/OMRCodeGenerator.hpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,16 +163,6 @@ class OMR_EXTENSIBLE CodeGenerator : public OMR::CodeGenerator {
163163
bool inlineDirectCall(TR::Node *node, TR::Register *&resultReg);
164164
bool supportsInliningOfIsInstance();
165165

166-
/**
167-
* Return the proper linkage for this call, especially for the case when the methodSymbol
168-
* doesn't capture the complete information.
169-
*
170-
* @param[in] node, this calling node
171-
* @param[in] isIndirect true if this call is an indirect call
172-
* @return appropriate linkage for this call
173-
*/
174-
TR::Linkage *deriveCallingLinkage(TR::Node *node, bool isIndirect);
175-
176166
bool isSnippetMatched(TR::Snippet *, int32_t, TR::SymbolReference *);
177167

178168
bool mulDecompositionCostIsJustified(int numOfOperations, char bitPosition[], char operationType[], int64_t value);

compiler/ras/Debug.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,7 @@ void TR_Debug::nodePrintAllFlags(TR::Node *node, TR_PrettyPrinterString &output)
890890
FLAG(isCopyToNewVirtualRegister, "copyToNewVirtualRegister");
891891
FLAG(chkNodeCreatedByPRE, "createdByPRE");
892892
FLAG(chkIsReferenceNonNull, "referenceIsNonNull");
893+
FLAG(isPreparedForDirectJNI, "preparedForDirectJNI");
893894

894895
#undef FLAG
895896
#undef FLAG_IF

compiler/x/codegen/OMRTreeEvaluator.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3987,11 +3987,9 @@ intptr_t OMR::X86::TreeEvaluator::integerConstNodeValue(TR::Node *node, TR::Code
39873987
TR::Register *OMR::X86::TreeEvaluator::performCall(TR::Node *node, bool isIndirect, bool spillFPRegs,
39883988
TR::CodeGenerator *cg)
39893989
{
3990-
TR::SymbolReference *symRef = node->getSymbolReference();
3991-
TR::MethodSymbol *callSymbol = symRef->getSymbol()->castToMethodSymbol();
3992-
3990+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, isIndirect);
39933991
TR::Register *returnRegister;
3994-
TR::Linkage *linkage = cg->getLinkage(callSymbol->getLinkageConvention());
3992+
39953993
if (isIndirect)
39963994
returnRegister = linkage->buildIndirectDispatch(node);
39973995
else

compiler/z/codegen/OMRTreeEvaluator.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7681,14 +7681,12 @@ TR::Register *OMR::Z::TreeEvaluator::performCall(TR::Node *node, bool isIndirect
76817681
TR::MethodSymbol *callSymbol = symRef->getSymbol()->castToMethodSymbol();
76827682

76837683
TR::Register *returnRegister;
7684+
TR::Linkage *linkage = cg->deriveCallingLinkage(node, isIndirect);
7685+
76847686
if (isIndirect) {
7685-
returnRegister = (cg->getLinkage(callSymbol->getLinkageConvention()))->buildIndirectDispatch(node);
7687+
returnRegister = linkage->buildIndirectDispatch(node);
76867688
} else {
7687-
// Generate Fast JNI direct call
7688-
if (callSymbol->isJNI() && node->isPreparedForDirectJNI())
7689-
returnRegister = (cg->getLinkage(TR_J9JNILinkage))->buildDirectDispatch(node);
7690-
else
7691-
returnRegister = (cg->getLinkage(callSymbol->getLinkageConvention()))->buildDirectDispatch(node);
7689+
returnRegister = linkage->buildDirectDispatch(node);
76927690
}
76937691

76947692
return returnRegister;

0 commit comments

Comments
 (0)