aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen/LinkAllCodegenComponents.h
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2008-01-07 01:30:53 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2008-01-07 01:30:53 +0000
commit8fa89291774a29ee30adb9d0fd01655c84eaac13 (patch)
tree16961ddedb70b284c1bab1039cd8350248bc5d3f /include/llvm/CodeGen/LinkAllCodegenComponents.h
parentce2247755e56f99a2377b64a1a9d393726582b85 (diff)
downloadexternal_llvm-8fa89291774a29ee30adb9d0fd01655c84eaac13.zip
external_llvm-8fa89291774a29ee30adb9d0fd01655c84eaac13.tar.gz
external_llvm-8fa89291774a29ee30adb9d0fd01655c84eaac13.tar.bz2
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
Diffstat (limited to 'include/llvm/CodeGen/LinkAllCodegenComponents.h')
-rw-r--r--include/llvm/CodeGen/LinkAllCodegenComponents.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/LinkAllCodegenComponents.h b/include/llvm/CodeGen/LinkAllCodegenComponents.h
index 05d97cf..48be541 100644
--- a/include/llvm/CodeGen/LinkAllCodegenComponents.h
+++ b/include/llvm/CodeGen/LinkAllCodegenComponents.h
@@ -17,6 +17,7 @@
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/ScheduleDAG.h"
+#include "llvm/CodeGen/Collectors.h"
namespace {
struct ForceCodegenLinking {
@@ -35,6 +36,8 @@ namespace {
(void) llvm::createSimpleRegisterCoalescer();
+ (void) llvm::createShadowStackCollector();
+
(void) llvm::createBURRListDAGScheduler(NULL, NULL, NULL);
(void) llvm::createTDRRListDAGScheduler(NULL, NULL, NULL);
(void) llvm::createTDListDAGScheduler(NULL, NULL, NULL);