Hide 'align' instruction behind jmp (#60787)
authorKunal Pathak <Kunal.Pathak@microsoft.com>
Thu, 18 Nov 2021 02:13:59 +0000 (18:13 -0800)
committerGitHub <noreply@github.com>
Thu, 18 Nov 2021 02:13:59 +0000 (18:13 -0800)
commit581d4d25aca5ced21348cdbff3a93d5e9730d376
treea89e3775eed0a87aab8ba499c2b10fbc6aa01f4c
parent7f874eee5ace09cc274fd7b4b9988b30730172f3
Hide 'align' instruction behind jmp (#60787)

* Hide align behind a jmp

fix the alignBytesRemoved

Some fixes and working model

Some fixes and redesign

Some more fixes

more fixes

fix

Add the check  for fgFirstBB

misc changes

code cleanup + JitHideAlignBehindJmp switch

validatePadding only if align are before the loop IG

More cleanup, remove commented code

jit format

* Fix a problem where curIG==0 and loop might be emitted in curIG, adjust the targetIG to prevIG

Add IGF_REMOVED_ALIGN flag for special scenarios

* Add stress mode to emit int3 for xarch

* Add stress mode to emit bkpt for arm64

* Add a loop align instruction placement phase

* review comments

* Change from unsigned short to unsigned

* review comments around cleanup

* emitForceNewIG

* Remove emitPrevIG

* Revert change to forceNewIG for align instruction

* Use loopAlignCandidates

* Use loopHeadIG reference

* jit format

* Remove unneeded method

* Misc changes

* Review feedback

* Do not include align behind Jmp in PerfScore calculation

* jit format and fix a bug

* fix the loopCandidates == 0 scenario

* Add unmarkLoopAlign(), add check for fgFirstBB

* merge conflict fix

* Add missing }

* Grammar nit

Co-authored-by: Bruce Forstall <brucefo@microsoft.com>
Co-authored-by: Bruce Forstall <brucefo@microsoft.com>
14 files changed:
src/coreclr/jit/block.cpp
src/coreclr/jit/block.h
src/coreclr/jit/codegenlinear.cpp
src/coreclr/jit/compiler.cpp
src/coreclr/jit/compiler.h
src/coreclr/jit/compphases.h
src/coreclr/jit/emit.cpp
src/coreclr/jit/emit.h
src/coreclr/jit/emitarm64.cpp
src/coreclr/jit/emitxarch.cpp
src/coreclr/jit/fgbasic.cpp
src/coreclr/jit/jitconfigvalues.h
src/coreclr/jit/morph.cpp
src/coreclr/jit/optimizer.cpp