platform/upstream/llvm.git
4 years agoAdd intrinsics for doing frame-bound dynamic allocations within a coroutine.
John McCall [Wed, 14 Aug 2019 03:53:40 +0000 (03:53 +0000)]
Add intrinsics for doing frame-bound dynamic allocations within a coroutine.

These rely on having an allocator provided to the coroutine and thus,
for now, only work in retcon lowerings.

llvm-svn: 368791

4 years agoGuard dumps in the coro intrinsic validation logic behind NDEBUG checks. dump() is...
John McCall [Wed, 14 Aug 2019 03:53:31 +0000 (03:53 +0000)]
Guard dumps in the coro intrinsic validation logic behind NDEBUG checks. dump() is not guaranteed to be defined in all builds.

llvm-svn: 368790

4 years agoGeneralize llvm.coro.suspend.retcon to allow an arbitrary number of arguments to...
John McCall [Wed, 14 Aug 2019 03:53:26 +0000 (03:53 +0000)]
Generalize llvm.coro.suspend.retcon to allow an arbitrary number of arguments to be passed back to the continuation function.

llvm-svn: 368789

4 years agoExtend coroutines to support a "returned continuation" lowering.
John McCall [Wed, 14 Aug 2019 03:53:17 +0000 (03:53 +0000)]
Extend coroutines to support a "returned continuation" lowering.

A quick contrast of this ABI with the currently-implemented ABI:

- Allocation is implicitly managed by the lowering passes, which is fine
  for frontends that are fine with assuming that allocation cannot fail.
  This assumption is necessary to implement dynamic allocas anyway.

- The lowering attempts to fit the coroutine frame into an opaque,
  statically-sized buffer before falling back on allocation; the same
  buffer must be provided to every resume point.  A buffer must be at
  least pointer-sized.

- The resume and destroy functions have been combined; the continuation
  function takes a parameter indicating whether it has succeeded.

- Conversely, every suspend point begins its own continuation function.

- The continuation function pointer is directly returned to the caller
  instead of being stored in the frame.  The continuation can therefore
  directly destroy the frame when exiting the coroutine instead of having
  to leave it in a defunct state.

- Other values can be returned directly to the caller instead of going
  through a promise allocation.  The frontend provides a "prototype"
  function declaration from which the type, calling convention, and
  attributes of the continuation functions are taken.

- On the caller side, the frontend can generate natural IR that directly
  uses the continuation functions as long as it prevents IPO with the
  coroutine until lowering has happened.  In combination with the point
  above, the frontend is almost totally in charge of the ABI of the
  coroutine.

- Unique-yield coroutines are given some special treatment.

llvm-svn: 368788

4 years ago[FileCheck] Document FILECHECK_OPTS in -help
Joel E. Denny [Wed, 14 Aug 2019 02:56:20 +0000 (02:56 +0000)]
[FileCheck] Document FILECHECK_OPTS in -help

Reviewed By: thopre

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

llvm-svn: 368787

4 years ago[FileCheck] Move -dump-input diagnostic to first line
Joel E. Denny [Wed, 14 Aug 2019 02:56:09 +0000 (02:56 +0000)]
[FileCheck] Move -dump-input diagnostic to first line

Without this patch, `-dump-input` prints a diagnostic at the end of
its marker range.  For example:

```
         1: Start.
check:1     ^~~~~~
         2: Bad.
next:2      X~~~
         3: Many lines
next:2      ~~~~~~~~~~
         4: of input.
next:2      ~~~~~~~~~
         5: End.
next:2      ~~~~ error: no match found
```

This patch moves it to the beginning like this:

```
         1: Start.
check:1     ^~~~~~
         2: Bad.
next:2      X~~~ error: no match found
         3: Many lines
next:2      ~~~~~~~~~~
         4: of input.
next:2      ~~~~~~~~~
         5: End.
next:2      ~~~~
```

The former somehow looks nicer because the diagnostic doesn't appear
to be somewhere within the marker range.  However, the latter is more
practical, especially when the marker range includes the remainder of
a very long dump.  First, in the case of an error, this patch enables
me to search the dump for `error:` and usually immediately land where
the detected error began.  Second, when trying to follow FileCheck's
logic, it's best to read top down, so this patch enables me to see
each diagnostic as soon as I encounter its marker.

Reviewed By: thopre

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

llvm-svn: 368786

4 years agoAdd __has_builtin support for builtin function-like type traits.
Richard Smith [Wed, 14 Aug 2019 02:30:11 +0000 (02:30 +0000)]
Add __has_builtin support for builtin function-like type traits.

Summary:
Previously __has_builtin(__builtin_*) would return false for
__builtin_*s that we modeled as keywords rather than as functions
(because they take type arguments). With this patch, all builtins
that are called with function-call-like syntax return true from
__has_builtin (covering __builtin_* and also the __is_* and __has_* type
traits and the handful of similar builtins without such a prefix).

Update the documentation on __has_builtin and on type traits to match.
While doing this I noticed the type trait documentation was out of date
and incomplete; that's fixed here too.

Reviewers: aaron.ballman

Subscribers: jfb, kristina, cfe-commits

Tags: #clang

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

llvm-svn: 368785

4 years ago[ELF] Initialize 2 fields of Symbol in SymbolTable::insert
Fangrui Song [Wed, 14 Aug 2019 01:52:47 +0000 (01:52 +0000)]
[ELF] Initialize 2 fields of Symbol in SymbolTable::insert

A new symbol is added to elf::symtab in 3 steps:

1) SymbolTable::insert creates a placeholder.
2) Symbol::mergeProperties
3) Symbol::replace

Fields referenced by steps 2) and 3) should be initialized in
SymbolTable::insert.  `traced` and `referenced` were missed previously.
This did not cause problems because compilers generated code that
initialized them (bit fields) to 0.

Reviewed By: grimar

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

llvm-svn: 368784

4 years ago[libcxxabi] Define _LIBCXXABI_GUARD_ABI_ARM on WebAssembly
Sam Clegg [Wed, 14 Aug 2019 01:30:48 +0000 (01:30 +0000)]
[libcxxabi] Define _LIBCXXABI_GUARD_ABI_ARM on WebAssembly

This matches ItaniumCXXABI.cpp.

Fixes PR42680

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

llvm-svn: 368783

4 years agoFix warning: suggest braces around initialization of subobject
Jonas Devlieghere [Wed, 14 Aug 2019 01:25:10 +0000 (01:25 +0000)]
Fix warning: suggest braces around initialization of subobject

This patch adds braces to the DEFINE_XMM macro.

llvm-svn: 368782

4 years ago[GlobalISel]: Fix lowering of G_Shuffle_vector where we pick up the wrong source...
Aditya Nandakumar [Wed, 14 Aug 2019 01:23:33 +0000 (01:23 +0000)]
[GlobalISel]: Fix lowering of G_Shuffle_vector where we pick up the wrong source index

https://reviews.llvm.org/D66182

llvm-svn: 368781

4 years ago[analyzer] Don't delete TaintConfig copy constructor
Alex Langford [Wed, 14 Aug 2019 01:09:07 +0000 (01:09 +0000)]
[analyzer] Don't delete TaintConfig copy constructor

Summary:
Explicitly deleting the copy constructor makes compiling the function
`ento::registerGenericTaintChecker` difficult with some compilers. When we
construct an `llvm::Optional<TaintConfig>`, the optional is constructed with a
const TaintConfig reference which it then uses to invoke the deleted TaintConfig
copy constructor.

I've observered this failing with clang 3.8 on Ubuntu 16.04.

Reviewers: compnerd, Szelethus, boga95, NoQ, alexshap

Subscribers: xazax.hun, baloghadamsoftware, szepet, a.sidorin, mikhail.ramalho, donat.nagy, dkrupp, Charusso, llvm-commits, cfe-commits

Tags: #clang

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

llvm-svn: 368779

4 years ago[ORC] Fix clang-interpreter example code broken by r368707.
Douglas Yung [Wed, 14 Aug 2019 01:03:35 +0000 (01:03 +0000)]
[ORC] Fix clang-interpreter example code broken by r368707.

llvm-svn: 368778

4 years ago[analyzer][NFC] Prepare visitors for different tracking kinds
Kristof Umann [Wed, 14 Aug 2019 00:48:57 +0000 (00:48 +0000)]
[analyzer][NFC] Prepare visitors for different tracking kinds

When we're tracking a variable that is responsible for a null pointer
dereference or some other sinister programming error, we of course would like to
gather as much information why we think that the variable has that specific
value as possible. However, the newly introduced condition tracking shows that
tracking all values this thoroughly could easily cause an intolerable growth in
the bug report's length.

There are a variety of heuristics we discussed on the mailing list[1] to combat
this, all of them requiring to differentiate in between tracking a "regular
value" and a "condition".

This patch introduces the new `bugreporter::TrackingKind` enum, adds it to
several visitors as a non-optional argument, and moves some functions around to
make the code a little more coherent.

[1] http://lists.llvm.org/pipermail/cfe-dev/2019-June/062613.html

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

llvm-svn: 368777

4 years agoUpdate Python tests for lldb-server on Windows
Aaron Smith [Wed, 14 Aug 2019 00:14:15 +0000 (00:14 +0000)]
Update Python tests for lldb-server on Windows

Summary: Thanks to Hui Huang and reviewers for all the help with this patch!

Reviewers: labath, jfb, clayborg

Reviewed By: labath

Subscribers: Hui, clayborg, dexonsmith, lldb-commits

Tags: #lldb

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

llvm-svn: 368776

4 years ago[AArch64][GlobalISel] RBS: Treat s128s like vectors when unmerging.
Amara Emerson [Tue, 13 Aug 2019 23:51:20 +0000 (23:51 +0000)]
[AArch64][GlobalISel] RBS: Treat s128s like vectors when unmerging.

The destinations should be FPRs (for now).

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

llvm-svn: 368775

4 years agoEnable lldb-server on Windows
Aaron Smith [Tue, 13 Aug 2019 23:50:54 +0000 (23:50 +0000)]
Enable lldb-server on Windows

Summary:
This commit contains three small changes to enable lldb-server on Windows.

- Add lldb-server for Windows to the build
- Disable pty redirection on Windows for the initial lldb-server bring up
- Add a support to get the parent pid for a process on Windows
- Ifdef some signals which aren't supported on Windows

Thanks to Hui Huang for the help with this patch!

Reviewers: labath

Reviewed By: labath

Subscribers: JDevlieghere, compnerd, Hui, amccarth, xiaobai, srhines, mgorny, lldb-commits

Tags: #lldb

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

llvm-svn: 368774

4 years ago[analyzer] Track the right hand side of the last store regardless of its value
Kristof Umann [Tue, 13 Aug 2019 23:48:10 +0000 (23:48 +0000)]
[analyzer] Track the right hand side of the last store regardless of its value

Summary:
The following code snippet taken from D64271#1572188 has an issue: namely,
because `flag`'s value isn't undef or a concrete int, it isn't being tracked.

int flag;
bool coin();

void foo() {
  flag = coin();
}

void test() {
  int *x = 0;
  int local_flag;
  flag = 1;

  foo();
  local_flag = flag;
  if (local_flag)
    x = new int;

  foo();
  local_flag = flag;
  if (local_flag)
    *x = 5;
}

This, in my opinion, makes no sense, other values may be interesting too.
Originally added by rC185608.

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

llvm-svn: 368773

4 years ago[DebugLine] Be more robust in geussing the path style
Jonas Devlieghere [Tue, 13 Aug 2019 23:30:11 +0000 (23:30 +0000)]
[DebugLine] Be more robust in geussing the path style

My previous change didn't fix the Windows bot. This patch is an attempt
to make guessing the path style more robust by first looking at the
compile dir and falling back to the actual file if that's unsuccessful.

llvm-svn: 368772

4 years ago[analyzer] Prune calls to functions with linear CFGs that return a non-zero constrain...
Kristof Umann [Tue, 13 Aug 2019 23:22:33 +0000 (23:22 +0000)]
[analyzer] Prune calls to functions with linear CFGs that return a non-zero constrained value

During the evaluation of D62883, I noticed a bunch of totally
meaningless notes with the pattern of "Calling 'A'" -> "Returning value"
-> "Returning from 'A'", which added no value to the report at all.

This patch (not only affecting tracked conditions mind you) prunes
diagnostic messages to functions that return a value not constrained to
be 0, and are also linear.

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

llvm-svn: 368771

4 years ago[AArch64] Remove incorrect usage of MONonTemporal.
Eli Friedman [Tue, 13 Aug 2019 23:12:14 +0000 (23:12 +0000)]
[AArch64] Remove incorrect usage of MONonTemporal.

This has no effect at the moment, but might matter if we try to
implement non-temporal loads in the future.

llvm-svn: 368770

4 years ago[analyzer] exploded-graph-rewriter: Implement displaying Store pointers.
Artem Dergachev [Tue, 13 Aug 2019 23:04:56 +0000 (23:04 +0000)]
[analyzer] exploded-graph-rewriter: Implement displaying Store pointers.

They're useful when trying to understand what's going on
inside your LazyCompoundValues.

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

llvm-svn: 368769

4 years ago[analyzer] exploded-graph-rewriter: Implement manual graph trimming.
Artem Dergachev [Tue, 13 Aug 2019 23:04:53 +0000 (23:04 +0000)]
[analyzer] exploded-graph-rewriter: Implement manual graph trimming.

When -trim-egraph is unavailable (say, when you're debugging a crash on
a real-world code that takes too long to reduce), it makes sense to view
the untrimmed graph up to the crashing node's predecessor, then dump the ID
(or a pointer) of the node in the attached debugger, and then trim
the dumped graph in order to keep only paths from the root to the node.

The newly added --to flag does exactly that:

$ exploded-graph-rewriter.py ExprEngine.dot --to 0x12229acd0

Multiple nodes can be specified. Stable IDs of nodes can be used
instead of pointers.

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

llvm-svn: 368768

4 years ago[analyzer] exploded-graph-rewriter: NFC: Refactor explorers into trimmers.
Artem Dergachev [Tue, 13 Aug 2019 23:04:50 +0000 (23:04 +0000)]
[analyzer] exploded-graph-rewriter: NFC: Refactor explorers into trimmers.

Explorers aren't the right abstraction. For the purposes of displaying svg files
we don't care in which order do we explore the nodes. We may care about this for
other analyses, but we're not there yet.

The function of cutting out chunks of the graph is performed poorly by
the explorers, because querying predecessors/successors on the explored nodes
yields original successors/predecessors even if they aren't being explored.

Introduce a new entity, "trimmers", that do one thing but to it right: cut out
chunks of the graph. Trimmers mutate the graph, so stale edges aren't even
visible to their consumers in the pipeline. Additionally, trimmers are
intrinsically composable: multiple trimmers can be applied to the graph
sequentially.

Refactor the single-path explorer into the single-path trimmer.
Rename the test file for consistency.

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

llvm-svn: 368767

4 years ago[analyzer] exploded-graph-rewriter: Open the converted graph immediately.
Artem Dergachev [Tue, 13 Aug 2019 23:04:47 +0000 (23:04 +0000)]
[analyzer] exploded-graph-rewriter: Open the converted graph immediately.

Change the default behavior: the tool no longer dumps the rewritten .dot file
to stdout, but instead it automatically converts it into an .html file
(which essentially wraps an .svg file) and immediately opens it with
the default web browser.

This means that the tool should now be fairly easy to use:

  $ exploded-graph-rewriter.py /tmp/ExprEngine.dot

The benefits of wrapping the .svg file into an .html file are:

    - It'll open in a web browser, which is the intended behavior.
      An .svg file would be open with an image viewer/editor instead.
    - It avoids the white background around the otherwise dark svg area
      in dark mode.

The feature can be turned off by passing a flag '--rewrite-only'.
The LIT substitution is updated to enforce the old mode because
we don't want web browsers opening on our buildbots.

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

llvm-svn: 368766

4 years ago[analyzer] Disable the checker-plugins test on Darwin.
Artem Dergachev [Tue, 13 Aug 2019 23:04:44 +0000 (23:04 +0000)]
[analyzer] Disable the checker-plugins test on Darwin.

Fixes a buildbot.

llvm-svn: 368765

4 years ago[ORC] Fix SpeculativeJIT example code broken by r368707.
Lang Hames [Tue, 13 Aug 2019 22:44:54 +0000 (22:44 +0000)]
[ORC] Fix SpeculativeJIT example code broken by r368707.

llvm-svn: 368764

4 years ago[Polly-ACC] Fix test after IR-printer change.
Michael Kruse [Tue, 13 Aug 2019 22:42:08 +0000 (22:42 +0000)]
[Polly-ACC] Fix test after IR-printer change.

After r367755, even unnamed parameters are printed in IR dumps. Change
the test to expect te additional %0 in the line.

llvm-svn: 368763

4 years ago[clang][DirectoryWatcher] Fix Windows stub after LLVM change
Jan Korous [Tue, 13 Aug 2019 22:39:50 +0000 (22:39 +0000)]
[clang][DirectoryWatcher] Fix Windows stub after LLVM change

r367979 changed DirectoryWatcher::Create to return an llvm::Expected.
Adjust the Windows stub accordingly.

(upstreamed from github.com/apple/swift-clang)

llvm-svn: 368762

4 years ago[clang] DirectoryWatcher for Windows stubs (to fix build break).
Jan Korous [Tue, 13 Aug 2019 22:39:26 +0000 (22:39 +0000)]
[clang] DirectoryWatcher for Windows stubs (to fix build break).

This is just a code skeleton for DirectoryWatcher-windows.cpp so the
build on Windows stops breaking.

(upstreamed from github.com/apple/swift-clang)

llvm-svn: 368761

4 years agoAttempt to fix issue with unresolved lit test in TableGen
Jessica Paquette [Tue, 13 Aug 2019 22:32:26 +0000 (22:32 +0000)]
Attempt to fix issue with unresolved lit test in TableGen

Build bots are unhappy about the Common directory.

Add an excludes list to lit.local.cfg.

llvm-svn: 368760

4 years agoInitial support for native debugging of x86/x64 Windows processes
Aaron Smith [Tue, 13 Aug 2019 22:18:01 +0000 (22:18 +0000)]
Initial support for native debugging of x86/x64 Windows processes

Summary: Thanks to Hui Huang and the reviewers for all the help with this patch.

Reviewers: labath, Hui, jfb, clayborg, amccarth

Reviewed By: labath

Subscribers: amccarth, compnerd, dexonsmith, mgorny, jfb, teemperor, lldb-commits

Tags: #lldb

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

llvm-svn: 368759

4 years ago[NFCI] Explicitly provide user-defined constructor for SectionRef
Alex Langford [Tue, 13 Aug 2019 22:16:18 +0000 (22:16 +0000)]
[NFCI] Explicitly provide user-defined constructor for SectionRef

I am changing this to work around an issue that is being hit when
building with clang 3.8. Specifically, clang 3.8 requires that we have a user
defined default constructor for SectionRef for the default initialization of a
const SectionRef.

llvm-svn: 368758

4 years ago[GlobalISel][NFC] Factor out common target code from GlobalISelEmitterTests
Jessica Paquette [Tue, 13 Aug 2019 22:14:37 +0000 (22:14 +0000)]
[GlobalISel][NFC] Factor out common target code from GlobalISelEmitterTests

Factor out commonly-used target code from the GlobalISelEmitter tests into
a GlobalISelEmitterCommon.td file. This is tested by the original
GlobalISelEmitter.td test.

This reduces the amount of boilerplate code necessary for tests like this.

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

llvm-svn: 368757

4 years agoRelax opcode checks in test to check for only a number instead of a specific number.
Douglas Yung [Tue, 13 Aug 2019 22:05:18 +0000 (22:05 +0000)]
Relax opcode checks in test to check for only a number instead of a specific number.

llvm-svn: 368756

4 years ago[analyzer][NFC] Make sure that the BugReport is not modified during the construction...
Kristof Umann [Tue, 13 Aug 2019 22:03:08 +0000 (22:03 +0000)]
[analyzer][NFC] Make sure that the BugReport is not modified during the construction of non-visitor pieces

I feel this is kinda important, because in a followup patch I'm adding different
kinds of interestingness, and propagating the correct kind in BugReporter.cpp is
just one less thing to worry about.

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

llvm-svn: 368755

4 years agoAdd a missing header comment, NFC
Erik Pilkington [Tue, 13 Aug 2019 22:01:39 +0000 (22:01 +0000)]
Add a missing header comment, NFC

llvm-svn: 368754

4 years ago[GlobalISel]: Fix lowering of G_SHUFFLE_VECTOR with scalar sources
Aditya Nandakumar [Tue, 13 Aug 2019 21:49:11 +0000 (21:49 +0000)]
[GlobalISel]: Fix lowering of G_SHUFFLE_VECTOR with scalar sources

https://reviews.llvm.org/D66171

llvm-svn: 368753

4 years ago[analyzer][NFC] Refactoring BugReporter.cpp P6.: Completely get rid of interestingnes...
Kristof Umann [Tue, 13 Aug 2019 21:48:17 +0000 (21:48 +0000)]
[analyzer][NFC] Refactoring BugReporter.cpp P6.: Completely get rid of interestingness propagation

Apparently this does literally nothing.

When you think about this, it makes sense. If something is really important,
we're tracking it anyways, and that system is sophisticated enough to mark
actually interesting statements as such. I wouldn't say that it's even likely
that subexpressions are also interesting (array[10 - x + x]), so I guess even
if this produced any effects, its probably undesirable.

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

llvm-svn: 368752

4 years agoFactor architecture dependent code out of loop.cu
Jon Chesterfield [Tue, 13 Aug 2019 21:41:47 +0000 (21:41 +0000)]
Factor architecture dependent code out of loop.cu

Summary:
[libomptarget] Factor architecture dependent code out of loop.cu

Related to the patch series starting D64217. Added subscribers to said series as reviewers. This effort is smaller in scope.

This patch factors out just enough architecture dependent code from loop.cu to allow the same source to be used with amdgcn, given a different target_impl.h. Testing is that the same bitcode (modulo variable names) is generated for libomptarget before and after the refactor, for nvptx and the out of tree amdgcn.

Reviewers: jdoerfert, ABataev, bollu, jfb, tra, grokos, Hahnfeld, guansong, xtian, gregrodgers, ronlieb, hfinkel, gtbercea, guraypp, arpith-jacob

Reviewed By: jdoerfert, ABataev

Subscribers: dexonsmith, openmp-commits

Tags: #openmp

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

llvm-svn: 368751

4 years ago[WebAssembly] Make clang emit correct va_arg code for structs
Guanzhong Chen [Tue, 13 Aug 2019 21:41:11 +0000 (21:41 +0000)]
[WebAssembly] Make clang emit correct va_arg code for structs

Summary:
In the WebAssembly backend, when lowering variadic function calls, non-single
member aggregate type arguments are always passed by pointer.

However, when emitting va_arg code in clang, the arguments are instead read as
if they are passed directly. This results in the pointer being read as the
actual structure.

Fixes https://github.com/emscripten-core/emscripten/issues/9042.

Reviewers: tlively, sbc100, kripken, aheejin, dschuff

Reviewed By: dschuff

Subscribers: dschuff, jgravelle-google, sunfish, cfe-commits

Tags: #clang

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

llvm-svn: 368750

4 years ago[libc++] Mark two <chrono> tests as unsupported on AppleClang 11
Louis Dionne [Tue, 13 Aug 2019 21:34:49 +0000 (21:34 +0000)]
[libc++] Mark two <chrono> tests as unsupported on AppleClang 11

The operator""y and operator""d will eventually be supported by
AppleClang, but no released version supports them at the moment.

llvm-svn: 368749

4 years agoRemove the extra `;`.
Michael Liao [Tue, 13 Aug 2019 21:26:42 +0000 (21:26 +0000)]
Remove the extra `;`.

llvm-svn: 368748

4 years ago[GISel] Pass MachineRegisterInfo by const reference to matcher.
Mark Lacey [Tue, 13 Aug 2019 21:17:14 +0000 (21:17 +0000)]
[GISel] Pass MachineRegisterInfo by const reference to matcher.

Summary: NFC.

Reviewers: aditya_nandakumar, volkan

Subscribers: llvm-commits

Tags: #llvm

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

llvm-svn: 368747

4 years ago[DWARF] Guess the path style
Jonas Devlieghere [Tue, 13 Aug 2019 21:00:27 +0000 (21:00 +0000)]
[DWARF] Guess the path style

Try to guess the FileSpec path style before defaulting to native.

llvm-svn: 368746

4 years ago[analyzer][NFC] Address inlines of D65484
Kristof Umann [Tue, 13 Aug 2019 20:42:48 +0000 (20:42 +0000)]
[analyzer][NFC] Address inlines of D65484

llvm-svn: 368745

4 years ago [AIX]Lowering global address for 32/64bit small/large code models
Xiangling Liao [Tue, 13 Aug 2019 20:29:01 +0000 (20:29 +0000)]
[AIX]Lowering global address for 32/64bit small/large code models

    This patch implements global address lowering for 32/64 bit with small/large code models.
    1.For 32bit large code model on AIX, there are newly added pseudo opcode LWZtocL & ADDIStocHA32, the support of which on MC layer will be
       provided by future patches.
    2.The default code model on AIX should be small code model.
    3.Since AIX does not have medium code model, "report_fatal_error" when users specify it.

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

llvm-svn: 368744

4 years ago[Refactor] Moving SourceExtraction header from lib to include
Shaurya Gupta [Tue, 13 Aug 2019 20:21:00 +0000 (20:21 +0000)]
[Refactor] Moving SourceExtraction header from lib to include

Summary:
- Moved the SourceExtraction header from lib to include so that it can be used in clangd.

Reviewers: arphaman

Subscribers: ilya-biryukov, dexonsmith, kadircet, cfe-commits

Tags: #clang

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

llvm-svn: 368743

4 years ago[DWARF} Use LLVM's debug line parser in LLDB.
Jonas Devlieghere [Tue, 13 Aug 2019 19:51:51 +0000 (19:51 +0000)]
[DWARF} Use LLVM's debug line parser in LLDB.

The line number table header was substantially revised in DWARF 5 and is
not fully supported by LLDB's current debug line implementation.

This patch replaces the LLDB debug line parser with its counterpart in
LLVM. This was possible because of the limited contact surface between
the code to parse the DWARF debug line section and the rest of LLDB.

We pay a small cost in terms of performance and memory usage. This is
something we plan to address in the near future.

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

llvm-svn: 368742

4 years ago[Symbol] Decouple clang from CompilerType
Alex Langford [Tue, 13 Aug 2019 19:40:36 +0000 (19:40 +0000)]
[Symbol] Decouple clang from CompilerType

Summary:
Ideally CompilerType would have no knowledge of clang or any individual
TypeSystem. Decoupling clang is relatively straightforward.

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

llvm-svn: 368741

4 years ago[ORC] Fix BuildingAJIT tutorial code broken by r368707.
Lang Hames [Tue, 13 Aug 2019 19:38:52 +0000 (19:38 +0000)]
[ORC] Fix BuildingAJIT tutorial code broken by r368707.

llvm-svn: 368740

4 years agoDon't use std::errc
Alexey Bataev [Tue, 13 Aug 2019 19:32:36 +0000 (19:32 +0000)]
Don't use std::errc

Summary:
As noted on Errc.h:

// * std::errc is just marked with is_error_condition_enum. This means that
//   common patters like AnErrorCode == errc::no_such_file_or_directory take
//   4 virtual calls instead of two comparisons.

And on some libstdc++ those virtual functions conclude that

------------------------
int main() {
  std::error_code foo = std::make_error_code(std::errc::no_such_file_or_directory);
  return foo == std::errc::no_such_file_or_directory;
}
-------------------------

should exit with 0.

Reviewers: thakis, rnk, jfb

Reviewed By: thakis

Subscribers: lebedev.ri, dexonsmith, xbolva00, cfe-commits, caomhin

Tags: #clang

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

llvm-svn: 368739

4 years agoRevert "Fix crash on switch conditions of non-integer types in templates"
Dmitri Gribenko [Tue, 13 Aug 2019 19:07:28 +0000 (19:07 +0000)]
Revert "Fix crash on switch conditions of non-integer types in templates"

This reverts commit r368706. It broke ClangTidy tests.

llvm-svn: 368738

4 years ago[analyzer][NFC] Refactoring BugReporter.cpp P5.: Compact mile long function invocatio...
Kristof Umann [Tue, 13 Aug 2019 19:01:33 +0000 (19:01 +0000)]
[analyzer][NFC] Refactoring BugReporter.cpp P5.: Compact mile long function invocations into objects

In D65379, I briefly described the construction of bug paths from an
ExplodedGraph. This patch is about refactoring the code processing the bug path
into a bug report.

A part of finding a valid bug report was running all visitors on the bug path,
so we already have a (possibly empty) set of diagnostics for each ExplodedNode
in it.
Then, for each diagnostic consumer, we construct non-visitor diagnostic pieces.

* We first construct the final diagnostic piece (the warning), then
* We start ascending the bug path from the error node's predecessor (since the
error node itself was used to construct the warning event). For each node
  * We check the location (whether its a CallEnter, CallExit) etc. We simultaneously
  keep track of where we are with the execution by pushing CallStack when we see a
  CallExit (keep in mind that everything is happening in reverse!), popping it
  when we find a CallEnter, compacting them into a single PathDiagnosticCallEvent.

void f() {
  bar();
}

void g() {
  f();
  error(); // warning
}

=== The bug path ===

(root) -> f's CallEnter -> bar() -> f's CallExit -> (error node)

=== Constructed report ===

  f's CallEnter -> bar() -> f's CallExit
           ^               /
            \             V
(root) --->  f's CallEvent --> (error node)

  * We also keep track of different PathPieces different location contexts
  * (CallEvent::path in the above example has f's LocationContext, while the
  CallEvent itself is in g's context) in a LocationContextMap object. Construct
  whatever piece, if any, is needed for the note.
  * If we need to generate edges (or arrows) do so. Make sure to also connect
  these pieces with the ones that visitors emitted.
  * Clean up the constructed PathDiagnostic by making arrows nicer, pruning
  function calls, etc.

So I complained about mile long function invocations with seemingly the same
parameters being passed around. This problem, as I see it, a natural candidate
for creating classes and tying them all together.

I tried very hard to make the implementation feel natural, like, rolling off the
tongue. I introduced 2 new classes: PathDiagnosticBuilder (I mean, I kept the
name but changed almost everything in it) contains every contextual information
(owns the bug path, the diagnostics constructed but the visitors, the BugReport
itself, etc) needed for constructing a PathDiagnostic object, and is pretty much
completely immutable. BugReportContruct is the object containing every
non-contextual information (the PathDiagnostic object we're constructing, the
current location in the bug path, the location context map and the call stack I
meantioned earlier), and is passed around all over the place as a single entity
instead of who knows how many parameters.

I tried to used constness, asserts, limiting visibility of fields to my
advantage to clean up the code big time and dramatically improve safety. Also,
whenever I found the code difficult to understand, I added comments and/or
examples.

Here's a complete list of changes and my design philosophy behind it:

* Instead of construcing a ReportInfo object (added by D65379) after finding a
valid bug report, simply return an optional PathDiagnosticBuilder object straight
away. Move findValidReport into the class as a static method. I find
GRBugReporter::generatePathDiagnostics a joy to look at now.
* Rename generatePathDiagnosticForConsumer to generate (maybe not needed, but
felt that way in the moment) and moved it to PathDiagnosticBuilder. If we don't
need to generate diagnostics, bail out straight away, like we always should have.
After that, construct a BugReportConstruct object, leaving the rest of the logic
untouched.
* Move all static methods that would use contextual information into
PathDiagnosticBuilder, reduce their parameter count drastically by simply
passing around a BugReportConstruct object.
* Glance at the code I removed: Could you tell what the original
PathDiagnosticBuilder::LC object was for? It took a gooood long while for me to
realize that nothing really. It is always equal with the LocationContext
associated with our current position in the bug path. Remove it completely.
* The original code contains the following expression quite a bit:
LCM[&PD.getActivePath()], so what does it mean? I said that we collect the
contexts associated with different PathPieces, but why would we ever modify that,
shouldn't it be set? Well, theoretically yes, but in the implementation, the
address of PathDiagnostic::getActivePath doesn't change if we move to an outer,
previously unexplored function. Add both descriptive method names and
explanations to BugReportConstruct to help on this.
* Add plenty of asserts, both for safety and as a poor man's documentation.

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

llvm-svn: 368737

4 years ago[AMDGPU] Fix to 'Fold readlane from copy of SGPR or imm'
Tim Renouf [Tue, 13 Aug 2019 18:57:55 +0000 (18:57 +0000)]
[AMDGPU] Fix to 'Fold readlane from copy of SGPR or imm'

That change (r363670) could leave a copy from vgpr to sgpr. Fixed.

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

Change-Id: I00c3fe6fda2e8e1e36f53195b881b1449c777ea4
llvm-svn: 368736

4 years ago[analyzer][NFC] Refactoring BugReporter.cpp P4.: If it can be const, make it const
Kristof Umann [Tue, 13 Aug 2019 18:48:08 +0000 (18:48 +0000)]
[analyzer][NFC] Refactoring BugReporter.cpp P4.: If it can be const, make it const

When I'm new to a file/codebase, I personally find C++'s strong static type
system to be a great aid. BugReporter.cpp is still painful to read however:
function calls are made with mile long parameter lists, seemingly all of them
taken with a non-const reference/pointer. This patch fixes nothing but this:
make a few things const, and hammer it until it compiles.

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

llvm-svn: 368735

4 years ago[NFC][clang] Adding argument based Phase list filtering to getComplicationPhases
Puyan Lotfi [Tue, 13 Aug 2019 18:42:03 +0000 (18:42 +0000)]
[NFC][clang] Adding argument based Phase list filtering to getComplicationPhases

This patch removes usage of FinalPhase from anywhere outside of the scope where
it is used to do argument handling.  It also adds argument based trimming of
the Phase list pulled out of the Types.def table.

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

llvm-svn: 368734

4 years ago[ARM] Add MVE beats vector cost model
David Green [Tue, 13 Aug 2019 18:12:08 +0000 (18:12 +0000)]
[ARM] Add MVE beats vector cost model

The MVE architecture has the idea of "beats", where a vector instruction can be
executed over several ticks of the architecture. This adds a similar system
into the Arm backend cost model, multiplying the cost of all vector
instructions by a factor.

This factor essentially becomes the expected difference between scalar code
and vector code, on average. MVE Vector instructions can also overlap so the a
true cost of them is often lower. But equally scalar instructions can in some
situations be dual issued, or have other optimisations such as unrolling or
make use of dsp instructions. The default is chosen as 2. This should not
prevent vectorisation is a most cases (as the vector instructions will still be
doing at least 4 times the work), but it will help prevent over vectorising in
cases where the benefits are less likely.

This adds things so far to the obvious places in ARMTargetTransformInfo, and
updates a few related costs like not treating float instructions as cost 2 just
because they are floats.

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

llvm-svn: 368733

4 years ago[clang] Refactor doc comments to Decls attribution
Jan Korous [Tue, 13 Aug 2019 18:11:44 +0000 (18:11 +0000)]
[clang] Refactor doc comments to Decls attribution

- Create ASTContext::attachCommentsToJustParsedDecls so we don't have to load external comments in Sema when trying to attach existing comments to just parsed Decls.
- Keep comments ordered and cache their decomposed location - faster SourceLoc-based searching.
- Optimize work with redeclarations.
- Keep one comment per redeclaration chain (represented by canonical Decl) instead of comment per redeclaration.
- For redeclaration chains with no comment attached keep just the last declaration in chain that had no comment instead of every comment-less redeclaration.

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

llvm-svn: 368732

4 years ago[llvm-profdata] Profile dump for compact binary format
Wenlei He [Tue, 13 Aug 2019 17:56:08 +0000 (17:56 +0000)]
[llvm-profdata] Profile dump for compact binary format

Summary: Fix "llvm-profdata show" so it can work with compact binary format profile. The change is to mark all functions "used" so SampleProfileReaderCompactBinary::read will read in all profiles available for dumping. The function names will be MD5 hash for compact binary format.

Reviewers: wmi, davidxl, danielcdh

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 368731

4 years ago[AutoUpgrader] Make ArcRuntime Autoupgrader more conservative
Steven Wu [Tue, 13 Aug 2019 17:52:21 +0000 (17:52 +0000)]
[AutoUpgrader] Make ArcRuntime Autoupgrader more conservative

Summary:
This is a tweak to r368311 and r368646 which auto upgrades the calls to
objc runtime functions to objc runtime intrinsics, in order to make sure
that the auto upgrader does not trigger with up-to-date bitcode.

It is possible for bitcode that is up-to-date to contain direct calls to
objc runtime function and those are not inserted by compiler as part of
ARC and they should not be upgraded. Now auto upgrader only triggers as
when the old style of ARC marker is used so it is guaranteed that it
won't trigger on update-to-date bitcode.

This also means it won't do this upgrade for bitcode from llvm-8 and
llvm-9, which preserves the behavior of those releases. Ideally they
should be upgraded as well but it is more important to make sure
AutoUpgrader will not trigger on up-to-date bitcode.

Reviewers: ahatanak, rjmccall, dexonsmith, pete

Reviewed By: dexonsmith

Subscribers: hiraditya, jkorous, llvm-commits

Tags: #llvm

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

llvm-svn: 368730

4 years ago[NFC] Fixed test
David Bolvansky [Tue, 13 Aug 2019 17:51:28 +0000 (17:51 +0000)]
[NFC] Fixed test

llvm-svn: 368729

4 years agoclang: Don't warn on unused momit-leaf-frame-pointer when frame pointers are off.
Nico Weber [Tue, 13 Aug 2019 17:37:09 +0000 (17:37 +0000)]
clang: Don't warn on unused momit-leaf-frame-pointer when frame pointers are off.

This fixes a regression from r365860: As that commit message
states, there are 3 valid states targeted by the combination of
-f(no-)omit-frame-pointer and -m(no-)omit-leaf-frame-pointer.

After r365860 it's impossible to get from state 10 (omit just
leaf frame pointers) to state 11 (omit all frame pointers)
in a single command line without getting a warning.

This change restores that functionality.

Fixes PR42966.

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

llvm-svn: 368728

4 years agoUse Register over unsigned in LateEHPrepare (NFC)
Heejin Ahn [Tue, 13 Aug 2019 17:35:44 +0000 (17:35 +0000)]
Use Register over unsigned in LateEHPrepare (NFC)

Summary:
While D65962 is pending for review, I landed D65475 that added one more
use of `unsigned`. Changed it to `Register`.

Reviewers: dsanders

Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 368727

4 years ago[util] Allow callsigns when running git llvm revert
Jordan Rupprecht [Tue, 13 Aug 2019 17:19:53 +0000 (17:19 +0000)]
[util] Allow callsigns when running git llvm revert

llvm-svn: 368726

4 years ago[NFC] Updated tests after r368724
David Bolvansky [Tue, 13 Aug 2019 17:19:16 +0000 (17:19 +0000)]
[NFC] Updated tests after r368724

llvm-svn: 368725

4 years ago[SimplifyLibCalls] Add noalias from known callsites
David Bolvansky [Tue, 13 Aug 2019 17:18:46 +0000 (17:18 +0000)]
[SimplifyLibCalls] Add noalias from known callsites

Summary:
Should be fine for memcpy, strcpy, strncpy.

Reviewers: jdoerfert, efriedma

Reviewed By: jdoerfert

Subscribers: uenoku, llvm-commits

Tags: #llvm

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

llvm-svn: 368724

4 years ago[ValueTracking] Improve reverse assumption inference
Nikita Popov [Tue, 13 Aug 2019 17:15:42 +0000 (17:15 +0000)]
[ValueTracking] Improve reverse assumption inference

Use isGuaranteedToTransferExecutionToSuccessor() instead of
isSafeToSpeculativelyExecute() when seeing whether we can propagate
the information in an assume backwards in isValidAssumeForContext().
The latter is more general - it also allows arbitrary loads/stores -
and is also the condition we want: if our assume is guaranteed to
execute, its condition not holding would be UB.

Original patch by arielb1.

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

llvm-svn: 368723

4 years ago[NFC] Revisited/updated tests
David Bolvansky [Tue, 13 Aug 2019 17:07:02 +0000 (17:07 +0000)]
[NFC] Revisited/updated tests

llvm-svn: 368722

4 years agoReland r368691: "[AIX] Implement LR prolog/epilog save/restore"
Hubert Tong [Tue, 13 Aug 2019 17:05:53 +0000 (17:05 +0000)]
Reland r368691: "[AIX] Implement LR prolog/epilog save/restore"

Trying again with the code changes (and not just the new test).

Summary:
This patch fixes the offsets of fields in the stack frame linkage save
area for AIX.

Reviewers: sfertile, hubert.reinterpretcast, jasonliu, Xiangling_L, xingxue, ZarkoCA, daltenty

Reviewed By: hubert.reinterpretcast

Subscribers: wuzish, nemanjai, hiraditya, kbarton, MaskRay, jsji, llvm-commits

Tags: #llvm

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

Patch by Chris Bowler!

llvm-svn: 368721

4 years ago[NFC][AIX] Use assert instead of llvm_unreachable
David Tenty [Tue, 13 Aug 2019 17:04:51 +0000 (17:04 +0000)]
[NFC][AIX] Use assert instead of llvm_unreachable

Addresses post-commit comments on https://reviews.llvm.org/D64825. Use
assert instead of llvm_unreachable to check if invalid csect types are being
generated. Use report_fatal_error on unimplemented XCOFF features.

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

llvm-svn: 368720

4 years ago[lld][WebAssembly] Allow linking of pic code into static binaries
Sam Clegg [Tue, 13 Aug 2019 17:02:02 +0000 (17:02 +0000)]
[lld][WebAssembly] Allow linking of pic code into static binaries

Summary: See https://github.com/emscripten-core/emscripten/issues/9013

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

Tags: #llvm

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

llvm-svn: 368719

4 years ago[Dwarf] Complete the list of type tags.
Jonas Devlieghere [Tue, 13 Aug 2019 17:00:54 +0000 (17:00 +0000)]
[Dwarf] Complete the list of type tags.

An incorrect verification error revealed that the list of type tags was
incomplete. This patch adds the missing types by adding a tag kind to
the Dwarf.def file, which is used by the `isType` function.

A test was added for the original verification error.

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

llvm-svn: 368718

4 years ago[analyzer][NFC] Refactoring BugReporter.cpp P3.: std::shared_pointer<PathDiagnosticPi...
Kristof Umann [Tue, 13 Aug 2019 16:45:48 +0000 (16:45 +0000)]
[analyzer][NFC] Refactoring BugReporter.cpp P3.: std::shared_pointer<PathDiagnosticPiece> -> PathDiagnosticPieceRef

find clang/ -type f -exec sed -i 's/std::shared_ptr<PathDiagnosticPiece>/PathDiagnosticPieceRef/g' {} \;
git diff -U3 --no-color HEAD^ | clang-format-diff-6.0 -p1 -i

Just as C++ is meant to be refactored, right?

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

llvm-svn: 368717

4 years ago[X86] Add some vXi8 extract subvector cost model tests
Simon Pilgrim [Tue, 13 Aug 2019 16:44:40 +0000 (16:44 +0000)]
[X86] Add some vXi8 extract subvector cost model tests

We don't have full 512-bit test coverage yet - but there's enough to help test D65892

llvm-svn: 368716

4 years ago[SLC] Improve dereferenceable bytes annotation
David Bolvansky [Tue, 13 Aug 2019 16:44:16 +0000 (16:44 +0000)]
[SLC] Improve dereferenceable bytes annotation

llvm-svn: 368715

4 years agoGlobalISel: Partially implement fewerElementsVector G_UNMERGE_VALUES
Matt Arsenault [Tue, 13 Aug 2019 16:26:28 +0000 (16:26 +0000)]
GlobalISel: Partially implement fewerElementsVector G_UNMERGE_VALUES

Odd sized vectors aren't handled yet.

llvm-svn: 368713

4 years ago[ARM] Fix detection of duplicates when parsing reg list operands
Momchil Velikov [Tue, 13 Aug 2019 16:13:00 +0000 (16:13 +0000)]
[ARM] Fix detection of duplicates when parsing reg list operands

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

llvm-svn: 368712

4 years ago[ARM] Fix encoding of APSR in CLRM instruction
Momchil Velikov [Tue, 13 Aug 2019 16:12:46 +0000 (16:12 +0000)]
[ARM] Fix encoding of APSR in CLRM instruction

The APSR is encoded by setting bit 15 in the register list of the CLRM
instruction (cf. https://static.docs.arm.com/ddi0553/bh/DDI0553B_h_armv8m_arm.pdf).

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

llvm-svn: 368711

4 years ago[lld][test] Update test to print ELF note description data
Jordan Rupprecht [Tue, 13 Aug 2019 16:11:09 +0000 (16:11 +0000)]
[lld][test] Update test to print ELF note description data

llvm-svn: 368710

4 years agoGlobalISel: Implement lower for G_SHUFFLE_VECTOR
Matt Arsenault [Tue, 13 Aug 2019 16:09:07 +0000 (16:09 +0000)]
GlobalISel: Implement lower for G_SHUFFLE_VECTOR

llvm-svn: 368709

4 years ago[ORC] Refactor definition-generation, add a generator for static libraries.
Lang Hames [Tue, 13 Aug 2019 16:05:18 +0000 (16:05 +0000)]
[ORC] Refactor definition-generation, add a generator for static libraries.

This patch replaces the JITDylib::DefinitionGenerator typedef with a class of
the same name, and adds support for attaching a sequence of DefinitionGeneration
objects to a JITDylib.

This patch also adds a new definition generator,
StaticLibraryDefinitionGenerator, that can be used to add symbols fom a static
library to a JITDylib. An object from the static library will be added (via
a supplied ObjectLayer reference) whenever a symbol from that object is
referenced.

To enable testing, lli is updated to add support for the --extra-archive option
when running in -jit-kind=orc-lazy mode.

llvm-svn: 368707

4 years agoFix crash on switch conditions of non-integer types in templates
Elizabeth Andrews [Tue, 13 Aug 2019 15:53:19 +0000 (15:53 +0000)]
Fix crash on switch conditions of non-integer types in templates

Clang currently crashes for switch statements inside a template when
the condition is a non-integer field. The crash is due to incorrect
type-dependency of field. Type-dependency of member expressions is
currently set based on the containing class. This patch changes this for
'members of the current instantiation' to set the type dependency based
on the member's type instead.

A few lit tests started to fail once I applied this patch because errors
are now diagnosed earlier (does not wait till instantiation). I've modified
these tests in this patch as well.

Patch fixes PR#40982

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

llvm-svn: 368706

4 years agoGlobalISel: Add more verifier checks for G_SHUFFLE_VECTOR
Matt Arsenault [Tue, 13 Aug 2019 15:52:21 +0000 (15:52 +0000)]
GlobalISel: Add more verifier checks for G_SHUFFLE_VECTOR

llvm-svn: 368705

4 years agoGlobalISel: Change representation of shuffle masks
Matt Arsenault [Tue, 13 Aug 2019 15:34:38 +0000 (15:34 +0000)]
GlobalISel: Change representation of shuffle masks

Currently shufflemasks get emitted as any other constant, and you end
up with a bunch of virtual registers of G_CONSTANT with a
G_BUILD_VECTOR. The AArch64 selector then asserts on anything that
doesn't fit this pattern. This isn't an ideal representation, and
should avoid legalization and have fewer opportunities for a
representational error.

Rather than invent a new shuffle mask operand type, similar to what
ShuffleVectorSDNode does, just track the original IR Constant mask
operand. I don't completely like the idea of adding another link to
the IR, but MIR is already quite dependent on IR constants already,
and this will allow sharing the shuffle mask utility functions with
the IR.

llvm-svn: 368704

4 years ago[libc++] Always build with -fvisibility=hidden
Louis Dionne [Tue, 13 Aug 2019 15:02:53 +0000 (15:02 +0000)]
[libc++] Always build with -fvisibility=hidden

Summary:
This avoids symbols being accidentally exported from the dylib when they
shouldn't. The next step is to use a pragma to apply hidden visibility
to all declarations (unless otherwise specified), which will allow us
to drop the per-declaration hidden visibility attributes we currently
have.

This also has the nice side effect of making sure the dylib exports the
same symbols regardless of the optimization level.

PR38138

Reviewers: EricWF, mclow.lists

Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits

Tags: #libc

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

llvm-svn: 368703

4 years ago[CodeGen][SelectionDAG] More efficient code for X % C == 0 (SREM case)
Roman Lebedev [Tue, 13 Aug 2019 14:57:37 +0000 (14:57 +0000)]
[CodeGen][SelectionDAG] More efficient code for X % C == 0 (SREM case)

Summary:
This implements an optimization described in Hacker's Delight 10-17:
when `C` is constant, the result of `X % C == 0` can be computed
more cheaply without actually calculating the remainder.
The motivation is discussed here: https://bugs.llvm.org/show_bug.cgi?id=35479.

One huge caveat: this signed case is only valid for positive divisors.

While we can freely negate negative divisors, we can't negate `INT_MIN`,
so for now if `INT_MIN` is encountered, we bailout.
As a follow-up, it should be possible to handle that more gracefully
via extra `and`+`setcc`+`select`.

This passes llvm's test-suite, and from cursory(!) cross-examination
the folds (the assembly) match those of GCC, and manual checking via alive
did not reveal any issues (other than the `INT_MIN` case)

Reviewers: RKSimon, spatel, hermord, craig.topper, xbolva00

Reviewed By: RKSimon, xbolva00

Subscribers: xbolva00, thakis, javed.absar, hiraditya, dexonsmith, llvm-commits

Tags: #llvm

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

llvm-svn: 368702

4 years ago[TargetLowering][NFC] prepareUREMEqFold(): fixup comment
Roman Lebedev [Tue, 13 Aug 2019 14:57:08 +0000 (14:57 +0000)]
[TargetLowering][NFC] prepareUREMEqFold(): fixup comment

The comment initially matched the code, but the code was incorrect
and was fixed after the initial revert back back when it was introduced,
but the comment was never updated.

llvm-svn: 368701

4 years ago[clang-tidy] Update `TransformerClangTidyCheck` to use new `buildMatchers` functionality.
Yitzhak Mandelbaum [Tue, 13 Aug 2019 14:48:13 +0000 (14:48 +0000)]
[clang-tidy] Update `TransformerClangTidyCheck` to use new `buildMatchers` functionality.

Summary:
`buildMatchers` is the new, more general way to extract the matcher from a rule.
This change migrates the code to use it instead of `buildMatcher`.

Reviewers: gribozavr

Subscribers: xazax.hun, cfe-commits

Tags: #clang

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

llvm-svn: 368700

4 years agoRevert r368691; test checked in without changes by accident
Hubert Tong [Tue, 13 Aug 2019 14:43:34 +0000 (14:43 +0000)]
Revert r368691; test checked in without changes by accident

llvm-svn: 368699

4 years ago[llvm-readelf] Implement note parsing for NT_FILE and unknown descriptors
Jordan Rupprecht [Tue, 13 Aug 2019 14:38:45 +0000 (14:38 +0000)]
[llvm-readelf] Implement note parsing for NT_FILE and unknown descriptors

Summary:
This patch implements two note parsers; one for NT_FILE coredumps, e.g.:

```
  CORE                  0x00000080      NT_FILE (mapped files)
    Page size: 4096
                 Start                 End         Page Offset
    0x0000000000001000  0x0000000000002000  0x0000000000003000
        /path/to/a.out
    0x0000000000004000  0x0000000000005000  0x0000000000006000
        /path/to/libc.so
    0x0000000000007000  0x0000000000008000  0x0000000000009000
        [stack]
```

(A more realistic example can be tested locally by creating a crashing program and running `llvm-readelf -n core`)

And also implements a raw hex dump for unknown descriptor data for unhandled descriptor types.

Reviewers: MaskRay, jhenderson, grimar, alexshap

Reviewed By: MaskRay, grimar

Subscribers: emaste, llvm-commits, labath

Tags: #llvm

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

llvm-svn: 368698

4 years agoEnable memtag sanitizer in all AArch64 toolchains
Momchil Velikov [Tue, 13 Aug 2019 14:20:23 +0000 (14:20 +0000)]
Enable memtag sanitizer in all AArch64 toolchains

That sanitizer does not have runtime library or other dependencies.

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

llvm-svn: 368697

4 years ago[AArch64] Make the memtag sanitizer require the memtag extension
Momchil Velikov [Tue, 13 Aug 2019 14:20:06 +0000 (14:20 +0000)]
[AArch64] Make the memtag sanitizer require the memtag extension

... or otherwise we get an ICE.

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

llvm-svn: 368696

4 years ago[lldb] Fix Microsoft guard variable detection
Raphael Isemann [Tue, 13 Aug 2019 14:13:39 +0000 (14:13 +0000)]
[lldb] Fix Microsoft guard variable detection

Apparently we need to check for a suffix, not a prefix. This broke
probably broke expression evaluation on Windows.

llvm-svn: 368695

4 years ago[analyzer][NFC] Refactoring BugReporter.cpp P2.: Clean up the construction of bug...
Kristof Umann [Tue, 13 Aug 2019 13:56:12 +0000 (13:56 +0000)]
[analyzer][NFC] Refactoring BugReporter.cpp P2.: Clean up the construction of bug paths and finding a valid report

This patch refactors the utility functions and classes around the construction
of a bug path.

At a very high level, this consists of 3 steps:

* For all BugReports in the same BugReportEquivClass, collect all their error
nodes in a set. With that set, create a new, trimmed ExplodedGraph whose leafs
are all error nodes.
* Until a valid report is found, construct a bug path, which is yet another
ExplodedGraph, that is linear from a given error node to the root of the graph.
* Run all visitors on the constructed bug path. If in this process the report
got invalidated, start over from step 2.

Now, to the changes within this patch:

* Do not allow the invalidation of BugReports up to the point where the trimmed
graph is constructed. Checkers shouldn't add bug reports that are known to be
invalid, and should use visitors and argue about the entirety of the bug path if
needed.
* Do not calculate indices. I may be biased, but I personally find code like
this horrible. I'd like to point you to one of the comments in the original code:

SmallVector<const ExplodedNode *, 32> errorNodes;
for (const auto I : bugReports) {
  if (I->isValid()) {
    HasValid = true;
    errorNodes.push_back(I->getErrorNode());
  } else {
    // Keep the errorNodes list in sync with the bugReports list.
    errorNodes.push_back(nullptr);
  }
}

Not on my watch. Instead, use a far easier to follow trick: store a pointer to
the BugReport in question, not an index to it.

* Add range iterators to ExplodedGraph's successors and predecessors, and a
visitor range to BugReporter.
* Rename TrimmedGraph to BugPathGetter. Because that is what it has always been:
no sane graph type should store an iterator-like state, or have an interface not
exposing a single graph-like functionalities.
* Rename ReportGraph to BugPathInfo, because it is only a linear path with some
other context.
* Instead of having both and out and in parameter (which I think isn't ever
excusable unless we use the out-param for caching), return a record object with
descriptive getter methods.
* Where descriptive names weren't sufficient, compliment the code with comments.

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

llvm-svn: 368694

4 years agoFix -Wdocumentation warning (@returns used in void function). NFCI.
Simon Pilgrim [Tue, 13 Aug 2019 13:55:38 +0000 (13:55 +0000)]
Fix -Wdocumentation warning (@returns used in void function). NFCI.

llvm-svn: 368693

4 years agoFix -Wdocumentation typo. NFCI.
Simon Pilgrim [Tue, 13 Aug 2019 13:52:20 +0000 (13:52 +0000)]
Fix -Wdocumentation typo. NFCI.

llvm-svn: 368692

4 years ago[AIX] Implement LR prolog/epilog save/restore
Hubert Tong [Tue, 13 Aug 2019 13:38:24 +0000 (13:38 +0000)]
[AIX] Implement LR prolog/epilog save/restore

Summary:
This patch fixes the offsets of fields in the stack frame linkage save
area for AIX.

Reviewers: sfertile, hubert.reinterpretcast, jasonliu, Xiangling_L, xingxue, ZarkoCA, daltenty

Reviewed By: hubert.reinterpretcast

Subscribers: wuzish, nemanjai, hiraditya, kbarton, MaskRay, jsji, llvm-commits

Tags: #llvm

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

Patch by Chris Bowler!

llvm-svn: 368691

4 years ago[AIX][test/Index] Set/propagate AIXTHREAD_STK for AIX
Hubert Tong [Tue, 13 Aug 2019 13:38:15 +0000 (13:38 +0000)]
[AIX][test/Index] Set/propagate AIXTHREAD_STK for AIX

Summary:
Some tests perform deep recursion, which requires a larger pthread stack
size than the relatively low default of 192 KiB for 64-bit processes on
AIX. The `AIXTHREAD_STK` environment variable provides a non-intrusive
way to request a larger pthread stack size for the tests. The required
pthread stack size depends on the build configuration.

A 4 MiB default is generous compared to the 512 KiB of macOS; however,
it is known that some compilers on AIX produce code that uses
comparatively more stack space.

Reviewers: xingxue, daltenty, jasonliu

Reviewed By: daltenty

Subscribers: arphaman, jfb, cfe-commits

Tags: #clang

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

llvm-svn: 368690

4 years ago[analyzer][NFC] Refactoring BugReporter.cpp P1.: Store interesting symbols/regions...
Kristof Umann [Tue, 13 Aug 2019 13:09:48 +0000 (13:09 +0000)]
[analyzer][NFC] Refactoring BugReporter.cpp P1.: Store interesting symbols/regions in a simple set

The goal of this refactoring effort was to better understand how interestingness
was propagated in BugReporter.cpp, which eventually turned out to be a dead end,
but with such a twist, I wouldn't even want to spoil it ahead of time. However,
I did get to learn a lot about how things are working in there.

In these series of patches, as well as cleaning up the code big time, I invite
you to study how BugReporter.cpp operates, and discuss how we could design this
file to reduce the horrible mess that it is.

This patch reverts a great part of rC162028, which holds the title "Allow
multiple PathDiagnosticConsumers to be used with a BugReporter at the same
time.". This, however doesn't imply that there's any need for multiple "layers"
or stacks of interesting symbols and regions, quite the contrary, I would argue
that we would like to generate the same amount of information for all output
types, and only process them differently.

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

llvm-svn: 368689