@@ -4255,7 +4255,7 @@ TR::Register *J9::Power::TreeEvaluator::VMifInstanceOfEvaluator(TR::Node *node,
4255
4255
}
4256
4256
depIndex = numberOfRegisterCandidate(cg, depNode, TR_GPR) + numberOfRegisterCandidate(cg, depNode, TR_FPR) +
4257
4257
numberOfRegisterCandidate(cg, depNode, TR_CCR) + numberOfRegisterCandidate(cg, depNode, TR_VRF) +
4258
- numberOfRegisterCandidate(cg, depNode, TR_VSX_SCALAR) + numberOfRegisterCandidate(cg, depNode, TR_VSX_VECTOR);
4258
+ numberOfRegisterCandidate(cg, depNode, TR_VSX_SCALAR) + numberOfRegisterCandidate(cg, depNode, TR_VSX_VECTOR);
4259
4259
}
4260
4260
4261
4261
doneLabel = generateLabelSymbol(cg);
@@ -5536,7 +5536,6 @@ static void genHeapAlloc(TR::Node *node, TR::Instruction *&iCursor, TR_OpaqueCla
5536
5536
if (usingTLH)
5537
5537
{
5538
5538
bool sizeInReg = (isVariableLen || (allocSize > UPPER_IMMED));
5539
- bool shouldAlignToCacheBoundary = false;
5540
5539
int32_t instanceBoundaryForAlignment = 64;
5541
5540
5542
5541
static bool verboseDualTLH = feGetEnv("TR_verboseDualTLH") != NULL;
@@ -5572,78 +5571,14 @@ static void genHeapAlloc(TR::Node *node, TR::Instruction *&iCursor, TR_OpaqueCla
5572
5571
//TODO: This code is never executed, check if this can be deleted now.
5573
5572
if (!cg->isDualTLH())
5574
5573
{
5575
- //All of this code never gets executed because of the 0 && in
5576
- //the inside if statement. Candidate for deletion
5574
+ iCursor = generateTrg1MemInstruction(cg,TR::InstOpCode::Op_load, node, resReg,
5575
+ TR::MemoryReference::createWithDisplacement(cg, metaReg, offsetof(J9VMThread, heapAlloc), TR::Compiler->om.sizeofReferenceAddress()), iCursor);
5577
5576
5578
- if (!isVariableLen)
5579
- {
5580
- static char *disableAlign = feGetEnv("TR_DisableAlignAlloc");
5581
-
5582
- if (0 && !disableAlign && (node->getOpCodeValue() == TR::New) && (comp->getMethodHotness() >= hot || node->shouldAlignTLHAlloc()))
5583
- {
5584
- TR_OpaqueMethodBlock *ownMethod = node->getOwningMethod();
5585
-
5586
- TR::Node *classChild = node->getFirstChild();
5587
- char * className = NULL;
5588
- TR_OpaqueClassBlock *clazz = NULL;
5589
-
5590
- if (classChild && classChild->getSymbolReference() && !classChild->getSymbolReference()->isUnresolved())
5591
- {
5592
- TR::SymbolReference *symRef = classChild->getSymbolReference();
5593
- TR::Symbol *sym = symRef->getSymbol();
5594
-
5595
- if (sym && sym->getKind() == TR::Symbol::IsStatic && sym->isClassObject())
5596
- {
5597
- TR::StaticSymbol * staticSym = symRef->getSymbol()->castToStaticSymbol();
5598
- void * staticAddress = staticSym->getStaticAddress();
5599
- if (symRef->getCPIndex() >= 0)
5600
- {
5601
- if (!staticSym->addressIsCPIndexOfStatic() && staticAddress)
5602
- {
5603
- int32_t len;
5604
- className = TR::Compiler->cls.classNameChars(comp, symRef, len);
5605
- clazz = (TR_OpaqueClassBlock *) staticAddress;
5606
- }
5607
- }
5608
- }
5609
- }
5610
-
5611
- int32_t instanceSizeForAlignment = 56;
5612
- static char *alignSize = feGetEnv("TR_AlignInstanceSize");
5613
- static char *alignBoundary = feGetEnv("TR_AlignInstanceBoundary");
5614
-
5615
- if (alignSize)
5616
- instanceSizeForAlignment = atoi(alignSize);
5617
- if (alignBoundary)
5618
- instanceBoundaryForAlignment = atoi(alignBoundary);
5619
-
5620
- if (clazz && !cg->getCurrentEvaluationBlock()->isCold() && TR::Compiler->cls.classInstanceSize(clazz) >= instanceSizeForAlignment)
5621
- {
5622
- shouldAlignToCacheBoundary = true;
5623
-
5624
- iCursor = generateTrg1MemInstruction(cg,TR::InstOpCode::Op_load, node, temp1Reg,
5625
- TR::MemoryReference::createWithDisplacement(cg, metaReg, offsetof(J9VMThread, heapAlloc), TR::Compiler->om.sizeofReferenceAddress()), iCursor);
5626
-
5627
- iCursor = generateTrg1Src1ImmInstruction(cg, TR::InstOpCode::addi, node, resReg, temp1Reg, instanceBoundaryForAlignment - 1, iCursor);
5628
- if (comp->target().is64Bit())
5629
- iCursor = generateTrg1Src1Imm2Instruction(cg, TR::InstOpCode::rldicr, node, resReg, resReg, 0, int64_t(-instanceBoundaryForAlignment), iCursor);
5630
- else
5631
- iCursor = generateTrg1Src1Imm2Instruction(cg, TR::InstOpCode::rlwinm, node, resReg, resReg, 0, -instanceBoundaryForAlignment, iCursor);
5632
- }
5633
- }
5634
- }
5635
-
5636
- if (!shouldAlignToCacheBoundary)
5637
- {
5638
- iCursor = generateTrg1MemInstruction(cg,TR::InstOpCode::Op_load, node, resReg,
5639
- TR::MemoryReference::createWithDisplacement(cg, metaReg, offsetof(J9VMThread, heapAlloc), TR::Compiler->om.sizeofReferenceAddress()), iCursor);
5640
- }
5641
5577
iCursor = generateTrg1MemInstruction(cg,TR::InstOpCode::Op_load, node, heapTopReg,
5642
5578
TR::MemoryReference::createWithDisplacement(cg, metaReg, offsetof(J9VMThread, heapTop), TR::Compiler->om.sizeofReferenceAddress()), iCursor);
5643
5579
5644
5580
if (needZeroInit)
5645
5581
iCursor = generateTrg1ImmInstruction(cg, TR::InstOpCode::li, node, zeroReg, 0, iCursor);
5646
-
5647
5582
}
5648
5583
else
5649
5584
{
@@ -5815,15 +5750,9 @@ static void genHeapAlloc(TR::Node *node, TR::Instruction *&iCursor, TR_OpaqueCla
5815
5750
else
5816
5751
iCursor = generateTrg1Src1ImmInstruction(cg, TR::InstOpCode::addi, node, temp2Reg, resReg, allocSize, iCursor);
5817
5752
5818
- //TODO: shouldAlignToCacheBoundary is never true, check its effects here.
5819
- int32_t padding = shouldAlignToCacheBoundary ? instanceBoundaryForAlignment : 0;
5820
-
5821
- if (!isVariableLen && ((uint32_t) allocSize + padding) > maxSafeSize)
5753
+ if (!isVariableLen && ((uint32_t) allocSize) > maxSafeSize)
5822
5754
{
5823
- if (!shouldAlignToCacheBoundary)
5824
- iCursor = generateTrg1Src2Instruction(cg,TR::InstOpCode::Op_cmpl, node, condReg, temp2Reg, resReg, iCursor);
5825
- else
5826
- iCursor = generateTrg1Src2Instruction(cg,TR::InstOpCode::Op_cmpl, node, condReg, temp2Reg, temp1Reg, iCursor);
5755
+ iCursor = generateTrg1Src2Instruction(cg,TR::InstOpCode::Op_cmpl, node, condReg, temp2Reg, resReg, iCursor);
5827
5756
iCursor = generateConditionalBranchInstruction(cg, TR::InstOpCode::blt, node, callLabel, condReg, iCursor);
5828
5757
}
5829
5758
@@ -5848,53 +5777,6 @@ static void genHeapAlloc(TR::Node *node, TR::Instruction *&iCursor, TR_OpaqueCla
5848
5777
iCursor = generateTrg1Src2Instruction(cg,TR::InstOpCode::Op_cmpl, node, condReg, temp2Reg, heapTopReg, iCursor);
5849
5778
iCursor = generateConditionalBranchInstruction(cg, TR::InstOpCode::bgt, node, callLabel, condReg, iCursor);
5850
5779
5851
- //TODO: this code is never executed, check if we can remove this now.
5852
- if (!cg->isDualTLH())
5853
- {
5854
- //shouldAlignToCacheBoundary is false at definition at the top, and
5855
- //the only codepoint where its set to true is never executed
5856
- //so this looks like a candidate for deletion.
5857
- if (shouldAlignToCacheBoundary)
5858
- {
5859
- TR::LabelSymbol *doneAlignLabel = generateLabelSymbol(cg);
5860
- TR::LabelSymbol *multiSlotGapLabel = generateLabelSymbol(cg);
5861
- ;
5862
- iCursor = generateTrg1Src2Instruction(cg, TR::InstOpCode::subf, node, dataSizeReg, temp1Reg, resReg, iCursor);
5863
-
5864
- if (sizeInReg)
5865
- iCursor = generateTrg1Src2Instruction(cg, TR::InstOpCode::add, node, sizeReg, dataSizeReg, sizeReg, iCursor);
5866
- else
5867
- iCursor = generateTrg1Src1ImmInstruction(cg, TR::InstOpCode::addi, node, sizeReg, dataSizeReg, allocSize, iCursor);
5868
-
5869
- sizeInReg = true;
5870
-
5871
- iCursor = generateTrg1Src1ImmInstruction(cg,TR::InstOpCode::Op_cmpli, node, condReg, dataSizeReg, sizeof(uintptr_t), iCursor);
5872
- iCursor = generateConditionalBranchInstruction(cg, TR::InstOpCode::blt, node, doneAlignLabel, condReg, iCursor);
5873
- iCursor = generateConditionalBranchInstruction(cg, TR::InstOpCode::bgt, node, multiSlotGapLabel, condReg, iCursor);
5874
- iCursor = generateTrg1ImmInstruction(cg, TR::InstOpCode::li, node, dataSizeReg, J9_GC_SINGLE_SLOT_HOLE, iCursor);
5875
-
5876
- if (comp->target().is64Bit() && fej9->generateCompressedLockWord())
5877
- {
5878
- iCursor = generateMemSrc1Instruction(cg, TR::InstOpCode::stw, node, TR::MemoryReference::createWithDisplacement(cg, temp1Reg, 0, 4), dataSizeReg, iCursor);
5879
- iCursor = generateMemSrc1Instruction(cg, TR::InstOpCode::stw, node, TR::MemoryReference::createWithDisplacement(cg, temp1Reg, 4, 4), dataSizeReg, iCursor);
5880
- }
5881
- else
5882
- {
5883
- iCursor = generateMemSrc1Instruction(cg,TR::InstOpCode::Op_st, node, TR::MemoryReference::createWithDisplacement(cg, temp1Reg, 0, TR::Compiler->om.sizeofReferenceAddress()), dataSizeReg,
5884
- iCursor);
5885
- }
5886
-
5887
- iCursor = generateLabelInstruction(cg, TR::InstOpCode::b, node, doneAlignLabel, iCursor);
5888
- iCursor = generateLabelInstruction(cg, TR::InstOpCode::label, node, multiSlotGapLabel, iCursor);
5889
- iCursor = generateMemSrc1Instruction(cg,TR::InstOpCode::Op_st, node, TR::MemoryReference::createWithDisplacement(cg, temp1Reg, TR::Compiler->om.sizeofReferenceAddress(), TR::Compiler->om.sizeofReferenceAddress()),
5890
- dataSizeReg, iCursor);
5891
- iCursor = generateTrg1ImmInstruction(cg, TR::InstOpCode::li, node, dataSizeReg, J9_GC_MULTI_SLOT_HOLE, iCursor);
5892
- iCursor = generateMemSrc1Instruction(cg,TR::InstOpCode::Op_st, node, TR::MemoryReference::createWithDisplacement(cg, temp1Reg, 0, TR::Compiler->om.sizeofReferenceAddress()), dataSizeReg,
5893
- iCursor);
5894
- iCursor = generateLabelInstruction(cg, TR::InstOpCode::label, node, doneAlignLabel, iCursor);
5895
- }
5896
- }
5897
-
5898
5780
if (cg->enableTLHPrefetching())
5899
5781
{
5900
5782
//Decide between zeroed and non-zero TLH'es
0 commit comments