llvm-6502/test/CodeGen/Generic
Gordon Henriksen 8fa8929177 With this patch, the LowerGC transformation becomes the
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
2008-01-07 01:30:53 +00:00
..
GC With this patch, the LowerGC transformation becomes the 2008-01-07 01:30:53 +00:00
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 avoid ambiguity in target selection 2007-07-05 22:16:19 +00:00
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 -pre-RA-sched=none, simple, simple-noitin are gone. 2007-10-01 22:17:20 +00:00
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 For PR1319: 2007-04-16 17:36:08 +00:00
2006-11-20-DAGCombineCrash.ll
2006-12-16-InlineAsmCrash.ll update syntax 2007-04-28 06:03:12 +00:00
2007-01-15-LoadSelectCycle.ll For PR761: 2007-01-26 08:25:06 +00:00
2007-02-16-BranchFold.ll Test assumes tail merging is off; this must now be explicit. 2007-05-22 17:18:05 +00:00
2007-02-23-DAGCombine-Miscompile.ll Change the x86 assembly output to use tab characters to separate the 2007-07-31 20:11:57 +00:00
2007-02-25-invoke.ll Test for PR1224. 2007-02-25 21:43:21 +00:00
2007-04-08-MultipleFrameIndices.ll Don't use * in XFAIL line unless you want it to XFAIL on everything. I don't believe you can use true regular expressions here. It will just look for those keywords. Please test this on sparc and see if they still are xfailed. 2007-07-17 18:08:32 +00:00
2007-04-13-SwitchLowerBadPhi.ll Fix PR1323 : we haven't updated phi nodes in good manner :) 2007-04-13 06:53:51 +00:00
2007-04-14-BitTestsBadMask.ll Unxfail tests 2007-04-26 21:20:04 +00:00
2007-04-14-EHSelectorCrash.ll Workaround for PR1508. 2007-06-15 19:04:19 +00:00
2007-04-17-lsr-crash.ll new testcase 2007-04-17 23:43:31 +00:00
2007-04-27-BitTestsBadMask.ll Convert tests using "grep -c ... | grep ..." to use the count script. 2007-08-15 13:49:33 +00:00
2007-04-27-InlineAsm-X-Dest.ll Don't use * in XFAIL line unless you want it to XFAIL on everything. I don't believe you can use true regular expressions here. It will just look for those keywords. Please test this on sparc and see if they still are xfailed. 2007-07-17 18:08:32 +00:00
2007-04-27-LargeMemObject.ll Don't use * in XFAIL line unless you want it to XFAIL on everything. I don't believe you can use true regular expressions here. It will just look for those keywords. Please test this on sparc and see if they still are xfailed. 2007-07-17 18:08:32 +00:00
2007-04-30-LandingPadBranchFolding.ll testcase for PR1228 2007-04-30 23:34:46 +00:00
2007-05-03-EHTypeInfo.ll Split eh.select / eh.typeid.for intrinsics into i32/i64 versions. This is needed, because they just "mark" register 2007-09-07 11:39:35 +00:00
2007-05-05-Personality.ll Split eh.select / eh.typeid.for intrinsics into i32/i64 versions. This is needed, because they just "mark" register 2007-09-07 11:39:35 +00:00
2007-05-15-InfiniteRecursion.ll Fix an infinite recursion in GetNegatedExpression. 2007-05-15 17:05:43 +00:00
2007-06-06-CriticalEdgeLandingPad.ll Split eh.select / eh.typeid.for intrinsics into i32/i64 versions. This is needed, because they just "mark" register 2007-09-07 11:39:35 +00:00
2007-11-21-UndeadIllegalNode.ll Fix a bug in which node A is replaced by node B, but later 2007-11-21 16:43:19 +00:00
2007-12-17-InvokeAsm.ll Make invokes of inline asm legal. Teach codegen 2007-12-17 18:08:19 +00:00
2007-12-31-UnusedSelector.ll Fix PR1833 - eh.exception and eh.selector return two 2007-12-31 18:35:50 +00:00
addc-fold2.ll For PR1319: Upgrade to new test harness. 2007-04-15 20:48:50 +00:00
asm-large-immediate.ll Allow target constants to be illegal types. The target should 2007-08-25 01:00:22 +00:00
badarg6.ll
badCallArgLRLLVM.ll Remove the trailing semicolon from function declarations in LLVM, 2007-07-16 13:37:30 +00:00
badFoldGEP.ll
badlive.ll
BasicInstrs.llx
bit-intrinsics.ll This is the patch to provide clean intrinsic function overloading support in LLVM. It cleans up the intrinsic definitions and generally smooths the process for more complicated intrinsic writing. It will be used by the upcoming atomic intrinsics as well as vector and float intrinsics in the future. 2007-08-04 01:51:18 +00:00
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 Change all floating constants that are not exactly 2007-09-05 17:50:36 +00:00
debug-info.ll
dg.exp For PR1319: Upgrade to new test harness. 2007-04-15 20:48:50 +00:00
div-neg-power-2.ll
fneg-fabs.ll
fp_to_int.ll upgrade this test 2007-11-28 18:22:12 +00:00
fpowi-promote.ll For PR1319: 2007-04-16 17:36:08 +00:00
fwdtwice.ll Fix a typo in a comment. 2007-09-24 15:50:11 +00:00
global-ret0.ll
hello.ll
i128-addsub.ll add testcase for 128-bit add/sub 2007-05-17 18:22:37 +00:00
i128-arith.ll sanity check for *basic* i128 arithmetic on all hosts. 2007-02-13 23:59:21 +00:00
intrinsics.ll
invalid-memcpy.ll Fix a crash on invalid code due to memcpy lowering. 2007-11-27 22:14:42 +00:00
isunord.ll the sparc v8 backend handles this correctly 2007-05-05 22:12:57 +00:00
llvm-ct-intrinsics.ll Revert the name changes for llvm.bswap to allow (and test) llvm-upgrade of 2007-04-02 00:51:15 +00:00
Makefile
negintconst.ll
nested-select.ll Fix this test case. It is no longer permissible to have undefined types 2007-01-03 17:01:18 +00:00
phi-immediate-factoring.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
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 Change all floating constants that are not exactly 2007-09-05 17:50:36 +00:00
select.ll Change all floating constants that are not exactly 2007-09-05 17:50:36 +00:00
shift-int64.ll
spillccr.ll
stacksave-restore.ll
switch-crit-edge-constant.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
switch-lower-feature-2.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
switch-lower-feature.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
switch-lower.ll Remove use of implementation keyword. 2007-03-28 02:38:26 +00:00
SwitchLowering.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
vector-constantexpr.ll For PR1336: 2007-04-16 03:06:39 +00:00
vector-identity-shuffle.ll For PR1370: 2007-04-30 05:11:58 +00:00
vector.ll Change all floating constants that are not exactly 2007-09-05 17:50:36 +00:00