platform/upstream/llvm.git
4 years ago[OPENMP50]Add if clause in teams distribute simd directive.
Alexey Bataev [Wed, 11 Dec 2019 16:20:47 +0000 (11:20 -0500)]
[OPENMP50]Add if clause in teams 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 agoRemove TypeValidators (NFC in terms of the testsuite)
Adrian Prantl [Tue, 10 Dec 2019 23:32:57 +0000 (15:32 -0800)]
Remove TypeValidators (NFC in terms of the testsuite)

This is a half-implemented feature that as far as we can tell was
never used by anything since its original inclusion in 2014. This
patch removes it to make remaining the code easier to understand.

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

4 years ago[ELF][AArch64] Rename --force-bti to -z force-bti and --pac-plt to -z pac-plt
Fangrui Song [Wed, 11 Dec 2019 06:07:17 +0000 (22:07 -0800)]
[ELF][AArch64] Rename --force-bti to -z force-bti and --pac-plt to -z pac-plt

Summary:
The original design used --foo but the upstream complained that ELF only
options should be -z foo. See https://sourceware.org/ml/binutils/2019-04/msg00151.html
https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=8bf6d176b0a442a8091d338d4af971591d19922c
made the rename.

Our --force-bti and --pac-plt implement the same functionality, so it
seems wise to be consistent with GNU ld.

Reviewed By: peter.smith

Subscribers: emaste, arichardson, kristof.beyls, llvm-commits

Tags: #llvm

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

4 years agoupdate TestThreadStepOut.py to expect correct source line on arm64.
Jason Molenda [Wed, 11 Dec 2019 17:14:52 +0000 (09:14 -0800)]
update TestThreadStepOut.py to expect correct source line on arm64.

4 years ago[DA] Improve dump to show source and sink of the dependence
Bardia Mahjour [Wed, 11 Dec 2019 16:48:16 +0000 (11:48 -0500)]
[DA] Improve dump to show source and sink of the dependence

Summary:
The current da printer shows the dependence without indicating
which instructions are being considered as the src vs dst. It
also silently ignores call instructions, despite the fact that
they create confused dependence edges to other memory
instructions. This patch addresses these two issues plus a
couple of minor non-functional improvements.

Authored By: bmahjour

Reviewer: dmgreen, fhahn, philip.pfaffe, chandlerc

Reviewed By: dmgreen, fhahn

Tags: #llvm

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

4 years agoDon't run expect based tests remotely.
Jason Molenda [Wed, 11 Dec 2019 16:29:18 +0000 (08:29 -0800)]
Don't run expect based tests remotely.

4 years ago[AArch64] Skip debug ops with regsOverlap in AArch64 LD/ST opt.
Florian Hahn [Wed, 11 Dec 2019 16:24:38 +0000 (16:24 +0000)]
[AArch64] Skip debug ops with regsOverlap in AArch64 LD/ST opt.

This fixes a crash when debug instructions are in between 2 stores.

4 years ago[SystemZ] Add llvm.minimum / llvm.maximum tests
Ulrich Weigand [Wed, 11 Dec 2019 15:59:54 +0000 (16:59 +0100)]
[SystemZ] Add llvm.minimum / llvm.maximum tests

The backend already supports the @llvm.minimum and @llvm.maximum
intrinsics, but we had no test cases for those.  Add tests.

4 years ago[X86] Erase dead LEA instruction after converting it to MOV in FixupLEAPass::processI...
Craig Topper [Wed, 11 Dec 2019 15:51:02 +0000 (07:51 -0800)]
[X86] Erase dead LEA instruction after converting it to MOV in FixupLEAPass::processInstrForSlow3OpLEA.

4 years ago[TableGen] Remove unused target intrinsic generation logic
Reid Kleckner [Wed, 11 Dec 2019 15:37:16 +0000 (07:37 -0800)]
[TableGen] Remove unused target intrinsic generation logic

AMDGPU was the last in tree target to use this tablegen mode. I plan to
split up the global intrinsic enum similar to the way that clang
diagnostics are split up today. I don't plan to build on this mode.

Reviewers: arsenm, echristo, efriedma

Reviewed By: echristo

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

4 years ago[SystemZ] Fix 128-bit strict FMA expansion pre-z14
Ulrich Weigand [Wed, 11 Dec 2019 15:28:14 +0000 (16:28 +0100)]
[SystemZ] Fix 128-bit strict FMA expansion pre-z14

Before z14, we did not have any FMA instruction for 128-bit
floating-point, so the @llvm.fma.f128 intrinsic needs to be
expanded to a libcall on those platforms.

This worked correctly for regular FMA, but was implemented
incorrectly for the strict version.  This was not noticed
because we did not have test coverage for this case.

This patch fixes that incorrect expansion and adds the
missing test cases.

4 years ago[Loop] Add isRotated method to Loop class.
Kit Barton [Tue, 3 Dec 2019 19:20:08 +0000 (14:20 -0500)]
[Loop] Add isRotated method to Loop class.

Summary:
This patch adds a method to determine if a loop is in rotated form (the latch is
an exiting block). It also modifies the getLoopGuardBranch method to use this
new method. This method can also be used in Loopfusion. Once this patch lands I
will make the corresponding changes there.

Reviewers: jdoerfert, Meinersbur, dmgreen, etiotto, Whitney, fhahn, hfinkel

Reviewed By: Meinersbur

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[Support] Add TimeTraceScope constructor without detail arg
Russell Gallop [Wed, 11 Dec 2019 11:49:42 +0000 (11:49 +0000)]
[Support] Add TimeTraceScope constructor without detail arg

This simplifies code where no extra details are required
Also don't write out detail when it is empty.

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

4 years ago[ARM][NFC] Change test to use CHECK-NEXT
Diogo Sampaio [Wed, 11 Dec 2019 14:24:40 +0000 (14:24 +0000)]
[ARM][NFC] Change test to use CHECK-NEXT

4 years agoVerifier: Check frame-pointer attribute values
Matt Arsenault [Tue, 10 Dec 2019 11:12:48 +0000 (16:42 +0530)]
Verifier: Check frame-pointer attribute values

There are a few places that check specific string attributes have
particular values, and assert if they are something else. The verifier
should catch these kinds of cases.

4 years ago[Analyzer] Iterator Checkers: Replace `UnknownVal` in comparison result by a conjured...
Adam Balogh [Fri, 8 Nov 2019 11:52:09 +0000 (12:52 +0100)]
[Analyzer] Iterator Checkers: Replace `UnknownVal` in comparison result by a conjured value

Sometimes the return value of a comparison operator call is
`UnkownVal`. Since no assumptions can be made on `UnknownVal`,
this leeds to keeping impossible execution paths in the
exploded graph resulting in poor performance and false
positives. To overcome this we replace unknown results of
iterator comparisons by conjured symbols.

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

4 years agoAMDGPU: Fix copy-pasted test name error
Matt Arsenault [Tue, 10 Dec 2019 16:21:51 +0000 (21:51 +0530)]
AMDGPU: Fix copy-pasted test name error

4 years ago[LLD][ELF][AArch64][ARM] When errata patching, round thunk size to 4KiB.
Peter Smith [Tue, 10 Dec 2019 08:29:23 +0000 (08:29 +0000)]
[LLD][ELF][AArch64][ARM] When errata patching, round thunk size to 4KiB.

On some edge cases such as Chromium compiled with full instrumentation we
have a .text section over twice the size of the maximum branch range and
the instrumented code generation containing many examples of the erratum
sequence. The combination of Thunks and many erratum sequences causes
finalizeAddressDependentContent() to not converge. We end up with:
start
- Thunk Creation (disturbs addresses after thunks, creating more patches)
- Patch Creation (disturbs addresses after patches, creating more thunks)
- goto start

In most images with few thunks and patches the mutual disturbance does not
cause convergence problems. As the .text size and number of patches go up
the risk increases.

A way to prevent the thunk creation from interfering with patch creation is
to round up the size of the thunks to a 4KiB boundary when the
erratum patch is enabled. As the erratum sequence only triggers when an
instruction sequence starts at 0xff8 or 0xffc modulo (4 KiB) by making the
thunks not affect addresses modulo (4 KiB) we prevent thunks from
interfering with the patch.

The patches themselves could be aggregated in the same way that Thunks are
within ThunkSections and we could round up the size in the same way. This
would reduce the number of patches created in a .text section size >
128 MiB but would not likely help convergence problems.

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

fixes (remaining part of) pr44071, other part in D71242

4 years ago[LLD][ELF][AArch64][ARM] Add missing classof to patch sections.
Peter Smith [Mon, 9 Dec 2019 11:07:54 +0000 (11:07 +0000)]
[LLD][ELF][AArch64][ARM] Add missing classof to patch sections.

The code to insert patch section merges them with a comparison function that
uses logic of the form:
return (isa<PatchSection>(a) && !isa<PatchSection>(b));
If the PatchSections don't implement classof this check fails if b is also
a SyntheticSection. This can result in the patches being out of range if
the SyntheticSection is big, for example a ThunkSection with lots of thunks.

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

fixes (part of) pr44071

4 years ago[lldb] Don't search the metadata map three times when retrieving metadata
Raphael Isemann [Wed, 11 Dec 2019 13:50:34 +0000 (14:50 +0100)]
[lldb] Don't search the metadata map three times when retrieving metadata

HasMetadata checks if our metadata map knows the given object. GetMetadata
also does this check and then does another search to actually retrieve
the value. This can all just be one lookup.

4 years agoRevert "[AArch64][SVE] Implement intrinsics for non-temporal loads & stores"
Kerry McLaughlin [Wed, 11 Dec 2019 13:48:10 +0000 (13:48 +0000)]
Revert "[AArch64][SVE] Implement intrinsics for non-temporal loads & stores"

This reverts commit 3f5bf35f868d1e33cd02a5825d33ed4675be8cb1 as it was
causing build failures in llvm-clang-x86_64-expensive-checks:

http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-debian/builds/392
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-ubuntu/builds/1045

4 years ago[AArch64] Teach Load/Store optimizier to rename store operands for pairing.
Florian Hahn [Wed, 11 Dec 2019 09:59:18 +0000 (09:59 +0000)]
[AArch64] Teach Load/Store optimizier to rename store operands for pairing.

In some cases, we can rename a store operand, in order to enable pairing
of stores.  For store pairs, that cannot be merged because the first
tored register is defined in between the second store, we try to find
suitable rename register.

First, we check if we can rename the given register:

1. The first store register must be killed at the store, which means we
   do not have to rename instructions after the first store.
2. We scan backwards from the first store, to find the definition of the
   stored register and check all uses in between are renamable. Along
   they way, we collect the minimal register classes of the uses for
   overlapping (sub/super)registers.

Second, we try to find an available register from the minimal physical
register class of the original register. A suitable register must not be

1. defined before FirstMI
2. between the previous definition of the register to rename
3. a callee saved register.

We use KILL flags to clear defined registers while scanning from the
beginning to the end of the block.

This triggers quite often, here are the top changes for MultiSource,
SPEC2000, SPEC2006 compiled with -O3 for iOS:

Metric: aarch64-ldst-opt.NumPairCreated

Program                                        base     patch    diff
 test-suite...nch/fourinarow/fourinarow.test     2.00    39.00   1850.0%
 test-suite...s/ASC_Sequoia/IRSmk/IRSmk.test    46.00    80.00   73.9%
 test-suite...chmarks/Olden/power/power.test    70.00    96.00   37.1%
 test-suite...cations/hexxagon/hexxagon.test    29.00    39.00   34.5%
 test-suite...nchmarks/McCat/05-eks/eks.test   100.00   132.00   32.0%
 test-suite.../Trimaran/enc-rc4/enc-rc4.test    46.00    59.00   28.3%
 test-suite...T2006/473.astar/473.astar.test   160.00   200.00   25.0%
 test-suite.../Trimaran/enc-md5/enc-md5.test     8.00    10.00   25.0%
 test-suite...telecomm-gsm/telecomm-gsm.test   113.00   139.00   23.0%
 test-suite...ediabench/gsm/toast/toast.test   113.00   139.00   23.0%
 test-suite...Source/Benchmarks/sim/sim.test    91.00   111.00   22.0%
 test-suite...C/CFP2000/179.art/179.art.test    41.00    49.00   19.5%
 test-suite...peg2/mpeg2dec/mpeg2decode.test   245.00   279.00   13.9%
 test-suite...marks/Olden/health/health.test    16.00    18.00   12.5%
 test-suite...ks/Prolangs-C/cdecl/cdecl.test    90.00   101.00   12.2%
 test-suite...fice-ispell/office-ispell.test    91.00   100.00    9.9%
 test-suite...oxyApps-C/miniGMG/miniGMG.test   430.00   465.00    8.1%
 test-suite...lowfish/security-blowfish.test    39.00    42.00    7.7%
 test-suite.../Applications/spiff/spiff.test    42.00    45.00    7.1%
 test-suite...arks/mafft/pairlocalalign.test   2473.00  2646.00   7.0%
 test-suite.../VersaBench/ecbdes/ecbdes.test    29.00    31.00    6.9%
 test-suite...nch/beamformer/beamformer.test   220.00   235.00    6.8%
 test-suite...CFP2000/177.mesa/177.mesa.test   2110.00  2252.00   6.7%
 test-suite...ve-susan/automotive-susan.test   109.00   116.00    6.4%
 test-suite...s-C/unix-smail/unix-smail.test    65.00    69.00    6.2%
 test-suite...CI_Purple/SMG2000/smg2000.test   1194.00  1265.00   5.9%
 test-suite.../Benchmarks/nbench/nbench.test   472.00   500.00    5.9%
 test-suite...oxyApps-C/miniAMR/miniAMR.test   248.00   262.00    5.6%
 test-suite...quoia/CrystalMk/CrystalMk.test    18.00    19.00    5.6%
 test-suite...rks/tramp3d-v4/tramp3d-v4.test   7331.00  7710.00   5.2%
 test-suite.../Benchmarks/Bullet/bullet.test   5651.00  5938.00   5.1%
 test-suite...ternal/HMMER/hmmcalibrate.test   750.00   788.00    5.1%
 test-suite...T2006/456.hmmer/456.hmmer.test   764.00   802.00    5.0%
 test-suite...ications/JM/ldecod/ldecod.test   1028.00  1079.00   5.0%
 test-suite...CFP2006/444.namd/444.namd.test   1368.00  1434.00   4.8%
 test-suite...marks/7zip/7zip-benchmark.test   4471.00  4685.00   4.8%
 test-suite...6/464.h264ref/464.h264ref.test   3122.00  3271.00   4.8%
 test-suite...pplications/oggenc/oggenc.test   1497.00  1565.00   4.5%
 test-suite...T2000/300.twolf/300.twolf.test   742.00   774.00    4.3%
 test-suite.../Prolangs-C/loader/loader.test    24.00    25.00    4.2%
 test-suite...0.perlbench/400.perlbench.test   1983.00  2058.00   3.8%
 test-suite...ications/JM/lencod/lencod.test   4612.00  4785.00   3.8%
 test-suite...yApps-C++/PENNANT/PENNANT.test   995.00   1032.00   3.7%
 test-suite...arks/VersaBench/dbms/dbms.test    54.00    56.00    3.7%

Reviewers: efriedma, thegameg, samparker, dmgreen, paquette, evandro

Reviewed By: paquette

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

4 years agoRemoving an unused selection field from a diagnostic; NFC.
Aaron Ballman [Wed, 11 Dec 2019 13:48:17 +0000 (08:48 -0500)]
Removing an unused selection field from a diagnostic; NFC.

4 years ago[test][llvm-dwarfdump] Add missing testing for some --debug-* options
James Henderson [Wed, 11 Dec 2019 13:41:00 +0000 (13:41 +0000)]
[test][llvm-dwarfdump] Add missing testing for some --debug-* options

A number of the --debug-* options in llvm-dwarfdump are not particularly
well tested. In some cases, the option is only tested as part of testing
another feature, or a specific part of the section that the options
dump. This change adds four new tests to address some of these holes. It
is not aiming to address every hole however.

I kept the --debug-line switch test separate to X86/brief.s because the
latter only considers the parts of the line table that are affected by
verbose printing, thus missing out things like the header and different
values for things like the Line, Column etc registers.

Reviewed by: JDevlieghere

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

4 years ago[Alignment][NFC] Introduce Align in IRBuilder
Guillaume Chatelet [Wed, 11 Dec 2019 11:18:59 +0000 (12:18 +0100)]
[Alignment][NFC] Introduce Align in IRBuilder

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

Reviewers: courbet

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[DebugInfo] Fix printing of DW_LNS_set_isa
James Henderson [Wed, 11 Dec 2019 12:14:11 +0000 (12:14 +0000)]
[DebugInfo] Fix printing of DW_LNS_set_isa

The Isa register is a uint8_t, but at least on Windows this is
internally an unsigned char, which meant that prior to this patch it got
formatted as an ASCII character, rather than a decimal number. This
patch fixes this by casting it to a uint64_t before printing. I did it
this way instead of using a uint8_t formatter because a) it is simpler,
and b) it allows us to change the internal type of Isa in the future
without this code breaking.

I also took the opportunity to test the printing of the other standard
opcodes.

Reviewed by: probinson

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

4 years ago[lldb][NFC] Remove dead metadata code in ClangASTSourceProxy
Raphael Isemann [Wed, 11 Dec 2019 13:17:39 +0000 (14:17 +0100)]
[lldb][NFC] Remove dead metadata code in ClangASTSourceProxy

4 years agoRollback assumeAligned in MemorySanitizer
Guillaume Chatelet [Wed, 11 Dec 2019 10:00:32 +0000 (11:00 +0100)]
Rollback assumeAligned in MemorySanitizer

Summary: Rollback of parts of D71213. After digging more into the code I think we should leave 0 when creating the instructions (CreateMemcpy, CreateMaskedStore, CreateMaskedLoad). It's probably fine for MemorySanitizer because Alignement is resolved but I'm having a hard time convincing myself it has no impact at all (although tests are passing).

Reviewers: courbet

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[Analyzer] Iterator Modeling: Print Container Data and Iterator Positions when printi...
Adam Balogh [Mon, 2 Dec 2019 18:37:37 +0000 (19:37 +0100)]
[Analyzer] Iterator Modeling: Print Container Data and Iterator Positions when printing the Program State

Debugging the Iterator Modeling checker or any of the iterator checkers
is difficult without being able to see the relations between the
iterator variables and their abstract positions, as well as the abstract
symbols denoting the begin and the end of the container.

This patch adds the checker-specific part of the Program State printing
to the Iterator Modeling checker.

4 years ago[lldb][NFC] Remove ClangExternalASTSourceCommon::g_TotalSizeOfMetadata
Raphael Isemann [Wed, 11 Dec 2019 12:53:39 +0000 (13:53 +0100)]
[lldb][NFC] Remove ClangExternalASTSourceCommon::g_TotalSizeOfMetadata

Turns out this counter is doing literally nothing beside counting.

4 years ago[AArch64][SVE] Add DAG combine rules for gather loads and sext/zext
Andrzej Warzynski [Mon, 25 Nov 2019 13:54:47 +0000 (13:54 +0000)]
[AArch64][SVE] Add DAG combine rules for gather loads and sext/zext

Summary:
These changes allow us to support sign-extending gather loads with the
exisiting intrinsics (i.e. @llvm.aarch64.sve.ld1.gather.*).

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

Reviewed By: sdesmalen

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

Tags: #llvm

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

4 years ago[SYCL] Add support for auxiliary triple specification to Frontend
Alexey Bader [Tue, 10 Dec 2019 13:52:58 +0000 (16:52 +0300)]
[SYCL] Add support for auxiliary triple specification to Frontend

Summary:
Add host predefined macros to compilation for SYCL device, which is
required for pre-processing host specific includes (e.g. system
headers).

Reviewers: ABataev, jdoerfert

Subscribers: ebevhan, Anastasia, cfe-commits, keryell, Naghasan, Fznamznon

Tags: #clang

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

Signed-off-by: Alexey Bader <alexey.bader@intel.com>
4 years agoCodeGen: Allow annotations on globals in non-zero address space
Nicolai Hähnle [Wed, 5 Jun 2019 19:35:30 +0000 (21:35 +0200)]
CodeGen: Allow annotations on globals in non-zero address space

Summary:
Attribute annotations are recorded in a special global composite variable
that points to annotation strings and the annotated objects.

As a restriction of the LLVM IR type system, those pointers are all
pointers to address space 0, so let's insert an addrspacecast when the
annotated global is in a non-0 address space.

Since this addrspacecast is only reachable from the global annotations
object, this should allow us to represent annotations on all globals
regardless of which addrspacecasts are usually legal for the target.

Reviewers: rjmccall

Subscribers: cfe-commits

Tags: #clang

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

4 years agogn build: Merge afb13afcf22
LLVM GN Syncbot [Wed, 11 Dec 2019 12:07:57 +0000 (12:07 +0000)]
gn build: Merge afb13afcf22

4 years ago[ARM][MVE] Factor out an IntrinsicMX multiclass.
Simon Tatham [Wed, 11 Dec 2019 12:07:16 +0000 (12:07 +0000)]
[ARM][MVE] Factor out an IntrinsicMX multiclass.

Summary:
The ACLE intrinsics for MVE contain a lot of pairs of functions with
`_m` and `_x` in the name, wrapping a predicated MVE instruction which
only partially overwrites its output register. They have the common
pattern that the `_m` variant takes an initial argument called
'inactive', of the same type as the return value, supplying the input
value of the output register, so that lanes disabled by the
predication will be taken from that parameter; the `_x` variant omits
that initial argument, and simply sets it to undef.

That common pattern is simple enough to wrap into a multiclass, which
should save a lot of effort in setting up all the rest of the `_x`
variants. In this commit I introduce `multiclass IntrinsicMX` in
`arm_mve_defs.td`, and convert existing generation of m/x pairs to use
it.

This allows me to remove the `PredicatedImmediateVectorShift`
multiclass (from D71065) completely, because the new multiclass makes
it so much simpler that it's not worth bothering to define it at all.

Reviewers: MarkMurrayARM, miyuki

Reviewed By: MarkMurrayARM, miyuki

Subscribers: kristof.beyls, dmgreen, cfe-commits

Tags: #clang

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

4 years ago[llvm-readobj][llvm-readelf] - Remove excessive empty lines when reporting errors...
Georgii Rymar [Tue, 10 Dec 2019 10:37:00 +0000 (13:37 +0300)]
[llvm-readobj][llvm-readelf] - Remove excessive empty lines when reporting errors and warnings.

After recent changes it is now seems possible to get rid of
printing '\n' before each error and warning. This makes the output
cleaner.

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

4 years agoRevert "Reland [AArch64][MachineOutliner] Return address signing for outlined functions"
Oliver Stannard [Wed, 11 Dec 2019 12:03:12 +0000 (12:03 +0000)]
Revert "Reland [AArch64][MachineOutliner] Return address signing for outlined functions"

This reverts commit cec2d5c17457722113580251c8a045fa9aca9b1b.

Reverting because this is still creating outlined functions with return
address signing instructions with mismatches SP values. For example:

  int *volatile v;

  void foo(int x) {
    int a[x];
    v = &a[0];
    v = &a[0];
    v = &a[0];
    v = &a[0];
    v = &a[0];
    v = &a[0];
  }

  void bar(int x) {
    int a[x];
    v = 0;
    v = &a[0];
    v = &a[0];
    v = &a[0];
    v = &a[0];
    v = &a[0];
  }

This generates these two outlined functions, both of which modify SP
between the paciasp and retaa instructions:

  $ clang --target=aarch64-arm-none-eabi -march=armv8.3-a -c test2.c -o - -S -Oz -mbranch-protection=pac-ret+leaf
  ...
  OUTLINED_FUNCTION_0:                    // @OUTLINED_FUNCTION_0
          .cfi_sections .debug_frame
          .cfi_startproc
  // %bb.0:
          paciasp
          .cfi_negate_ra_state
          mov     w8, w0
          lsl     x8, x8, #2
          add     x8, x8, #15             // =15
          mov     x9, sp
          and     x8, x8, #0x7fffffff0
          sub     x8, x9, x8
          mov     x29, sp
          mov     sp, x8
          adrp    x9, v
          retaa
  ...
  OUTLINED_FUNCTION_1:                    // @OUTLINED_FUNCTION_1
          .cfi_startproc
  // %bb.0:
          paciasp
          .cfi_negate_ra_state
          str     x8, [x9, :lo12:v]
          str     x8, [x9, :lo12:v]
          str     x8, [x9, :lo12:v]
          str     x8, [x9, :lo12:v]
          str     x8, [x9, :lo12:v]
          mov     sp, x29
          retaa

4 years ago[TableGen] Add bang-operators !getop and !setop.
Simon Tatham [Wed, 11 Dec 2019 12:02:15 +0000 (12:02 +0000)]
[TableGen] Add bang-operators !getop and !setop.

Summary:
These allow you to get and set the operator of a dag node, without
affecting its list of arguments.

`!getop` is slightly fiddly because in many contexts you need its
return value to have a static type more specific than 'any record'. It
works to say `!cast<BaseClass>(!getop(...))`, but it's cumbersome, so
I made `!getop` take an optional type suffix itself, so that can be
written as the shorter `!getop<BaseClass>(...)`.

Reviewers: hfinkel, nhaehnle

Reviewed By: nhaehnle

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[Analyzer][NFC] Iterator Checkers - Separate iterator modeling and the actual checkers
Adam Balogh [Fri, 15 Nov 2019 11:15:36 +0000 (12:15 +0100)]
[Analyzer][NFC] Iterator Checkers - Separate iterator modeling and the actual checkers

A monolithic checker class is hard to maintain. This patch splits it up
into a modeling part, the three checkers and a debug checker. The common
functions are moved into a library.

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

4 years ago[clang-tidy] Link shared library clangTidyOpenMPModule to library LLVMFrontendOpenMP
Adam Balogh [Wed, 11 Dec 2019 11:34:42 +0000 (12:34 +0100)]
[clang-tidy] Link shared library clangTidyOpenMPModule to library LLVMFrontendOpenMP

Building shared libs was broken, it is fixed now.

4 years ago[AArch64][SVE] Implement intrinsics for non-temporal loads & stores
Kerry McLaughlin [Wed, 11 Dec 2019 10:13:32 +0000 (10:13 +0000)]
[AArch64][SVE] Implement intrinsics for non-temporal loads & stores

Summary:
Adds the following intrinsics:
  - llvm.aarch64.sve.ldnt1
  - llvm.aarch64.sve.stnt1

This patch creates masked loads and stores with the
MONonTemporal flag set when used with the intrinsics above.

Reviewers: sdesmalen, paulwalker-arm, dancgr, mgudim, efriedma, rengolin

Reviewed By: efriedma

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

Tags: #llvm

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

4 years ago[PowerPC][NFC] add test case for lwa - loop ds form prep
czhengsz [Wed, 11 Dec 2019 10:58:18 +0000 (05:58 -0500)]
[PowerPC][NFC] add test case for lwa - loop ds form prep

4 years ago[Clang] Pragma vectorize_width() implies vectorize(enable)
Sjoerd Meijer [Wed, 11 Dec 2019 10:37:40 +0000 (10:37 +0000)]
[Clang] Pragma vectorize_width() implies vectorize(enable)

Let's try this again; this has been reverted/recommited a few times. Last time
this got reverted because for this loop:

  void a() {
    #pragma clang loop vectorize(disable)
    for (;;)
      ;
  }

vectorisation was incorrectly enabled and the vectorize.enable metadata was set
due to a logic error. But with this fixed, we now imply vectorisation when:

1) vectorisation is enabled, which means: VectorizeWidth > 1,
2) and don't want to add it when it is disabled or enabled, otherwise we would
   be incorrectly setting it or duplicating the metadata, respectively.

This should fix PR27643.

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

4 years ago[lldb][NFC] Cleanup includes in FormatManagerTests.cpp
Raphael Isemann [Wed, 11 Dec 2019 10:17:34 +0000 (11:17 +0100)]
[lldb][NFC] Cleanup includes in FormatManagerTests.cpp

4 years ago[ARM][LowOverheadLoops] Remove dead loop update instructions.
Sjoerd Meijer [Wed, 11 Dec 2019 10:11:48 +0000 (10:11 +0000)]
[ARM][LowOverheadLoops] Remove dead loop update instructions.

After creating a low-overhead loop, the loop update instruction was still
lingering around hurting performance. This removes dead loop update
instructions, which in our case are mostly SUBS instructions.

To support this, some helper functions were added to MachineLoopUtils and
ReachingDefAnalysis to analyse live-ins of loop exit blocks and find uses
before a particular loop instruction, respectively.

This is a first version that removes a SUBS instruction when there are no other
uses inside and outside the loop block, but there are some more interesting
cases in test/CodeGen/Thumb2/LowOverheadLoops/mve-tail-data-types.ll which
shows that there is room for improvement. For example, we can't handle this
case yet:

    ..
    dlstp.32  lr, r2
  .LBB0_1:
    mov r3, r2
    subs  r2, #4
    vldrh.u32 q2, [r1], #8
    vmov  q1, q0
    vmla.u32  q0, q2, r0
    letp  lr, .LBB0_1
  @ %bb.2:
    vctp.32 r3
    ..

which is a lot more tricky because r2 is not only used by the subs, but also by
the mov to r3, which is used outside the low-overhead loop by the vctp
instruction, and that requires a bit of a different approach, and I will follow
up on this.

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

4 years ago[ARM][MVE] Add intrinsics for immediate shifts. (reland)
Simon Tatham [Wed, 11 Dec 2019 10:04:14 +0000 (10:04 +0000)]
[ARM][MVE] Add intrinsics for immediate shifts. (reland)

This adds the family of `vshlq_n` and `vshrq_n` ACLE intrinsics, which
shift every lane of a vector left or right by a compile-time
immediate. They mostly work by expanding to the IR `shl`, `lshr` and
`ashr` operations, with their second operand being a vector splat of
the immediate.

There's a fiddly special case, though. ACLE specifies that the
immediate in `vshrq_n` can take values up to //and including// the bit
size of the vector lane. But LLVM IR thinks that shifting right by the
full size of the lane is UB, and feels free to replace the `lshr` with
an `undef` half way through the optimization pipeline. Hence, to keep
this legal in source code, I have to detect it at codegen time.
Logical (unsigned) right shifts by the element size are handled by
simply emitting the zero vector; arithmetic ones are converted into a
shift of one bit less, which will always give the same output.

In order to do that check, I also had to enhance the tablegen
MveEmitter so that it can cope with converting a builtin function's
operand into a bare integer to pass to a code-generating subfunction.
Previously the only bare integers it knew how to handle were flags
generated from within `arm_mve.td`.

Reviewers: dmgreen, miyuki, MarkMurrayARM, ostannard

Reviewed By: dmgreen, MarkMurrayARM

Subscribers: echristo, hokein, rdhindsa, kristof.beyls, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

4 years ago[lldb/DWARF] Add support for DW_AT_loclists_base&DW_FORM_loclistx
Pavel Labath [Fri, 22 Nov 2019 13:42:28 +0000 (14:42 +0100)]
[lldb/DWARF] Add support for DW_AT_loclists_base&DW_FORM_loclistx

Summary:
This adds support for DWARF5 location lists which are specified
indirectly, via an index into the debug_loclists offset table. This
includes parsing the DW_AT_loclists_base attribute which determines the
location of this offset table, and support for new form DW_FORM_loclistx
which is used in conjuction with DW_AT_location to refer to the location
lists in this way.

The code uses the llvm class to parse the offset information, and I've
also tried to structure it similarly to how the relevant llvm
functionality works.

Reviewers: JDevlieghere, aprantl, clayborg

Subscribers: lldb-commits

Tags: #lldb

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

4 years ago[NFC] Correct the example in the comments of JSON.h to avoid mislead
QingShan Zhang [Wed, 11 Dec 2019 10:00:05 +0000 (10:00 +0000)]
[NFC] Correct the example in the comments of JSON.h to avoid mislead
user

4 years ago[ARM][TypePromotion] Enable by default
Sam Parker [Wed, 11 Dec 2019 09:55:40 +0000 (09:55 +0000)]
[ARM][TypePromotion] Enable by default

Enable the TypePromotion pass my default (again).

This patch was originally committed in 393dacacf7e7.
This patch was reverted in a38396939c54.

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

4 years ago[NFC][PowerPC] Remove the dead conditions in the if(cond)
QingShan Zhang [Wed, 11 Dec 2019 09:57:06 +0000 (09:57 +0000)]
[NFC][PowerPC] Remove the dead conditions in the if(cond)

4 years ago[MCRegInfo] Add sub_and_superregs_inclusive iterator range.
Florian Hahn [Wed, 11 Dec 2019 09:38:09 +0000 (09:38 +0000)]
[MCRegInfo] Add sub_and_superregs_inclusive iterator range.

Reviewers: evandro, qcolombet, paquette, MatzeB, arsenm

Reviewed By: paquette

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

4 years ago[clangd] Deduplicate refs from index for cross-file rename.
Haojian Wu [Tue, 10 Dec 2019 21:15:29 +0000 (22:15 +0100)]
[clangd] Deduplicate refs from index for cross-file rename.

Summary:
If the index returns duplicated refs, it will trigger the assertion in
BuildRenameEdit (we expect the processing position is always larger the
the previous one, but it is not true if we have duplication), and also
breaks our heuristics.

This patch make the code robost enough to handle duplications, also
save some cost of redundnat llvm::sort.

Though clangd's index doesn't return duplications, our internal index
kythe will.

Reviewers: ilya-biryukov

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

Tags: #clang

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

4 years ago[AArch64][SVE] Move TableGen class definitions for gather loads (NFC)
Andrzej Warzynski [Wed, 11 Dec 2019 08:58:01 +0000 (08:58 +0000)]
[AArch64][SVE] Move TableGen class definitions for gather loads (NFC)

Move 2 intrinsic class definitions so that they're all clustered in
one place.

Patch submitted to test commit access.

4 years ago[PowerPC] [CodeGen] Use MachineBranchProbabilityInfo in EarlyIfPredicator to avoid...
shkzhang [Wed, 11 Dec 2019 09:46:00 +0000 (04:46 -0500)]
[PowerPC] [CodeGen] Use MachineBranchProbabilityInfo in EarlyIfPredicator to avoid the potential bug

Summary:
In the function `EarlyIfPredicator::shouldConvertIf()`, we call
`TII->isProfitableToIfCvt()` with `BranchProbability::getUnknown()`, it may
cause the potential assertion error for those hook which use `BranchProbability`
in `isProfitableToIfCvt()`, for example `SystemZ`.
`SystemZ` use `Probability < BranchProbability(1, 8))` in the function
`SystemZInstrInfo::isProfitableToIfCvt()`, if we call this function with
`BranchProbability::getUnknown()`, it will cause assertion error.

This patch is to fix the potential bug.

Reviewed By: ThomasRaoux

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

4 years ago[LiveRegUnits] Add phys_regs_and_masks iterator range (NFC).
Florian Hahn [Wed, 11 Dec 2019 09:27:01 +0000 (09:27 +0000)]
[LiveRegUnits] Add phys_regs_and_masks iterator range (NFC).

This iterator range just includes physical registers and register masks,
which are interesting when dealing with register liveness.

Reviewers: evandro, t.p.northover, paquette, MatzeB, arsenm

Reviewed By: paquette

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

4 years ago[llvm-readelf] - Do no print an empty symbol version as "<corrupt>"
Georgii Rymar [Tue, 10 Dec 2019 09:44:05 +0000 (12:44 +0300)]
[llvm-readelf] - Do no print an empty symbol version as "<corrupt>"

It is discussed here https://reviews.llvm.org/D71118#inline-643172

Currently when a version is empty, llvm-readelf prints:
"000:   0 (*local*)       2 (<corrupt>)"

But GNU readelf does not treat empty section as corrupt.
There is no sense in having empty versions anyways it seems, but
this change is for consistency with GNU.

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

4 years ago[DWARF5][SplitDwarf] Set default state for -fsplit-dwarf-inlining to be false.
Alexey Lapshin [Tue, 10 Dec 2019 20:41:07 +0000 (23:41 +0300)]
[DWARF5][SplitDwarf] Set default state for -fsplit-dwarf-inlining to be false.

    The -fsplit-dwarf-inlining option does not conform to DWARF5 standard.
It creates children for Skeleton compilation unit. We need default behavior
to be DWARF5 compatible. Thus set default state for -fsplit-dwarf-inlining
into "false".

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

4 years ago[CodeComplete] Fix a crash in preferred type and signature help
Ilya Biryukov [Wed, 11 Dec 2019 08:38:14 +0000 (09:38 +0100)]
[CodeComplete] Fix a crash in preferred type and signature help

Summary: Null type pointers could be dereferenced in some cases.

Reviewers: kadircet, sammccall

Reviewed By: sammccall

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[Alignment][NFC] Introduce Align in SROA
Guillaume Chatelet [Tue, 10 Dec 2019 16:09:39 +0000 (17:09 +0100)]
[Alignment][NFC] Introduce Align in SROA

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

Reviewers: courbet

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[llvm-readobj] Fix/improve printing WinEH unwind info for linked PE images
Martin Storsjö [Mon, 25 Nov 2019 13:26:13 +0000 (15:26 +0200)]
[llvm-readobj] Fix/improve printing WinEH unwind info for linked PE images

ARMWinEHPrinter was already designed to handle linked PE images
(since d2941b43f40d), but resolving symbols didn't consistently
take the image base into account (as linked images seldom have a
symbol table, except for in MinGW setups).

Win64EHDumper wasn't really designed to handle linked images (it would
crash if executed on such a file), but a few concepts (getSymbol,
taking a virtual address instead of a relocation, and
getSectionContaining for finding the section containing a certain
virtual address) can be borrowed from ARMWinEHPrinter.

Adjust ARMWinEHPrinter to print the address of the exception handler
routine as a VA instead of an RVA, consistently with other addresses
in the same printout, and make Win64EHDumper print addresses similarly
for image cases.

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

4 years ago[PowerPC] Exploitate the Vector Integer Average Instructions
QingShan Zhang [Wed, 11 Dec 2019 07:25:57 +0000 (07:25 +0000)]
[PowerPC] Exploitate the Vector Integer Average Instructions

PowerPC has instruction to do the semantics of this piece of code:

vector int foo(vector int m, vector int n) {
  return (m + n + 1) >> 1;
}
This patch is adding the match rule to select it.

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

4 years ago[LegalizeTypes] Remove manual worklist management from SoftenFloatRes_FP_EXTEND.
Craig Topper [Wed, 11 Dec 2019 06:18:38 +0000 (22:18 -0800)]
[LegalizeTypes] Remove manual worklist management from SoftenFloatRes_FP_EXTEND.

I think this is no longer needed. The system should take care
of legalizing any new nodes that are added. I think this might
have been needed prior to r371709 or r307053.

4 years ago[ELF] Move a computeIsPreemptible() pass into ICF. NFC
Fangrui Song [Wed, 11 Dec 2019 05:37:57 +0000 (21:37 -0800)]
[ELF] Move a computeIsPreemptible() pass into ICF. NFC

Address post-commit review for D71163.

Reviewed By: ruiu

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

4 years ago[SanitizerCommon] Reduce wasting memory in LowLevelAllocator.
Igor Kudrin [Tue, 10 Dec 2019 14:44:17 +0000 (21:44 +0700)]
[SanitizerCommon] Reduce wasting memory in LowLevelAllocator.

MmapOrDie allocates memory multiple to page size. LowLevelAllocator
should use all that memory for the internal buffer because there are
chances that subsequent requests may be small enough to fit in that
space.

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

4 years ago[cxx_status] Re-add missing cell.
Richard Smith [Wed, 11 Dec 2019 03:56:07 +0000 (19:56 -0800)]
[cxx_status] Re-add missing cell.

4 years ago[c++20] Implement P1946R0: allow defaulted comparisons to take their
Richard Smith [Wed, 11 Dec 2019 03:50:26 +0000 (19:50 -0800)]
[c++20] Implement P1946R0: allow defaulted comparisons to take their
arguments by value.

4 years ago[c++20] Delete defaulted comparison functions if they would invoke an
Richard Smith [Wed, 11 Dec 2019 03:20:46 +0000 (19:20 -0800)]
[c++20] Delete defaulted comparison functions if they would invoke an
inaccessible comparison function.

4 years agoChange the mtc Makefile to check $SDKROOT value instead
Jason Molenda [Wed, 11 Dec 2019 02:46:24 +0000 (18:46 -0800)]
Change the mtc Makefile to check $SDKROOT value instead
of depending on it being set in the environment.  Fred's change
from October assumed that SDKROOT was set in the environment
so that 'xcrun --show-sdk-path' would print the path.  If it
was passed in as a Makefile variable, it wouldn't be set in
the environment and xcrun --show-sdk-path would always show the
macOS SDK path.  When running the lldb testsuite against an ios
device via lit, this seems to be the case.

4 years agoRevert "[DebugInfo] Refactored macro related generation, added a test case for macinf...
Nico Weber [Wed, 11 Dec 2019 02:32:30 +0000 (21:32 -0500)]
Revert "[DebugInfo] Refactored macro related generation, added a test case for macinfo.dwo emission."

This reverts commit 307f60a1a3ff04313a75e2fc11bc14df4fc2ffb8.

DebugInfo/X86/debug-macinfo-split-dwarf.ll fails on Windows:

Command Output (stdout):
--
$ ":" "RUN: at line 1"
$ "c:\src\llvm-project\out\gn\bin\llc.exe" "-mtriple=x86_64-pc-windows-gnu" "-O0" "-split-dwarf-file=foo.dwo" "-filetype=obj"
Assertion failed: Section && "Cannot switch to a null section!", file ../../llvm/lib/MC/MCStreamer.cpp, line 1103
Stack dump:
0. Program arguments: c:\src\llvm-project\out\gn\bin\llc.exe -mtriple=x86_64-pc-windows-gnu -O0 -split-dwarf-file=foo.dwo -filetype=obj

4 years agoFix mishandling of invalid-but-non-empty nested name specifiers in name
Richard Smith [Wed, 11 Dec 2019 01:53:15 +0000 (17:53 -0800)]
Fix mishandling of invalid-but-non-empty nested name specifiers in name
classification.

We were accidentally treating invalid scope specs as being empty,
resulting in our trying to form an ADL-only call with a qualified
callee, which tripped up an assert later on.

4 years ago[llvm-ar] Improve tool selection heuristic
Fangrui Song [Tue, 10 Dec 2019 21:45:02 +0000 (13:45 -0800)]
[llvm-ar] Improve tool selection heuristic

If llvm-ar is installed at arm-pokymllib32-linux-gnueabi-llvm-ar, it may
think it is llvm-lib due to the "lib" substring.

Improve the heuristic to make all the following work as intended:

llvm-ar-9 (llvm-9 package on Debian)
llvm-ranlib.exe
Lib.exe (reported by D44808)
arm-pokymllib32-linux-gnueabi-llvm-ar (reported by D71030)

Reviewed By: raj.khem, rupprecht

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

4 years ago[X86] Split v64i1 arguments into 2 v32i1s that will be promoted to v32i8 under min...
Craig Topper [Wed, 11 Dec 2019 01:02:38 +0000 (17:02 -0800)]
[X86] Split v64i1 arguments into 2 v32i1s that will be promoted to v32i8 under min-legal-vector-width=256

This is an improvement to 88dacbd43625cf7aad8a01c0c3b92142c4dc0970

4 years agoReland "Enable `-funwind-tables` flag when building libunwind"
Sergej Jaskiewicz [Fri, 6 Dec 2019 14:26:35 +0000 (17:26 +0300)]
Reland "Enable `-funwind-tables` flag when building libunwind"

Summary:
Relands https://reviews.llvm.org/D70815.

The original commit set `CMAKE_TRY_COMPILE_TARGET_TYPE` to
`STATIC_LIBRARY` globally in libunwind/CMakeLists.txt, which effectively
disabled the linking step in CMake checks.

This broke some builds (see 938c70b86c7d2165f8c28d5700e9c1ac1263307e).

Here we set CMAKE_TRY_COMPILE_TARGET_TYPE to
STATIC_LIBRARY only when checking for presence of the `-funwind-tables`
flag, and then set it back to the original value so it doesn't affect
other checks.

Reviewers: mstorsjo, jfb

Subscribers: mgorny, christof, libcxx-commits

Tags: #libc

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

4 years ago[c++20] Implement P1185R2 (as modified by P2002R0).
Richard Smith [Wed, 11 Dec 2019 00:45:02 +0000 (16:45 -0800)]
[c++20] Implement P1185R2 (as modified by P2002R0).

For each defaulted operator<=> in a class that doesn't explicitly
declare any operator==, also inject a matching implicit defaulted
operator==.

4 years ago[llvm][MIRVRegNamerUtil] Adding hashing against MachineInstr flags.
Puyan Lotfi [Tue, 10 Dec 2019 09:40:36 +0000 (04:40 -0500)]
[llvm][MIRVRegNamerUtil] Adding hashing against MachineInstr flags.

Now, flags will result in differing hashes for a given MI. In effect, if
you have two instructions with everything identical except for their
flags then you should get two different hashes and fewer collisions.

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

4 years agoNFC: Get rid of an unused parameter to CGObjCMac::EmitSelectorAddr.
Erik Pilkington [Wed, 11 Dec 2019 00:43:39 +0000 (16:43 -0800)]
NFC: Get rid of an unused parameter to CGObjCMac::EmitSelectorAddr.

4 years agoRevert "[analyzer] Keep track of escaped locals"
Gabor Horvath [Wed, 11 Dec 2019 00:42:03 +0000 (16:42 -0800)]
Revert "[analyzer] Keep track of escaped locals"

It was a step in the right direction but it is not clear how can this
fit into the checker API at this point. The pre-escape happens in the
analyzer core and the checker has no control over it. If the checker
is not interestd in a pre-escape it would need to do additional work
on each escape to check if the escaped symbol is originated from an
"uninteresting" pre-escaped memory region. In order to keep the
checker API simple we abandoned this solution for now.

We will reland this once we have a better answer for what to do on the
checker side.

This reverts commit f3a28202ef58551db15818f8f51afd21e0f3e231.

4 years ago[FPEnv][X86] Constrained FCmp intrinsics enabling on X86
Wang, Pengfei [Wed, 4 Dec 2019 00:39:21 +0000 (08:39 +0800)]
[FPEnv][X86] Constrained FCmp intrinsics enabling on X86

Summary: This is a follow up of D69281, it enables the X86 backend support for the FP comparision.

Reviewers: uweigand, kpn, craig.topper, RKSimon, cameron.mcinally, andrew.w.kaylor

Subscribers: hiraditya, llvm-commits, annita.zhang, LuoYuanke, LiuChen3

Tags: #llvm

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

4 years ago[libc++] Hide some functions and types in <future> and <thread> as hidden
Louis Dionne [Tue, 10 Dec 2019 23:00:42 +0000 (18:00 -0500)]
[libc++] Hide some functions and types in <future> and <thread> as hidden

Otherwise, weak symbols leak into user programs when using `async` with
non-internal types.

4 years agoRemove unsound caching in LanguageCategory
Adrian Prantl [Tue, 10 Dec 2019 22:29:13 +0000 (14:29 -0800)]
Remove unsound caching in LanguageCategory

Analogous to https://reviews.llvm.org/D71233 it is not safe to cache
something that depends on the actual ValueObject in a cache then keys
only off the type name.

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

4 years agoReplace redundant code in LanguageCategory with templates (NFC)
Adrian Prantl [Tue, 10 Dec 2019 21:22:03 +0000 (13:22 -0800)]
Replace redundant code in LanguageCategory with templates (NFC)

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

4 years agoRevert "Reapply: [DebugInfo] Recover debug intrinsics when killing duplicated/empty..."
Vlad Tsyrklevich [Tue, 10 Dec 2019 23:50:10 +0000 (15:50 -0800)]
Revert "Reapply: [DebugInfo] Recover debug intrinsics when killing duplicated/empty..."

This reverts commit f2ba93971ccc236c0eef5323704d31f48107e04f, it was
causing build timeouts on sanitizer-x86_64-linux-autoconf such as
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/44917

4 years ago[FormatManager] Move Language lookup into the obviously non-cached part (NFC)
Adrian Prantl [Tue, 10 Dec 2019 18:58:06 +0000 (10:58 -0800)]
[FormatManager] Move Language lookup into the obviously non-cached part (NFC)

This refactoring makes the lookup caching easier to reason about. This
has no observable effect although it does slightly change what is
being cached.

- Before this patch a negative lookup in the LanguageCategory would be
  cached, but a positive wouldn't.

- After this patch LanguageCategory lookups aren't cached by
  FormatManager, period. (LanguageCategory has its own FormatCache for this!)

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

4 years agoDo not cache hardcoded formats in FormatManager
Adrian Prantl [Tue, 10 Dec 2019 00:38:19 +0000 (16:38 -0800)]
Do not cache hardcoded formats in FormatManager

The cache in FormatCache uses only a type name as key. The hardcoded
formats, synthetic children, etc inspect an entire ValueObject to
determine their eligibility, which isn't modelled in the cache. This
leads to bugs such as the one in this patch (where two similarly named
types in different files have different hardcoded summary
providers). The problem is exaggerated in the Swift language plugin
due to the language's dynamic nature.

rdar://problem/57756763

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

4 years ago[libcxx] Replace func_name with __name__ for compatibility with Python 3
Sergej Jaskiewicz [Fri, 6 Dec 2019 19:17:34 +0000 (22:17 +0300)]
[libcxx] Replace func_name with __name__ for compatibility with Python 3

Summary:
The __name__ attribute is the correct way to get a function name in
Python 3. This also works with Python 2.

Reviewers: jroelofs, EricWF

Subscribers: christof, ldionne, libcxx-commits

Tags: #libc

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

4 years ago[DataFormatters] Change the Get() method to take a LanguageType.
Davide Italiano [Tue, 10 Dec 2019 23:20:49 +0000 (15:20 -0800)]
[DataFormatters] Change the Get() method to take a LanguageType.

Suggested by Adrian.

4 years agoSkip TestGuiBasic.py on ios etc device testing.
Jason Molenda [Tue, 10 Dec 2019 23:15:08 +0000 (15:15 -0800)]
Skip TestGuiBasic.py on ios etc device testing.

4 years ago[X86] Go back to considering v64i1 as a legal type under min-legal-vector-width=256...
Craig Topper [Tue, 10 Dec 2019 22:44:38 +0000 (14:44 -0800)]
[X86] Go back to considering v64i1 as a legal type under min-legal-vector-width=256. Scalarize v64i1 arguments and shuffles under min-legal-vector-width=256.

This reverts 3e1aee2ba717529b651a79ed4fc7e7147358043f in favor
of a different approach.

Scalarizing isn't great codegen, but making the type illegal was
interfering with k constraint in inline assembly.

4 years agoRevert "Temporarily revert [lldb] e81268d - [lldb/Reproducers] Support multiple GDB...
Eric Christopher [Tue, 10 Dec 2019 23:04:02 +0000 (15:04 -0800)]
Revert "Temporarily revert [lldb] e81268d - [lldb/Reproducers] Support multiple GDB remotes"

On multiple retry this issue won't duplicate - will revisit with author if
duplication works again.

This reverts commit c9e0b354e2749ce7ab553974692cb35c8651a869.

4 years agoRemove debugging printf and reformat code.
Eric Christopher [Tue, 10 Dec 2019 23:02:29 +0000 (15:02 -0800)]
Remove debugging printf and reformat code.

4 years ago[TypeCategory] IsApplicable gets a LanguageType, not a ValueObject.
Davide Italiano [Tue, 10 Dec 2019 22:44:51 +0000 (14:44 -0800)]
[TypeCategory] IsApplicable gets a LanguageType, not a ValueObject.

Reviewers: aprantl, teemperor

Subscribers: lldb-commits

Tags: #lldb

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

4 years agoSkip TestMultilineCompletion.py on ios testsuite runs.
Jason Molenda [Tue, 10 Dec 2019 22:54:42 +0000 (14:54 -0800)]
Skip TestMultilineCompletion.py on ios testsuite runs.

4 years ago[IR] allow undefined elements when checking for splat constants
Sanjay Patel [Tue, 10 Dec 2019 20:41:19 +0000 (15:41 -0500)]
[IR] allow undefined elements when checking for splat constants

This mimics the related call in SDAG. The caller is responsible
for ensuring that undef values are propagated safely.

4 years ago[InstSimplify] add tests for insert constant + splat; NFC
Sanjay Patel [Tue, 10 Dec 2019 16:16:47 +0000 (11:16 -0500)]
[InstSimplify] add tests for insert constant + splat; NFC

4 years agoDebugInfo: Clarify some more reasons v4 loc.dwo can't share much implementation with...
David Blaikie [Tue, 10 Dec 2019 22:10:15 +0000 (14:10 -0800)]
DebugInfo: Clarify some more reasons v4 loc.dwo can't share much implementation with loclists.dwo

4 years ago[DWARF] Allow cross-CU references of subprogram definitions
Vedant Kumar [Fri, 15 Nov 2019 23:37:29 +0000 (15:37 -0800)]
[DWARF] Allow cross-CU references of subprogram definitions

This allows a call site tag in CU A to reference a callee DIE in CU B
without resorting to creating an incomplete duplicate DIE for the callee
inside of CU A.

We already allow cross-CU references of subprogram declarations, so it
doesn't seem like definitions ought to be special.

This improves entry value evaluation and tail call frame synthesis in
the LTO setting. During LTO, it's common for cross-module inlining to
produce a call in some CU A where the callee resides in a different CU,
and there is no declaration subprogram for the callee anywhere. In this
case llvm would (unnecessarily, I think) emit an empty DW_TAG_subprogram
in order to fill in the call site tag. That empty 'definition' defeats
entry value evaluation etc., because the debugger can't figure out what
it means.

As a follow-up, maybe we could add a DWARF verifier check that a
DW_TAG_subprogram at least has a DW_AT_name attribute.

rdar://46577651

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

4 years ago[FormatManager] Add a unittest for GetCandidateLanguages()
Davide Italiano [Tue, 10 Dec 2019 21:39:04 +0000 (13:39 -0800)]
[FormatManager] Add a unittest for GetCandidateLanguages()

Reviewers: teemperor, JDevlieghere, aprantl, jingham

Subscribers: mgorny, lldb-commits

Tags: #lldb

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

4 years agoDebug Info: Strengthen the synthesized-property-cleanup.mm test, NFC
Vedant Kumar [Tue, 10 Dec 2019 21:35:50 +0000 (13:35 -0800)]
Debug Info: Strengthen the synthesized-property-cleanup.mm test, NFC

After https://reviews.llvm.org/D71084, the line locations assigned when
emitting cleanups inside of property accessors changed. Update this test
to actually check that those locations are correct.

rdar://57796656

4 years ago[libcxx] [test] Query the target platform, not the host one
Louis Dionne [Tue, 10 Dec 2019 21:34:30 +0000 (16:34 -0500)]
[libcxx] [test] Query the target platform, not the host one

target_info is inferred to WindowsLocalTI on Windows hosts unless
specified otherwise. In the latter case, it doesn't make sense to use
Windows-specific settings if the target is not Windows.

This change should not break anything, because target_info is inferred
based on what platform.system() returns. self.is_windows was set based
on the same platform.system() call.

Thanks to Sergej Jaskiewicz for the patch.

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

4 years ago[OPENMP50]Do not mark the function as used if referenced only in declare
Alexey Bataev [Tue, 10 Dec 2019 21:12:53 +0000 (16:12 -0500)]
[OPENMP50]Do not mark the function as used if referenced only in declare
variant directive.

If the function is used only in declare variant directive as a variant
function, it should not be marked as used to prevent emission of the
target-specific functions. Build the reference in the unevaluated
context.