60 Commits

Author SHA1 Message Date
Dan Gohman
ca526959c1 [WebAssembly] Fix scheduling dependencies in register-stackified code
Add physical register defs to instructions used from stackified
instructions to prevent them from being scheduled into the middle of
a stack sequence. This is a conservative measure which may be loosened
in the future.

Differential Revision: http://reviews.llvm.org/D15252


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254811 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-05 00:51:40 +00:00
Dan Gohman
16d4cc83c3 [WebAssembly] Initial varargs support.
Full varargs support will depend on prologue/epilogue support, but this patch
gets us started with most of the basic infrastructure.

Differential Revision: http://reviews.llvm.org/D15231


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254799 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-04 23:22:35 +00:00
Dan Gohman
e94b2105e9 [WebAssembly] Fix dominance check for PHIs in the StoreResult pass
When a block has no terminator instructions, getFirstTerminator() returns
end(), which can't be used in dominance checks. Check dominance for phi
operands separately.

Also, remove some bits from WebAssemblyRegStackify.cpp that were causing
trouble on the same testcase; they were left behind from an earlier
experiment.

Differential Revision: http://reviews.llvm.org/D15210


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254662 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-03 23:07:03 +00:00
Dan Gohman
454061bf3a [WebAssembly] Fix comments to say "LIFO" instead of "FIFO" when describing a stack.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254523 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-02 18:08:49 +00:00
Dan Gohman
85d0f9ca6d [WebAssembly] Minor clang-format and selected clang-tidy cleanups. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254267 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-29 22:32:02 +00:00
Dan Gohman
dcdd1c138c [WebAssembly] Support for register stackifying with load and store instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254076 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-25 16:55:01 +00:00
Dan Gohman
74a34413f8 [WebAssembly] Add asserts that the expression stack is used in stack order.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253638 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-20 02:33:24 +00:00
Dan Gohman
8300bfce73 [WebAssemby] Enforce FIFO ordering for instructions using stackified registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253634 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-20 02:19:12 +00:00
Dan Gohman
94401ce9c8 [WebAssembly] Enable register coloring and register stackifying.
This also takes the push/pop syntax another step forward, introducing stack
slot numbers to make it easier to see how expressions are connected. For
example, the value pushed in $push7 is popped in $pop7.

And, this begins an experiment with making get_local and set_local implicit
when an operation directly uses or defines a register. This greatly reduces
clutter. If this experiment succeeds, it may make sense to do this for
const instructions as well.

And, this introduces more special code for ARGUMENTS; hopefully this code
will soon be obviated by proper support for live-in virtual registers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253465 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-18 16:12:01 +00:00
Dan Gohman
e5484b4329 [WebAssembly] Prototype passes for register coloring and register stackifying.
These passes are not yet enabled by default.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253217 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-16 16:18:28 +00:00