Revision tags: llvmorg-3.8.0, llvmorg-3.8.0-rc3 |
|
#
42bb2541 |
| 22-Feb-2016 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Re-enable the TailDuplicate pass.
llvm-svn: 261566
|
#
d85ab7fc |
| 18-Feb-2016 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Don't use setRequiresStructuredCFG(true).
While we still do want reducible control flow, the RequiresStructuredCFG flag imposes more strict structure constraints than WebAssembly wants
[WebAssembly] Don't use setRequiresStructuredCFG(true).
While we still do want reducible control flow, the RequiresStructuredCFG flag imposes more strict structure constraints than WebAssembly wants. Unsetting this flag enables critical edge splitting and tail merging.
Also, disable TailDuplication explicitly, as it doesn't support virtual registers, and was previously only disabled by the RequiresStructuredCFG flag.
llvm-svn: 261190
show more ...
|
#
71434ff6 |
| 17-Feb-2016 |
Derek Schuff <dschuff@google.com> |
[WebAssembly] Disable register stackification and coloring when not optimizing
These passes are optimizations, and should be disabled when not optimizing. Also create an MCCodeGenInfo so the opt lev
[WebAssembly] Disable register stackification and coloring when not optimizing
These passes are optimizations, and should be disabled when not optimizing. Also create an MCCodeGenInfo so the opt level is correctly plumbed to the backend pass manager. Also remove the command line flag for disabling register coloring; running llc with -O0 should now be useful for debugging, so it's not necessary.
Differential Revision: http://reviews.llvm.org/D17327
llvm-svn: 261176
show more ...
|
Revision tags: llvmorg-3.8.0-rc2 |
|
#
bb372243 |
| 26-Jan-2016 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Implement unaligned loads and stores.
Differential Revision: http://reviews.llvm.org/D16534
llvm-svn: 258779
|
Revision tags: llvmorg-3.8.0-rc1 |
|
#
b13c91f1 |
| 19-Jan-2016 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Disable some WebAssembly-specific optimization passes at -O0.
llvm-svn: 258127
|
#
0c6f5ac5 |
| 07-Jan-2016 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Add -m:e to the target triple.
This enables ELF-style name mangling, which primarily means using ".L" for private symbols.
llvm-svn: 257020
|
#
8887d1fa |
| 25-Dec-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Fix handling of COPY instructions in WebAssemblyRegStackify.
Move RegStackify after coalescing and teach it to use LiveIntervals instead of depending on SSA form. This avoids a problem
[WebAssembly] Fix handling of COPY instructions in WebAssemblyRegStackify.
Move RegStackify after coalescing and teach it to use LiveIntervals instead of depending on SSA form. This avoids a problem where a register in a COPY instruction is stackified and then subsequently coalesced with a register that is not stackified.
This also puts it after the scheduler, which allows us to simplify the EXPR_STACK constraint, as we no longer have instructions being reordered after stackification and before coloring.
llvm-svn: 256402
show more ...
|
#
5bf22fc8 |
| 17-Dec-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Convert WebAssemblyTargetObjectFile to TargetLoweringObjectFileELF
llvm-svn: 255877
|
#
05ac43fe |
| 17-Dec-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Experimental ELF writer support
This creates the initial infrastructure for writing ELF output files. It doesn't yet have any implementation for encoding instructions.
Differential Re
[WebAssembly] Experimental ELF writer support
This creates the initial infrastructure for writing ELF output files. It doesn't yet have any implementation for encoding instructions.
Differential Revision: http://reviews.llvm.org/D15555
llvm-svn: 255869
show more ...
|
#
8bb5f292 |
| 16-Dec-2015 |
Derek Schuff <dschuff@google.com> |
[WebAssembly] Implement eliminateCallFramePseudo
Summary: Implement eliminateCallFramePsuedo to handle ADJCALLSTACKUP/DOWN pseudo-instructions. Add a test calling a vararg function which causes non-
[WebAssembly] Implement eliminateCallFramePseudo
Summary: Implement eliminateCallFramePsuedo to handle ADJCALLSTACKUP/DOWN pseudo-instructions. Add a test calling a vararg function which causes non-0 adjustments. This revealed an issue with RegisterCoalescer wherein it eliminates a COPY from SP32 to a vreg but failes to update the live ranges of EXPR_STACK, causing a machineinstr verifier failure (so this test is commented out).
Also add a dynamic alloca test, which causes a callseq_end dag node with a 0 (instead of undef) second argument to be generated. We currently fail to select that, so adjust the ADJCALLSTACKUP tablegen code to handle it.
Differential Revision: http://reviews.llvm.org/D15587
llvm-svn: 255844
show more ...
|
#
9769debf |
| 11-Dec-2015 |
Derek Schuff <dschuff@google.com> |
[WebAssembly] Implement prolog/epilog insertion and FrameIndex elimination
Summary: Use the SP32 physical register as the base for FrameIndex lowering. Update it and the __stack_pointer global var
[WebAssembly] Implement prolog/epilog insertion and FrameIndex elimination
Summary: Use the SP32 physical register as the base for FrameIndex lowering. Update it and the __stack_pointer global var in the prolog and epilog. Extend the mapping of virtual registers to wasm locals to include the physical registers.
Rather than modify the target-independent PrologEpilogInserter (which asserts that there are no virtual registers left) include a slightly-modified copy for Wasm that does not have this assertion and only clears the virtual registers if scavenging was needed (which of course it isn't for wasm).
Differential Revision: http://reviews.llvm.org/D15344
llvm-svn: 255392
show more ...
|
#
1cf96c0c |
| 09-Dec-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Reintroduce ARGUMENT moving logic
Reinteroduce the code for moving ARGUMENTS back to the top of the basic block. While the ARGUMENTS physical register prevents sinking and scheduling f
[WebAssembly] Reintroduce ARGUMENT moving logic
Reinteroduce the code for moving ARGUMENTS back to the top of the basic block. While the ARGUMENTS physical register prevents sinking and scheduling from moving them, it does not appear to be sufficient to prevent SelectionDAG from moving them down in the initial schedule. This patch introduces a patch that moves them back to the top immediately after SelectionDAG runs.
This is still hopefully a temporary solution. http://reviews.llvm.org/D14750 is one alternative, though the review has not been favorable, and proposed alternatives are longer-term and have other downsides.
This fixes the main outstanding -verify-machineinstrs failures, so it adds -verify-machineinstrs to several tests.
Differential Revision: http://reviews.llvm.org/D15377
llvm-svn: 255125
show more ...
|
#
b0921ca9 |
| 05-Dec-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Call TargetPassConfig base class functions in overriding functions.
llvm-svn: 254855
|
#
f0b165a7 |
| 05-Dec-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Implement ReverseBranchCondition, and re-enable MachineBlockPlacement
This patch introduces a codegen-only instruction currently named br_unless, which makes it convenient to implement
[WebAssembly] Implement ReverseBranchCondition, and re-enable MachineBlockPlacement
This patch introduces a codegen-only instruction currently named br_unless, which makes it convenient to implement ReverseBranchCondition and re-enable the MachineBlockPlacement pass. Then in a late pass, it lowers br_unless back into br_if.
Differential Revision: http://reviews.llvm.org/D14995
llvm-svn: 254826
show more ...
|
Revision tags: llvmorg-3.7.1 |
|
#
5237b399 |
| 29-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Delete unused functions. NFC.
llvm-svn: 254268
|
#
7a6b9825 |
| 29-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Minor clang-format and selected clang-tidy cleanups. NFC.
llvm-svn: 254267
|
#
5941bde0 |
| 25-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Add some comments. NFC.
llvm-svn: 254096
|
#
9c54d3b4 |
| 25-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Clean up several FIXME comments.
llvm-svn: 254079
|
#
81719f85 |
| 25-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Support for register stackifying with load and store instructions.
llvm-svn: 254076
|
#
53828fd7 |
| 23-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Emit .param, .result, and .local through MC.
This eliminates one of the main remaining uses of EmitRawText.
llvm-svn: 253878
|
Revision tags: llvmorg-3.7.1-rc2 |
|
#
4ba4816b |
| 18-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[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
[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.
llvm-svn: 253465
show more ...
|
Revision tags: llvmorg-3.7.1-rc1 |
|
#
cf4748f1 |
| 12-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Reapply r252858, with svn add for the new file.
Switch to MC for instruction printing.
This encompasses several changes which are all interconnected: - Use the MC framework for print
[WebAssembly] Reapply r252858, with svn add for the new file.
Switch to MC for instruction printing.
This encompasses several changes which are all interconnected: - Use the MC framework for printing almost all instructions. - AsmStrings are now live. - This introduces an indirection between LLVM vregs and WebAssembly registers, and a new pass, WebAssemblyRegNumbering, for computing a basic the mapping. This addresses some basic issues with argument registers and unused registers. - The way ARGUMENT instructions are handled no longer generates redundant get_local+set_local for every argument.
This also changes the assembly syntax somewhat; most notably, MC's printing does not use sigils on label names, so those are no longer present, and push/pop now have a sigil to keep them unambiguous.
The usage of set_local/get_local/$push/$pop will continue to evolve significantly. This patch is just one step of a larger change.
llvm-svn: 252910
show more ...
|
#
7384a2de |
| 12-Nov-2015 |
Hans Wennborg <hans@hanshq.net> |
Revert r252858: "[WebAssembly] Switch to MC for instruction printing."
It broke the CMake build:
"Cannot find source file: WebAssemblyRegNumbering.cpp"
llvm-svn: 252897
|
#
9dd55a80 |
| 12-Nov-2015 |
Dan Gohman <dan433584@gmail.com> |
[WebAssembly] Switch to MC for instruction printing.
This encompasses several changes which are all interconnected: - Use the MC framework for printing almost all instructions. - AsmStrings are no
[WebAssembly] Switch to MC for instruction printing.
This encompasses several changes which are all interconnected: - Use the MC framework for printing almost all instructions. - AsmStrings are now live. - This introduces an indirection between LLVM vregs and WebAssembly registers, and a new pass, WebAssemblyRegNumbering, for computing a basic the mapping. This addresses some basic issues with argument registers and unused registers. - The way ARGUMENT instructions are handled no longer generates redundant get_local+set_local for every argument.
This also changes the assembly syntax somewhat; most notably, MC's printing use sigils on label names, so those are no longer present, and push/pop now have a sigil to keep them unambiguous.
The usage of set_local/get_local/$push/$pop will continue to evolve significantly. This patch is just one step of a larger change.
llvm-svn: 252858
show more ...
|
#
ffa143ce |
| 10-Nov-2015 |
Derek Schuff <dschuff@google.com> |
[WebAssembly] Support 'unreachable' expression
Lower LLVM's 'unreachable' terminator to ISD::TRAP, and lower ISD::TRAP to wasm's 'unreachable' expression.
WebAssembly type-checks expressions, but a
[WebAssembly] Support 'unreachable' expression
Lower LLVM's 'unreachable' terminator to ISD::TRAP, and lower ISD::TRAP to wasm's 'unreachable' expression.
WebAssembly type-checks expressions, but a noreturn function with a return type that doesn't match the context will cause a check failure. So we lower LLVM 'unreachable' to ISD::TRAP and then lower that to WebAssembly's 'unreachable' expression, which typechecks in any context and causes a trap if executed.
Differential Revision: http://reviews.llvm.org/D14515
llvm-svn: 252566
show more ...
|