- Jun 19, 2020
-
-
Kristof Beyls authored
A "BTI c" instruction only allows jumping/calling to using a BLR* instruction. However, the SLSBLR mitigation changes a BLR to a BR to implement the function call. Therefore, a "BTI c" check that passed before could trigger after the BLR->BL change done by the SLSBLR mitigation. However, if the register used in BR is X16 or X17, this trigger will not fire (see ArmARM for further details). Therefore, this patch simply changes the function stubs for the SLSBLR mitigation from __llvm_slsblr_thunk_x<N>: br x<N> SpeculationBarrier to __llvm_slsblr_thunk_x<N>: mov x16, x<N> br x16 SpeculationBarrier Differential Revision: https://reviews.llvm.org/D81405
-
Ronak Chauhan authored
Summary: This allows targets to also consider the symbol's type and/or address if needed. Reviewers: scott.linder, jhenderson, MaskRay, aardappel Reviewed By: scott.linder, MaskRay Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, aheejin, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82090
-
Francesco Petrogalli authored
Reviewers: efriedma, sdesmalen Reviewed By: efriedma Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D80741
-
Nemanja Ivanovic authored
We currently miss a number of opportunities to emit single-instruction VMRG[LH][BHW] instructions for shuffles on little endian subtargets. Although this in itself is not a huge performance opportunity since loading the permute vector for a VPERM can always be pulled out of loops, producing such merge instructions is useful to downstream optimizations. Since VPERM is essentially opaque to all subsequent optimizations, we want to avoid it as much as possible. Other permute instructions have semantics that can be reasoned about much more easily in later optimizations. This patch does the following: - Canonicalize shuffles so that the first element comes from the first vector (since that's what most of the mask matching functions want) - Switch the elements that come from splat vectors so that they match the corresponding elements from the other vector (to allow for merges) - Adds debugging messages for when a shuffle is matched to a VPERM so that anyone interested in improving this further can get the info for their code Differential revision: https://reviews.llvm.org/D77448
-
Carl Ritson authored
Add code to respect mad-mac-f32-insts target feature. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D81990
-
LLVM GN Syncbot authored
-
Ties Stuij authored
Summary: so it doesn't change the C ABI Reviewers: deadalnix Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82135
-
Derek Schuff authored
Emscripten has emulations for several headers found on Linux, including spwan.h and endian.h Differential Revision: https://reviews.llvm.org/D82121
-
Vitaly Buka authored
Summary: Extend StackLifetime with option to calculate liveliness where alloca is only considered alive on basic block entry if all non-dead predecessors had it alive at terminators. Depends on D82043. Reviewers: eugenis Reviewed By: eugenis Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82124
-
Nathan James authored
-
Vitaly Buka authored
Summary: lifetime.ll is a copy of SafeStack/X86/coloring2.ll Reviewers: eugenis Reviewed By: eugenis Subscribers: hiraditya, mgrang, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82043
-
- Jun 18, 2020
-
-
Matt Arsenault authored
Don't do this in the MachineFunctionInfo constructor. Also, ensure the alignment rather than overwriting it outright. I vaguely remember there was another place to enforce the target minimum alignment, but I couldn't find it (it's there for instructions).
-
Matt Arsenault authored
We probably need to move where intrinsics are lowered to copies to make this useful.
-
Matt Arsenault authored
Private pointers used to workaround IR semantics by artifically reserving an object at offset 0 so no user object would be allocated there. Since alloca now uses a non-0 address space, that workaround is unnecssary and 0 can be treated as a valid pointer.
-
Matt Arsenault authored
I don't know anything about debug info, but this seems like more work should be necessary. This constructs a new IRBuilder and reconstructs the original divides rather than moving the original. One problem this has is if a div/rem pair are handled, both end up with the same debugloc. I'm not sure how to fix this, since this uses a cache when it sees the same input operands again, which will have the first instance's location attached.
-
Amy Kwan authored
This patch implements builtins for the following prototypes: vector unsigned long long vec_pdep(vector unsigned long long, vector unsigned long long); vector unsigned long long vec_pext(vector unsigned long long, vector unsigned long long __b); unsigned long long __builtin_pdepd (unsigned long long, unsigned long long); unsigned long long __builtin_pextd (unsigned long long, unsigned long long); Revision Depends on D80758 Differential Revision: https://reviews.llvm.org/D80935
-
Matt Arsenault authored
In one case, UpdateDefs was not getting set and a dead SmallVector constructed. In another, it was adding new vreg defs to the updated set which should be unnecessary. This also wasn't considering the multiple defs of G_UNMERGE_VALUES. Also increase the small vector sizes for merge/unmerge operands to the usual semi-arbitrary 8. While debugging these, I'm usually seeing merges and unmerges with at least 4 uses/defs. I haven't run into an actual problem from any of these though.
-
Matt Arsenault authored
This was passing in all the parameters needed to construct a LegalizerHelper in the custom legalization, when it's simpler to just pass in the existing helper. This is slightly more annoying to use in the common case where you don't need the legalizer helper, but we could add back the common parameters back in addition to the helper. I didn't propagate this to all the internal target changes that this logically implies, but did update a sample one for legalizeMinNumMaxNum. This is in preparation for moving AMDGPU load/store legalization entirely into custom lowering. The current set of legalization actions is really constraining and not really capable of expressing all the actions needed to legalize loads/stores. In particular there's no way to express when the memory access itself needs to change size vs. the result type. There's also a lot of redundancy since the same split/widen actions need to be applied in both vector and scalar cases. All of the sub-cases logically belong as steps in the legalizer helper, but it will be easier to consider everything at once in custom lowering.
-
Vedant Kumar authored
Summary: Restructure HowToUpdateDebugInfo.rst to specify rules for when transformations should preserve, merge, or drop debug locations. The goal is to have clear, well-justified rules that come with a few examples and counter-examples, so that pass authors can pick the best strategy for managing debug locations depending on the specific task at hand. I've tried to set down sensible rules here that mostly align with what we already do in llvm today, and that take a diverse set of use cases into account (interactive debugging, crash triage, SamplePGO). Please *do* try to pick these rules apart and suggest clarifications or improvements :). Side note: Prior to 24660ea1, this document was structured as a long list of very specific code transformations -- the idea being that we would fill in what to do in each specific case. I chose to reorganize the document as a list of actions to take because it drastically cuts down on the amount of redundant exposition/explanation needed. I hope that's fine... Reviewers: jmorse, aprantl, dblaikie Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D81198
-
Jonas Devlieghere authored
Update the Sphinx configuration for the removal of source_parsers in Sphinx 3.0. The variable has been deprecated since version 1.8. > Version 1.8 deprecates and version 3.0 removes the source_parsers > configuration variable that was used by older recommonmark versions. https://www.sphinx-doc.org/en/master/usage/markdown.html Differential revision: https://reviews.llvm.org/D75284
-
Shuhong Liu authored
[AIX] Split lit test shtest-format into two separate tests and add AIX as UNSUPPORTED for shtest-format-argv0 Summary: lit test `shtest-format.py` fails on AIX because one of the subtest of shtest-format requires the tool `[` to be installed under the system PATH. For AIX, `[` is only available as a shell builtin and does not present as an executable file under PATH. Hence, split the original shtest-format into two separate test files and added AIX as UNSUPPORTED for the test using `[` . Reviewers: daltenty, hubert.reinterpretcast Reviewed By: hubert.reinterpretcast Subscribers: delcypher, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82100
-
Christopher Tetreault authored
Reviewers: efriedma, c-rhodes, david-arm, Tyker, asbirlea Reviewed By: david-arm Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82057
-
Alexandre Ganea authored
[CodeView] Revert 8374bf43 and 403f9537 This reverts: 8374bf43 [CodeView] Fix generated command-line expansion in LF_BUILDINFO. Fix the 'pdb' entry which was previously a null reference, now an empty string. 403f9537 [CodeView] Add full repro to LF_BUILDINFO record This is causing the lld/test/COFF/pdb-relative-source-lines.test to fail: http://lab.llvm.org:8011/builders/lld-x86_64-win/builds/1096/steps/test-check-all/logs/FAIL%3A%20lld%3A%3Apdb-relative-source-lines.test And clang/test/CodeGen/debug-info-codeview-buildinfo.c fails as well: http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/33346/steps/ninja%20check%201/logs/FAIL%3A%20Clang%3A%3Adebug-info-codeview-buildinfo.c
-
Kirill Naumov authored
This functionality is very similar to Function compatibility with AnnotationWriter. This change allows us to use AnnotationWriter with BasicBlock through BB.print() method. Reviewed-By: apilipenko Differntial Revision: https://reviews.llvm.org/D81321
-
Sanjay Patel authored
The predicate can always be used to distinguish between icmp and fcmp, so we don't need to keep repeating this check in the callers.
-
Matt Arsenault authored
This should probably be implied for all the speculatable ones. I think the only ones where this plausibly doesn't apply is s_sendmsghalt and maybe kill.
-
Davide Italiano authored
Sometimes a dead block gets folded and the debug information is still retained. This manifests as jumpy stepping in lldb, see the bugzilla PR for an end-to-end C testcase. Fixes https://bugs.llvm.org/show_bug.cgi?id=46008 Differential Revision: https://reviews.llvm.org/D82062
-
Michael Liao authored
Reviewers: arsenm Subscribers: wdng, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82025
-
serge-sans-paille authored
Move code that may update the IR after precondition, so that if precondition fail, the IR isn't modified. Differential Revision: https://reviews.llvm.org/D81225
-
Matt Arsenault authored
These don't really modify any memory, and should not expect memory operands.
-
Daniel Grumberg authored
-
Stanislav Mekhanoshin authored
Nothing breaks yet, but all encodings shall be in the map. Differential Revision: https://reviews.llvm.org/D81974
-
Alex Richardson authored
Previously the script only handled C input, this change extends the JSON parsing to to also include C++ function types such as methods, constructors and destructors. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D80914
-
Alex Richardson authored
Function declarations can in fact have an 'inner' node that lists the ParmVarDecls. It seems like either the JSON output has changed or that I tested the original JSON parsing change with test files that only have function definitions without arguments. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D80913
-
Cullen Rhodes authored
Highlight the `bfloat` type introduced in D78190.
-
Arthur Eubanks authored
When possible (e.g. internal linkage), strip preallocated attribute off parameters/arguments. This requires removing the "preallocated" operand bundle from the call site, replacing @llvm.call.preallocated.arg() with an alloca and a bitcast to i8*, and removing the @llvm.call.preallocated.setup(). Since @llvm.call.preallocated.arg() can be called multiple times with the same arg index, we create an alloca per arg index. We add a @llvm.stacksave() where the @llvm.call.preallocated.setup() was and a @llvm.stackrestore() after the preallocated call to prevent the stack from blowing up. This is valid because the argument would normally not exist on the stack after the call before the transformation. This does not currently handle all possible preallocated calls. We will need to figure out where to put @llvm.stackrestore() in the cases where there is no obvious place to put it, for example conditional preallocated calls, invokes. This sort of transformation may need to be moved to somewhere more accessible to accomodate similar transformations (like inlining) in the future. Reviewers: efriedma, hans Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D80951
-
Roman Lebedev authored
https://bugs.llvm.org/show_bug.cgi?id=45360 This is reduced from the (runnable) test provided in the bug report. The remainder operation is originally guarded, it never divides by zero. Indvars should not make it execute unconditionally. This is not a great test, running whole -O2 is fragile, but i really don't understand why running -indvars on the IR before that tranform happens doesn't work.
-
Alexandros Lamprineas authored
This patch adds basic support for BFloat in the Arm backend. For now the code generation relies on fullfp16 being present. Briefly: * adds the bfloat scalar and vector types in the necessary register classes, * adjusts the calling convention to cope with bfloat argument passing and return, * adds codegen patterns for moves, loads and stores. It's tested mostly by the intrinsic patches that depend on it (load/store, convert/copy). The following people contributed to this patch: * Alexandros Lamprineas * Ties Stuij Differential Revision: https://reviews.llvm.org/D81373
-
Amara Emerson authored
Differential Revision: https://reviews.llvm.org/D82034
-
Simon Pilgrim authored
[TargetLowering] SimplifyMultipleUseDemandedBits - drop already extended ISD::SIGN_EXTEND_INREG nodes. If the source of the SIGN_EXTEND_INREG node is already sign extended, use the source directly.
-