Skip to content

Commit 9b43575

Browse files
authored
Merge pull request dotnet#16 from BruceForstall/LIR3
Decomposition fixes
2 parents d1b91cb + 9f171aa commit 9b43575

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

src/jit/decomposelongs.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,8 @@ GenTree* DecomposeLongs::DecomposeNode(LIR::Use& use)
258258
#ifdef DEBUG
259259
if (m_compiler->verbose)
260260
{
261-
printf(" AFTER:\n");
261+
// NOTE: st_lcl_var doesn't dump properly afterwards.
262+
printf("Decomposing TYP_LONG tree. AFTER:\n");
262263
m_compiler->gtDispTree(use.Def());
263264
}
264265
#endif
@@ -275,7 +276,8 @@ GenTree* DecomposeLongs::DecomposeNode(LIR::Use& use)
275276
// Arguments:
276277
// use - the LIR::Use object for the def that needs to be decomposed.
277278
// loResult - the decomposed low part
278-
// hiResult - the decomposed high part
279+
// hiResult - the decomposed high part. This must follow loResult in the linear order,
280+
// as the new GT_LONG node will be inserted immediately after it.
279281
//
280282
// Return Value:
281283
// The next node to process.
@@ -294,7 +296,7 @@ GenTree* DecomposeLongs::FinalizeDecomposition(LIR::Use& use, GenTree* loResult,
294296

295297
use.ReplaceWith(m_compiler, gtLong);
296298

297-
return gtLong;
299+
return gtLong->gtNext;
298300
}
299301

300302

@@ -434,6 +436,10 @@ GenTree* DecomposeLongs::DecomposeStoreLclVar(LIR::Use& use)
434436
hiStore->AsLclFld()->gtFieldSeq = FieldSeqStore::NotAField();
435437
}
436438

439+
// 'tree' is going to steal the loRhs node for itself, so we need to remove the
440+
// GT_LONG node from the threading.
441+
m_blockRange.Remove(rhs);
442+
437443
tree->gtOp.gtOp1 = loRhs;
438444
tree->gtType = TYP_INT;
439445

@@ -445,7 +451,7 @@ GenTree* DecomposeLongs::DecomposeStoreLclVar(LIR::Use& use)
445451

446452
m_blockRange.InsertAfter(hiStore, tree);
447453

448-
return hiStore;
454+
return hiStore->gtNext;
449455
}
450456

451457

@@ -796,6 +802,7 @@ GenTree* DecomposeLongs::DecomposeInd(LIR::Use& use)
796802
GenTreePtr indHigh = new (m_compiler, GT_IND) GenTreeIndir(GT_IND, TYP_INT, addrHigh, nullptr);
797803

798804
// Insert the nodes into the block
805+
m_blockRange.InsertAfter(addrBaseHigh, indLow);
799806
m_blockRange.InsertAfter(addrHigh, addrBaseHigh);
800807
m_blockRange.InsertAfter(indHigh, addrHigh);
801808

src/jit/gtlist.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ GTNODE(PHI_ARG , "phiArg" ,0,GTK_LEAF|GTK_LOCAL) // phi(phiarg, phiarg,
222222
// Nodes used by Lower to generate a closer CPU representation of other nodes
223223
//-----------------------------------------------------------------------------
224224

225-
GTNODE(JMPTABLE , "jumpTable" , 0, GTK_LEAF|GTK_NOVALUE) // Generates the jump table for switches
225+
GTNODE(JMPTABLE , "jumpTable" , 0, GTK_LEAF) // Generates the jump table for switches
226226
GTNODE(SWITCH_TABLE, "tableSwitch", 0, GTK_BINOP|GTK_NOVALUE) // Jump Table based switch construct
227227

228228
//-----------------------------------------------------------------------------

src/jit/lowerarm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3434
/* Lowering of GT_CAST nodes */
3535
void Lowering::LowerCast(GenTree* tree)
3636
{
37-
MYI_ARM("ARM Lowering for cast");
37+
NYI_ARM("ARM Lowering for cast");
3838
}
3939

4040
void Lowering::LowerRotate(GenTreePtr tree)

0 commit comments

Comments
 (0)