Skip to content

Commit ccb3fc0

Browse files
committed
[MERGE #5334 @sigatrev] ARM64: fix sym offset hoisting based on opnd size
Merge pull request #5334 from sigatrev:cherry This is a cherry-pick of a change that was put into master instead of 1.10.
2 parents cd27b56 + c7a0e76 commit ccb3fc0

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

lib/Backend/arm64/LegalizeMD.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,24 @@ void LegalizeMD::LegalizeSymOffset(
463463
EncoderMD::BaseAndOffsetFromSym(symOpnd, &baseReg, &offset, instr->m_func->GetTopFunc());
464464

465465
// Determine scale factor for scaled offsets
466-
int scale = (symOpnd->GetType() == TyFloat64) ? 3 : 2;
466+
int scale;
467+
if (symOpnd->GetSize() == 8)
468+
{
469+
scale = 3;
470+
}
471+
else if (symOpnd->GetSize() == 4)
472+
{
473+
scale = 2;
474+
}
475+
else if (symOpnd->GetSize() == 2)
476+
{
477+
scale = 1;
478+
}
479+
else
480+
{
481+
scale = 0;
482+
}
483+
467484
int32 scaledOffset = offset >> scale;
468485

469486
// Either scaled unsigned 12-bit offset, or unscaled signed 9-bit offset

0 commit comments

Comments
 (0)