History log of /llvm-project-15.0.7/llvm/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp (Results 76 – 100 of 103)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-4.0.1-rc2, llvmorg-4.0.1-rc1, llvmorg-4.0.0, llvmorg-4.0.0-rc4, llvmorg-4.0.0-rc3
# f52ee17a 27-Feb-2017 Dan Gohman <[email protected]>

[WebAssembly] Split CFG-sorting into its own pass. NFC.

CFG sorting was already an independent algorithm from block/loop insertion;
this change makes it more convenient to debug.

llvm-svn: 296399


# d934cb88 24-Feb-2017 Dan Gohman <[email protected]>

[WebAssembly] Basic support for Wasm object file encoding.

With the "wasm32-unknown-unknown-wasm" triple, this allows writing out
simple wasm object files, and is another step in a larger series tow

[WebAssembly] Basic support for Wasm object file encoding.

With the "wasm32-unknown-unknown-wasm" triple, this allows writing out
simple wasm object files, and is another step in a larger series toward
migrating from ELF to general wasm object support. Note that this code
and the binary format itself is still experimental.

llvm-svn: 296190

show more ...


Revision tags: llvmorg-4.0.0-rc2, llvmorg-4.0.0-rc1, llvmorg-3.9.1, llvmorg-3.9.1-rc3, llvmorg-3.9.1-rc2, llvmorg-3.9.1-rc1
# 3acb187d 24-Oct-2016 Dan Gohman <[email protected]>

[WebAssembly] Implement more WebAssembly binary encoding.

This changes locals from being declared by the emitLocal hook in
WebAssemblyTargetStreamer, rather than with an instruction. After exploring

[WebAssembly] Implement more WebAssembly binary encoding.

This changes locals from being declared by the emitLocal hook in
WebAssemblyTargetStreamer, rather than with an instruction. After exploring
the infastructure in LLVM more, this seems to make more sense since
declaring locals doesn't use an encoded opcode.

This also adds more 0xd opcodes, type encodings, and miscellaneous
binary encoding bits.

llvm-svn: 285040

show more ...


# 4fc4e42d 24-Oct-2016 Dan Gohman <[email protected]>

[WebAssembly] Add an option to make get_local/set_local explicit.

This patch adds a pass, controlled by an option and off by default for
now, for making implicit get_local/set_local explicit. This s

[WebAssembly] Add an option to make get_local/set_local explicit.

This patch adds a pass, controlled by an option and off by default for
now, for making implicit get_local/set_local explicit. This simplifies
emitting wasm with MC.

Differential Revision: https://reviews.llvm.org/D25836

llvm-svn: 285009

show more ...


# 2726b88c 06-Oct-2016 Dan Gohman <[email protected]>

[WebAssemby] Implement block signatures.

Per spec changes, this implements block signatures, and adds just enough
logic to produce correct block signatures at the ends of functions.

Differential Re

[WebAssemby] Implement block signatures.

Per spec changes, this implements block signatures, and adds just enough
logic to produce correct block signatures at the ends of functions.

Differential Revision: https://reviews.llvm.org/D25144

llvm-svn: 283503

show more ...


# 3a643e8d 06-Oct-2016 Dan Gohman <[email protected]>

[WebAssembly] Remove loop's bottom label.

Per spec changes, loop constructs no longer have a bottom label.

https://reviews.llvm.org/D25118

llvm-svn: 283502


# e040533e 03-Oct-2016 Dan Gohman <[email protected]>

[WebAssembly] Update to more stack-machine-oriented terminology.

WebAssembly has officially switched from being an AST to being a stack
machine. Update various bits of terminology and README.md entr

[WebAssembly] Update to more stack-machine-oriented terminology.

WebAssembly has officially switched from being an AST to being a stack
machine. Update various bits of terminology and README.md entries
accordingly.

llvm-svn: 283154

show more ...


# 117296c0 01-Oct-2016 Mehdi Amini <[email protected]>

Use StringRef in Pass/PassManager APIs (NFC)

llvm-svn: 283004


# ef0a45aa 05-Sep-2016 Benjamin Kramer <[email protected]>

[WebAssembly] Unbreak the build.

Not sure why ADL isn't working here.

llvm-svn: 280656


Revision tags: llvmorg-3.9.0, llvmorg-3.9.0-rc3, llvmorg-3.9.0-rc2, llvmorg-3.9.0-rc1
# 500d0469 08-Jul-2016 Duncan P. N. Exon Smith <[email protected]>

WebAssembly: Avoid implicit iterator conversions, NFC

Avoid implicit conversions from MachineInstrBundleIterator to
MachineInstr* in the WebAssembly backend by preferring MachineInstr&
over MachineI

WebAssembly: Avoid implicit iterator conversions, NFC

Avoid implicit conversions from MachineInstrBundleIterator to
MachineInstr* in the WebAssembly backend by preferring MachineInstr&
over MachineInstr*.

llvm-svn: 274912

show more ...


Revision tags: llvmorg-3.8.1, llvmorg-3.8.1-rc1
# d7a2eea6 09-Mar-2016 Dan Gohman <[email protected]>

[WebAssembly] Implement irreducible control flow.

This implements a very simple conservative transformation that doesn't
require more than linear code size growth. There's room for much more
optimiz

[WebAssembly] Implement irreducible control flow.

This implements a very simple conservative transformation that doesn't
require more than linear code size growth. There's room for much more
optimization in this space.

llvm-svn: 262982

show more ...


Revision tags: llvmorg-3.8.0, llvmorg-3.8.0-rc3
# 442bfcec 16-Feb-2016 Dan Gohman <[email protected]>

[WebAssembly] Switch from RPO sorting to topological sorting.

WebAssembly doesn't require full RPO; topological sorting is sufficient and
can preserve more of the MachineBlockPlacement ordering. Unf

[WebAssembly] Switch from RPO sorting to topological sorting.

WebAssembly doesn't require full RPO; topological sorting is sufficient and
can preserve more of the MachineBlockPlacement ordering. Unfortunately, this
still depends a lot on heuristics, because while we use the
MachineBlockPlacement ordering as a guide, we can't use it in places where
it isn't topologically ordered. This area will require further attention.

llvm-svn: 260978

show more ...


# a187ab2a 12-Feb-2016 Dan Gohman <[email protected]>

[WebAssembly] Fix insertion of a BLOCK in a loop header that also ends a BLOCK.

llvm-svn: 260737


Revision tags: llvmorg-3.8.0-rc2
# ed0f1138 30-Jan-2016 Dan Gohman <[email protected]>

[WebAssembly] Refine block placement to insert blocks between trees.

Refine the test for whether an instruction is in an expression tree so that
it detects when one tree ends and another begins, so

[WebAssembly] Refine block placement to insert blocks between trees.

Refine the test for whether an instruction is in an expression tree so that
it detects when one tree ends and another begins, so we can place a block
at that point, rather than continuing to find the first instruction not in
a tree at all.

llvm-svn: 259294

show more ...


Revision tags: llvmorg-3.8.0-rc1
# 9c3bf318 13-Jan-2016 Derek Schuff <[email protected]>

[WebAssemly] Invalidate liveness in CFG stackifier

WebAssemblyCFGStackify does not track liveness for EXPR_STACK, causing
verifier failure if liveness has not already been invalidated.

llvm-svn: 25

[WebAssemly] Invalidate liveness in CFG stackifier

WebAssemblyCFGStackify does not track liveness for EXPR_STACK, causing
verifier failure if liveness has not already been invalidated.

llvm-svn: 257620

show more ...


# 1d68e80f 12-Jan-2016 Dan Gohman <[email protected]>

[WebAssembly] Make CFG stackification independent of basic-block labels.

This patch changes the way labels are referenced. Instead of referencing the
basic-block label name (eg. .LBB0_0), instructio

[WebAssembly] Make CFG stackification independent of basic-block labels.

This patch changes the way labels are referenced. Instead of referencing the
basic-block label name (eg. .LBB0_0), instructions now just have an immediate
which indicates the depth in the control-flow stack to find a label to jump to.
This makes them much closer to what we expect to have in the binary encoding,
and avoids the problem of basic-block label names not being explicit in the
binary encoding.

Also, it terminates blocks and loops with end_block and end_loop instructions,
rather than basic-block label names, for similar reasons.

This will also fix problems where two constructs appear to have the same label,
because we no longer explicitly use labels, so consumers that need labels will
presumably create their own labels, and presumably they won't reuse labels
when they do.

This patch does make the code a little more awkward to read; as a partial
mitigation, this patch also introduces comments showing where the labels are,
and comments on each branch showing where it's branching to.

llvm-svn: 257505

show more ...


# 35e4a289 08-Jan-2016 Dan Gohman <[email protected]>

[WebAssembly] Minor code cleanups. NFC.

llvm-svn: 257128


# 8887d1fa 25-Dec-2015 Dan Gohman <[email protected]>

[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 ...


# b3aa1eca 16-Dec-2015 Dan Gohman <[email protected]>

[WebAssembly] Fix the CFG Stackifier to handle unoptimized branches

If a branch both branches to and falls through to the same block, treat it as
an explicit branch.

llvm-svn: 255803


# 8fe7e86b 14-Dec-2015 Dan Gohman <[email protected]>

[WebAssembly] Implement a new algorithm for placing BLOCK markers

Implement a new BLOCK scope placement algorithm which better handles
early-return blocks and early exists from nested scopes.

Diffe

[WebAssembly] Implement a new algorithm for placing BLOCK markers

Implement a new BLOCK scope placement algorithm which better handles
early-return blocks and early exists from nested scopes.

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

llvm-svn: 255564

show more ...


# 53d13997 02-Dec-2015 Dan Gohman <[email protected]>

[WebAssembly] Fix comments to say "LIFO" instead of "FIFO" when describing a stack.

llvm-svn: 254523


Revision tags: llvmorg-3.7.1
# 96029f78 30-Nov-2015 Dan Gohman <[email protected]>

[WebAssembly] Fix a few minor compiler warnings. NFC.

llvm-svn: 254311


# 7a6b9825 29-Nov-2015 Dan Gohman <[email protected]>

[WebAssembly] Minor clang-format and selected clang-tidy cleanups. NFC.

llvm-svn: 254267


# f6857223 23-Nov-2015 Dan Gohman <[email protected]>

[WebAssembly] Always print loop end labels

WebAssembly is currently using labels to end scopes, so for example a
loop scope looks like this:

BB0_0:
loop BB0_1
...
BB0_1:

with BB0_0 being the l

[WebAssembly] Always print loop end labels

WebAssembly is currently using labels to end scopes, so for example a
loop scope looks like this:

BB0_0:
loop BB0_1
...
BB0_1:

with BB0_0 being the label of the first block not in the loop. This
requires that the label be printed even when it's only reachable via
fallthrough. To arrange this, insert a no-op LOOP_END instruction in
such cases at the end of the loop.

llvm-svn: 253901

show more ...


# 32807932 23-Nov-2015 Dan Gohman <[email protected]>

[WebAssembly] Use dominator information to improve BLOCK placement

Always starting blocks at the top of their containing loops works, but creates
unnecessarily deep nesting because it makes all bloc

[WebAssembly] Use dominator information to improve BLOCK placement

Always starting blocks at the top of their containing loops works, but creates
unnecessarily deep nesting because it makes all blocks in a loop overlap.
Refine the BLOCK placement algorithm to start blocks at nearest common
dominating points instead, which significantly shrinks them and reduces
overlapping.

llvm-svn: 253876

show more ...


12345