<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm/test/CodeGen/Generic/GC, branch release_23</title>
<subtitle>http://llvm.org</subtitle>
<id>https://git.amat.us/llvm/atom/test/CodeGen/Generic/GC?h=release_23</id>
<link rel='self' href='https://git.amat.us/llvm/atom/test/CodeGen/Generic/GC?h=release_23'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/'/>
<updated>2008-01-07T02:31:11Z</updated>
<entry>
<title>Setting GlobalDirective in TargetAsmInfo by default rather than</title>
<updated>2008-01-07T02:31:11Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2008-01-07T02:31:11Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=572742e876478d3ec7ff0750c0473d7621804b15'/>
<id>urn:sha1:572742e876478d3ec7ff0750c0473d7621804b15</id>
<content type='text'>
providing a misleading facility. It's used once in the MIPS backend
and hardcoded as "\t.globl\t" everywhere else.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45676 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>With this patch, the LowerGC transformation becomes the</title>
<updated>2008-01-07T01:30:53Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2008-01-07T01:30:53Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=8fa89291774a29ee30adb9d0fd01655c84eaac13'/>
<id>urn:sha1:8fa89291774a29ee30adb9d0fd01655c84eaac13</id>
<content type='text'>
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
</content>
</entry>
<entry>
<title>Tests for changes made in r45356, where IPO optimizations would drop</title>
<updated>2007-12-26T02:47:37Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-12-26T02:47:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=e86ce7d94abaf7883a5d84dcb9a79c118b63672b'/>
<id>urn:sha1:e86ce7d94abaf7883a5d84dcb9a79c118b63672b</id>
<content type='text'>
collector algorithms.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45357 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>GC poses hazards to the inliner. Consider:</title>
<updated>2007-12-25T03:10:07Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-12-25T03:10:07Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=0e13821c96937830ec817f08095c3cef1fdcac8d'/>
<id>urn:sha1:0e13821c96937830ec817f08095c3cef1fdcac8d</id>
<content type='text'>
    define void @f() {
            ...
            call i32 @g()
            ...
    }

    define void @g() {
            ...
    }

The hazards are:

  - @f and @g have GC, but they differ GC. Inlining is invalid. This
    may never occur.
  - @f has no GC, but @g does. g's GC must be propagated to @f.

The other scenarios are safe:

  - @f and @g have the same GC.
  - @f and @g have no GC.
  - @g has no GC.

This patch adds inliner checks for the former two scenarios.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45351 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Noting and enforcing that GC intrinsics are valid only within a</title>
<updated>2007-12-25T02:31:26Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-12-25T02:31:26Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=e1433f24cf714c49b266e8cefdbbb8a464ffcb8e'/>
<id>urn:sha1:e1433f24cf714c49b266e8cefdbbb8a464ffcb8e</id>
<content type='text'>
function with GC.

This will catch the error when the inliner inlines a function with
GC into a caller with no GC.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45350 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Adjusting verification of "llvm.gc*" intrinsic prototypes to match</title>
<updated>2007-12-25T02:02:10Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-12-25T02:02:10Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=27acd3a999ec3790e6af1d6416295caab5033320'/>
<id>urn:sha1:27acd3a999ec3790e6af1d6416295caab5033320</id>
<content type='text'>
LangRef.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45349 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Adding a collector name attribute to Function in the IR. These </title>
<updated>2007-12-10T03:18:06Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-12-10T03:18:06Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=80a75bfae980df96f969f1c05b0c4a80ce975240'/>
<id>urn:sha1:80a75bfae980df96f969f1c05b0c4a80ce975240</id>
<content type='text'>
methods are new to Function:

  bool hasCollector() const;
  const std::string &amp;getCollector() const;
  void setCollector(const std::string &amp;);
  void clearCollector();

The assembly representation is as such:

  define void @f() gc "shadow-stack" { ...

The implementation uses an on-the-side table to map Functions to 
collector names, such that there is no overhead. A StringPool is 
further used to unique collector names, which are extremely
likely to be unique per process.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44769 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Upgrading this test to 2.0 .ll syntax.</title>
<updated>2007-12-09T15:03:01Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-12-09T15:03:01Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=38200692fa2ab19d052191c8c04d71d29a36a5b3'/>
<id>urn:sha1:38200692fa2ab19d052191c8c04d71d29a36a5b3</id>
<content type='text'>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44738 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Fix for PR1633: Verifier doesn't fully verify GC intrinsics</title>
<updated>2007-09-17T20:30:04Z</updated>
<author>
<name>Gordon Henriksen</name>
<email>gordonhenriksen@mac.com</email>
</author>
<published>2007-09-17T20:30:04Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=8c33da5dc4144d6df474dcea986ca05932e2fe10'/>
<id>urn:sha1:8c33da5dc4144d6df474dcea986ca05932e2fe10</id>
<content type='text'>
LLVM now enforces the following prototypes for the write barriers:

&lt;ty&gt;* @llvm.gcread(&lt;ty2&gt;*, &lt;ty&gt;**)
void @llvm.gcwrite(&lt;ty&gt;*, &lt;ty2&gt;*, &lt;ty&gt;**)

And for @llvm.gcroot, the first stack slot is verified to be an alloca or a 
bitcast of an alloca.

Fixes test/CodeGen/Generic/GC/lower_gcroot.ll, which violated these.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42051 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Fix a gcroot lowering bug.</title>
<updated>2007-09-01T02:00:51Z</updated>
<author>
<name>Evan Cheng</name>
<email>evan.cheng@apple.com</email>
</author>
<published>2007-09-01T02:00:51Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=4e9c473c4d9e0e93da67d6a0e20227e5a1e16543'/>
<id>urn:sha1:4e9c473c4d9e0e93da67d6a0e20227e5a1e16543</id>
<content type='text'>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41668 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
</feed>
