platform/upstream/llvm.git
7 years ago[clangd] Add support for vscode extension configuration
Krasimir Georgiev [Fri, 24 Mar 2017 09:29:00 +0000 (09:29 +0000)]
[clangd] Add support for vscode extension configuration

Summary: Adds vscode workspace level configuration options for path to clangd binary and its arguments.
Contributed by stanionascu!

Reviewers: cfe-commits, bkramer, krasimir

Reviewed By: krasimir

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

llvm-svn: 298696

7 years agoRevert r298491 and r298494 which changed Clang's handling of 'nonnull'
Chandler Carruth [Fri, 24 Mar 2017 09:11:57 +0000 (09:11 +0000)]
Revert r298491 and r298494 which changed Clang's handling of 'nonnull'
attributes.

These patches don't work because we can't currently access the parameter
information in a reliable way when building attributes. I thought this
would be relatively straightforward to fix, but it seems not to be the
case. Fixing this will requrie a substantial re-plumbing of machinery to
allow attributes to be handled in this location, and several other fixes
to the attribute machinery should probably be made at the same time. All
of this will make the patch .... substantially more complicated.

Reverting for now as there are active miscompiles caused by the current
version.

llvm-svn: 298695

7 years agoThe expression text in AppleObjCRuntimeV1::CreateObjectChecker
Jason Molenda [Fri, 24 Mar 2017 08:01:16 +0000 (08:01 +0000)]
The expression text in AppleObjCRuntimeV1::CreateObjectChecker
was formatted into a string inside an assert() expression.
Which is elided when lldb is built with asserts disabled;
the result is that all expressions will fail when debugging
programs using the objective-c v1 runtime.

<rdar://problem/30353271>

llvm-svn: 298694

7 years agoRevert "[ScalarEvolution] Re-enable Predicate implication from operations"
Max Kazantsev [Fri, 24 Mar 2017 07:04:31 +0000 (07:04 +0000)]
Revert "[ScalarEvolution] Re-enable Predicate implication from operations"

This reverts commit rL298690

Causes failures on clang.

llvm-svn: 298693

7 years agoNewGVN: Small cleanup of two dominance related functions to make
Daniel Berlin [Fri, 24 Mar 2017 06:33:51 +0000 (06:33 +0000)]
NewGVN: Small cleanup of two dominance related functions to make
them easier to understand.

llvm-svn: 298692

7 years agoNewGVN: Small cleanup of useless expression deletion, and don't uselessly create...
Daniel Berlin [Fri, 24 Mar 2017 06:33:48 +0000 (06:33 +0000)]
NewGVN: Small cleanup of useless expression deletion, and don't uselessly create two expressions in symbolic store evaluation.

llvm-svn: 298691

7 years ago[ScalarEvolution] Re-enable Predicate implication from operations
Max Kazantsev [Fri, 24 Mar 2017 06:19:00 +0000 (06:19 +0000)]
[ScalarEvolution] Re-enable Predicate implication from operations

The patch rL298481 was reverted due to crash on clang-with-lto-ubuntu build.
The reason of the crash was type mismatch between either a or b and RHS in the following situation:

  LHS = sext(a +nsw b) > RHS.

This is quite rare, but still possible situation. Normally we need to cast all {a, b, RHS} to their widest type.
But we try to avoid creation of new SCEV that are not constants to avoid initiating recursive analysis that
can take a lot of time and/or cache a bad value for iterations number. To deal with this, in this patch we
reject this case and will not try to analyze it if the type of sum doesn't match with the type of RHS. In this
situation we don't need to create any non-constant SCEVs.

This patch also adds an assertion to the method IsProvedViaContext so that we could fail on it and not
go further into range analysis etc (because in some situations these analyzes succeed even when the passed
arguments have wrong types, what should not normally happen).

The patch also contains a fix for a problem with too narrow scope of the analysis caused by wrong
usage of predicates in recursive invocations.

The regression test on the said failure: test/Analysis/ScalarEvolution/implied-via-addition.ll

llvm-svn: 298690

7 years agoImplement P0298R3: 'std::byte'. Reviewed as https://reviews.llvm.org/D31022
Marshall Clow [Fri, 24 Mar 2017 05:45:39 +0000 (05:45 +0000)]
Implement P0298R3: 'std::byte'. Reviewed as https://reviews.llvm.org/D31022

llvm-svn: 298689

7 years ago[ValueTracking] Use uint64_t for CarryIn in computeKnownBitsAddSub instead of a creat...
Craig Topper [Fri, 24 Mar 2017 05:38:09 +0000 (05:38 +0000)]
[ValueTracking] Use uint64_t for CarryIn in computeKnownBitsAddSub instead of a creating a temporary APInt. NFC

llvm-svn: 298688

7 years agoNewGVN: Fix PR32403 - Handling of undef in phis was not quite correct
Daniel Berlin [Fri, 24 Mar 2017 05:30:34 +0000 (05:30 +0000)]
NewGVN: Fix PR32403 - Handling of undef in phis was not quite correct
due to LLVM's view of phi nodes.  It would cause NewGVN not to fixpoint
in some interesting edge cases.

llvm-svn: 298687

7 years agoMove the scoped_lock inside the '#ifndef NO_THREADS' block to fix the no-threading...
Marshall Clow [Fri, 24 Mar 2017 05:19:15 +0000 (05:19 +0000)]
Move the scoped_lock inside the '#ifndef NO_THREADS' block to fix the no-threading build

llvm-svn: 298686

7 years ago[XRay] [compiler-rt] Plug a file descriptor leak in a failure case.
Martin Pelikan [Fri, 24 Mar 2017 05:02:51 +0000 (05:02 +0000)]
[XRay] [compiler-rt] Plug a file descriptor leak in a failure case.

Summary: Fd needs to be closed before the number gets out of scope.

Reviewers: dberris

Subscribers: llvm-commits

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

llvm-svn: 298685

7 years agoFix a warning when running the GotsanRuntimeCheck test on Darwin.
Kuba Mracek [Fri, 24 Mar 2017 03:57:27 +0000 (03:57 +0000)]
Fix a warning when running the GotsanRuntimeCheck test on Darwin.

llvm-svn: 298684

7 years ago[ValueTracking] Convert more places to use setHighBits/setLowBits/setSignBit. NFCI
Craig Topper [Fri, 24 Mar 2017 03:57:24 +0000 (03:57 +0000)]
[ValueTracking] Convert more places to use setHighBits/setLowBits/setSignBit. NFCI

llvm-svn: 298683

7 years agoUpdate the Darwin/external.cc testcase to use rpath. This means we can move the test...
Kuba Mracek [Fri, 24 Mar 2017 03:53:44 +0000 (03:53 +0000)]
Update the Darwin/external.cc testcase to use rpath. This means we can move the test output executables and still be able to run them.

llvm-svn: 298682

7 years agoImplement Pp0156r2: 'Variadic Lock Guard, version 5' Reviewed as https://reviews...
Marshall Clow [Fri, 24 Mar 2017 03:40:36 +0000 (03:40 +0000)]
Implement Pp0156r2: 'Variadic Lock Guard, version 5'  Reviewed as https://reviews.llvm.org/D31163.

llvm-svn: 298681

7 years ago[InstCombine] Use range-based for loop. NFC
Craig Topper [Fri, 24 Mar 2017 02:58:02 +0000 (02:58 +0000)]
[InstCombine] Use range-based for loop. NFC

llvm-svn: 298680

7 years ago[InstCombine] Fix 80 column violation I accidentally introduced. NFC
Craig Topper [Fri, 24 Mar 2017 02:57:59 +0000 (02:57 +0000)]
[InstCombine] Fix 80 column violation I accidentally introduced. NFC

llvm-svn: 298679

7 years ago[CMake] Support single target builtins build on Darwin
Petr Hosek [Fri, 24 Mar 2017 02:21:11 +0000 (02:21 +0000)]
[CMake] Support single target builtins build on Darwin

This change allows cross-compiling compiler-rt builtins for
multiple targets as part of runtimes on Darwin. This functionality
is already supported on other platforms.

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

llvm-svn: 298678

7 years ago[AVR] Fix build after r298178
Meador Inge [Fri, 24 Mar 2017 01:57:29 +0000 (01:57 +0000)]
[AVR] Fix build after r298178

r298178 capitalized the fields in `ArgListEntry`.  All the official
targets were updated accordingly, but as an experimental target AVR
was missed.

llvm-svn: 298677

7 years agoFix handling of initialization from parenthesized initializer list.
Richard Smith [Fri, 24 Mar 2017 01:14:25 +0000 (01:14 +0000)]
Fix handling of initialization from parenthesized initializer list.

This change fixes a crash on initialization of a reference from ({}) during
template instantiation and incidentally improves diagnostics.

This reverts a prior attempt to handle this in r286721. Instead, we teach the
initialization code that initialization cannot be performed if a source type
is required and the initializer is an initializer list (which is not an
expression and does not have a type), and likewise for function-style cast
expressions.

llvm-svn: 298676

7 years agoReturn early.
Rui Ueyama [Fri, 24 Mar 2017 01:13:30 +0000 (01:13 +0000)]
Return early.

llvm-svn: 298675

7 years ago[libFuzzer] split two tests to get more parallelism in test runs
Kostya Serebryany [Fri, 24 Mar 2017 00:51:18 +0000 (00:51 +0000)]
[libFuzzer] split two tests to get more parallelism in test runs

llvm-svn: 298673

7 years agoEarly continue. NFC.
Rui Ueyama [Fri, 24 Mar 2017 00:50:37 +0000 (00:50 +0000)]
Early continue. NFC.

The original code is a big `if` and `else` which ends with `continue`
like this:

  if (cond) {
    ...
    // fall through
  } else {
    ...
    continue;
  }

This patch rewrites it with the following.

  if (!cond) {
    ...
    continue;
  }
  ...

llvm-svn: 298672

7 years ago[libFuzzer] increase kFeatureSetSize to 2^21 and make InputCorpus scale to that size...
Kostya Serebryany [Fri, 24 Mar 2017 00:45:15 +0000 (00:45 +0000)]
[libFuzzer] increase kFeatureSetSize to 2^21 and make InputCorpus scale to that size. This will potentially make libFuzzer more sensitive on targets with lots of signals

llvm-svn: 298671

7 years ago[XRay] Do not depend on C++ stdlib for XRay builds
Dean Michael Berris [Fri, 24 Mar 2017 00:20:05 +0000 (00:20 +0000)]
[XRay] Do not depend on C++ stdlib for XRay builds

Summary:
Now that XRay doesn't require a runtime dependency on a C++ standard
library, we remove that dependency from the clang linker flags.

Reviewers: saugustine, pelikan

Subscribers: cfe-commits

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

llvm-svn: 298670

7 years agoUpdate comments.
Rui Ueyama [Fri, 24 Mar 2017 00:15:57 +0000 (00:15 +0000)]
Update comments.

llvm-svn: 298669

7 years agoUse `using namespace lld` for consistency with other files.
Rui Ueyama [Fri, 24 Mar 2017 00:15:37 +0000 (00:15 +0000)]
Use `using namespace lld` for consistency with other files.

llvm-svn: 298668

7 years agoMove a few functions to a new file Filesystem.{cpp,h}.
Rui Ueyama [Fri, 24 Mar 2017 00:15:16 +0000 (00:15 +0000)]
Move a few functions to a new file Filesystem.{cpp,h}.

llvm-svn: 298667

7 years ago[libFuzzer] fix non-linux build
Kostya Serebryany [Thu, 23 Mar 2017 23:48:47 +0000 (23:48 +0000)]
[libFuzzer] fix non-linux build

llvm-svn: 298666

7 years agoRefactor code to reduce indentation and improve readability. (NFC)
Adrian Prantl [Thu, 23 Mar 2017 23:35:09 +0000 (23:35 +0000)]
Refactor code to reduce indentation and improve readability. (NFC)

llvm-svn: 298665

7 years agoFix a bug when emitting debug info for partially constant global variables.
Adrian Prantl [Thu, 23 Mar 2017 23:35:00 +0000 (23:35 +0000)]
Fix a bug when emitting debug info for partially constant global variables.

While fixing a malformed testcase, I discovered that the code
exercised by it was wrong, too.

llvm-svn: 298664

7 years agoRemove uses of std::binary_function, removed in C++17.
Richard Smith [Thu, 23 Mar 2017 23:32:03 +0000 (23:32 +0000)]
Remove uses of std::binary_function, removed in C++17.

llvm-svn: 298663

7 years ago[sancov] Don't instrument blocks with no insertion point
Reid Kleckner [Thu, 23 Mar 2017 23:30:41 +0000 (23:30 +0000)]
[sancov] Don't instrument blocks with no insertion point

This prevents crashes when attempting to instrument functions containing
C++ try.

Sanitizer coverage will still fail at runtime when an exception is
thrown through a sancov instrumented function, but that seems marginally
better than what we have now. The full solution is to color the blocks
in LLVM IR and only instrument blocks that have an unambiguous color,
using the appropriate token.

llvm-svn: 298662

7 years agoFix trellis layout to avoid mis-identify triangle.
Dehao Chen [Thu, 23 Mar 2017 23:28:09 +0000 (23:28 +0000)]
Fix trellis layout to avoid mis-identify triangle.

Summary:
For the following CFG:

A->B
B->C
A->C

If there is another edge B->D, then ABC should not be considered as triangle.

Reviewers: davidxl, iteratee

Reviewed By: iteratee

Subscribers: nemanjai, llvm-commits

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

llvm-svn: 298661

7 years agoSet the prof weight correctly for call instructions in DeadArgumentElimination.
Dehao Chen [Thu, 23 Mar 2017 23:26:00 +0000 (23:26 +0000)]
Set the prof weight correctly for call instructions in DeadArgumentElimination.

Summary: In DeadArgumentElimination, the call instructions will be replaced. We also need to set the prof weights so that function inlining can find the correct profile.

Reviewers: eraman

Reviewed By: eraman

Subscribers: llvm-commits

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

llvm-svn: 298660

7 years ago[MetaRenamer] Don't rename library functions.
Bryant Wong [Thu, 23 Mar 2017 23:21:07 +0000 (23:21 +0000)]
[MetaRenamer] Don't rename library functions.

Library functions can have specific semantics that affect the behavior of
certain passes. DSE, for instance, gives special treatment to malloc-ed pointers
but not to pointers returned from an equivalently typed (but differently named)
function.

MetaRenamer ought not to alter program semantics, so library functions must
remain untouched.

Reviewers: mehdi_amini, majnemer, chandlerc, davide

Reviewed By: davide

Subscribers: davide, llvm-commits

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

llvm-svn: 298659

7 years agoAdd strtok interceptor for ASAN for Windows.
Alex Shlyapnikov [Thu, 23 Mar 2017 23:20:47 +0000 (23:20 +0000)]
Add strtok interceptor for ASAN for Windows.

Summary: Fixes test broken by D30384

Reviewers: eugenis

Subscribers: kubamracek, llvm-commits

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

llvm-svn: 298658

7 years agoRemove all uses of std::mem_fun and std::bind1st removed in C++17.
Richard Smith [Thu, 23 Mar 2017 23:17:58 +0000 (23:17 +0000)]
Remove all uses of std::mem_fun and std::bind1st removed in C++17.

llvm-svn: 298657

7 years agoUse isFunctionHotInCallGraph to set the function section prefix.
Dehao Chen [Thu, 23 Mar 2017 23:14:11 +0000 (23:14 +0000)]
Use isFunctionHotInCallGraph to set the function section prefix.

Summary: The current prefix based function layout algorithm only looks at function's entry count, which is not sufficient. A function should be grouped together if its entry count or any call edge count is hot.

Reviewers: davidxl, eraman

Reviewed By: eraman

Subscribers: llvm-commits

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

llvm-svn: 298656

7 years ago[Hexagon] Avoid infinite loops in HexagonLoopIdiomRecognition
Krzysztof Parzyszek [Thu, 23 Mar 2017 23:01:22 +0000 (23:01 +0000)]
[Hexagon] Avoid infinite loops in HexagonLoopIdiomRecognition

- Avoid explosive growth of the simplification queue by not queuing
  expressions that are alredy in it.
- Add an iteration counter and abort after a sufficiently large number
  of iterations (assuming that it's a symptom of an infinite loop).

llvm-svn: 298655

7 years ago[libFuzzer] create experimental support for user-provided coverage signal
Kostya Serebryany [Thu, 23 Mar 2017 22:43:12 +0000 (22:43 +0000)]
[libFuzzer] create experimental support for user-provided coverage signal

llvm-svn: 298654

7 years ago[CMake] Provide an option to disable runtimes build
Petr Hosek [Thu, 23 Mar 2017 22:40:10 +0000 (22:40 +0000)]
[CMake] Provide an option to disable runtimes build

This could be used to either disable the runtimes build altogether
or avoid building them but still generate the build targets.

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

llvm-svn: 298653

7 years agoMove spill size and alignment info from MC to TargetRegisterInfo
Krzysztof Parzyszek [Thu, 23 Mar 2017 22:32:22 +0000 (22:32 +0000)]
Move spill size and alignment info from MC to TargetRegisterInfo

This is another step towards implementing register classes with
parametrized register/spill sizes.

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

llvm-svn: 298652

7 years ago[Outliner] Remove unused lambda capture.
Jessica Paquette [Thu, 23 Mar 2017 22:17:20 +0000 (22:17 +0000)]
[Outliner] Remove unused lambda capture.

Remove an unused lambda capture that made some bots unhappy.

llvm-svn: 298651

7 years ago[asan] Add an interceptor for strtok
Alex Shlyapnikov [Thu, 23 Mar 2017 21:39:52 +0000 (21:39 +0000)]
[asan] Add an interceptor for strtok

Summary:
This change addresses https://github.com/google/sanitizers/issues/766. I
tested the change with make check-asan and the newly added test case.

Reviewers: ygribov, kcc, alekseyshl

Subscribers: kubamracek, llvm-commits

Patch by mrigger

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

llvm-svn: 298650

7 years ago[PDB] Use two DBs when dumping the IPI stream
Reid Kleckner [Thu, 23 Mar 2017 21:36:25 +0000 (21:36 +0000)]
[PDB] Use two DBs when dumping the IPI stream

Summary:
When dumping these records from an object file section, we should use
only one type database. However, when dumping from a PDB, we should use
two: one for the type stream and one for the IPI stream.

Certain type records that normally live in the .debug$T object file
section get moved over to the IPI stream of the PDB file and they get
new indices.

So far, I've noticed that the MSVC linker always moves these records
into IPI:
- LF_FUNC_ID
- LF_MFUNC_ID
- LF_STRING_ID
- LF_SUBSTR_LIST
- LF_BUILDINFO
- LF_UDT_MOD_SRC_LINE

These records have index fields that can point into TPI or IPI. In
particular, LF_SUBSTR_LIST and LF_BUILDINFO point to LF_STRING_ID
records to describe compilation command lines.

I've modified the dumper to have an optional pointer to the item DB, and
to do type name lookup of these fields in that DB. See printItemIndex.
The result is that our pdbdump-headers.test is more faithful to the PDB
contents and the output is less confusing.

Reviewers: ruiu

Subscribers: amccarth, zturner, llvm-commits

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

llvm-svn: 298649

7 years ago[Outliner] Fix compile-time overhead for candidate choice
Jessica Paquette [Thu, 23 Mar 2017 21:27:38 +0000 (21:27 +0000)]
[Outliner] Fix compile-time overhead for candidate choice

The old candidate collection method in the outliner caused some very large
regressions in compile time on large tests. For MultiSource/Benchmarks/7zip it
caused a 284.07 s or 1156% increase in compile time. On average, using the
SingleSource/MultiSource tests, it caused an average increase of 8 seconds in
compile time (something like 1000%).

This commit replaces that candidate collection method with a new one which
only visits each node in the tree once. This reduces the worst compile time
increase (still 7zip) to a 0.542 s overhead (22%) and the average compile time
increase on SingleSource and MultiSource to 0.018 s (4%).

llvm-svn: 298648

7 years agoUpdate the SamplePGO test to verify that unroll/icp is not invoked in thinlto compile...
Dehao Chen [Thu, 23 Mar 2017 21:20:17 +0000 (21:20 +0000)]
Update the SamplePGO test to verify that unroll/icp is not invoked in thinlto compile phase.

Summary: This is the test added for https://reviews.llvm.org/D31217

Reviewers: tejohnson, mehdi_amini

Reviewed By: tejohnson

Subscribers: cfe-commits, Prazek

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

llvm-svn: 298647

7 years agoDisable loop unrolling and icp in SamplePGO ThinLTO compile phase
Dehao Chen [Thu, 23 Mar 2017 21:20:05 +0000 (21:20 +0000)]
Disable loop unrolling and icp in SamplePGO ThinLTO compile phase

Summary:
loop unrolling and icp will make the sample profile annotation much harder in the backend. So disable these 2 optimization in the ThinLTO compile phase.
Will add a test in cfe in a separate patch.

Reviewers: tejohnson

Reviewed By: tejohnson

Subscribers: mehdi_amini, llvm-commits, Prazek

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

llvm-svn: 298646

7 years agoRemove unnecessary use of std::result_of, which is deprecated in C++17.
Richard Smith [Thu, 23 Mar 2017 21:02:31 +0000 (21:02 +0000)]
Remove unnecessary use of std::result_of, which is deprecated in C++17.

llvm-svn: 298645

7 years ago[InstCombine] Remove some code from visitAnd that dealt with trying to reduce the...
Craig Topper [Thu, 23 Mar 2017 21:00:13 +0000 (21:00 +0000)]
[InstCombine] Remove some code from visitAnd that dealt with trying to reduce the LHS of a sub to 0. This should now be fully handled by SimplifyDemandedInstructionBits now.

Now that we call ShrinkDemandedConstant on the RHS of sub this should be taken care of. This code doesn't trigger on any in tree regressions, but did before ShrinkDemandedConstant was added to the RHS.

llvm-svn: 298644

7 years agoLLVM Changes for alloc_align
Erich Keane [Thu, 23 Mar 2017 20:38:34 +0000 (20:38 +0000)]
LLVM Changes for alloc_align

GCC has the alloc_align attribute, which is similar to assume_aligned, except the attribute's parameter is the index of the integer parameter that needs aligning to.

This is the required LLVM changes to make this happen.

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

llvm-svn: 298643

7 years agoZero-Initialize PrevInstBB when entering a new MachineFunction.
Adrian Prantl [Thu, 23 Mar 2017 20:23:42 +0000 (20:23 +0000)]
Zero-Initialize PrevInstBB when entering a new MachineFunction.

It is not guaranteed that the memory used for MachineBasicBlocks in
the previous MachineFunction hasn't been freed, so holding on to a
pointer to the last function's isn't correct. Particularly I have
observed the sret.ll testcase failing because the first BasicBlock in
the new function happened to be allocated to the exact same memory as
the previously saved and (deleted) PrevInstBB.

llvm-svn: 298642

7 years ago[LV] Add regression test for r297610
Gil Rapaport [Thu, 23 Mar 2017 20:02:23 +0000 (20:02 +0000)]
[LV] Add regression test for r297610

The new test asserts that scalarized memory operations get memcheck metadata
added even if the loop is only unrolled.

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

llvm-svn: 298641

7 years ago[LVIPrinterPass] Print LVI info for function arguments
Anna Thomas [Thu, 23 Mar 2017 20:00:54 +0000 (20:00 +0000)]
[LVIPrinterPass] Print LVI info for function arguments

Using AssemblyAnnotationWriter for LVI printer prints
for instructions and basic blocks.
So, we explicitly need to print LVI info for the arguments of the function (these
are values and not instructions).

llvm-svn: 298640

7 years ago[ThinLTO] Clang support for emitting minimized bitcode for thin link
Teresa Johnson [Thu, 23 Mar 2017 19:47:49 +0000 (19:47 +0000)]
[ThinLTO] Clang support for emitting minimized bitcode for thin link

Summary:
Clang companion patch to LLVM patch D31027, which adds support
for emitting minimized bitcode file for use in the thin link step.
Add a cc1 option -fthin-link-bitcode=<file> to trigger this behavior.

Depends on D31027.

Reviewers: mehdi_amini, pcc

Subscribers: cfe-commits, Prazek

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

llvm-svn: 298639

7 years ago[ThinLTO] Add support for emitting minimized bitcode for thin link
Teresa Johnson [Thu, 23 Mar 2017 19:47:39 +0000 (19:47 +0000)]
[ThinLTO] Add support for emitting minimized bitcode for thin link

Summary:
The cumulative size of the bitcode files for a very large application
can be huge, particularly with -g. In a distributed build environment,
all of these files must be sent to the remote build node that performs
the thin link step, and this can exceed size limits.

The thin link actually only needs the summary along with a bitcode
symbol table. Until we have a proper bitcode symbol table, simply
stripping the debug metadata results in significant size reduction.

Add support for an option to additionally emit minimized bitcode
modules, just for use in the thin link step, which for now just strips
all debug metadata. I plan to add a cc1 option so this can be invoked
easily during the compile step.

However, care must be taken to ensure that these minimized thin link
bitcode files produce the same index as with the original bitcode files,
as these original bitcode files will be used in the backends.

Specifically:
1) The module hash used for caching is typically produced by hashing the
written bitcode, and we want to include the hash that would correspond
to the original bitcode file. This is because we want to ensure that
changes in the stripped portions affect caching. Added plumbing to emit
the same module hash in the minimized thin link bitcode file.
2) The module paths in the index are constructed from the module ID of
each thin linked bitcode, and typically is automatically generated from
the input file path. This is the path used for finding the modules to
import from, and obviously we need this to point to the original bitcode
files. Added gold-plugin support to take a suffix replacement during the
thin link that is used to override the identifier on the MemoryBufferRef
constructed from the loaded thin link bitcode file. The assumption is
that the build system can specify that the minimized bitcode file has a
name that is similar but uses a different suffix (e.g. out.thinlink.bc
instead of out.o).

Added various tests to ensure that we get identical index files out of
the thin link step.

Reviewers: mehdi_amini, pcc

Subscribers: Prazek, llvm-commits

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

llvm-svn: 298638

7 years agoKill some trailing whitespace to make some new changes a bit easier.
Eric Christopher [Thu, 23 Mar 2017 19:41:10 +0000 (19:41 +0000)]
Kill some trailing whitespace to make some new changes a bit easier.

llvm-svn: 298637

7 years ago[scudo] Add test exercising pthreads
Kostya Kortchinsky [Thu, 23 Mar 2017 19:21:10 +0000 (19:21 +0000)]
[scudo] Add test exercising pthreads

Summary: Scudo didn't have any test using multiple threads. Add one, borrowed from lsan.

Reviewers: kcc, alekseyshl

Reviewed By: alekseyshl

Subscribers: llvm-commits

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

llvm-svn: 298636

7 years agoCorrect class-template deprecation behavior-REDUX
Erich Keane [Thu, 23 Mar 2017 18:51:54 +0000 (18:51 +0000)]
Correct class-template deprecation behavior-REDUX

Correct class-template deprecation behavior

Based on the comment in the test, and my reading of the standard, a deprecated warning should be issued in the following case:
template<typename T> [[deprecated]] class Foo{}; Foo<int> f;

This was not the case, because the ClassTemplateSpecializationDecl creation did not also copy the deprecated attribute.

Note: I did NOT audit the complete set of attributes to see WHICH ones should be copied, so instead I simply copy ONLY the deprecated attribute.

Previous DiffRev: https://reviews.llvm.org/D27486, was reverted.
This patch fixes the issues brought up here by the reverter: https://reviews.llvm.org/rL298410

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

llvm-svn: 298634

7 years ago[X86] Fix Stale SDNode use in X86ISelDAGtoDAG
Nirav Dave [Thu, 23 Mar 2017 18:25:17 +0000 (18:25 +0000)]
[X86] Fix Stale SDNode use in X86ISelDAGtoDAG

Summary: Fixes pr32329.

Reviewers: spatel, craig.topper

Subscribers: llvm-commits

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

llvm-svn: 298633

7 years agoFix varaible names that correspond to command line options.
Rui Ueyama [Thu, 23 Mar 2017 18:16:42 +0000 (18:16 +0000)]
Fix varaible names that correspond to command line options.

llvm-svn: 298632

7 years agoModel ashr(shl(x, n), m) as mul(x, 2^(n-m)) when n > m
Zhaoshi Zheng [Thu, 23 Mar 2017 18:06:09 +0000 (18:06 +0000)]
Model ashr(shl(x, n), m) as mul(x, 2^(n-m)) when n > m

Given below case:

  %y = shl %x, n
  %z = ashr %y, m

when n = m, SCEV models it as sext(trunc(x)). This patch tries to handle
the case where n > m by using sext(mul(trunc(x), 2^(n-m)))) as the SCEV
expression.

llvm-svn: 298631

7 years agorevert test commit r298629
Zhaoshi Zheng [Thu, 23 Mar 2017 17:52:20 +0000 (17:52 +0000)]
revert test commit r298629

llvm-svn: 298630

7 years agotest commit
Zhaoshi Zheng [Thu, 23 Mar 2017 17:38:47 +0000 (17:38 +0000)]
test commit

llvm-svn: 298629

7 years agoRemove the subtarget argument from LowerFP_TO_INT since there's one
Eric Christopher [Thu, 23 Mar 2017 17:35:08 +0000 (17:35 +0000)]
Remove the subtarget argument from LowerFP_TO_INT since there's one
stored on X86TargetLowering.

llvm-svn: 298628

7 years agoRemove unused X86Subtarget argument from getOnesVector.
Eric Christopher [Thu, 23 Mar 2017 17:35:06 +0000 (17:35 +0000)]
Remove unused X86Subtarget argument from getOnesVector.

llvm-svn: 298627

7 years agoSomehow this still breaks because of ANSI color codes in test output on Linux.
Adrian McCarthy [Thu, 23 Mar 2017 17:18:50 +0000 (17:18 +0000)]
Somehow this still breaks because of ANSI color codes in test output on Linux.
Reverting until I can figure out the root cause.

Revert "Re-land:  Make NativeExeSymbol a concrete subclass of NativeRawSymbol [PDB]"

This reverts commit f461a70cc376f0f91c8b4917be79479cc86330a5.

llvm-svn: 298626

7 years agoFix build break after r298623
Adrian McCarthy [Thu, 23 Mar 2017 16:57:53 +0000 (16:57 +0000)]
Fix build break after r298623

Use the -color-output option explicitly to eliminate the ANSI color codes in
pdb-native-summary.test.  (The default should have done this.)

llvm-svn: 298625

7 years ago[ARM] Fix computeKnownBits for ARMISD::CMOV
Pirama Arumuga Nainar [Thu, 23 Mar 2017 16:47:47 +0000 (16:47 +0000)]
[ARM] Fix computeKnownBits for ARMISD::CMOV

Summary:
The true and false operands for the CMOV are operands 0 and 1.
ARMISelLowering.cpp::computeKnownBits was looking at operands 1 and 2
instead.  This can cause CMOV instructions to be incorrectly folded into
BFI if value set by the CMOV is another CMOV, whose known bits are
computed incorrectly.

This patch fixes the issue and adds a test case.

Reviewers: kristof.beyls, jmolloy

Subscribers: llvm-commits, aemerson, srhines, rengolin

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

llvm-svn: 298624

7 years agoRe-land: Make NativeExeSymbol a concrete subclass of NativeRawSymbol [PDB]
Adrian McCarthy [Thu, 23 Mar 2017 16:45:20 +0000 (16:45 +0000)]
Re-land:  Make NativeExeSymbol a concrete subclass of NativeRawSymbol [PDB]

The new test should pass on all platforms now that llvm-pdbdump has the
`-color-output` option.

This moves exe symbol-specific method implementations out of NativeRawSymbol
into a concrete subclass. Also adds implementations for hasCTypes and
hasPrivateSymbols and a simple test to ensure the native reader can access
the summary information for the executable from the PDB.

Original Differential Revision: https://reviews.llvm.org/D31059

llvm-svn: 298623

7 years ago[index] When indexing system headers make sure to report important reference relations
Argyrios Kyrtzidis [Thu, 23 Mar 2017 16:34:47 +0000 (16:34 +0000)]
[index] When indexing system headers make sure to report important reference relations

Even if we exclude plain reference occurrences, we should include relation-based references, like the 'base' one.

rdar://31010737

llvm-svn: 298622

7 years ago[clang-tidy] Fix treating non-space whitespaces in checks list.
Marek Kurdej [Thu, 23 Mar 2017 16:32:06 +0000 (16:32 +0000)]
[clang-tidy] Fix treating non-space whitespaces in checks list.

Summary:
This furtherly improves r295303: [clang-tidy] Ignore spaces between globs in the Checks option.
Trims all whitespaces and not only spaces and correctly computes the offset of the checks list (taking the size before trimming).

Reviewers: alexfh

Reviewed By: alexfh

Subscribers: cfe-commits, JDevlieghere

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

llvm-svn: 298621

7 years ago[LV] Vectorize GEPs
Matthew Simpson [Thu, 23 Mar 2017 16:29:58 +0000 (16:29 +0000)]
[LV] Vectorize GEPs

This patch adds support for vectorizing GEPs. Previously, we only generated
vector GEPs on-demand when creating gather or scatter operations. All GEPs from
the original loop were scalarized by default, and if a pointer was to be stored
to memory, we would have to build up the pointer vector with insertelement
instructions.

With this patch, we will vectorize all GEPs that haven't already been marked
for scalarization.

The patch refines collectLoopScalars to more exactly identify the scalar GEPs.
The function now more closely resembles collectLoopUniforms. And the patch
moves vector GEP creation out of vectorizeMemoryInstruction and into the main
vectorization loop. The vector GEPs needed for gather and scatter operations
will have already been generated before vectoring the memory accesses.

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

llvm-svn: 298620

7 years ago[clang-tidy] Don't use groups in the big regexy filter
Alexander Kornienko [Thu, 23 Mar 2017 16:29:39 +0000 (16:29 +0000)]
[clang-tidy] Don't use groups in the big regexy filter

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

llvm-svn: 298619

7 years agoUpdate the algorithm tests to not use the (deprecated) function binders. No functiona...
Marshall Clow [Thu, 23 Mar 2017 16:13:50 +0000 (16:13 +0000)]
Update the algorithm tests to not use the (deprecated) function binders. No functional change.

llvm-svn: 298618

7 years ago[ScopInfo] Introduce ScopStmt::contains(BB*). NFC.
Michael Kruse [Thu, 23 Mar 2017 16:12:21 +0000 (16:12 +0000)]
[ScopInfo] Introduce ScopStmt::contains(BB*). NFC.

Provide an common way for testing if a statement contains something
for region and block statements. First user is
RegionGenerator::addOperandToPHI.

Suggested-by: Tobias Grosser <tobias@grosser.es>
llvm-svn: 298617

7 years ago[X86][SSE] Extract elements from narrower shuffle masks.
Simon Pilgrim [Thu, 23 Mar 2017 16:09:34 +0000 (16:09 +0000)]
[X86][SSE] Extract elements from narrower shuffle masks.

Add support for widening narrow shuffle masks so we can directly extract from the relevant input vector of the shuffle.

llvm-svn: 298616

7 years ago[LV] Delete unneeded scalar GEP creation code
Matthew Simpson [Thu, 23 Mar 2017 16:07:21 +0000 (16:07 +0000)]
[LV] Delete unneeded scalar GEP creation code

The code for generating scalar base pointers in vectorizeMemoryInstruction is
not needed. We currently scalarize all GEPs and maintain the scalarized values
in VectorLoopValueMap. The GEP cloning in this unneeded code is the same as
that in scalarizeInstruction. The test cases that changed as a result of this
patch changed because we were able to reuse the scalarized GEP that we
previously generated instead of cloning a new one.

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

llvm-svn: 298615

7 years ago[PPC] Add generated tests for all atomic operations
Tim Shen [Thu, 23 Mar 2017 16:02:47 +0000 (16:02 +0000)]
[PPC] Add generated tests for all atomic operations

Summary: Add tests for all atomic operations for powerpc64le, so that all changes can be easily examined.

Reviewers: kbarton, hfinkel, echristo

Subscribers: mehdi_amini, nemanjai, llvm-commits

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

llvm-svn: 298614

7 years agoBypass potential libc's sysconf interceptors
Alex Shlyapnikov [Thu, 23 Mar 2017 15:57:58 +0000 (15:57 +0000)]
Bypass potential libc's sysconf interceptors

Summary:
sysconf(_SC_PAGESIZE) is called very early during sanitizer init and
any instrumented code (sysconf() wrapper/interceptor will likely be
instrumented) calling back to sanitizer before init is done will
most surely crash.

2nd attempt, now with glibc version checks (D31092 was reverted).

Reviewers: eugenis

Subscribers: kubamracek, llvm-commits

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

llvm-svn: 298613

7 years ago[WebAssembly] Fix import type to be signed LEBs
Derek Schuff [Thu, 23 Mar 2017 15:46:47 +0000 (15:46 +0000)]
[WebAssembly] Fix import type to be signed LEBs

This fix is a follow up a previous change with stored
value types as signed integers in memory.

In future, once the yaml<->wasm binary patche lands we
can add test coverage for this kind of thing.

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

Patch by Sam Clegg

llvm-svn: 298612

7 years ago[x86] add memcmp tests, remove run
Sanjay Patel [Thu, 23 Mar 2017 15:38:22 +0000 (15:38 +0000)]
[x86] add memcmp tests, remove run

Add tests for vector lengths that could be handled without a libcall.

There's an explicit test for 'nobuiltin', so there's not much value
in a separate run that checks that same behavior over and over again.

llvm-svn: 298611

7 years agoAdd option to control whether llvm-pdbdump outputs in color
Adrian McCarthy [Thu, 23 Mar 2017 15:28:15 +0000 (15:28 +0000)]
Add option to control whether llvm-pdbdump outputs in color

Adds -color-output option to llvm-pdbdump pretty commands that lets the user
specify whether the output should have color. The default depends on whether
the output is going to a TTY (per prior discussion in
https://reviews.llvm.org/D31246).

This will enable tests that pipe llvm-pdbdump output to FileCheck to work
across platforms without regard to the differences in ANSI codes.

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

llvm-svn: 298610

7 years ago[GlobalISel][X86] Support G_STORE/G_LOAD operation
Igor Breger [Thu, 23 Mar 2017 15:25:57 +0000 (15:25 +0000)]
[GlobalISel][X86] Support G_STORE/G_LOAD operation

Summary:
1. Support pointer type as function argumnet and return value
2. G_STORE/G_LOAD - set legal action for i8/i16/i32/i64/f32/f64/vec128
3. RegisterBank - support typeless operations like G_STORE/G_LOAD, for scalar use GPR bank.
4. Support instruction selection for G_LOAD/G_STORE

Reviewers: zvi, rovka, ab, qcolombet

Reviewed By: rovka

Subscribers: llvm-commits, dberris, kristof.beyls, eladcohen, guyblank

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

llvm-svn: 298609

7 years ago[clang-tidy] Fix diag message for catch-by-value
Alexander Kornienko [Thu, 23 Mar 2017 15:17:44 +0000 (15:17 +0000)]
[clang-tidy] Fix diag message for catch-by-value

Summary:
```
catch (std::exception ex)
{
}
```

Was flagged with "catch handler catches a pointer value".

Reviewers: alexfh, aaron.ballman

Reviewed By: aaron.ballman

Subscribers: cfe-commits, JDevlieghere

Patch by Florian Gross!

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

llvm-svn: 298608

7 years ago[clang-tidy] Catch trivially true statements like a != 1 || a != 3
Alexander Kornienko [Thu, 23 Mar 2017 15:13:54 +0000 (15:13 +0000)]
[clang-tidy] Catch trivially true statements like a != 1 || a != 3

Catch trivially true statements of the form a != 1 || a != 3. Statements like
these are likely errors. They are particularly easy to miss when handling enums:

enum State {
RUNNING,
STOPPED,
STARTING,
ENDING
}

...
if (state != RUNNING || state != STARTING)
...

Patch by Blaise Watson!

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

llvm-svn: 298607

7 years agoPublish RAIIObjectsForParser.h for external usage.
Vassil Vassilev [Thu, 23 Mar 2017 15:11:07 +0000 (15:11 +0000)]
Publish RAIIObjectsForParser.h for external usage.

Some clients (eg the cling interpreter) need to recover their parser from
errors.

Patch by Axel Naumann (D31190)!

llvm-svn: 298606

7 years agoGOMP compatibility: add missing OpenMP4.0 task deps handling code
Paul Osmialowski [Thu, 23 Mar 2017 15:03:17 +0000 (15:03 +0000)]
GOMP compatibility: add missing OpenMP4.0 task deps handling code

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

llvm-svn: 298605

7 years ago[SDAG] Fix zeroExtend assertion error
Nirav Dave [Thu, 23 Mar 2017 15:01:50 +0000 (15:01 +0000)]
[SDAG] Fix zeroExtend assertion error

Move CombineTo preventing deleted node from being returned in
visitZERO_EXTEND.

Fixes PR32284.

Reviewers: RKSimon, bogner

Reviewed By: RKSimon

Subscribers: llvm-commits

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

llvm-svn: 298604

7 years agoDo not polute the source directory.
Vassil Vassilev [Thu, 23 Mar 2017 14:54:34 +0000 (14:54 +0000)]
Do not polute the source directory.

When a python script is run, by default it creates the bytecode file if the directory is writable, and this ‘pollutes’ source folders.

From python's help:
-B Don’t write .py[co] files on import. See also PYTHONDONTWRITEBYTECODE.

Patch by Pere Mato (D30604)!

llvm-svn: 298603

7 years agoDo not set branch weight if the branch weight annotation is present.
Dehao Chen [Thu, 23 Mar 2017 14:43:10 +0000 (14:43 +0000)]
Do not set branch weight if the branch weight annotation is present.

Summary: ThinLTO will annotate the CFG twice. If the branch weight is set by the first annotation, we should not set the branch weight again in the second annotation because the first annotation is more accurate as there is less optimization that could affect debug info accuracy.

Reviewers: tejohnson, davidxl

Reviewed By: tejohnson

Subscribers: mehdi_amini, aprantl, llvm-commits

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

llvm-svn: 298602

7 years ago[libcxx] Improve code generation for vector::clear().
Bruce Mitchener [Thu, 23 Mar 2017 14:39:23 +0000 (14:39 +0000)]
[libcxx] Improve code generation for vector::clear().

Summary:
By manipulating a local variable in the loop, when the loop can
be optimized away (due to no non-trivial destructors), this lets
it be fully optimized away and we modify the __end_ separately.

This results in a substantial improvement in the generated code.

Prior to this change, this would be generated (on x86_64):

    movq    (%rdi), %rdx
    movq    8(%rdi), %rcx
    cmpq    %rdx, %rcx
    je    LBB2_2
    leaq    -12(%rcx), %rax
    subq    %rdx, %rax
    movabsq    $-6148914691236517205, %rdx ## imm = 0xAAAAAAAAAAAAAAAB
    mulq    %rdx
    shrq    $3, %rdx
    notq    %rdx
    leaq    (%rdx,%rdx,2), %rax
    leaq    (%rcx,%rax,4), %rax
    movq    %rax, 8(%rdi)

And after:

    movq    (%rdi), %rax
    movq    %rax, 8(%rdi)

This brings this in line with what other implementations do.

Subscribers: cfe-commits

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

llvm-svn: 298601

7 years agoUse 'REQUIRES: c++98 || c++03 || c++11 || c++14' instead of the deprecated 'REQUIRES...
Marshall Clow [Thu, 23 Mar 2017 14:20:43 +0000 (14:20 +0000)]
Use 'REQUIRES: c++98 || c++03 || c++11 || c++14' instead of the deprecated 'REQUIRES-ANY: c++98, c++03, c++11, c++14'

llvm-svn: 298600

7 years agoX86FixupBWInsts: Minor cleanup. NFC
Zvi Rackover [Thu, 23 Mar 2017 14:08:26 +0000 (14:08 +0000)]
X86FixupBWInsts: Minor cleanup. NFC

Summary: Cleanup some remnants of code from when the X86FixupBWInsts pass did both forward liveness analysis and backward liveness analysis.

Reviewers: MatzeB, myatsina, DavidKreitzer

Reviewed By: MatzeB

Subscribers: llvm-commits

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

llvm-svn: 298599

7 years agoOne more file for the random_shuffle removal
Marshall Clow [Thu, 23 Mar 2017 13:44:06 +0000 (13:44 +0000)]
One more file for the random_shuffle removal

llvm-svn: 298598

7 years agoRemove random_shuffle in C++17. Please use shuffle instead. If you have to, you...
Marshall Clow [Thu, 23 Mar 2017 13:43:37 +0000 (13:43 +0000)]
Remove random_shuffle in C++17.  Please use shuffle instead. If you have to, you cant get it back by defining _LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE before including any libc++ headers.

llvm-svn: 298597

7 years ago[Mips] Emit the correct DINS variant
Strahinja Petrovic [Thu, 23 Mar 2017 13:40:07 +0000 (13:40 +0000)]
[Mips] Emit the correct DINS variant

This patch fixes emitting of correct variant of DINS instruction.

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

llvm-svn: 298596

7 years agoUpdate to isl-0.18-402-ga30c537
Tobias Grosser [Thu, 23 Mar 2017 13:38:24 +0000 (13:38 +0000)]
Update to isl-0.18-402-ga30c537

This is a regular maintenance update.

llvm-svn: 298595