- Jul 01, 2021
-
-
Richard Smith authored
-
Geoffrey Martin-Noble authored
This patch introduces a custom rule for expanding the LLVM target enumeration .def files. This provides a slightly cleaner API for these rules, but is mostly to permit selects to be used when determining which LLVM targets to build. Right now the target list is generated at Bazel configure time, but this will allows us to add functionality to also control which targets are built based on config settings. Tested: Ran `bazel test --config=rbe ... @llvm-project//...` Reviewed By: chandlerc Differential Revision: https://reviews.llvm.org/D104969
-
Geoffrey Martin-Noble authored
Reviewed By: chandlerc Differential Revision: https://reviews.llvm.org/D105245
-
thomasraoux authored
Uses elementwise interface to generalize canonicalization pattern and add a new pattern for vector.contract case. Differential Revision: https://reviews.llvm.org/D104343
-
Sanjay Patel authored
This is one sibling of the fold added with c7b658ae . (X + C2) <u C --> X >s ~C2 (if C == C2 + SMIN) I'm still not sure how to describe it best, but we're translating 2 constants from an unsigned range comparison to signed because that eliminates the offset (add) op. This could be extended to handle the more general (non-constant) pattern too: https://alive2.llvm.org/ce/z/K-fMBf define i1 @src(i8 %a, i8 %c2) { %t = add i8 %a, %c2 %c = add i8 %c2, 128 ; SMIN %ov = icmp ult i8 %t, %c ret i1 %ov } define i1 @tgt(i8 %a, i8 %c2) { %not_c2 = xor i8 %c2, -1 %ov = icmp sgt i8 %a, %not_c2 ret i1 %ov }
-
Sanjay Patel authored
This is the 'ult' sibling pattern for: c7b658ae
-
Jez Ng authored
Matches ld64. Reviewed By: #lld-macho, alexander-shaposhnikov Differential Revision: https://reviews.llvm.org/D105080
-
Jez Ng authored
Previously, we only applied the renames to ConcatOutputSections. Reviewed By: #lld-macho, thakis Differential Revision: https://reviews.llvm.org/D105079
-
Siva Chandra Reddy authored
Few tests have been converted to the new test patterns to facilitate this.
-
Jeremy Morse authored
This patch adds support to the instruction-referencing LiveDebugValues implementation for emitting entry values. The instruction referencing implementations tracking by value rather than location means that we can get around two of the issues with VarLocs. DBG_VALUE instructions that re-assign the same value to a variable are no longer a problem, because we can "see through" to the value being assigned. We also don't need to do anything special during the dataflow stages: the "variable value problem" doesn't need to know whether a value is available most of the time, and the times it deoes need to know are always when entry values need to be terminated. The patch modifies the "TransferTracker" class, adding methods to identify when a variable ias an entry value candidate, and when a machine value is an entry value. recoverAsEntryValue tests these two things and emits an entry-value expression if they're true. It's used when we clobber or otherwise lose a value and can't find a replacement location for the value it contained. Differential Revision: https://reviews.llvm.org/D88406
-
Matt Arsenault authored
This enables proper lowering of non-byte sized loads. We still aren't faithfully preserving memory types everywhere, so the legality checks still only consider the size.
-
Jon Chesterfield authored
A step towards making this function adequately self contained that it can be tested easily. No functional change intended here, left variable names unchanged. Reviewed By: ronlieb Differential Revision: https://reviews.llvm.org/D105229
-
Arthur O'Dwyer authored
This wasn't happening before, which led to one slipping in.
-
Artem Belevich authored
We should not error out on non-x86 targets if `-fbasic-block-sections=none` is in effect. Also, filter it out for GPU-side compilations, as we do with other options not supported on the GPU. Differential Revision: https://reviews.llvm.org/D105226
-
Richard Smith authored
In passing, fix an ast-print bug that inserted a spurious extra `;` after a concept definition.
-
Jon Chesterfield authored
Removes stdarg header, drops uses of iostream, fix some format string errors. Also changes a C style struct to C++ style to avoid a warning from clang/ Reviewed By: pdhaliwal Differential Revision: https://reviews.llvm.org/D104923
-
Matt Arsenault authored
Previously we didn't preserve the memory type and had to blindly interpret a number of bytes. Now that non-byte memory accesses are representable, we can handle these correctly. Ported from DAG version (minus some weird special case i1 legality checking which I don't fully understand, and we don't have a way to query for) For now, this is NFC and the test changes are placeholders. Since the legality queries are still relying on byte-flattened memory sizes, the legalizer can't actually see these non-byte accesses. This keeps this change self contained without merging it with the larger patch to switch to LLT memory queries.
-
Matt Arsenault authored
-
Matt Arsenault authored
These testcases are a bit nonsensical and won't be handled correctly for a long time. Remove them to unblock load/store legalization work.
-
Jonas Paulsson authored
Enable the emission of a GNU attributes section by reusing the code for emitting the ARM build attributes section. The GNU attributes follow the exact same section format as the ARM BuildAttributes section, so this can be factored out and reused for GNU attributes generally. The immediate motivation for this is to emit a GNU attributes section for the vector ABI on SystemZ (https://reviews.llvm.org/D105067). Review: Logan Chien, Ulrich Weigand Differential Revision: https://reviews.llvm.org/D102894
-
Aleksandr Platonov authored
Without this patch clangd silently process compiler instance prepare failure and only LSP errors "Invalid AST" could be found in logs. E.g. the reason of the problem https://github.com/clangd/clangd/issues/734 is impossible to understand without verbose logs or with disabled background index. This patch adds more information into logs to help understand the reason of such failures. Logs without this patch: ``` E[...] Could not build a preamble for file test.cpp version 1 ``` Logs with this patch: ``` E[...] Could not build a preamble for file test.cpp version 1: CreateTargetInfo() return null .. E[...] Failed to prepare a compiler instance: unknown target ABI 'lp64' ``` Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D104056
-
Matt Arsenault authored
This will currently accept the old number of bytes syntax, and convert it to a scalar. This should be removed in the near future (I think I converted all of the tests already, but likely missed a few). Not sure what the exact syntax and policy should be. We can continue printing the number of bytes for non-generic instructions to avoid test churn and only allow non-scalar types for generic instructions. This will currently print the LLT in parentheses, but accept parsing the existing integers and implicitly converting to scalar. The parentheses are a bit ugly, but the parser logic seems unable to deal without either parentheses or some keyword to indicate the start of a type.
-
Siva Chandra authored
This is because, raising some exceptions can raise other ones. For example, raising FE_OVERFLOW can raise FE_INEXACT. So, we need to clear all exceptions if we want a clean slate.
-
Martin Storsjö authored
This is an ELF specific option which isn't supported for Windows/MinGW targets, even if the MinGW linker otherwise uses an ld.bfd like linker interface. Differential Revision: https://reviews.llvm.org/D105148
-
Valentin Churavy authored
Enable the Orc C-Bindings for testing. Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D104637
-
Valentin Churavy authored
In https://reviews.llvm.org/D103855 we added access to IRTransformLayer, but I just noticed that the function name is following the wrong pattern. Differential Revision: https://reviews.llvm.org/D104840
-
Shilei Tian authored
In our ongoing work, we are using `AbstractAttributor` to deduct execution model of device functions, and potententially remove unnecessary function calls to `__kmpc_is_spmd_exec_mode`. In current device runtime, we have mixed use of `isSPMDMode` and `__kmpc_is_spmd_exec_mode`, but in fact in `__kmpc_is_spmd_exec_mode` it simply calls `isSPMDMode`. Since all functions starting with `__kmpc` is C function, which doesn't have things like name mangling. It is more optimization friendly. In this patch, we simply replaced all calls to `isSPMDMode` with `__kmpc_is_spmd_exec_mode` to pave the way for the optimization. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D105211
-
Jon Roelofs authored
Differential revision: https://reviews.llvm.org/D105072
-
Suraj Sudhir authored
Signed-off-by:
Suraj Sudhir <suraj.sudhir@arm.com> Reviewed By: rsuderman Differential Revision: https://reviews.llvm.org/D105213
-
Florian Hahn authored
Use separate variable for adjusted scale used for GCD computations. This fixes an issue where we incorrectly determined that all indices are non-negative and returned noalias because of that. Follow up to 91fa3565.
-
Florian Hahn authored
This patch adds a test where we currently incorrectly determine noalias, because the sign of Scale is adjusted after 91fa3565.
-
LLVM GN Syncbot authored
-
Nico Weber authored
-
Philip Reames authored
-
Stanislav Mekhanoshin authored
This is to allow 64 bit constant rematerialization. If a constant is split into two separate moves initializing sub0 and sub1 like now RA cannot rematerizalize a 64 bit register. This gives 10-20% uplift in a set of huge apps heavily using double precession math. Fixes: SWDEV-292645 Differential Revision: https://reviews.llvm.org/D104874
-
Xun Li authored
[Coroutines] Add the newly generated SCCs back to the CGSCC work queue after CoroSplit actually happened Relevant discussion can be found at: https://lists.llvm.org/pipermail/llvm-dev/2021-January/148197.html In the existing design, An SCC that contains a coroutine will go through the folloing passes: Inliner -> CoroSplitPass (fake) -> FunctionSimplificationPipeline -> Inliner -> CoroSplitPass (real) -> FunctionSimplificationPipeline The first CoroSplitPass doesn't do anything other than putting the SCC back to the queue so that the entire pipeline can repeat. As you can see, we run Inliner twice on the SCC consecutively without doing any real split, which is unnecessary and likely unintended. What we really wanted is this: Inliner -> FunctionSimplificationPipeline -> CoroSplitPass -> FunctionSimplificationPipeline (note that we don't really need to run Inliner again on the ramp function after split). Hence the way we do it here is to move CoroSplitPass to the end of the CGSCC pipeline, make it once for real, insert the newly generated SCCs (the clones) back to the pipeline so that they can be optimized, and also add a function simplification pipeline after CoroSplit to optimize the post-split ramp function. This approach also conforms to how the new pass manager works instead of relying on an adhoc post split cleanup, making it ready for full switch to new pass manager eventually. By looking at some of the changes to the tests, we can already observe that this changes allows for more optimizations applied to coroutines. Reviewed By: aeubanks, ChuanqiXu Differential Revision: https://reviews.llvm.org/D95807
-
Ahmed Taei authored
Similarly to batch_mat vec outer most dim is a batching dim and this op does |b| matrix-vector-products : C[b, i] = sum_k(A[b, i, k] * B[b, k]) Reviewed By: rsuderman Differential Revision: https://reviews.llvm.org/D104739 -
Fangrui Song authored
For ``` SECTIONS { text.0 : {} text.1 : {} text.2 : {} } INSERT AFTER .data; ``` the current order is `.data text.2 text.1 text.0`. It makes more sense to preserve the specified order and thus improve compatibility with GNU ld. For ``` SECTIONS { text.0 : {} } INSERT AFTER .data; SECTIONS { text.3 : {} } INSERT AFTER .data; ``` GNU ld somehow collects sections with `INSERT AFTER .data` together (IMO inconsistent) but I think it makes more sense to execute the commands in order and get `.data text.3 text.0` instead. Reviewed By: peter.smith Differential Revision: https://reviews.llvm.org/D105158 -
Leonard Chan authored
As of D102374, relative vtables is enabled on Fuchsia by default, so we don't need any of the RV multilibs. Differential revision: https://reviews.llvm.org/D105145
-
David Green authored
This prevents constant gep operands from being hoisted by the Constant Hoisting pass, leaving them to CodegenPrepare which can usually do a better job at splitting large offsets. This can, in general, improve performance and decrease codesize, especially for v6m where many constants have a high cost. Differential Revision: https://reviews.llvm.org/D104877
-