[X86] Optimize stackmap shadows on X86.
authorLang Hames <lhames@gmail.com>
Thu, 24 Jul 2014 20:40:55 +0000 (20:40 +0000)
committerLang Hames <lhames@gmail.com>
Thu, 24 Jul 2014 20:40:55 +0000 (20:40 +0000)
commitb96e8338171ed4cb23a3b14d94db2361b0d544e8
treedbe8c2b6c2e5c922478f53ca77cb8598474291bb
parent5b93c8af72ba33afe53225828bfa3cef62f9ca83
[X86] Optimize stackmap shadows on X86.

This patch minimizes the number of nops that must be emitted on X86 to satisfy
stackmap shadow constraints.

To minimize the number of nops inserted, the X86AsmPrinter now records the
size of the most recent stackmap's shadow in the StackMapShadowTracker class,
and tracks the number of instruction bytes emitted since the that stackmap
instruction was encountered. Padding is emitted (if it is required at all)
immediately before the next stackmap/patchpoint instruction, or at the end of
the basic block.

This optimization should reduce code-size and improve performance for people
using the llvm stackmap intrinsic on X86.

<rdar://problem/14959522>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213892 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/Target/X86/X86AsmPrinter.cpp
lib/Target/X86/X86AsmPrinter.h
lib/Target/X86/X86MCInstLower.cpp
test/CodeGen/X86/stackmap-nops.ll
test/CodeGen/X86/stackmap-shadow-optimization.ll [new file with mode: 0644]
test/MC/X86/stackmap-nops.ll