platform/upstream/llvm.git
6 years ago[X86] Use the correct types in some recently added isel patterns.
Craig Topper [Fri, 13 Jul 2018 22:27:53 +0000 (22:27 +0000)]
[X86] Use the correct types in some recently added isel patterns.

These were supposed to be integer types since we are selecting integer instructions.

Found while preparing to remove these patterns for another patch.

llvm-svn: 337057

6 years agoAMDGPU/GlobalISel: Implement select() for 32-bit @llvm.minnun and @llvm.maxnum
Tom Stellard [Fri, 13 Jul 2018 22:16:03 +0000 (22:16 +0000)]
AMDGPU/GlobalISel: Implement select() for 32-bit @llvm.minnun and @llvm.maxnum

Reviewers: arsenm, nhaehnle

Subscribers: kzhuravl, wdng, yaxunl, rovka, kristof.beyls, dstuttard, tpr, llvm-commits, t-tye

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

llvm-svn: 337056

6 years ago[X86][FastISel] Support uitofp with avx512.
Craig Topper [Fri, 13 Jul 2018 22:09:30 +0000 (22:09 +0000)]
[X86][FastISel] Support uitofp with avx512.

llvm-svn: 337055

6 years ago[Polly][isl] Add neutrally-named accessors to isl list elements and sizes
Philip Pfaffe [Fri, 13 Jul 2018 22:05:01 +0000 (22:05 +0000)]
[Polly][isl] Add neutrally-named accessors to isl list elements and sizes

Summary: This could simplify the isl iterator implementation a lot.

Reviewers: grosser, Meinersbur, bollu

Reviewed By: grosser

Subscribers: pollydev, llvm-commits

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

llvm-svn: 337054

6 years ago[LTO] Fix linking with an alias defined using another alias.
Eli Friedman [Fri, 13 Jul 2018 21:58:55 +0000 (21:58 +0000)]
[LTO] Fix linking with an alias defined using another alias.

When we're linking an alias which will be defined later, we neeed to
build a GlobalAlias, or else we'll crash later in
IRLinker::linkGlobalValueBody.

clang sometimes constructs aliases like this for C++ destructors.

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

llvm-svn: 337053

6 years ago[X86] Correct comment of TEST elimination in BSF/TZCNT
Fangrui Song [Fri, 13 Jul 2018 21:40:08 +0000 (21:40 +0000)]
[X86] Correct comment of TEST elimination in BSF/TZCNT

llvm-svn: 337052

6 years ago[ThinLTO] Ensure we always select the same function copy to import
Teresa Johnson [Fri, 13 Jul 2018 21:35:58 +0000 (21:35 +0000)]
[ThinLTO] Ensure we always select the same function copy to import

Clang change to reflect the FunctionsToImportTy type change
in the llvm changes for D48670.

llvm-svn: 337051

6 years ago[ThinLTO] Ensure we always select the same function copy to import
Teresa Johnson [Fri, 13 Jul 2018 21:35:51 +0000 (21:35 +0000)]
[ThinLTO] Ensure we always select the same function copy to import

In order to always import the same copy of a linkonce function,
even when encountering it with different thresholds (a higher one then a
lower one), keep track of the summary we decided to import.
This ensures that the backend only gets a single definition to import
for each GUID, so that it doesn't need to choose one.

Move the largest threshold the GUID was considered for import into the
current module out of the ImportMap (which is part of a larger map
maintained across the whole index), and into a new map just maintained
for the current module we are computing imports for. This saves some
memory since we no longer have the thresholds maintained across the
whole index (and throughout the in-process backends when doing a normal
non-distributed ThinLTO build), at the cost of some additional
information being maintained for each invocation of ComputeImportForModule
(the selected summary pointer for each import).

There is an additional map lookup for each callee being considered for
importing, however, this was able to subsume a map lookup in the
Worklist iteration that invokes computeImportForFunction. We also are
able to avoid calling selectCallee if we already failed to import at the
same or higher threshold.

I compared the run time and peak memory for the SPEC2006 471.omnetpp
benchmark (running in-process ThinLTO backends), as well as for a large
internal benchmark with a distributed ThinLTO build (so just looking at
the thin link time/memory). Across a number of runs with and without
this change there was no significant change in the time and memory.

(I tried a few other variations of the change but they also didn't
improve time or peak memory).

Reviewers: davidxl

Subscribers: mehdi_amini, inglorion, llvm-commits

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

llvm-svn: 337050

6 years ago[Hexagon] Fix hvx-length feature name in testcases
Krzysztof Parzyszek [Fri, 13 Jul 2018 21:32:33 +0000 (21:32 +0000)]
[Hexagon] Fix hvx-length feature name in testcases

llvm-svn: 337049

6 years agoMake BuiltinType constructor private, and befriend ASTContext.
Richard Smith [Fri, 13 Jul 2018 21:29:31 +0000 (21:29 +0000)]
Make BuiltinType constructor private, and befriend ASTContext.

This reflects the fact that only ASTContext should ever create an
instance of BuiltinType, and matches what we do for all the other Type
subclasses.

llvm-svn: 337048

6 years agoUse external layout information to layout bit-fields for MS ABI.
Richard Smith [Fri, 13 Jul 2018 21:07:42 +0000 (21:07 +0000)]
Use external layout information to layout bit-fields for MS ABI.

Patch by Aleksandr Urakov!

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

llvm-svn: 337047

6 years agoAMDGPU/GlobalISel: Implement select() for @llvm.amdgcn.exp
Tom Stellard [Fri, 13 Jul 2018 21:05:14 +0000 (21:05 +0000)]
AMDGPU/GlobalISel: Implement select() for @llvm.amdgcn.exp

Reviewers: arsenm, nhaehnle

Subscribers: kzhuravl, wdng, yaxunl, rovka, kristof.beyls, dstuttard, tpr, t-tye, llvm-commits

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

llvm-svn: 337046

6 years ago[X86][FastISel] Add EVEX support to sitofp handling.
Craig Topper [Fri, 13 Jul 2018 21:03:43 +0000 (21:03 +0000)]
[X86][FastISel] Add EVEX support to sitofp handling.

llvm-svn: 337045

6 years agoFix for Darwin buildbot failure due to r337037
Vlad Tsyrklevich [Fri, 13 Jul 2018 20:56:48 +0000 (20:56 +0000)]
Fix for Darwin buildbot failure due to r337037

Duplicate __get_unsafe_stack_bottom instead of using an alias for
platforms that don't suppport it like Darwin.

llvm-svn: 337044

6 years ago[X86] Try fixing r336768
Fangrui Song [Fri, 13 Jul 2018 20:54:24 +0000 (20:54 +0000)]
[X86] Try fixing r336768

llvm-svn: 337043

6 years ago[NFC][InstCombine] Tests for 'check for [no] signed truncation' pattern
Roman Lebedev [Fri, 13 Jul 2018 20:33:34 +0000 (20:33 +0000)]
[NFC][InstCombine] Tests for 'check for [no] signed truncation' pattern

[[ https://bugs.llvm.org/show_bug.cgi?id=38149 | PR38149 ]]

As discussed in https://reviews.llvm.org/D49179#1158957 and later,
the IR for 'check for [no] signed truncation' pattern can be improved:
https://rise4fun.com/Alive/gBf
^ that pattern will be produced by Implicit Integer Truncation sanitizer,
https://reviews.llvm.org/D48958 https://bugs.llvm.org/show_bug.cgi?id=21530
in signed case, therefore it is probably a good idea to improve it.

The DAGCombine will reverse this transform, see
https://reviews.llvm.org/D49266

llvm-svn: 337042

6 years agoCodeGen: specify alignment + inbounds for automatic variable initialization
JF Bastien [Fri, 13 Jul 2018 20:33:23 +0000 (20:33 +0000)]
CodeGen: specify alignment + inbounds for automatic variable initialization

Summary: Automatic variable initialization was generating default-aligned stores (which are deprecated) instead of using the known alignment from the alloca. Further, they didn't specify inbounds.

Subscribers: dexonsmith, cfe-commits

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

llvm-svn: 337041

6 years ago[X86] Change the rounding mode used when testing the sqrt_round intrinsics.
Craig Topper [Fri, 13 Jul 2018 20:16:38 +0000 (20:16 +0000)]
[X86] Change the rounding mode used when testing the sqrt_round intrinsics.

Using CUR_DIRECTION is not a realistic scenario. That is equivalent to the intrinsic without rounding.

llvm-svn: 337040

6 years agoRevert "[CMake] Pass Clang defaults to runtimes builds"
Petr Hosek [Fri, 13 Jul 2018 20:01:55 +0000 (20:01 +0000)]
Revert "[CMake] Pass Clang defaults to runtimes builds"

This reverts commit r332923 which is no longer needed since its
use has been reverted in r337033.

llvm-svn: 337039

6 years ago[LowerTypeTests] Limit when icall jumptable entries are emitted
Vlad Tsyrklevich [Fri, 13 Jul 2018 19:57:39 +0000 (19:57 +0000)]
[LowerTypeTests] Limit when icall jumptable entries are emitted

Summary:
Currently LowerTypeTests emits jumptable entries for all live external
and address-taken functions; however, we could limit the number of
functions that we emit entries for significantly.

For Cross-DSO CFI, we continue to emit jumptable entries for all
exported definitions.  In the non-Cross-DSO CFI case, we only need to
emit jumptable entries for live functions that are address-taken in live
functions. This ignores exported functions and functions that are only
address taken in dead functions. This change uses ThinLTO summary data
(now emitted for all modules during ThinLTO builds) to determine
address-taken and liveness info.

The logic for emitting jumptable entries is more conservative in the
regular LTO case because we don't have summary data in the case of
monolithic LTO builds; however, once summaries are emitted for all LTO
builds we can unify the Thin/monolithic LTO logic to only use summaries
to determine the liveness of address taking functions.

This change is a partial fix for PR37474. It reduces the build size for
nacl_helper by ~2-3%, the reduction is due to nacl_helper compiling in
lots of unused code and unused functions that are address taken in dead
functions no longer being being considered live due to emitted jumptable
references. The reduction for chromium is ~0.1-0.2%.

Reviewers: pcc, eugenis, javed.absar

Reviewed By: pcc

Subscribers: aheejin, dexonsmith, dschuff, mehdi_amini, eraman, steven_wu, llvm-commits, kcc

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

llvm-svn: 337038

6 years agoSafeStack: Add builtins to read unsafe stack top/bottom
Vlad Tsyrklevich [Fri, 13 Jul 2018 19:48:35 +0000 (19:48 +0000)]
SafeStack: Add builtins to read unsafe stack top/bottom

Summary:
Introduce built-ins to read the unsafe stack top and bottom. The unsafe
stack top is required to implement garbage collection scanning for
Oilpan. Currently there is already a built-in 'get_unsafe_stack_start'
to read the bottom of the unsafe stack, but I chose to duplicate this
API because 'start' is ambiguous (e.g. Oilpan uses WTF::GetStackStart to
read the safe stack top.)

Reviewers: pcc

Reviewed By: pcc

Subscribers: llvm-commits, kcc

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

llvm-svn: 337037

6 years agoPR15730/PR16986 Allow dependently typed vector_size types.
Erich Keane [Fri, 13 Jul 2018 19:46:04 +0000 (19:46 +0000)]
PR15730/PR16986 Allow dependently typed vector_size types.

As listed in the above PRs, vector_size doesn't allow
dependent types/values. This patch introduces a new
DependentVectorType to handle a VectorType that has a dependent
size or type.

In the future, ALL the vector-types should be able to create one
of these to handle dependent types/sizes as well. For example,
DependentSizedExtVectorType could likely be switched to just use
this instead, though that is left as an exercise for the future.

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

llvm-svn: 337036

6 years agoFix the libcxx set, multiset, vector and bitset formatters to work on references.
Jim Ingham [Fri, 13 Jul 2018 19:28:32 +0000 (19:28 +0000)]
Fix the libcxx set, multiset, vector and bitset formatters to work on references.

The synthetic child providers for these classes had a type expression that matched
pointers & references to the type, but the Front End only worked on the actual object.

I fixed this by adding a way for the Synthetic Child FrontEnd provider to request dereference,
and then had these formatters use that mode.

<rdar://problem/40849836>

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

llvm-svn: 337035

6 years agoAdd the new PDBLocationToDWARFExpression.{cpp,h} to the Xcode project.
Jim Ingham [Fri, 13 Jul 2018 19:24:26 +0000 (19:24 +0000)]
Add the new PDBLocationToDWARFExpression.{cpp,h} to the Xcode project.

llvm-svn: 337034

6 years ago[CMake] Don't use CLANG_DEFAULT_* values
Petr Hosek [Fri, 13 Jul 2018 19:16:30 +0000 (19:16 +0000)]
[CMake] Don't use CLANG_DEFAULT_* values

These are not necessarily correct, just because Clang is configured
to use libc++ or compiler-rt as defaults doesn't mean that the host
compiler uses these as defaults as well. A more correct solution
would be to test the host compiler to check what the default actually
is as attempted in D46857.

Part of PR-38025.

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

llvm-svn: 337033

6 years agoAdd includes for CompletionRequest to every file that uses it
Raphael Isemann [Fri, 13 Jul 2018 18:54:55 +0000 (18:54 +0000)]
Add includes for CompletionRequest to every file that uses it

Summary: Should fix the builds (and prevent future builds from failing when people try to reduce includes).

Reviewers: jingham

Reviewed By: jingham

Subscribers: jingham, lldb-commits

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

llvm-svn: 337032

6 years agoReplaced more boilerplate code with CompletionRequest (NFC)
Raphael Isemann [Fri, 13 Jul 2018 18:28:14 +0000 (18:28 +0000)]
Replaced more boilerplate code with CompletionRequest (NFC)

Summary:
As suggested in D48796, this patch replaces even more internal calls that were using the old
completion API style with a single CompletionRequest. In some cases we also pass an option
vector/index, but as we don't always have this information, it currently is not part of the
CompletionRequest class.

The constructor of the CompletionRequest is now also more sensible. You only pass the
user input, cursor position and your list of matches to the request and the rest will be
inferred (using the same code we used before to calculate this). You also have to pass these
match window parameters to it, even though they are unused right now.

The patch shouldn't change any behavior.

Reviewers: jingham

Reviewed By: jingham

Subscribers: lldb-commits

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

llvm-svn: 337031

6 years agoNo longer pass a StringRef to the Python API
Raphael Isemann [Fri, 13 Jul 2018 18:13:46 +0000 (18:13 +0000)]
No longer pass a StringRef to the Python API

Summary:
The refactoring patch for DoExecute missed this case of a variadic function that just silently
accepts a StringRef which it then tries to reinterpret as a C-string.

This should fix the Windows builds.

Reviewers: stella.stamenova

Reviewed By: stella.stamenova

Subscribers: lldb-commits

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

llvm-svn: 337030

6 years agoFix TestAttachDenied on macOS Mojave
Frederic Riss [Fri, 13 Jul 2018 17:45:43 +0000 (17:45 +0000)]
Fix TestAttachDenied on macOS Mojave

TestAttachDenied tries to attach to a process that is ptracing itself and
verifies that we error out. Starting with macOS Mojave, processes need
an entitlement to be able to ptrace. This commit adds the entitlement for
the test binary when building on Darwin.

llvm-svn: 337029

6 years agowrap _LIBCPP_HAS_NO_CXX14_CONSTEXPR in defined(...)
Marshall Clow [Fri, 13 Jul 2018 17:31:36 +0000 (17:31 +0000)]
wrap _LIBCPP_HAS_NO_CXX14_CONSTEXPR in defined(...)

llvm-svn: 337028

6 years agoShot in the dark to fix gcc 4.9 / c++11 build
Marshall Clow [Fri, 13 Jul 2018 17:24:59 +0000 (17:24 +0000)]
Shot in the dark to fix gcc 4.9 / c++11 build

llvm-svn: 337027

6 years ago[dwarfdump] Add pretty printer for accelerator table based on Atom.
Jonas Devlieghere [Fri, 13 Jul 2018 17:21:51 +0000 (17:21 +0000)]
[dwarfdump] Add pretty printer for accelerator table based on Atom.

For instance, When dumping .apple_types, the second atom represents the
DW_TAG. In addition to printing the raw value, we now also pretty print
the value if the ATOM tells us how.

llvm-svn: 337026

6 years ago[llvm-mca][BtVer2] Add tests for dependency breaking instructions.
Andrea Di Biagio [Fri, 13 Jul 2018 16:46:51 +0000 (16:46 +0000)]
[llvm-mca][BtVer2] Add tests for dependency breaking instructions.

llvm-svn: 337024

6 years ago[TableGen] Suppress type validation when parsing pattern fragments
Ulrich Weigand [Fri, 13 Jul 2018 16:42:15 +0000 (16:42 +0000)]
[TableGen] Suppress type validation when parsing pattern fragments

Currently, any attempt to define a PatFrag involving any floating-point
only (or vector only) node causes a hard assertion failure in TableGen
if the current target does not have any floating-point (or vector)
types.

This is annoying if you want to provide convenience fragments in common
code (e.g. include/llvm/Target/TargetSelectionDAG.td) that is parsed on
all platforms, including those that miss such types.

But really, there's no reason not accept this when parsing the fragment
-- of course it would be an error for such a target to actually *use*
such a fragment anywhere, but as long as it doesn't, I think TableGen
shouldn't error out.

The immediate cause of the assertion failure is the test inside the
ValidateOnExit destructor. This patch simply disables that check while
infering types during parsing of pattern fragments (only).

Reviewed By: hfinkel, kparzysz

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

llvm-svn: 337023

6 years agoAMDGPU: Properly handle shader inputs with split arguments
Matt Arsenault [Fri, 13 Jul 2018 16:40:37 +0000 (16:40 +0000)]
AMDGPU: Properly handle shader inputs with split arguments

This needs to refer to arguments by their original argument
index, not the argument split index which depends on what
the type splitting decides to do.

Also avoid increment PSInputNum for each split piece.

llvm-svn: 337022

6 years agoAMDGPU: Fix handling of alignment padding in DAG argument lowering
Matt Arsenault [Fri, 13 Jul 2018 16:40:25 +0000 (16:40 +0000)]
AMDGPU: Fix handling of alignment padding in DAG argument lowering

This was completely broken if there was ever a struct argument, as
this information is thrown away during the argument analysis.

The offsets as passed in to LowerFormalArguments are not useful,
as they partially depend on the legalized result register type,
and they don't consider the alignment in the first place.

Ignore the Ins array, and instead figure out from the raw IR type
what we need to do. This seems to fix the padding computation
if the DAG lowering is forced (and stops breaking arguments
following padded arguments if the arguments were only partially
lowered in the IR)

llvm-svn: 337021

6 years ago[Tablegen] Optimize isSubsetOf() in AsmMatcherEmitter.cpp. NFC
Marcello Maggioni [Fri, 13 Jul 2018 16:36:14 +0000 (16:36 +0000)]
[Tablegen] Optimize isSubsetOf() in AsmMatcherEmitter.cpp. NFC

isSubsetOf() could be very slow if the hierarchy of the RegisterClasses
of the target is very complicated.
This is mainly caused by the fact that isSubset() is called
multiple times over the same SuperClass of a register class
if this ends up being the super class of a register class
from multiple paths.

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

llvm-svn: 337020

6 years agoMake internal class __wrap_iter constexpr when not using libc++'s debugging mode...
Marshall Clow [Fri, 13 Jul 2018 16:35:26 +0000 (16:35 +0000)]
Make internal class __wrap_iter constexpr when not using libc++'s debugging mode. Introduce a new macro _LIBCPP_CONSTEXPR_IF_NODEBUG to mark this.

llvm-svn: 337019

6 years agoRevert "CallGraphSCCPass: iterate over all functions."
Evgeniy Stepanov [Fri, 13 Jul 2018 16:32:31 +0000 (16:32 +0000)]
Revert "CallGraphSCCPass: iterate over all functions."

This reverts commit r336419: use-after-free on CallGraph::FunctionMap elements
due to the use of a stale iterator in CGPassManager::runOnModule.

The iterator may be invalidated if a pass removes a function, ex.:
  llvm::LegacyInlinerBase::inlineCalls
  inlineCallsImpl
  llvm::CallGraph::removeFunctionFromModule

llvm-svn: 337018

6 years agoFix PR34668 - P0704R1 implementation is too permissive
Nicolas Lesser [Fri, 13 Jul 2018 16:27:45 +0000 (16:27 +0000)]
Fix PR34668 - P0704R1 implementation is too permissive

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

Pretty straightforward.

Reviewers: rsmith, Rakete1111

Reviewed By: Rakete1111

Subscribers: Rakete1111, cfe-commits

Tags: #clang

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

llvm-svn: 337017

6 years agoFix a couple of 'unused variable' warnings in a vector test. NFC.
Marshall Clow [Fri, 13 Jul 2018 16:26:16 +0000 (16:26 +0000)]
Fix a couple of 'unused variable' warnings in a vector test. NFC.

llvm-svn: 337016

6 years ago[OpenMP] Initialize data sharing stack for SPMD case
Gheorghe-Teodor Bercea [Fri, 13 Jul 2018 16:18:24 +0000 (16:18 +0000)]
[OpenMP] Initialize data sharing stack for SPMD case

Summary: In the SPMD case, we need to initialize the data sharing and globalization infrastructure. This covers the case when an SPMD region calls a function in a different compilation unit.

Reviewers: ABataev, carlo.bertolli, caomhin

Reviewed By: ABataev

Subscribers: Hahnfeld, jholewinski, guansong, cfe-commits

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

llvm-svn: 337015

6 years ago[NFC][X86][AArch64] Negative tests for 'check for [no] signed truncation' pattern
Roman Lebedev [Fri, 13 Jul 2018 16:14:37 +0000 (16:14 +0000)]
[NFC][X86][AArch64] Negative tests for 'check for [no] signed truncation' pattern

See D49247, D49266

I'm only adding the sane negative tests, and not
adding the one-use tests yet. Also, not adding
negative tests for the second pattern with inverted operands yet,
since it's handling will be added in later differential.

llvm-svn: 337014

6 years ago[OpenMP][libomptarget] Fix data sharing and globalization infrastructure to work...
Gheorghe-Teodor Bercea [Fri, 13 Jul 2018 16:14:22 +0000 (16:14 +0000)]
[OpenMP][libomptarget] Fix data sharing and globalization infrastructure to work in SPMD mode

Summary: This patch fixes the data sharing infrastructure to work for the SPMD and non-SPMD cases.

Reviewers: ABataev, grokos, carlo.bertolli, caomhin

Reviewed By: ABataev, grokos

Subscribers: guansong, openmp-commits

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

llvm-svn: 337013

6 years ago[cfi-verify] Only run AArch64 tests when it is a supported target
Joel Galenson [Fri, 13 Jul 2018 16:09:19 +0000 (16:09 +0000)]
[cfi-verify] Only run AArch64 tests when it is a supported target

This stops the tests I added in r337007 from running when AArch64 is not a supported target.

llvm-svn: 337012

6 years ago[dwarfdump] Pretty print DW_AT_APPLE_runtime_class
Jonas Devlieghere [Fri, 13 Jul 2018 16:06:17 +0000 (16:06 +0000)]
[dwarfdump] Pretty print DW_AT_APPLE_runtime_class

Instead of printing

  DW_AT_APPLE_runtime_class       (0x10)

we now print

  DW_AT_APPLE_runtime_class       (DW_LANG_ObjC)

llvm-svn: 337011

6 years ago[sanitizer] Use -Wl,-z,global on Android
Kostya Kortchinsky [Fri, 13 Jul 2018 15:31:05 +0000 (15:31 +0000)]
[sanitizer] Use -Wl,-z,global on Android

Summary:
Use `-Wl,-z,global` for all Sanitizer shared libraries on
Android. We want them to be in the global group
(https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#changes-to-library-search-order)
to avoid any alloc/dealloc mismatch between the libc allocator & said library.

`audioserver` was one of the binary that exhibited the problem with Scudo,
this seems to fix it.

[edited for accuracy]

Reviewers: eugenis, alekseyshl

Reviewed By: eugenis

Subscribers: kubamracek, srhines, mgorny, delcypher, #sanitizers, llvm-commits

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

llvm-svn: 337010

6 years ago[AArch64] Armv8.4-A: LDAPR & STLR with immediate offset instructions (cont'd)
Sjoerd Meijer [Fri, 13 Jul 2018 15:25:42 +0000 (15:25 +0000)]
[AArch64] Armv8.4-A: LDAPR & STLR with immediate offset instructions (cont'd)

Follow up of rL336913: fix base class description. Thanks to Ahmed Bougacha
for pointing this out.

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

llvm-svn: 337009

6 years ago[PowerPC] Materialize more constants with CR-field set in late peephole
Nemanja Ivanovic [Fri, 13 Jul 2018 15:21:03 +0000 (15:21 +0000)]
[PowerPC] Materialize more constants with CR-field set in late peephole

Revision r322373 fixed a bug in how we materialize constants when the CR-field
needs to be set.

However the fix is overly conservative. It will only do the transform if
AND-ing the input with the new constant produces the same new constant.
This is of course correct, but not necessarily required.

If there are no futher uses of the constant, the constant can be changed.
If there are no uses of the GPR result, the final result of the materialization
isn't important other than it needs to compare to zero correctly (lt, gt, eq).

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

llvm-svn: 337008

6 years ago[cfi-verify] Support AArch64.
Joel Galenson [Fri, 13 Jul 2018 15:19:33 +0000 (15:19 +0000)]
[cfi-verify] Support AArch64.

This patch adds support for AArch64 to cfi-verify.

This required three changes to cfi-verify.  First, it generalizes checking if an instruction is a trap by adding a new isTrap flag to TableGen (and defining it for x86 and AArch64).  Second, the code that ensures that the operand register is not clobbered between the CFI check and the indirect call needs to allow a single dereference (in x86 this happens as part of the jump instruction).  Third, we needed to ensure that return instructions are not counted as indirect branches.  Technically, returns are indirect branches and can be covered by CFI, but LLVM's forward-edge CFI does not protect them, and x86 does not consider them, so we keep that behavior.

In addition, we had to improve AArch64's code to evaluate the branch target of a MCInst to handle calls where the destination is not the first operand (which it often is not).

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

llvm-svn: 337007

6 years ago[json, test] Fix the json.td test - the path to python could contain spaces
Stella Stamenova [Fri, 13 Jul 2018 15:10:53 +0000 (15:10 +0000)]
[json, test] Fix the json.td test - the path to python could contain spaces

Summary: The path to the python executable can contain spaces, so it should be specified with quotes.

Reviewers: asmith, simon_tatham

Reviewed By: simon_tatham

Subscribers: llvm-commits

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

llvm-svn: 337006

6 years ago[NFC] Rename clang::AttributeList to clang::ParsedAttr
Erich Keane [Fri, 13 Jul 2018 15:07:47 +0000 (15:07 +0000)]
[NFC] Rename clang::AttributeList to clang::ParsedAttr

Since The type no longer contains the 'next' item anymore, it isn't a list,
so rename it to ParsedAttr to be more accurate.

llvm-svn: 337005

6 years ago[mips] Add microMIPS case to the tests and regenerate assertions using update_llc_tes...
Simon Atanasyan [Fri, 13 Jul 2018 15:03:24 +0000 (15:03 +0000)]
[mips] Add microMIPS case to the tests and regenerate assertions using update_llc_test_checks.py. NFC

llvm-svn: 337004

6 years ago[llvm-mca] Improve a few debug prints. NFC
Andrea Di Biagio [Fri, 13 Jul 2018 14:55:47 +0000 (14:55 +0000)]
[llvm-mca] Improve a few debug prints. NFC

llvm-svn: 337003

6 years agoAdd parens to silence Wparentheses warning, introduced by 336990
Erich Keane [Fri, 13 Jul 2018 14:43:20 +0000 (14:43 +0000)]
Add parens to silence Wparentheses warning, introduced by 336990

llvm-svn: 337002

6 years ago[NFC] Silence Wparentheses warning in DomTreeUpdater, introduced by 336968
Erich Keane [Fri, 13 Jul 2018 14:41:15 +0000 (14:41 +0000)]
[NFC] Silence Wparentheses warning in DomTreeUpdater, introduced by 336968

llvm-svn: 337001

6 years ago[Analyzer] alpha.unix.cstring.OutOfBounds checker enable/disable fix
Adam Balogh [Fri, 13 Jul 2018 13:44:44 +0000 (13:44 +0000)]
[Analyzer] alpha.unix.cstring.OutOfBounds checker enable/disable fix

It was not possible to disable alpha.unix.cstring.OutOfBounds checker's reports
since unix.Malloc checker always implicitly enabled the filter. Moreover if the
checker was disabled from command line (-analyzer-disable-checker ..) the out
of bounds warnings were nevertheless emitted under different checker names such
as unix.cstring.NullArg, or unix.Malloc.

This patch fixes the case sot that Malloc checker only enables implicitly the
underlying modeling of strcpy, memcpy etc. but not the warning messages that
would have been emmitted by alpha.unix.cstring.OutOfBounds

Patch by: Dániel Krupp

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

llvm-svn: 337000

6 years ago[TableGen] Support multi-alternative pattern fragments
Ulrich Weigand [Fri, 13 Jul 2018 13:18:00 +0000 (13:18 +0000)]
[TableGen] Support multi-alternative pattern fragments

A TableGen instruction record usually contains a DAG pattern that will
describe the SelectionDAG operation that can be implemented by this
instruction. However, there will be cases where several different DAG
patterns can all be implemented by the same instruction. The way to
represent this today is to write additional patterns in the Pattern
(or usually Pat) class that map those extra DAG patterns to the
instruction. This usually also works fine.

However, I've noticed cases where the current setup seems to require
quite a bit of extra (and duplicated) text in the target .td files.
For example, in the SystemZ back-end, there are quite a number of
instructions that can implement an "add-with-overflow" operation.
The same instructions also need to be used to implement just plain
addition (simply ignoring the extra overflow output). The current
solution requires creating extra Pat pattern for every instruction,
duplicating the information about which particular add operands
map best to which particular instruction.

This patch enhances TableGen to support a new PatFrags class, which
can be used to encapsulate multiple alternative patterns that may
all match to the same instruction.  It operates the same way as the
existing PatFrag class, except that it accepts a list of DAG patterns
to match instead of just a single one.  As an example, we can now define
a PatFrags to match either an "add-with-overflow" or a regular add
operation:

  def z_sadd : PatFrags<(ops node:$src1, node:$src2),
                        [(z_saddo node:$src1, node:$src2),
                         (add node:$src1, node:$src2)]>;

and then use this in the add instruction pattern:

  defm AR : BinaryRRAndK<"ar", 0x1A, 0xB9F8, z_sadd, GR32, GR32>;

These SystemZ target changes are implemented here as well.

Note that PatFrag is now defined as a subclass of PatFrags, which
means that some users of internals of PatFrag need to be updated.
(E.g. instead of using PatFrag.Fragment you now need to use
!head(PatFrag.Fragments).)

The implementation is based on the following main ideas:
- InlinePatternFragments may now replace each original pattern
  with several result patterns, not just one.
- parseInstructionPattern delays calling InlinePatternFragments
  and InferAllTypes.  Instead, it extracts a single DAG match
  pattern from the main instruction pattern.
- Processing of the DAG match pattern part of the main instruction
  pattern now shares most code with processing match patterns from
  the Pattern class.
- Direct use of main instruction patterns in InferFromPattern and
  EmitResultInstructionAsOperand is removed; everything now operates
  solely on DAG match patterns.

Reviewed by: hfinkel

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

llvm-svn: 336999

6 years agoDivergenceAnalysis: added debug output
Tim Renouf [Fri, 13 Jul 2018 13:13:30 +0000 (13:13 +0000)]
DivergenceAnalysis: added debug output

Summary:
This commit does two things:

1. modified the existing DivergenceAnalysis::dump() so it dumps the
   whole function with added DIVERGENT: annotations;

2. added code to do that dump if the appropriate -debug-only option is
   on.

Subscribers: llvm-commits

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

Change-Id: Id97b605aab1fc6f5a11a20c58a99bbe8c565bf83
llvm-svn: 336998

6 years ago[clang-tidy] Exception Escape Checker
Adam Balogh [Fri, 13 Jul 2018 13:09:40 +0000 (13:09 +0000)]
[clang-tidy] Exception Escape Checker

Finds functions which may throw an exception directly or indirectly, but they
should not: Destructors, move constructors, move assignment operators, the
main() function, swap() functions, functions marked with throw() or noexcept
and functions given as option to the checker.

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

llvm-svn: 336997

6 years agoAdd a test with multiple BBs on the same line
Marco Castelluccio [Fri, 13 Jul 2018 13:01:43 +0000 (13:01 +0000)]
Add a test with multiple BBs on the same line

Test for https://bugs.llvm.org/show_bug.cgi?id=38065.

llvm-svn: 336996

6 years ago[analyzer][UninitializedObjectChecker] Fixed captured lambda variable name
Kristof Umann [Fri, 13 Jul 2018 12:54:47 +0000 (12:54 +0000)]
[analyzer][UninitializedObjectChecker] Fixed captured lambda variable name

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

llvm-svn: 336995

6 years ago[analyzer][UninitializedObjectChecker] Support for MemberPointerTypes
Kristof Umann [Fri, 13 Jul 2018 12:21:38 +0000 (12:21 +0000)]
[analyzer][UninitializedObjectChecker] Support for MemberPointerTypes

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

llvm-svn: 336994

6 years agoAdjust thread name column width depending on real name length.
Tatyana Krasnukha [Fri, 13 Jul 2018 11:49:28 +0000 (11:49 +0000)]
Adjust thread name column width depending on real name length.

Make 16-byte aligned field instead of truncating a name to 16 byte.

llvm-svn: 336993

6 years ago[clang-tidy] readability-inconsistent-declaration-parameter-name: accept approximate...
Sam McCall [Fri, 13 Jul 2018 11:41:56 +0000 (11:41 +0000)]
[clang-tidy] readability-inconsistent-declaration-parameter-name: accept approximate name matches.

Summary:
The goal is to reduce false positives when the difference is intentional, like:

foo(StringRef name);
foo(StringRef name_ref) {
  string name = cleanup(name_ref);
  ...
}

Or semantically unimportant, like:
foo(StringRef full_name);
foo(StringRef name) { ... }

There are other matching names we won't recognise (e.g. syns vs synonyms) but
this catches many that we see in practice, and gives people a systematic
workaround.

The old behavior is available as a 'Strict' option.

Subscribers: xazax.hun, cfe-commits

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

llvm-svn: 336992

6 years agoAdd abbreviated name for Debugger::EventHandlerThread.
Tatyana Krasnukha [Fri, 13 Jul 2018 11:21:06 +0000 (11:21 +0000)]
Add abbreviated name for Debugger::EventHandlerThread.

On OS's where thread names are limited to 16 bytes, the full name was truncated to not very meaningful "r.event-handler".

llvm-svn: 336991

6 years ago[SLH] Introduce a new pass to do Speculative Load Hardening to mitigate
Chandler Carruth [Fri, 13 Jul 2018 11:13:58 +0000 (11:13 +0000)]
[SLH] Introduce a new pass to do Speculative Load Hardening to mitigate
Spectre variant #1 for x86.

There is a lengthy, detailed RFC thread on llvm-dev which discusses the
high level issues. High level discussion is probably best there.

I've split the design document out of this patch and will land it
separately once I update it to reflect the latest edits and updates to
the Google doc used in the RFC thread.

This patch is really just an initial step. It isn't quite ready for
prime time and is only exposed via debugging flags. It has two major
limitations currently:
1) It only supports x86-64, and only certain ABIs. Many assumptions are
   currently hard-coded and need to be factored out of the code here.
2) It doesn't include any options for more fine-grained control, either
   of which control flow edges are significant or which loads are
   important to be hardened.
3) The code is still quite rough and the testing lighter than I'd like.

However, this is enough for people to begin using. I have had numerous
requests from people to be able to experiment with this patch to
understand the trade-offs it presents and how to use it. We would also
like to encourage work to similar effect in other toolchains.

The ARM folks are actively developing a system based on this for
AArch64. We hope to merge this with their efforts when both are far
enough along. But we also don't want to block making this available on
that effort.

Many thanks to the *numerous* people who helped along the way here. For
this patch in particular, both Eric and Craig did a ton of review to
even have confidence in it as an early, rough cut at this functionality.

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

llvm-svn: 336990

6 years ago[SLPVectorizer] Add initial alternate opcode support for cast instructions. (REAPPLIED-2)
Simon Pilgrim [Fri, 13 Jul 2018 11:09:52 +0000 (11:09 +0000)]
[SLPVectorizer] Add initial alternate opcode support for cast instructions. (REAPPLIED-2)

We currently only support binary instructions in the alternate opcode shuffles.

This patch is an initial attempt at adding cast instructions as well, this raises several issues that we probably want to address as we continue to generalize the alternate mechanism:

1 - Duplication of cost determination - we should probably add scalar/vector costs helper functions and get BoUpSLP::getEntryCost to use them instead of determining costs directly.
2 - Support alternate instructions with the same opcode (e.g. casts with different src types) - alternate vectorization of calls with different IntrinsicIDs will require this.
3 - Allow alternates to be a different instruction type - mixing binary/cast/call etc.
4 - Allow passthrough of unsupported alternate instructions - related to PR30787/D28907 'copyable' elements.

Reapplied with fix to only accept 2 different casts if they come from the same source type (PR38154).

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

llvm-svn: 336989

6 years agoConvert a location information from PDB to a DWARF expression
Jonas Devlieghere [Fri, 13 Jul 2018 10:29:27 +0000 (10:29 +0000)]
Convert a location information from PDB to a DWARF expression

The current version of SymbolFilePDB::ParseVariableForPDBData function
always initializes variables with an empty location. This patch adds the
converter of a location information from PDB to a DWARF expression, so
it becomes possible to watch values of variables of primitive data
types. At the moment the converter supports only Static, TLS, RegRel,
Enregistered and Constant PDB location types, but it seems that it's
enough for most cases. There are still some problems with retrieving
values of variables (e.g. we can't watch variables of composite types),
but they look not relevant to the conversion to DWARF.

Patch by: Aleksandr Urakov

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

llvm-svn: 336988

6 years ago[UpdateTestChecks] Teach the x86 asm parser to skip over the function
Chandler Carruth [Fri, 13 Jul 2018 10:29:23 +0000 (10:29 +0000)]
[UpdateTestChecks] Teach the x86 asm parser to skip over the function
begin label emitted for some routines with personality functions and
such.

Without this, we don't even recognize such functions as appearing in the
output and so don't attach any assertions to them. Happy to tweak this
or improve it if folks w/ deeper knowledge of the asm sequences that
show up here want.

llvm-svn: 336987

6 years ago[x86] Fix a capitalization that I failed to save in my editor before
Chandler Carruth [Fri, 13 Jul 2018 09:48:04 +0000 (09:48 +0000)]
[x86] Fix a capitalization that I failed to save in my editor before
landing the patch. =/

llvm-svn: 336986

6 years ago[x86] Teach the EFLAGS copy lowering to handle much more complex control
Chandler Carruth [Fri, 13 Jul 2018 09:39:10 +0000 (09:39 +0000)]
[x86] Teach the EFLAGS copy lowering to handle much more complex control
flow patterns including forks, merges, and even cyles.

This tries to cover a reasonably comprehensive set of patterns that
still don't require PHIs or PHI placement. The coverage was inspired by
the amazing variety of patterns produced when copy EFLAGS and restoring
it to implement Speculative Load Hardening. Without this patch, we
simply cannot make such complex and invasive changes to x86 instruction
sequences due to EFLAGS.

I've added "just" one test, but this test covers many different
complexities and corner cases of this approach. It is actually more
comprehensive, as far as I can tell, than anything that I have
encountered in the wild on SLH.

Because the test is so complex, I've tried to give somewhat thorough
comments and an ASCII-art diagram of the control flows to make it a bit
easier to read and maintain long-term.

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

llvm-svn: 336985

6 years ago[llvm-mca] Simplify the Pipeline constructor. NFC
Andrea Di Biagio [Fri, 13 Jul 2018 09:31:02 +0000 (09:31 +0000)]
[llvm-mca] Simplify the Pipeline constructor. NFC

llvm-svn: 336984

6 years ago[llvm-mca] Removed unused arguments from methods in class Pipeline. NFC
Andrea Di Biagio [Fri, 13 Jul 2018 09:27:34 +0000 (09:27 +0000)]
[llvm-mca] Removed unused arguments from methods in class Pipeline. NFC

llvm-svn: 336983

6 years ago[AArch64][SVE] Asm: Vector Unpack Low/High instructions.
Sander de Smalen [Fri, 13 Jul 2018 09:25:43 +0000 (09:25 +0000)]
[AArch64][SVE] Asm: Vector Unpack Low/High instructions.

This patch adds support for the following unpack instructions:

- PUNPKLO, PUNPKHI   Unpack elements from low/high half and
                     place into elements of twice their size.

  e.g. punpklo p0.h, p0.b

- UUNPKLO, UUNPKHI   Unpack elements from low/high half and
  SUNPKLO, SUNPKHI   place into elements of twice their size
                     after zero- or sign-extending the values.

  e.g. uunpklo z0.h, z0.b

llvm-svn: 336982

6 years ago[AArch64] Updated bigendian buildvector tests
Simon Pilgrim [Fri, 13 Jul 2018 09:25:32 +0000 (09:25 +0000)]
[AArch64] Updated bigendian buildvector tests

As suggested by @efriedma on D49262 - changed the extractelement to a store to prevent SimplifyDemandedVectorElts from simplifying the build vectors - this keeps the immediate generation which was the point of the tests.

llvm-svn: 336981

6 years ago[ARM] Regenerated arg endian test
Simon Pilgrim [Fri, 13 Jul 2018 09:16:56 +0000 (09:16 +0000)]
[ARM] Regenerated arg endian test

As requested on D49262

llvm-svn: 336980

6 years ago[AArch64][SVE] Asm: Support for insert element (INSR) instructions.
Sander de Smalen [Fri, 13 Jul 2018 08:51:57 +0000 (08:51 +0000)]
[AArch64][SVE] Asm: Support for insert element (INSR) instructions.

Insert general purpose register into shifted vector, e.g.
  insr    z0.s, w0
  insr    z0.d, x0

Insert SIMD&FP scalar register into shifted vector, e.g.
  insr    z0.b, b0
  insr    z0.h, h0
  insr    z0.s, s0
  insr    z0.d, d0

llvm-svn: 336979

6 years ago[LiveDebugValues] Tracking copying value between registers
Petar Jovanovic [Fri, 13 Jul 2018 08:24:26 +0000 (08:24 +0000)]
[LiveDebugValues] Tracking copying value between registers

During the execution of long functions or functions that have a lot of
inlined code it could come to the situation where tracked value could be
transferred from one register to another. The transfer is recognized only if
destination register is a callee saved register and if source register is
killed. We do not salvage caller-saved registers since there is a great
chance that killed register would outlive it.

Patch by Nikola Prica.

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

llvm-svn: 336978

6 years agoRemove `tsan/Darwin/gcd-after-null.mm` test.
Dan Liew [Fri, 13 Jul 2018 07:37:01 +0000 (07:37 +0000)]
Remove `tsan/Darwin/gcd-after-null.mm` test.

Summary:
This test invokes undocumented behaviour that could change in
the future. Given this, it's probably best to just remove the
test.

rdar://problem/42022283

Reviewers: kubamracek

Subscribers: llvm-commits, #sanitizers

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

llvm-svn: 336977

6 years ago[X86] Prefer MOVSS/SD over BLEND under optsize in isel.
Craig Topper [Fri, 13 Jul 2018 06:25:31 +0000 (06:25 +0000)]
[X86] Prefer MOVSS/SD over BLEND under optsize in isel.

Previously we iseled to blend, commuted to another blend, and then commuted back to movss/movsd or blend depending on optsize. Now we do it directly.

llvm-svn: 336976

6 years ago[XRay][compiler-rt] Add PID field to llvm-xray tool and add PID metadata record entry...
Dean Michael Berris [Fri, 13 Jul 2018 05:38:22 +0000 (05:38 +0000)]
[XRay][compiler-rt] Add PID field to llvm-xray tool and add PID metadata record entry in FDR mode

Summary:
llvm-xray changes:
- account-mode - process-id  {...} shows after thread-id
- convert-mode - process {...} shows after thread
- parses FDR and basic mode pid entries
- Checks version number for FDR log parsing.

Basic logging changes:
- Update header version from 2 -> 3

FDR logging changes:
- Update header version from 2 -> 3
- in writeBufferPreamble, there is an additional PID Metadata record (after thread id record and tsc record)

Test cases changes:
- fdr-mode.cc, fdr-single-thread.cc, fdr-thread-order.cc modified to catch process id output in the log.

Reviewers: dberris

Reviewed By: dberris

Subscribers: hiraditya, llvm-commits, #sanitizers

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

llvm-svn: 336974

6 years ago[X86] Remove isel patterns that turns packed add/sub/mul/div+movss/sd into scalar...
Craig Topper [Fri, 13 Jul 2018 04:50:39 +0000 (04:50 +0000)]
[X86] Remove isel patterns that turns packed add/sub/mul/div+movss/sd into scalar intrinsic instructions.

This is not an optimization we should be doing in isel. This is more suitable for a DAG combine.

My main concern is a future time when we support more FPENV. Changing a packed op to a scalar op could cause us to miss some exceptions that should have occured if we had done a packed op. A DAG combine would be better able to manage this.

llvm-svn: 336971

6 years ago[XRay][compiler-rt] Profiling Mode: Flush logs on exit
Dean Michael Berris [Fri, 13 Jul 2018 04:04:18 +0000 (04:04 +0000)]
[XRay][compiler-rt] Profiling Mode: Flush logs on exit

Summary:
This change adds support for writing out profiles at program exit.

Depends on D48653.

Reviewers: kpw, eizan

Reviewed By: kpw

Subscribers: llvm-commits

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

llvm-svn: 336969

6 years ago[DomTreeUpdater] Ignore updates when both DT and PDT are nullptrs
Chijun Sima [Fri, 13 Jul 2018 04:02:13 +0000 (04:02 +0000)]
[DomTreeUpdater] Ignore updates when both DT and PDT are nullptrs

Summary:
Previously, when both DT and PDT are nullptrs and the UpdateStrategy is Lazy, DomTreeUpdater still pends updates inside.
After this patch, DomTreeUpdater will ignore all updates from(`applyUpdates()/insertEdge*()/deleteEdge*()`) in this case. (call `delBB()` still pends BasicBlock deletion until a flush event according to the doc).
The behavior of DomTreeUpdater previously documented won't change after the patch.

Reviewers: dmgreen, davide, kuhar, brzycki, grosser

Reviewed By: kuhar

Subscribers: llvm-commits

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

llvm-svn: 336968

6 years ago[FileCheck] Implement -v and -vv for tracing matches
Joel E. Denny [Fri, 13 Jul 2018 03:08:23 +0000 (03:08 +0000)]
[FileCheck] Implement -v and -vv for tracing matches

-v prints all directive pattern matches.

-vv additionally prints info that might be noise to users but that can
be helpful to FileCheck developers.

To maximize code reuse and to make diagnostics more consistent, this
patch also adjusts and extends some of the existing diagnostics.
CHECK-NOT failures now report variables uses.  Many more diagnostics
now report the check prefix and kind of directive.

Reviewed By: probinson

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

llvm-svn: 336967

6 years ago[fuzzer] [tests] Increase the number of iterations for three-bytes.test
George Karpenkov [Fri, 13 Jul 2018 01:21:50 +0000 (01:21 +0000)]
[fuzzer] [tests] Increase the number of iterations for three-bytes.test

The test is flaky otherwise on some of our macOS machines in the test fleet.

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

llvm-svn: 336966

6 years ago[InstCombine] return when SimplifyAssociativeOrCommutative makes a change
Sanjay Patel [Fri, 13 Jul 2018 01:18:07 +0000 (01:18 +0000)]
[InstCombine] return when SimplifyAssociativeOrCommutative makes a change

This bug was created by rL335258 because we used to always call instsimplify
after trying the associative folds. After that change it became possible
for subsequent folds to encounter unsimplified code (and potentially assert
because of it).

Instead of carrying changed state through instcombine, we can just return
immediately. This allows instsimplify to run, so we can continue assuming
that easy folds have already occurred.

llvm-svn: 336965

6 years agoCodeGen: Remove pipeline dependencies on StackProtector; NFC
Matthias Braun [Fri, 13 Jul 2018 00:08:38 +0000 (00:08 +0000)]
CodeGen: Remove pipeline dependencies on StackProtector; NFC

This re-applies r336929 with a fix to accomodate for the Mips target
scheduling multiple SelectionDAG instances into the pass pipeline.

PrologEpilogInserter and StackColoring depend on the StackProtector analysis
being alive from the point it is run until PEI, which requires that they are all
scheduled in the same FunctionPassManager. Inserting a (machine) ModulePass
between StackProtector and PEI results in these passes being in separate
FunctionPassManagers and the StackProtector is not available for PEI.

PEI and StackColoring don't use much information from the StackProtector pass,
so transfering the required information to MachineFrameInfo is cleaner than
keeping the StackProtector pass around. This commit moves the SSP layout
information to MFI instead of keeping it in the pass.

This patch set (D37580, D37581, D37582, D37583, D37584, D37585, D37586, D37587)
is a first draft of the pagerando implementation described in
http://lists.llvm.org/pipermail/llvm-dev/2017-June/113794.html.

Patch by Stephen Crane <sjc@immunant.com>

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

llvm-svn: 336964

6 years agoSimplify recursive launder.invariant.group and strip
Piotr Padlewski [Thu, 12 Jul 2018 23:55:20 +0000 (23:55 +0000)]
Simplify recursive launder.invariant.group and strip

Summary:
This patch is crucial for proving equality laundered/stripped
pointers. eg:

  bool foo(A *a) {
    return a == std::launder(a);
  }

Clang with -fstrict-vtable-pointers will emit something like:

    define dso_local zeroext i1 @_Z3fooP1A(%struct.A* %a) {
    entry:
      %c = bitcast %struct.A* %a to i8*
      %call = tail call i8* @llvm.launder.invariant.group.p0i8(i8* %c)
      %0 = bitcast %struct.A* %a to i8*
      %1 = tail call i8* @llvm.strip.invariant.group.p0i8(i8* %0)
      %2 = tail call i8* @llvm.strip.invariant.group.p0i8(i8* %call)
      %cmp = icmp eq i8* %1, %2
      ret i1 %cmp
    }

and because %2 can be replaced with @llvm.strip.invariant.group(%0)
and that %2 and %1 will produce the same value (because strip is readnone)
we can replace compare with true.

Reviewers: rsmith, hfinkel, majnemer, amharc, kuhar

Subscribers: llvm-commits, hiraditya

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

llvm-svn: 336963

6 years agoPR38136: improve handling of template argument deduction of non-trailing
Richard Smith [Thu, 12 Jul 2018 23:32:39 +0000 (23:32 +0000)]
PR38136: improve handling of template argument deduction of non-trailing
function parameter packs.

This makes our handling of non-trailing function parameter packs
consistent between the case of deduction at the top level in a function
call and other cases where deduction encounters a non-trailing function
parameter pack.

Instead of treating a non-trailing pack and all later parameters as
being non-deduced, we treat a non-trailing pack as exactly matching
any explicitly-specified template arguments (or being an empty pack
if there are no such arguments). This corresponds to the "never deduced"
rule in [temp.deduct.call]p1, but generalized to all deduction contexts.

Non-trailing template argument packs still result in the entire
template argument list being treated as non-deduced, as specified in
[temp.deduct.type]p9.

llvm-svn: 336962

6 years ago[llvm-mca] Constify SourceMgr::hasNext. NFC.
Matt Davis [Thu, 12 Jul 2018 23:19:30 +0000 (23:19 +0000)]
[llvm-mca] Constify SourceMgr::hasNext.  NFC.

llvm-svn: 336961

6 years ago[lldbsuite] The test inside TestOverloadedFunctions.py has the wrong class name
Stella Stamenova [Thu, 12 Jul 2018 23:02:33 +0000 (23:02 +0000)]
[lldbsuite] The test inside TestOverloadedFunctions.py has the wrong class name

Summary: It looks like the test file was copied from TestCPPStaticMethods.py because they have the same name. This means that the two tests will try to write to the same output files and will either overwrite each other's output or occasionally cause failures because they can't both access the same file.

Reviewers: asmith, zturner

Reviewed By: zturner

Subscribers: llvm-commits

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

llvm-svn: 336960

6 years ago[llvm-mca] Add cycleBegin/cycleEnd callbacks to mca::Stage.
Matt Davis [Thu, 12 Jul 2018 22:59:53 +0000 (22:59 +0000)]
[llvm-mca] Add cycleBegin/cycleEnd callbacks to mca::Stage.

Summary:
This patch  clears up some of the semantics within the Stage class.  Now, preExecute
can be called multiple times per simulated cycle.  Previously preExecute was
only called once per cycle, and postExecute could have been called multiple
times.

Now, cycleStart/cycleEnd are called only once per simulated cycle.
preExecute/postExecute can be called multiple times per cycle.  This
occurs because multiple execution events can occur during a single cycle.

When stages are executed (Pipeline::runCycle), the postExecute hook will
be called only if all Stages return a success from their 'execute' callback.

Reviewers: andreadb, courbet, RKSimon

Reviewed By: andreadb

Subscribers: tschuett, gbedwell, llvm-commits

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

llvm-svn: 336959

6 years ago[X86] Regenerate checks in sse-scalar-fp-arith.ll.
Craig Topper [Thu, 12 Jul 2018 22:59:03 +0000 (22:59 +0000)]
[X86] Regenerate checks in sse-scalar-fp-arith.ll.

llvm-svn: 336958

6 years ago[InstCombine] Simplify isKnownNegation
Fangrui Song [Thu, 12 Jul 2018 22:56:23 +0000 (22:56 +0000)]
[InstCombine] Simplify isKnownNegation

llvm-svn: 336957

6 years agoRemove incorrect thread-pc-values clearing
Jason Molenda [Thu, 12 Jul 2018 22:45:41 +0000 (22:45 +0000)]
Remove incorrect thread-pc-values clearing
from ProcessGDBRemote::UpdateThreadIDsFromStopReplyThreadsValue.

Patch by Venkata Ramanaiah.

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

llvm-svn: 336956

6 years agoGet rid of the C-string parameter in DoExecute
Raphael Isemann [Thu, 12 Jul 2018 22:28:52 +0000 (22:28 +0000)]
Get rid of the C-string parameter in DoExecute

Summary:
This patch gets rid of the C-string parameter in the RawCommandObject::DoExecute function,
making the code simpler and less memory unsafe.

There seems to be a assumption in some command objects that this parameter could be a nullptr,
but from what I can see the rest of the API doesn't actually allow this (and other command
objects and related code pieces dereference this parameter without any checks).

Especially CommandObjectRegexCommand has error handling code for a nullptr that is now gone.

Reviewers: davide, jingham, teemperor

Reviewed By: teemperor

Subscribers: jingham, lldb-commits

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

llvm-svn: 336955

6 years ago[X86] Add AVX512 equivalents of some isel patterns so we get EVEX instructions.
Craig Topper [Thu, 12 Jul 2018 22:14:10 +0000 (22:14 +0000)]
[X86] Add AVX512 equivalents of some isel patterns so we get EVEX instructions.

These are the patterns for matching fceil, ffloor, and sqrt to intrinsic instructions if they have a MOVSS/SD.

llvm-svn: 336954

6 years agoRevert r336950 and r336951 "[X86] Add AVX512 equivalents of some isel patterns so...
Craig Topper [Thu, 12 Jul 2018 21:58:03 +0000 (21:58 +0000)]
Revert r336950 and r336951 "[X86] Add AVX512 equivalents of some isel patterns so we get EVEX instructions." and "foo"

One of them had a bad title and they should have been squashed.

llvm-svn: 336953