Nico Weber [Fri, 4 Jun 2021 14:37:53 +0000 (10:37 -0400)]
[gn build] (manually) port
de07b1e84d8de9
Alexey Bataev [Thu, 3 Jun 2021 19:13:10 +0000 (12:13 -0700)]
[OPENMP]Fix PR49790: Constexpr values not handled in `omp declare mapper` clause.
Patch allows using of constexpr vars evaluatable to constant calue to be
used in declare mapper construct.
Differential Revision: https://reviews.llvm.org/D103642
Valentin Clement [Fri, 4 Jun 2021 14:25:50 +0000 (10:25 -0400)]
[mlir][openacc] Conversion of data operands in acc.data to LLVM IR dialect
Convert data operands from the acc.data operation using the same conversion pattern than D102170.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D103332
Andrzej Warzynski [Wed, 2 Jun 2021 20:53:02 +0000 (21:53 +0100)]
[flang][driver] Add checks for missing option arguments
With this patch, the following invocation of the frontend driver will
return an error:
```
flang-new -fc1 input-file.f90 -o
```
Similar logic applies to other options that require arguments.
Similar checks are already available in the compiler driver, flang-new
(that's implemented in clangDriver).
Differential Revision: https://reviews.llvm.org/D103554
Sanjay Patel [Fri, 4 Jun 2021 14:15:22 +0000 (10:15 -0400)]
[InstCombine] add tests for pow() reassociation; NFC
Baseline tests for D102574
Nico Weber [Fri, 4 Jun 2021 14:02:22 +0000 (10:02 -0400)]
Temporarily remove one of the tests added in
effb87dfa810a
It fails on some Linux systems. Remove the test until we've figured
out what's going on. See https://crbug.com/1216005 for details.
mydeveloperday [Fri, 4 Jun 2021 13:59:12 +0000 (14:59 +0100)]
[clang-format] NFC, 2% improvement in overall clang-formatted status (now 50%)
Nico Weber [Fri, 4 Jun 2021 13:51:24 +0000 (09:51 -0400)]
Revert "[InstrProfiling] If no value profiling, make data variable private and (for Windows) use one comdat"
This reverts commit
a14fc749aab2c8e1a45d19d512255ebfc69357c3.
Breaks check-profile on macOS. See https://reviews.llvm.org/D103372 for details.
Louis Dionne [Wed, 2 Jun 2021 14:41:37 +0000 (10:41 -0400)]
[libc++] Use the using_if_exists attribute when provided
As discussed on cfe-dev [1], use the using_if_exists Clang attribute when
the compiler supports it. This makes it easier to port libc++ on top of
new platforms that don't fully support the C Standard library.
Previously, libc++ would fail to build when trying to import a missing
declaration in a <cXXXX> header. With the attribute, the declaration will
simply not be imported into namespace std, and hence it won't be available
for libc++ to use. In many cases, the declarations were *not* actually
required for libc++ to work (they were only surfaced for users to use
them as std::XXXX), so not importing them into namespace std is acceptable.
The same thing could be achieved by conscious usage of `#ifdef` along
with platform detection, however that quickly creates a maintenance
problem as libc++ is ported to new platforms. Furthermore, this problem
is exacerbated when mixed with vendor internal-only platforms, which can
lead to difficulties maintaining a downstream fork of the library.
For the time being, we only use the using_if_exists attribute when it
is supported. At some point in the future, we will start removing #ifdef
paths that are unnecessary when the attribute is supported, and folks
who need those #ifdef paths will be required to use a compiler that
supports the attribute.
[1]: http://lists.llvm.org/pipermail/cfe-dev/2020-June/066038.html
Differential Revision: https://reviews.llvm.org/D90257
Stuart Brady [Fri, 4 Jun 2021 13:44:12 +0000 (14:44 +0100)]
[OpenCL][NFC] Test commit: tidy up whitespace in comment
Nicholas Guy [Wed, 26 May 2021 13:49:58 +0000 (14:49 +0100)]
[AArch64] Further enable UnrollAndJam
Due to the dependency on runtime unrolling, UnJ is only
enabled by default on in-order scheduling models,
and if a cpu is specified through -mcpu.
Differential Revision: https://reviews.llvm.org/D103604
Yaxun (Sam) Liu [Thu, 27 May 2021 19:51:02 +0000 (15:51 -0400)]
[HIP] Fix spack HIP device lib detection
spack HIP device library is installed at amdgcn directory under llvm/clang
directory.
This patch fixes detection of HIP device library for spack.
Reviewed by: Artem Belevich, Harmen Stoppels
Differential Revision: https://reviews.llvm.org/D103281
Sanjay Patel [Fri, 4 Jun 2021 13:03:32 +0000 (09:03 -0400)]
[InstCombine] add/adjust test comments; NFC
Follow-up to post-commit comment:
https://reviews.llvm.org/rG23a116c8c446
Jan Svoboda [Wed, 2 Jun 2021 12:49:14 +0000 (14:49 +0200)]
[clang][deps] Support object files
When a project uses PCH with explicit modules, the build will look like this:
1. scan PCH dependencies
2. explicitly build PCH
3. scan TU dependencies
4. explicitly build TU
Step 2 produces an object file for the PCH, which the dependency scanner needs to read in step 3. This patch adds support for this.
The `clang-scan-deps` invocation in the attached test would fail without this change.
Depends on D103516.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D103519
Andrzej Warzynski [Fri, 4 Jun 2021 12:58:03 +0000 (13:58 +0100)]
[flang][driver] Add support for `-module-suffix`
This option is supported in `f18`, but not yet available in `flang-new`.
It is required in order to call `flang-new` from the `flang` bash
script.
Differential Revision: https://reviews.llvm.org/D103613
Mirko Brkusanin [Thu, 3 Jun 2021 16:09:45 +0000 (18:09 +0200)]
[AMDGPU][GlobalISel] Legalize G_ABS
Legalize and select G_ABS so that we can use llvm.abs intrinsic
Differential Revision: https://reviews.llvm.org/D102391
Jan Svoboda [Wed, 2 Jun 2021 12:07:14 +0000 (14:07 +0200)]
[clang][deps] Add argument for customizing PCM paths
Dependency scanning currently performs an implicit build. When testing that Clang can build modules with the command-lines generated by `clang-scan-deps`, the actual compilation would overwrite artifacts created during the scan, which makes debugging harder than it should be and can lead to errors in multi-step builds.
To prevent this, this patch adds new flag to `clang-scan-deps` that allows developers to customize the directory to use when generating module map paths, instead of always using the module cache. Moreover, the explicit context hash in now part of the PCM path, which will be useful in D102488, where the context hash can change due to command-line pruning.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D103516
Dmitry Preobrazhensky [Fri, 4 Jun 2021 12:38:37 +0000 (15:38 +0300)]
[AMDGPU][MC][NFC] Fixed typos in parser
Differential Revision: https://reviews.llvm.org/D103680
Jean Perier [Fri, 4 Jun 2021 12:27:23 +0000 (14:27 +0200)]
[flang] Generate type info symbols outside of derived type scopes
A recent change was made in https://reviews.llvm.org/D101482 to cope
with kind parameters. It had the side effect of generating some type
info symbols inside derived type scopes. Derived type scope symbols
are meant for components, and other/later compilation phases might
choke when finding compiler generated symbols there that are not
components.
This patch preserves the fix from D101482 while still generating the
symbols outside of derived type scopes.
Differential Revision: https://reviews.llvm.org/D103621
Balázs Kéri [Fri, 4 Jun 2021 10:21:20 +0000 (12:21 +0200)]
[clang][AST] Set correct DeclContext in ASTImporter lookup table for ParmVarDecl.
ParmVarDecl is created with translation unit as the parent DeclContext
and later moved to the correct DeclContext. ASTImporterLookupTable
should be updated at this move.
Reviewed By: martong
Differential Revision: https://reviews.llvm.org/D103231
Bradley Smith [Wed, 26 May 2021 11:07:17 +0000 (12:07 +0100)]
[AArch64][SVE] Add support for using reverse forms of SVE2 shifts
When using and ACLE intrinsic for an SVE2 shift, if the predicate passed
has all relevant lanes active, then use a reversed version of the
instruction if beneficial.
Christian Sigg [Thu, 3 Jun 2021 07:25:22 +0000 (09:25 +0200)]
[mlir] Catch nonconvertible types in async conversion
Reviewed By: ezhulenev, ftynse
Differential Revision: https://reviews.llvm.org/D103592
Sanjay Patel [Thu, 3 Jun 2021 20:13:16 +0000 (16:13 -0400)]
[InstCombine] convert lshr to ashr to eliminate cast op
This is similar to
b865eead7657 ( D103617 ) and fixes:
https://llvm.org/PR50575
41b71f718b94c6f12b did this and more (noted with TODO
comments in the tests), but it didn't handle the case
where the destination is narrower than the source, so
it got reverted.
This is a simple match-and-replace. If there's evidence
that the TODO cases are useful, we can revisit/extend.
Sanjay Patel [Thu, 3 Jun 2021 19:53:11 +0000 (15:53 -0400)]
[InstCombine] add tests for sext-of-trunc-of-lshr; NFC
Nico Weber [Fri, 4 Jun 2021 10:46:19 +0000 (06:46 -0400)]
Revert "[gn build] port
d1d36f7ad (llvm-tapi-diff)"
This reverts commit
13155138c1ce1e91032d467e20e557f9cdbf08f5.
d1d36f7ad was reverted in
5337c7550d.
Jeremy Morse [Fri, 4 Jun 2021 10:18:40 +0000 (11:18 +0100)]
Re-land
ae4303b42c, "Track PHI values through register coalescing"
Was reverted in
0507fc2ffc9, in phi-coalesce-subreg.mir I'd explicitly named
some passes to run instead of specifying a range. As a result some
two-address-instrs weren't correctly rewritten and the verifier got upset.
Original commit message:
[DebugInstrRef][2/3] Track PHI values through register coalescing
In the instruction referencing variable location model, we store variable
locations that point at PHIs in MachineFunction during register allocation.
Unfortunately, register coalescing can substantially change the locations
of registers, and so that PHI-variable-location side table needs
maintenence during the pass.
This patch builds an index from the side table, and whenever a vreg gets
coalesced into another vreg, update the index to record the new vreg that
the PHI happens in. It also accepts a limited range of subregister
coalescing, for example merging a subregister into a larger class.
Differential Revision: https://reviews.llvm.org/D86813
Thomas Preud'homme [Fri, 4 Jun 2021 08:55:33 +0000 (09:55 +0100)]
[test] Fix accidental match in parent_recurse_depth.s
The CHECK-NOT directives in
tools/llvm-dwarfdump/X86/parent_recurse_depth.s can accidentally match
something in the path of the object file created by yaml2obj, for
example:
llvm-project/llvm/test/tools/llvm-dwarfdump/X86/parent_recurse_depth.s:13:12:
error: ONE-NOT: excluded string found in input
^
<stdin>:1:22: note: found here
builds/llvm-projects/mainline/release/test/tools/llvm-dwarfdump/X86/Output/parent_recurse_depth.s.tmp.o: file format elf64-x86-64
^~~~
This commit alleviate this issue by consuming the file name from the
output, forcing all the CHECK-NOT to match what comes after.
Reviewed By: Higuoxing
Differential Revision: https://reviews.llvm.org/D103676
Raphael Isemann [Fri, 4 Jun 2021 08:59:31 +0000 (10:59 +0200)]
[lldb][NFC] Remove a redundant call to weak_ptr::expired
The `lock` call directly will check for us if the `weak_ptr` is expired and
returns an invalid `shared_ptr` (which we correctly handle), so this check is
redundant.
Reviewed By: JDevlieghere
Differential Revision: https://reviews.llvm.org/D103442
Martin Storsjö [Tue, 1 Jun 2021 09:04:58 +0000 (09:04 +0000)]
[libcxx] Don't use an undefined '+' in unsigned/octal/hexal print formats
If building code like this:
unsigned long val = 1000;
snprintf(buf, sizeof(buf), "%+lu", val);
with clang, clang warns
warning: flag '+' results in undefined behavior with 'u' conversion specifier [-Wformat]
Therefore, don't construct such undefined format strings. (There's
no compiler warnings here, as the compiler can't inspect dynamically
assembled format strings.)
This fixes number formatting in mingw-w64 if built with
`__USE_MINGW_ANSI_STDIO` defined (there, the '+' flag causes a
leading plus to be printed when formatting unsigned numbers too,
while the '+' flag doesn't cause any extra leading plus in other
stdio implementations).
Differential Revision: https://reviews.llvm.org/D103444
Fraser Cormack [Thu, 27 May 2021 12:45:23 +0000 (13:45 +0100)]
[SelectionDAG] Extend FoldConstantVectorArithmetic to SPLAT_VECTOR
This patch extends the SelectionDAG's ability to constant-fold vector
arithmetic to include support for SPLAT_VECTOR. This is not only for
scalable-vector types but also for fixed-length vector types, which
helps Hexagon in a couple of cases.
The original RISC-V test case was in fact an infinite DAGCombine loop.
The pattern `and (truncate v1), (truncate v2)` can be combined to
`truncate (and v1, v2)` but the truncate can similarly be combined back
to `truncate (and v1, v2)` (but, crucially, only when one of `v1` or
`v2` is a constant vector).
It wasn't exposed in on fixed-length types because a TRUNCATE of a
constant BUILD_VECTOR was folded into the BUILD_VECTOR itself, whereas
this did not happen for the equivalent (scalable-vector) SPLAT_VECTOR.
Reviewed By: RKSimon, craig.topper
Differential Revision: https://reviews.llvm.org/D103246
Tobias Gysi [Fri, 4 Jun 2021 08:18:19 +0000 (08:18 +0000)]
[mlir][linalg] Cleanup left over uses of deprecated LinalgOp methods.
Replace all remaining uses of deprecated Structured Op Interface methods. This patch is based on https://reviews.llvm.org/D103394.
Differential Revision: https://reviews.llvm.org/D103673
Tim Northover [Wed, 5 May 2021 12:12:55 +0000 (13:12 +0100)]
AArch64: support atomic zext/sextloads
Diana Picus [Mon, 31 May 2021 08:51:11 +0000 (08:51 +0000)]
[flang] Change capitalization for Adjustl/r
Rename the definitions of the character runtime functions Adjustl and
Adjustr (used to be AdjustL and AdjustR respectively).
Also add unit tests (and move some of the helpers to the top of the
file, since they're now used in more than one place).
Differential Revision: https://reviews.llvm.org/D103392
Esme-Yi [Fri, 4 Jun 2021 08:14:47 +0000 (08:14 +0000)]
[Debug-Info] handle DW_CC_pass_by_value/DW_CC_pass_by_reference under strict DWARF.
Summary: When -strict-dwarf=true is specified, the calling convention info
DW_CC_pass_by_value or DW_CC_pass_by_reference can only be generated at DWARF5.
Reviewed By: shchenz, dblaikie
Differential Revision: https://reviews.llvm.org/D103300
Yilong Guo [Fri, 4 Jun 2021 07:37:21 +0000 (09:37 +0200)]
[Format] Fix incorrect pointer detection
https://llvm.org/PR50429
Before:
void f() { f(float(1), a *a); }
After:
void f() { f(float(1), a * a); }
Signed-off-by: Yilong Guo <yilong.guo@intel.com>
Reviewed By: HazardyKnusperkeks, curdeius
Differential Revision: https://reviews.llvm.org/D103589
ShihPo Hung [Thu, 3 Jun 2021 08:10:21 +0000 (16:10 +0800)]
[Sema][RISCV][SVE] Allow ?: to select Typedef BuiltinType in C
This patch solves an error such as:
incompatible operand types ('vbool4_t' (aka '__rvv_bool4_t') and '__rvv_bool4_t')
when one of the value is a TypedefType of the other value in ?:.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D103603
Muhammad Omair Javaid [Fri, 4 Jun 2021 06:56:28 +0000 (11:56 +0500)]
Add LLDB in release binaries by default
LLDB is currently not selected in LLVM release testing and thus it
doesnt make its way into prebuilt binaries which build with default
configuration. This patch enables LLDB by default in test-release
script.
Assuming LLDB build by default was disabled back in 2016 LLDB support
for various architectures has a long way since then. It has buildbots
for most architectures and supports a case to be included by default.
Also lldb build can easily be disabled in case some release managers
choose to do so.
Reviewed By: tstellar
Differential Revision: https://reviews.llvm.org/D101864
madhur13490 [Wed, 26 May 2021 05:47:03 +0000 (11:17 +0530)]
[AMDGPU] [IndirectCalls] Don't propagate attributes to address taken functions and their callees
Don't propagate launch bound related attributes to
address taken functions and their callees. The idea
is to do a traversal over the call graph starting at
address taken functions and erase the attributes
set by previous logic i.e. process().
This two phase approach makes sure that we don't
miss out on deep nested callees from address taken
functions as a function might be called directly as
well as indirectly.
This patch is also reattempt to D94585 as latent issues
are fixed in hasAddressTaken function in the recent
past.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D103138
hsmahesha [Fri, 4 Jun 2021 05:46:46 +0000 (11:16 +0530)]
Revert "[AMDGPU] Increase alignment of LDS globals if necessary before LDS lowering."
This reverts commit
d71ff907ef23eaef86ad66ba2d711e4986cd6cb2.
Cyndy Ishida [Fri, 4 Jun 2021 03:53:06 +0000 (20:53 -0700)]
Revert "[llvm] llvm-tapi-diff"
This reverts commit
d1d36f7ad2ae82bea8a6fcc40d6c42a72e21f096.
Reverting this patch to investigate linux bot failures
+ fix with author offline
hsmahesha [Fri, 4 Jun 2021 04:04:37 +0000 (09:34 +0530)]
[AMDGPU] Increase alignment of LDS globals if necessary before LDS lowering.
Before packing LDS globals into a sorted structure, make sure that
their alignment is properly updated based on their size. This will make
sure that the members of sorted structure are properly aligned, and
hence it will further reduce the probability of unaligned LDS access.
Reviewed By: rampitec
Differential Revision: https://reviews.llvm.org/D103261
Arthur Eubanks [Fri, 4 Jun 2021 01:57:36 +0000 (18:57 -0700)]
[NFC] Remove checking pointee type for byval/preallocated type
These currently always require a type parameter. The bitcode reader
already upgrades old bitcode without the type parameter to use the
pointee type.
Kostya Kortchinsky [Thu, 3 Jun 2021 19:11:05 +0000 (12:11 -0700)]
[scudo] Rework Vector/String
Some platforms (eg: Trusty) are extremelly memory constrained, which
doesn't necessarily work well with some of Scudo's current assumptions.
`Vector` by default (and as such `String` and `ScopedString`) maps a
page, which is a bit of a waste. This CL changes `Vector` to use a
buffer local to the class first, then potentially map more memory if
needed (`ScopedString` currently are all stack based so it would be
stack data). We also want to allow a platform to prevent any dynamic
resizing, so I added a `CanGrow` templated parameter that for now is
always `true` but would be set to `false` on Trusty.
Differential Revision: https://reviews.llvm.org/D103641
Nico Weber [Fri, 4 Jun 2021 01:01:11 +0000 (21:01 -0400)]
Revert "Update and improve compiler-rt tests for -mllvm -asan_use_after_return=(never|[runtime]|always)."
This reverts commit
41b3088c3f33d712e3d2f64b66ae4eb701fa4bfb.
Doesn't build on macOS, see comments on https://reviews.llvm.org/D103304
Nico Weber [Thu, 3 Jun 2021 19:29:22 +0000 (15:29 -0400)]
[lld/mac] Add test coverage for --reproduce + -flat_namespace
Works fine already, now it has a test too.
Differential Revision: https://reviews.llvm.org/D103643
Wenlei He [Thu, 3 Jun 2021 20:42:24 +0000 (13:42 -0700)]
[CSSPGO][llvm-profgen] Make extended binary the default output format
Make extended binary the default output format for CSSPGO. This avoids having to pass flag every time when generating profile. It also matches llvm-profdata where binary profile is the default (should we switch to extbinary as default for llvm-profdata?).
We plan to compress name table for context profile, which depends on the built-in compression of extbinary.
Differential Revision: https://reviews.llvm.org/D103650
Craig Topper [Fri, 4 Jun 2021 00:31:54 +0000 (17:31 -0700)]
[RISCV] Simplify some code in RISCVInsertVSETVLI by calling an existing function that does the same thing. NFCI
Stella Laurenzo [Thu, 3 Jun 2021 23:38:12 +0000 (16:38 -0700)]
[NFC] Add ArrayRef includes to two files.
These started failing on one of our buildbots. I didn't completely root cause the situation and just added the explicit includes that correct the issue.
Reviewed By: rriddle, jpienaar
Differential Revision: https://reviews.llvm.org/D103657
MaheshRavishankar [Thu, 3 Jun 2021 23:25:56 +0000 (16:25 -0700)]
[mlir][SPIRV] Add lowering for math.log1p operation to SPIR-V dialect.
Differential Revision: https://reviews.llvm.org/D103635
Nico Weber [Thu, 3 Jun 2021 23:22:21 +0000 (19:22 -0400)]
[gn build] port
d1d36f7ad (llvm-tapi-diff)
River Riddle [Thu, 3 Jun 2021 23:03:57 +0000 (16:03 -0700)]
[mlir-lsp-server] Add support for tracking the use/def chains of symbols
This revision adds assembly state tracking for uses of symbols, allowing for go-to-definition and references support for SymbolRefAttrs.
Differential Revision: https://reviews.llvm.org/D103585
Yaxun (Sam) Liu [Wed, 2 Jun 2021 22:24:12 +0000 (18:24 -0400)]
[HIP] Fix amdgcn builtin for long type
Currently some amdgcn builtins are defined with long int type,
which causes invalid IR on Windows since long int is 32 bit
on Windows whereas these builtins have 64 bit arguments.
long long int type cannot be used since it is 128 bit in OpenCL.
This patch uses 64 bit int type instead of long int to define 64 bit int
arguments or return for amdgcn builtins.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D103563
Amy Zhuang [Thu, 3 Jun 2021 22:27:25 +0000 (15:27 -0700)]
[mlir] Remove redundant loads
Reviewed By: vinayaka-polymage, bondhugula
Differential Revision: https://reviews.llvm.org/D103294
Arthur Eubanks [Mon, 31 May 2021 16:37:11 +0000 (09:37 -0700)]
[TargetLowering] Only inspect attributes in the arguments for ArgListEntry
Parameter attributes are considered part of the function [1], and like
mismatched calling conventions [2], we can't have the verifier check for
mismatched parameter attributes.
Issues can be diagnosed with D103412.
[1] https://llvm.org/docs/LangRef.html#parameter-attributes
[2] https://llvm.org/docs/FAQ.html#why-does-instcombine-simplifycfg-turn-a-call-to-a-function-with-a-mismatched-calling-convention-into-unreachable-why-not-make-the-verifier-reject-it
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D101806
Arthur Eubanks [Mon, 31 May 2021 16:15:25 +0000 (09:15 -0700)]
[BuildLibCalls] Properly set ABI attributes on arguments
Some floating point lib calls have ABI attributes that need to be set on
the caller. Found via D103412.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D103415
peter klausler [Thu, 3 Jun 2021 00:33:34 +0000 (17:33 -0700)]
[flang] Fix spurious "already declared" errors for interfaces
When a subroutine or function symbol is defined in an INTERFACE
block, it's okay if a symbol of the same name appears in a
scope between the global scope and the scope of the INTERFACE.
Differential Revision: https://reviews.llvm.org/D103580
Louis Dionne [Thu, 3 Jun 2021 22:26:31 +0000 (18:26 -0400)]
[libc++] Simplify apple-install-libcxx since we always use the same CMake cache
Fangrui Song [Thu, 3 Jun 2021 22:26:34 +0000 (15:26 -0700)]
[CMake][ELF] Add -fno-semantic-interposition for GCC and Clang>=13
In a `-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_LINK_LLVM_DYLIB=on -DCLANG_LINK_CLANG_DYLIB=on`
build, libLLVM-13git.so is 2% smaller and libclang-cpp.so is 1% smaller (on top of -Wl,-Bsymbolic-functions).
There may be some small performance improvement as well because GCC
-fPIC suppresses interprocedural optimizations for non-inline
definitions by default.
Note: we cannot add -fno-semantic-interposition for Clang<13. Clang<13's
implementation additionally optimizes global variables, which is incompatible
with unfortunate ELF -fno-pic default: direct access relocations for external
data. If the executable has a -fno-pic object file referencing a global variable
declared in a public header, the direct access relocation will cause a copy
relocation. The executable and libLLVM.so/libclang-cpp.so will disagree on the
address.
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D102453
peter klausler [Thu, 3 Jun 2021 00:28:50 +0000 (17:28 -0700)]
[flang] Catch errors in function calls instead of crashing
Add some missing error messages, and permit the appearance
of EntityDetails symbols in dummy argument type characterization.
Differential Revision: https://reviews.llvm.org/D103576
peter klausler [Thu, 3 Jun 2021 00:25:29 +0000 (17:25 -0700)]
[flang] Emit error about missing interface when needed
When a procedure pointer with no interface is called by a
function reference, complain about the lack.
Differential Revision: https://reviews.llvm.org/D103573
Louis Dionne [Thu, 3 Jun 2021 22:18:41 +0000 (18:18 -0400)]
[libc++] Define _LIBCPP_NO_NATIVE_SEMAPHORES even outside of pthread
<semaphore> needs to know about whether native semaphores are supported
or not, even if we're not using the pthread API.
Louis Dionne [Thu, 3 Jun 2021 22:15:13 +0000 (18:15 -0400)]
[libc++] Also build the static library in the Apple cache
peter klausler [Thu, 3 Jun 2021 00:21:41 +0000 (17:21 -0700)]
[flang] Fix crash on structure constructor as selector
In something like "ASSOCIATE(X=>T(1))", the "T(1)" is parsed
as a Variable because it looks like a function reference or
array reference; if it turns out to be a structure constructor,
which is something we can't know until we're able to attempt
generic interface resolution in semantics, the parse tree needs
to be fixed up by replacing the Variable with an Expr.
The compiler could already do this for putative function references
encapsulated as Exprs, so this patch moves some code around and
adds parser::Selector to the overloads of expression analysis.
Differential Revision: https://reviews.llvm.org/D103572
Philip Reames [Thu, 3 Jun 2021 21:35:43 +0000 (14:35 -0700)]
Kill a variable which is unused after
cddcc4cf [nfc]
zero9178 [Thu, 3 Jun 2021 21:28:47 +0000 (23:28 +0200)]
[NFC] Add missing includes for LLVM_ENABLE_MODULES builds
Building LLVM with the LLVM_ENABLE_MODULES cmake option fails when the modules are being compiled due to missing includes. This is a side effect of some transitive includes that changed recently.
Differential Revision: https://reviews.llvm.org/D103645
Leonard Chan [Thu, 3 Jun 2021 21:22:37 +0000 (14:22 -0700)]
[NFC][compiler-rt][hwasan] Refactor hwasan functions
This moves the implementations for HandleTagMismatch, __hwasan_tag_mismatch4,
and HwasanAtExit from hwasan_linux.cpp to hwasan.cpp and declares them in hwasan.h.
This way, calls to those functions can be shared with the fuchsia implementation
without duplicating code.
Differential Revision: https://reviews.llvm.org/D103562
peter klausler [Thu, 3 Jun 2021 00:13:55 +0000 (17:13 -0700)]
[flang] Support known constant lengths in DynamicType
The constexpr-capable class evaluate::DynamicType represented
CHARACTER length only with a nullable pointer into the declared
parameters of types in the symbol table, which works fine for
anything with a declaration but turns out to not suffice to
describe the results of the ACHAR() and CHAR() intrinsic
functions. So extend DynamicType to also accommodate known
constant CHARACTER lengths, too; use them for ACHAR & CHAR;
clean up several use sites and fix regressions found in test.
Differential Revision: https://reviews.llvm.org/D103571
Teresa Johnson [Wed, 2 Jun 2021 23:37:23 +0000 (16:37 -0700)]
[LTO] Fix -fwhole-program-vtables handling after HIP ThinLTO patch
A recent change (D99683) to support ThinLTO for HIP caused a regression
when compiling cuda code with -flto=thin -fwhole-program-vtables.
Specifically, we now get an error:
error: invalid argument '-fwhole-program-vtables' only allowed with '-flto'
This error is coming from the device offload cc1 action being set up for
the cuda compile, for which -flto=thin doesn't apply and gets dropped.
This is a regression, but points to a potential issue that was silently
occurring before the patch, details below.
Before D99683, the check for fwhole-program-vtables in the driver looked
like:
if (WholeProgramVTables) {
if (!D.isUsingLTO())
D.Diag(diag::err_drv_argument_only_allowed_with)
<< "-fwhole-program-vtables"
<< "-flto";
CmdArgs.push_back("-fwhole-program-vtables");
}
And D.isUsingLTO() returned true since we have -flto=thin. However,
because the cuda cc1 compile is doing device offloading, which didn't
support any LTO, there was other code that suppressed -flto* options
from being passed to the cc1 invocation. So the cc1 invocation silently
had -fwhole-program-vtables without any -flto*. This seems potentially
problematic, since if we had any virtual calls we would get type test
assume sequences without the corresponding LTO pass that handles them.
However, with the patch, which adds support for device offloading LTO
option -foffload-lto=thin, the code has changed so that we set a bool
IsUsingLTO based on either -flto* or -foffload-lto*, depending on
whether this is the device offloading action. For the device offload
action in our compile, since we don't have -foffload-lto, IsUsingLTO is
false, and the check for LTO with -fwhole-program-vtables now fails.
What we should do is only pass through -fwhole-program-vtables to the
cc1 invocation that has LTO enabled (either the device offload action
with -foffload-lto, or the non-device offload action with -flto), and
otherwise drop the -fwhole-program-vtables for the non-LTO action.
Then we should error only if we have -fwhole-program-vtables without any
-f*lto* options.
Differential Revision: https://reviews.llvm.org/D103579
Philip Reames [Thu, 3 Jun 2021 21:14:59 +0000 (14:14 -0700)]
A couple style tweaks on top of
5c0d1b2f9 [nfc]
Philip Reames [Thu, 3 Jun 2021 21:03:21 +0000 (14:03 -0700)]
[LoopUnroll] Eliminate PreserveCondBr parameter and fix a bug in the process
This builds on D103584. The change eliminates the coupling between unroll heuristic and implementation w.r.t. knowing when the passed in trip count is an exact trip count or a max trip count. In theory the new code is slightly less powerful (since it relies on exact computable trip counts), but in practice, it appears to cover all the same cases. It can also be extended if needed.
The test change shows what appears to be a bug in the existing code around the interaction of peeling and unrolling. The original loop only ran 8 iterations. The previous output had the loop peeled by 2, and then an exact unroll of 8. This meant the loop ran a total of 10 iterations which appears to have been a miscompile.
Differential Revision: https://reviews.llvm.org/D103620
peter klausler [Thu, 3 Jun 2021 00:09:42 +0000 (17:09 -0700)]
[flang] Catch procedure pointer interface error
A procedure pointer is allowed to name a specific intrinsic function
from F'2018 table 16.2 as its interface, but not other intrinsic
procedures. Catch this error, and thereby also fix a crash resulting
from a failure later in compilation from failed characteristics;
while here, also catch the similar error with initializers.
Differential Revision: https://reviews.llvm.org/D103570
Fangrui Song [Thu, 3 Jun 2021 20:43:19 +0000 (13:43 -0700)]
[test] Update more clang/test/Profile tests
Julien Pagès [Thu, 3 Jun 2021 20:32:15 +0000 (16:32 -0400)]
[AMDGPU] Fix a crash when selecting a particular case of buffer_load_format_d16
In this particular example, we had a crash when compiling it
for several architectures. This patch extends the legalization
of extract_subvector to avoid this problem.
Differential Revision: https://reviews.llvm.org/D103344
Fangrui Song [Thu, 3 Jun 2021 20:40:01 +0000 (13:40 -0700)]
[test] Update c-linkage-available_externally.c
peter klausler [Thu, 3 Jun 2021 00:02:43 +0000 (17:02 -0700)]
[flang] Accept BOZ in array constructors w/o types
As a benign extension common to other Fortran compilers,
accept BOZ literals in array constructors w/o explicit
types, treating them as integers.
Differential Revision: https://reviews.llvm.org/D103569
Jinsong Ji [Thu, 3 Jun 2021 20:08:35 +0000 (20:08 +0000)]
[Constants][PowerPC] Check exactlyValue for ppc_fp128 in isNullValue
PPC_FP128 determines isZero/isNan/isInf using high-order double value
only. Checking isZero/isNegative might return the isNullValue unexpectedly.
eg:
0xM0000000000000000FFFFFFFFFFFFFFFFF
isZero, but it is not NullValue.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D103634
Fangrui Song [Thu, 3 Jun 2021 20:16:13 +0000 (13:16 -0700)]
[InstrProfiling] If no value profiling, make data variable private and (for Windows) use one comdat
`__profd_*` variables are referenced by code only when value profiling is
enabled. If disabled (e.g. default -fprofile-instr-generate), the symbols just
waste space on ELF/Mach-O. We change the comdat symbol from `__profd_*` to
`__profc_*` because an internal symbol does not provide deduplication features
on COFF. The choice doesn't matter on ELF.
(In -DLLVM_BUILD_INSTRUMENTED_COVERAGE=on build, there is now no `__profd_*` symbols.)
On Windows this enables further optimization. We are no longer affected by the
link.exe limitation: an external symbol in IMAGE_COMDAT_SELECT_ASSOCIATIVE can
cause duplicate definition error.
https://lists.llvm.org/pipermail/llvm-dev/2021-May/150758.html
We can thus use llvm.compiler.used instead of llvm.used like ELF (D97585).
This avoids many `/INCLUDE:` directives in `.drectve`.
Here is rnk's measurement for Chrome:
```
This reduced object file size of base_unittests.exe, compiled with coverage, optimizations, and gmlt debug info by 10%:
#BEFORE
$ find . -iname '*.obj' | xargs du -b | awk '{ sum += $1 } END { print sum}'
1047758867
$ du -cksh base_unittests.exe
82M base_unittests.exe
82M total
# AFTER
$ find . -iname '*.obj' | xargs du -b | awk '{ sum += $1 } END { print sum}'
937886499
$ du -cksh base_unittests.exe
78M base_unittests.exe
78M total
```
Reviewed By: davidxl, rnk
Differential Revision: https://reviews.llvm.org/D103372
Kevin Athey [Thu, 3 Jun 2021 19:40:14 +0000 (12:40 -0700)]
Update and improve compiler-rt tests for -mllvm -asan_use_after_return=(never|[runtime]|always).
In addition:
- optionally add global flag to capture compile intent for UAR:
__asan_detect_use_after_return_always.
The global is a SANITIZER_WEAK_ATTRIBUTE.
for issue: https://github.com/google/sanitizers/issues/1394
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D103304
peter klausler [Wed, 2 Jun 2021 23:59:31 +0000 (16:59 -0700)]
[flang] Fix folding of CMPLX
The code for folding calls to the intrinsic function CMPLX was
incorrectly dependent on the number of arguments to distinguish its
two cases (conversion from one kind of complex to another, and
composition of a complex value from real & imaginary parts).
This was wrong since the optional KIND= argument has already been
taken into account by intrinsic processing; instead, the type of
the first argument should decide the issue.
Differential Revision: https://reviews.llvm.org/D103568
Brendon Cahoon [Sat, 22 May 2021 17:14:58 +0000 (13:14 -0400)]
[GlobalISel] Add G_SBFX/G_UBFX to computeKnownBits
Differential Revision: https://reviews.llvm.org/D102969
Nikita Popov [Thu, 3 Jun 2021 19:41:21 +0000 (21:41 +0200)]
[LoopUnroll] Add additional test with one unpredictable exit (NFC)
One exit is unpredictable, the other has a known trip count. For
one function the predictable exit is the latch exit, for the other
the non-latch exit. Currently they are treated differently.
Louis Dionne [Thu, 3 Jun 2021 18:14:57 +0000 (14:14 -0400)]
[libc++] Implement LWG3435 (constraints on reverse_iterator and move_iterator)
peter klausler [Wed, 2 Jun 2021 23:54:42 +0000 (16:54 -0700)]
[flang] Fix crashes due to failure to find a subprogram
In error recovery situations, the mappings from source locations
to scopes were failing in a way that tripped some asserts.
Specifically, FindPureProcedureContaining() wasn't coping well
when starting at the global scope. (And since the global scope
no longer has a source range, clean up the Semantics constructor
to avoid confusion.)
Differential Revision: https://reviews.llvm.org/D103567
Fangrui Song [Thu, 3 Jun 2021 19:36:27 +0000 (12:36 -0700)]
[docs] Update llvm-cov gcov
Mention some new options.
Remove outdated information about -g and -O0. -g0 works. -O1/-O2/-O3 work.
Louis Dionne [Thu, 3 Jun 2021 18:56:51 +0000 (14:56 -0400)]
[libc++] NFC: Tidy up the reverse_iterator tests
Incidentally, that fixes an error with the modules build.
Alex Richardson [Thu, 3 Jun 2021 18:58:43 +0000 (19:58 +0100)]
[lld-macho] Fix BUILD_SHARED_LIBS build
ca6751043d8899b12baeb48621e61fb352cfee09 added a dependency on XAR (at
least for the shared libs build), so without this change we get the
following linker error:
Undefined symbols for architecture x86_64:
"_xar_close", referenced from:
lld::macho::BitcodeBundleSection::finalize() in SyntheticSections.cpp.o
Reviewed By: #lld-macho, int3, thakis
Differential Revision: https://reviews.llvm.org/D100999
Sam Powell [Thu, 3 Jun 2021 18:11:23 +0000 (11:11 -0700)]
[llvm] llvm-tapi-diff
This patch introduces a new tool, llvm-tapi-diff, that compares and returns the diff of two TBD files.
Reviewed By: ributzka, JDevlieghere
Differential Revision: https://reviews.llvm.org/D101835
Eli Friedman [Fri, 28 May 2021 21:05:07 +0000 (14:05 -0700)]
[AtomicExpand] Merge cmpxchg success and failure ordering when appropriate.
If we're not emitting separate fences for the success/failure cases, we
need to pass the merged ordering to the target so it can emit the
correct instructions.
For the PowerPC testcase, we end up with extra fences, but that seems
like an improvement over missing fences. If someone wants to improve
that, the PowerPC backed could be taught to emit the fences after isel,
instead of depending on fences emitted by AtomicExpand.
Fixes https://bugs.llvm.org/show_bug.cgi?id=33332 .
Differential Revision: https://reviews.llvm.org/D103342
Artur Pilipenko [Thu, 3 Jun 2021 17:53:00 +0000 (10:53 -0700)]
NFC. Mark DOTFuncInfo getters as const
This is a preparatory refactoring for introducing new
types of hidden blocks.
Artur Pilipenko [Thu, 3 Jun 2021 17:50:26 +0000 (10:50 -0700)]
NFC. Refactor DOTGraphTraits::isNodeHidden
Restructure handling of cfg-hide-unreachable-paths and
cfg-hide-deoptimize-paths options so as to make it easier
to introduce new types of hidden blocks.
Adrian Prantl [Thu, 3 Jun 2021 18:22:24 +0000 (11:22 -0700)]
Remove redundant Begin/End form signpost format strings.
The os_signpost API already captures the begin/end part and in
Instruments, this just adds visual noise that gets in the way of the
interesting data. By removing the redundant end text, the display in
Instruments gets even less cluttered.
rdar://
78636200
Differential Revision: https://reviews.llvm.org/D103577
Christopher Di Bella [Wed, 2 Jun 2021 19:46:20 +0000 (19:46 +0000)]
[libcxx][module-map] creates submodules for private headers
Most of our private headers need to be treated as submodules so that
Clang modules can export things correctly. Previous commits that split
monolithic headers into smaller chunks were unaware of this requirement,
and so this is being addressed in one fell swoop. Moving forward, most
new headers will need to have their own submodule (anything that's
conditionally included is exempt from this rule, which means `__support`
headers aren't made into submodules).
This hasn't been marked NFC, since I'm not 100% sure that's the case.
Differential Revision: https://reviews.llvm.org/D103551
Chris Bieneman [Wed, 2 Jun 2021 18:48:58 +0000 (13:48 -0500)]
Don't delete the module you're inspecting
Prior to this patch when you used `clang -module-file-info` clang would
delete the module on completion because the module was treated as an
output file.
This fixes the issue so you don't need to invoke cc1 directly to get
module file information.
Reviewed By: steven_wu, phosek
Differential Revision: https://reviews.llvm.org/D103547
Sanjay Patel [Thu, 3 Jun 2021 17:15:23 +0000 (13:15 -0400)]
[InstCombine] eliminate sext and/or trunc if value has enough signbits
If we have enough signbits in a source value, we can skip an
intermediate cast for a trunc+sext pair:
https://alive2.llvm.org/ce/z/A_mQt-
This is the original problem shown in:
https://llvm.org/PR49543
There's a test that shows we transformed what used to be
a pair of shifts, so that suggests we could add another
ComputeNumSignBits fold starting from a shift.
There does not appear to be any change in compile-time
from the extra analysis:
https://llvm-compile-time-tracker.com/compare.php?from=
3d2c9069dcafd0cbb641841aa3dd6e851fb7d760&to=
b9513cdf2419704c7bb0c3a02a9ca06aae13d902&stat=instructions
Differential Revision: https://reviews.llvm.org/D103617
Victor Kuznetsov [Thu, 3 Jun 2021 17:23:49 +0000 (10:23 -0700)]
Fully-qualify template args of outer types in getFullyQualifiedType
Template args of outer types were not fully-qualified when calling getFullyQualifiedType() for inner types.
For simplicity the patch is a copy-paste of the same call from getFullyQualifiedType().
Reviewed at: https://reviews.llvm.org/D103039
Philip Reames [Thu, 3 Jun 2021 17:28:10 +0000 (10:28 -0700)]
[LoopUnroll] Eliminate PreserveOnlyFirst parameter [nfc]
This is a first step towards simplifying the transform interface to be less error prone. The basic idea is that querying SCEV is cheap (since it's cached) and we can just check for properties related to branch folding in the transform method instead of relying on the heuristic part to pass everything in correctly.
Differential Revision: https://reviews.llvm.org/D103584
Alexey Bataev [Fri, 21 May 2021 17:09:12 +0000 (10:09 -0700)]
[SLP]Improve cost estimation/emission of externally used extractelements.
No need to recalculate the cost of extractelements, just no need to
compensate the cost of all extractelements, need to check before if this
is actually going to be removed at the vectorization. Also, no need to
generate new extractelement instruction, we may just regenerate the
original one. It may improve the final vectorization.
Differential Revision: https://reviews.llvm.org/D102933
Philip Reames [Thu, 3 Jun 2021 17:05:12 +0000 (10:05 -0700)]
[LoopUnroll] Reorder code to max dom tree update more obvious [nfc]
This cleans up the unroll action into two phases. Phase 1 does the mechanical act of unrolling, and leaves all conditional branches in place. Phase 2 optimizes away some of the conditional branches and then simplifies the loop. The primary benefit of the reordering is that we can delete some special cases dom tree update logic.
Differential Revision: https://reviews.llvm.org/D103561
Jinsong Ji [Thu, 3 Jun 2021 16:43:15 +0000 (16:43 +0000)]
add ppc_fp128 bitcode writer testcase
Alexey Bataev [Thu, 27 May 2021 13:19:32 +0000 (06:19 -0700)]
[SLP]Allow to reorder nodes with >2 scalar values.
tryToVectorizeList function allows to reorder only 2 scalars. Patch
allows to reorder >2 scalars. Also, to avoid possible regressions, it
allows extra vectorization of the remaining parts of the scalars
elements if possible.
Part of D57059.
Differential Revision: https://reviews.llvm.org/D103247