Skip to content

Commit

Permalink
Do not align cloned loops (#48090)
Browse files Browse the repository at this point in the history
* Do not align cloned loops
  • Loading branch information
kunalspathak authored Feb 11, 2021
1 parent df719dd commit aa660d5
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/coreclr/jit/emitxarch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9223,6 +9223,12 @@ void emitter::emitDispIns(
break;

case IF_NONE:
#if FEATURE_LOOP_ALIGN
if (ins == INS_align)
{
printf("[%d bytes]", id->idCodeSize());
}
#endif
break;

default:
Expand Down
12 changes: 12 additions & 0 deletions src/coreclr/jit/optimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5319,6 +5319,18 @@ void Compiler::optCloneLoop(unsigned loopInd, LoopCloneContext* context)
// checked them to guarantee they are clonable.
bool cloneOk = BasicBlock::CloneBlockState(this, newBlk, blk);
noway_assert(cloneOk);

#if FEATURE_LOOP_ALIGN
// If the original loop is aligned, do not align the cloned loop because cloned loop will be executed in
// rare scenario. Additionally, having to align cloned loop will force us to disable some VEX prefix encoding
// and adding compensation for over-estimated instructions.
if (blk->isLoopAlign())
{
newBlk->bbFlags &= ~BBF_LOOP_ALIGN;
JITDUMP("Removing LOOP_ALIGN flag from cloned loop in " FMT_BB "\n", newBlk->bbNum);
}
#endif

// TODO-Cleanup: The above clones the bbNatLoopNum, which is incorrect. Eventually, we should probably insert
// the cloned loop in the loop table. For now, however, we'll just make these blocks be part of the surrounding
// loop, if one exists -- the parent of the loop we're cloning.
Expand Down

0 comments on commit aa660d5

Please sign in to comment.