Martin Storsjö [Mon, 3 Feb 2020 07:45:03 +0000 (09:45 +0200)]
[OpenMP] Fix GCC warnings. NFC.
Remove an extra semicolon, and add llvm_unreachable to avoid warnings
about control reaching the end of a non-void function.
Martin Storsjö [Mon, 3 Feb 2020 07:44:31 +0000 (09:44 +0200)]
[LLDB] Fix GCC warnings about extra semicolon. NFC.
Martin Probst [Fri, 31 Jan 2020 09:23:02 +0000 (10:23 +0100)]
clang-format: [JS] document InsertTrailingCommas.
Summary: In release notes and the regular docs.
Reviewers: MyDeveloperDay
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73768
Johannes Doerfert [Mon, 3 Feb 2020 06:45:48 +0000 (00:45 -0600)]
[Attributor][FIX] Try to resolve non-determinism problem for now
There seems to be another instance of non-determinism which causes the
number of iterations to be either 1 or 3 for one benchmark, depending
on the system. This needs to be investigated and resolved. In the
meantime we do not verify the number of iterations for this benchmark.
Johannes Doerfert [Mon, 30 Dec 2019 22:15:38 +0000 (16:15 -0600)]
[Attributor] AANoRecurse check all call sites for `norecurse`
If all call sites are in `norecurse` functions we can derive `norecurse`
as the ReversePostOrderFunctionAttrsPass does. This should make
ReversePostOrderFunctionAttrsLegacyPass obsolete once the Attributor is
enabled.
Reviewed By: uenoku
Differential Revision: https://reviews.llvm.org/D72017
Johannes Doerfert [Mon, 30 Dec 2019 22:12:36 +0000 (16:12 -0600)]
[Attributor] Propagate known information from `checkForAllCallSites`
If we know that all call sites have been processed we can derive an
early fixpoint. The use in this patch is likely not to trigger right now
but a follow up patch will make use of it.
Reviewed By: uenoku, baziotis
Differential Revision: https://reviews.llvm.org/D72016
Fangrui Song [Mon, 3 Feb 2020 05:44:01 +0000 (21:44 -0800)]
[Driver][test] Change %itanium_abi_triple to generic ELF
x86_64-windows and darwin default to PIC. They don't use PIE.
Igor Kudrin [Fri, 31 Jan 2020 10:56:15 +0000 (17:56 +0700)]
[DebugInfo] Remove an unused method DWARFUnit::getDWARF5HeaderSize(). NFC.
The method was initially added for DWARFVerifier::verifyUnitHeader() but
its results were never actually used.
Differential Revision: https://reviews.llvm.org/D73773
Craig Topper [Mon, 3 Feb 2020 05:27:43 +0000 (21:27 -0800)]
[X86] Remove a couple unnecessary calls to ConvertCmpIfNecessary.
We only need to call this on floating point comparisons. In this
case these are known to be integer compares. One of them even
has a SUB opcode instead of CMP.
Johannes Doerfert [Mon, 30 Dec 2019 23:02:09 +0000 (17:02 -0600)]
[PM][CGSCC] Add a helper to update the call graph from SCC passes
With this patch new trivial edges can be added to an SCC in a CGSCC
pass via the updateCGAndAnalysisManagerForCGSCCPass method. It shares
almost all the code with the existing
updateCGAndAnalysisManagerForFunctionPass method but it implements the
first step towards the TODOs.
This was initially part of D70927.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D72025
Juneyoung Lee [Sat, 1 Feb 2020 17:34:10 +0000 (02:34 +0900)]
[llvm-extract] Add -keep-const-init commandline option
Summary:
This adds -keep-const-init option to llvm-extract which preserves initializers of
used global constants.
For example:
```
$ cat a.ll
@g = constant i32 0
define i32 @f() {
%v = load i32, i32* @g
ret i32 %v
}
$ llvm-extract --func=f a.ll -S -o -
@g = external constant i32
define i32 @f() { .. }
$ llvm-extract --func=f a.ll -keep-const-init -S -o -
@g = constant i32 0
define i32 @f() { .. }
```
This option is useful in checking whether a function that uses a constant global is optimized correctly.
Reviewers: jsji, MaskRay, david2050
Reviewed By: MaskRay
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D73833
LLVM GN Syncbot [Mon, 3 Feb 2020 05:24:55 +0000 (05:24 +0000)]
[gn build] Port
c953409ff89
Johannes Doerfert [Tue, 28 Jan 2020 06:20:03 +0000 (00:20 -0600)]
[Inliner][NoAlias] Use call site attributes too
If we had `noalias` on an argument the inliner created alias scope
metadata already. However, the call site `noalias` annotation was not
considered. Since the Attributor can derive such call site `noalias`
annotation we should treat them the same as argument annotations.
Reviewed By: hfinkel
Differential Revision: https://reviews.llvm.org/D73528
Johannes Doerfert [Mon, 23 Dec 2019 21:50:27 +0000 (15:50 -0600)]
[OpenMP][Part 1] Reusable OpenMP context/traits handling
This is the first of multiple parts to make OpenMP context/trait
handling reusable and generic. This patch was originally part of D71830
but with the unit tests it can be tested independently.
This patch implements an almost complete handling of OpenMP
contexts/traits such that we can reuse most of the logic in Flang
through the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.
All but construct SIMD specifiers, e.g., inbranch, and the device ISA
selector are define in llvm/lib/Frontend/OpenMP/OMPKinds.def. From
these definitions we generate the enum classes TraitSet,
TraitSelector, and TraitProperty as well as conversion and helper
functions in llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}.
The OpenMP context is now an explicit object (see `struct OMPContext`).
This is in anticipation of construct traits that need to be tracked. The
OpenMP context, as well as the VariantMatchInfo, are basically made up
of a set of active or respectively required traits, e.g., 'host', and an
ordered container of constructs which allows duplication. Matching and
scoring is kept as generic as possible to allow easy extension in the
future.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D71847
Fangrui Song [Mon, 3 Feb 2020 04:55:24 +0000 (20:55 -0800)]
[Driver] Fix fsemantic-interposition.c for Windows and Darwin
Fangrui Song [Mon, 3 Feb 2020 03:30:39 +0000 (19:30 -0800)]
[Driver] Move -fsemantic-interposition decision from cc1 to driver
And add test/Driver/fsemantic-interposition.c
Shengchen Kan [Mon, 3 Feb 2020 04:31:42 +0000 (12:31 +0800)]
[NFC] Fix helptext for opt/llc after https://reviews.llvm.org/D68411
Remove "cl::value_desc("jcc, fused, jmp, call, ret, indirect"),", which
makes the option+it's cl::value_desc too long in all of help.
Saleem Abdulrasool [Mon, 3 Feb 2020 00:18:00 +0000 (16:18 -0800)]
build: attempt to repair the build
The change in
9b84dabc5f36f7e027c62b5c00ea97e21cfcacdd uses a newer
syntax which not all the builders support. Use an explicit `OR` over
the languages instead to repair the builders.
Nathan James [Sun, 2 Feb 2020 21:51:34 +0000 (21:51 +0000)]
Fixed typo in CTE release notes failing build
Nathan James [Sun, 2 Feb 2020 21:27:04 +0000 (21:27 +0000)]
[clang-tidy] Added option for disabling const qualifiers in readability-qualified-auto
Summary: Adds an option called `AddConstToQualified` to readability-qualified-auto to toggle adding const to the auto typed pointers and references. By default its enabled but in the LLVM module its disabled.
Reviewers: aaron.ballman, alexfh, JonasToth, hokein, sammccall
Reviewed By: aaron.ballman
Subscribers: Quuxplusone, merge_guards_bot, lebedev.ri, xazax.hun, cfe-commits
Tags: #clang, #clang-tools-extra
Differential Revision: https://reviews.llvm.org/D73548
Nathan James [Sun, 2 Feb 2020 21:26:04 +0000 (21:26 +0000)]
[clang-tidy] Fix false positive for cppcoreguidelines-init-variables
Summary: Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=44746 | False positive for cppcoreguidelines-init-variables in range based for loop in template function ]]
Reviewers: aaron.ballman, alexfh, hokein, JonasToth, gribozavr2
Reviewed By: aaron.ballman
Subscribers: merge_guards_bot, xazax.hun, wuzish, nemanjai, kbarton, cfe-commits
Tags: #clang, #clang-tools-extra
Differential Revision: https://reviews.llvm.org/D73843
Craig Topper [Sun, 2 Feb 2020 21:23:35 +0000 (13:23 -0800)]
[X86] Use MVT::f80 for the result type of the FLD used to convert from SSE register to X87 register in FP_TO_INTHelper.
Saleem Abdulrasool [Sun, 2 Feb 2020 18:49:03 +0000 (10:49 -0800)]
build: only pass -UNDEBUG when compiling C/C++
This patch limits adding -UNDEBUG to C and C++ files so that projects
can include files compiled with compilers that don't recognize this
argument (Swift e.g.).
add_definitions does not expand generators, hence the change from
add_definitions to add_compile_options.
Patch by Evan Wilde!
Nicolas Vasilache [Sun, 2 Feb 2020 15:21:34 +0000 (10:21 -0500)]
[mlir][Linalg][doc] Add Design Document for the Linalg Dialect
Summary: This revision adds a Rationale for the Linalg Dialect
Reviewers: rriddle, mehdi_amini, ftynse, albertcohen
Reviewed By: albertcohen
Subscribers: merge_guards_bot, jfb, jpienaar, burmako, shauheen, antiagainst, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D73595
Nicolas Vasilache [Sun, 2 Feb 2020 15:21:02 +0000 (10:21 -0500)]
Revert "[mlir][Linalg][doc] Add Design Document for the Linalg Dialect"
This reverts commit
1d58a7c82f77154bf56a51a5f248ef5d0a9bb4a8.
Craig Topper [Sun, 2 Feb 2020 18:24:35 +0000 (10:24 -0800)]
[X86] Cleanup the lrint/llrint/lround/llround tests a bit.
We don't need tests for truncating the result. There's nothing
special about those truncates.
We can test llrint/llround for 64-bit and 32-bit targets in the same file.
Same with lrint/lround with i32 result result. lrint/lround with
64-bit result should only occur on a 64-bit target.
Add some missing tests for f80 conversions.
LLVM GN Syncbot [Sun, 2 Feb 2020 18:45:50 +0000 (18:45 +0000)]
[gn build] Port
a7bbe45a3e2
Tyker [Sun, 2 Feb 2020 13:46:59 +0000 (14:46 +0100)]
Build assume from call
Fix attempt
this is part of the implementation of http://lists.llvm.org/pipermail/llvm-dev/2019-December/137632.html
this patch gives the basis of building an assume to preserve all information from an instruction and add support for building an assume that preserve the information from a call.
Fangrui Song [Sun, 2 Feb 2020 18:40:23 +0000 (10:40 -0800)]
[test] More tests to target specific directories after CodeGenPrepare requires TargetPassConfig (D73754)
Simon Pilgrim [Sun, 2 Feb 2020 18:27:16 +0000 (18:27 +0000)]
Regenerate bitcast test for upcoming patch.
Simon Pilgrim [Sun, 2 Feb 2020 18:15:44 +0000 (18:15 +0000)]
Fix a few spelling mistakes in comments. NFCI.
Fangrui Song [Sun, 2 Feb 2020 18:05:42 +0000 (10:05 -0800)]
[gn build] Delete stale AttributesCompatFunc after D72455/
cfe87a4a16b73652dc06f9fa334137656991f13f
Simon Pilgrim [Sun, 2 Feb 2020 17:59:45 +0000 (17:59 +0000)]
[X86][SSE] Add bitcast <128 x i1> %1 to <2 x i64> test case
Simon Pilgrim [Sun, 2 Feb 2020 17:57:15 +0000 (17:57 +0000)]
[X86][SSE] combineBitcastvxi1 - add pre-AVX512 v64i1 handling
Fangrui Song [Sun, 2 Feb 2020 17:53:17 +0000 (09:53 -0800)]
[CodeGenPrepare][test] Add REQUIRES to two tests after D73754
Fangrui Song [Sun, 2 Feb 2020 17:45:48 +0000 (09:45 -0800)]
[CodeGenPrepare] Delete dead !DL check
Follow-up for D73754
DL is assigned in CodeGenPrepare::runOnFunction and is guaranteed to be
non-null.
Tyker [Sun, 2 Feb 2020 17:34:09 +0000 (18:34 +0100)]
Revert "[WIP] Build assume from call"
casued buildbot failure
This reverts commit
8ebe001553d0c204cc41f3dbc595031828b1f140.
Fangrui Song [Fri, 31 Jan 2020 00:17:43 +0000 (16:17 -0800)]
[CodeGenPrepare] Make TargetPassConfig required
The code paths in the absence of TargetMachine, TargetLowering or
TargetRegisterInfo are poorly tested. As rL285987 said, requiring
TargetPassConfig allows us to delete many (untested) checks littered
everywhere.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D73754
Tyker [Sun, 2 Feb 2020 13:46:59 +0000 (14:46 +0100)]
[WIP] Build assume from call
Summary:
this is part of the implementation of http://lists.llvm.org/pipermail/llvm-dev/2019-December/137632.html
this patch gives the basis of building an assume to preserve all information from an instruction and add support for building an assume that preserve the information from a call.
Reviewers: jdoerfert
Reviewed By: jdoerfert
Subscribers: mgrang, fhahn, mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72475
Tyker [Sun, 2 Feb 2020 17:09:06 +0000 (18:09 +0100)]
Revert "[WIP] Build assume from call"
caused build bot failure
This reverts commit
780d2c532fe5ca4a368c5e631197a839e03a3cc4.
Tyker [Sun, 2 Feb 2020 13:46:59 +0000 (14:46 +0100)]
[WIP] Build assume from call
Summary:
this is part of the implementation of http://lists.llvm.org/pipermail/llvm-dev/2019-December/137632.html
this patch gives the basis of building an assume to preserve all information from an instruction and add support for building an assume that preserve the information from a call.
Reviewers: jdoerfert
Reviewed By: jdoerfert
Subscribers: mgrang, fhahn, mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72475
Tyker [Sun, 2 Feb 2020 16:49:23 +0000 (17:49 +0100)]
Revert "[WIP] Build assume from call"
This reverts commit
355e4bfd7890e50b492b2dc29f70fc41ad8f867f.
Tyker [Sun, 2 Feb 2020 13:46:59 +0000 (14:46 +0100)]
[WIP] Build assume from call
Summary:
this is part of the implementation of http://lists.llvm.org/pipermail/llvm-dev/2019-December/137632.html
this patch gives the basis of building an assume to preserve all information from an instruction and add support for building an assume that preserve the information from a call.
Reviewers: jdoerfert
Reviewed By: jdoerfert
Subscribers: mgrang, fhahn, mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72475
Sanjay Patel [Sun, 2 Feb 2020 14:16:42 +0000 (09:16 -0500)]
[Analysis] add optional index parameter to isSplatValue()
We want to allow splat value transforms to improve PR44588 and related bugs:
https://bugs.llvm.org/show_bug.cgi?id=44588
...but to do that, we need to know if values are splatted from the same,
specific index (lane) rather than splatted from an arbitrary index.
We can improve the undef handling with 1-liner follow-ups because the
Constant API optionally allow undefs now.
Differential Revision: https://reviews.llvm.org/D73549
Aaron Puchert [Sun, 2 Feb 2020 15:22:58 +0000 (16:22 +0100)]
Remove superfluous space from -Wrange-loop-construct message
Tyker [Sun, 2 Feb 2020 13:46:50 +0000 (14:46 +0100)]
[NFC] Refactor TableGen for attributes
Summary:
this patch makes tablegen generate llvm attributes in a more generic and simpler (at least to me).
changes: make tablegen generate
...
ATTRIBUTE_ENUM(Alignment,align)
ATTRIBUTE_ENUM(AllocSize,allocsize)
...
which can be used to generate most of what was previously used and more.
Tablegen was also generating attributes from 2 identical files leading to identical output. so I removed one of them and made user use the other.
Reviewers: jdoerfert, thakis, aaron.ballman
Reviewed By: aaron.ballman
Subscribers: mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72455
Tyker [Sun, 2 Feb 2020 14:03:37 +0000 (15:03 +0100)]
Revert "[NFC] Refactor TableGen for attributes"
This reverts commit
4dba14cf37abda16ab33cb748a5c762dae2e95e9.
Tyker [Sun, 2 Feb 2020 14:03:22 +0000 (15:03 +0100)]
Revert "[WIP] Build assume from call"
This reverts commit
2ff5602cb52969d3273062f36340fe95ac4e82da.
Nathan James [Sun, 2 Feb 2020 14:04:25 +0000 (14:04 +0000)]
[clang-tidy] Fixed crash 44745 in readability-else-after-return
Summary: Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=44745 | readability-else-after-return crashes ]]
Reviewers: aaron.ballman, alexfh, hokein, JonasToth, gribozavr2
Reviewed By: alexfh
Subscribers: merge_guards_bot, xazax.hun, cfe-commits
Tags: #clang, #clang-tools-extra
Differential Revision: https://reviews.llvm.org/D73841
Tyker [Sun, 2 Feb 2020 14:03:06 +0000 (15:03 +0100)]
Revert "[NFC] Factor out function to detect if an attribute has an argument."
This reverts commit
ff1b9add2ffd47abc649895e33b3e5c30d6f2079.
Tyker [Sun, 2 Feb 2020 13:47:00 +0000 (14:47 +0100)]
[NFC] Factor out function to detect if an attribute has an argument.
Reviewers: jdoerfert
Reviewed By: jdoerfert
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72884
Tyker [Sun, 2 Feb 2020 13:46:59 +0000 (14:46 +0100)]
[WIP] Build assume from call
Summary:
this is part of the implementation of http://lists.llvm.org/pipermail/llvm-dev/2019-December/137632.html
this patch gives the basis of building an assume to preserve all information from an instruction and add support for building an assume that preserve the information from a call.
Reviewers: jdoerfert
Reviewed By: jdoerfert
Subscribers: mgrang, fhahn, mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72475
Tyker [Sun, 2 Feb 2020 13:46:50 +0000 (14:46 +0100)]
[NFC] Refactor TableGen for attributes
Summary:
this patch makes tablegen generate llvm attributes in a more generic and simpler (at least to me).
changes: make tablegen generate
...
ATTRIBUTE_ENUM(Alignment,align)
ATTRIBUTE_ENUM(AllocSize,allocsize)
...
which can be used to generate most of what was previously used and more.
Tablegen was also generating attributes from 2 identical files leading to identical output. so I removed one of them and made user use the other.
Reviewers: jdoerfert, thakis, aaron.ballman
Reviewed By: aaron.ballman
Subscribers: mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72455
David Green [Sun, 2 Feb 2020 13:24:05 +0000 (13:24 +0000)]
Revert "[ARM][MVE] VPT Blocks: findVCMPToFoldIntoVPS"
This reverts commit
e34801c8e6df and the followup due to multiple
problems.
I've tried to keep the tests and RDA parts where possible, as those
still seem useful.
Fangrui Song [Sun, 2 Feb 2020 07:57:22 +0000 (23:57 -0800)]
[Transforms] Simplify with make_early_inc_range
Fangrui Song [Sun, 2 Feb 2020 06:59:51 +0000 (22:59 -0800)]
[DebugInfo] Merge DebugInfoFinder::{processDeclare,processValue} into processVariable
The two functions are identical.
Jacques Pienaar [Tue, 28 Jan 2020 20:05:54 +0000 (12:05 -0800)]
[mlir] Expand shape functions in ShapeInference doc
Summary:
Start filling in some requirements for the shape function descriptions
that will be used to derive shape computations. This requiement part may
later be reworked to be part of the "context" section of shape dialect. Without
examples this may be a bit too abstract but I hope not (given mappings to
existing shape functions).
Differential Revision: https://reviews.llvm.org/D73572
Fangrui Song [Sat, 1 Feb 2020 21:28:19 +0000 (13:28 -0800)]
[PatchableFunction] Use an empty DebugLoc
The current FirstMI.getDebugLoc() is actually null in almost all cases.
If it isn't, the generated .loc will be considered initial. The .loc
will have the prologue_end flag and terminate the prologue prematurely.
Also use an overload of BuildMI that will not prepend
PATCHABLE_FUNCTION_ENTRY to a MachineInstr bundle.
Brian Gesiak [Sat, 1 Feb 2020 20:03:54 +0000 (15:03 -0500)]
[ADT] 'PointerUnion::is' returns 'bool'
Summary:
The return type of 'PointerUnion::is' has been 'int' since it was first
added in March 2009, in SVN r67987, or
https://github.com/llvm/llvm-project/commit/
a9c6de15fb3.
The only other change to this member function was a clang-format applied
in December 2015, in SVN r256513, or
https://github.com/llvm/llvm-project/commit/
548a49aacc0.
However, since the return value is the result of a `==` comparison, an
implicit cast must be made converting the boolean result to an `int`.
Change the return type to `bool` to remove the need for such a cast.
Test Plan:
I ran llvm-project `check-all` under ASAN, no failures were reported
(other than obviously unrelated tests that were already failing in
ASAN buildbots).
Reviewers: gribozavr, gribozavr2, rsmith, bkramer, dblaikie
Subscribers: dexonsmith, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D73836
Nicolai Hähnle [Sat, 1 Feb 2020 14:12:24 +0000 (15:12 +0100)]
AMDGPU/GFX10: Fix NSA reassign pass when operands are undef
Summary:
Virtual registers that are undef have an empty LiveInterval at this
point, which means beginIndex() and endIndex() cannot be used. We
only need those indices to determine the range in which to scan for
affected other NSA instructions, and undef operands cannot contribute
to that range.
Reviewers: arsenm, rampitec, mareko
Subscribers: kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, hiraditya, kerbowa, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D73831
Michael Liao [Sat, 1 Feb 2020 21:16:17 +0000 (16:16 -0500)]
[clang][driver] Remove an unused parameter. NFC.
- Group relevant code together.
Craig Topper [Sat, 1 Feb 2020 20:24:53 +0000 (12:24 -0800)]
[X86] In X86FastEmitSSESelect, fall back to SelectionDAG if the inputs to the compare can't be found in registers.
We were checking that the original Value * for the compare operands
were null. But that can never happen.
I believe we intended to check for 0 registers here instead.
Fixes PR44749.
Craig Topper [Fri, 31 Jan 2020 05:23:05 +0000 (21:23 -0800)]
[X86] Don't exit from foldOffsetIntoAddress if the Offset is 0, but AM.Disp is non-zero.
This is an alternate fix for the issue D73606 was trying to
solve.
The main issue here is that we bailed out of
foldOffsetIntoAddress if Offset is 0. But if we just found a
symbolic displacement and AM.Disp became non-zero
earlier, we still need to validate that AM.Disp with the symbolic
displacement.
This is my second attempt at committing this after failing
build bots previously. One thing I realized about the previous
attempt is that its possible that AM.Disp is already non-zero
and the new Offset changes it back to zero. In that case my
previous attempt failed to update AM.Disp to zero. So this patch
removes the early out for 0 and appropriately handle the 0 case
in each check so we still update AM.Disp at the end.
Stefan Gränitz [Sat, 11 Jan 2020 00:09:42 +0000 (01:09 +0100)]
Add ThinLtoJIT example
Summary:
Prototype of a JIT compiler that utilizes ThinLTO summaries to compile modules ahead of time. This is an implementation of the concept I presented in my "ThinLTO Summaries in JIT Compilation" talk at the 2018 Developers' Meeting: http://llvm.org/devmtg/2018-10/talk-abstracts.html#lt8
Upfront the JIT first populates the *combined ThinLTO module index*, which provides fast access to the global call-graph and module paths by function. Next, it loads the main function's module and compiles it. All functions in the module will be emitted with prolog instructions that *fire a discovery flag* once execution reaches them. In parallel, the *discovery thread* is busy-watching the existing flags. Once it detects one has fired, it uses the module index to find all functions that are reachable from it within a given number of calls and submits their defining modules to the compilation pipeline.
While execution continues, more flags are fired and further modules added. Ideally the JIT can be tuned in a way, so that in the majority of cases the code on the execution path can be compiled ahead of time. In cases where it doesn't work, the JIT has a *definition generator* in place that loads modules if missing functions are reached.
Reviewers: lhames, dblaikie, jfb, tejohnson, pree-jackie, AlexDenisov, kavon
Subscribers: mgorny, mehdi_amini, inglorion, hiraditya, steven_wu, dexonsmith, arphaman, jfb, merge_guards_bot, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72486
Craig Topper [Sat, 1 Feb 2020 06:42:07 +0000 (22:42 -0800)]
[LegalizeTypes][X86] Add a new strategy for type legalizing f16 type that softens it to i16, but promotes to f32 around arithmetic ops.
This is based on this llvm-dev thread http://lists.llvm.org/pipermail/llvm-dev/2019-December/137521.html
The current strategy for f16 is to promote type to float every except where the specific width is required like loads, stores, and bitcasts. This results in rounding occurring in odd places instead of immediately after arithmetic operations. This interacts in weird ways with the __fp16 type in clang which is a storage only type where arithmetic is always promoted to float. InstCombine can remove some fpext/fptruncs around such arithmetic and turn it into arithmetic on half. This wouldn't be so bad if SelectionDAG was able to put those fpext/fpround back in when it promotes.
It is also not obvious how to handle to make the existing strategy work with STRICT fp. We need to use STRICT versions of the conversions which require chain operands. But if the conversions are created for a bitcast, there is no place to get an appropriate chain from.
This patch implements a different strategy where conversions are emitted directly around arithmetic operations. And otherwise its passed around as an i16 including in arguments and return values. This can result in more conversions between arithmetic operations, but is closer to matching the IR the frontend generates for __fp16. And it will allow us to use the chain from constrained arithmetic nodes to link the STRICT_FP_TO_FP16/STRICT_FP16_TO_FP that will need to be added. I've set it up so that each target can opt into the new behavior. Converting all the targets myself was more than I was able to handle.
Differential Revision: https://reviews.llvm.org/D73749
Mark de Wever [Sat, 1 Feb 2020 17:40:07 +0000 (18:40 +0100)]
[Sema] Remove a -Wrange warning from -Wall
During the review of D73007 Aaron Puchert mentioned
`warn_for_range_variable_always_copy` shouldn't be part of -Wall since
some coding styles require `for(const auto &bar : bars)`. This warning
would cause false positives for these users. Based on Aaron's proposal
refactored the warnings:
* -Wrange-loop-construct warns about possibly unintended constructor
calls. This is part of -Wall. It contains
* warn_for_range_copy: loop variable A of type B creates a copy from
type C
* warn_for_range_const_reference_copy: loop variable A is initialized
with a value of a different type resulting in a copy
* -Wrange-loop-bind-reference warns about misleading use of reference
types. This is not part of -Wall. It contains
* warn_for_range_variable_always_copy: loop variable A is always a copy
because the range of type B does not return a reference
Differential Revision: https://reviews.llvm.org/D73434
mydeveloperday [Sat, 1 Feb 2020 17:37:25 +0000 (17:37 +0000)]
[clang-format] Add option for not breaking line before ObjC params
Summary:
From `clang-format` version 3.7.0 and up, , there is no way to keep following format of ObjectiveC block:
```
- (void)_aMethod
{
[self.test1 t:self w:self callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
u = c;
}]
}
```
Regardless of the change in `.clang-format` configuration file, all parameters will be lined up so that colons will be on the same column, like following:
```
- (void)_aMethod
{
[self.test1 t:self
w:self
callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
u = c;
}]
}
```
Considering with ObjectiveC, the first code style is cleaner & more readable for some people, I've added a config option: `ObjCDontBreakBeforeNestedBlockParam` (boolean) so that if it is enable, the first code style will be favored.
Reviewed By: MyDeveloperDay
Patch By: ghvg1313
Tags: #clang, #clang-format
Differential Revision: https://reviews.llvm.org/D70926
Jacques Pienaar [Sat, 1 Feb 2020 16:54:06 +0000 (08:54 -0800)]
[mlir] Fix errors in release & no-assert
Seen on gcc 8, in release mode & assertions off warnings about logger,
made all statements referencing logger inside LLVM_DEBUG blocks and
ifdef a few variables only used in debug.
This is mechanical fix to get CI green.
Alex Richardson [Sat, 1 Feb 2020 15:49:35 +0000 (15:49 +0000)]
Don't mark MIPS TRAP as isTerminator
This was causing machine verifier errors when compiling libunwind.
Reviewed By: atanasyan
Differential Revision: https://reviews.llvm.org/D73648
Matt Arsenault [Tue, 21 Jan 2020 17:20:02 +0000 (12:20 -0500)]
AMDGPU/GlobalISel: Use more wide vector load/stores
This improves the type breakdown for some large vectors. For example,
we now get a <4 x s32> and s32 store instead of 5 s32 stores for
<5 x s32>.
Matt Arsenault [Mon, 20 Jan 2020 00:48:27 +0000 (19:48 -0500)]
AMDGPU/GlobalISel: Improve legalization of wide stores
This fixes legalizations of global stores > 128-bits. It seems work is
needed on how this split actually occurs. For example, we get the
right code for s160, with an s128 and s32 load, but get 5 s32 loads
for <5 x s32>.
Matt Arsenault [Tue, 21 Jan 2020 16:12:36 +0000 (11:12 -0500)]
GlobalISel: Support widening unmerge results with pointer source
Sylvestre Ledru [Sat, 1 Feb 2020 14:36:51 +0000 (15:36 +0100)]
Make StringRef's std::string conversion operator explicit
The build is currenly broken when perf or ffi are enabled for llvm
Just like in https://reviews.llvm.org/rG777180a32b61070a10dd330b4f038bf24e916af1
Simon Pilgrim [Sat, 1 Feb 2020 13:01:58 +0000 (13:01 +0000)]
Remove unused function. NFCI.
Simon Pilgrim [Sat, 1 Feb 2020 12:45:46 +0000 (12:45 +0000)]
[ValueTracking] Add DemandedElts support to computeKnownBits/ComputeNumSignBits (PR36319)
This patch adds initial support for a DemandedElts mask to the internal computeKnownBits/ComputeNumSignBits methods, matching the SelectionDAG and GlobalISel equivalents.
So far only a couple of instructions have been setup to handle the DemandedElts, the remainder still using the existing 'all elements' default. The plan is to extend support as we have test coverage.
Differential Revision: https://reviews.llvm.org/D73435
Fangrui Song [Sat, 1 Feb 2020 08:16:19 +0000 (00:16 -0800)]
[Frontend] Delete a redundant check of -pg for setFramePointer()
Driver errors if -fomit-frame-pointer is used together with -pg.
useFramePointerForTargetByDefault() returns true if -pg is specified.
=>
(!OmitFP && useFramePointerForTargetByDefault(Args, Triple)) is true
=>
We cannot get FramePointerKind::None
Alex Langford [Sat, 1 Feb 2020 05:59:51 +0000 (21:59 -0800)]
[lldb] Remove LanguageRuntime::GetOverrideExprOptions
LanguageRuntime::GetOverrideExprOptions is specific to clang and was
only overridden in RenderScriptRuntime. LanguageRuntime in shouldn't
have any knowledge of clang, so remove it from LanguageRuntime and leave
it only in RenderScriptRuntime.
Fangrui Song [Sat, 1 Feb 2020 05:00:28 +0000 (21:00 -0800)]
[ELF][Mips] Drop an unneeded config->relocatable check
Richard Smith [Sat, 1 Feb 2020 03:06:21 +0000 (19:06 -0800)]
Don't assume a reference refers to at least sizeof(T) bytes.
When T is a class type, only nvsize(T) bytes need be accessible through
the reference. We had matching bugs in the application of the
dereferenceable attribute and in -fsanitize=undefined.
Nicolas Vasilache [Sat, 1 Feb 2020 03:01:28 +0000 (22:01 -0500)]
[mlir][Linalg] NFC - Cleanup and split input file for roundtrip.mlir
Nico Weber [Sat, 1 Feb 2020 02:25:56 +0000 (21:25 -0500)]
[gn build] unbreak mac build after
133a31cef61c
Nico Weber [Sat, 1 Feb 2020 02:23:43 +0000 (21:23 -0500)]
[gn build] add asan runtime on linux and mac
This produces a seemingly-working dynamic (x64-only) asan dylib on macOS
and static libraries on Linux.
I've had this sitting in a branch for a long time and wanted to get
check-asan working before landing it, but smaller patches and fewer
local branches is probably better.
Jonas Devlieghere [Sat, 1 Feb 2020 00:17:28 +0000 (16:17 -0800)]
[lldb/Reproducers] Include string length in string (de)serialization.
This allows us to differentiate between an empty string and a nullptr.
(cherry picked from commit
53e206284fa715886020d6a5553bf791582850a3)
Matt Arsenault [Sat, 1 Feb 2020 00:38:31 +0000 (19:38 -0500)]
AMDGPU/GlobalISel: Fix forming G_TRUNC with vcc result
This somehow got lost when I fixed the boolean handling.
Matt Arsenault [Fri, 31 Jan 2020 23:14:50 +0000 (18:14 -0500)]
AMDGPU: Switch some tests to use generated checks
Control flow tests are particularly annoying, and it's probably better
to be have comprehensive check lines for them.
Richard Smith [Sat, 1 Feb 2020 01:05:27 +0000 (17:05 -0800)]
Fix wrong devirtualization when the final overrider in one base class
overrides the final overrider in a different base class.
Reid Kleckner [Fri, 31 Jan 2020 22:39:14 +0000 (14:39 -0800)]
[Support] Don't modify the current EH context during stack unwinding
Copy it instead. Otherwise, key registers (such as RBP) may get zeroed
out by the stack unwinder.
Fixes CrashRecoveryTest.DumpStackCleanup with MSVC in release builds.
Reviewed By: stella.stamenova
Differential Revision: https://reviews.llvm.org/D73809
Reid Kleckner [Sat, 1 Feb 2020 00:55:35 +0000 (16:55 -0800)]
Avoid std::tie in TypeSize.h
std::tie isn't saving much here, just use == && ==. No numbers to
support this, but std::tie is one of the most expensive instantiations.
Reid Kleckner [Sat, 1 Feb 2020 00:44:07 +0000 (16:44 -0800)]
Move DenseMapInfo traits to TypeSize.h
Saves 2427 unneeded includes of TypeSize.h, which instantiates
std::tie<uint64_t, bool>, which instantiates std::tuple<uint64_t, bool>,
which is slow.
I'll remove the tie in a follow-up, since it's just for operator==.
Stephan T. Lavavej [Sat, 1 Feb 2020 00:36:18 +0000 (16:36 -0800)]
[libcxx] [test] Update msvc_stdlib_force_include.h.
Restore features that are removed in C++20.
Vedant Kumar [Wed, 22 Jan 2020 03:04:27 +0000 (19:04 -0800)]
[lldb/TypeSystemClang] Use references in a static helper, NFC
Vedant Kumar [Wed, 22 Jan 2020 00:01:16 +0000 (16:01 -0800)]
[lldb/Value] Avoid reading more data than the host has available
Value::GetValueByteSize() reports the size of a Value as the size of its
underlying CompilerType. However, a host buffer that backs a Value may
be smaller than GetValueByteSize().
This situation arises when the host is only able to partially evaluate a
Value, e.g. because the expression contains DW_OP_piece.
The cleanest fix I've found to this problem is Greg's suggestion, which
is to resize the Value if (after evaluating an expression) it's found to
be too small. I've tried several alternatives which all (in one way or
the other) tried to teach the Value/ValueObjectChild system not to read
past the end of a host buffer, but this was flaky and impractical as it
isn't easy to figure out the host buffer's size (Value::GetScalar() can
point to somewhere /inside/ a host buffer, but you need to walk up the
ValueObject hierarchy to try and find its size).
This fixes an ASan error in lldb seen when debugging a clang binary.
I've added a regression test in test/functionalities/optimized_code. The
point of that test is not specifically to check that DW_OP_piece is
handled a particular way, but rather to check that lldb doesn't crash on
an input that it used to crash on.
Testing: check-lldb, and running the added tests using a sanitized lldb
--
Thanks to Jim for pointing out that an earlier version of this patch,
which simply changed the definition of Value::GetValueByteSize(), would
interact poorly with the ValueObject machinery.
Thanks also to Pavel who suggested a neat way to test this change
(which, incidentally, caught another ASan issue still present in the
original version of this patch).
rdar://
58665925
Differential Revision: https://reviews.llvm.org/D73148
Vedant Kumar [Fri, 31 Jan 2020 23:51:01 +0000 (15:51 -0800)]
[lldb/MCDisasm] Simplify predicates in MCDisasmInstance, NFC
David Blaikie [Fri, 31 Jan 2020 23:48:18 +0000 (15:48 -0800)]
DwarfDebug.cpp: Fix some indentation
Petr Hosek [Fri, 31 Jan 2020 23:57:18 +0000 (15:57 -0800)]
[CMake] compiler-rt: Add COMPILER_RT_BUILTINS_ENABLE_PIC
The configuration for -fPIC in the builtins library when built standalone
is unconditional, stating that the flags would "normally be added... by
the llvm cmake step"
This is untrue, as the llvm cmake step checks LLVM_ENABLE_PIC, which allows
a client to turn off -fPIC.
I've added an option when compiler-rt builtins are configured standalone, such
as when built as part of the LLVM runtimes system, to guard the application of
-fPIC for users that want it.
Patch By: JamesNagurne
Differential Revision: https://reviews.llvm.org/D72950
David Blaikie [Fri, 31 Jan 2020 18:32:28 +0000 (10:32 -0800)]
DebugInfo: Split DWARF: Hash non-member function child DIEs
Significant missing hashing - as per the comment this was only meant to
skip member functions (unspecified, but I think it's legible as member
function declarations, not definitions) but was skipping all named
subprograms (so only hashed child DIEs for member function definitions -
because they didn't have a direct name, but only a name given indirectly
in the DW_AT_specification-referenced DIE)
Matt Arsenault [Fri, 31 Jan 2020 22:28:25 +0000 (17:28 -0500)]
DAG: Check if a value is divergent before requiresUniformRegister
This avoids a potentially expensive scan if we already know it doesn't
matter.
Matt Arsenault [Fri, 31 Jan 2020 18:42:18 +0000 (13:42 -0500)]
Move target tests to target subdirectories
Alex Langford [Fri, 31 Jan 2020 23:21:09 +0000 (15:21 -0800)]
[lldb] Remove unused CPPLanguageRuntime dependency
Artur Pilipenko [Fri, 31 Jan 2020 23:18:59 +0000 (15:18 -0800)]
NFC. Comments cleanup in DSE::memoryIsNotModifiedBetween
Separated from https://reviews.llvm.org/D68006 review.