<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emscripten-fastcomp/test/NaCl/Localmods, branch master</title>
<subtitle>LLVM with the emscripten fastcomp javascript backend</subtitle>
<id>https://git.amat.us/emscripten-fastcomp/atom/test/NaCl/Localmods?h=master</id>
<link rel='self' href='https://git.amat.us/emscripten-fastcomp/atom/test/NaCl/Localmods?h=master'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/emscripten-fastcomp/'/>
<updated>2013-08-30T23:42:36Z</updated>
<entry>
<title>Revert some ARM byval localmods since byval+varargs are not in stable pexes.</title>
<updated>2013-08-30T23:42:36Z</updated>
<author>
<name>Jan Voung</name>
<email>jvoung@chromium.org</email>
</author>
<published>2013-08-30T23:42:36Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/emscripten-fastcomp/commit/?id=121830a16cdb2685b1ac49bb88407644c044ef30'/>
<id>urn:sha1:121830a16cdb2685b1ac49bb88407644c044ef30</id>
<content type='text'>
Localmods came from: https://codereview.chromium.org/10825082/, and earlier.

(1) The original change was so that byval parameters always
go on the stack. That part was added because the original
ARM code was buggy, and did not actually make a copy of the
value, modifying the caller's struct (ouch!).

(2) Then came a localmod to make all arguments following a
byval go on the stack and to make the var-args code aware of
that.  This is so that arguments stay in the correct order
for var-args to pick up.

For (1) there has been some work upstream to make it work
better.  In any case, clang with --target=armv7a-...-gnueabi
only used byval in some limited cases -- when the size of
the  struct is &gt; 64 bytes where the backend will know
that part of it could be in regs, and the rest can be
memcpy'ed to the stack.

For le32, clang will still generate byval without
satisfying the same ARM condition (only for structs
bigger than 64 bytes), so it could be *very bad* if
we didn't have the ABI simpification passes rewrite
the byval and try to let the ARM backend do things
with byval...

TEST=the GCC torture tests: va-arg-4.c, and 20030914-2.c
and the example in issue 2746 still pass.

BUG=none, cleanup
R=dschuff@chromium.org

Review URL: https://codereview.chromium.org/23691009
</content>
</entry>
<entry>
<title>Port new tests from origin/master</title>
<updated>2013-07-18T14:57:42Z</updated>
<author>
<name>Eli Bendersky</name>
<email>eliben@chromium.org</email>
</author>
<published>2013-07-18T14:57:42Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/emscripten-fastcomp/commit/?id=0592f0ef8bbc825243cb1860b09468a7605f8716'/>
<id>urn:sha1:0592f0ef8bbc825243cb1860b09468a7605f8716</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Make GlobalOpt's GV-by-alloca replacement work for PNaCl.</title>
<updated>2013-07-09T22:29:37Z</updated>
<author>
<name>Eli Bendersky</name>
<email>eliben@chromium.org</email>
</author>
<published>2013-07-09T22:29:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/emscripten-fastcomp/commit/?id=299c82a21a9fd010534ea59c46ae0b88c21f25b7'/>
<id>urn:sha1:299c82a21a9fd010534ea59c46ae0b88c21f25b7</id>
<content type='text'>
GlobalOpt currently assumes only an external "main" is the "real main".
This is no longer the case for PNaCl, where we internalize "main". Make
the test more strict and PNaCl specific by checking that "main" is just
used once - in a call from "_start", but does not have to be external.

Note that this also addresses a possible bug in the optimization for C
code, since C does not guarantee that main is not recursive.

This CL's purpose is to address a SPEC performance regression - 10% in
183.equake. The regression appeared after our ABI change that made 'main'
internal, which disabled this particular optimization. The CL addresses
this by re-enabling the optimization and also being more C-standard
conforming.

BUG=None

Review URL: https://codereview.chromium.org/18615015
</content>
</entry>
</feed>
