Skip to content

Commit 51b51bf

Browse files
authored
Remove GT_STORE_DYN_BLK (#98905)
1 parent 173da89 commit 51b51bf

39 files changed

+65
-540
lines changed

Diff for: docs/design/coreclr/jit/first-class-structs.md

-4
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,6 @@ encountered by most phases of the JIT:
9494
[#21705](https://github.com/dotnet/coreclr/pull/21705) they are no longer large nodes.
9595
* `GT_STORE_OBJ` and `GT_STORE_BLK` have the same structure as `GT_OBJ` and `GT_BLK`, respectively
9696
* `Data()` is op2
97-
* `GT_STORE_DYN_BLK` (GenTreeStoreDynBlk extends GenTreeBlk)
98-
* Additional child `gtDynamicSize`
99-
* Note that these aren't really struct stores; they represent dynamically sized blocks
100-
of arbitrary data.
10197
* For `GT_LCL_FLD` nodes, we store a pointer to `ClassLayout` in the node.
10298
* For `GT_LCL_VAR` nodes, the `ClassLayout` is obtained from the `LclVarDsc`.
10399

Diff for: src/coreclr/jit/assertionprop.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -5493,7 +5493,6 @@ GenTree* Compiler::optAssertionProp(ASSERT_VALARG_TP assertions, GenTree* tree,
54935493
case GT_IND:
54945494
case GT_STOREIND:
54955495
case GT_NULLCHECK:
5496-
case GT_STORE_DYN_BLK:
54975496
return optAssertionProp_Ind(assertions, tree, stmt);
54985497

54995498
case GT_BOUNDS_CHECK:

Diff for: src/coreclr/jit/codegenarmarch.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,6 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
513513
#endif
514514
break;
515515

516-
case GT_STORE_DYN_BLK:
517516
case GT_STORE_BLK:
518517
genCodeForStoreBlk(treeNode->AsBlk());
519518
break;
@@ -4568,14 +4567,14 @@ void CodeGen::inst_JMP(emitJumpKind jmp, BasicBlock* tgtBlock)
45684567
}
45694568

45704569
//------------------------------------------------------------------------
4571-
// genCodeForStoreBlk: Produce code for a GT_STORE_DYN_BLK/GT_STORE_BLK node.
4570+
// genCodeForStoreBlk: Produce code for a GT_STORE_BLK node.
45724571
//
45734572
// Arguments:
45744573
// tree - the node
45754574
//
45764575
void CodeGen::genCodeForStoreBlk(GenTreeBlk* blkOp)
45774576
{
4578-
assert(blkOp->OperIs(GT_STORE_DYN_BLK, GT_STORE_BLK));
4577+
assert(blkOp->OperIs(GT_STORE_BLK));
45794578

45804579
bool isCopyBlk = blkOp->OperIsCopyBlkOp();
45814580

Diff for: src/coreclr/jit/codegencommon.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -6546,7 +6546,7 @@ void CodeGen::genDefinePendingCallLabel(GenTreeCall* call)
65466546
// For certain indirect calls we may introduce helper calls before that we need to skip:
65476547
// - CFG may introduce a call to the validator first
65486548
// - Generic virtual methods may compute the target dynamically through a separate helper call
6549-
// - memset/memcpy helper calls emitted for GT_STORE_DYN_BLK/GT_STORE_BLK
6549+
// - memset/memcpy helper calls emitted for GT_STORE_BLK
65506550
if (call->IsHelperCall())
65516551
{
65526552
switch (compiler->eeGetHelperNum(call->gtCallMethHnd))

Diff for: src/coreclr/jit/codegenlinear.cpp

+3-18
Original file line numberDiff line numberDiff line change
@@ -1935,18 +1935,9 @@ void CodeGen::genSetBlockSize(GenTreeBlk* blkNode, regNumber sizeReg)
19351935
{
19361936
if (sizeReg != REG_NA)
19371937
{
1938-
unsigned blockSize = blkNode->Size();
1939-
if (!blkNode->OperIs(GT_STORE_DYN_BLK))
1940-
{
1941-
assert((blkNode->gtRsvdRegs & genRegMask(sizeReg)) != 0);
1942-
// This can go via helper which takes the size as a native uint.
1943-
instGen_Set_Reg_To_Imm(EA_PTRSIZE, sizeReg, blockSize);
1944-
}
1945-
else
1946-
{
1947-
GenTree* sizeNode = blkNode->AsStoreDynBlk()->gtDynamicSize;
1948-
inst_Mov(sizeNode->TypeGet(), sizeReg, sizeNode->GetRegNum(), /* canSkip */ true);
1949-
}
1938+
assert((blkNode->gtRsvdRegs & genRegMask(sizeReg)) != 0);
1939+
// This can go via helper which takes the size as a native uint.
1940+
instGen_Set_Reg_To_Imm(EA_PTRSIZE, sizeReg, blkNode->Size());
19501941
}
19511942
}
19521943

@@ -2052,12 +2043,6 @@ void CodeGen::genConsumeBlockOp(GenTreeBlk* blkNode, regNumber dstReg, regNumber
20522043
genConsumeReg(dstAddr);
20532044
// The source may be a local or in a register; 'genConsumeBlockSrc' will check that.
20542045
genConsumeBlockSrc(blkNode);
2055-
// 'genSetBlockSize' (called below) will ensure that a register has been reserved as needed
2056-
// in the case where the size is a constant (i.e. it is not GT_STORE_DYN_BLK).
2057-
if (blkNode->OperGet() == GT_STORE_DYN_BLK)
2058-
{
2059-
genConsumeReg(blkNode->AsStoreDynBlk()->gtDynamicSize);
2060-
}
20612046

20622047
// Next, perform any necessary moves.
20632048
genCopyRegIfNeeded(dstAddr, dstReg);

Diff for: src/coreclr/jit/codegenloongarch64.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -5022,7 +5022,6 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
50225022
emit->emitIns_R_L(INS_ld_d, EA_PTRSIZE, genPendingCallLabel, targetReg);
50235023
break;
50245024

5025-
case GT_STORE_DYN_BLK:
50265025
case GT_STORE_BLK:
50275026
genCodeForStoreBlk(treeNode->AsBlk());
50285027
break;
@@ -7249,14 +7248,14 @@ void CodeGen::genCreateAndStoreGCInfo(unsigned codeSize,
72497248
}
72507249

72517250
//------------------------------------------------------------------------
7252-
// genCodeForStoreBlk: Produce code for a GT_STORE_DYN_BLK/GT_STORE_BLK node.
7251+
// genCodeForStoreBlk: Produce code for a GT_STORE_BLK node.
72537252
//
72547253
// Arguments:
72557254
// tree - the node
72567255
//
72577256
void CodeGen::genCodeForStoreBlk(GenTreeBlk* blkOp)
72587257
{
7259-
assert(blkOp->OperIs(GT_STORE_DYN_BLK, GT_STORE_BLK));
7258+
assert(blkOp->OperIs(GT_STORE_BLK));
72607259

72617260
if (blkOp->gtBlkOpGcUnsafe)
72627261
{

Diff for: src/coreclr/jit/codegenriscv64.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -5102,7 +5102,6 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
51025102
emit->emitIns_R_L(INS_ld, EA_PTRSIZE, genPendingCallLabel, targetReg);
51035103
break;
51045104

5105-
case GT_STORE_DYN_BLK:
51065105
case GT_STORE_BLK:
51075106
genCodeForStoreBlk(treeNode->AsBlk());
51085107
break;
@@ -7246,14 +7245,14 @@ void CodeGen::genCreateAndStoreGCInfo(unsigned codeSize,
72467245
}
72477246

72487247
//------------------------------------------------------------------------
7249-
// genCodeForStoreBlk: Produce code for a GT_STORE_DYN_BLK/GT_STORE_BLK node.
7248+
// genCodeForStoreBlk: Produce code for a GT_STORE_BLK node.
72507249
//
72517250
// Arguments:
72527251
// tree - the node
72537252
//
72547253
void CodeGen::genCodeForStoreBlk(GenTreeBlk* blkOp)
72557254
{
7256-
assert(blkOp->OperIs(GT_STORE_DYN_BLK, GT_STORE_BLK));
7255+
assert(blkOp->OperIs(GT_STORE_BLK));
72577256

72587257
if (blkOp->gtBlkOpGcUnsafe)
72597258
{

Diff for: src/coreclr/jit/codegenxarch.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -2183,7 +2183,6 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
21832183
emit->emitIns_R_L(INS_lea, EA_PTR_DSP_RELOC, genPendingCallLabel, treeNode->GetRegNum());
21842184
break;
21852185

2186-
case GT_STORE_DYN_BLK:
21872186
case GT_STORE_BLK:
21882187
genCodeForStoreBlk(treeNode->AsBlk());
21892188
break;
@@ -3057,7 +3056,7 @@ void CodeGen::genLclHeap(GenTree* tree)
30573056

30583057
void CodeGen::genCodeForStoreBlk(GenTreeBlk* storeBlkNode)
30593058
{
3060-
assert(storeBlkNode->OperIs(GT_STORE_DYN_BLK, GT_STORE_BLK));
3059+
assert(storeBlkNode->OperIs(GT_STORE_BLK));
30613060

30623061
bool isCopyBlk = storeBlkNode->OperIsCopyBlkOp();
30633062

Diff for: src/coreclr/jit/compiler.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -9920,7 +9920,6 @@ JITDBGAPI void __cdecl cTreeFlags(Compiler* comp, GenTree* tree)
99209920

99219921
case GT_BLK:
99229922
case GT_STORE_BLK:
9923-
case GT_STORE_DYN_BLK:
99249923

99259924
if (tree->gtFlags & GTF_IND_VOLATILE)
99269925
{

Diff for: src/coreclr/jit/compiler.h

-26
Original file line numberDiff line numberDiff line change
@@ -3364,9 +3364,6 @@ class Compiler
33643364
GenTreeBlk* gtNewStoreBlkNode(
33653365
ClassLayout* layout, GenTree* addr, GenTree* data, GenTreeFlags indirFlags = GTF_EMPTY);
33663366

3367-
GenTreeStoreDynBlk* gtNewStoreDynBlkNode(
3368-
GenTree* addr, GenTree* data, GenTree* dynamicSize, GenTreeFlags indirFlags = GTF_EMPTY);
3369-
33703367
GenTreeStoreInd* gtNewStoreIndNode(
33713368
var_types type, GenTree* addr, GenTree* data, GenTreeFlags indirFlags = GTF_EMPTY);
33723369

@@ -6463,7 +6460,6 @@ class Compiler
64636460
public:
64646461
GenTree* fgMorphInitBlock(GenTree* tree);
64656462
GenTree* fgMorphCopyBlock(GenTree* tree);
6466-
GenTree* fgMorphStoreDynBlock(GenTreeStoreDynBlk* tree);
64676463
private:
64686464
GenTree* fgMorphSmpOp(GenTree* tree, MorphAddrContext* mac, bool* optAssertionPropDone = nullptr);
64696465
void fgTryReplaceStructLocalWithField(GenTree* tree);
@@ -11447,28 +11443,6 @@ class GenTreeVisitor
1144711443
break;
1144811444
}
1144911445

11450-
case GT_STORE_DYN_BLK:
11451-
{
11452-
GenTreeStoreDynBlk* const dynBlock = node->AsStoreDynBlk();
11453-
11454-
result = WalkTree(&dynBlock->gtOp1, dynBlock);
11455-
if (result == fgWalkResult::WALK_ABORT)
11456-
{
11457-
return result;
11458-
}
11459-
result = WalkTree(&dynBlock->gtOp2, dynBlock);
11460-
if (result == fgWalkResult::WALK_ABORT)
11461-
{
11462-
return result;
11463-
}
11464-
result = WalkTree(&dynBlock->gtDynamicSize, dynBlock);
11465-
if (result == fgWalkResult::WALK_ABORT)
11466-
{
11467-
return result;
11468-
}
11469-
break;
11470-
}
11471-
1147211446
case GT_CALL:
1147311447
{
1147411448
GenTreeCall* const call = node->AsCall();

Diff for: src/coreclr/jit/compiler.hpp

-15
Original file line numberDiff line numberDiff line change
@@ -4362,21 +4362,6 @@ void GenTree::VisitOperands(TVisitor visitor)
43624362
return;
43634363
}
43644364

4365-
case GT_STORE_DYN_BLK:
4366-
{
4367-
GenTreeStoreDynBlk* const dynBlock = this->AsStoreDynBlk();
4368-
if (visitor(dynBlock->gtOp1) == VisitResult::Abort)
4369-
{
4370-
return;
4371-
}
4372-
if (visitor(dynBlock->gtOp2) == VisitResult::Abort)
4373-
{
4374-
return;
4375-
}
4376-
visitor(dynBlock->gtDynamicSize);
4377-
return;
4378-
}
4379-
43804365
case GT_CALL:
43814366
{
43824367
GenTreeCall* const call = this->AsCall();

0 commit comments

Comments
 (0)