platform/upstream/llvm.git
4 years agoRevert "Driver: Don't look for libc++ headers in the install directory on Android."
David Zarzycki [Sun, 8 Dec 2019 14:41:46 +0000 (16:41 +0200)]
Revert "Driver: Don't look for libc++ headers in the install directory on Android."

This reverts commit 198fbcb817492ff45946e3f7517de15e8cdf0607.

This breaks Fedora 31.

4 years ago[llvm-dwarfdump][Statistics] Unify coverage statistic computation
Kristina Bessonova [Tue, 19 Nov 2019 10:28:21 +0000 (13:28 +0300)]
[llvm-dwarfdump][Statistics] Unify coverage statistic computation

Summary:
The patch removes OffsetToFirstDefinition in the 'scope bytes total'
statistic computation. Thus it unifies the way the scope and the coverage
buckets are computed. The rationals behind that are the following:

1. OffsetToFirstDefinition was used to calculate the variable's life range.
However, there is no simple way to do it accurately, so the scope calculated
this way might be misleading. See D69027 for more details on the subject.
2. Both 'scope bytes total' and coverage buckets seem to be intended
to represent the same data in different ways. Otherwise, the statistics
might be controversial and confusing.

Note that the approach gives up a thorough evaluation of debug information
completeness (i.e. coverage buckets by themselves doesn't tell how good
the debug information is). Only changes in coverage over time make
a 'physical' sense.

Reviewers: djtodoro, aprantl, vsk, dblaikie, avl

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[ARM] Attempt to use whole register vmovs for MVE shuffles.
David Green [Tue, 26 Nov 2019 16:51:02 +0000 (16:51 +0000)]
[ARM] Attempt to use whole register vmovs for MVE shuffles.

MVE doesn't have the range of shuffle instructions available in Neon. We
also cannot use the trick of cutting a difficult vector shuffle in half
to simplify things. Instead we need to be more careful about how we
lower shuffles.

This patch adds an extra combine that attempts to find "whole lane"
vmovs when lowering shuffles of smaller types. This helps us make some
shuffles a lot simpler, generating single lane movs for the parts that
can make use of it, falling back to the original shuffle for the rest.

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

4 years ago[ARM] Disable VLD4 under MVE
David Green [Sun, 8 Dec 2019 09:58:03 +0000 (09:58 +0000)]
[ARM] Disable VLD4 under MVE

Alas, using half the available vector registers in a single instruction
is just too much for the register allocator to handle. The mve-vldst4.ll
test here fails when these instructions are enabled at present. This
patch disables the generation of VLD4 and VST4 by adding a
mve-max-interleave-factor option, which we currently default to 2.

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

4 years ago[clangd] Navigation from definition of template specialization to primary template
Nathan Ridge [Thu, 5 Dec 2019 21:29:59 +0000 (16:29 -0500)]
[clangd] Navigation from definition of template specialization to primary template

Fixes https://github.com/clangd/clangd/issues/212.

Reviewers: sammccall

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

Tags: #clang

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

4 years ago[LV] Pick correct BB as insert point when fixing PHI for FORs.
Florian Hahn [Sat, 7 Dec 2019 17:29:07 +0000 (17:29 +0000)]
[LV] Pick correct BB as insert point when fixing PHI for FORs.

Currently we fail to pick the right insertion point when
PreviousLastPart of a first-order-recurrence is a PHI node not in the
LoopVectorBody. This can happen when PreviousLastPart is produce in a
predicated block. In that case, we should pick the insertion point in
the BB the PHI is in.

Fixes PR44020.

Reviewers: hsaito, fhahn, Ayal, dorit

Reviewed By: Ayal

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

4 years agoSymbol: use elaborated types for `DataExtractor`
Saleem Abdulrasool [Sat, 7 Dec 2019 19:17:20 +0000 (11:17 -0800)]
Symbol: use elaborated types for `DataExtractor`

Use type elaborated spellings for the parameter to avoid the ambiguity
between `llvm` and `lldb_private` names.  This is needed for building
with Visual Studio.

4 years ago[SystemZ] Fix build bot failures
Ulrich Weigand [Sat, 7 Dec 2019 18:37:16 +0000 (19:37 +0100)]
[SystemZ] Fix build bot failures

My patch 9db13b5a7d43096a9ab5f7cef6e1b7e2dc9c9c63 seems to have
caused some build bots to fail due to warnings that appear only
when using -Wcovered-switch-default.

This patch is an attempt to fix this by trying to avoid both the warning
"default label in switch which covers all enumeration values"
for the inner switch statements and at the same time the warning
"this statement may fall through"
for the outer switch statement in getVectorComparison
(SystemZISelLowering.cpp).

4 years agoOptionally exclude bitfield definitions from magic numbers check
Florin Iucha [Sat, 7 Dec 2019 17:33:10 +0000 (12:33 -0500)]
Optionally exclude bitfield definitions from magic numbers check

Adds the IgnoreBitFieldsWidths option to readability-magic-numbers.

4 years ago[SimplifyCFG] Account for N being null.
Florian Hahn [Sat, 7 Dec 2019 17:22:14 +0000 (17:22 +0000)]
[SimplifyCFG] Account for N being null.

Fixes a crash, e.g.
  http://lab.llvm.org:8011/builders/clang-with-lto-ubuntu/builds/15119/

4 years ago[BPF] Support weak global variables for BTF
Yonghong Song [Sat, 7 Dec 2019 07:00:41 +0000 (23:00 -0800)]
[BPF] Support weak global variables for BTF

Generate types for global variables with "weak" attribute.
Keep allocation scope the same for both weak and non-weak
globals as ELF symbol table can determine whether a global
symbol is weak or not.

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

4 years ago[SimplifyCFG] Handle AssumptionCache being null.
Rodrigo Caetano Rocha [Sat, 7 Dec 2019 16:47:00 +0000 (16:47 +0000)]
[SimplifyCFG] Handle AssumptionCache being null.

AssumptionCache can be null in SimplifyCFGOptions. However, FoldCondBranchOnPHI() was not properly handling that when passing a null AssumptionCache to simplifyCFG.

Patch by Rodrigo Caetano Rocha <rcor.cs@gmail.com>

Reviewers: fhahn, lebedev.ri, spatel

Reviewed By: spatel

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

4 years ago[OpenMP] Require trivially copyable type for mapping
Jonas Hahnfeld [Sat, 7 Dec 2019 12:31:46 +0000 (13:31 +0100)]
[OpenMP] Require trivially copyable type for mapping

A trivially copyable type provides a trivial copy constructor and a trivial
copy assignment operator. This is enough for the runtime to memcpy the data
to the device. Additionally there must be no virtual functions or virtual
base classes and the destructor is guaranteed to be trivial, ie performs
no action.
The runtime does not require trivial default constructors because on alloc
the memory is undefined. Thus, weaken the warning to be only issued if the
mapped type is not trivially copyable.

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

4 years ago[FPEnv] Constrained FCmp intrinsics
Ulrich Weigand [Fri, 6 Dec 2019 10:30:04 +0000 (11:30 +0100)]
[FPEnv] Constrained FCmp intrinsics

This adds support for constrained floating-point comparison intrinsics.

Specifically, we add:

      declare <ty2>
      @llvm.experimental.constrained.fcmp(<type> <op1>, <type> <op2>,
                                          metadata <condition code>,
                                          metadata <exception behavior>)
      declare <ty2>
      @llvm.experimental.constrained.fcmps(<type> <op1>, <type> <op2>,
                                           metadata <condition code>,
                                           metadata <exception behavior>)

The first variant implements an IEEE "quiet" comparison (i.e. we only
get an invalid FP exception if either argument is a SNaN), while the
second variant implements an IEEE "signaling" comparison (i.e. we get
an invalid FP exception if either argument is any NaN).

The condition code is implemented as a metadata string.  The same set
of predicates as for the fcmp instruction is supported (except for the
"true" and "false" predicates).

These new intrinsics are mapped by SelectionDAG codegen onto two new
ISD opcodes, ISD::STRICT_FSETCC and ISD::STRICT_FSETCCS, again
representing quiet vs. signaling comparison operations.  Otherwise
those nodes look like SETCC nodes, with an additional chain argument
and result as usual for strict FP nodes.  The patch includes support
for the common legalization operations for those nodes.

The patch also includes full SystemZ back-end support for the new
ISD nodes, mapping them to all available SystemZ instruction to
fully implement strict semantics (scalar and vector).

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

4 years agogn build: Merge e60b36cf92e
LLVM GN Syncbot [Sat, 7 Dec 2019 08:57:51 +0000 (08:57 +0000)]
gn build: Merge e60b36cf92e

4 years ago[VPlan] Rename VPlanHCFGTransforms to VPlanTransforms (NFC).
Florian Hahn [Sat, 7 Dec 2019 08:52:36 +0000 (08:52 +0000)]
[VPlan] Rename VPlanHCFGTransforms to VPlanTransforms (NFC).

The file is intended to gather various VPlan transformations, not only
CFG related transforms. Actually, the only transformation there is not
CFG related.

Reviewers: Ayal, gilr, hsaito, rengolin

Reviewed By: gilr

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

4 years ago[PowerPC] Fix MI peephole optimization for splats
Kai Luo [Sat, 7 Dec 2019 06:43:10 +0000 (14:43 +0800)]
[PowerPC] Fix MI peephole optimization for splats

Summary:
This patch fixes an issue where the PPC MI peephole optimization pass incorrectly remove a vector swap.

Specifically, the pass can combine a splat/swap to a splat/copy. It uses `TargetRegisterInfo::lookThruCopyLike` to determine that the operands to the splat are the same. However, the current logic only compares the operands based on register numbers. In the case where the splat operands are ultimately feed from the same physical register, the pass can incorrectly remove a swap if the feed register for one of the operands has been clobbered.

This patch adds a check to ensure that the registers feeding are both virtual registers or the operands to the splat or swap are both the same register.

Here is an example in pseudo-MIR of what happens in the test cased added in this patch:

Before PPC MI peephole optimization:
```
%arg = XVADDDP %0, %1

$f1 = COPY %arg.sub_64
call double rint(double)
%res.first = COPY $f1
%vec.res.first = SUBREG_TO_REG 1, %res.first, %subreg.sub_64

%arg.swapped = XXPERMDI %arg, %arg, 2
$f1 = COPY %arg.swapped.sub_64
call double rint(double)
%res.second = COPY $f1

%vec.res.second = SUBREG_TO_REG 1, %res.second, %subreg.sub_64
%vec.res.splat = XXPERMDI %vec.res.first, %vec.res.second, 0
%vec.res = XXPERMDI %vec.res.splat, %vec.res.splat, 2
; %vec.res == [ %vec.res.second[0], %vec.res.first[0] ]
```

After optimization:
```
; ...
%vec.res.splat = XXPERMDI %vec.res.first, %vec.res.second, 0
; lookThruCopyLike(%vec.res.first) == lookThruCopyLike(%vec.res.second) == $f1
; so the pass replaces the swap with a copy:
%vec.res = COPY %vec.res.splat
; %vec.res == [ %vec.res.first[0], %vec.res.second[0] ]
```

As best as I can tell, this has occurred since r288152, which added support for lowering certain vector operations to direct moves in the form of a splat.

Committed for vddvss (Colin Samples). Thanks Colin for the patch!
Differential Revision: https://reviews.llvm.org/D69497

4 years agoexport.sh: Fetch sources from GitHub instead of SVN
Tom Stellard [Wed, 27 Nov 2019 19:44:20 +0000 (19:44 +0000)]
export.sh: Fetch sources from GitHub instead of SVN

Reviewers: hansw, jdoerfert

Subscribers: sylvestre.ledru, mgorny, hans, llvm-commits

Tags: #llvm

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

4 years agoDriver: Don't look for libc++ headers in the install directory on Android.
Peter Collingbourne [Fri, 6 Dec 2019 23:54:47 +0000 (15:54 -0800)]
Driver: Don't look for libc++ headers in the install directory on Android.

The NDK uses a separate set of libc++ headers in the sysroot. Any headers
in the installation directory are not going to work on Android, not least
because they use a different name for the inline namespace (std::__1 instead
of std::__ndk1).

This effectively makes it impossible to produce a single toolchain that is
capable of targeting both Android and another platform that expects libc++
headers to be installed in the installation directory, such as Mac.

In order to allow this scenario to work, stop looking for headers in the
install directory on Android.

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

4 years ago[AArch64][GlobalISel] Add missing default statement to a switch in the selector.
Amara Emerson [Sat, 7 Dec 2019 01:43:27 +0000 (17:43 -0800)]
[AArch64][GlobalISel] Add missing default statement to a switch in the selector.

4 years agoMove variable only used in an assert into the assert itself.
Sterling Augustine [Sat, 7 Dec 2019 01:09:19 +0000 (17:09 -0800)]
Move variable only used in an assert into the assert itself.

This prevents unused variable warnings from breaking the build.

4 years ago[c++20] Determine whether a defaulted comparison should be deleted or
Richard Smith [Wed, 6 Nov 2019 20:03:12 +0000 (12:03 -0800)]
[c++20] Determine whether a defaulted comparison should be deleted or
constexpr.

4 years ago[AArch64][GlobalISel] Add support for selection of vector G_SHL with immediates.
Amara Emerson [Fri, 6 Dec 2019 21:42:13 +0000 (13:42 -0800)]
[AArch64][GlobalISel] Add support for selection of vector G_SHL with immediates.

Only implemented for the type combinations already supported for G_SHL.

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

4 years ago[lldb/Reproducer] Disable test on Windows to unblock the bot.
Jonas Devlieghere [Sat, 7 Dec 2019 00:16:51 +0000 (16:16 -0800)]
[lldb/Reproducer] Disable test on Windows to unblock the bot.

http://lab.llvm.org:8011/builders/lldb-x64-windows-ninja

4 years agoAdd matchDynamic convenience functions
Stephen Kelly [Fri, 6 Dec 2019 23:50:07 +0000 (23:50 +0000)]
Add matchDynamic convenience functions

Summary: These correspond to the existing match() free functions.

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

4 years agogn build: Change scudo's list of supported platforms to a whitelist.
Peter Collingbourne [Fri, 6 Dec 2019 18:21:22 +0000 (10:21 -0800)]
gn build: Change scudo's list of supported platforms to a whitelist.

Scudo only supports building for android/linux/fuchsia, so require target_os to
be one of linux/fuchsia to do a stage2_unix scudo build. Android is already
covered by the stage2_android* toolchains below.

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

4 years agoRevert "[Sema][X86] Consider target attribute into the checks in validateOutputSize...
Reid Kleckner [Fri, 6 Dec 2019 23:42:14 +0000 (15:42 -0800)]
Revert "[Sema][X86] Consider target attribute into the checks in validateOutputSize and validateInputSize."

This reverts commit e1578fd2b79fe5af5f80c0c166a8abd0f816c022.

It introduces a dependency on Attr.h which I am removing from
ASTContext.h.

4 years agoUse ASTDumper to dump the AST from clang-query
Stephen Kelly [Fri, 6 Dec 2019 23:26:59 +0000 (23:26 +0000)]
Use ASTDumper to dump the AST from clang-query

Summary:
This way, the output is not limited by the various API differences
between the dump() member functions.  For example, all dumps are now in
color, while that used to be the case only for Decls and Stmts, but not
Types.

Additionally, while DynTypedNode::dump (which was used up to now) was
limited to dumping only Decls, Stmts and Types, this makes clang-query
support everything ASTNodeTraverser supports.

Reviewers: aaron.ballman

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[Sema][X86] Consider target attribute into the checks in validateOutputSize and valid...
Craig Topper [Fri, 6 Dec 2019 23:08:32 +0000 (15:08 -0800)]
[Sema][X86] Consider target attribute into the checks in validateOutputSize and validateInputSize.

The validateOutputSize and validateInputSize need to check whether
AVX or AVX512 are enabled. But this can be affected by the
target attribute so we need to factor that in.

This patch copies some of the code from CodeGen to create an
appropriate feature map that we can pass to the function. Probably
need some refactoring here to share more code with Codegen. Is
there a good place to do that? Also need to support the cpu_specific
attribute as well.

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

4 years agoRemove Expr.h include from ASTContext.h, NFC
Reid Kleckner [Sat, 16 Nov 2019 01:31:55 +0000 (17:31 -0800)]
Remove Expr.h include from ASTContext.h, NFC

ASTContext.h is popular, prune its includes. Expr.h brings in Attr.h,
which is also expensive.

Move BlockVarCopyInit to Expr.h to accomplish this.

4 years ago[CommandLine] Add callbacks to Options
Don Hinton [Fri, 6 Dec 2019 22:40:21 +0000 (14:40 -0800)]
[CommandLine] Add callbacks to Options

Summary:
Add a new cl::callback attribute to Option.

This attribute specifies a callback function that is called when
an option is seen, and can be used to set other options, as in
option A implies option B.  If the option is a `cl::list`, and
`cl::CommaSeparated` is also specified, the callback will fire
once for each value.  This could be used to validate combinations
or selectively set other options.

Reviewers: beanz, thomasfinch, MaskRay, thopre, serge-sans-paille

Reviewed By: beanz

Subscribers: llvm-commits

Tags: #llvm

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

4 years agoMake it possible control matcher traversal kind with ASTContext
Stephen Kelly [Sun, 12 May 2019 20:09:32 +0000 (21:09 +0100)]
Make it possible control matcher traversal kind with ASTContext

Summary:
This will eventually allow traversal of an AST while ignoring invisible
AST nodes.  Currently it depends on the available enum values for
TraversalKinds.  That can be extended to ignore all invisible nodes in
the future.

Reviewers: klimek, aaron.ballman

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[WebAssebmly][MC] Support .import_name/.import_field asm directives
Sam Clegg [Sun, 1 Dec 2019 18:49:03 +0000 (10:49 -0800)]
[WebAssebmly][MC] Support .import_name/.import_field asm directives

Convert the MC test to use asm rather than bitcode.

This is a precursor to https://reviews.llvm.org/D70520.

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

4 years ago[MC] Rewrite tablegen for printInstrAlias to comiple faster, NFC
Reid Kleckner [Sat, 23 Nov 2019 19:28:54 +0000 (11:28 -0800)]
[MC] Rewrite tablegen for printInstrAlias to comiple faster, NFC

Before this change, the *InstPrinter.cpp files of each target where some
of the slowest objects to compile in all of LLVM. See this snippet produced by
ClangBuildAnalyzer:
https://reviews.llvm.org/P8171$96
Search for "InstPrinter", and see that it shows up in a few places.

Tablegen was emitting a large switch containing a sequence of operand checks,
each of which created many conditions and many BBs. Register allocation and
jump threading both did not scale well with such a large repetitive sequence of
basic blocks.

So, this change essentially turns those control flow structures into
data. The previous structure looked like:

  switch (Opc) {
  case TGT::ADD:
    // check alias 1
    if (MI->getOperandCount() == N && // check num opnds
        MI->getOperand(0).isReg() && // check opnd 0
        ...
        MI->getOperand(1).isImm() && // check opnd 1
     AsmString = "foo";
     break;
   }
   // check alias 2
   if (...)
     ...
   return false;

The new structure looks like:

  OpToPatterns: Sorted table of opcodes mapping to pattern indices.
   \->
     Patterns: List of patterns. Previous table points to subrange of
               patterns to match.
      \->
        Conds: The if conditions above encoded as a kind and 32-bit value.

See MCInstPrinter.cpp for the details of how the new data structures are
interpreted.

Here are some before and after metrics.
Time to compile AArch64InstPrinter.cpp:
  0m29.062s vs. 0m2.203s
size of the obj:
  3.9M vs. 676K
size of clang.exe:
  97M vs. 96M

I have not benchmarked disassembly performance, but typically
disassemblers are bottlenecked on IO and string processing, not alias
matching, so I'm not sure it's interesting enough to be worth doing.

Reviewers: RKSimon, andreadb, xbolva00, craig.topper

Reviewed By: craig.topper

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

4 years ago[X86] Fix prolog/epilog mismatch for stack protectors on win32-macho.
Amara Emerson [Thu, 5 Dec 2019 23:41:50 +0000 (15:41 -0800)]
[X86] Fix prolog/epilog mismatch for stack protectors on win32-macho.

The xor'ing behaviour is only used for msvc/crt environments, when we're targeting
macho the guard load code doesn't know about the xor in the epilog. Disable xor'ing
when targeting win32-macho to be consistent.

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

4 years ago[ObjC] Make sure that the implicit arguments for direct methods have been setup
Alex Lorenz [Fri, 6 Dec 2019 22:24:37 +0000 (14:24 -0800)]
[ObjC] Make sure that the implicit arguments for direct methods have been setup

This commit sets the Self and Imp declarations for ObjC method declarations,
in addition to the definitions. It also fixes
a bunch of code in clang that had wrong assumptions about when getSelfDecl() would be set:

- CGDebugInfo::getObjCMethodName and AnalysisConsumer::getFunctionName would assume that it was
  set for method declarations part of a protocol, which they never were,
  and that self would be a Class type, which it isn't as it is id for a protocol.

Also use the Canonical Decl to index the set of Direct methods so that
when calls and implementations interleave, the same llvm::Function is
used and the same symbol name emitted.

Radar-Id: rdar://problem/57661767

Patch by: Pierre Habouzit

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

4 years agowrap an rst file to 80 cols, to cycle bots
Nico Weber [Fri, 6 Dec 2019 22:28:02 +0000 (17:28 -0500)]
wrap an rst file to 80 cols, to cycle bots

4 years ago[TargetLowering] Fix another potential FPE in expandFP_TO_UINT
Craig Topper [Fri, 6 Dec 2019 22:11:04 +0000 (14:11 -0800)]
[TargetLowering] Fix another potential FPE in expandFP_TO_UINT

D53794 introduced code to perform the FP_TO_UINT expansion via FP_TO_SINT in a way that would never expose floating-point exceptions in the intermediate steps. Unfortunately, I just noticed there is still a way this can happen. As discussed in D53794, the compiler now generates this sequence:

// Sel = Src < 0x8000000000000000
// Val = select Sel, Src, Src - 0x8000000000000000
// Ofs = select Sel, 0, 0x8000000000000000
// Result = fp_to_sint(Val) ^ Ofs
The problem is with the Src - 0x8000000000000000 expression. As I mentioned in the original review, that expression can never overflow or underflow if the original value is in range for FP_TO_UINT. But I missed that we can get an Inexact exception in the case where Src is a very small positive value. (In this case the result of the sub is ignored, but that doesn't help.)

Instead, I'd suggest to use the following sequence:

// Sel = Src < 0x8000000000000000
// FltOfs = select Sel, 0, 0x8000000000000000
// IntOfs = select Sel, 0, 0x8000000000000000
// Result = fp_to_sint(Val - FltOfs) ^ IntOfs
In the case where the value is already in range of FP_TO_SINT, we now simply compute Val - 0, which now definitely cannot trap (unless Val is a NaN in which case we'd want to trap anyway).

In the case where the value is not in range of FP_TO_SINT, but still in range of FP_TO_UINT, the sub can never be inexact, as Val is between 2^(n-1) and (2^n)-1, i.e. always has the 2^(n-1) bit set, and the sub is always simply clearing that bit.

There is a slight complication in the case where Val is a constant, so we know at compile time whether Sel is true or false. In that scenario, the old code would automatically optimize the sub away, while this no longer happens with the new code. Instead, I've added extra code to check for this case and then just fall back to FP_TO_SINT directly. (This seems to catch even slightly more cases.)

Original version of the patch by Ulrich Weigand. X86 changes added by Craig Topper

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

4 years ago[analyzer] Fix false positive on introspection of a block's internal layout.
Artem Dergachev [Fri, 6 Dec 2019 21:20:36 +0000 (13:20 -0800)]
[analyzer] Fix false positive on introspection of a block's internal layout.

When implementation of the block runtime is available, we should not
warn that block layout fields are uninitialized simply because they're
on the stack.

4 years ago[InstSimplify] add tests for copysign with fneg operand; NFC
Sanjay Patel [Fri, 6 Dec 2019 21:23:11 +0000 (16:23 -0500)]
[InstSimplify] add tests for copysign with fneg operand; NFC

4 years ago[WPD] Remove unused parameter (NFC)
Teresa Johnson [Fri, 6 Dec 2019 20:13:34 +0000 (12:13 -0800)]
[WPD] Remove unused parameter (NFC)

Remove unused parameter.

4 years ago[X86] Don't setup and teardown memory for a musttail call
Reid Kleckner [Mon, 2 Dec 2019 21:15:30 +0000 (13:15 -0800)]
[X86] Don't setup and teardown memory for a musttail call

Summary:
musttail calls should not require allocating extra stack for arguments.
Updates to arguments passed in memory should happen in place before the
epilogue.

This bug was mostly a missed optimization, unless inalloca was used and
store to push conversion fired.

If a reserved call frame was used for an inalloca musttail call, the
call setup and teardown instructions would be deleted, and SP
adjustments would be inserted in the prologue and epilogue. You can see
these are removed from several test cases in this change.

In the case where the stack frame was not reserved, i.e. call frame
optimization fires and turns argument stores into pushes, then the
imbalanced call frame setup instructions created for inalloca calls
become a problem. They remain in the instruction stream, resulting in a
call setup that allocates zero bytes (expected for inalloca), and a call
teardown that deallocates the inalloca pack. This deallocation was
unbalanced, leading to subsequent crashes.

Reviewers: hans

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[clang-tidy] Pass -faligned-allocation on the compiler command line to
Akira Hatanaka [Fri, 6 Dec 2019 19:51:58 +0000 (11:51 -0800)]
[clang-tidy] Pass -faligned-allocation on the compiler command line to
fix compile error

The test was failing when run on OSes older than MacOSX10.14 because
aligned deallocation functions are unavailable on older OSes.

rdar://problem/57706710

4 years agoRevert "[PGO][PGSO] Instrument the code gen / target passes."
Hiroshi Yamauchi [Fri, 6 Dec 2019 20:17:32 +0000 (12:17 -0800)]
Revert "[PGO][PGSO] Instrument the code gen / target passes."

This reverts commit 9a0b5e14075a1f42a72eedb66fd4fde7985d37ac.

This seems to break buildbots.

4 years ago[OPENMP50]Add if clause in distribute simd directive.
Alexey Bataev [Fri, 6 Dec 2019 17:21:31 +0000 (12:21 -0500)]
[OPENMP50]Add if clause in distribute simd directive.

According to OpenMP 5.0, if clause can be used in for simd directive. If
condition in the if clause if false, the non-vectorized version of the
loop must be executed.

4 years ago[AutoFDO] Inline replay for cold/small callees from sample profile loader
Wenlei He [Tue, 26 Nov 2019 23:53:06 +0000 (15:53 -0800)]
[AutoFDO] Inline replay for cold/small callees from sample profile loader

Summary:
Sample profile loader of AutoFDO tries to replay previous inlining using context sensitive profile. The replay only repeats inlining if the call site block is hot. As a result it punts inlining of small functions, some of which can be beneficial for size, and will still be inlined by CSGCC inliner later. The oscillation between sample profile loader's inlining and regular CGSSC inlining cause unnecessary loss of context-sensitive profile. It doesn't have much impact for inline decision itself, but it negatively affects post-inline profile quality as CGSCC inliner have to scale counts which is not as accurate as the original context sensitive profile, and bad post-inline profile can misguide code layout.

This change added regular Inline Cost calculation for sample profile loader, so we can inline small functions upfront under switch -sample-profile-inline-size. In addition -sample-profile-cold-inline-threshold is added so we can tune the separate size threshold - currently the default is chosen to be the same as regular inliner's cold call-site threshold.

Reviewers: wmi, davidxl

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years agoStop checking whether std::strong_* has ::equivalent members.
Richard Smith [Fri, 6 Dec 2019 19:34:29 +0000 (11:34 -0800)]
Stop checking whether std::strong_* has ::equivalent members.

Any attempt to use these would be a bug, so we shouldn't even look for
them.

4 years agoAvoid naming variable after type to fix GCC 5.3 build
Reid Kleckner [Fri, 6 Dec 2019 19:24:25 +0000 (11:24 -0800)]
Avoid naming variable after type to fix GCC 5.3 build

GCC says:
.../llvm/lib/DebugInfo/GSYM/FunctionInfo.cpp:195:12:
error: â€˜InfoType’ is not a class, namespace, or enumeration
       case InfoType::EndOfList:
                   ^

Presumably, GCC thinks InfoType is a variable here. Work around it by
using the name IT as is done above.

4 years agoRevert "[InstCombine] reduce code duplication; NFC"
Sanjay Patel [Fri, 6 Dec 2019 19:24:14 +0000 (14:24 -0500)]
Revert "[InstCombine] reduce code duplication; NFC"

This reverts commit db5739658467e20a52f20e769d3580412e13ff87.
At least 1 of these supposedly NFC commits wasn't - sanitizer bot is angry.

4 years agoRevert "[InstCombine] improve readability; NFC"
Sanjay Patel [Fri, 6 Dec 2019 19:20:44 +0000 (14:20 -0500)]
Revert "[InstCombine] improve readability; NFC"

This reverts commit 7250ef3613cc6b81145b9543bafb86d7f9466cde.
At least 1 of these supposedly NFC commits wasn't - sanitizer bot is angry.

4 years agoRevert "[InstCombine] reduce indentation; NFC"
Sanjay Patel [Fri, 6 Dec 2019 19:19:02 +0000 (14:19 -0500)]
Revert "[InstCombine] reduce indentation; NFC"

This reverts commit 8bf8ef7116bd0daec570b35480ca969b74e66c6e.
At least 1 of these supposedly NFC commits wasn't - sanitizer bot is angry.

4 years ago[libcxx{,abi}] Don't link libpthread and libdl on Fuchsia
Petr Hosek [Fri, 6 Dec 2019 19:11:31 +0000 (11:11 -0800)]
[libcxx{,abi}] Don't link libpthread and libdl on Fuchsia

These are a part of the libc so linking these explicitly isn't necessary
and embedding these as deplibs causes link time error.

This issues was introduced in a9b5fff which changed how we emit deplibs.

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

4 years agoRevert "ARM-Darwin: keep the frame register reserved even if not updated."
Alina Sbirlea [Fri, 6 Dec 2019 18:37:02 +0000 (10:37 -0800)]
Revert "ARM-Darwin: keep the frame register reserved even if not updated."

This reverts commit a7d90af1be48234ce583e00fb16e33633d44ae38.

This revision came back as the root-cause for crashes in internal
ARM-IOS apps.
Reproducer in https://bugs.llvm.org/show_bug.cgi?id=44231.

4 years ago[x86] add cost model special-case for insert/extract from element 0
Sanjay Patel [Fri, 6 Dec 2019 18:29:31 +0000 (13:29 -0500)]
[x86] add cost model special-case for insert/extract from element 0

This is a follow-up to D70607 where we made any
extract element on SLM more costly than default. But that is
pessimistic for extract from element 0 because that corresponds
to x86 movd/movq instructions. These generally have >1 cycle
latency, but they are probably implemented as single uop
instructions.

Note that no vectorization tests are affected by this change.
Also, no targets besides SLM are affected because those are
falling through to the default cost of 1 anyway. But this will
become visible/important if we add more specializations via cost
tables.

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

4 years ago[PGO][PGSO] Instrument the code gen / target passes.
Hiroshi Yamauchi [Thu, 5 Dec 2019 17:39:37 +0000 (09:39 -0800)]
[PGO][PGSO] Instrument the code gen / target passes.

Summary:
Split off of D67120.

Add the profile guided size optimization instrumentation / queries in the code
gen or target passes. This doesn't enable the size optimizations in those passes
yet as they are currently disabled in shouldOptimizeForSize (for non-IR pass
queries).

Reviewers: davidxl

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years agoclang/AMDGPU: Fix default for frame-pointer attribute
Matt Arsenault [Tue, 19 Nov 2019 09:52:07 +0000 (15:22 +0530)]
clang/AMDGPU: Fix default for frame-pointer attribute

Enabling optimization should allow frame pointer elimination.

4 years ago[OPENMP]Reorganize OpenMP warning groups.
Alexey Bataev [Fri, 6 Dec 2019 18:12:19 +0000 (13:12 -0500)]
[OPENMP]Reorganize OpenMP warning groups.

openmp-mapping group is a subgroup of openmp-target warning group. Also,
added global openmp group to control all other OpenMP warning groups.

4 years ago[InstCombine] reduce indentation; NFC
Sanjay Patel [Fri, 6 Dec 2019 17:51:30 +0000 (12:51 -0500)]
[InstCombine] reduce indentation; NFC

4 years ago[InstCombine] improve readability; NFC
Sanjay Patel [Fri, 6 Dec 2019 15:59:25 +0000 (10:59 -0500)]
[InstCombine] improve readability; NFC

CreateIntCast returns the input if its type matches, so need to duplicate that check.

4 years ago[InstCombine] reduce code duplication; NFC
Sanjay Patel [Fri, 6 Dec 2019 15:43:23 +0000 (10:43 -0500)]
[InstCombine] reduce code duplication; NFC

4 years ago[InstCombine] improve readability; NFC
Sanjay Patel [Fri, 6 Dec 2019 14:34:41 +0000 (09:34 -0500)]
[InstCombine] improve readability; NFC

4 years agoAdd `QualType::hasAddressSpace`. NFC.
Michael Liao [Fri, 6 Dec 2019 16:48:15 +0000 (11:48 -0500)]
Add `QualType::hasAddressSpace`. NFC.

- Add that as a shorthand of <T>.getQualifiers().hasAddressSpace().
- Simplify related code.

4 years ago[MBP] Avoid tail duplication if it can't bring benefit
Guozhi Wei [Thu, 5 Dec 2019 00:01:20 +0000 (16:01 -0800)]
[MBP] Avoid tail duplication if it can't bring benefit

Current tail duplication integrated in bb layout is designed to increase the fallthrough from a BB's predecessor to its successor, but we have observed cases that duplication doesn't increase fallthrough, or it brings too much size overhead.

To overcome these two issues in function canTailDuplicateUnplacedPreds I add two checks:

  make sure there is at least one duplication in current work set.
  the number of duplication should not exceed the number of successors.

The modification in hasBetterLayoutPredecessor fixes a bug that potential predecessor must be at the bottom of a chain.

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

4 years ago[ASTImporter] Implicitly declare parameters for imported ObjCMethodDecls
Raphael Isemann [Fri, 6 Dec 2019 17:10:23 +0000 (18:10 +0100)]
[ASTImporter] Implicitly declare parameters for imported ObjCMethodDecls

Summary:
When Sema encounters a ObjCMethodDecl definition it declares the implicit parameters for the ObjCMethodDecl.
When importing such a method with the ASTImporter we need to do the same for the imported method
otherwise we will crash when generating code (where CodeGen expects that this was called by Sema).

Note I had to implement Objective-C[++] support in Language.cpp as this is the first test for Objective-C and this
would otherwise just hit this 'not implemented' assert when running the unit test.

Reviewers: martong, a.sidorin, shafik

Reviewed By: martong

Subscribers: rnkovacs, cfe-commits

Tags: #clang

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

4 years ago[NFC][AIX][XCOFF] if the size of Csect is zero, the Csect do not need write any data...
diggerlin [Fri, 6 Dec 2019 17:41:38 +0000 (12:41 -0500)]
[NFC][AIX][XCOFF] if the size of Csect is zero, the Csect do not need write any data into sections

SUMMARY:

if the size of Csect is zero, the Csect do not need write any data into sections
for example, the TOC Csect has zero size, it do not need invoke a
Asm.writeSectionData(W.OS, Csect.MCCsect, Layout);

Reviewers: daltenty
Subscribers: rupprecht, seiyai,hiraditya

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

4 years agoupdate string comparison in clang-format.py
mydeveloperday [Fri, 6 Dec 2019 17:36:56 +0000 (17:36 +0000)]
update string comparison in clang-format.py

Summary: Python 3.8 introduces a SyntaxWarning about string comparisons with 'is'. This commit updates the string comparison in clang-format.py that is done with 'is not' to '!='. This should not break compatibility with older python versions (tested 3.4.9, 2.7.17, 2.7.5, 3.8.0).

Reviewers: MyDeveloperDay, klimek, llvm-commits, cfe-commits

Reviewed By: MyDeveloperDay, klimek

Patch By: pseyfert

Tags: #clang-format, #clang

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

4 years ago[clang-format] update trailing newline treatment in clang-format.py
mydeveloperday [Fri, 6 Dec 2019 17:24:30 +0000 (17:24 +0000)]
[clang-format] update trailing newline treatment in clang-format.py

Summary:
The current clang-format.py does not handle trailing newlines at the end of a file correctly.
Trailing empty lines get removed except one.
As far as I understand this is because clang-format gets fed from stdin and writes to stdout when called from clang-format.py.
In a "normal" file (with no trailing empty lines) the string that gets passed to clang-format does not contain a trailing '\n' after the '\n'.join from python.
The clang-format binary does not add a trailing newline to input from stdin, but (if there are multiple trailing '\n', all except one get removed).

When reading back this means that we see in python from a "normal" file a string with no trailing '\n'. From a file with (potentially multiple) empty line(s) at the end, we get a string with one trailing '\n' back in python. In the former case all is fine, in the latter case split('\n') makes one empty line at the end of the file out of the clang-format output. Desired would be instead that the **file** ends with a newline, but not with an empty line.

For the case that a user specifies a range to format (and wants to keep trailing empty lines) I did **not** try to fix this by simply removing all trailing newlines from the clang-format output. Instead, I add a '\n' to the unformatted file content (i.e. newline-terminate what is passed to clang-format) and then strip off the last newline from the output (which itself is now for sure the newline termination of the clang-format output).

(Should this get approved, I'll need someone to help me land this.)

Reviewers: klimek, MyDeveloperDay

Reviewed By: MyDeveloperDay

Patch By: pseyfert

Subscribers: cfe-commits, llvm-commits

Tags: #clang-format, #clang

Differential Revision: https://reviews.llvm.org/D70864
update trailing newline treatment in clang-format.py

4 years ago[NFC][AIX][XCOFF] fixed compile warning on the strncpy.
diggerlin [Fri, 6 Dec 2019 17:22:28 +0000 (12:22 -0500)]
[NFC][AIX][XCOFF] fixed compile warning on the strncpy.

SUMMARY:
There is warning when compile the file XCOFFObjectWriter.cpp
/srv/llvm-buildbot-srcatch/llvm-build-dir/openmp-gcc-x86_64-linux-debian/llvm.src/llvm/lib/MC/XCOFFObjectWriter.cpp:414:17: warning: 'char* strncpy(char*, const char*, size_t)' specified bound 8 equals destination size [-Wstringop-truncation]

The patch fixed the warning.

Reviewer: daltenty

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

4 years agoCleanup and speedup NativeRegisterContextLinux_arm64
Muhammad Omair Javaid [Fri, 6 Dec 2019 17:12:39 +0000 (22:12 +0500)]
Cleanup and speedup NativeRegisterContextLinux_arm64

Summary:
This patch simplifies register accesses in NativeRegisterContextLinux_arm64
and also adds some bare minimum caching to avoid multiple calls to ptrace
during a stop.

Linux ptrace returns data in the form of structures containing GPR/FPR data.
This means that one single call is enough to read all GPRs or FPRs. We do
that once per stop and keep reading from or writing to the buffer that we
have in NativeRegisterContextLinux_arm64 class. Before a resume or detach we
write all buffers back.

This is tested on aarch64 thunder x1 with Ubuntu 18.04. Also tested
regressions on x86_64.

Reviewers: labath, clayborg

Reviewed By: labath

Subscribers: kristof.beyls, lldb-commits

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

4 years ago[lldb][test] Handle .categories lookup for inline tests.
Jordan Rupprecht [Fri, 6 Dec 2019 16:36:23 +0000 (08:36 -0800)]
[lldb][test] Handle .categories lookup for inline tests.

Summary:
When creating a test with `lldbinline.MakeInlineTest()`, the reported `inspect.getfile(test.__class__)` is `lldbtest.pyc`, meaning any `.categories` file will be ineffective for those tests. Check for the test_filename first, which inline tests will set.

Additionally, raise an error with the starting dir if `.categories` is not found. This makes the problem more obvious when it occurs: when the test is separated from the test framework tree.

Reviewers: labath, JDevlieghere

Subscribers: lldb-commits

Tags: #lldb

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

4 years ago[LegalizeTypes] Add missing case for STRICT_FP_ROUND softening
John Brawn [Thu, 5 Dec 2019 11:33:49 +0000 (11:33 +0000)]
[LegalizeTypes] Add missing case for STRICT_FP_ROUND softening

This fixes a test failure in test/CodeGen/ARM/fp-intrinsics.ll.

4 years ago[OpenMP] Fix linkage issue on FreeBSD
David Carlier [Fri, 6 Dec 2019 15:47:50 +0000 (15:47 +0000)]
[OpenMP] Fix linkage issue on FreeBSD

needs kmp_set_thread_affinity_mask_initial implementation.

4 years ago[libomptarget][nfc] Move cuda threadfence functions behind kmpc_impl
JonChesterfield [Fri, 6 Dec 2019 15:41:17 +0000 (15:41 +0000)]
[libomptarget][nfc] Move cuda threadfence functions behind kmpc_impl

Summary:
[libomptarget][nfc] Move cuda threadfence functions behind kmpc_impl

Part of building code under common/ without requiring a cuda compiler

Reviewers: ABataev, jdoerfert, grokos

Reviewed By: ABataev

Subscribers: jvesely, jfb, openmp-commits

Tags: #openmp

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

4 years ago[libomptarget][nfc] Move three more files to common
Jon Chesterfield [Fri, 6 Dec 2019 15:29:49 +0000 (15:29 +0000)]
[libomptarget][nfc] Move three more files to common

Summary: [libomptarget][nfc] Move three more files to common

Reviewers: ABataev, jdoerfert, grokos

Reviewed By: ABataev

Subscribers: openmp-commits

Tags: #openmp

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

4 years ago[ARM][MVE] Fix copy-paste error in VQSHL instruction ids.
Simon Tatham [Fri, 6 Dec 2019 15:23:07 +0000 (15:23 +0000)]
[ARM][MVE] Fix copy-paste error in VQSHL instruction ids.

Summary:
The immediate forms of the MVE VQSHL instruction have MC names like
`MVE_VSLIimms8` and `MVE_VSLIimmu32`. Those names are confusing,
because VSLI is a completely different shift instruction with no
semantic relation to VQSHL. But it just happens to be defined
immediately before VQSHL in `ARMInstrMVE.td`, so this looks like a
copy-paste error. Renamed the ids to match the instruction name.

Reviewers: ostannard, dmgreen, MarkMurrayARM, miyuki

Reviewed By: miyuki

Subscribers: kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[AIX][XCOFF] created a test case to verify the raw text section of xcoffobject file
diggerlin [Fri, 6 Dec 2019 15:12:09 +0000 (10:12 -0500)]
[AIX][XCOFF] created a test case to verify the raw text section of xcoffobject file

SUMMARY:
in the patch https://reviews.llvm.org/D66969 . we need a test case to verify the out text section of the xcoffobject file is correct or not.

but we do not have llvm disassembly tools to dump the xcoffobjectfile . since we commit the patch https://reviews.llvm.org/D70255, we have tools for it. we create this test case for it.

Reviewers: daltenty,hubert.reinterpretcast,

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

4 years ago[OPENMP]Moved warning fo mapping non-trivially copiable types into a
Alexey Bataev [Fri, 6 Dec 2019 14:49:07 +0000 (09:49 -0500)]
[OPENMP]Moved warning fo mapping non-trivially copiable types into a
separate group.

Need to move this warning into a separate group to make easier to
disable this warning, if required.

4 years ago[AArch64] Fix a bug with jump table generation
Cullen Rhodes [Fri, 6 Dec 2019 13:28:03 +0000 (13:28 +0000)]
[AArch64] Fix a bug with jump table generation

Summary:
When trying to calculate the offsets for the jump table entries
we fail to take into account the block alignment, which could be
greater than 4 bytes. This led to cases where the jump table
offset was too big to fit in a byte.

Reviewers: t.p.northover, sdesmalen, ostannard

Reviewed By: ostannard

Subscribers: ostannard, kristof.beyls, hiraditya, llvm-commits

Committed on behalf of David Sherwood (david-arm)

Tags: #llvm

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

4 years agogn build: Unbreak mac build after 4066591
Nico Weber [Fri, 6 Dec 2019 14:08:53 +0000 (09:08 -0500)]
gn build: Unbreak mac build after 4066591

4 years agoFix building shared libraries broken by 8e48e8e3e32.
Alexey Lapshin [Fri, 6 Dec 2019 13:04:16 +0000 (16:04 +0300)]
Fix building shared libraries broken by 8e48e8e3e32.

4 years agoAttempt to fix a debuginfo test that wasn't as generic as I thought
Jeremy Morse [Fri, 6 Dec 2019 12:50:18 +0000 (12:50 +0000)]
Attempt to fix a debuginfo test that wasn't as generic as I thought

An ARM buildbot croaks when this test doesn't have a triple specified:

  http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/12021/

Move the test to the X86 directory and put an x86_64 triple on the
llc command line.

4 years agoFix for PR44000. Optimization record for bytecode input missing.
Zahira Ammarguellat [Thu, 5 Dec 2019 15:23:47 +0000 (10:23 -0500)]
Fix for PR44000. Optimization record for bytecode input missing.
Review is here:  https://reviews.llvm.org/D70691

4 years ago[clangd] Switch Hover.All to structured tests
Kadir Cetinkaya [Mon, 2 Dec 2019 18:34:03 +0000 (19:34 +0100)]
[clangd] Switch Hover.All to structured tests

Reviewers: sammccall

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

Tags: #clang

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

4 years ago[clangd] Store index::SymbolKind in HoverInfo
Kadir Cetinkaya [Tue, 26 Nov 2019 17:06:17 +0000 (18:06 +0100)]
[clangd] Store index::SymbolKind in HoverInfo

Summary:
LSP's SymbolKind has some shortcomings when it comes to C++ types,
index::SymbolKind has more detailed info like Destructor, Parameter, MACRO etc.

We are planning to make use of that information in our new Hover response, and
it would be nice to display the Symbol type in full detail, rather than some
approximation.

Reviewers: sammccall

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

Tags: #clang

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

4 years ago[llvm-readobj][llvm-readelf] - Refactor parsing of the SHT_GNU_versym section.
Georgii Rymar [Tue, 3 Dec 2019 09:54:36 +0000 (12:54 +0300)]
[llvm-readobj][llvm-readelf] - Refactor parsing of the SHT_GNU_versym section.

This introduce a new helper which is used to parse the SHT_GNU_versym section.
LLVM/GNU styles implementations now use it to share the logic.

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

4 years ago[LV] Record GEP widening decisions in recipe (NFCI)
Gil Rapaport [Wed, 16 Oct 2019 18:39:53 +0000 (21:39 +0300)]
[LV] Record GEP widening decisions in recipe (NFCI)

InnerLoopVectorizer's code called during VPlan execution still relies on
original IR's def-use relations to decide which vector code to generate,
limiting VPlan transformations ability to modify def-use relations and still
have ILV generate the vector code.
This commit moves GEP operand queries controlling how GEPs are widened to a
dedicated recipe and extracts GEP widening code to its own ILV method taking
those recorded decisions as arguments. This reduces ingredient def-use usage by
ILV as a step towards full VPlan-based def-use relations.

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

4 years ago[AArch64][SVE2] Implement while comparison intrinsics
Cullen Rhodes [Fri, 6 Dec 2019 11:29:08 +0000 (11:29 +0000)]
[AArch64][SVE2] Implement while comparison intrinsics

Summary:
Adds the following intrinsics:

    * whilege, whilegt, whilehi, whilehs

Reviewers: sdesmalen, rovka, dancgr, efriedma, rengolin, huntergr

Reviewed By: sdesmalen

Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years ago[llvm-readobj] - Implement --dependent-libraries flag.
Georgii Rymar [Mon, 25 Nov 2019 13:04:58 +0000 (16:04 +0300)]
[llvm-readobj] - Implement --dependent-libraries flag.

There is no way to dump SHT_LLVM_DEPENDENT_LIBRARIES sections
currently. This patch implements this.

The section is described here:
https://llvm.org/docs/Extensions.html#sht-llvm-dependent-libraries-section-dependent-libraries

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

4 years ago[clangd] Try to fix CompileCommandsTests on windows. NFC
Sam McCall [Fri, 6 Dec 2019 11:27:15 +0000 (12:27 +0100)]
[clangd] Try to fix CompileCommandsTests on windows. NFC

4 years ago[DebugInfo][CGP] Update dbg.values when sinking address computations
Jeremy Morse [Fri, 6 Dec 2019 11:21:27 +0000 (11:21 +0000)]
[DebugInfo][CGP] Update dbg.values when sinking address computations

One of CodeGenPrepare's optimizations is to duplicate address calculations
into basic blocks, so that as much information as possible can be folded
into memory addressing operands. This is great -- but the dbg.value
variable location intrinsics are not updated in the same way. This can lead
to dbg.values referring to address computations in other blocks that will
never be encoded into the DAG, while duplicate address computations are
performed locally that could be used by the dbg.value. Some of these (such
as non-constant-offset GEPs) can't be salvaged past.

Fix this by, whenever we duplicate an address computation into a block,
looking for dbg.value users of the original memory address in the same
block, and redirecting those to the local computation.

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

4 years ago[X86] Regenerate test to fix build bot failures
Ulrich Weigand [Fri, 6 Dec 2019 11:08:26 +0000 (12:08 +0100)]
[X86] Regenerate test to fix build bot failures

After my recent commit daee549 the following test case is failing:
CodeGen/X86/vector-constrained-fp-intrinsics.ll

Not sure why I didn't catch this earlier, seems to be affected
by other changes that came in recently.

Fixed by regerenating the test again.  Sorry for the disruption!

4 years ago[AArch64][SVE] Implement integer compare intrinsics
Cullen Rhodes [Fri, 6 Dec 2019 10:04:23 +0000 (10:04 +0000)]
[AArch64][SVE] Implement integer compare intrinsics

Summary:
Adds intrinsics for the following:

    * cmphs, cmphi
    * cmpge, cmpgt
    * cmpeq, cmpne
    * cmplt, cmple
    * cmplo, cmpls

Includes a minor change to `TLI.getMemValueType` that fixes a crash due to the
scalable flag being dropped.

Reviewers: sdesmalen, efriedma, rengolin, rovka, dancgr, huntergr

Reviewed By: efriedma

Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years ago[clangd] Fix gcc warning about extra ";" [NFC]
Mikael Holmen [Fri, 6 Dec 2019 10:13:56 +0000 (11:13 +0100)]
[clangd] Fix gcc warning about extra ";" [NFC]

gcc complained with

/data/repo/master/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp:326:30: warning: extra ';' [-Wpedantic]
 REGISTER_TWEAK(DefineOutline);
                              ^

4 years ago[lldb][NFC] Move [SU]Int64ValueIsValidForByteSize to RegisterValue
Raphael Isemann [Fri, 6 Dec 2019 10:04:33 +0000 (11:04 +0100)]
[lldb][NFC] Move [SU]Int64ValueIsValidForByteSize to RegisterValue

These functions are an implementation detail of RegisterValue, so
it doesn't make a lot of sense to implement them in a totally
unrelated class.

4 years ago[FPEnv][SelectionDAG] Relax chain requirements
Ulrich Weigand [Fri, 6 Dec 2019 10:02:11 +0000 (11:02 +0100)]
[FPEnv][SelectionDAG] Relax chain requirements

This patch implements the following changes:

1) SelectionDAGBuilder::visitConstrainedFPIntrinsic currently treats
each constrained intrinsic like a global barrier (e.g. a function call)
and fully serializes all pending chains. This is actually not required;
it is allowed for constrained intrinsics to be reordered w.r.t one
another or (nonvolatile) memory accesses. The MI-level scheduler already
allows for that flexibility, so it makes sense to allow it at the DAG
level as well.

This patch therefore changes the way chains for constrained intrisincs
are created, and handles them basically like load operations are handled.
This has the effect that constrained intrinsics are no longer serialized
against one another or (nonvolatile) loads. They are still serialized
against stores, but that seems hard to change with the current DAG chain
setup, and it also doesn't seem to be a big problem preventing DAG

2) The OPC_CheckFoldableChainNode check requires that each of the
intermediate nodes in a multi-node pattern match only has a single use.
This check tends to fail if those intermediate nodes are strict operations
as those have a chain output that typically indeed has another use.
However, we don't really need to consider chains here at all, since they
will all be rewritten anyway by UpdateChains later. Other parts of the
matcher therefore already ignore chains, but this hasOneUse check doesn't.

This patch replaces hasOneUse by a custom test that verifies there is no
more than one use of any non-chain output value.

In theory, this change could affect code unrelated to strict FP nodes,
but at least on SystemZ I could not find any single instance of that
happening

3) The SystemZ back-end currently does not allow matching multiply-and-
extend operations (32x32 -> 64bit or 64x64 -> 128bit FP multiply) for
strict FP operations.  This was not possible in the past due to the
problems described under 1) and 2) above.

With those issues fixed, it is now possible to fully support those
instructions in strict mode as well, and this patch does so.

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

4 years ago[lldb/DWARF] Fix DW_AT_addr_base & DW_AT_low_pc interaction
Pavel Labath [Thu, 5 Dec 2019 15:21:23 +0000 (16:21 +0100)]
[lldb/DWARF] Fix DW_AT_addr_base & DW_AT_low_pc interaction

In DWARF5 DW_AT_low_pc (and DW_AT_entry_pc, and possibly others) can use
DW_FORM_addrx to refer to the address indirectly. This means we need to
have processed the DW_AT_addr_base attribute before we can do anything
with these.

Since we were processing the unit attributes serially, this created a
problem in cases where the DW_AT_addr_base comes after DW_AT_low_pc --
we would end up computing the wrong unit base address, which also
corrupted any values which later depended on that (for instance range
lists). Clang currently always emits DW_AT_addr_base last.

The fix is simple -- process DW_AT_addr_base first, regardless of its
position in the attribute list.

4 years ago[lldb][NFC] Remove ability to pass a custom printf format to DataExtractor::PutToLog
Raphael Isemann [Fri, 6 Dec 2019 08:44:50 +0000 (09:44 +0100)]
[lldb][NFC] Remove ability to pass a custom printf format to DataExtractor::PutToLog

This is luckily not used anywhere.

4 years ago[lldb/DWARF] Fix DW_AT_rnglists_base handling for dwo files
Pavel Labath [Thu, 5 Dec 2019 14:30:18 +0000 (15:30 +0100)]
[lldb/DWARF] Fix DW_AT_rnglists_base handling for dwo files

the value of DW_AT_rnglists_base of the skeleton unit is for that unit
alone (e.g. used in DW_AT_ranges of the unit DIE) and should not apply
to the split unit.

The split unit has a hardcoded range list base value -- we should
initialize range list code whenever we detect a nonempty
debug_rnglists.dwo section.

4 years ago[lldb] Migrate VMRange::Dump to raw_ostream
Raphael Isemann [Fri, 6 Dec 2019 08:53:44 +0000 (09:53 +0100)]
[lldb] Migrate VMRange::Dump to raw_ostream

4 years ago[lldb/IRExecutionUnit] Stop searching based on demangled names
Pavel Labath [Tue, 26 Nov 2019 15:41:26 +0000 (16:41 +0100)]
[lldb/IRExecutionUnit] Stop searching based on demangled names

Summary:
This was causing problems on linux, where we'd end up calling the
deleting destructor instead of a regular one (because they have the same
demangled name), making a lot of mischief in the process.

The only place where this was necessary (according to the test suite, at
least) was to call a base structor instead of a complete one, but this
is now handled in a more targeted fashion.

TestCallOverriddenMethod is now re-enabled as it now passes reliably.

Reviewers: teemperor, JDevlieghere

Subscribers: lldb-commits

Tags: #lldb

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