Jan Svoboda [Wed, 16 Dec 2020 13:26:45 +0000 (14:26 +0100)]
[clang][cli] Port LangOpts simple string based options to new option parsing system
Depends on D84670
Reviewed By: Bigcheese
Original patch by Daniel Grumberg.
Differential Revision: https://reviews.llvm.org/D84671
Jan Svoboda [Wed, 16 Dec 2020 12:17:24 +0000 (13:17 +0100)]
[clang][cli] Port TargetOpts simple string based options to new option parsing system
Depends on D84190
Reviewed By: Bigcheese
Original patch by Daniel Grumberg.
Differential Revision: https://reviews.llvm.org/D84668
Kazu Hirata [Fri, 18 Dec 2020 08:37:24 +0000 (00:37 -0800)]
[InlineCost] Implement cost-benefit-based inliner
This patch adds an alternative cost metric for the inliner to take
into account both the cost (i.e. size) and cycle count savings into
account.
Without this patch, we decide to inline a given call site if the size
of inlining the call site is below the threshold that is computed
according to the hotness of the call site.
This patch adds a new cost metric, turned off by default, to take over
the handling of hot call sites. Specifically, with the new cost
metric, we decide to inline a given call site if the ratio of cycle
savings to size exceeds a threshold. The cycle savings are computed
from call site costs, parameter propagation, folded conditional
branches, etc, all weighted by their respective profile counts. The
size is primarily the callee size, but we subtract call site costs and
the size of basic blocks that are never executed.
The new cost metric implicitly takes advantage of the machine function
splitter recently introduced by Snehasish Kumar, which dramatically
reduces the cost of duplicating (e.g. inlining) cold basic blocks by
placing cold basic blocks of hot functions in the .text.split
section.
We evaluated the new cost metric on clang bootstrap and SPECInt 2017.
For clang bootstrap, we observe 0.69% runtime improvement.
For SPECInt we report the change in IntRate the C/C++ benchmarks. All
benchmarks apart from perlbench and omnetpp improve, on average by
0.21% with the max for mcf at 1.96%.
Benchmark % Change
500.perlbench_r -0.45
502.gcc_r 0.13
505.mcf_r 1.96
520.omnetpp_r -0.28
523.xalancbmk_r 0.49
525.x264_r 0.00
531.deepsjeng_r 0.00
541.leela_r 0.35
557.xz_r 0.21
Differential Revision: https://reviews.llvm.org/D92780
Jan Svoboda [Wed, 16 Dec 2020 12:28:28 +0000 (13:28 +0100)]
[clang][cli] Port HeaderSearch simple string options to new option parsing system
Depends on D84669
Reviewed By: Bigcheese
Original patch by Daniel Grumberg.
Differential Revision: https://reviews.llvm.org/D84670
Siva Chandra Reddy [Fri, 18 Dec 2020 07:40:18 +0000 (23:40 -0800)]
[libc][NFC] Use `#include <math.h>` in utils/FPUtil/ManipulationFunctions.h.
This reverts commit
352cba2441c6c4e00f067c9c68358cc0a6a5fffb.
"add back math.h #include utils/FPUtil/ManipulationFunctions.h".
Using `<math.h>` correct so downstream setup should be fixed.
Jan Svoboda [Wed, 16 Dec 2020 12:14:50 +0000 (13:14 +0100)]
[clang][cli] Convert Analyzer option string based options to new option parsing system
Depends on D84185
Reviewed By: dexonsmith
Original patch by Daniel Grumberg.
Differential Revision: https://reviews.llvm.org/D84186
Richard Smith [Wed, 16 Dec 2020 21:51:56 +0000 (13:51 -0800)]
Following up on PR48517, fix handling of template arguments that refer
to dependent declarations.
Treat an id-expression that names a local variable in a templated
function as being instantiation-dependent.
This addresses a language defect whereby a reference to a dependent
declaration can be formed without any construct being value-dependent.
Fixing that through value-dependence turns out to be problematic, so
instead this patch takes the approach (proposed on the core reflector)
of allowing the use of pointers or references to (but not values of)
dependent declarations inside value-dependent expressions, and instead
treating template arguments as dependent if they evaluate to a constant
involving such dependent declarations.
This ends up affecting a bunch of OpenMP tests, due to OpenMP
imprecisely handling instantiation-dependent constructs, bailing out
early instead of processing dependent constructs to the extent possible
when handling the template.
QingShan Zhang [Fri, 18 Dec 2020 07:27:26 +0000 (07:27 +0000)]
[PowerPC] Select the D-Form load if we know its offset meets the requirement
The LD/STD likewise instruction are selected only when the alignment in
the load/store >= 4 to deal with the case that the offset might not be
known(i.e. relocations). That means we have to select the X-Form load
for %0 = load i64, i64* %arrayidx, align 2 In fact, we can still select
the D-Form load if the offset is known. So, we only query the load/store
alignment when we don't know if the offset is a multiple of 4.
Reviewed By: jji, Nemanjai
Differential Revision: https://reviews.llvm.org/D93099
Richard Smith [Fri, 18 Dec 2020 07:16:31 +0000 (23:16 -0800)]
Ensure that we transform types into the current instantiation even if
they're only instantiation-dependent.
Richard Smith [Thu, 16 Jul 2020 02:38:46 +0000 (19:38 -0700)]
Where possible, don't try to ask whether a template argument is
dependent until it's been converted to match its parameter.
The type of a non-type template parameter can in general affect whether
the template argument is dependent.
Note that this is not always possible. For template arguments that name
static local variables in templates, the type of the template parameter
affects whether the argument is dependent, so the query is imprecise
until we know the parameter type. For example, in:
template<typename T> void f() {
static const int n = 5;
typename T::template X<n> x;
}
... we don't know whether 'n' is dependent until we know whether the
corresponding template parameter is of type 'int' or 'const int&'.
Richard Smith [Thu, 17 Dec 2020 22:36:26 +0000 (14:36 -0800)]
DR2064: decltype(E) is only a dependent type if E is type-dependent, not
if E is merely instantiation-dependent.
Siva Chandra Reddy [Fri, 18 Dec 2020 06:55:18 +0000 (22:55 -0800)]
[libc][NFC] Use ASSERT_FP_EQ to comapre NaN values in tests.
This is a continuation of the previous CL which did a similar change in
other tests. To elaborate a little about why we need this - under C++
compilation with headers not from LLVM libc, libraries like libc++ and
libstdc++ provide their own math.h which undefine macros like `isnan`
and provide the overloaded C++ isnan functions which return a boolean
value instead of an integer value returned by the isnan macro.
Reshabh Sharma [Fri, 18 Dec 2020 06:39:01 +0000 (12:09 +0530)]
[LLD] Rename lld port driver entry function to a consistent name
Libraries linked to the lld elf library exposes a function named main.
When debugging code linked to such libraries and intending to set a
breakpoint at main, the debugger also sets breakpoint at the main
function at lld elf driver. The possible choice was to rename it to
link but that would again clash with lld::*::link. This patch tries
to consistently rename them to linkerMain.
Differential Revision: https://reviews.llvm.org/D91418
Mircea Trofin [Fri, 18 Dec 2020 03:01:56 +0000 (19:01 -0800)]
[NFC][utils] Factor remaining APIs under FunctionTestBuilder
Finishing the refactoring started in D93413.
Differential Revision: https://reviews.llvm.org/D93506
Yevgeny Rouban [Fri, 18 Dec 2020 05:47:13 +0000 (12:47 +0700)]
[IndVars] Fix adding trunc instructions to unwind blocks
Truncate instruction must not be inserted before landing pads.
The insertion point is fixed.
Richard Smith [Fri, 18 Dec 2020 05:27:11 +0000 (21:27 -0800)]
PR24076, PR33655, C++ CWG 1558: Consider the instantiation-dependence of
the nested-name-specifier when determining whether a qualified type is
instantiation-dependent.
Greg McGary [Wed, 14 Oct 2020 16:49:54 +0000 (09:49 -0700)]
[lld-macho][nfc] Refactor to accommodate paired relocs
This is a refactor to pave the way for supporting paired-ADDEND for ARM64. The only paired reloc type for X86_64 is SUBTRACTOR. In a later diff, I will add SUBTRACTOR for both X86_64 and ARM64.
* s/`getImplicitAddend`/`getAddend`/ because it handles all forms of addend: implicit, explicit, paired.
* add predicate `bool isPairedReloc()`
* check range of `relInfo.r_symbolnum` is internal, unrelated to user-input, so use `assert()`, not `error()`
* minor cleanups & rearrangements in `InputFile::parseRelocations()`
Differential Revision: https://reviews.llvm.org/D90614
Kazu Hirata [Fri, 18 Dec 2020 04:19:14 +0000 (20:19 -0800)]
[IVDescriptors] Remove getConsecutiveDirection (NFC)
The last use of the function was removed on Sep 18, 2016 in commit
5f8cc0c3469ba3a7aa440b43aaababa3a6274213.
The function was later moved to llvm/lib/Analysis/IVDescriptors.cpp on
Sep 12, 2018 in commit
7e98d69847aefb1028aaa7131b508f4b4e9896ae.
Kazu Hirata [Fri, 18 Dec 2020 03:53:09 +0000 (19:53 -0800)]
[Transforms] Use llvm::erase_if (NFC)
Hsiangkai Wang [Fri, 18 Dec 2020 03:37:23 +0000 (11:37 +0800)]
[RISCV] Remove NoVReg to avoid compile warning messages.
Rong Xu [Fri, 18 Dec 2020 03:13:19 +0000 (19:13 -0800)]
Fix clang-ppc64le-rhel buildbot build error
ix buildbot build error due to
commit
3733463d: [IR][PGO] Add hot func attribute and use hot/cold
attribute in func section
Tim Keith [Fri, 18 Dec 2020 03:08:15 +0000 (19:08 -0800)]
[flang] Fix -intrinsic-module-directory in flang script
The flang wrapper script that was created as bin/flang in an in-tree
build did not have a correct -intrinsic-module-directory option.
It was correct for out-of-tree builds and for both kinds of installs.
The fix is to pick the correct directory based on what exists.
The script is no longer configured by cmake (just copied) so that
mechanism can be deleted from the cmake file.
Differential Revision: https://reviews.llvm.org/D93496
Rong Xu [Fri, 18 Dec 2020 01:30:41 +0000 (17:30 -0800)]
[IR][PGO] Add hot func attribute and use hot/cold attribute in func section
Clang FE currently has hot/cold function attribute. But we only have
cold function attribute in LLVM IR.
This patch adds support of hot function attribute to LLVM IR. This
attribute will be used in setting function section prefix/suffix.
Currently .hot and .unlikely suffix only are added in PGO (Sample PGO)
compilation (through isFunctionHotInCallGraph and
isFunctionColdInCallGraph).
This patch changes the behavior. The new behavior is:
(1) If the user annotates a function as hot or isFunctionHotInCallGraph
is true, this function will be marked as hot. Otherwise,
(2) If the user annotates a function as cold or
isFunctionColdInCallGraph is true, this function will be marked as
cold.
The changes are:
(1) user annotated function attribute will used in setting function
section prefix/suffix.
(2) hot attribute overwrites profile count based hotness.
(3) profile count based hotness overwrite user annotated cold attribute.
The intention for these changes is to provide the user a way to mark
certain function as hot in cases where training input is hard to cover
all the hot functions.
Differential Revision: https://reviews.llvm.org/D92493
Monk Chiang [Thu, 17 Dec 2020 05:45:52 +0000 (13:45 +0800)]
[RISCV] Define vsadd/vsaddu/vssub/vssubu intrinsics.
We work with @rogfer01 from BSC to come out this patch.
Authored-by: Roger Ferrer Ibanez <rofirrim@gmail.com>
Co-Authored-by: ShihPo Hung <shihpo.hung@sifive.com>
Co-Authored-by: Monk Chiang <monk.chiang@sifive.com>
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D93366
Layton Kifer [Fri, 18 Dec 2020 02:21:42 +0000 (02:21 +0000)]
[DAGCombiner] Improve shift by select of constant
Clean up a TODO, to support folding a shift of a constant by a
select of constants, on targets with different shift operand sizes.
Reviewed By: RKSimon, lebedev.ri
Differential Revision: https://reviews.llvm.org/D90349
Nathan James [Fri, 18 Dec 2020 02:07:26 +0000 (02:07 +0000)]
[clangd] Print .clang-tidy configuration parsing errors using [ev]?log.
Currently warnings when parsing .clang-tidy are printed directly to errs.
This is less than ideal as there is no synchronisation printing to errs, leading to potential races.
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D93436
Greg McGary [Mon, 14 Dec 2020 03:31:33 +0000 (19:31 -0800)]
[lld-macho] Implement option: -undefined TREATMENT
TREATMENT can be `error`, `warning`, `suppress`, or `dynamic_lookup`
The `dymanic_lookup` remains unimplemented for now.
Differential Revision: https://reviews.llvm.org/D93263
Andrew Litteken [Mon, 31 Aug 2020 19:55:38 +0000 (14:55 -0500)]
[IRSim][IROutliner] Adding InstVisitor to disallow certain operations.
This adds a custom InstVisitor to return false on instructions that
should not be allowed to be outlined. These match the illegal
instructions in the IRInstructionMapper with exception of the addition
of the llvm.assume intrinsic.
Tests all the tests marked: illegal-*-.ll with a test for each kind of
instruction that has been marked as illegal.
Reviewers: jroelofs, paquette
Differential Revisions: https://reviews.llvm.org/D86976
River Riddle [Fri, 18 Dec 2020 01:10:12 +0000 (17:10 -0800)]
[mlir] Remove the MutableDictionaryAttr class
This class used to serve a few useful purposes:
* Allowed containing a null DictionaryAttr
* Provided some simple mutable API around a DictionaryAttr
The first of which is no longer an issue now that there is much better caching support for attributes in general, and a cache in the context for empty dictionaries. The second results in more trouble than it's worth because it mutates the internal dictionary on every action, leading to a potentially large number of dictionary copies. NamedAttrList is a much better alternative for the second use case, and should be modified as needed to better fit it's usage as a DictionaryAttrBuilder.
Differential Revision: https://reviews.llvm.org/D93442
Zakk Chen [Thu, 17 Dec 2020 05:59:09 +0000 (21:59 -0800)]
[RISCV] Define vlse/vsse intrinsics.
Define vlse/vsse intrinsics and lower to V instructions.
We work with @rogfer01 from BSC to come out this patch.
Authored-by: Roger Ferrer Ibanez <rofirrim@gmail.com>
Co-Authored-by: Zakk Chen <zakk.chen@sifive.com>
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D93445
Mitch Phillips [Fri, 18 Dec 2020 00:09:43 +0000 (16:09 -0800)]
Revert "[sanitizer-common] Force pickup of llvm-symbolizer from new binaries."
This reverts commit
66ee0d3d84a6ea04e895249aef2ea8a812664728.
Broke the bots, reverting for full fix.
Mitch Phillips [Fri, 18 Dec 2020 00:09:28 +0000 (16:09 -0800)]
Revert "[sanitizer-common] Pickup llvm-symbolizer from $OUT/bin IFF exists."
This reverts commit
30d292ddbb7ec84b422738cf52ee0cf49b0369f3.
Broke the bots, reverting for full fix.
Aart Bik [Thu, 17 Dec 2020 23:42:23 +0000 (15:42 -0800)]
[mlir][sparse] scalarize reductions in for-loops during sparse codegen
Reductions in innermost loops become harder for the backend to disambiguate
after bufferization into memrefs, resulting in less efficient load-update-store
cycles. By scalarizing innermost reductions, the backend is more likely to assign
a register to perform the reduction (also prepares vectorization). Even though
we could scalarize reductions for more outer loops and while-loops as well,
currently scalarization is only done for chains of innermost for-loops, where
it matters most, to avoid complicating codegen unnecessary (viz. adding lots
of yield instructions).
This CL also refactors condition simplification into the merger class,
where it belongs, so that conditions are simplified only once per loop
nest and not repeatedly as was currently done. This CL also fixes a few
minor bugs, some layout issues, and comments.
Reviewed By: penpornk
Differential Revision: https://reviews.llvm.org/D93143
Mehdi Amini [Fri, 18 Dec 2020 00:09:51 +0000 (00:09 +0000)]
Remove unneeded header include (NFC)
Sean Silva [Wed, 16 Dec 2020 00:47:19 +0000 (16:47 -0800)]
[mlir] Move `std.tensor_cast` -> `tensor.cast`.
This is almost entirely mechanical.
Differential Revision: https://reviews.llvm.org/D93357
Mehdi Amini [Thu, 17 Dec 2020 23:53:19 +0000 (23:53 +0000)]
Workaround around clang 5.0 bug by including SmallVector.h in LLVM.h (PR41549)
The forward declaration for SmallVector does not play well with clang-5.
Differential Revision: https://reviews.llvm.org/D93498
MaheshRavishankar [Thu, 17 Dec 2020 22:42:40 +0000 (14:42 -0800)]
[mlir][Linalg] Define a linalg.init_tensor operation.
This operation is used to materialize a tensor of a particular
shape. The shape could be specified as a mix of static and dynamic
values.
The use of this operation is to be an `init` tensor for Linalg
structured operation on tensors where the bounds of the computation
depends on the shape of the output of the linalg operation. The result
of this operation will be used as the `init` tensor of such Linalg
operations. To note,
1) The values in the tensor materialized is not used. Any operation to
which this is an init tensor is expected to overwrite the entire
tensor.
2) The tensor is materialized only for the shape of the output and to
make the loop bounds depend only on operands of the structured
operation.
Based on (1) and (2) it is assumed that these operations eventually go
away since they are only used in `dim` operations that can be
canonicalized to make this operation dead. Such canonicalization are
added here too.
Differential Revision: https://reviews.llvm.org/D93374
MaheshRavishankar [Thu, 17 Dec 2020 22:42:33 +0000 (14:42 -0800)]
[mlir] Add canonicalization from `tensor_cast` to `dim` op.
Fold a `tensor_cast` -> `dim` to take the `dim` of the original tensor.
Differential Revision: https://reviews.llvm.org/D93492
Nikita Popov [Thu, 17 Dec 2020 22:31:31 +0000 (23:31 +0100)]
[DSE] Add test for potential caching bug (NFC)
This one would miscompile if read-clobber checks switched to using
the EarlierAccess location, but the read cache was retained.
Tom Stellard [Thu, 17 Dec 2020 18:43:00 +0000 (10:43 -0800)]
CodeGen: Improve generated IR for __builtin_mul_overflow(uint, uint, int)
Add a special case for handling __builtin_mul_overflow with unsigned
inputs and a signed output to avoid emitting the __muloti4 library
call on x86_64. __muloti4 is not implemented in libgcc, so avoiding
this call fixes compilation of some programs that call
__builtin_mul_overflow with these arguments.
For example, this fixes the build of cpio with clang, which includes code from
gnulib that calls __builtin_mul_overflow with these argument types.
Reviewed By: vsk
Differential Revision: https://reviews.llvm.org/D84405
Sanjay Patel [Thu, 17 Dec 2020 17:03:55 +0000 (12:03 -0500)]
[VectorCombine] add tests for gep load with cast; NFC
Roman Lebedev [Thu, 17 Dec 2020 18:30:37 +0000 (21:30 +0300)]
[SimplifyCFG] Teach simplifyUnreachable() to preserve DomTree
Pretty boring, removeUnwindEdge() already known how to update DomTree,
so if we are to call it, we must first flush our own pending updates;
otherwise, we just stop predecessors from branching to us,
and for certain predecessors, stop their predecessors from
branching to them also.
Roman Lebedev [Thu, 17 Dec 2020 17:13:03 +0000 (20:13 +0300)]
[SimplifyCFG] ConstantFoldTerminator() already knows how to preserve DomTree
... so just ensure that we pass DomTreeUpdater it into it.
Fixes DomTree preservation for a number of tests,
all of which are marked as such so that they do not regress.
Roman Lebedev [Thu, 17 Dec 2020 16:57:42 +0000 (19:57 +0300)]
[SimplifyCFG] DeleteDeadBlock() already knows how to preserve DomTree
... so just ensure that we pass DomTreeUpdater it into it.
Fixes DomTree preservation for a large number of tests,
all of which are marked as such so that they do not regress.
Joachim Meyer [Thu, 17 Dec 2020 15:06:56 +0000 (16:06 +0100)]
Fix -Wno-error= parsing in clang-format.
As noted in https://reviews.llvm.org/D86137#2460135 parsing of
the clang-format parameter -Wno-error=unknown fails.
This currently is done by having `-Wno-error=unknown` as an option.
In this patch this is changed to make `-Wno-error=` parse an enum into a bit set.
This way the parsing is fixed and also we can possibly add new options easily.
Reviewed By: MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D93459
Azat Khuzhin [Thu, 17 Dec 2020 21:19:50 +0000 (16:19 -0500)]
[libc++] Fix extern C for __sanitizer_annotate_contiguous_container() (for gcc)
gcc supports it only at the beginning:
$ g++ -o /dev/null -c /tmp/test_extern.cpp
$ cat /tmp/test_extern.cpp
extern "C" __attribute__ ((__visibility__("default"))) int foo();
Otherwise:
$ g++ -o /dev/null -c /tmp/test_extern.cpp
/tmp/test_extern.cpp:1:52: error: expected unqualified-id before string constant
1 | __attribute__ ((__visibility__("default"))) extern "C" int foo();
| ^~~
$ cat /tmp/test_extern.cpp
__attribute__ ((__visibility__("default"))) extern "C" int foo();
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D93316
Nico Weber [Thu, 17 Dec 2020 21:19:06 +0000 (16:19 -0500)]
lld: Replace some lld::outs()s with message()
No behavior change.
River Riddle [Thu, 17 Dec 2020 20:24:45 +0000 (12:24 -0800)]
[mlir][IR][NFC] Move context/location parameters of builtin Type::get methods to the start of the parameter list
This better matches the rest of the infrastructure, is much simpler, and makes it easier to move these types to being declaratively specified.
Differential Revision: https://reviews.llvm.org/D93432
Bangtian Liu [Thu, 17 Dec 2020 21:00:20 +0000 (21:00 +0000)]
Revert "Ensure SplitEdge to return the new block between the two given blocks"
This reverts commit
d20e0c3444ad9ada550d9d6d1d56fd72948ae444.
Alex Zinenko [Thu, 17 Dec 2020 20:38:15 +0000 (21:38 +0100)]
[mlir] Partially update the conversion-to-llvm document
This document was not updated after the LLVM dialect type system had been
reimplemented and was using an outdated syntax. Rewrite the part of the
document that concerns type conversion and prepare the ground for splitting it
into a document that explains how built-in types are converted and a separate
document that explains how standard types and functions are converted, which
will better correspond to the fact that built-in types do not belong to the
standard dialect.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D93486
Nico Weber [Thu, 17 Dec 2020 14:23:02 +0000 (09:23 -0500)]
clang-cl: Remove /Zd flag
cl.exe doesn't understand Zd (in either MSVC 2017 or 2019), so neiter
should we. It used to do the same as `-gline-tables-only` which is
exposed as clang-cl flag as well, so if you want this behavior, use
`gline-tables-only`. That makes it clear that it's a clang-cl-only flag
that won't work with cl.exe.
Motivated by the discussion in D92958.
Differential Revision: https://reviews.llvm.org/D93458
Nico Weber [Tue, 8 Dec 2020 14:35:58 +0000 (09:35 -0500)]
[gn build] Link with -Wl,--gdb-index when linking with LLD
For full-debug-info (is_debug=true / symbol_level=2 builds), this makes
linking 15% slower, but gdb startup 1500% faster (for lld: link time
3.9s->4.4s, gdb load time >30s->2s).
For link time, I ran
bench.py -o {noindex,index}.txt \
sh -c 'rm out/gn/bin/lld && ninja -C out/gn lld'
and then `ministat noindex.txt index.txt`:
```
x noindex.txt
+ index.txt
N Min Max Median Avg Stddev
x 5 3.784461 4.0200169 3.8452811 3.8754988 0.
089902595
+ 5 4.32496 4.6058481 4.3361208 4.4141198 0.
12288267
Difference at 95.0% confidence
0.538621 +/- 0.15702
13.8981% +/- 4.05161%
(Student's t, pooled s = 0.107663)
```
For gdb load time I loaded the crash in PR48392 with
gdb -ex r --args ../out/gn/bin/ld64.lld.darwinnew @response.txt
and just stopped the time until the crash got displayed with a stopwatch
a few times. So the speedup there is less precise, but it's so
pronounced that that's ok (loads ~instantly with the patch, takes a very
long time without it).
Only doing this for LLD because I haven't tried it with other linkers.
Differential Revision: https://reviews.llvm.org/D92844
Johannes Doerfert [Thu, 17 Dec 2020 02:29:26 +0000 (20:29 -0600)]
[OpenMP][NFC] Provide a new remark and documentation
If a GPU function is externally reachable we give up trying to find the
(unique) kernel it is called from. This can hinder optimizations. Emit a
remark and explain mitigation strategies.
Reviewed By: tianshilei1992
Differential Revision: https://reviews.llvm.org/D93439
Nick Desaulniers [Thu, 17 Dec 2020 20:34:01 +0000 (12:34 -0800)]
[AttrDocs] document always_inline
GNU documentaion for always_inline:
https://gcc.gnu.org/onlinedocs/gcc/Inline.html
GNU documentation for function attributes:
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
Microsoft documentation for __force_inline:
https://docs.microsoft.com/en-us/cpp/cpp/inline-functions-cpp
Reviewed By: ojeda
Differential Revision: https://reviews.llvm.org/D68410
Javier Setoain [Thu, 17 Dec 2020 20:15:41 +0000 (12:15 -0800)]
[mlir][ArmSVE] Add documentation generation
Adds missing cmake command to generate documentation for ArmSVE
Dialect.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D93465
Nico Weber [Thu, 17 Dec 2020 20:09:51 +0000 (15:09 -0500)]
[gn build] (manually) merge
f4c8b8031800
Nikita Popov [Thu, 17 Dec 2020 19:39:46 +0000 (20:39 +0100)]
[DSE] Add more tests for read clobber location (NFC)
Arthur Eubanks [Thu, 17 Dec 2020 01:14:13 +0000 (17:14 -0800)]
[test] Factor out creation of copy of SCC Nodes into function
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D93434
Christian Sigg [Thu, 17 Dec 2020 19:35:48 +0000 (20:35 +0100)]
Fix NDEBUG build after https://reviews.llvm.org/D93005.
Differential Revision: https://reviews.llvm.org/D93480
Tony [Thu, 17 Dec 2020 02:45:47 +0000 (02:45 +0000)]
[NFC][AMDGPU] Reorganize description of scratch handling
Differential Revision: https://reviews.llvm.org/D93440
Brian Gesiak [Thu, 10 Dec 2020 03:37:20 +0000 (22:37 -0500)]
[mlir][LLVMIR] Add 'llvm.switch' op
The LLVM IR 'switch' instruction allows control flow to be transferred
to one of any number of branches depending on an integer control value,
or a default value if the control does not match any branch values. This patch
adds `llvm.switch` to the MLIR LLVMIR dialect, as well as translation routines
for lowering it to LLVM IR.
To store a variable number of operands for a variable number of branch
destinations, the new op makes use of the `AttrSizedOperandSegments`
trait. It stores its default branch operands as one segment, and all
remaining case branches' operands as another. It also stores pairs of
begin and end offset values to delineate the sub-range of each case branch's
operands. There's probably a better way to implement this, since the
offset computation complicates several parts of the op definition. This is the
approach I settled on because in doing so I was able to delegate to the default
op builder member functions. However, it may be preferable to instead specify
`skipDefaultBuilders` in the op's ODS, or use a completely separate
approach; feedback is welcome!
Another contentious part of this patch may be the custom printer and
parser functions for the op. Ideally I would have liked the MLIR to be
printed in this way:
```
llvm.switch %0, ^bb1(%1 : !llvm.i32) [
1: ^bb2,
2: ^bb3(%2, %3 : !llvm.i32, !llvm.i32)
]
```
The above would resemble how LLVM IR is formatted for the 'switch'
instruction. But I found it difficult to print and parse something like
this, whether I used the declarative assembly format or custom functions.
I also was not sure a multi-line format would be welcome -- it seems
like most MLIR ops do not use newlines. Again, I'd be happy to hear any
feedback here as well, or on any other aspect of the patch.
Differential Revision: https://reviews.llvm.org/D93005
Valentin Clement [Thu, 17 Dec 2020 19:07:29 +0000 (14:07 -0500)]
[openmp] Remove clause from OMPKinds.def and use OMP.td info
Remove the OpenMP clause information from the OMPKinds.def file and use the
information from the new OMP.td file. There is now a single source of truth for the
directives and clauses.
To avoid generate lots of specific small code from tablegen, the macros previously
used in OMPKinds.def are generated almost as identical. This can be polished and
possibly removed in a further patch.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D92955
Derek Schuff [Thu, 17 Dec 2020 18:25:11 +0000 (10:25 -0800)]
[WebAssembly][lld] Don't mark a file live from an undefine symbol
Live symbols should only cause the files in which they are defined
to become live.
For now this is only tested in emscripten: we're continuing
to work on reducing the test case further for an lld-style
unit test.
Differential Revision: https://reviews.llvm.org/D93472
Hansang Bae [Thu, 17 Dec 2020 00:18:12 +0000 (18:18 -0600)]
[OpenMP] Add definitions for 5.1 interop to omp.h
Peter Collingbourne [Wed, 16 Dec 2020 19:24:30 +0000 (11:24 -0800)]
scudo: Adjust test to use correct check for primary allocations.
canAllocate() does not take into account the header size so it does
not return the right answer in borderline cases. There was already
code handling this correctly in isTaggedAllocation() so split it out
into a separate function and call it from the test.
Furthermore the test was incorrect when MTE is enabled because MTE
does not pattern fill primary allocations. Fix it.
Differential Revision: https://reviews.llvm.org/D93437
Richard Uhler [Thu, 17 Dec 2020 18:37:26 +0000 (18:37 +0000)]
Add brief description of dialects doc section.
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D93466
Baptiste Saleil [Thu, 17 Dec 2020 18:18:43 +0000 (13:18 -0500)]
[PowerPC] Rename the vector pair intrinsics and builtins to replace the _mma_ prefix by _vsx_
On PPC, the vector pair instructions are independent from MMA.
This patch renames the vector pair LLVM intrinsics and Clang builtins to replace the _mma_ prefix by _vsx_ in their names.
We also move the vector pair type/intrinsic/builtin tests to their own files.
Differential Revision: https://reviews.llvm.org/D91974
Kostya Kortchinsky [Fri, 11 Dec 2020 22:04:47 +0000 (14:04 -0800)]
[scudo][standalone] Allow the release of smaller sizes
Initially we were avoiding the release of smaller size classes due to
the fact that it was an expensive operation, particularly on 32-bit
platforms. With a lot of batches, and given that there are a lot of
blocks per page, this was a lengthy operation with little results.
There has been some improvements since then to the 32-bit release,
and we still have some criterias preventing us from wasting time
(eg, 9x% free blocks in the class size, etc).
Allowing to release blocks < 128 bytes helps in situations where a lot
of small chunks would not have been reclaimed if not for a forced
reclaiming.
Additionally change some `CHECK` to `DCHECK` and rearrange a bit the
code.
I didn't experience any regressions in my benchmarks.
Differential Revision: https://reviews.llvm.org/D93141
George [Thu, 17 Dec 2020 17:27:17 +0000 (09:27 -0800)]
Add call site location getter to C API
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D93334
LLVM GN Syncbot [Thu, 17 Dec 2020 17:28:45 +0000 (17:28 +0000)]
[gn build] Port
dae34463e3e
Andrew Litteken [Tue, 15 Sep 2020 23:05:38 +0000 (18:05 -0500)]
[IRSim][IROutliner] Adding the extraction basics for the IROutliner.
Extracting the similar regions is the first step in the IROutliner.
Using the IRSimilarityIdentifier, we collect the SimilarityGroups and
sort them by how many instructions will be removed. Each
IRSimilarityCandidate is used to define an OutlinableRegion. Each
region is ordered by their occurrence in the Module and the regions that
are not compatible with previously outlined regions are discarded.
Each region is then extracted with the CodeExtractor into its own
function.
We test that correctly extract in:
test/Transforms/IROutliner/extraction.ll
test/Transforms/IROutliner/address-taken.ll
test/Transforms/IROutliner/outlining-same-globals.ll
test/Transforms/IROutliner/outlining-same-constants.ll
test/Transforms/IROutliner/outlining-different-structure.ll
Recommit of
bf899e891387d07dfd12de195ce2a16f62afd5e0 fixing memory
leaks.
Reviewers: paquette, jroelofs, yroux
Differential Revision: https://reviews.llvm.org/D86975
Arthur Eubanks [Wed, 9 Dec 2020 19:51:00 +0000 (11:51 -0800)]
[gn build] Add symbol_level to adjust debug info level
is_debug by default makes symbol_level = 2 and !is_debug means by
default symbol_level = 0.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D92958
Fangrui Song [Thu, 17 Dec 2020 17:16:37 +0000 (09:16 -0800)]
[LangRef] Update new ssp/sspstrong/sspreq semantics after D91816
Reviewed By: nickdesaulniers
Differential Revision: https://reviews.llvm.org/D93422
Siva Chandra Reddy [Thu, 17 Dec 2020 17:12:51 +0000 (09:12 -0800)]
[libc][Obvious] Fix typo is wrappergen unittest.
Michał Górny [Thu, 17 Dec 2020 12:12:24 +0000 (13:12 +0100)]
[lldb] [Process/FreeBSDRemote] Use RegSetKind consistently [NFC]
Use RegSetKind enum for register sets everything, rather than int.
Always spell it as 'RegSetKind', without unnecessary 'enum'. Add
missing switch case. While at it, use uint32_t for regnums
consistently.
Differential Revision: https://reviews.llvm.org/D93450
Michał Górny [Wed, 16 Dec 2020 14:51:04 +0000 (15:51 +0100)]
[lldb] [Process/FreeBSDRemote] Replace GetRegisterSetCount()
Replace the wrong code in GetRegisterSetCount() with a constant return.
The original code passed register index in place of register set index,
effectively getting always true. Correcting the code to check for
register set existence is not possible as LLDB supports only eliminating
last register sets. Just return the full number for now which should
be NFC.
Differential Revision: https://reviews.llvm.org/D93396
Paula Toth [Thu, 17 Dec 2020 16:56:15 +0000 (08:56 -0800)]
[libc] Add python3 to libc buildbot depedencies.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D93463
Siva Chandra Reddy [Wed, 16 Dec 2020 19:30:37 +0000 (11:30 -0800)]
[libc] Refactor WrapperGen to make the flow cleaner.
Reviewed By: michaelrj
Differential Revision: https://reviews.llvm.org/D93417
Pavel Labath [Thu, 17 Dec 2020 16:10:17 +0000 (17:10 +0100)]
Revert "[lldb] Make CommandInterpreter's execution context the same as debugger's one."
This reverts commit
a01b26fb51c710a3a8ef88cc83b0701461f5b9ab, because it
breaks the "finish" command in some way -- the command does not
terminate after it steps out, but continues running the target. The
exact blast radius is not clear, but it at least affects the usage of
the "finish" command in TestGuiBasicDebug.py. The error is *not*
gui-related, as the same issue can be reproduced by running the same
steps outside of the gui.
There is some kind of a race going on, as the test fails only 20% of the
time on the buildbot.
Tomas Matheson [Thu, 17 Dec 2020 16:42:32 +0000 (11:42 -0500)]
Detect section type conflicts between functions and variables
If two variables are declared with __attribute__((section(name))) and
the implicit section types (e.g. read only vs writeable) conflict, an
error is raised. Extend this mechanism so that an error is raised if the
section type implied by a function's __attribute__((section)) conflicts
with that of another variable.
Valentin Clement [Thu, 17 Dec 2020 16:32:52 +0000 (11:32 -0500)]
[flang][openacc] Enforce restriction on routine directive and clauses
This patch add some checks for the restriction on the routine directive
and fix several issue at the same time.
Validity tests have been added in a separate file than acc-clause-validity.f90 since this one
became quite large. I plan to split the larger file once on-going review are done.
Reviewed By: sameeranjoshi
Differential Revision: https://reviews.llvm.org/D92672
Nabeel Omer [Thu, 17 Dec 2020 16:06:45 +0000 (16:06 +0000)]
[DebugInfo] Avoid re-ordering assignments in LCSSA
The LCSSA pass makes use of a function insertDebugValuesForPHIs() to
propogate dbg.value() intrinsics to newly inserted PHI instructions. Faulty
behaviour occurs when the parent PHI of a newly inserted PHI is not the
most recent assignment to a source variable. insertDebugValuesForPHIs ends
up propagating a value that isn't the most recent assignemnt.
This change removes the call to insertDebugValuesForPHIs() from LCSSA,
preventing incorrect dbg.value intrinsics from being propagated.
Propagating variable locations between blocks will occur later, during
LiveDebugValues.
Differential Revision: https://reviews.llvm.org/D92576
Jinsong Ji [Thu, 17 Dec 2020 15:13:45 +0000 (10:13 -0500)]
[PowerPC][NFC] Cleanup PPCCTRLoopsVerify pass
The PPCCTRLoop pass has been moved to HardwareLoops,
so the comments and some useless code are deprecated now.
Reviewed By: #powerpc, nemanjai
Differential Revision: https://reviews.llvm.org/D93336
Jon Chesterfield [Thu, 17 Dec 2020 16:09:32 +0000 (16:09 +0000)]
[amdgpu] Default to code object v3
[amdgpu] Default to code object v3
v4 is not yet readily available, and doesn't appear
to be implemented in the back end
Reviewed By: t-tye, yaxunl
Differential Revision: https://reviews.llvm.org/D93258
Lei Zhang [Thu, 17 Dec 2020 15:55:45 +0000 (10:55 -0500)]
[mlir][spirv] NFC: Shuffle code around to better follow convention
This commit shuffles SPIR-V code around to better follow MLIR
convention. Specifically,
* Created IR/, Transforms/, Linking/, and Utils/ subdirectories and
moved suitable code inside.
* Created SPIRVEnums.{h|cpp} for SPIR-V C/C++ enums generated from
SPIR-V spec. Previously they are cluttered inside SPIRVTypes.{h|cpp}.
* Fixed include guards in various header files (both .h and .td).
* Moved serialization tests under test/Target/SPIRV.
* Renamed TableGen backend -gen-spirv-op-utils into -gen-spirv-attr-utils
as it is only generating utility functions for attributes.
Reviewed By: mravishankar
Differential Revision: https://reviews.llvm.org/D93407
Bangtian Liu [Thu, 17 Dec 2020 15:58:45 +0000 (15:58 +0000)]
Ensure SplitEdge to return the new block between the two given blocks
This PR implements the function splitBasicBlockBefore to address an
issue
that occurred during SplitEdge(BB, Succ, ...), inside splitBlockBefore.
The issue occurs in SplitEdge when the Succ has a single predecessor
and the edge between the BB and Succ is not critical. This produces
the result ‘BB->Succ->New’. The new function splitBasicBlockBefore
was added to splitBlockBefore to handle the issue and now produces
the correct result ‘BB->New->Succ’.
Below is an example of splitting the block bb1 at its first instruction.
/// Original IR
bb0:
br bb1
bb1:
%0 = mul i32 1, 2
br bb2
bb2:
/// IR after splitEdge(bb0, bb1) using splitBasicBlock
bb0:
br bb1
bb1:
br bb1.split
bb1.split:
%0 = mul i32 1, 2
br bb2
bb2:
/// IR after splitEdge(bb0, bb1) using splitBasicBlockBefore
bb0:
br bb1.split
bb1.split
br bb1
bb1:
%0 = mul i32 1, 2
br bb2
bb2:
Differential Revision: https://reviews.llvm.org/D92200
Amy Huang [Thu, 17 Dec 2020 15:48:20 +0000 (07:48 -0800)]
[llvm-symbolizer][Windows] Add start line when searching in line table sections.
Fixes issue where if a line section doesn't start with a line number
then the addresses at the beginning of the section don't have line numbers.
For example, for a line section like this
```
0001:
00000010-
00000014, line/column/addr entries = 1
7
00000013 !
```
a line number wouldn't be found for addresses from 10 to 12.
This matches behavior when using the DIA SDK.
Differential Revision: https://reviews.llvm.org/D93306
Simon Pilgrim [Thu, 17 Dec 2020 15:51:13 +0000 (15:51 +0000)]
[SampleFDO] Fix uninitialized field warnings. NFCI.
Seems to have been caused by D93254 which added the SecHdrTableEntry::LayoutIndex field.
Valentin Clement [Thu, 17 Dec 2020 15:50:31 +0000 (10:50 -0500)]
[flang][openacc] Update serial construct clauses for OpenACC 3.1
Update the allowed clauses for the SERIAL construct for the new OpenACC 3.1
specification.
Reviewed By: sameeranjoshi
Differential Revision: https://reviews.llvm.org/D92123
Zequan Wu [Tue, 8 Dec 2020 00:37:14 +0000 (16:37 -0800)]
[Clang] Make nomerge attribute a function attribute as well as a statement attribute.
Differential Revision: https://reviews.llvm.org/D92800
Simon Pilgrim [Thu, 17 Dec 2020 15:22:52 +0000 (15:22 +0000)]
[TableGen] Return const std::string& in InstrMap getName()/getFilterClass() methods. NFCI.
Avoid temp std::string instances - we're never keeping these around, just printing them to streams, converting to StringRef etc.
Florian Hahn [Thu, 17 Dec 2020 14:42:12 +0000 (14:42 +0000)]
[InstCombine] Preserve !annotation on newly created instructions.
If the source instruction has !annotation metadata, all instructions
created during combining should also have it. Tell the builder to
add it.
The !annotation system was discussed on llvm-dev as part of
'RFC: Combining Annotation Metadata and Remarks'
(http://lists.llvm.org/pipermail/llvm-dev/2020-November/146393.html)
This patch is based on an earlier patch by Francis Visoiu Mistrih.
Reviewed By: thegameg, lebedev.ri
Differential Revision: https://reviews.llvm.org/D91444
Yvan Roux [Thu, 17 Dec 2020 15:08:23 +0000 (16:08 +0100)]
[ARM][MachineOutliner] Fix costs model.
Fix candidates calls costs models allocation and prepare stack fixups
handling.
Differential Revision: https://reviews.llvm.org/D92933
Simon Pilgrim [Thu, 17 Dec 2020 14:34:13 +0000 (14:34 +0000)]
[TableGen] Make InstrMap::getFilterClass() const. NFCI.
Reported by cppcheck.
I've run clang-format across all the InstrMap accessors as well.
Guillaume Chatelet [Thu, 17 Dec 2020 14:49:28 +0000 (15:49 +0100)]
Fix dead link
serge-sans-paille [Fri, 11 Dec 2020 10:34:54 +0000 (11:34 +0100)]
Remove Python2 fallback and only advertise Python3 in the doc
Differential Revision: https://www.youtube.com/watch?v=RsL0cipURA0
Adhemerval Zanella [Thu, 10 Dec 2020 14:06:49 +0000 (14:06 +0000)]
[lld] [ELF] AArch64: Handle DT_AARCH64_VARIANT_PCS
As indicated by AArch64 ELF specification, symbols with st_other
marked with STO_AARCH64_VARIANT_PCS indicates it may follow a variant
procedure call standard with different register usage convention
(for instance SVE calls).
Static linkers must preserve the marking and propagate it to the dynamic
symbol table if any reference or definition of the symbol is marked with
STO_AARCH64_VARIANT_PCS, and add a DT_AARCH64_VARIANT_PCS dynamic tag if
there are R_<CLS>_JUMP_SLOT relocations that reference that symbols.
It implements https://bugs.llvm.org/show_bug.cgi?id=48368.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D93045
Adhemerval Zanella [Thu, 10 Dec 2020 14:03:22 +0000 (14:03 +0000)]
[llvm-readobj/elf] - AArch64: Handle AARCH64_VARIANT_PCS for GNUStyle
It mimics the GNU readelf where it prints a [VARIANT_PCS] for symbols
with st_other with STO_AARCH64_VARIANT_PCS.
Reviewed By: grimar, MaskRay
Differential Revision: https://reviews.llvm.org/D93044
Adhemerval Zanella [Mon, 14 Dec 2020 17:24:53 +0000 (17:24 +0000)]
[obj2yaml][yaml2obj] - Add AArch64 STO_AARCH64_VARIANT_PCS support
Reviewed By: grimar, MaskRay
Differential Revision: https://reviews.llvm.org/D93235
Nathan James [Thu, 17 Dec 2020 14:09:08 +0000 (14:09 +0000)]
[clang-tidy][NFC] Reduce copies of Intrusive..FileSystem
Swapped a few instances where a move is more optimal or the target doesn't need to hold a reference.