Skip to content

Commit a6a4b0e

Browse files
committed
Fix assert
1 parent e55da57 commit a6a4b0e

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/coreclr/jit/lowerarmarch.cpp

+19-8
Original file line numberDiff line numberDiff line change
@@ -1289,7 +1289,11 @@ GenTree* Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node)
12891289
else if (op1->IsLocal())
12901290
{
12911291
// We're an existing local that is loaded from memory
1292-
lclNum = op1->AsLclVarCommon()->GetLclNum();
1292+
GenTreeLclVarCommon* lclVar = op1->AsLclVarCommon();
1293+
1294+
lclNum = lclVar->GetLclNum();
1295+
offset = lclVar->GetLclOffs();
1296+
12931297
BlockRange().Remove(op1);
12941298
}
12951299

@@ -1300,25 +1304,32 @@ GenTree* Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node)
13001304
BlockRange().InsertBefore(node, op1);
13011305
LowerNode(op1);
13021306
}
1307+
else
1308+
{
1309+
assert(op1->isIndir());
1310+
1311+
// We need to get the underlying address
1312+
GenTree* addr = op1->AsIndir()->Addr();
1313+
BlockRange().Remove(op1);
1314+
op1 = addr;
1315+
}
13031316

13041317
// Now that we have a memory op, we need to offset it by op2 * scale
1305-
assert(op1->isMemoryOp());
1306-
13071318
if (op2->OperIsConst())
13081319
{
1309-
offset = op2->AsIntCon()->IconValue() * scale;
1320+
offset = offset + (op2->AsIntCon()->IconValue() * scale);
13101321
scale = 0;
13111322

13121323
BlockRange().Remove(op2);
13131324
op2 = nullptr;
13141325
}
13151326

1316-
GenTree* addr = new (comp, GT_LEA) GenTreeAddrMode(op1->TypeGet(), op1, op2, scale, offset);
1317-
BlockRange().InsertBefore(node, addr);
1318-
LowerNode(addr);
1327+
GenTree* addrMode = new (comp, GT_LEA) GenTreeAddrMode(op1->TypeGet(), op1, op2, scale, offset);
1328+
BlockRange().InsertBefore(node, addrMode);
1329+
LowerNode(addrMode);
13191330

13201331
// Finally we can indirect the memory address to get the actual value
1321-
GenTreeIndir* indir = comp->gtNewIndir(simdBaseType, addr);
1332+
GenTreeIndir* indir = comp->gtNewIndir(simdBaseType, addrMode);
13221333
BlockRange().InsertBefore(node, indir);
13231334

13241335
LIR::Use use;

0 commit comments

Comments
 (0)