mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-07 11:33:44 +00:00
8fa8929177
ShadowStackCollector, which additionally has reduced overhead with no sacrifice in portability. Considering a function @fun with 8 loop-local roots, ShadowStackCollector introduces the following overhead (x86): ; shadowstack prologue movl L_llvm_gc_root_chain$non_lazy_ptr, %eax movl (%eax), %ecx movl $___gc_fun, 20(%esp) movl $0, 24(%esp) movl $0, 28(%esp) movl $0, 32(%esp) movl $0, 36(%esp) movl $0, 40(%esp) movl $0, 44(%esp) movl $0, 48(%esp) movl $0, 52(%esp) movl %ecx, 16(%esp) leal 16(%esp), %ecx movl %ecx, (%eax) ; shadowstack loop overhead (none) ; shadowstack epilogue movl 48(%esp), %edx movl %edx, (%ecx) ; shadowstack metadata .align 3 ___gc_fun: # __gc_fun .long 8 .space 4 In comparison to LowerGC: ; lowergc prologue movl L_llvm_gc_root_chain$non_lazy_ptr, %eax movl (%eax), %ecx movl %ecx, 48(%esp) movl $8, 52(%esp) movl $0, 60(%esp) movl $0, 56(%esp) movl $0, 68(%esp) movl $0, 64(%esp) movl $0, 76(%esp) movl $0, 72(%esp) movl $0, 84(%esp) movl $0, 80(%esp) movl $0, 92(%esp) movl $0, 88(%esp) movl $0, 100(%esp) movl $0, 96(%esp) movl $0, 108(%esp) movl $0, 104(%esp) movl $0, 116(%esp) movl $0, 112(%esp) ; lowergc loop overhead leal 44(%esp), %eax movl %eax, 56(%esp) leal 40(%esp), %eax movl %eax, 64(%esp) leal 36(%esp), %eax movl %eax, 72(%esp) leal 32(%esp), %eax movl %eax, 80(%esp) leal 28(%esp), %eax movl %eax, 88(%esp) leal 24(%esp), %eax movl %eax, 96(%esp) leal 20(%esp), %eax movl %eax, 104(%esp) leal 16(%esp), %eax movl %eax, 112(%esp) ; lowergc epilogue movl 48(%esp), %edx movl %edx, (%ecx) ; lowergc metadata (none) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45670 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
GC | ||
2002-04-14-UnexpectedUnsignedType.ll | ||
2002-04-16-StackFrameSizeAlignment.ll | ||
2003-05-27-phifcmpd.ll | ||
2003-05-27-useboolinotherbb.ll | ||
2003-05-27-usefsubasbool.ll | ||
2003-05-28-ManyArgs.ll | ||
2003-05-30-BadFoldGEP.ll | ||
2003-05-30-BadPreselectPhi.ll | ||
2003-07-06-BadIntCmp.ll | ||
2003-07-07-BadLongConst.ll | ||
2003-07-08-BadCastToBool.ll | ||
2003-07-29-BadConstSbyte.ll | ||
2004-02-08-UnwindSupport.llx | ||
2004-05-09-LiveVarPartialRegister.llx | ||
2005-01-18-SetUO-InfLoop.ll | ||
2005-04-09-GlobalInPHI.ll | ||
2005-07-12-memcpy-i64-length.ll | ||
2005-10-18-ZeroSizeStackObject.ll | ||
2005-10-21-longlonggtu.ll | ||
2005-12-01-Crash.ll | ||
2005-12-12-ExpandSextInreg.ll | ||
2006-01-12-BadSetCCFold.ll | ||
2006-01-18-InvalidBranchOpcodeAssert.ll | ||
2006-02-12-InsertLibcall.ll | ||
2006-03-01-dagcombineinfloop.ll | ||
2006-03-27-DebugInfoNULLDeclare.ll | ||
2006-04-11-vecload.ll | ||
2006-04-26-SetCCAnd.ll | ||
2006-04-28-Sign-extend-bool.ll | ||
2006-05-06-GEP-Cast-Sink-Crash.ll | ||
2006-06-12-LowerSwitchCrash.ll | ||
2006-06-13-ComputeMaskedBitsCrash.ll | ||
2006-06-28-SimplifySetCCCrash.ll | ||
2006-07-03-schedulers.ll | ||
2006-08-30-CoallescerCrash.ll | ||
2006-09-02-LocalAllocCrash.ll | ||
2006-09-06-SwitchLowering.ll | ||
2006-10-27-CondFolding.ll | ||
2006-10-29-Crash.ll | ||
2006-11-06-MemIntrinsicExpand.ll | ||
2006-11-20-DAGCombineCrash.ll | ||
2006-12-16-InlineAsmCrash.ll | ||
2007-01-15-LoadSelectCycle.ll | ||
2007-02-16-BranchFold.ll | ||
2007-02-23-DAGCombine-Miscompile.ll | ||
2007-02-25-invoke.ll | ||
2007-04-08-MultipleFrameIndices.ll | ||
2007-04-13-SwitchLowerBadPhi.ll | ||
2007-04-14-BitTestsBadMask.ll | ||
2007-04-14-EHSelectorCrash.ll | ||
2007-04-17-lsr-crash.ll | ||
2007-04-27-BitTestsBadMask.ll | ||
2007-04-27-InlineAsm-X-Dest.ll | ||
2007-04-27-LargeMemObject.ll | ||
2007-04-30-LandingPadBranchFolding.ll | ||
2007-05-03-EHTypeInfo.ll | ||
2007-05-05-Personality.ll | ||
2007-05-15-InfiniteRecursion.ll | ||
2007-06-06-CriticalEdgeLandingPad.ll | ||
2007-11-21-UndeadIllegalNode.ll | ||
2007-12-17-InvokeAsm.ll | ||
2007-12-31-UnusedSelector.ll | ||
addc-fold2.ll | ||
asm-large-immediate.ll | ||
badarg6.ll | ||
badCallArgLRLLVM.ll | ||
badFoldGEP.ll | ||
badlive.ll | ||
BasicInstrs.llx | ||
bit-intrinsics.ll | ||
bool-to-double.ll | ||
BurgBadRegAlloc.ll | ||
call2-ret0.ll | ||
call-ret0.ll | ||
call-ret42.ll | ||
call-void.ll | ||
cast-fp.ll | ||
ConstantExprLowering.llx | ||
constindices.ll | ||
debug-info.ll | ||
dg.exp | ||
div-neg-power-2.ll | ||
fneg-fabs.ll | ||
fp_to_int.ll | ||
fpowi-promote.ll | ||
fwdtwice.ll | ||
global-ret0.ll | ||
hello.ll | ||
i128-addsub.ll | ||
i128-arith.ll | ||
intrinsics.ll | ||
invalid-memcpy.ll | ||
isunord.ll | ||
llvm-ct-intrinsics.ll | ||
Makefile | ||
negintconst.ll | ||
nested-select.ll | ||
phi-immediate-factoring.ll | ||
print-add.ll | ||
print-arith-fp.ll | ||
print-arith-int.ll | ||
print-int.ll | ||
print-mul-exp.ll | ||
print-mul.ll | ||
print-shift.ll | ||
ret0.ll | ||
ret42.ll | ||
sched.ll | ||
select.ll | ||
shift-int64.ll | ||
spillccr.ll | ||
stacksave-restore.ll | ||
switch-crit-edge-constant.ll | ||
switch-lower-feature-2.ll | ||
switch-lower-feature.ll | ||
switch-lower.ll | ||
SwitchLowering.ll | ||
vector-constantexpr.ll | ||
vector-identity-shuffle.ll | ||
vector.ll |