platform/upstream/llvm.git
4 years ago[gn build] Port f85ae058f58
LLVM GN Syncbot [Wed, 8 Apr 2020 04:48:03 +0000 (04:48 +0000)]
[gn build] Port f85ae058f58

4 years ago[AMDGPU] Expand vector trunc stores from i16 to i8
Stanislav Mekhanoshin [Tue, 7 Apr 2020 23:43:00 +0000 (16:43 -0700)]
[AMDGPU] Expand vector trunc stores from i16 to i8

Differential Revision: https://reviews.llvm.org/D77693

4 years ago[OpenMP] Provide math functions in OpenMP device code via OpenMP variants
Johannes Doerfert [Sat, 28 Mar 2020 01:36:30 +0000 (20:36 -0500)]
[OpenMP] Provide math functions in OpenMP device code via OpenMP variants

For OpenMP target regions to piggy back on the CUDA/AMDGPU/... implementation of math functions,
we include the appropriate definitions inside of an `omp begin/end declare variant match(device={arch(nvptx)})` scope.
This way, the vendor specific math functions will become specialized versions of the system math functions.
When a system math function is called and specialized version is available the selection logic introduced in D75779
instead call the specialized version. In contrast to the code path we used so far, the system header is actually included.
This means functions without specialized versions are available and so are macro definitions.

This should address PR42061, PR42798, and PR42799.

Reviewed By: ye-luo

Differential Revision: https://reviews.llvm.org/D75788

4 years ago[OpenMP] Specialize OpenMP calls after template instantiation
Johannes Doerfert [Sun, 29 Mar 2020 20:56:15 +0000 (15:56 -0500)]
[OpenMP] Specialize OpenMP calls after template instantiation

As with regular calls, we want to specialize a call that went through
template instantiation if it has an applicable OpenMP declare variant.

Reviewed By: erichkeane, mikerice

Differential Revision: https://reviews.llvm.org/D77290

4 years ago[OpenMP] Add match_{all,any,none} declare variant selector extensions.
Johannes Doerfert [Fri, 3 Apr 2020 16:29:53 +0000 (11:29 -0500)]
[OpenMP] Add match_{all,any,none} declare variant selector extensions.

By default, all traits in the OpenMP context selector have to match for
it to be acceptable. Though, we sometimes want a single property out of
multiple to match (=any) or no match at all (=none). We offer these
choices as extensions via
  `implementation={extension(match_{all,any,none})}`
to the user. The choice will affect the entire context selector not only
the traits following the match property.

The first user will be D75788. There we can replace
```
  #pragma omp begin declare variant match(device={arch(nvptx64)})
  #define __CUDA__

  #include <__clang_cuda_cmath.h>

  // TODO: Hack until we support an extension to the match clause that allows "or".
  #undef __CLANG_CUDA_CMATH_H__

  #undef __CUDA__
  #pragma omp end declare variant

  #pragma omp begin declare variant match(device={arch(nvptx)})
  #define __CUDA__

  #include <__clang_cuda_cmath.h>

  #undef __CUDA__
  #pragma omp end declare variant
```
with the much simpler
```
  #pragma omp begin declare variant match(device={arch(nvptx, nvptx64)}, implementation={extension(match_any)})
  #define __CUDA__

  #include <__clang_cuda_cmath.h>

  #undef __CUDA__
  #pragma omp end declare variant
```

Reviewed By: mikerice

Differential Revision: https://reviews.llvm.org/D77414

4 years ago[OpenMP] Try to find an existing base for `omp begin/end declare variant`
Johannes Doerfert [Wed, 1 Apr 2020 22:07:10 +0000 (17:07 -0500)]
[OpenMP] Try to find an existing base for `omp begin/end declare variant`

If we have a function definition in `omp begin/end declare variant` it
is a specialization of a base function with the same name and
"compatible" type. Before, we just created a declaration for the base.
With this patch we try to find an existing declaration first and only
create a new one if we did not find any with a compatible type. This is
preferable as we can tolerate slight mismatches, especially if the
specialized version is "more constrained", e.g., constexpr.

Reviewed By: mikerice

Differential Revision: https://reviews.llvm.org/D77252

4 years ago[mlir][Linalg] Use subview instead of linalg.slice in Promotion.cpp
Nicolas Vasilache [Wed, 8 Apr 2020 03:49:08 +0000 (23:49 -0400)]
[mlir][Linalg] Use subview instead of linalg.slice in Promotion.cpp

This revision removes the reliance of Promotion on `linalg.slice` which is meant
for the rank-reducing case.

Differential Revision: https://reviews.llvm.org/D77676

4 years ago[OpenMP] "UnFix" last layering problem with FrontendOpenMP
Johannes Doerfert [Wed, 8 Apr 2020 03:44:43 +0000 (22:44 -0500)]
[OpenMP] "UnFix" last layering problem with FrontendOpenMP

It seems one target was missed in D77666 which kept some bots red [0].

[0] http://lab.llvm.org:8011/builders/clang-ppc64le-linux-multistage/builds/12079/steps/build%20stage%201/logs/stdio

4 years agoKeep output file after successful execution of mlir-opt
Lukas Sommer [Wed, 8 Apr 2020 03:24:08 +0000 (03:24 +0000)]
Keep output file after successful execution of mlir-opt

Invoke `keep()` on the output file of `mlir-opt` in case the invocation of `MlirOptMain` was successful, to make sure the output file is not deleted on exit from `mlir-opt`.
Fixes a similar problem in `standalone-opt` from the example for an out-of-tree, standalone MLIR dialect.

This revision also adds a missing parameter to the invocation of `MlirOptMain` in `standalone-opt`.

Differential Revision: https://reviews.llvm.org/D77643

4 years ago[JumpThreading] NFC: Simplify ComputeValueKnownInPredecessorsImpl
Kazu Hirata [Wed, 8 Apr 2020 00:41:50 +0000 (17:41 -0700)]
[JumpThreading] NFC: Simplify ComputeValueKnownInPredecessorsImpl

Summary:
ComputeValueKnownInPredecessorsImpl is the main folding mechanism in
JumpThreading.cpp.  To avoid potential infinite recursion while
chasing use-def chains, it uses:

  DenseSet<std::pair<Value *, BasicBlock *>> &RecursionSet

to keep track of Value-BB pairs that we've processed.

Now, when ComputeValueKnownInPredecessorsImpl recursively calls
itself, it always passes BB as is, so the second element is always BB.

This patch simplifes the function by dropping "BasicBlock *" from
RecursionSet.

Reviewers: wmi, efriedma

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77699

4 years ago[lit] Print slowest test first when timing tests
Julian Lettner [Wed, 8 Apr 2020 01:18:33 +0000 (18:18 -0700)]
[lit] Print slowest test first when timing tests

lit supports `--time-tests` which will report the 20 slowest tests and
print a nice histogram for test times.  This change prints this list and
the histogram rows by decreasing test times.  After all, we are most
interested in the slowest tests.

4 years ago[lit] Improve consistency when printing test results
Julian Lettner [Thu, 28 Feb 2019 05:46:04 +0000 (21:46 -0800)]
[lit] Improve consistency when printing test results

4 years agoRevert "[ObjC generics] Fix not inheriting type bounds in categories/extensions."
Volodymyr Sapsai [Wed, 8 Apr 2020 00:41:30 +0000 (17:41 -0700)]
Revert "[ObjC generics] Fix not inheriting type bounds in categories/extensions."

This reverts commit a8c8b627f23f204fb621bd2a8c495cfc8bc16ae7. It causes
intermittent

    Clang :: SemaObjC/parameterized_classes_subst.m

test failures on various bots.

4 years agoReset more globalMemCounters.
Dan Albert [Tue, 7 Apr 2020 23:29:13 +0000 (16:29 -0700)]
Reset more globalMemCounters.

Reviewers: EricWF, #libc

Reviewed By: EricWF, #libc

Subscribers: broadwaylamb, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D77681

4 years ago[gn build] Port 1adeeabb79a
LLVM GN Syncbot [Tue, 7 Apr 2020 23:30:51 +0000 (23:30 +0000)]
[gn build] Port 1adeeabb79a

4 years ago[NFC] Clean up uses of LoadInst constructor.
Eli Friedman [Tue, 7 Apr 2020 23:25:52 +0000 (16:25 -0700)]
[NFC] Clean up uses of LoadInst constructor.

4 years ago[ManualDWARFIndex] Remove dead code, in preparation for moving this function.
Davide Italiano [Tue, 7 Apr 2020 23:27:29 +0000 (16:27 -0700)]
[ManualDWARFIndex] Remove dead code, in preparation for moving this function.

4 years agoAdd MIR-level debugify with only locations support for now
Daniel Sanders [Fri, 3 Apr 2020 23:18:45 +0000 (16:18 -0700)]
Add MIR-level debugify with only locations support for now

Summary:
Re-used the IR-level debugify for the most part. The MIR-level code then
adds locations to the MachineInstrs afterwards based on the LLVM-IR debug
info.

It's worth mentioning that the resulting locations make little sense as
the range of line numbers used in a Function at the MIR level exceeds that
of the equivelent IR level function. As such, MachineInstrs can appear to
originate from outside the subprogram scope (and from other subprogram
scopes). However, it doesn't seem worth worrying about as the source is
imaginary anyway.

There's a few high level goals this pass works towards:
* We should be able to debugify our .ll/.mir in the lit tests without
  changing the checks and still pass them. I.e. Debug info should not change
  codegen. Combining this with a strip-debug pass should enable this. The
  main issue I ran into without the strip-debug pass was instructions with MMO's and
  checks on both the instruction and the MMO as the debug-location is
  between them. I currently have a simple hack in the MIRPrinter to
  resolve that but the more general solution is a proper strip-debug pass.
* We should be able to test that GlobalISel does not lose debug info. I
  recently found that the legalizer can be unexpectedly lossy in seemingly
  simple cases (e.g. expanding one instr into many). I have a verifier
  (will be posted separately) that can be integrated with passes that use
  the observer interface and will catch location loss (it does not verify
  correctness, just that there's zero lossage). It is a little conservative
  as the line-0 locations that arise from conflicts do not track the
  conflicting locations but it can still catch a fair bit.

Depends on D77439, D77438

Reviewers: aprantl, bogner, vsk

Subscribers: mgorny, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77446

4 years ago[VE] Migrate to the getMachineMemOperand overload using llvm::Align
Fangrui Song [Tue, 7 Apr 2020 23:04:39 +0000 (16:04 -0700)]
[VE] Migrate to the getMachineMemOperand overload using llvm::Align

Just delete the deprecated overload because nothing uses it.

4 years ago[mlir][AsmFormat] Avoid invalidating the iterator when verifying attributes
River Riddle [Tue, 7 Apr 2020 22:51:42 +0000 (15:51 -0700)]
[mlir][AsmFormat] Avoid invalidating the iterator when verifying attributes

Summary: 'it' may get invalidated when recursing into optional groups. This revision refactors the inner loop to avoid the need to compare the iterator after invalidation.

Differential Revision: https://reviews.llvm.org/D77686

4 years agoCodeGen: More conversions to use Register
Matt Arsenault [Tue, 7 Apr 2020 21:28:53 +0000 (17:28 -0400)]
CodeGen: More conversions to use Register

4 years ago[ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker()
Fangrui Song [Sun, 16 Feb 2020 01:23:18 +0000 (17:23 -0800)]
[ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker()

dso_local leads to direct access even if the definition is not within this compilation unit (it is
still in the same linkage unit). On ELF, such a relocation (e.g. R_X86_64_PC32) referencing a
STB_GLOBAL STV_DEFAULT object can cause a linker error in a -shared link.

If the linkage is changed to available_externally, the dso_local flag should be dropped, so that no
direct access will be generated.

The current behavior is benign, because -fpic does not assume dso_local
(clang/lib/CodeGen/CodeGenModule.cpp:shouldAssumeDSOLocal).
If we do that for -fno-semantic-interposition (D73865), there will be an
R_X86_64_PC32 linker error without this patch.

Reviewed By: tejohnson

Differential Revision: https://reviews.llvm.org/D74751

4 years ago[VE] Adapt aa26dd985848364df01d3f8f0f3eaccfd5ee80dc and 2481f26ac3f228cc085d4d68ee72d...
Fangrui Song [Tue, 7 Apr 2020 22:41:04 +0000 (15:41 -0700)]
[VE] Adapt aa26dd985848364df01d3f8f0f3eaccfd5ee80dc and 2481f26ac3f228cc085d4d68ee72dadc07afa48f

4 years agoRevert "Don't expose unavailable cstdio functions."
Dan Albert [Tue, 7 Apr 2020 22:36:44 +0000 (15:36 -0700)]
Revert "Don't expose unavailable cstdio functions."

Broke builders that emit different diagnostics. e.g.:

error: 'warning' diagnostics seen but not expected:
  Line 13: alias declarations are a C++11 extension
  Line 20: alias declarations are a C++11 extension

This reverts commit ff87813715ec32741ce230dd37c13d0ae6673f9c.

4 years ago[MLIR] Add note for file-line numbers in tablegen errors for assembly formats
Stephen Neuendorffer [Sun, 5 Apr 2020 05:54:35 +0000 (22:54 -0700)]
[MLIR] Add note for file-line numbers in tablegen errors for assembly formats

Error messages for the custom assembly format are difficult to understand
because there are no line numbers.  This happens because the assembly format
is parsed as a standalone line, separate from it's parent file, with no useful
location information.  Fixing this properly probably requires quite a bit
of invasive plumbing through the SourceMgr, similar to how included files
are handled

This proposal is a less invasive short term solution.  When generating an
error message we generate an additional note which at least properly describes
the operation definition the error occured in, if not the actual line number
of the assemblyFormat definition.

A typical message is like:

error: type of operand #0, named 'operand', is not buildable and a buildable type cannot be inferred
  $operand type($result) attr-dict
  ^
/src/llvm-project/mlir/test/mlir-tblgen/op-format-spec.td:296:1: note: in custom assembly format for this operation
def ZCoverageInvalidC : TestFormat_Op<"variable_invalid_c", [{
^
note: suggest adding a type constraint to the operation or adding a 'type($operand)' directive to the custom assembly format
  $operand type($result) attr-dict
  ^

Differential Revision: https://reviews.llvm.org/D77488

4 years ago[MLIR] Cleanup mlir-tblgen error messages for custom assembly formats.
Stephen Neuendorffer [Sat, 4 Apr 2020 01:17:51 +0000 (18:17 -0700)]
[MLIR] Cleanup mlir-tblgen error messages for custom assembly formats.

The messages are somewhat cryptic, since they are not complete sentences,
include lots of ambiguous words, like 'format' which are hard to parse,
and include names from the users code which may, or may not make sense in
the context of the message.  Start to clean this up and provide some
guidance for fixes.

Also, add a test for one of the messages which didn't have a test at all.

Differential Revision: https://reviews.llvm.org/D77449

4 years agoDon't expose unavailable cstdio functions.
Dan Albert [Tue, 7 Apr 2020 22:02:15 +0000 (15:02 -0700)]
Don't expose unavailable cstdio functions.

Summary: These aren't available on Android in all configurations.

Reviewers: EricWF, mclow.lists, #libc, ldionne

Reviewed By: EricWF, #libc, ldionne

Subscribers: broadwaylamb, dexonsmith, ldionne, krytarowski, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D76093

4 years ago[libunwind] Fix UB in EHHeaderParser::findFDE
Jorge Gorbe Moya [Tue, 7 Apr 2020 21:44:42 +0000 (14:44 -0700)]
[libunwind] Fix UB in EHHeaderParser::findFDE

When the EHHeaderInfo object filled by decodeEHHdr has fde_count == 0,
findFDE does the following:

- sets low = 0 and len = hdrInfo.fde_count as a preparation to start a
  binary search
- because len is 0, the binary search loop is skipped
- the code still tries to find a table entry at
  hdrInfo.table + low * tableEntrySize, and decode it.

This is wrong when fde_count is 0, and trying to decode a table entry
that isn't there will lead to reading garbage offsets and can cause
segfaults.

Differential Revision: https://reviews.llvm.org/D77679

4 years ago[OPENMP]Do not capture global marked as shared in OpenMP region.
Alexey Bataev [Tue, 7 Apr 2020 21:14:59 +0000 (17:14 -0400)]
[OPENMP]Do not capture global marked as shared in OpenMP region.

No need to capture the global variable marked as shared in the OpenMP
region, the original variable can be used.

4 years agoRecommit [SampleFDO] Add flag for partial profile.
Wei Mi [Fri, 3 Apr 2020 18:57:36 +0000 (11:57 -0700)]
Recommit [SampleFDO] Add flag for partial profile.

Fix the error of show-prof-info.test on some platforms without zlib.

The common profile usage is to collect profile from a target and then use the profile to guide the optimized build for the same target. There are some cases that no profile can be collected for a target. In those cases, although no full profile is available, it is possible to have some partial profile collected from other targets to optimize common libraries and utilities. A flag is needed to tell the partial profile from the full profile apart, so compiler can use different strategy for them.

Differential Revision: https://reviews.llvm.org/D77426

4 years ago[AMDGPU] Implement copyPhysReg for 16 bit subregs
Stanislav Mekhanoshin [Fri, 28 Feb 2020 23:48:46 +0000 (15:48 -0800)]
[AMDGPU] Implement copyPhysReg for 16 bit subregs

Differential Revision: https://reviews.llvm.org/D74937

4 years ago[mlir][Pass] Update the documentation for the declarative pass specification
River Riddle [Tue, 7 Apr 2020 21:21:18 +0000 (14:21 -0700)]
[mlir][Pass] Update the documentation for the declarative pass specification

The pass tablegen backend now generates base classes instead of utilities, so this revision updates the documentation to reflect that.

4 years ago[libc++] Remove the %{not} substitution
Louis Dionne [Tue, 7 Apr 2020 21:00:23 +0000 (17:00 -0400)]
[libc++] Remove the %{not} substitution

It has never been used, and it actually doesn't really work because it
assumes that the target supports Python. Instead, it's better to just
use `!` since we're running ShTests in system shells anyway.

4 years ago[Driver] Only pass LTO remark arguments if the driver asks for it
Francis Visoiu Mistrih [Tue, 7 Apr 2020 20:49:00 +0000 (13:49 -0700)]
[Driver] Only pass LTO remark arguments if the driver asks for it

Previous fix missed a check to willEmitRemarks, causing remarks to
always be enabled for LTO.

4 years agoDon't access reference to a vector after pop_back
Benjamin Kramer [Tue, 7 Apr 2020 21:06:59 +0000 (23:06 +0200)]
Don't access reference to a vector after pop_back

This is undefined behavior. Found by asan's detect_container_overflow.

4 years ago[mlir][Pass] Update the PassGen to generate base classes instead of utilities
River Riddle [Tue, 7 Apr 2020 20:58:12 +0000 (13:58 -0700)]
[mlir][Pass] Update the PassGen to generate base classes instead of utilities

Summary:
This is much cleaner, and fits the same structure as many other tablegen backends. This was not done originally as the CRTP in the pass classes made it overly verbose/complex.

Differential Revision: https://reviews.llvm.org/D77367

4 years ago[mlir][Pass] Remove the use of CRTP from the Pass classes
River Riddle [Tue, 7 Apr 2020 20:56:16 +0000 (13:56 -0700)]
[mlir][Pass] Remove the use of CRTP from the Pass classes

This revision removes all of the CRTP from the pass hierarchy in preparation for using the tablegen backend instead. This creates a much cleaner interface in the C++ code, and naturally fits with the rest of the infrastructure. A new utility class, PassWrapper, is added to replicate the existing behavior for passes not suitable for using the tablegen backend.

Differential Revision: https://reviews.llvm.org/D77350

4 years ago[mlir][Pass][NFC] Replace usages of ModulePass with OperationPass<ModuleOp>
River Riddle [Tue, 7 Apr 2020 20:55:34 +0000 (13:55 -0700)]
[mlir][Pass][NFC] Replace usages of ModulePass with OperationPass<ModuleOp>

ModulePass doesn't provide any special utilities and thus doesn't give enough benefit to warrant a special pass class. This revision replaces all usages with the more general OperationPass.

Differential Revision: https://reviews.llvm.org/D77339

4 years agoCodeGen: Use Register in TargetFrameLowering
Matt Arsenault [Tue, 7 Apr 2020 20:33:58 +0000 (16:33 -0400)]
CodeGen: Use Register in TargetFrameLowering

4 years ago[BPI] Clear handles when releasing memory (NFC)
Nikita Popov [Tue, 7 Apr 2020 19:21:30 +0000 (21:21 +0200)]
[BPI] Clear handles when releasing memory (NFC)

This reduces max-rss of sqlite compilation by 2.5%.

4 years ago[mlir][DRR] Add location directive
Jacques Pienaar [Tue, 7 Apr 2020 14:44:19 +0000 (07:44 -0700)]
[mlir][DRR] Add location directive

Summary:
Add directive to indicate the location to give to op being created. This
directive is optional and if unused the location will still be the fused
location of all source operations.

Currently this directive only works with other op locations, reusing an
existing op location or a fusion of op locations. But doesn't yet support
supplying metadata for the FusedLoc.

Based off initial revision by antiagainst@ and effectively mirrors GlobalIsel
debug_locations directive.

Differential Revision: https://reviews.llvm.org/D77649

4 years agoFix illegal early call to PyBuffer_Release in swig typemaps
Lawrence D'Anna [Tue, 7 Apr 2020 20:29:58 +0000 (13:29 -0700)]
Fix illegal early call to PyBuffer_Release in swig typemaps

Summary:
The buffer protocol does not allow us to just call PyBuffer_Release
and assume the buffer will still be there.   Most things that implement the
buffer protocol will let us get away with that, but not all.   We need
to release it at the end of the SWIG wrapper.

Reviewers: labath, jasonmolenda, JDevlieghere, vadimcn

Reviewed By: labath

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D77480

4 years ago[clang-tidy] Fix buildbot failing with explicit specialization in class scope
Nathan James [Tue, 7 Apr 2020 20:30:29 +0000 (21:30 +0100)]
[clang-tidy] Fix buildbot failing with explicit specialization in class scope

4 years agoRemove FxpMathOps dialect and Quantizer tool.
Stella Laurenzo [Sun, 5 Apr 2020 02:22:05 +0000 (19:22 -0700)]
Remove FxpMathOps dialect and Quantizer tool.

Summary:
* Removal of FxpMathOps was discussed on the mailing list.
* Will send a courtesy note about also removing the Quantizer (which had some dependencies on FxpMathOps).
* These were only ever used for experimental purposes and we know how to get them back from history as needed.
* There is a new proposal for more generalized quantization tooling, so moving these older experiments out of the way helps clean things up.

Subscribers: mgorny, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, grosul1, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77479

4 years agoRemove some top-level const from return values seen in review
David Blaikie [Tue, 7 Apr 2020 20:22:03 +0000 (13:22 -0700)]
Remove some top-level const from return values seen in review

4 years ago[ms] Add new /PDBSTREAM option to lld-link allowing injection of streams into PDB...
Eric Astor [Tue, 7 Apr 2020 20:16:22 +0000 (16:16 -0400)]
[ms] Add new /PDBSTREAM option to lld-link allowing injection of streams into PDB files.

Summary:
/PDBSTREAM:<name>=<file> adds the contents of <file> to stream <name> in the resulting PDB.

This allows native uses with workflows that (for example) add srcsrv streams to PDB files to provide a location for the build's source files.

Results should be equivalent to linking with lld-link, then running Microsoft's pdbstr tool with the command line:
pdbstr.exe -w -p:<PDB LOCATION> -s:<name> -i:<file>
except in cases where the named stream overlaps with a default named stream, such as "/names". In those cases, the added stream will be overridden, making the /pdbstream option a no-op.

Reviewers: thakis, rnk

Reviewed By: thakis

Differential Revision: https://reviews.llvm.org/D77310

4 years ago[libc++] Run tests in a directory related to %t instead of /tmp
Louis Dionne [Tue, 7 Apr 2020 19:42:00 +0000 (15:42 -0400)]
[libc++] Run tests in a directory related to %t instead of /tmp

Instead of creating a temporary directory inside /tmp and running the
tests there, use a directory name based on LIT's %t substitution. This
has the benefit of not hitting /tmp so much (which is slow on some
filesystems). It also has the benefit that `ninja -C build clean` will
automatically remove the artifacts even if a test somehow failed to
remove its temporary directory (I've seen this happen when CTRL-C is
received).

4 years ago[TLI] fix a function's (commented) signature; NFC
George Burgess IV [Tue, 7 Apr 2020 20:03:18 +0000 (13:03 -0700)]
[TLI] fix a function's (commented) signature; NFC

__strlen_chk returns a `size_t`, not a `char *`.

4 years agoCodeGen: Use Register in more places
Matt Arsenault [Tue, 7 Apr 2020 18:50:47 +0000 (14:50 -0400)]
CodeGen: Use Register in more places

4 years agoRevert "[SampleFDO] Add flag for partial profile." show-prof-info.test breaks on...
Wei Mi [Tue, 7 Apr 2020 19:54:51 +0000 (12:54 -0700)]
Revert "[SampleFDO] Add flag for partial profile." show-prof-info.test breaks on some platforms.

This reverts commit e3ba652a1440794eff0b43ce747f1b0488585d22.

4 years ago[mlir][Diagnostic] Don't store Operation arguments as a DiagnosticArgument
River Riddle [Tue, 7 Apr 2020 19:44:22 +0000 (12:44 -0700)]
[mlir][Diagnostic] Don't store Operation arguments as a DiagnosticArgument

Summary: Diagnostics may be cached in the parallel diagnostic handler to preserve proper ordering. Storing the Operation as a DiagnosticArgument is problematic as the operation may be erased or changed before it finally gets printed.

Differential Revision: https://reviews.llvm.org/D77675

4 years ago[OPENMP][DOCS]Update status of oimplemented constructs, NFC.
Alexey Bataev [Tue, 7 Apr 2020 19:44:15 +0000 (15:44 -0400)]
[OPENMP][DOCS]Update status of oimplemented constructs, NFC.

4 years ago[ScriptInterpreterPython] Remove buggy code to save/restore stdin.
Davide Italiano [Tue, 7 Apr 2020 19:41:31 +0000 (12:41 -0700)]
[ScriptInterpreterPython] Remove buggy code to save/restore stdin.

Discussed on lldb-dev with Pavel Labath. This doesn't work for
background processes [causes Python to be stuck forever], and it's
unclear whether it's needed. There's no test, also. If this turns
out to be useful, it can be recommitted with a functional implementation
and a test.

4 years ago[OpenMP] "UnFix" layering problem with FrontendOpenMP
Johannes Doerfert [Tue, 7 Apr 2020 16:26:40 +0000 (11:26 -0500)]
[OpenMP] "UnFix" layering problem with FrontendOpenMP

This reverts commit 97aa593a8387586095b7eac12974ba2fdd08f4c3 as it
causes problems (PR45453) https://reviews.llvm.org/D77574#1966321.

This additionally adds an explicit reference to FrontendOpenMP to
clang-tidy where ASTMatchers is used.

This is hopefully just a temporary solution. The dependence on
`FrontendOpenMP` from `ASTMatchers` should be handled by CMake
implicitly, not us explicitly.

Reviewed By: aheejin

Differential Revision: https://reviews.llvm.org/D77666

4 years ago[OPENMP50]Codegen for iterator construct.
Alexey Bataev [Mon, 6 Apr 2020 15:21:43 +0000 (11:21 -0400)]
[OPENMP50]Codegen for iterator construct.

Implemented codegen for the iterator expression in the depend clauses.
Iterator construct is emitted the following way:
iterator(cnt1, cnt2, ...), in : <dep>

<TotalNumDeps> = <cnt1_size> * <cnt2_size> * ...;
kmp_depend_t deps[<TotalNumDeps>];
deps_counter = 0;
for (cnt1) {
  for (cnt2) {
    ...
    deps[deps_counter].base_addr = &<dep>;
    deps[deps_counter].size = sizeof(<dep>);
    deps[deps_counter].flags = in;
    deps_counter += 1;
    ...
  }
}

For depobj construct the codegen is very similar, but the memory is
allocated dynamically and added extra first item reserved for internal use.

4 years ago[SampleFDO] Add flag for partial profile.
Wei Mi [Fri, 3 Apr 2020 18:57:36 +0000 (11:57 -0700)]
[SampleFDO] Add flag for partial profile.

The common profile usage is to collect profile from a target and then use the profile to guide the optimized build for the same target. There are some cases that no profile can be collected for a target. In those cases, although no full profile is available, it is possible to have some partial profile collected from other targets to optimize common libraries and utilities. A flag is needed to tell the partial profile from the full profile apart, so compiler can use different strategy for them.

Differential Revision: https://reviews.llvm.org/D77426

4 years ago[NFC][PowerPC] Fix register class for patterns using XXPERMDIs
Nemanja Ivanovic [Tue, 7 Apr 2020 19:04:19 +0000 (14:04 -0500)]
[NFC][PowerPC] Fix register class for patterns using XXPERMDIs

There are a few patterns where we use a superclass for inputs to this
instruction rather than the correct class. This can sometimes lead to
unncessary copies.

4 years ago[clang-tidy] Change checks that take enum configurations to use a new access method.
Nathan James [Tue, 7 Apr 2020 19:04:13 +0000 (20:04 +0100)]
[clang-tidy] Change checks that take enum configurations to use a new access method.

Summary: Change all checks that take enums as configuration to use enum specific methods in `ClangTidyCheck::OptionsView`.

Reviewers: aaron.ballman, alexfh

Reviewed By: aaron.ballman

Subscribers: wuzish, nemanjai, kbarton, arphaman, xazax.hun, cfe-commits

Tags: #clang, #clang-tools-extra

Differential Revision: https://reviews.llvm.org/D76606

4 years ago[OpenMP] Optimized stream selection by scheduling data mapping for the same target...
Shilei Tian [Tue, 7 Apr 2020 18:51:56 +0000 (14:51 -0400)]
[OpenMP] Optimized stream selection by scheduling data mapping for the same target region into a same stream

Summary:
This patch introduces two things for offloading:
1. Asynchronous data transferring: those functions are suffix with `_async`. They have one more argument compared with their synchronous counterparts: `__tgt_async_info*`, which is a new struct that only has one field, `void *Identifier`. This struct is for information exchange between different asynchronous operations. It can be used for stream selection, like in this case, or operation synchronization, which is also used. We may expect more usages in the future.
2. Optimization of stream selection for data mapping. Previous implementation was using asynchronous device memory transfer but synchronizing after each memory transfer. Actually, if we say kernel A needs four memory copy to device and two memory copy back to host, then we can schedule these seven operations (four H2D, two D2H, and one kernel launch) into a same stream and just need synchronization after memory copy from device to host. In this way, we can save a huge overhead compared with synchronization after each operation.

Reviewers: jdoerfert, ye-luo

Reviewed By: jdoerfert

Subscribers: yaxunl, lildmh, guansong, openmp-commits

Tags: #openmp

Differential Revision: https://reviews.llvm.org/D77005

4 years ago[clang-tidy] Added support for validating configuration options
Nathan James [Tue, 7 Apr 2020 18:53:52 +0000 (19:53 +0100)]
[clang-tidy] Added support for validating configuration options

Summary:
Adds support for `ClangTidyCheck::OptionsView` to deteremine:
  - If an option is found in the configuration.
  - If an integer option read from configuration is parsable to an integer.
  - Parse and Serialize enum configuration options directly using a mapping from `llvm::StringRef` to `EnumType`.
  - If an integer or enum option isn't parseable but there is a default value it will issue a warning to stderr that the config value hasn't been used.
  - If an enum option isn't parsable it can provide a hint if the value was a typo.

Reviewers: aaron.ballman, alexfh, gribozavr2

Reviewed By: aaron.ballman

Subscribers: xazax.hun, cfe-commits

Tags: #clang, #clang-tools-extra

Differential Revision: https://reviews.llvm.org/D77085

4 years ago[Hexagon] Update paths for linux/musl
Sid Manning [Tue, 7 Apr 2020 12:46:19 +0000 (07:46 -0500)]
[Hexagon] Update paths for linux/musl

Update the sysroot expectation to match other targets and breakout
linux/musl toolchain tests into a new file.

Differential Revision: https://reviews.llvm.org/D77440

4 years agoAllow parameter names to be elided in a function definition in C.
Aaron Ballman [Tue, 7 Apr 2020 18:42:29 +0000 (14:42 -0400)]
Allow parameter names to be elided in a function definition in C.

WG14 has adopted N2480 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2480.pdf)
into C2x at the meetings last week, allowing parameter names of a function
definition to be elided. This patch relaxes the error so that C++ and C2x do not
diagnose this situation, and modes before C2x will allow it as an extension.

This also adds the same feature to ObjC blocks under the assumption that ObjC
wishes to follow the C standard in this regard.

4 years ago[libc++] Translate MODULES_DEFINES annotations to ADDITIONAL_COMPILE_FLAGS
Louis Dionne [Tue, 7 Apr 2020 16:42:30 +0000 (12:42 -0400)]
[libc++] Translate MODULES_DEFINES annotations to ADDITIONAL_COMPILE_FLAGS

This allows both the old and the new testing formats to handle these
tests with modules enabled.

We also include the modules flags in the %{flags} substitution, which
means that .sh.cpp tests in the old format and all tests in the new
format will use modules flags when enabled.

4 years ago[AMDGPU] Extend constant folding for logical operations
Graham Sellers [Tue, 7 Apr 2020 18:11:24 +0000 (14:11 -0400)]
[AMDGPU] Extend constant folding for logical operations

This patch extends existing constant folding in logical operations to
handle S_XNOR, S_NAND, S_NOR, S_ANDN2, S_ORN2, V_LSHL_ADD_U32 and
V_AND_OR_B32. Also added a couple of tests for existing folds.

4 years ago[SelectionDAG] Make getZeroExtendInReg take a vector VT if the operand VT is a vector.
Craig Topper [Tue, 7 Apr 2020 18:02:04 +0000 (11:02 -0700)]
[SelectionDAG] Make getZeroExtendInReg take a vector VT if the operand VT is a vector.

This removes a call to getScalarType from a bunch of call sites.
It also makes the behavior consistent with SIGN_EXTEND_INREG.

Differential Revision: https://reviews.llvm.org/D77631

4 years ago[gn build] Port 88c2137b6d4
LLVM GN Syncbot [Tue, 7 Apr 2020 18:26:53 +0000 (18:26 +0000)]
[gn build] Port 88c2137b6d4

4 years ago[DWARFLinker][dsymutil][NFC] Move DwarfStreamer into DWARFLinker.
Alexey Lapshin [Mon, 6 Apr 2020 21:42:40 +0000 (00:42 +0300)]
[DWARFLinker][dsymutil][NFC] Move DwarfStreamer into DWARFLinker.

For implementing "remove obsolete debug info in lld", it is neccesary
to have DWARF generation code implementation. dsymutil uses DwarfStreamer
for that purpose. DwarfStreamer uses AsmPrinter. It is considered OK
to use AsmPrinter based code in lld(D74169). This patch moves
DwarfStreamer implementation into DWARFLinker, so that it could be reused
from lld.

Generally, a better place for such a common DWARF generation code would be
not DWARFLinker but an additional separate library. Such a library could
contain a single version of DWARF generation routines and could also
be independent of AsmPrinter. At the current moment, DwarfStreamer
does not pretend to be such a general implementation of DWARF generation.
So I decided to put it into DWARFLinker since it is the only user
of DwarfStreamer.

Testing: it passes "check-all" lit testing. MD5 checksum for clang .dSYM
bundle matches for the dsymutil with/without that patch.

Reviewed By: JDevlieghere

Differential revision: https://reviews.llvm.org/D77169

4 years agoAMDGPU: Cleanup test MIR
Matt Arsenault [Tue, 7 Apr 2020 17:58:31 +0000 (13:58 -0400)]
AMDGPU: Cleanup test MIR

4 years agoRevert "Revert "[analyzer] Teach scan-build how to rebuild index.html without analyzi...
Artem Dergachev [Tue, 7 Apr 2020 13:49:53 +0000 (16:49 +0300)]
Revert "Revert "[analyzer] Teach scan-build how to rebuild index.html without analyzing.""

This reverts commit 21efb06f0ae2eb999f566d989997256d6cb12206.

Changes since last attempt to land this patch:
- Sort files before deduplicating. This hopefully avoids some buildbot failures.
- Fix use of uninitialized variable when running without --use-analyzer.
- Remove the "REQUIRES: windows" item.

4 years ago[AArch64] Don't expand memcmp in strict align mode.
Eli Friedman [Mon, 6 Apr 2020 22:17:02 +0000 (15:17 -0700)]
[AArch64] Don't expand memcmp in strict align mode.

7aecf232 fixed the bug where we would miscompile, but we still generate
a crazy amount of code. Turn off the expansion until someone implements
an appropriate heuristic.

Differential Revision: https://reviews.llvm.org/D77599

4 years agoAMDGPU: Use early return
Matt Arsenault [Tue, 7 Apr 2020 17:22:40 +0000 (13:22 -0400)]
AMDGPU: Use early return

4 years ago[lit] Cleanup printing of discovered suites and tests
Julian Lettner [Fri, 22 Nov 2019 23:13:57 +0000 (15:13 -0800)]
[lit] Cleanup printing of discovered suites and tests

4 years ago[WebAssembly][MC] Fix leak of std::string members in MCSymbolWasm
Sam Clegg [Tue, 7 Apr 2020 03:46:11 +0000 (20:46 -0700)]
[WebAssembly][MC] Fix leak of std::string members in MCSymbolWasm

Summary: Fixes: https://bugs.llvm.org/show_bug.cgi?id=45452

Subscribers: dschuff, jgravelle-google, hiraditya, aheejin, sunfish, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77627

4 years ago[AMDGPU] Limit endcf-collapase to simple if
Stanislav Mekhanoshin [Tue, 7 Apr 2020 00:03:40 +0000 (17:03 -0700)]
[AMDGPU] Limit endcf-collapase to simple if

We can only collapse adjacent SI_END_CF if outer statement
belongs to a simple SI_IF, otherwise correct mask is not in the
register we expect, but is an argument of an S_XOR instruction.

Even if SI_IF is simple it might be lowered using S_XOR because
lowering is dependent on a basic block layout. It is not
considered simple if instruction consuming its output is
not an SI_END_CF. Since that SI_END_CF might have already been
lowered to an S_OR isSimpleIf() check may return false.

This situation is an opportunity for a further optimization
of SI_IF lowering, but that is a separate optimization. In the
meanwhile move SI_END_CF post the lowering when we already know
how the rest of the CFG was lowered since a non-simple SI_IF
case still needs to be handled.

Differential Revision: https://reviews.llvm.org/D77610

4 years ago[ELF] --warn-backrefs: don't warn for linking sandwich problems
Fangrui Song [Mon, 6 Apr 2020 05:27:46 +0000 (22:27 -0700)]
[ELF] --warn-backrefs: don't warn for linking sandwich problems

This is an alternative design to D77512.

D45195 added --warn-backrefs to detect

* A. certain input orders which GNU ld either errors ("undefined reference")
  or has different resolution semantics
* B. (byproduct) some latent multiple definition problems (-ldef1 -lref -ldef2) which I
  call "linking sandwich problems". def2 may or may not be the same as def1.

When an archive appears more than once (-ldef -lref -ldef), lld and GNU
ld may have the same resolution but --warn-backrefs may warn. This is
not uncommon. For example, currently lld itself has such a problem:

```
liblldCommon.a liblldCOFF.a ... liblldCommon.a
  _ZN3lld10DWARFCache13getDILineInfoEmm in liblldCOFF.a refers to liblldCommon.a(DWARF.cpp.o)
libLLVMSupport.a also appears twice and has a similar warning
```

glibc has such problems. It is somewhat destined because of its separate
libc/libpthread/... and arbitrary grouping. The situation is getting
improved over time but I have seen:
```
-lc __isnanl references -lm
-lc _IO_funlockfile references -lpthread
```

There are also various issues in interaction with other runtime
libraries such as libgcc_eh and libunwind:
```
-lc __gcc_personality_v0 references -lgcc_eh
-lpthread __gcc_personality_v0 references -lgcc_eh
-lpthread _Unwind_GetCFA references -lunwind
```

These problems are actually benign. We want --warn-backrefs to focus on
its main task A and defer task B (which is also useful) to a more
specific future feature (see gold --detect-odr-violations and
https://bugs.llvm.org/show_bug.cgi?id=43110).

Instead of warning immediately, we store the message and only report it
if no subsequent lazy definition exists.

The use of the static variable `backrefDiags` is similar to `undefs` in
Relocations.cpp

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D77522

4 years ago[ELF] -M/-Map: fix VMA/LMA/Size columns of symbol assignments when address/size>...
Fangrui Song [Sat, 4 Apr 2020 00:07:01 +0000 (17:07 -0700)]
[ELF] -M/-Map: fix VMA/LMA/Size columns of symbol assignments when address/size>=2**32

SymbolAssignment::addr stores the location counter. The type should be
uint64_t instead of unsigned. The upper half of the address space is
commonly used by operating system kernels.

Similarly, SymbolAssignment::size should be an uint64_t. A kernel linker
script can move the location counter from 0 to the upper half of the
address space.

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D77445

4 years agoCheck LLVM_BUILD_LLVM_C_DYLIB before building the C DLL with MSVC.
Aaron Ballman [Tue, 7 Apr 2020 17:13:08 +0000 (13:13 -0400)]
Check LLVM_BUILD_LLVM_C_DYLIB before building the C DLL with MSVC.

4 years ago[X86][SSE] Add PTEST(AND(X,Y),AND(X,Y)) tests derived from PR42035 examples
Simon Pilgrim [Tue, 7 Apr 2020 16:10:46 +0000 (17:10 +0100)]
[X86][SSE] Add PTEST(AND(X,Y),AND(X,Y)) tests derived from PR42035 examples

4 years ago[mlir][spirv] Fix wrong Phi parent block for back-to-back loops
Lei Zhang [Sat, 4 Apr 2020 22:07:45 +0000 (18:07 -0400)]
[mlir][spirv] Fix wrong Phi parent block for back-to-back loops

If we have two back-to-back loops with block arguments, the OpPhi
instructions generated for the second loop's block arguments should
have use the merge block of the first SPIR-V loop structure as
their incoming parent block.

Differential Revision: https://reviews.llvm.org/D77543

4 years ago[mlir][vulkan-runner] Fix createLowerToLLVMPass interface
Lei Zhang [Tue, 7 Apr 2020 16:53:11 +0000 (12:53 -0400)]
[mlir][vulkan-runner] Fix createLowerToLLVMPass interface

createLowerToLLVMPass() now requires a struct for passing in arguments
after 7023f4b4cb0157d95d98f32ace247acd9fc7b80a.

4 years agoDAG: Use the correct getPointerTy in a few places
Matt Arsenault [Fri, 21 Jun 2019 14:06:44 +0000 (10:06 -0400)]
DAG: Use the correct getPointerTy in a few places

These should not be assuming address space 0. Calling getPointerTy is
generally the wrong thing to do, since you should already know the
type from the incoming IR.

4 years agoSlightly modify some tests as follow up to bcf66084, which breaks tests.
Amy Huang [Tue, 7 Apr 2020 16:24:18 +0000 (09:24 -0700)]
Slightly modify some tests as follow up to bcf66084, which breaks tests.

The change in bcf6604 added a debug info flag, which caused some tests
to fail; I removed some commas so that the test matching still works.

4 years ago[DebugInfo] Fix for adding "returns cxx udt" option to functions in CodeView.
Amy Huang [Tue, 4 Feb 2020 21:20:13 +0000 (13:20 -0800)]
[DebugInfo] Fix for adding "returns cxx udt" option to functions in CodeView.

Summary:
This change adds DIFlagNonTrivial to forward declarations of
DICompositeType. It adds the flag to nontrivial types and types with
unknown triviality.

It fixes adding the "CxxReturnUdt" flag to functions inconsistently,
since it is added based on whether the return type is marked NonTrivial, and
that changes if the return type was a forward declaration.

continues the discussion at https://reviews.llvm.org/D75215

Bug: https://bugs.llvm.org/show_bug.cgi?id=44785

Reviewers: rnk, dblaikie, aprantl

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D77436

4 years ago[RDA] Avoid full reprocessing of blocks in loops (NFCI)
Nikita Popov [Sat, 4 Apr 2020 22:22:54 +0000 (00:22 +0200)]
[RDA] Avoid full reprocessing of blocks in loops (NFCI)

RDA sometimes needs to visit blocks twice, to take into account
reaching defs coming in along loop back edges. Currently it handles
repeated visitation the same way as usual, which means that it will
scan through all instructions and their reg unit defs again. Not
only is this very inefficient, it also means that all reaching defs
in loops are going to be inserted twice.

We can do much better than this. The only thing we need to handle
is a new reaching def from a predecessor, which either needs to be
prepended to the reaching definitions (if there was no reaching def
from a predecessor), or needs to replace an existing predecessor
reaching def, if it is more recent. Since D77508 we only store the
most recent predecessor reaching def, so that's the only one that
may need updating.

This also has the nice side-effect that reaching definitions are
now automatically sorted and unique, so drop the llvm::sort() call
in favor of an assertion.

Differential Revision: https://reviews.llvm.org/D77511

4 years ago[RDA] Don't pass down TraversedMBB (NFC)
Nikita Popov [Sun, 5 Apr 2020 19:14:59 +0000 (21:14 +0200)]
[RDA] Don't pass down TraversedMBB (NFC)

Only pass the MachineBasicBlock itself down to helper methods,
they don't need to know about traversal. Move the debug print
into the main method.

4 years ago[RDA] Avoid inserting duplicate reaching defs (NFCI)
Nikita Popov [Sun, 5 Apr 2020 19:09:49 +0000 (21:09 +0200)]
[RDA] Avoid inserting duplicate reaching defs (NFCI)

An instruction may define the same reg unit multiple times,
avoid inserting the same reaching def multiple times in that case.

Also print the reg unit, rather than the super-register, in the
debug code.

4 years ago[NFC][PowerPC] Cleanup 64-bit and Darwin CalleeSavedRegs
David Tenty [Tue, 7 Apr 2020 13:57:56 +0000 (09:57 -0400)]
[NFC][PowerPC] Cleanup 64-bit and Darwin CalleeSavedRegs

Summary:
- Remove the no longer used Darwin CalleeSavedRegs
- Combine the SVR464 callee saved regs and AIX64 since the two are (and should be) identical into PPC64
- Update tests for 64-bit CSR change

Reviewers: sfertile, ZarkoCA, cebowleratibm, jasonliu, #powerpc

Reviewed By: sfertile

Subscribers: wuzish, nemanjai, hiraditya, kbarton, shchenz, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77235

4 years ago[NFC][XCOFF] refactor readobj/XCOFFDumper.cpp
diggerlin [Tue, 7 Apr 2020 15:33:31 +0000 (11:33 -0400)]
[NFC][XCOFF] refactor readobj/XCOFFDumper.cpp

SUMMARY:

refactor readobj/XCOFFDumper.cpp with helper function getAlignmentLog2() , getSymbolType(), isLabel().

Reviewers: Hubert Tong, James Henderson
Subscribers: rupprecht, seiyai,hiradityu

Differential Revision: https://reviews.llvm.org/D77562

4 years agotsan: fix Go/ppc build
Dmitry Vyukov [Tue, 7 Apr 2020 09:51:07 +0000 (11:51 +0200)]
tsan: fix Go/ppc build

PPC now requires ReExec due to ASLR.
Pull in more functions for Go build.

Suggested-by: Keith Randall (khr)
4 years ago[lldb][NFC] Fix typo in 'watchpoint delete' error message
Raphael Isemann [Tue, 7 Apr 2020 14:11:16 +0000 (16:11 +0200)]
[lldb][NFC] Fix typo in 'watchpoint delete' error message

4 years agoLLD Support for Basic Block Sections
Sriraman Tallam [Tue, 7 Apr 2020 13:48:18 +0000 (06:48 -0700)]
LLD Support for Basic Block Sections

This is part of the Propeller framework to do post link code layout
optimizations. Please see the RFC here:
https://groups.google.com/forum/#!msg/llvm-dev/ef3mKzAdJ7U/1shV64BYBAAJ and the
detailed RFC doc here:
https://github.com/google/llvm-propeller/blob/plo-dev/Propeller_RFC.pdf

This patch adds lld support for basic block sections and performs relaxations
after the basic blocks have been reordered.

After the linker has reordered the basic block sections according to the
desired sequence, it runs a relaxation pass to optimize jump instructions.
Currently, the compiler emits the long form of all jump instructions. AMD64 ISA
supports variants of jump instructions with one byte offset or a four byte
offset. The compiler generates jump instructions with R_X86_64 32-bit PC
relative relocations. We would like to use a new relocation type for these jump
instructions as it makes it easy and accurate while relaxing these instructions.

The relaxation pass does two things:

First, it deletes all explicit fall-through direct jump instructions between
adjacent basic blocks. This is done by discarding the tail of the basic block
section.

Second, If there are consecutive jump instructions, it checks if the first
conditional jump can be inverted to convert the second into a fall through and
delete the second.

The jump instructions are relaxed by using jump instruction mods, something
like relocations. These are used to modify the opcode of the jump instruction.
Jump instruction mods contain three values, instruction offset, jump type and
size. While writing this jump instruction out to the final binary, the linker
uses the jump instruction mod to determine the opcode and the size of the
modified jump instruction. These mods are required because the input object
files are memory-mapped without write permissions and directly modifying the
object files requires copying these sections. Copying a large number of basic
block sections significantly bloats memory.

Differential Revision: https://reviews.llvm.org/D68065

4 years ago[hip] Remove `hip_pinned_shadow`.
Michael Liao [Thu, 26 Mar 2020 15:21:45 +0000 (11:21 -0400)]
[hip] Remove `hip_pinned_shadow`.

Summary:
- Use `device_builtin_surface` and `device_builtin_texture` for
  surface/texture reference support. So far, both the host and device
  use the same reference type, which could be revised later when
  interface/implementation is stablized.

Reviewers: yaxunl

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D77583

4 years ago[X86][SSE] combineX86ShufflesConstants - early out for zeroable vectors (PR45443)
Simon Pilgrim [Tue, 7 Apr 2020 13:45:16 +0000 (14:45 +0100)]
[X86][SSE] combineX86ShufflesConstants - early out for zeroable vectors (PR45443)

Shuffle combining can insert zero byte sized elements into the shuffle mask, which combineX86ShufflesConstants will attempt to fold without taking into account whether the byte-sized type is legal (e.g. AVX512F only targets).

If we have a full-zeroable vector then we should just return a zero version of the root type, otherwise if the type isn't valid we should bail.

Fixes PR45443

4 years agoRevert "[analyzer] Try to lift 'REQUIRES: shell' for scan-build tests."
Artem Dergachev [Tue, 7 Apr 2020 13:37:20 +0000 (16:37 +0300)]
Revert "[analyzer] Try to lift 'REQUIRES: shell' for scan-build tests."

This reverts commit cfd388d344ab29ad5e311ac96e382d96bd85d994.

4 years ago[libc++abi] Enable the new libc++ testing format by default
Louis Dionne [Tue, 7 Apr 2020 13:16:06 +0000 (09:16 -0400)]
[libc++abi] Enable the new libc++ testing format by default

The new format should be equivalent to the old format, and it is now the
default format when running the libc++ tests. This commit changes the
libc++abi tests to use the new format by default too. If unexpected failures
are discovered, it should be fine to revert this commit until they are
addressed.

Also note that it is still possible to use the old format by passing
`--param=use_old_format=True` when running Lit for the time being.

4 years ago[libc++] Support .sh.s tests in the new format
Louis Dionne [Tue, 7 Apr 2020 13:12:44 +0000 (09:12 -0400)]
[libc++] Support .sh.s tests in the new format

libc++abi has two of these tests.

4 years ago[Syntax] Add mapping from spelled to expanded tokens for TokenBuffer
Marcel Hlopko [Tue, 7 Apr 2020 12:58:10 +0000 (14:58 +0200)]
[Syntax] Add mapping from spelled to expanded tokens for TokenBuffer

Summary:
Same restrictions apply as in the other direction: macro arguments are
not supported yet, only full macro expansions can be mapped.

Taking over from https://reviews.llvm.org/D72581.

Reviewers: gribozavr2, sammccall

Reviewed By: gribozavr2

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D77209

4 years ago[Syntax] Merge overlapping top-level macros in TokenBuffer
Sam McCall [Tue, 7 Apr 2020 00:49:51 +0000 (02:49 +0200)]
[Syntax] Merge overlapping top-level macros in TokenBuffer

Summary:
Our previous definition of "top-level" was too informal, and didn't
allow for overlapping macros that each directly produce expanded tokens.
See D77507 for previous discussion.

Fixes http://bugs.llvm.org/show_bug.cgi?id=45428

Reviewers: kadircet, vabridgers

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D77615

4 years ago[Clang] Add llvm.loop.unroll.disable to loops with -fno-unroll-loops.
Florian Hahn [Tue, 7 Apr 2020 12:43:48 +0000 (13:43 +0100)]
[Clang] Add llvm.loop.unroll.disable to loops with -fno-unroll-loops.

Currently Clang does not respect -fno-unroll-loops during LTO. During
D76916 it was suggested to respect -fno-unroll-loops on a TU basis.

This patch uses the existing llvm.loop.unroll.disable metadata to
disable loop unrolling explicitly for each loop in the TU if
unrolling is disabled. This should ensure that loops from TUs compiled
with -fno-unroll-loops are skipped by the unroller during LTO.

This also means that if a loop from a TU with -fno-unroll-loops
gets inlined into a TU without this option, the loop won't be
unrolled.

Due to the fact that some transforms might drop loop metadata, there
potentially are cases in which we still unroll loops from TUs with
-fno-unroll-loops. I think we should fix those issues rather than
introducing a function attribute to disable loop unrolling during LTO.
Improving the metadata handling will benefit other use cases, like
various loop pragmas, too. And it is an improvement to clang completely
ignoring -fno-unroll-loops during LTO.

If that direction looks good, we can use a similar approach to also
respect -fno-vectorize during LTO, at least for LoopVectorize.

In the future, this might also allow us to remove the UnrollLoops option
LLVM's PassManagerBuilder.

Reviewers: Meinersbur, hfinkel, dexonsmith, tejohnson

Reviewed By: Meinersbur, tejohnson

Differential Revision: https://reviews.llvm.org/D77058

4 years ago[Syntax] Simplify TokenCollector::Builder, use captured expansion bounds. NFC
Sam McCall [Tue, 7 Apr 2020 00:46:16 +0000 (02:46 +0200)]
[Syntax] Simplify TokenCollector::Builder, use captured expansion bounds. NFC

Summary:
The motivation here is fixing https://bugs.llvm.org/show_bug.cgi?id=45428, see
D77507. The fundamental problem is that a "top-level" expansion wasn't precisely
defined. Repairing this concept means that TokenBuffer's "top-level expansion"
may not correspond to a single macro expansion. Example:

```
M(2); // expands to 1+2
```

The expansions overlap, but neither expansion alone yields all the tokens.
We need a TokenBuffer::Mapping that corresponds to their union.

This is fairly easy to fix in CollectPPExpansions, but the current design of
TokenCollector::Builder needs a fix too as it relies on the macro's expansion
range rather than the captured expansion bounds. This fix is hard to make due
to the way code is reused within Builder. And honestly, I found that code pretty
hard to reason about too.

The new approach doesn't use the expansion range, but only the expansion
location: it assumes an expansion is the contiguous set of expanded tokens with
the same expansion location, which seems like a reasonable formalization of
the "top-level" notion.

And hopefully the control flow is easier to follow too, it's considerably
shorter even with more documentation.

Reviewers: kadircet

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D77614