platform/upstream/llvm.git
4 years agoAMDGPU: Use 128-bit DS operations by default
Matt Arsenault [Wed, 1 Apr 2020 20:46:10 +0000 (16:46 -0400)]
AMDGPU: Use 128-bit DS operations by default

4 years agoAMDGPU: Add some tests for exotic denormal mode combinations
Matt Arsenault [Wed, 11 Dec 2019 12:42:52 +0000 (18:12 +0530)]
AMDGPU: Add some tests for exotic denormal mode combinations

4 years agoAMDGPU: Remove denormal subtarget features
Matt Arsenault [Mon, 18 Nov 2019 11:18:07 +0000 (16:48 +0530)]
AMDGPU: Remove denormal subtarget features

Switch to using the denormal-fp-math/denormal-fp-math-f32 attributes.

4 years agoclang/AMDGPU: Stop setting old denormal subtarget features
Matt Arsenault [Wed, 1 Apr 2020 17:57:16 +0000 (13:57 -0400)]
clang/AMDGPU: Stop setting old denormal subtarget features

4 years agoAMDGPU: Assume f32 denormals are enabled by default
Matt Arsenault [Fri, 1 Nov 2019 06:32:31 +0000 (23:32 -0700)]
AMDGPU: Assume f32 denormals are enabled by default

This will likely introduce catastrophic performance regressions on
older subtargets, but should be correct. A follow up change will
remove the old fp32-denormals subtarget features, and switch to using
the new denormal-fp-math/denormal-fp-math-f32 attributes. Frontends
should be making sure to add the denormal-fp-math-f32 attribute when
appropriate to avoid performance regressions.

4 years agoutils: Tweak clang-parse-diagnostics-file for modules includes
Duncan P. N. Exon Smith [Thu, 2 Apr 2020 17:27:42 +0000 (10:27 -0700)]
utils: Tweak clang-parse-diagnostics-file for modules includes

Diagnostics from modules do not have a `main-file` listed.  Tweak
`clang-parse-diagnostics-file` to patch this up.  Previously, the call
to `os.path.basename` would crash.

Radar-Id: rdar://problem/59000292

4 years ago[libc++] NFC: Add documentation for writing tests
Louis Dionne [Thu, 2 Apr 2020 21:14:45 +0000 (17:14 -0400)]
[libc++] NFC: Add documentation for writing tests

4 years ago[libc++] Refer to the Filesystem static test env as relative paths
Louis Dionne [Wed, 1 Apr 2020 20:26:31 +0000 (16:26 -0400)]
[libc++] Refer to the Filesystem static test env as relative paths

Instead of hardcoding absolute paths on the build-host in the executables,
use relative paths from the current working directory. Also, use
FILE_DEPENDENCIES to mark the static test env as being required by
the relevant tests.

Given a SSH executor that copies the files to the remote host properly,
the tests can be run on that remote host.

4 years agoReland "Make it possible for lit.site.cfg to contain relative paths, and use it for...
Nico Weber [Thu, 2 Apr 2020 19:51:58 +0000 (15:51 -0400)]
Reland "Make it possible for lit.site.cfg to contain relative paths, and use it for llvm and clang"

The problem on Windows was that the \b in "..\bin" was interpreted
as an escape sequence. Use r"" strings to prevent that.

This reverts commit ab11b9eefa16661017c2c7b3b34c46b069f43fb7,
with raw strings in the lit.site.cfg.py.in files.

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

4 years ago[llvm][TextAPI] adding inlining reexported libraries support
Cyndy Ishida [Wed, 1 Apr 2020 16:41:39 +0000 (09:41 -0700)]
[llvm][TextAPI] adding inlining reexported libraries support

Summary:
[llvm][TextAPI] adding inlining reexported libraries support

* this patch adds reader/writer support for MachO tbd files.
The usecase is to represent reexported libraries in top level library
that won't need to exist for linker indirection because all of the
needed content will be inlined in the same document.

Reviewers: ributzka, steven_wu, jhenderson

Reviewed By: ributzka

Subscribers: JDevlieghere, hiraditya, mgrang, dexonsmith, rupprecht, llvm-commits

Tags: #llvm

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

4 years ago[libc++][test] Partially revert msvc_stdlib_force_include.h _Pragma change
Casey Carter [Thu, 2 Apr 2020 19:59:57 +0000 (12:59 -0700)]
[libc++][test] Partially revert msvc_stdlib_force_include.h _Pragma change

... keep the warning suppression, but revert the `__pragma` to `_Pragma` change because `_Pragma` interacts badly with `/Zc:preprocessor`.

4 years ago[X86] Enable combineExtSetcc for vectors larger than 256 bits when we've disabled...
Craig Topper [Thu, 2 Apr 2020 19:08:56 +0000 (12:08 -0700)]
[X86] Enable combineExtSetcc for vectors larger than 256 bits when we've disabled 512 bit vectors.

The compares are going to be type legalized to 256 bits so we
might as well fold the extend.

4 years agoReland D75382 "[lld] Initial commit for new Mach-O backend"
Fangrui Song [Thu, 2 Apr 2020 18:54:05 +0000 (11:54 -0700)]
Reland D75382 "[lld] Initial commit for new Mach-O backend"

With a fix for http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/3636

Also trims some unneeded dependencies.

4 years agoRevert "Make it possible for lit.site.cfg to contain relative paths, and use it for...
Nico Weber [Thu, 2 Apr 2020 18:58:44 +0000 (14:58 -0400)]
Revert "Make it possible for lit.site.cfg to contain relative paths, and use it for llvm and clang"

This reverts commit fb80b6b2d58c476747a3206bd4371b787108591b and
follow-up 631ee8b24adf36359b61ecb47484e8e82de35be8.

Seems to not work on Windows:
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/31684
http://lab.llvm.org:8011/builders/llvm-clang-win-x-aarch64/builds/6512

Let's revert while I investigate.

4 years agoChange pass registration generated code to allow users to selectively register passes
Mehdi Amini [Thu, 2 Apr 2020 17:36:11 +0000 (17:36 +0000)]
Change pass registration generated code to allow users to selectively register passes

This slightly tweaks the generated code from:

  #ifdef GEN_PASS_REGISTRATION
  ::mlir::registerPass("flag1", ...
  ::mlir::registerPass("flag2", ...
  #endif // GEN_PASS_REGISTRATION

to:

  #ifdef GEN_PASS_REGISTRATION
  #define GEN_PASS_REGISTRATION_Pass1
  #define GEN_PASS_REGISTRATION_Pass2
  #endif // GEN_PASS_REGISTRATION

  #ifdef GEN_PASS_REGISTRATION_Pass1
  ::mlir::registerPass("flag1", ...
  #endif
  #ifdef GEN_PASS_REGISTRATION_Pass1
  ::mlir::registerPass("flag2", ...
  #endif

That way the generated code can be included by defining the
`GEN_PASS_REGISTRATION` macro as currenty and register all the passes,
but one can also define only `GEN_PASS_REGISTRATION_Pass1` to register a
subset of the passes.

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

4 years ago[intel-pt] Implement a basic test case
Walter Erquinigo [Tue, 31 Mar 2020 00:26:58 +0000 (17:26 -0700)]
[intel-pt] Implement a basic test case

* This is a reattempted commit due to a previous builtbot failure

- Now using a env var to determine whether to run the test, as
someone might have built liblldbIntelFeatures.so without intelPT
support, which would make this test fail.

Summary:
Depends on D76872.

There was no test for the Intel PT support on LLDB, so I'm creating one, which
will help making progress on solid grounds.

The test is skipped if the Intel PT plugin library is not built.

Reviewers: clayborg, labath, kusmour, aadsm

Subscribers: lldb-commits

Tags: #lldb

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

4 years agoMake fb80b6b2d58c4 actually work.
Nico Weber [Thu, 2 Apr 2020 18:28:34 +0000 (14:28 -0400)]
Make fb80b6b2d58c4 actually work.

I broke it with last-minute changes right before committing.

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

4 years ago[InlineFunction] Update valid return attributes at callsite within callee body
Anna Thomas [Wed, 1 Apr 2020 15:16:11 +0000 (11:16 -0400)]
[InlineFunction] Update valid return attributes at callsite within callee body

Consider a callee function that has a call (C) within it which feeds
into the return. When we inline that callee into a callsite that has
return attributes, we can backward propagate valid attributes to the
call (C) within that inlined callee body.

This is safe to do so only if we can guarantee transfer of execution to
successor in the window of instructions between return value (i.e. the
call C) and the return instruction.

Also, this is valid only for attributes which are a property of a
callsite and not those that are not dependent on the ABI, or a property
of the call itself.

Reviewed-By: reames, jdoerfert
Differential Revision: https://reviews.llvm.org/D76140

4 years agoAMDGPU: Hack out noinline on functions using LDS globals
Matt Arsenault [Thu, 2 Apr 2020 15:52:23 +0000 (11:52 -0400)]
AMDGPU: Hack out noinline on functions using LDS globals

This is a workaround for clang adding noinline to all functions at
-O0. Previously, we would just add alwaysinline, and the verifier
would complain about having both noinline and alwaysinline. We
currently can't truly codegen this case as a freestanding function, so
override the user forcing noinline.

4 years agoMake it possible for lit.site.cfg to contain relative paths, and use it for llvm...
Nico Weber [Tue, 31 Mar 2020 20:35:32 +0000 (16:35 -0400)]
Make it possible for lit.site.cfg to contain relative paths, and use it for llvm and clang

Currently, all generated lit.site.cfg files contain absolute paths.

This makes it impossible to build on one machine, and then transfer the
build output to another machine for test execution. Being able to do
this is useful for several use cases:

1. When running tests on an ARM machine, it would be possible to build
   on a fast x86 machine and then copy build artifacts over after building.

2. It allows running several test suites (clang, llvm, lld) on 3
   different machines, reducing test time from sum(each test suite time) to
   max(each test suite time).

This patch makes it possible to pass a list of variables that should be
relative in the generated lit.site.cfg.py file to
configure_lit_site_cfg(). The lit.site.cfg.py.in file needs to call
`path()` on these variables, so that the paths are converted to absolute
form at lit start time.

The testers would have to have an LLVM checkout at the same revision,
and the build dir would have to be at the same relative path as on the
builder.

This does not yet cover how to figure out which files to copy from the
builder machine to the tester machines. (One idea is to look at the
`--graphviz=test.dot` output and copy all inputs of the `check-llvm`
target.)

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

4 years agoExit unwinding early when at the top of the stack and additional info won't be found.
Sterling Augustine [Mon, 30 Mar 2020 22:20:26 +0000 (15:20 -0700)]
Exit unwinding early when at the top of the stack and additional info won't be found.

Summary:
This patch follows libgcc's lead: When the return-address register is
zero, there won't be additional stack frames to examine, or gather
information about. Exit before spending time looking for something
known not to be found.

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[InstCombine] try to reduce shuffle with bitcasted operand
Sanjay Patel [Thu, 2 Apr 2020 17:44:50 +0000 (13:44 -0400)]
[InstCombine] try to reduce shuffle with bitcasted operand

shuf (bitcast X), undef, Mask --> bitcast X'

The 'inverse shuffles' test (shuf_bitcast_operand) is a pattern
in the motivating examples from PR35454:
https://bugs.llvm.org/show_bug.cgi?id=35454
(see also D76727)

We can deal with this class of patterns in generic instcombine
because we are not creating any new shuffles, just a bitcast.

Alive2 proof:
http://volta.cs.utah.edu:8080/z/mwDUZf

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

4 years ago[VectorCombine] transform bitcasted shuffle to narrower elements
Sanjay Patel [Thu, 2 Apr 2020 17:21:29 +0000 (13:21 -0400)]
[VectorCombine] transform bitcasted shuffle to narrower elements

bitcast (shuf V, MaskC) --> shuf (bitcast V), MaskC'

We do not attempt this in InstCombine because we do not want to change
types and create new shuffle ops that are potentially not lowered as
well as the original code. Here, we can check the cost model to see if
it is worthwhile.

I've aggressively enabled this transform even if the types are the same
size and/or equal cost because moving the bitcast allows InstCombine to
make further simplifications.

In the motivating cases from PR35454:
https://bugs.llvm.org/show_bug.cgi?id=35454
...this is enough to let instcombine and the backend eliminate the
redundant shuffles, but we probably want to extend VectorCombine to
handle the inverse pattern (shuffle-of-bitcast) to get that
simplification directly in IR.

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

4 years ago[AMDGPU] Fix crash in SILoadStoreOptimizer
Stanislav Mekhanoshin [Wed, 1 Apr 2020 21:58:12 +0000 (14:58 -0700)]
[AMDGPU] Fix crash in SILoadStoreOptimizer

SILoadStoreOptimizer::checkAndPrepareMerge() expects base and
paired instruction to come in order and scans MBB from base to
the paired instruction. An original order can be changed if
there were a dependent instruction in between and base instruction
was moved.

Fixed by bailing the optimization. In theory it might be possible
still to perform a merge by swapping instructions, but on practice
it bails anyway because it finds dependency on that same instruction
which has resulted in the base move.

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

4 years ago[libc++abi] NFC: Add link to review in workaround comment
Louis Dionne [Thu, 2 Apr 2020 17:20:23 +0000 (13:20 -0400)]
[libc++abi] NFC: Add link to review in workaround comment

To avoid wasting the valuable time of contributors, add a link to a
blocked review to document additional issues with the removal of some
GCC 4.9 workaround.

4 years ago[libc++] Try to fix Chromium's build
Louis Dionne [Thu, 2 Apr 2020 17:11:50 +0000 (13:11 -0400)]
[libc++] Try to fix Chromium's build

Chromium's build sets LIBCXX_CXX_ABI_SYSTEM explicitly when building
libc++, which was broken by 61e89737c5da (which stopped listening to
that option). As a workaround, this commit uses the system libc++abi
when LIBCXX_CXX_ABI_SYSTEM is used.

However, we will need to work with Chromium to standardize their build
of libc++, because LIBCXX_CXX_ABI_SYSTEM is not a public facing build
configuration for libc++, and has never been AFAICT.

4 years ago[mlir][LLVM] Finer-grained control for C interface emission
Nicolas Vasilache [Thu, 2 Apr 2020 17:02:40 +0000 (13:02 -0400)]
[mlir][LLVM] Finer-grained control for C interface emission

C interface emission is controlled by a flag and has coarse granularity.
With this coarse control, interfaces are emitted for all external functions.
This makes is easy to get undefined symbols.

This revision adds support for controlling per-function emission with an "emit_c_interface" attribute.

4 years ago[InstCombine] add tests for cmyk benchmark; NFC
Sanjay Patel [Thu, 2 Apr 2020 16:02:37 +0000 (12:02 -0400)]
[InstCombine] add tests for cmyk benchmark; NFC

These are versions of a function that regressed with:
rGf2fbdf76d8d0

That particular problem occurs with an instcombine-simplifycfg-instcombine
sequence, but we can show that it exists within instcombine only with
other variations of the pattern.

4 years agoConvert for loops to entry-based iteration
Shivam Mittal [Thu, 2 Apr 2020 14:36:07 +0000 (16:36 +0200)]
Convert for loops to entry-based iteration

Summary: Convert index-based loops marked TODO in CommandObjectSettings and CommandObjectTarget to entry-based.

Reviewers: labath

Reviewed By: labath

Subscribers: lldb-commits

Tags: #lldb

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

4 years ago[mlir] StandardToLLVM conversion: remove dead code
Alex Zinenko [Thu, 2 Apr 2020 16:52:40 +0000 (18:52 +0200)]
[mlir] StandardToLLVM conversion: remove dead code

This code is unused since 04ed07bc174149d61c8a4ed131f0838578bdcaa5,
but it was not removed in that commit.

4 years ago[gn build] Port c00cb76274f
LLVM GN Syncbot [Thu, 2 Apr 2020 16:36:36 +0000 (16:36 +0000)]
[gn build] Port c00cb76274f

4 years ago[gn build] Port 24bb2d1e776
LLVM GN Syncbot [Thu, 2 Apr 2020 16:36:35 +0000 (16:36 +0000)]
[gn build] Port 24bb2d1e776

4 years agoRevert "[gn build] Port 03f43b3aca36"
Nico Weber [Thu, 2 Apr 2020 16:36:06 +0000 (12:36 -0400)]
Revert "[gn build] Port 03f43b3aca36"

This reverts commit 45b6364e8d74f6038e94b760f017e03740acf725,
03f43b3aca36 was reverted in af39151f3c54.

4 years ago[ELF] Change some "Alias for " help messages to use double dashed options
Fangrui Song [Thu, 2 Apr 2020 16:25:21 +0000 (09:25 -0700)]
[ELF] Change some "Alias for " help messages to use double dashed options

The aliased options in the --help output use double dashes. It is
inconsistent to have single-dashed messages. Additionally, -l and -t are
common short options and single-dashed forms prefixed with them can
cause confusion.

4 years ago[libc++] Attempt to fix the 'runtimes' build
Louis Dionne [Thu, 2 Apr 2020 16:08:10 +0000 (12:08 -0400)]
[libc++] Attempt to fix the 'runtimes' build

The 'runtimes' build started failing because libc++ stopped using the
in-tree libc++abi when HAVE_CXXABI is set after 61e89737c. This commit
tries to bring back the old behavior when HAVE_CXXABI is set in order
to fix CIs.

However, we really need to sit down and discuss what ways of building
libc++ are supported and formalize them, because having the libc++ build
system branch on basically random variables in some CMake cache somewhere
is not a viable path forward.

4 years ago[LoopDataPrefetch] Remove unused include that's a layering violation
Benjamin Kramer [Thu, 2 Apr 2020 15:46:10 +0000 (17:46 +0200)]
[LoopDataPrefetch] Remove unused include that's a layering violation

4 years agoNFC: Comment in TargetTransformInfo.h reformatted (by Michael Kruse).
Jonas Paulsson [Thu, 2 Apr 2020 15:35:32 +0000 (17:35 +0200)]
NFC: Comment in TargetTransformInfo.h reformatted (by Michael Kruse).

4 years ago[clangd] Support textDocument/semanticTokens/edits
Sam McCall [Wed, 1 Apr 2020 14:21:44 +0000 (16:21 +0200)]
[clangd] Support textDocument/semanticTokens/edits

Summary:
This returns incremental highlights as a set of edits against the
previous highlights.

Server-side, we compute the full set of highlights, this just saves
wire-format size.

For now, the diff used is trivial: everything from the first change to
the last change is sent as a single edit.

The wire format is grungy - the replacement offset/length refer to
positions in the encoded array instead of the logical list of tokens.
We use token-oriented structs and translating to LSP forms when serializing.
This departs from LSP (but is consistent with semanticTokens today).

Tested in VSCode insiders (with a patched client to enable experimental
features).

Reviewers: hokein

Subscribers: ilya-biryukov, MaskRay, jkorous, mgrang, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[clangd] Don't send semanticHighlights to clients that support semanticTokens.
Sam McCall [Wed, 1 Apr 2020 10:02:28 +0000 (12:02 +0200)]
[clangd] Don't send semanticHighlights to clients that support semanticTokens.

Summary: This allows the standard mechanism to gracefully displace the old one.

Reviewers: hokein

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[clangd] Add a tweak for adding "using" statement.
Adam Czachorowski [Thu, 2 Apr 2020 15:29:35 +0000 (17:29 +0200)]
[clangd] Add a tweak for adding "using" statement.

Summary:
This triggers on types and function calls with namespace qualifiers. The
action is to remove the qualifier and instead add a "using" statement at
appropriate place.

It is not always clear where to add the "using" line. Right now we find
the nearest "using" line and add it there, thus keeping with local
convention. If there are no usings, we put it at the deepest relevant
namespace level.

This is an initial version only. There are several improvements that
can be made:
* Support for qualifiers that are not purely namespace (e.g.  record
types, etc).
* Removing qualifier from other instances of the same type/call.
* Smarter placement of the "using" line.

Reviewers: sammccall

Reviewed By: sammccall

Subscribers: nridge, mgorny, ilya-biryukov, MaskRay, jkorous, mgrang, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years agoRevert "[SimplifyLibCalls] Erase replaced instructions"
Benjamin Kramer [Thu, 2 Apr 2020 15:30:47 +0000 (17:30 +0200)]
Revert "[SimplifyLibCalls] Erase replaced instructions"

This reverts commit 2a77544ad5911a38f81c0300385033fced1cc66d. This
introduces a use-after-free in Transforms/InstCombine/sincospi.ll.
Found by asan.

4 years ago[NFC] remove delcartion that shouldn't be there
Tyker [Thu, 2 Apr 2020 14:43:38 +0000 (16:43 +0200)]
[NFC] remove delcartion that shouldn't be there

4 years ago[libc++][test] Update _LIBCPP_SUPPRESS_DEPRECATED_(PUSH|POP)
Casey Carter [Thu, 2 Apr 2020 15:01:08 +0000 (08:01 -0700)]
[libc++][test] Update _LIBCPP_SUPPRESS_DEPRECATED_(PUSH|POP)

... in `msvc_stdlib_force_include.h` to also ignore new MSVC warning C5215 "'%s' a function parameter with volatile qualified type is deprecated in C++20". Since we're touching it, also update from non-standard `__pragma(meow)` to standard `_Pragma("meow")`.

4 years ago[analyzer] StdLibraryFunctionsChecker: fix bug with arg constraints
Gabor Marton [Thu, 2 Apr 2020 14:59:02 +0000 (16:59 +0200)]
[analyzer] StdLibraryFunctionsChecker: fix bug with arg constraints

Summary:
Previously we induced a state split if there were multiple argument
constraints given for a function. This was because we called
`addTransition` inside the for loop.
The fix is to is to store the state and apply the next argument
constraint on that. And once the loop is finished we call `addTransition`.

Reviewers: NoQ, Szelethus, baloghadamsoftware

Subscribers: whisperity, xazax.hun, szepet, rnkovacs, a.sidorin, mikhail.ramalho, donat.nagy, dkrupp, gamesh411, C

Tags: #clang

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

4 years ago[clangd] Get rid of redundant make_uniques
Kadir Cetinkaya [Thu, 2 Apr 2020 14:51:59 +0000 (16:51 +0200)]
[clangd] Get rid of redundant make_uniques

4 years ago[libc++] Reimplement the dynamic filesystem helper without using Python
Louis Dionne [Mon, 30 Mar 2020 19:53:16 +0000 (15:53 -0400)]
[libc++] Reimplement the dynamic filesystem helper without using Python

This patch reimplements the dynamic filesystem helper using Posix
functionality instead of relying on Python. The primary reason for
doing this is that it allows running the libc++ test suite on devices
that do not have Python.

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

4 years agoFix several typos in the attribute documentation.
Aaron Ballman [Thu, 2 Apr 2020 14:31:06 +0000 (10:31 -0400)]
Fix several typos in the attribute documentation.

4 years ago[docs] use git diff instead of git format-patch
Alexander Lanin [Thu, 2 Apr 2020 14:18:34 +0000 (07:18 -0700)]
[docs] use git diff instead of git format-patch

Uploading output from `git format-patch` fails when version has
more than 2 dots, e.g. git version 2.24.1.windows.2 which is
currently recommended by e.g. GitExtensions or 2.24.1.rc on Linux.

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

4 years agoAdd OMPIterator case in switch statement to silence warnings
scentini [Thu, 2 Apr 2020 14:14:17 +0000 (16:14 +0200)]
Add OMPIterator case in switch statement to silence warnings

4 years ago[SystemZ] Add isCommutable flag on vector instructions.
Jonas Paulsson [Wed, 1 Apr 2020 11:20:47 +0000 (13:20 +0200)]
[SystemZ] Add isCommutable flag on vector instructions.

This does not change much in code generation, but in rare cases MachineCSE
can figure out that an instruction is redundant after commuting it.

Review: Ulrich Weigand

4 years ago[lldb] update eArgTypeScriptLang description to mention lua
Ed Maste [Thu, 2 Apr 2020 04:12:01 +0000 (00:12 -0400)]
[lldb] update eArgTypeScriptLang description to mention lua

--script-language python and --script-language lua are both valid now.

Reviewed by: JDevlieghere

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

4 years ago[libc++] Fix linking libc++abi in standalone builds
Raul Tambre [Thu, 2 Apr 2020 13:34:02 +0000 (09:34 -0400)]
[libc++] Fix linking libc++abi in standalone builds

In standalone builds the cxxabi_shared and cxxabi_static targets don't exist.
We need to link against the library itself.

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

4 years agoRevert "[InstCombine] do not exclude min/max from icmp with casted operand fold"
Sanjay Patel [Thu, 2 Apr 2020 13:09:17 +0000 (09:09 -0400)]
Revert "[InstCombine] do not exclude min/max from icmp with casted operand fold"

This reverts commit f2fbdf76d8d07f6a0fbd97825cbc533660d64a37.
As noted in the post-commit thread:
https://reviews.llvm.org/rGf2fbdf76d8d0
...this can obscure a min/max pattern where the components
have extra uses. We can show that the problem is independent
of this change with a slightly modified source example, so
this revert just delays/reduces the need to fix the real
problem.

We need to improve our analysis of negation or -- more
generally -- subtraction using patches like D77230 or D68408.

4 years ago[NFC] Split Knowledge retention and place it more appropriatly
Tyker [Thu, 2 Apr 2020 11:41:24 +0000 (13:41 +0200)]
[NFC] Split Knowledge retention and place it more appropriatly

Summary:
Splitting Knowledge retention into Queries in Analysis and Builder into Transform/Utils
allows Queries and Transform/Utils to use Analysis.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: mgorny, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[LoopDataPrefetch + SystemZ] Let target decide on prefetching for each loop.
Jonas Paulsson [Thu, 31 Oct 2019 15:05:58 +0000 (16:05 +0100)]
[LoopDataPrefetch + SystemZ] Let target decide on prefetching for each loop.

This patch adds

- New arguments to getMinPrefetchStride() to let the target decide on a
  per-loop basis if software prefetching should be done even with a stride
  within the limit of the hw prefetcher.

- New TTI hook enableWritePrefetching() to let a target do write prefetching
  by default (defaults to false).

- In LoopDataPrefetch:

  - A search through the whole loop to gather information before emitting any
    prefetches. This way the target can get information via new arguments to
    getMinPrefetchStride() and emit prefetches more selectively. Collected
    information includes: Does the loop have a call, how many memory
    accesses, how many of them are strided, how many prefetches will cover
    them. This is NFC to before as long as the target does not change its
    definition of getMinPrefetchStride().

  - If a previous access to the same exact address was 'read', and the
    current one is 'write', make it a 'write' prefetch.

  - If two accesses that are covered by the same prefetch do not dominate
    each other, put the prefetch in a block that dominates both of them.

  - If a ConstantMaxTripCount is less than ItersAhead, then skip the loop.

- A SystemZ implementation of getMinPrefetchStride().

Review: Ulrich Weigand, Michael Kruse

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

4 years ago[NFC][PowerPC] Using update_llc_test_checks.py to update atomics-regression.ll
Kang Zhang [Thu, 2 Apr 2020 12:47:35 +0000 (12:47 +0000)]
[NFC][PowerPC] Using update_llc_test_checks.py to update atomics-regression.ll

4 years ago[lldb] Change Communication::SetConnection to take a unique_ptr
Pavel Labath [Thu, 2 Apr 2020 12:40:59 +0000 (14:40 +0200)]
[lldb] Change Communication::SetConnection to take a unique_ptr

The function takes ownership of the object. This makes that explicit,
and avoids unowned pointers floating around.

4 years ago[OPENMP50]Add initial support for OpenMP 5.0 iterator.
Alexey Bataev [Wed, 1 Apr 2020 19:06:38 +0000 (15:06 -0400)]
[OPENMP50]Add initial support for OpenMP 5.0 iterator.

Added basic parsing/semantic analysis/(de)serialization support for
iterator expression introduced in OpenMP 5.0.

4 years agoRevert "[lld] Initial commit for new Mach-O backend"
Oliver Stannard [Thu, 2 Apr 2020 12:09:57 +0000 (13:09 +0100)]
Revert "[lld] Initial commit for new Mach-O backend"

This is causing buildbot failures on 32-bit hosts, for example:
http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/3636

This reverts commit 03f43b3aca363e16c45d8733400fd0083b1af4d8.

4 years ago[OpenCL] Add sub-group builtin functions
Sven van Haastregt [Thu, 2 Apr 2020 12:18:56 +0000 (13:18 +0100)]
[OpenCL] Add sub-group builtin functions

Add the sub-group builtin functions from the OpenCL Extension
specification.  This patch excludes the sub_group_barrier builtins
that take argument types not yet handled by the
`-fdeclare-opencl-builtins` machinery.

Co-authored-by: Pierre Gondois <pierre.gondois@arm.com>
4 years ago[PhaseOrdering] add test for vector trunc; NFC
Sanjay Patel [Thu, 2 Apr 2020 12:12:24 +0000 (08:12 -0400)]
[PhaseOrdering] add test for vector trunc; NFC
See discussion in D76983.

4 years ago[InstCombine] add tests for disguised vector trunc; NFC
Sanjay Patel [Wed, 1 Apr 2020 19:29:51 +0000 (15:29 -0400)]
[InstCombine] add tests for disguised vector trunc; NFC

4 years ago[LoopTerminology] Make term names bold
Stefanos Baziotis [Thu, 2 Apr 2020 11:53:18 +0000 (14:53 +0300)]
[LoopTerminology] Make term names bold

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

4 years ago[gn build] Port 5e508b9bac0
LLVM GN Syncbot [Thu, 2 Apr 2020 11:15:00 +0000 (11:15 +0000)]
[gn build] Port 5e508b9bac0

4 years ago[llvm-dwarfdump] Add the --show-sections-sizes option
Djordje Todorovic [Thu, 2 Apr 2020 08:58:27 +0000 (10:58 +0200)]
[llvm-dwarfdump] Add the --show-sections-sizes option

Add an option to llvm-dwarfdump to calculate the bytes within
the debug sections. Dump this numbers when using --statistics
option as well.

This is an initial patch (e.g. we should support other units,
since we only support 'bytes' now).

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

4 years agoFix "result of 32-bit shift implicitly converted to 64 bits" MSVC warning. NFCI.
Simon Pilgrim [Thu, 2 Apr 2020 11:01:47 +0000 (12:01 +0100)]
Fix "result of 32-bit shift implicitly converted to 64 bits" MSVC warning. NFCI.

The shift of 1 by an amount that is never more than 31 means that the warning is a false positive but is safe and fixes Werror builds.

4 years ago[Clang][CodeGen] Fixing mismatch between memory layout and const expressions for...
Lucas Prates [Fri, 27 Mar 2020 11:53:49 +0000 (11:53 +0000)]
[Clang][CodeGen] Fixing mismatch between memory layout and const expressions for oversized bitfields

Summary:
The construction of constants for structs/unions was conflicting the
expected memory layout for over-sized bit-fields. When building the
necessary bits for those fields, clang was ignoring the size information
computed for the struct/union memory layout and using the original data
from the AST's FieldDecl information. This caused an issue in big-endian
targets, where the field's contant was incorrectly misplaced due to
endian calculations.

This patch aims to separate the constant value from the necessary
padding bits, using the proper size information for each one of them.
With this, the layout of constants for over-sized bit-fields matches the
ABI requirements.

Reviewers: rsmith, eli.friedman, efriedma

Reviewed By: efriedma

Subscribers: efriedma, cfe-commits

Tags: #clang

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

4 years ago[clang][AARCH64] Add __ARM_FEATURE_{PAC, BTI}_DEFAULT defines
Daniel Kiss [Thu, 2 Apr 2020 10:10:41 +0000 (12:10 +0200)]
[clang][AARCH64] Add __ARM_FEATURE_{PAC, BTI}_DEFAULT  defines

Summary:
As defined by Arm C Language Extensions (ACLE) these macro defines
should be set to specific values depending on -mbranch-protection.

Reviewers: chill

Reviewed By: chill

Subscribers: danielkiss, cfe-commits, kristof.beyls

Tags: #clang

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

4 years ago[mlir] LLVMFuncOp: provide a capability to pass attributes through to LLVM IR
Alex Zinenko [Mon, 30 Mar 2020 16:50:42 +0000 (18:50 +0200)]
[mlir] LLVMFuncOp: provide a capability to pass attributes through to LLVM IR

Summary:
LLVM IR functions can have arbitrary attributes attached to them, some of which
affect may affect code transformations. Until we can model all attributes
consistently, provide a pass-through mechanism that forwards attributes from
the LLVMFuncOp in MLIR to LLVM IR functions during translation. This mechanism
relies on LLVM IR being able to recognize string representations of the
attributes and performs some additional checking to avoid hitting assertions
within LLVM code.

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

4 years ago[llvm-mca] Cleanup unnecessary includes from headers
Simon Pilgrim [Thu, 2 Apr 2020 10:40:24 +0000 (11:40 +0100)]
[llvm-mca] Cleanup unnecessary includes from headers

This removes some includes/forward-declarations that don't seem to be necessary in the MCA core headers

Based off a cppclean report

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

4 years agotsan: don't check libc dependency on FreeBSD
Dmitry Vyukov [Thu, 2 Apr 2020 10:46:28 +0000 (12:46 +0200)]
tsan: don't check libc dependency on FreeBSD

This check fails on FreeBSD:
https://github.com/golang/go/issues/14481#issuecomment-607471193
It is meant to prevent regressions, so disable it on FreeBSD.

4 years ago[gn build] Port d1705c1196f
LLVM GN Syncbot [Thu, 2 Apr 2020 10:21:22 +0000 (10:21 +0000)]
[gn build] Port d1705c1196f

4 years ago[gn build] Port d08fadd6628
LLVM GN Syncbot [Thu, 2 Apr 2020 10:21:21 +0000 (10:21 +0000)]
[gn build] Port d08fadd6628

4 years ago[gn build] remove NOSORT from clang/Headers/BUILD.gn
Nico Weber [Thu, 2 Apr 2020 10:16:52 +0000 (06:16 -0400)]
[gn build] remove NOSORT from clang/Headers/BUILD.gn

Having the sync script work for this file seems better
than matching the order of headers in the cmake file.
Also, not having to manually sort the list is nice, even
if gn's automated sorting doesn't quite match the artisanal
order in the cmake file.

4 years ago[NFC][PowerPC] Add a new test case loop-comment.ll
Kang Zhang [Thu, 2 Apr 2020 10:16:02 +0000 (10:16 +0000)]
[NFC][PowerPC] Add a new test case loop-comment.ll

4 years ago[ARM] MVE VMULL patterns
David Green [Wed, 1 Apr 2020 12:58:42 +0000 (13:58 +0100)]
[ARM] MVE VMULL patterns

This adds MVE vmull patterns, which are conceptually the same as
mul(vmovl, vmovl), and so the tablegen patterns follow the same
structure.

For i8 and i16 this is simple enough, but in the i32 version the
multiply (in 64bits) is illegal, meaning we need to catch the pattern
earlier in a dag fold. Because bitcasts are involved in the zext
versions and the patterns are a little different in little and big
endian. I have only added little endian support in this patch.

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

4 years ago[ARM] Make remaining MVE instruction predictable
David Green [Sat, 28 Mar 2020 15:32:47 +0000 (15:32 +0000)]
[ARM] Make remaining MVE instruction predictable

The unpredictable/hasSideEffects flag is usually inferred by tablegen
from whether the instruction has a tablegen pattern (and that pattern
only has a single output instruction). Now that the MVE intrinsics are
all committed and producing code, the remaining instructions still
marked as unpredictable need to be specially handled. This adds the flag
directly to instructions that need it, notably the V*MLAL instructions
and some of the MOV's.

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

4 years agoRecommit "[lldb] Fix TestSettings.test_pass_host_env_vars on windows"
Pavel Labath [Wed, 25 Mar 2020 12:39:05 +0000 (13:39 +0100)]
Recommit "[lldb] Fix TestSettings.test_pass_host_env_vars on windows"

This patch was reverted because it introduced a failure in
TestHelloWorld.py. The reason for that was running "ls" shell command
failed as it was evaluated in an environment with an empty path. This
has now been fixed with D77123, which ensures that all shell commands
inherit the host environment, so this patch should be safe to recommit.

The original commit message was:

A defensive check in ProcessLauncherWindows meant that we would never
attempt to launch a process with a completely empty environment -- the
host environment would be used instead. Instead, I make the function add
an extra null wchar_t at the end of an empty environment. The
documentation on this is a bit fuzzy, but it seems to be what is needed
to make windows accept these kinds of environments.

Reviewers: amccarth, friss

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

4 years ago[NFC][update_llc_test_checks] Remove the redundant SCRUB_LOOP_COMMENT_RE in asm.py
Kang Zhang [Thu, 2 Apr 2020 09:46:45 +0000 (09:46 +0000)]
[NFC][update_llc_test_checks] Remove the redundant SCRUB_LOOP_COMMENT_RE in asm.py

Summary:
In the patch: https://reviews.llvm.org/D42654
De-duplicate utils/update_{llc_,}test_checks.py, Some common part has
been move to common.py. The SCRUB_LOOP_COMMENT_RE has been moved to
common.py, but forgetting to remove from asm.py.
This patch is to remove the redundant SCRUB_LOOP_COMMENT_RE in asm.py
and use common.SCRUB_LOOP_COMMENT_RE.

4 years ago[NFC] Preparatory work for D77292
Guillaume Chatelet [Thu, 2 Apr 2020 09:30:33 +0000 (09:30 +0000)]
[NFC] Preparatory work for D77292

4 years ago[ExpandMemCmp] Allow overlaping loads in the zero-relational case.
Clement Courbet [Tue, 10 Mar 2020 08:37:24 +0000 (09:37 +0100)]
[ExpandMemCmp] Allow overlaping loads in the zero-relational case.

Summary:
This allows doing `memcmp(p, q, 7)` with 2 loads instead of a call to
memcmp.
This fixes part of PR45147.

Reviewers: spatel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[CallSiteSplitting] Simplify isPredicateOnPHI & continue checking PHIs.
Florian Hahn [Thu, 2 Apr 2020 09:06:44 +0000 (10:06 +0100)]
[CallSiteSplitting] Simplify isPredicateOnPHI & continue checking PHIs.

As pointed out by @thakis, currently CallSiteSplitting bails out after
checking the first PHI node. We should check all PHI nodes, until we
find one where call site splitting is beneficial.

This patch also slightly simplifies the code using BasicBlock::phis().

Reviewers: davidxl, junbuml, thakis

Reviewed By: davidxl

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

4 years ago[Alignment][NFC] Use more Align versions of various functions
Guillaume Chatelet [Thu, 2 Apr 2020 08:53:29 +0000 (08:53 +0000)]
[Alignment][NFC] Use more Align versions of various functions

Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: MatzeB, qcolombet, arsenm, sdardis, jvesely, nhaehnle, hiraditya, jrtc27, atanasyan, kerbowa, llvm-commits

Tags: #llvm

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

4 years ago[NFC] Fix performance issue in LiveDebugVariables
OCHyams [Thu, 2 Apr 2020 07:41:25 +0000 (08:41 +0100)]
[NFC] Fix performance issue in LiveDebugVariables

When compiling AMDGPUDisassembler.cpp in a stage 1 trunk build with
CMAKE_BUILD_TYPE=RelWithDebInfo LLVM_USE_SANITIZER=Address LiveDebugVariables
accounts for 21.5% wall clock time. This fix reduces that to 1.2% by switching
out a linked list lookup with a map lookup.

Note that the linked list is still used to group UserValues by vreg. The vreg
lookups don't cause any problems in this pathological case.

This is the same idea as D68816, which was reverted, except that it is a less
intrusive fix.

Reviewed By: vsk

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

4 years ago[Object] Add the method for checking if a section is a debug section
Djordje Todorovic [Thu, 2 Apr 2020 08:00:18 +0000 (10:00 +0200)]
[Object] Add the method for checking if a section is a debug section

Different file formats have different naming style for the debug
sections. The method is implemented for ELF, COFF and Mach-O formats.

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

4 years agoFix RUN line in AArch64/speculation-hardening.ll
Kristof Beyls [Wed, 1 Apr 2020 18:28:54 +0000 (19:28 +0100)]
Fix RUN line in AArch64/speculation-hardening.ll

4 years ago[clang] Move branch-protection from CodeGenOptions to LangOptions
Daniel Kiss [Thu, 2 Apr 2020 08:11:01 +0000 (10:11 +0200)]
[clang] Move branch-protection from CodeGenOptions to  LangOptions

Summary:
Reason: the option has an effect on preprocessing.

Also see thread: http://lists.llvm.org/pipermail/cfe-dev/2020-March/065014.html

Reviewers: chill, efriedma

Reviewed By: efriedma

Subscribers: efriedma, danielkiss, cfe-commits, kristof.beyls

Tags: #clang

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

4 years ago[lit] Improve handling of timeouts and max failures
Julian Lettner [Wed, 27 Feb 2019 06:28:41 +0000 (22:28 -0800)]
[lit] Improve handling of timeouts and max failures

This work prepares us for the overall goal of clean shutdown on user
keyboard interrupt [Ctrl+C].

4 years ago[X86] Add SERIALIZE instruction.
WangTianQing [Thu, 2 Apr 2020 08:15:34 +0000 (16:15 +0800)]
[X86] Add SERIALIZE instruction.

Summary: For more details about this instruction, please refer to the latest ISE document: https://software.intel.com/en-us/download/intel-architecture-instruction-set-extensions-programming-reference

Reviewers: craig.topper, RKSimon, LuoYuanke

Reviewed By: craig.topper

Subscribers: mgorny, hiraditya, cfe-commits

Tags: #clang

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

4 years agoRevert "[NFC][X86] Refine code in X86AsmBackend"
Shengchen Kan [Thu, 2 Apr 2020 07:57:06 +0000 (15:57 +0800)]
Revert "[NFC][X86] Refine code in X86AsmBackend"

This reverts commit a157cde0ac0a804b49f50df0a6faae7416ac3fb4.

4 years ago[NFC][X86] Refine code in X86AsmBackend
Shengchen Kan [Thu, 2 Apr 2020 07:33:52 +0000 (15:33 +0800)]
[NFC][X86] Refine code in X86AsmBackend

Replace pattern getContents().size with universe function call

4 years ago[clangd] Fix an assertion crash in ReferenceFinder.
Haojian Wu [Thu, 2 Apr 2020 07:29:16 +0000 (09:29 +0200)]
[clangd] Fix an assertion crash in ReferenceFinder.

Summary: The assertion is almost correct, but it fails on refs from non-preamble

Reviewers: sammccall

Reviewed By: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years agoRevert "[OpenMP][NFCI] Move OpenMP clause information to `lib/Frontend/OpenMP`"
Johannes Doerfert [Thu, 2 Apr 2020 07:23:22 +0000 (02:23 -0500)]
Revert "[OpenMP][NFCI] Move OpenMP clause information to `lib/Frontend/OpenMP`"

This reverts commit c18d55998b3352e6ec92ccb8a3240a16a57c61e6.

Bots have reported uses that need changing, e.g.,
  clang-tools-extra/clang-tidy/openmp/UseDefaultNoneCheck.cp
as reported by
  http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/46591

4 years ago[OpenMP][NFCI] Move OpenMP clause information to `lib/Frontend/OpenMP`
Johannes Doerfert [Tue, 31 Mar 2020 00:58:40 +0000 (19:58 -0500)]
[OpenMP][NFCI] Move OpenMP clause information to `lib/Frontend/OpenMP`

This is a cleanup and normalization patch that also enables reuse with
Flang later on. A follow up will clean up and move the directive ->
clauses mapping.

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

4 years ago[OpenMP][FIX] Undo changes accidentally already introduced in NFC commit
Johannes Doerfert [Thu, 2 Apr 2020 06:30:30 +0000 (01:30 -0500)]
[OpenMP][FIX] Undo changes accidentally already introduced in NFC commit

In d1705c1196fe (D77238) we accidentally included subsequent changes and
did not only move the code into a new file (which was the intention).
We undo the changes now and re-introduce them with the appropriate test
changes later.

4 years ago[llvm-exegesis] 'Min' repetition mode
Roman Lebedev [Thu, 2 Apr 2020 06:28:35 +0000 (09:28 +0300)]
[llvm-exegesis] 'Min' repetition mode

Summary:
As noted in documentation, different repetition modes have different trade-offs:

> .. option:: -repetition-mode=[duplicate|loop]
>
>  Specify the repetition mode. `duplicate` will create a large, straight line
>  basic block with `num-repetitions` copies of the snippet. `loop` will wrap
>  the snippet in a loop which will be run `num-repetitions` times. The `loop`
>  mode tends to better hide the effects of the CPU frontend on architectures
>  that cache decoded instructions, but consumes a register for counting
>  iterations.

Indeed. Example:

>>! In D74156#1873657, @lebedev.ri wrote:
> At least for `CMOV`, i'm seeing wildly different results
> |           | Latency | RThroughput |
> | duplicate | 1       | 0.8         |
> | loop      | 2       | 0.6         |
> where latency=1 seems correct, and i'd expect the througput to be close to 1/2 (since there are two execution units).

This isn't great for analysis, at least for schedule model development.

As discussed in excruciating detail in

>>! In D74156#1924514, @gchatelet wrote:
>>>! In D74156#1920632, @lebedev.ri wrote:
>> ... did that explanation of the question i'm having made any sense?
>
> Thx for digging in the conversation !
> Ok it makes more sense now.
>
> I discussed it a bit with @courbet:
>  - We want the analysis tool to stay simple so we'd rather not make it knowledgeable of the repetition mode.
>  - We'd like to still be able to select either repetition mode to dig into special cases
>
> So we could add a third `min` repetition mode that would run both and take the minimum. It could be the default option.
> Would you have some time to look what it would take to add this third mode?

there appears to be an agreement that it is indeed sub-par,
and that we should provide an optional, measurement (not analysis!) -time
way to rectify the situation.

However, the solutions isn't entirely straight-forward.

We can just add an actual 'multiplexer' `MinSnippetRepetitor`, because
if we just concatenate snippets produced by `DuplicateSnippetRepetitor`
and `LoopSnippetRepetitor` and run+measure that, the measurement will
naturally be different from what we'd get by running+measuring
them separately and taking the min.
([[ https://www.wolframalpha.com/input/?i=%28x%2By%29%2F2+%21%3D+min%28x%2C+y%29 | `time(D+L)/2 != min(time(D), time(L))` ]])

Also, it seems best to me to have a single snippet instead of generating
a snippet per repetition mode, since the only difference here is that the
loop repetition mode reserves one register for loop counter.

As far as i can tell, we can either teach `BenchmarkRunner::runConfiguration()`
to produce a single report given multiple repetitors (as in the patch),
or do that one layer higher - don't modify `BenchmarkRunner::runConfiguration()`,
produce multiple reports, don't actually print each one, but aggregate them somehow
and only print the final one.

Initially i've gone ahead with the latter approach, but it didn't look like a natural fit;
the former (as in the diff) does seem like a better fit to me.

There's also a question of the test coverage. It sure currently does work here:
```
$ ./bin/llvm-exegesis --opcode-name=CMOV64rr --mode=inverse_throughput --repetition-mode=duplicate
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-8fb949.o
---
mode:            inverse_throughput
key:
  instructions:
    - 'CMOV64rr RAX RAX R11 i_0x0'
    - 'CMOV64rr RBP RBP R15 i_0x0'
    - 'CMOV64rr RBX RBX RBX i_0x0'
    - 'CMOV64rr RCX RCX RBX i_0x0'
    - 'CMOV64rr RDI RDI R10 i_0x0'
    - 'CMOV64rr RDX RDX RAX i_0x0'
    - 'CMOV64rr RSI RSI RAX i_0x0'
    - 'CMOV64rr R8 R8 R8 i_0x0'
    - 'CMOV64rr R9 R9 RDX i_0x0'
    - 'CMOV64rr R10 R10 RBX i_0x0'
    - 'CMOV64rr R11 R11 R14 i_0x0'
    - 'CMOV64rr R12 R12 R9 i_0x0'
    - 'CMOV64rr R13 R13 R12 i_0x0'
    - 'CMOV64rr R14 R14 R15 i_0x0'
    - 'CMOV64rr R15 R15 R13 i_0x0'
  config:          ''
  register_initial_values:
    - 'RAX=0x0'
    - 'R11=0x0'
    - 'EFLAGS=0x0'
    - 'RBP=0x0'
    - 'R15=0x0'
    - 'RBX=0x0'
    - 'RCX=0x0'
    - 'RDI=0x0'
    - 'R10=0x0'
    - 'RDX=0x0'
    - 'RSI=0x0'
    - 'R8=0x0'
    - 'R9=0x0'
    - 'R14=0x0'
    - 'R12=0x0'
    - 'R13=0x0'
cpu_name:        bdver2
llvm_triple:     x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
  - { key: inverse_throughput, value: 0.819, per_snippet_value: 12.285 }
error:           ''
info:            instruction has tied variables, using static renaming.
assembled_snippet: 5541574156415541545348B8000000000000000049BB00000000000000004883EC08C7042400000000C7442404000000009D48BD000000000000000049BF000000000000000048BB000000000000000048B9000000000000000048BF000000000000000049BA000000000000000048BA000000000000000048BE000000000000000049B8000000000000000049B9000000000000000049BE000000000000000049BC000000000000000049BD0000000000000000490F40C3490F40EF480F40DB480F40CB490F40FA480F40D0480F40F04D0F40C04C0F40CA4C0F40D34D0F40DE4D0F40E14D0F40EC4D0F40F74D0F40FD490F40C35B415C415D415E415F5DC3
...
$ ./bin/llvm-exegesis --opcode-name=CMOV64rr --mode=inverse_throughput --repetition-mode=loop
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-051eb3.o
---
mode:            inverse_throughput
key:
  instructions:
    - 'CMOV64rr RAX RAX R11 i_0x0'
    - 'CMOV64rr RBP RBP RSI i_0x0'
    - 'CMOV64rr RBX RBX R9 i_0x0'
    - 'CMOV64rr RCX RCX RSI i_0x0'
    - 'CMOV64rr RDI RDI RBP i_0x0'
    - 'CMOV64rr RDX RDX R9 i_0x0'
    - 'CMOV64rr RSI RSI RDI i_0x0'
    - 'CMOV64rr R9 R9 R12 i_0x0'
    - 'CMOV64rr R10 R10 R11 i_0x0'
    - 'CMOV64rr R11 R11 R9 i_0x0'
    - 'CMOV64rr R12 R12 RBP i_0x0'
    - 'CMOV64rr R13 R13 RSI i_0x0'
    - 'CMOV64rr R14 R14 R14 i_0x0'
    - 'CMOV64rr R15 R15 R10 i_0x0'
  config:          ''
  register_initial_values:
    - 'RAX=0x0'
    - 'R11=0x0'
    - 'EFLAGS=0x0'
    - 'RBP=0x0'
    - 'RSI=0x0'
    - 'RBX=0x0'
    - 'R9=0x0'
    - 'RCX=0x0'
    - 'RDI=0x0'
    - 'RDX=0x0'
    - 'R12=0x0'
    - 'R10=0x0'
    - 'R13=0x0'
    - 'R14=0x0'
    - 'R15=0x0'
cpu_name:        bdver2
llvm_triple:     x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
  - { key: inverse_throughput, value: 0.6083, per_snippet_value: 8.5162 }
error:           ''
info:            instruction has tied variables, using static renaming.
assembled_snippet: 5541574156415541545348B8000000000000000049BB00000000000000004883EC08C7042400000000C7442404000000009D48BD000000000000000048BE000000000000000048BB000000000000000049B9000000000000000048B9000000000000000048BF000000000000000048BA000000000000000049BC000000000000000049BA000000000000000049BD000000000000000049BE000000000000000049BF000000000000000049B80200000000000000490F40C3480F40EE490F40D9480F40CE480F40FD490F40D1480F40F74D0F40CC4D0F40D34D0F40D94C0F40E54C0F40EE4D0F40F64D0F40FA4983C0FF75C25B415C415D415E415F5DC3
...
$ ./bin/llvm-exegesis --opcode-name=CMOV64rr --mode=inverse_throughput --repetition-mode=min
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-c7a47d.o
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-2581f1.o
---
mode:            inverse_throughput
key:
  instructions:
    - 'CMOV64rr RAX RAX R11 i_0x0'
    - 'CMOV64rr RBP RBP R10 i_0x0'
    - 'CMOV64rr RBX RBX R10 i_0x0'
    - 'CMOV64rr RCX RCX RDX i_0x0'
    - 'CMOV64rr RDI RDI RAX i_0x0'
    - 'CMOV64rr RDX RDX R9 i_0x0'
    - 'CMOV64rr RSI RSI RAX i_0x0'
    - 'CMOV64rr R9 R9 RBX i_0x0'
    - 'CMOV64rr R10 R10 R12 i_0x0'
    - 'CMOV64rr R11 R11 RDI i_0x0'
    - 'CMOV64rr R12 R12 RDI i_0x0'
    - 'CMOV64rr R13 R13 RDI i_0x0'
    - 'CMOV64rr R14 R14 R9 i_0x0'
    - 'CMOV64rr R15 R15 RBP i_0x0'
  config:          ''
  register_initial_values:
    - 'RAX=0x0'
    - 'R11=0x0'
    - 'EFLAGS=0x0'
    - 'RBP=0x0'
    - 'R10=0x0'
    - 'RBX=0x0'
    - 'RCX=0x0'
    - 'RDX=0x0'
    - 'RDI=0x0'
    - 'R9=0x0'
    - 'RSI=0x0'
    - 'R12=0x0'
    - 'R13=0x0'
    - 'R14=0x0'
    - 'R15=0x0'
cpu_name:        bdver2
llvm_triple:     x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
  - { key: inverse_throughput, value: 0.6073, per_snippet_value: 8.5022 }
error:           ''
info:            instruction has tied variables, using static renaming.
assembled_snippet: 5541574156415541545348B8000000000000000049BB00000000000000004883EC08C7042400000000C7442404000000009D48BD000000000000000049BA000000000000000048BB000000000000000048B9000000000000000048BA000000000000000048BF000000000000000049B9000000000000000048BE000000000000000049BC000000000000000049BD000000000000000049BE000000000000000049BF0000000000000000490F40C3490F40EA490F40DA480F40CA480F40F8490F40D1480F40F04C0F40CB4D0F40D44C0F40DF4C0F40E74C0F40EF4D0F40F14C0F40FD490F40C3490F40EA5B415C415D415E415F5DC35541574156415541545348B8000000000000000049BB00000000000000004883EC08C7042400000000C7442404000000009D48BD000000000000000049BA000000000000000048BB000000000000000048B9000000000000000048BA000000000000000048BF000000000000000049B9000000000000000048BE000000000000000049BC000000000000000049BD000000000000000049BE000000000000000049BF000000000000000049B80200000000000000490F40C3490F40EA490F40DA480F40CA480F40F8490F40D1480F40F04C0F40CB4D0F40D44C0F40DF4C0F40E74C0F40EF4D0F40F14C0F40FD4983C0FF75C25B415C415D415E415F5DC3
...
```
but i open to suggestions as to how test that.

I also have gone with the suggestion to default to this new mode.
This was irking me for some time, so i'm happy to finally see progress here.
Looking forward to feedback.

Reviewers: courbet, gchatelet

Reviewed By: courbet, gchatelet

Subscribers: mstojanovic, RKSimon, llvm-commits, courbet, gchatelet

Tags: #llvm

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

4 years ago[libc++] Simplify the configuration of the C++ ABI library
Louis Dionne [Thu, 2 Apr 2020 06:09:23 +0000 (02:09 -0400)]
[libc++] Simplify the configuration of the C++ ABI library

This commit removes support for building against the system libc++abi,
which was supported on Apple platforms. This is basically never what we
want to do, since libc++ and libc++abi are coupled and building a trunk
libc++ against an older libc++abi can lead to incompatibilities (and
good luck debugging them!). It might have made some sense to support
that when the monorepo did not exist, however I don't think this is
anything but a footgun nowadays.

Furthermore, based on the newly-made assumption that we're building
against the monorepo libc++abi, we can simplify the search path logic
for finding libc++abi.

This area of our build system has a lot of technical debt accumulated,
and it's surprisingly difficult to change. We've tried different things
and failed several times in the past. I did test this change on our
Docker image for the build bots and on Apple platforms, however it is
possible that this breaks some unknown configuration, in which case it
should be fine to revert this (so we can try again!).

4 years ago[PPCInstPrinter] Delete an unneeded overload of printBranchOperand. NFC
Fangrui Song [Thu, 2 Apr 2020 05:40:56 +0000 (22:40 -0700)]
[PPCInstPrinter] Delete an unneeded overload of printBranchOperand. NFC

It was added by D76591 for migration purposes (not all
printBranchOperand users have migrated to the overload with `uint64_t Address`).
Now that all have been migrated, the parameter can go away.

4 years ago[PPCInstPrinter] Change B to print the target address in hexadecimal form
Fangrui Song [Thu, 2 Apr 2020 05:09:28 +0000 (22:09 -0700)]
[PPCInstPrinter] Change B to print the target address in hexadecimal form

Follow-up of D76591 and D76907

4 years ago[OpenMP][FIX] Add second include after header was split in d1705c1196
Johannes Doerfert [Thu, 2 Apr 2020 05:18:01 +0000 (00:18 -0500)]
[OpenMP][FIX] Add second include after header was split in d1705c1196

The math wrapper handling is going to be replaced shortly and
d1705c1196fedfe927716923ac121f1134924a36 was actually a precursor for
that.