- Dec 04, 2021
-
-
Choongwoo Han authored
When Control Flow Guard Check is inserted, funclet bundle was not checked. Therefore, it didn't generate code correctly when a target function has "funclet" bundle. Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D114914
-
Mitch Phillips authored
Google-signed apexes appear on Android build servers' symbol files as being under /apex/com.google.android.<foo>/. In reality, the apexes are always installed as /apex/com.android.<foo>/ (note the lack of 'google'). In order for local symbolization under hwasan_symbolize to work correctly, we also try the 'google' directory. Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D114919
-
Stanislav Mekhanoshin authored
-
Stanislav Mekhanoshin authored
Two-address pass works right before RA and if an immediate was folded into an instruction there is nothing to remove the dead def. We end up with something like: v_mov_b32_e32 v14, 0xc1700000 v_mov_b32_e32 v14, 0x41200000 v_fmaak_f32 v51, s67, v19, 0xc1700000 v_fmaak_f32 v38, v51, v19, 0x4120000 The patch kills the dead move instruction right in the folding. Differential Revision: https://reviews.llvm.org/D114999
-
Simon Pilgrim authored
[DAG] PromoteIntRes_FunnelShift - rename shift Amount variable to Amt to prevent line overflow. NFC.
-
Philip Reames authored
This fixes a bug in 740057d1. There's two ways to describe the issue: * One caller hasn't yet proven nocapture on the argument. Given that, the inference routine is responsible for bailing out on a potential capture. * Even if we know the argument is nocapture, the access inference needs to traverse the exact set of users the capture tracking would (or exit conservatively). Even if capture tracking can prove a store is non-capturing (e.g. to a local alloc which doesn't escape), we still need to track the copy of the pointer to see if it's later reloaded and accessed again. Note that all the test changes except the newly added ones appear to be false negatives. That is, cases where we could prove writeonly, but the current code isn't strong enough. That's why I didn't spot this originally.
-
Simon Pilgrim authored
Helps appease MSVC which is complaining about "fatal error C1061: compiler limit: blocks nested too deeply" - we already do the same thing for avx512.mask.store intrinsics. This is only a stopgap solution until another else-if case needs adding - we really need to refactor this chain of ifs properly.
-
Muhammad Omair Javaid authored
minidebuginfo-set-and-hit-breakpoint.test is failing on Arm/Linux most probably due to an ill formed binary after removal of certain sections from executable. I am marking it as XFAIL for further investigation.
-
David Green authored
Try to appease the microsoft compiler which is apparently running out of if statements. Separate the new ARM code into a separate function to keep it simpler.
-
David Green authored
I'm not having a lot of luck with the microosft compiler recently. Maybe this will help it with its errors: llvm\lib\IR\AutoUpgrade.cpp(3726): fatal error C1061: compiler limit: blocks nested too deeply If not, it's a good code cleanup anyway.
-
Guillaume Chatelet authored
-
Nico Weber authored
In release+sym builds (-O2 -g), reduces time to link `clang` from 2.3s to 1.3s (-42%). In debug builds (-g), reduces time to link `clang` from 5.4s to 4.5s (-17.4%). See the phab review for full `ministat` numbers. In the CMake build this is opt-in via LLVM_USE_SPLIT_DWARF. Since the GN build is targeted at developers, enabling it by default seems like a better default setting here. (If it turns out to cause problems, we can add an opt-out.) Time to load the binary into gdb and to set a breakpoint is unchanged. Time from `run` to hitting a breakpoint in `main` feel a bit faster (~4s -> ~2s), but I dind't do a careful statistical anlysis for this. Differential Revision: https://reviews.llvm.org/D115040
-
Florian Hahn authored
Suggested in D114872.
-
- Dec 03, 2021
-
-
Guillaume Chatelet authored
We want to simplify the build system and rely on code to do the implementation selection. This is in preparation of adding a Bazel configuration (D114712). Differential Revision: https://reviews.llvm.org/D115034
-
Balázs Kéri authored
Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D114602
-
Stephen Tozer authored
Prior to this patch, tail duplication handled debug info poorly - specifically, debug instructions would be dropped instead of being set undef, potentially extending the lifetimes of prior debug values that should be killed. The pass was also very aggressive with dropping debug info, dropping debug info even when the SSA value it referred to was still present. This patch attempts to handle debug info more carefully, checking to see whether each affected debug value can still be live, setting it undef if not. Reviewed By: jmorse Differential Revision: https://reviews.llvm.org/D106875
-
David Green authored
This adjusts all the MVE and CDE intrinsics now that v2i1 is a legal type, to use a <2 x i1> as opposed to emulating the predicate with a <4 x i1>. The v4i1 workarounds have been removed leaving the natural v2i1 types, notably in vctp64 which now generates a v2i1 type. AutoUpgrade code has been added to upgrade old IR, which needs to convert the old v4i1 to a v2i1 be converting it back and forth to an integer with arm.mve.v2i and arm.mve.i2v intrinsics. These should be optimized away in the final assembly. Differential Revision: https://reviews.llvm.org/D114455
-
Tue Ly authored
Fix a bug with negative and mixed normal/denormal inputs in hypot implementation. Differential Revision: https://reviews.llvm.org/D114726
-
Nemanja Ivanovic authored
The Power ISA defined l[bhwdq]arx as both base and extended mnemonics. The base mnemonic takes the EH bit as an operand and the extended mnemonic omits it, making it implicitly zero. The existing implementation only handles the base mnemonic when EH is 1 and internally produces a different instruction. There are historical reasons for this. This patch simply removes the limitation introduced by this implementation that disallows the base mnemonic with EH = 0 in the ASM parser. This resolves an issue that prevented some files in the Linux kernel from being built with -fintegrated-as. Also fix a crash if the value is not an integer immediate.
-
Anna Thomas authored
The earlier usage of wouldInstructionBeTriviallyDead is based on the assumption that the use_count of that instruction being checked will be zero. This patch separates the API into two different ones: 1. The strictly conservative one where the instruction is trivially dead iff the uses are dead. 2. The slightly relaxed form, where an instruction is dead along paths where it is not used. The second form can be used in identifying instructions that are valid to sink down to uses (D109917). Reviewed-By: reames Differential Revision: https://reviews.llvm.org/D114647
-
Andy Yankovsky authored
The adapter does support `Modules` request, implemented in 39239f9b. Reviewed By: wallace Differential Revision: https://reviews.llvm.org/D115033
-
Alexey Bataev authored
Need to do the analysis of the captured expressions in the clauses. Previously the compiler ignored them and it may lead to a compiler crash trying to get the address of the mapped variables. Differential Revision: https://reviews.llvm.org/D114546
-
Mehrnoosh Heidarpour authored
-
Matthias Springer authored
BufferizationState had map/lookup overloads for non-tensor values. This was necessary for IREE. There is now a better way to do this, so these overloads can be removed. Differential Revision: https://reviews.llvm.org/D114929
-
David Green authored
MVE can treat v16i1, v8i1, v4i1 and v2i1 as different views onto the same 16bit VPR.P0 register, with v2i1 holding two 8 bit values for the two halves. This was never treated as a legal type in llvm in the past as there are not many 64bit instructions and no 64bit compares. There are a few instructions that could use it though, notably a VSELECT (as it can handle any size using the underlying v16i8 VPSEL), AND/OR/XOR for similar reasons, some gathers/scatter and long multiplies and VCTP64 instructions. This patch goes through and makes v2i1 a legal type, handling all the cases that fall out of that. It also makes VSELECT legal for v2i64 as a side benefit. A lot of the codegen changes as a result - usually in way that is a little better or a little worse, but still expensive. Costs can change a little too in the process, again in a way that expensive things remain expensive. A lot of the tests that changed are mainly to ensure correctness - the code can hopefully be improved in the future where it comes up in practice. The intrinsics currently remain using the v4i1 they previously did to emulate a v2i1. This will be changed in a followup patch but this one was already large enough. Differential Revision: https://reviews.llvm.org/D114449
-
Jay Foad authored
-
Valentin Clement authored
This patch adds the FIR builder to generate the numeric intrinsic runtime call. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: rovka Differential Revision: https://reviews.llvm.org/D114900 Co-authored-by:
Jean Perier <jperier@nvidia.com> Co-authored-by:
mleair <leairmark@gmail.com>
-
Valentin Clement authored
This patch adds the builder to generate derived type runtime API calls. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: rovka Differential Revision: https://reviews.llvm.org/D114472 Co-authored-by:
Peter Klausler <pklausler@nvidia.com> Co-authored-by:
Jean Perier <jperier@nvidia.com>
-
Jay Foad authored
-
Matthias Springer authored
This simplifies op interface implementations. Differential Revision: https://reviews.llvm.org/D115025
-
Jay Foad authored
-
Florian Hahn authored
-
Guillaume Chatelet authored
-
Adrian Kuegel authored
-
Simon Pilgrim authored
As discussed on D114589 as the constant case gets affected by SimplifyDemandedBits a lot - the non-constant case currently falls back to copysignl libcalls
-
Petar Avramovic authored
Add clamp combine. Source is fminnum(fmaxnum(Val, 0.0), 1.0) or fmaxnum(fminnum(Val, 1.0), 0.0) or fmed3 intrinsic with 0.0 and 1.0 as two out of three operands. Differential Revision: https://reviews.llvm.org/D90052
-
Petar Avramovic authored
Add floating point version of med3 combine. Source is fminnum(fmaxnum(Val, K0), K1) or fmaxnum(fminnum(Val, K1), K0) where K0 and K1 are constants and K0 <= K1. Differential Revision: https://reviews.llvm.org/D90051
-
Petar Avramovic authored
Recognize constant splat padded with undef in isCanonicalized. Fcanonicalize will be removed by RemoveFcanonicalize in post-legalizer combiner. We will treat undef as value that will result in a splat in clamp combine after regbankselect. Differential Revision: https://reviews.llvm.org/D104408
-
Alex Zinenko authored
A previous commit added support for converting elemental types contained in LLVM dialect types in case they were not compatible with the LLVM dialect. It was missing support for named structs as they could be recursive, which was not supported by the conversion infra. Now that it is, add support for converting such named structs. Depends On D113579 Reviewed By: wsmoses Differential Revision: https://reviews.llvm.org/D113580
-
Matthias Springer authored
Differential Revision: https://reviews.llvm.org/D114670
-