| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
This should now be easier to read.
llvm-svn: 259349
|
| |
|
|
| |
llvm-svn: 259321
|
| |
|
|
|
|
| |
r259305 fixed a few assertions around FrameIndex, and I forgot to update these failures despite having run the torture tests.
llvm-svn: 259320
|
| |
|
|
|
|
|
|
| |
Previously the code assumed all uses of FI on loads and stores were as
addresses. This checks whether the use is the address or a value and
handles the latter case as it does for non-memory instructions.
llvm-svn: 259306
|
| |
|
|
|
|
|
|
| |
The previous code was incorrect (can't getReg a frameindex). We could instead optimize it to reduce tree height, but I'm not sure that's worthwhile yet because we then try to eliminate the frameindex.
This patch also fixes frame index elimination for operations which may load or store: it used to assume the base was operand 2 and immediate offset operand 1. That's not true for stores, where they're 4 and 3.
llvm-svn: 259305
|
| |
|
|
|
|
| |
WebAssemblyFrameLowering.cpp:158:44: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
llvm-svn: 259303
|
| |
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 259223
|
| |
|
|
|
|
|
|
|
| |
Add support for frame pointer use in prolog/epilog.
Supports dynamic allocas but not yet over-aligned locals.
Target-independend CG generates SP updates, but we still need to write
back the SP value to memory when necessary.
llvm-svn: 259220
|
| |
|
|
| |
llvm-svn: 259045
|
| |
|
|
| |
llvm-svn: 259040
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Re-commit of r258951 after fixing layering violation.
The related LLVM patch adds a backend diagnostic type for reporting
unsupported features, this adds a printer for them to clang.
In the case where debug location information is not available, I've
changed the printer to report the location as the first line of the
function, rather than the closing brace, as the latter does not give the
user any information. This also affects optimisation remarks.
Differential Revision: http://reviews.llvm.org/D16590
llvm-svn: 259035
|
| |
|
|
|
|
| |
r259016 didn't also revert r258957 which broken the WebAssembly build.
llvm-svn: 259020
|
| |
|
|
|
|
|
|
|
|
|
| |
features"
It broke layering violation in LLVMIR.
clang r258950 "Add backend dignostic printer for unsupported features"
llvm r258951 "Refactor backend diagnostics for unsupported features"
llvm-svn: 259016
|
| |
|
|
|
|
| |
tree.
llvm-svn: 259013
|
| |
|
|
|
|
|
|
|
|
|
| |
This patch revamps the RegStackifier pass with a new tree traversal mechanism,
enabling three major new features:
- Stackification of values with multiple uses, using the result value of set_local
- More aggressive stackification of instructions with side effects
- Reordering operands in commutative instructions to enable more stackification.
llvm-svn: 259009
|
| |
|
|
|
|
|
|
|
|
| |
Summary:
Just does the simple allocation of a stack object and passes
a pointer to the callee.
Differential Revision: http://reviews.llvm.org/D16610
llvm-svn: 258989
|
| |
|
|
| |
llvm-svn: 258957
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The BPF and WebAssembly backends had identical code for emitting errors
for unsupported features, and AMDGPU had very similar code. This merges
them all into one DiagnosticInfo subclass, that can be used by any
backend.
There should be minimal functional changes here, but some AMDGPU tests
have been updated for the new format of errors (it used a slightly
different format to BPF and WebAssembly). The AMDGPU error messages will
now benefit from having precise source locations when debug info is
available.
The implementation of DiagnosticInfoUnsupported::print must be in
lib/Codegen rather than in the existing file in lib/IR/ to avoid
introducing a dependency from IR to CodeGen.
Differential Revision: http://reviews.llvm.org/D16590
llvm-svn: 258951
|
| |
|
|
|
|
|
|
| |
CodeGen/
It's a SelectionDAG thing, not a Target thing.
llvm-svn: 258939
|
| |
|
|
| |
llvm-svn: 258937
|
| |
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D16554
llvm-svn: 258872
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This patch is provided in preparation for removing autoconf on 1/26. The proposal to remove autoconf on 1/26 was discussed on the llvm-dev thread here: http://lists.llvm.org/pipermail/llvm-dev/2016-January/093875.html
"I felt a great disturbance in the [build system], as if millions of [makefiles] suddenly cried out in terror and were suddenly silenced. I fear something [amazing] has happened."
- Obi Wan Kenobi
Reviewers: chandlerc, grosbach, bob.wilson, tstellarAMD, echristo, whitequark
Subscribers: chfast, simoncook, emaste, jholewinski, tberghammer, jfb, danalbert, srhines, arsenm, dschuff, jyknight, dsanders, joker.eph, llvm-commits
Differential Revision: http://reviews.llvm.org/D16471
llvm-svn: 258861
|
| |
|
|
|
|
|
| |
This pass runs after FrameIndex elimination, so it should never see FI
operands. NFC
llvm-svn: 258860
|
| |
|
|
|
|
| |
I forgot to update this one in my previous patch.
llvm-svn: 258853
|
| |
|
|
|
|
| |
r258781 optimized memcpy/memmove/memcpy so the intrinsic call can return its first argument, but missed the frame index case. Teach it to ignore that case so C code doesn't assert out in these cases.
llvm-svn: 258851
|
| |
|
|
| |
llvm-svn: 258827
|
| |
|
|
| |
llvm-svn: 258810
|
| |
|
|
|
|
|
|
| |
These calls return their first argument, but because LLVM uses an intrinsic
with a void return type, they can't use the returned attribute. Generalize
the store results pass to optimize these calls too.
llvm-svn: 258781
|
| |
|
|
| |
llvm-svn: 258780
|
| |
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D16534
llvm-svn: 258779
|
| |
|
|
|
|
|
| |
Instructions can be DCE'd after the RegStackify pass. If the instruction which
would be the pop for what would be a push is removed, don't use a push.
llvm-svn: 258694
|
| |
|
|
| |
llvm-svn: 258692
|
| |
|
|
|
|
|
|
|
| |
Previously it failed to add NumArgRegs to the offset and so clobbered an
already-used register. Now just start the numbering after the arg regs
and don't duplicate the add. Test coverage for this coming shortly with
the implementation of byval.
llvm-svn: 258597
|
| |
|
|
|
|
| |
I got a vanity URL, and moved the github waterfall repo.
llvm-svn: 258484
|
| |
|
|
| |
llvm-svn: 258294
|
| |
|
|
| |
llvm-svn: 258293
|
| |
|
|
| |
llvm-svn: 258285
|
| |
|
|
| |
llvm-svn: 258192
|
| |
|
|
|
|
|
| |
The following test program triggers the assertion:
https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/gcc.c-torture/execute/20030916-1.c
llvm-svn: 258182
|
| |
|
|
|
|
|
|
|
| |
Teach the register stackifier to rematerialize constants that have multiple
uses instead of leaving them in registers. In the WebAssembly encoding, it's
the same code size to materialize most constants as it is to read a value
from a register.
llvm-svn: 258142
|
| |
|
|
| |
llvm-svn: 258127
|
| |
|
|
| |
llvm-svn: 258126
|
| |
|
|
| |
llvm-svn: 257969
|
| |
|
|
|
|
|
|
|
|
| |
WebAssembly's stack will never be executable by default, so it isn't
necessary to declare .note.GNU-stack sections to request a non-executable
stack.
Differential Revision: http://reviews.llvm.org/D15969
llvm-svn: 257962
|
| |
|
|
| |
llvm-svn: 257804
|
| |
|
|
|
|
|
|
|
|
|
|
| |
A recent change introduced this assertion failure in some corner cases.
Repro:
mkdir /s/wasm/torture-out ; time /s/wasm/waterfall/src/compile_torture_tests.py --c /s/llvm/out/bin/clang --cxx /s/llvm/out/bin/clang++ --testsuite /s/gcc/gcc/testsuite --fails /s/llvm/llvm/lib/Target/WebAssembly/known_gcc_test_failures.txt --out /s/wasm/torture-out
Or look on the wasm integration bot:
https://build.chromium.org/p/client.wasm.llvm/console
llvm-svn: 257733
|
| |
|
|
| |
llvm-svn: 257709
|
| |
|
|
| |
llvm-svn: 257657
|
| |
|
|
| |
llvm-svn: 257655
|