platform/upstream/llvm.git
4 years agoAdd strict fp support for instructions fadd/fsub/fmul/fdiv
Liu, Chen3 [Fri, 6 Dec 2019 01:44:33 +0000 (09:44 +0800)]
Add strict fp support for instructions fadd/fsub/fmul/fdiv

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

4 years agogn build: Merge aeda128a96c
LLVM GN Syncbot [Fri, 6 Dec 2019 00:53:40 +0000 (00:53 +0000)]
gn build: Merge aeda128a96c

4 years agogn build: Merge 6470497817e
LLVM GN Syncbot [Fri, 6 Dec 2019 00:53:39 +0000 (00:53 +0000)]
gn build: Merge 6470497817e

4 years agoAdd lookup functions for efficient lookups of addresses when using GsymReader classes.
Greg Clayton [Wed, 4 Dec 2019 00:44:02 +0000 (16:44 -0800)]
Add lookup functions for efficient lookups of addresses when using GsymReader classes.

Summary:
Lookup functions are designed to not fully decode a FunctionInfo, LineTable or InlineInfo, they decode only what is needed into a LookupResult object. This allows lookups to avoid costly memory allocations and avoid parsing large amounts of information one a suitable match is found.

LookupResult objects contain the address that was looked up, the concrete function address range, the name of the concrete function, and a list of source locations. One for each inline function, and one for the concrete function. This allows one address to turn into multiple frames and improves the signal you get when symbolicating addresses in GSYM files.

Reviewers: labath, aprantl

Subscribers: mgorny, hiraditya, llvm-commits, lldb-commits

Tags: #llvm

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

4 years agoRevert "[AST] Traverse the class type loc inside the member type loc."
Sterling Augustine [Fri, 6 Dec 2019 00:16:08 +0000 (16:16 -0800)]
Revert "[AST] Traverse the class type loc inside the member type loc."

This reverts commit 7f93cb62280a73e3e899d49c45be8bfbac634b7d.

The assertion at RecursiveASTVisitor.h:1169 fails when passed a TypeLocNode.
Not sure if the correct fix is to use getTypeLocClass or something else.

4 years ago[ThinLTO] Add option to disable readonly/writeonly attribute propagation
Teresa Johnson [Tue, 3 Dec 2019 21:56:07 +0000 (13:56 -0800)]
[ThinLTO] Add option to disable readonly/writeonly attribute propagation

Summary:
Add an option to allow the attribute propagation on the index to be
disabled, to allow a workaround for issues (such as that fixed by
D70977).

Also move the setting of the WithAttributePropagation flag on the index
into propagateAttributes(), and remove some old stale code that predated
this flag and cleared the maybe read/write only bits when we need to
disable the propagation (previously only when importing disabled, now
also when the new option disables it).

Reviewers: evgeny777, steven_wu

Subscribers: mehdi_amini, inglorion, hiraditya, dexonsmith, arphaman, llvm-commits

Tags: #llvm

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

4 years ago[RegisterCoalescer] Fix the creation of subranges when rematerialization is used
Quentin Colombet [Wed, 4 Dec 2019 23:36:35 +0000 (15:36 -0800)]
[RegisterCoalescer] Fix the creation of subranges when rematerialization is used

* Context *

During register coalescing, we use rematerialization when coalescing is not
possible. That means we may rematerialize a super register when only a smaller
register is actually used.
E.g.,
0B v1 = ldimm 0xFF
1B v2 = COPY v1.low8bits
2B   = v2
=>
0B v1 = ldimm 0xFF
1B v2 = ldimm 0xFF
2B   = v2.low8bits

Where xB are the slot indexes.
Here v2 grew from a 8-bit register to a 16-bit register.

When that happens and subregister liveness is enabled, we create subranges for
the newly created value.
E.g., before remat, the live range of v2 looked like:
main range: [1r, 2r)
(Reads v2 is defined at index 1 slot register and used before the slot register
of index 2)

After remat, it should look like:
main range: [1r, 2r)
low 8 bits: [1r, 2r)
high 8 bits: [1r, 1d) <-- dead def

I.e., the unsused lanes of v2 should be marked as dead definition.

* The Problem *

Prior to this patch, the live-ranges from the previous exampel, would have the
full live-range for all subranges:
main range: [1r, 2r)
low 8 bits: [1r, 2r)
high 8 bits: [1r, 2r) <-- too long

* The Fix *

Technically, the code that this patch changes is not wrong:
When we create the subranges for the newly rematerialized value, we create only
one subrange for the whole bit mask.
In other words, at this point v2 live-range looks like this:
main range: [1r, 2r)
low & high: [1r, 2r)

Then, it gets wrong when we call LiveInterval::refineSubRanges on low 8 bits:
main range: [1r, 2r)
low 8 bits: [1r, 2r)
high 8 bits: [1r, 2r) <-- too long

Ideally, we would like LiveInterval::refineSubRanges to be able to do the right
thing and mark the dead lanes as such. However, this is not possible, because by
the time we update / refine the live ranges, the IR hasn't been updated yet,
therefore we actually don't have enough information to do the right thing.

Another option to fix the problem would have been to call
LiveIntervals::shrinkToUses after the IR is updated. This is not desirable as
this may have a noticeable impact on compile time.

Instead, what this patch does is when we create the subranges for the
rematerialized value, we explicitly create one subrange for the lanes that were
used before rematerialization and one for the lanes that were not used. The used
one inherits the live range of the main range and the unused one is just created
empty. The existing rematerialization code then detects that the unused one are
not live and it correctly sets dead def intervals for them.

https://llvm.org/PR41372

4 years agoHandle two corner cases in creduce-clang-crash.py
Reid Kleckner [Fri, 6 Dec 2019 00:01:58 +0000 (16:01 -0800)]
Handle two corner cases in creduce-clang-crash.py

Summary:
First, call os.path.normpath on the filename argument. I passed in
./foo-asdf.cpp, and this meant that the script failed to find the
filename, and bad things happened.

Second, call os.path.abspath on binaries. CReduce runs the
interestingness test in a temp dir, so relative paths will not work.

Reviewers: akhuang

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[AutoFDO] Top-down Inlining for specialization with context-sensitive profile
Wenlei He [Mon, 25 Nov 2019 07:54:07 +0000 (23:54 -0800)]
[AutoFDO] Top-down Inlining for specialization with context-sensitive profile

Summary:
AutoFDO's sample profile loader processes function in arbitrary source code order, so if I change the order of two functions in source code, the inline decision can change. This also prevented the use of context-sensitive profile to do specialization while inlining. This commit enforces SCC top-down order for sample profile loader. With this change, we can now do specialization, as illustrated by the added test case:

Say if we have A->B->C and D->B->C call path, we want to inline C into B when root inliner is B, but not when root inliner is A or D, this is not possible without enforcing top-down order. E.g. Once C is inlined into B, A and D can only choose to inline (B->C) as a whole or nothing, but what we want is only inline B into A and D, not its recursive callee C. If we process functions in top-down order, this is no longer a problem, which is what this commit is doing.

This change is guarded with a new switch "-sample-profile-top-down-load" for tuning, and it depends on D70653. Eventually, top-down can be the default order for sample profile loader.

Reviewers: wmi, davidxl

Subscribers: hiraditya, llvm-commits, tejohnson

Tags: #llvm

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

4 years ago[AutoFDO] Properly merge context-sensitive profile of inlinee back to outlined function
Wenlei He [Mon, 25 Nov 2019 07:31:02 +0000 (23:31 -0800)]
[AutoFDO] Properly merge context-sensitive profile of inlinee back to outlined function

Summary:
When sample profile loader decides not to inline a previously inlined call-site, we adjust the profile of outlined function simply by scaling up its profile counts by call-site count. This means the context-sensitive profile of that inlined instance will be thrown away. This commit try to keep context-sensitive profile for such cases:

 - Instead of scaling outlined function's profile, we now properly merge the FunctionSamples of inlined instance into outlined function, including all recursively inlined profile.
 - Instead of adjusting the profile for negative inline decision at the end of the sample profile loader pass, we do the profile merge right after processing each function. This change paired with top-down ordering of annotation/inline-replay (a separate diff) will make sure we recursively merge profile back before the profile is used for annotation and inline replay.

A new switch -sample-profile-merge-inlinee is added to enable the new profile merge for tuning. It should be the default behavior eventually.

Reviewers: wmi, davidxl

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years agogn build: Merge fdf80e86a52
LLVM GN Syncbot [Thu, 5 Dec 2019 23:54:18 +0000 (23:54 +0000)]
gn build: Merge fdf80e86a52

4 years ago[Concepts] Fix build failures in D41569
Saar Raz [Thu, 5 Dec 2019 23:53:18 +0000 (01:53 +0200)]
[Concepts] Fix build failures in D41569

Fix build failures in previous commit.

4 years ago[lldb] Update hardcoded Makefile.rules inclusions.
Jordan Rupprecht [Thu, 5 Dec 2019 23:48:34 +0000 (15:48 -0800)]
[lldb] Update hardcoded Makefile.rules inclusions.

This replaces `include $(LEVEL)/Makefile.rules` with `include Makefile.rules`.
The lldb test driver already passes the include path when running make, and specifically looking for "../../Makefile.rules" forces the test to be in a specific location.
Removing this hardcoded relative path will make it possible to move this test as-is.

4 years ago[Concepts] Constraint Enforcement & Diagnostics
Saar Raz [Thu, 5 Dec 2019 23:30:21 +0000 (01:30 +0200)]
[Concepts] Constraint Enforcement & Diagnostics

Part of the C++20 concepts implementation effort.
- Associated constraints (requires clauses, currently) are now enforced when instantiating/specializing templates and when considering partial specializations and function overloads.
- Elaborated diagnostics give helpful insight as to why the constraints were not satisfied.
Phabricator: D41569

Re-commit, after fixing some memory bugs.

4 years ago[IR] Move ctor in the NDEBUG branch
Fangrui Song [Thu, 5 Dec 2019 23:22:53 +0000 (15:22 -0800)]
[IR] Move ctor in the NDEBUG branch

4 years ago[IR] Add a default copy constructor for -Wdeprecated-copy
Fangrui Song [Thu, 5 Dec 2019 23:00:30 +0000 (15:00 -0800)]
[IR] Add a default copy constructor for -Wdeprecated-copy

4 years agoProperly convert all declaration non-type template arguments when
Richard Smith [Thu, 5 Dec 2019 21:39:38 +0000 (13:39 -0800)]
Properly convert all declaration non-type template arguments when
forming non-type template parameter values.

This reverts commit 93cc9dddd82f9e971f382ade6acf6634c5914966,
which reverted commit 11d10527852b4d3ed738aa90d8bec0f398160593.

We now always form `&x` when forming a pointer to a function rather than
trying to use function-to-pointer decay. This matches the behavior of
the old code in this case, but not the intent as described by the
comments.

4 years agoAdd a default copy constructor for -Wdeprecated-copy warnings.
Eric Christopher [Thu, 5 Dec 2019 22:16:04 +0000 (14:16 -0800)]
Add a default copy constructor for -Wdeprecated-copy warnings.

4 years ago[libomptarget][nfc] Introduce SHARED, ALIGN macros
Jon Chesterfield [Thu, 5 Dec 2019 21:47:43 +0000 (21:47 +0000)]
[libomptarget][nfc] Introduce SHARED, ALIGN macros

Summary:
[libomptarget][nfc] Introduce SHARED, ALIGN macros
Move remaining cuda attributes behind such macros

Reviewers: ABataev, jdoerfert, grokos

Reviewed By: ABataev

Subscribers: openmp-commits, jvesely

Tags: #openmp

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

4 years agoDebug Info: Apply a default location for cleanups if none is available.
Adrian Prantl [Thu, 5 Dec 2019 21:19:37 +0000 (13:19 -0800)]
Debug Info: Apply a default location for cleanups if none is available.

This unbreaks the debuginfo-tests testsuite by replacing the assertion
with a default location. There are cleanups in helper functions that
don't have a valid source location such as block copy helpers and it's
not worth tracking each of them down.

rdar://57630879

4 years agoDebugInfo: Fix LTO+DWARFv5 loclists
David Blaikie [Thu, 5 Dec 2019 20:45:13 +0000 (12:45 -0800)]
DebugInfo: Fix LTO+DWARFv5 loclists

The loclists_table_base was being overwritten for each CU even though
only one loclists contribution is made so everything but the last CU
would have a label that was never defined and fail to assemble.

4 years agoDebug Info: Assert that location is available for cleanups
Adrian Prantl [Thu, 5 Dec 2019 20:26:16 +0000 (12:26 -0800)]
Debug Info: Assert that location is available for cleanups

rdar://57630879

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

4 years agoSet a source location for Objective-C accessor stubs
Adrian Prantl [Thu, 5 Dec 2019 19:25:46 +0000 (11:25 -0800)]
Set a source location for Objective-C accessor stubs
even when there is no explicit synthesize statement.

This fixes a regression introduced in https://reviews.llvm.org/D68108
that could lead to missing debug locations in cleanup code in
synthesized Objective-C++ properties.

rdar://57630879

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

4 years ago[libomptarget][nfc] Move omptarget-nvptx under common
Jon Chesterfield [Thu, 5 Dec 2019 20:34:14 +0000 (20:34 +0000)]
[libomptarget][nfc] Move omptarget-nvptx under common

Summary:
[libomptarget][nfc] Move omptarget-nvptx under common

Almost all files depend on require omptarget-nvptx, which no longer
contains any obviously architecture dependent code. Moving it under
common unblocks task/loop for amdgcn, and allows moving other code.

At some point there should probably be a widespread symbol renaming to
replace the nvptx string. I'd prefer to get things working first.

Building this (and task.cu, loop.cu) without a cuda library requires
some more refactoring, e.g. wrap threadfence(), use DEVICE macro more
consistently. Patches for that are orthogonal and will be posted shortly.

Reviewers: jdoerfert, ABataev, grokos

Reviewed By: ABataev

Subscribers: mgorny, fedor.sergeev, jfb, openmp-commits

Tags: #openmp

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

4 years ago[AIX] Make sure to use QualNames for external global objects
David Tenty [Thu, 5 Dec 2019 20:21:53 +0000 (15:21 -0500)]
[AIX] Make sure to use QualNames for external global objects

Summary: Previously we only handled the case where the csect hadn't been set up yet, so we'd hit an assert later on.

Reviewers: jasonliu, DiggerLin, stevewan

Reviewed By: jasonliu

Subscribers: hubert.reinterpretcast, wuzish, nemanjai, hiraditya, kbarton, jsji, llvm-commits

Tags: #llvm

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

4 years agoAdd documentation headings for the OpenCL attributes.
Aaron Ballman [Thu, 5 Dec 2019 20:12:01 +0000 (15:12 -0500)]
Add documentation headings for the OpenCL attributes.

This fixes the documentation build.

4 years ago[OpenMP50] Add parallel master construct
cchen [Thu, 5 Dec 2019 18:43:48 +0000 (13:43 -0500)]
[OpenMP50] Add parallel master construct

Reviewers: ABataev, jdoerfert

Reviewed By: ABataev

Subscribers: rnk, jholewinski, guansong, arphaman, jfb, cfe-commits, sandoval, dreachem

Tags: #clang

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

4 years agoUse diff -b on zlib tests so they pass on Windows
Amy Huang [Wed, 4 Dec 2019 22:47:05 +0000 (14:47 -0800)]
Use diff -b on zlib tests so they pass on Windows

Reviewers: hubert.reinterpretcast

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[clangd] Highlighting dependent types in more contexts
Nathan Ridge [Thu, 5 Dec 2019 19:28:56 +0000 (14:28 -0500)]
[clangd] Highlighting dependent types in more contexts

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

Reviewers: ilya-biryukov

Reviewed By: ilya-biryukov

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

Tags: #clang

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

4 years ago[clangd] Find reference to template parameter in 'sizeof...' expression
Nathan Ridge [Thu, 5 Dec 2019 19:27:23 +0000 (14:27 -0500)]
[clangd] Find reference to template parameter in 'sizeof...' expression

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

Reviewers: ilya-biryukov

Reviewed By: ilya-biryukov

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

Tags: #clang

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

4 years agoRevert "[DSE] Fix for a dangling point bug in DeadStoreElimination."
Florian Hahn [Thu, 5 Dec 2019 19:29:21 +0000 (19:29 +0000)]
Revert "[DSE] Fix for a dangling point bug in DeadStoreElimination."

The commit causes a failure:
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/20911

This reverts commit 1847fd9d85506ecee692230cb2500e3774ec628e.

4 years agoLowerDbgDeclare: look through bitcasts.
Evgenii Stepanov [Mon, 25 Nov 2019 23:45:17 +0000 (15:45 -0800)]
LowerDbgDeclare: look through bitcasts.

Summary:
Emit a value debug intrinsic (with OP_deref) when an alloca address is
passed to a function call after going through a bitcast.

This generates an FP or SP-relative location for the local variable in
the following case:
  int x;
  use((void *)&x;

Reviewers: aprantl, vsk, pcc

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years agoscudo: Fix one of the C wrapper tests on Android.
Peter Collingbourne [Thu, 5 Dec 2019 18:41:37 +0000 (10:41 -0800)]
scudo: Fix one of the C wrapper tests on Android.

The test ScudoWrappersCTest.Realloc expects realloc of memalign to work on
Android, but this relies on dealloc_type_mismatch being set to false. Commit
0d3d4d3b0 caused us to start setting it to true in the C wrapper tests,
which broke the test. Set it to the correct value on Android.

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

4 years agoscudo: Fix the build of wrappers_c_test.cpp on Android.
Peter Collingbourne [Tue, 19 Nov 2019 23:22:09 +0000 (15:22 -0800)]
scudo: Fix the build of wrappers_c_test.cpp on Android.

The Android headers don't provide a declaration of valloc or pvalloc, so we
need to declare them ourselves.

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

4 years ago[GlobalISel] Localizer: Allow targets not to run the pass conditionally
Volkan Keles [Thu, 5 Dec 2019 19:09:50 +0000 (11:09 -0800)]
[GlobalISel] Localizer: Allow targets not to run the pass conditionally

Summary:
Previously, it was not possible to skip running the localizer pass
conditionally. This patch adds an input function to the pass which
decides if the pass should run on the given MachineFunction or not.

No test case as there is no upstream target needs this functionality.

Reviewers: qcolombet

Reviewed By: qcolombet

Subscribers: rovka, hiraditya, Petar.Avramovic, llvm-commits

Tags: #llvm

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

4 years ago[X86] Remove ProcIntelGLM/ProcIntelGLP/ProcIntelTRM and replace them with a single...
Craig Topper [Thu, 5 Dec 2019 18:24:10 +0000 (10:24 -0800)]
[X86] Remove ProcIntelGLM/ProcIntelGLP/ProcIntelTRM and replace them with a single feature flag covers the two places they were used.

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

4 years agoRevert "[InstCombine] keep assumption before sinking calls"
Bob Haarman [Tue, 3 Dec 2019 01:23:54 +0000 (17:23 -0800)]
Revert "[InstCombine] keep assumption before sinking calls"

Summary:
This reverts commit c3b06d0c393e533eab712922911d14e5a079fa5d.

Reason for revert: Caused miscompiles when inserting assume for undef.

Also adds a test to prevent similar breakage in future.

Fixes PR44154.

Reviewers: rnk, jdoerfert, efriedma, xbolva00

Reviewed By: rnk

Subscribers: thakis, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[OPENMP50]Add support for if clause for simd part in distribute parallel for simd...
Alexey Bataev [Thu, 5 Dec 2019 18:22:15 +0000 (13:22 -0500)]
[OPENMP50]Add support for if clause for simd part in distribute parallel for simd directive.

According to OpenMP 5.0, the if clause can be applied to simd
subdirective in the combined directives.

4 years ago[InstCombine] Invert `add A, sext(B) --> sub A, zext(B)` canonicalization (to `sub...
Roman Lebedev [Thu, 5 Dec 2019 17:44:22 +0000 (20:44 +0300)]
[InstCombine] Invert `add A, sext(B) --> sub A, zext(B)` canonicalization (to `sub A, zext B -> add A, sext B`)

Summary:
D68408 proposes to greatly improve our negation sinking abilities.
But in current canonicalization, we produce `sub A, zext(B)`,
which we will consider non-canonical and try to sink that negation,
undoing the existing canonicalization.
So unless we explicitly stop producing previous canonicalization,
we will have two conflicting folds, and will end up endlessly looping.

This inverts canonicalization, and adds back the obvious fold
that we'd miss:
* `sub [nsw] Op0, sext/zext (bool Y) -> add [nsw] Op0, zext/sext (bool Y)`
  https://rise4fun.com/Alive/xx4
* `sext(bool) + C -> bool ? C - 1 : C`
  https://rise4fun.com/Alive/fBl

It is obvious that `@ossfuzz_9880()` / `@lshr_out_of_range()`/`@ashr_out_of_range()`
(oss-fuzz 4871) are no longer folded as much, though those aren't really worrying.

Reviewers: spatel, efriedma, t.p.northover, hfinkel

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[ELF][PPC64] Support long branch thunks with addends
Fangrui Song [Mon, 2 Dec 2019 22:20:42 +0000 (14:20 -0800)]
[ELF][PPC64] Support long branch thunks with addends

Fixes PPC64 part of PR40438

  // clang -target ppc64le -c a.cc
  // .text.unlikely may be placed in a separate output section (via -z keep-text-section-prefix)
  // The distance between bar in .text.unlikely and foo in .text may be larger than 32MiB.
  static void foo() {}
  __attribute__((section(".text.unlikely"))) static int bar() { foo(); return 0; }
  __attribute__((used)) static int dummy = bar();

This patch makes such thunks with addends work for PPC64.

AArch64: .text -> `__AArch64ADRPThunk_ (adrp x16, ...; add x16, x16, ...; br x16)` -> target
PPC64: .text -> `__long_branch_ (addis 12, 2, ...; ld 12, ...(12); mtctr 12; bctr)` -> target

AArch64 can leverage ADRP to jump to the target directly, but PPC64
needs to load an address from .branch_lt . Before Power ISA v3.0, the
PC-relative ADDPCIS was not available. .branch_lt was invented to work
around the limitation.

Symbol::ppc64BranchltIndex is replaced by
PPC64LongBranchTargetSection::entry_index which take addends into
consideration.

The tests are rewritten: ppc64-long-branch.s tests -no-pie and
ppc64-long-branch-pi.s tests -pie and -shared.

Reviewed By: sfertile

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

4 years ago[AArch64] Fix MUL/SUB fusing
Sanne Wouda [Thu, 5 Dec 2019 18:09:08 +0000 (18:09 +0000)]
[AArch64] Fix MUL/SUB fusing

Summary:
When MUL is the first operand to SUB, we can't use MLS because the accumulator
should be negated.  Emit a NEG of the accumulator and an MLA instead, similar to
what we do for FMUL / FSUB fusing.

Reviewers: dmgreen, SjoerdMeijer, fhahn, Gerolf, mstorsjo, asbirlea

Reviewed By: asbirlea

Subscribers: kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[LLDB] Replacing use of ul suffix in GetMaxU64Bitfield since it not guarenteed to...
shafik [Thu, 5 Dec 2019 17:28:08 +0000 (09:28 -0800)]
[LLDB] Replacing use of ul suffix in GetMaxU64Bitfield since it not guarenteed to be 64 bit

GetMaxU64Bitfield(...) uses the ul suffix but we require a 64 bit unsigned integer and ul could be 32 bit. So this replacing it with a explicit cast and refactors the code around it to use an early exit.

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

4 years ago[llvm] llvm-ifs: Support for handling empty IFS and merging weak+strong symbols.
Puyan Lotfi [Thu, 28 Nov 2019 21:43:56 +0000 (16:43 -0500)]
[llvm] llvm-ifs: Support for handling empty IFS and merging weak+strong symbols.

The following changes enable llvm-ifs to handle the following merge conflicts:

* Weak + Strong symbol merging for the same symbol
* empty vs non-empty triple field
* empty vs non-empty object file format

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

4 years ago[DSE] Fix for a dangling point bug in DeadStoreElimination.
Ankit [Thu, 5 Dec 2019 17:43:04 +0000 (17:43 +0000)]
[DSE] Fix for a dangling point bug in DeadStoreElimination.

The patch makes sure that the LastThrowing pointer does not point to any instruction deleted by call to DeleteDeadInstruction.

While iterating through the instructions the pass maintains a pointer to the lastThrowing Instruction. A call to deleteDeadInstruction deletes a dead store and other instructions feeding the original dead instruction which also become dead. The instruction pointed by the lastThrowing pointer could also be deleted by the call to DeleteDeadInstruction and thus it becomes a dangling pointer. Because of this, we see an error in the next iteration.

In the patch, we maintain a list of throwing instructions encountered previously and use the last non deleted throwing instruction from the container.

Patch by Ankit <quic_aankit@quicinc.com>

Reviewers: fhahn, bcahoon, efriedma

Reviewed By: fhahn

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

4 years ago[ELF][PPC64] Don't copy ppc64BranchltIndex in replaceWithDefined
Fangrui Song [Mon, 2 Dec 2019 23:31:11 +0000 (15:31 -0800)]
[ELF][PPC64] Don't copy ppc64BranchltIndex in replaceWithDefined

replaceWithDefined is used by canonical PLT and copy relocations, which
imply that the symbol is preemptable. ppc64BranchltIndex is only used by
non-preemptable cases, and it can only be the default value in
replaceWithDefined.

4 years ago[scan-build-py] Set of small fixes
Gabor Horvath [Thu, 5 Dec 2019 17:00:16 +0000 (09:00 -0800)]
[scan-build-py] Set of small fixes

* Unhandled exceptions
* Typos

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

4 years ago[ASTImporter] Various source location and range import fixes.
Balázs Kéri [Thu, 5 Dec 2019 15:21:21 +0000 (16:21 +0100)]
[ASTImporter] Various source location and range import fixes.

Summary:
ASTImporter contained wrong or missing imports of SourceLocation
and SourceRange for some objects. At least a part of such errors
is fixed now.
Source location import fixes in namespace, enum, record,
class template specialization declarations and DeclRefExpr,
UnresolvedLookupExpr, UnresolvedMemberExpr, NestedNameSpecifierLoc.

Reviewers: martong, a.sidorin, shafik

Reviewed By: shafik

Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits

Tags: #clang

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

4 years ago[OPENMP50]Add support for if clause for simd part in parallel master taskloop simd...
Alexey Bataev [Thu, 5 Dec 2019 16:31:45 +0000 (11:31 -0500)]
[OPENMP50]Add support for if clause for simd part in parallel master taskloop simd directive.

According to OpenMP 5.0, the if clause can be applied to simd
subdirective in the combined directives.

4 years ago[AMDGPU][HIP] Improve opt-level handling
Scott Linder [Tue, 3 Dec 2019 22:18:21 +0000 (17:18 -0500)]
[AMDGPU][HIP] Improve opt-level handling

Summary:
The HIP toolchain invokes `llc` without an explicit opt-level, meaning
it always uses the default (-O2). This makes it impossible to use -O1,
for example. The HIP toolchain also coerces -Os/-Oz to -O2 even when
invoking opt, and it coerces -Og to -O2 rather than -O1.

Forward the opt-level to `llc` as well as `opt`, and only coerce levels
where it is required.

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[InstCombine] narrow select with FP casts
Sanjay Patel [Thu, 5 Dec 2019 16:12:44 +0000 (11:12 -0500)]
[InstCombine] narrow select with FP casts

Select doesn't change values, so truncate of extended operand cancels out.

4 years ago[InstCombine] add FMF guard to builder in fptrunc transform; NFC
Sanjay Patel [Thu, 5 Dec 2019 15:50:43 +0000 (10:50 -0500)]
[InstCombine] add FMF guard to builder in fptrunc transform; NFC

This makes no difference currently because we don't apply FMF
to FP casts, but that may change.

This could also be a place to add a fold for select with fptrunc,
so it will make that patch easier/smaller.

4 years ago[DebugInfo] Don't create multiple DBG_VALUEs when sinking
Jeremy Morse [Thu, 5 Dec 2019 15:12:25 +0000 (15:12 +0000)]
[DebugInfo] Don't create multiple DBG_VALUEs when sinking

This patch addresses a performance problem reported in PR43855, and
present in the reapplication in in 001574938e5. It turns out that
MachineSink will (often) move instructions to the first block that
post-dominates the current block, and then try to sink further. This
means if we have a lot of conditionals, we can needlessly create large
numbers of DBG_VALUEs, one in each block the sunk instruction passes
through.

To fix this, rather than immediately sinking DBG_VALUEs, record them in
a pass structure. When sinking is complete and instructions won't be
sunk any further, new DBG_VALUEs are added, avoiding lots of
intermediate DBG_VALUE $noregs being created.

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

4 years ago[DebugInfo] Don't reorder DBG_VALUEs when sunk
Jeremy Morse [Thu, 5 Dec 2019 15:03:33 +0000 (15:03 +0000)]
[DebugInfo] Don't reorder DBG_VALUEs when sunk

Fix part of PR43855, resolving a problem that comes from the reapplication
in 001574938e5. If we have two DBG_VALUE insts in a block that specify
the location of the same variable, for example:

   %0 = someinst
   DBG_VALUE %0, !123, !DIExpression()
   %1 = anotherinst
   DBG_VALUE %1, !123, !DIExpression()

if %0 were to sink, the corresponding DBG_VALUE would sink too, past the
next DBG_VALUE, effectively re-ordering assignments. To fix this, I've
added a SeenDbgVars set recording what variable locations have been seen in
a block already (working bottom up), and now flag DBG_VALUEs that would
pass a later DBG_VALUE for the same variable.

NB, this only works for repeated DBG_VALUEs in the same basic block, the
general case involving control flow is much harder, which I've written
up in PR44117.

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

4 years ago[DebugInfo] Re-apply two patches to MachineSink
Jeremy Morse [Thu, 5 Dec 2019 14:46:11 +0000 (14:46 +0000)]
[DebugInfo] Re-apply two patches to MachineSink

These were:
 * D58386 / f5e1b718a67 / reverted in d382a8a768b
 * D58238 / ee50590e168 / reverted in a8db456b53a

Of which the latter has a performance regression tracked in PR43855,
fixed by D70672 / D70676, which will be committed atomically with this
reapplication.

Contains a minor difference to account for a change in the IsCopyInstr
signature.

4 years ago[InstCombine] add tests for fpext+select+fptrunc; NFC
Sanjay Patel [Thu, 5 Dec 2019 14:55:56 +0000 (09:55 -0500)]
[InstCombine] add tests for fpext+select+fptrunc; NFC

4 years ago[OPENMP][DOCS]Update list of the supported features, NFC.
Alexey Bataev [Thu, 5 Dec 2019 15:44:07 +0000 (10:44 -0500)]
[OPENMP][DOCS]Update list of the supported features, NFC.

4 years ago[Syntax] Show input code on tests failures. NFC
Ilya Biryukov [Thu, 5 Dec 2019 15:12:28 +0000 (16:12 +0100)]
[Syntax] Show input code on tests failures. NFC

4 years ago[OPENMP50]Add support for if clause for simd part in master taskloop simd directive.
Alexey Bataev [Thu, 5 Dec 2019 14:50:18 +0000 (09:50 -0500)]
[OPENMP50]Add support for if clause for simd part in master taskloop simd directive.

According to OpenMP 5.0, the if clause can be applied to simd
subdirective in the combined directives.

4 years ago[AArch64][SVE] Integer reduction instructions pattern/intrinsics.
Danilo Carvalho Grael [Thu, 5 Dec 2019 13:07:02 +0000 (08:07 -0500)]
[AArch64][SVE] Integer reduction instructions pattern/intrinsics.

Added pattern matching/intrinsics for the following SVE instructions:

-- saddv, uaddv
-- smaxv, sminv, umaxv, uminv
-- orv, eorv, andv

4 years ago[clangd] Simplify the code, NFC.
Haojian Wu [Thu, 5 Dec 2019 14:30:04 +0000 (15:30 +0100)]
[clangd] Simplify the code, NFC.

AST.getASTContext().getSourceManager() => AST.getSourceManager().

4 years agogn build: Merge 7f93cb62280
LLVM GN Syncbot [Thu, 5 Dec 2019 14:23:58 +0000 (14:23 +0000)]
gn build: Merge 7f93cb62280

4 years ago[ARM] Enable TypePromotion by default
Sam Parker [Thu, 5 Dec 2019 14:19:44 +0000 (14:19 +0000)]
[ARM] Enable TypePromotion by default

ARMCodeGenPrepare has already been generalized and renamed to
TypePromotion. We've had it enabled and tested downstream for a
while, so enable it by default.

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

4 years ago[AST] Traverse the class type loc inside the member type loc.
Haojian Wu [Fri, 29 Nov 2019 12:05:42 +0000 (13:05 +0100)]
[AST] Traverse the class type loc inside the member type loc.

Summary:
We are missing this currently.

This would fix https://github.com/clangd/clangd/issues/216.

Reviewers: ilya-biryukov

Subscribers: mgorny, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[lldb][NFC] Move Address and AddressRange functions out of Stream and let them take...
Raphael Isemann [Thu, 5 Dec 2019 13:41:09 +0000 (14:41 +0100)]
[lldb][NFC] Move Address and AddressRange functions out of Stream and let them take raw_ostream

Summary:
Yet another step on the long road towards getting rid of lldb's Stream class.

We probably should just make this some kind of member of Address/AddressRange, but it seems quite often we just push
in random integers in there and this is just about getting rid of Stream and not improving arbitrary APIs.

I had to rename another `DumpAddress` function in FormatEntity that is dumping the content of an address to make Clang happy.

Reviewers: labath

Reviewed By: labath

Subscribers: JDevlieghere, lldb-commits

Tags: #lldb

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

4 years agoAlso check /Fo when deciding on the .gcna / .gcda filename (PR44208)
Hans Wennborg [Wed, 4 Dec 2019 14:19:21 +0000 (15:19 +0100)]
Also check /Fo when deciding on the .gcna / .gcda filename (PR44208)

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

4 years ago[InstCombine] Extend `0 - (X sdiv C) -> (X sdiv -C)` fold to non-splat vectors
Roman Lebedev [Thu, 5 Dec 2019 12:10:25 +0000 (15:10 +0300)]
[InstCombine] Extend `0 - (X sdiv C) -> (X sdiv -C)` fold to non-splat vectors

Split off from https://reviews.llvm.org/D68408

4 years ago[AST] Enable expression of OpenCL language address spaces an attribute
Victor Lomuller [Tue, 25 Jun 2019 12:57:48 +0000 (13:57 +0100)]
[AST] Enable expression of OpenCL language address spaces an attribute

Summary:
Enable a way to set OpenCL language address space using attributes
in addition to existing keywords.

Signed-off-by: Victor Lomuller victor@codeplay.com
Reviewers: aaron.ballman, Anastasia

Subscribers: yaxunl, ebevhan, cfe-commits, Naghasan

Tags: #clang

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

Signed-off-by: Alexey Bader <alexey.bader@intel.com>
4 years ago[lldb/DWARF] Switch to llvm debug_rnglists parser
Pavel Labath [Wed, 4 Dec 2019 15:06:44 +0000 (16:06 +0100)]
[lldb/DWARF] Switch to llvm debug_rnglists parser

Summary:
Our rnglist support was working only for the trivial cases (one CU),
because we only ever parsed one contribution out of the debug_rnglists
section. This means we were never able to resolve range lists for the
second and subsequent units (DW_FORM_sec_offset references came out
blang, and DW_FORM_rnglistx references always used the ranges lists from
the first unit).

Since both llvm and lldb rnglist parsers are sufficiently
self-contained, and operate similarly, we can fix this problem by
switching to the llvm parser instead. Besides the changes which are due
to variations in the interface, the main thing is that now the range
list object is a member of the DWARFUnit, instead of the entire symbol
file. This ensures that each unit can get it's own private set of range
list indices, and is consistent with how llvm's DWARFUnit does it
(overall, I've tried to structure the code the same way as the llvm
version).

I've also added a test case for the two unit scenario.

Reviewers: JDevlieghere, aprantl, clayborg

Subscribers: dblaikie, lldb-commits

Tags: #lldb

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

4 years ago Reapply af57dbf12e54 "Add support for options -frounding-math, ftrapping...
Melanie Blower [Wed, 4 Dec 2019 20:23:46 +0000 (12:23 -0800)]
    Reapply af57dbf12e54 "Add support for options -frounding-math, ftrapping-math, -ffp-model=, and -ffp-exception-behavior="

        Patch was reverted because https://bugs.llvm.org/show_bug.cgi?id=44048
        The original patch is modified to set the strictfp IR attribute
        explicitly in CodeGen instead of as a side effect of IRBuilder.
        In the 2nd attempt to reapply there was a windows lit test fail, the
        tests were fixed to use wildcard matching.

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

4 years ago[lldb/cpluspluslanguage] Add constructor substitutor
Pavel Labath [Tue, 26 Nov 2019 15:36:09 +0000 (16:36 +0100)]
[lldb/cpluspluslanguage] Add constructor substitutor

Summary:
This patch adds code which will substitute references to the full object
constructors/destructors with their base object versions.

Like all substitutions in this category, this operation is not really
sound, but doing this in a more precise way allows us to get rid of a
much larger hack -- matching function according to their demangled
names, which effectively does the same thing, but also much more.

This is a (very late) follow-up to D54074.

Background: clang has an optimization which can eliminate full object
structors completely, if they are found to be equivalent to their base
object versions. It does this because it assumes they can be regenerated
on demand in the compile unit that needs them (e.g., because they are
declared inline). However, this doesn't work for the debugging scenario,
where we don't have the structor bodies available -- we pretend all
constructors are defined out-of-line as far as clang is concerned. This
causes clang to emit references to the (nonexisting) full object
structors during expression evaluation.

Fun fact: This is not a problem on darwin, because the relevant
optimization is disabled to work around a linker bug.

Reviewers: teemperor, JDevlieghere

Subscribers: lldb-commits

Tags: #lldb

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

4 years ago[llvm/DWARF] Return section offset from DWARFUnit::get{Loc,Rng}listOffset
Pavel Labath [Wed, 4 Dec 2019 13:03:18 +0000 (14:03 +0100)]
[llvm/DWARF] Return section offset from DWARFUnit::get{Loc,Rng}listOffset

Summary:
Currently these function return the raw content of the appropriate table
header, which means they are relative to the DW_AT_{loc,rng}list_base,
and one has to relocate them in order to do anything.

This changes the functions to perform the relocation themselves, which
seems more clearer, particularly as they are sitting right next to the
find{Rng,Loc}listFromOffset functions, but one *cannot* simply take the
result of these functions and take pass them there.

The only effect of this patch is to change what value is dumped for the
DW_AT_ranges attribute, which I think is for the better, as previously
the values appeared to point into thin air.

(The main reason I am looking at this is because I was trying to
implement equivalent functionality in lldb's DWARFUnit, and was stumped
by this behavior.

Reviewers: dblaikie, JDevlieghere, aprantl

Subscribers: hiraditya, llvm-commits, SouraVX

Tags: #llvm

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

4 years ago[LiveDebugValues] Silence the unused var warning; NFC
Djordje Todorovic [Thu, 5 Dec 2019 11:21:51 +0000 (12:21 +0100)]
[LiveDebugValues] Silence the unused var warning; NFC

4 years ago[clangd] More unittests for cross-file rename.
Haojian Wu [Thu, 5 Dec 2019 11:08:31 +0000 (12:08 +0100)]
[clangd] More unittests for cross-file rename.

Summary:
The previous unittests for cross-file rename was kind of weak. With this
patch, we should have more test coverage, and it is easy to add more tests in
the future.

Reviewers: ilya-biryukov, kbobyrev

Reviewed By: ilya-biryukov

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

Tags: #clang

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

4 years ago[DebugInfo] Handle call site values for instructions before call bundle
David Stenberg [Thu, 5 Dec 2019 09:49:41 +0000 (10:49 +0100)]
[DebugInfo] Handle call site values for instructions before call bundle

Summary:
If a call is bundled then the code that looks for instructions that
produce parameter values would break when reaching the call's bundle
header, due to the `ifCall(/*AnyInBundle*/)` invocation returning true.

It is not enough to simply ignore bundle headers in the `isCall()`
invocation, as the bundle header may have defines of parameter registers
due to the call, meaning that such registers would incorrectly be
removed from the worklist. Therefore, do not look at bundle headers at
all.

Reviewers: djtodoro, NikolaPrica, aprantl, vsk

Reviewed By: aprantl, vsk

Subscribers: hiraditya, llvm-commits

Tags: #debug-info, #llvm

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

4 years agoFix the clang interpreter example which was broken by 4fc68b9b7f3e0.
Lang Hames [Thu, 5 Dec 2019 10:41:40 +0000 (02:41 -0800)]
Fix the clang interpreter example which was broken by 4fc68b9b7f3e0.

4 years ago[lldb] Don't put compile unit name into the support file list and support DWARF5...
Pavel Labath [Thu, 28 Nov 2019 09:19:23 +0000 (10:19 +0100)]
[lldb] Don't put compile unit name into the support file list and support DWARF5 line tables

Summary:
Lldb's "format-independent" debug info made use of the fact that DWARF
(<=4) did not use the file index zero, and reused the support file index
zero for storing the compile unit name.

While this provided some convenience for DWARF<=4, it meant that the PDB
plugin needed to artificially remap file indices in order to free up
index 0. Furthermore, DWARF v5 make file index 0 legal, which meant that
similar remapping would be needed in the dwarf plugin too.

What this patch does instead is remove the requirement of having the
compile unit name in the index 0. It is not that useful since the name
can always be fetched from the CompileUnit object. Remapping code in the
pdb plugin(s) has been removed or simplified.

DWARF plugin has started inserting an empty FileSpec at index 0 to
ensure the indices keep matching up (in case of DWARF<=4). For DWARF5,
we insert the file 0 from the line table.

I add a test to ensure we can correctly lookup line table entries
referencing file 0, and in particular the case where the file 0 is also
duplicated in another file entry, as this is how clang produces line
tables in some circumstances (see pr44170). Though this is probably a
bug in clang, this is not forbidden by DWARF, and lldb already has
support for that in some (but not all) cases -- this adds a test for the
code path which was not fixed in this patch.

Reviewers: clayborg, JDevlieghere, jdoerfert

Subscribers: aprantl, lldb-commits

Tags: #lldb

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

4 years ago[AArch64][SVE] Implement element count intrinsics
Cullen Rhodes [Thu, 5 Dec 2019 09:56:00 +0000 (09:56 +0000)]
[AArch64][SVE] Implement element count intrinsics

Summary:
Adds intrinsics for the following:

    * cntb
    * cnth
    * cntw
    * cntd
    * cntp

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

Reviewed By: efriedma

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

Tags: #llvm

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

4 years ago[LLD][ELF][AArch64] .note.gnu.property sections should have alignment 8
Peter Smith [Fri, 29 Nov 2019 18:44:21 +0000 (18:44 +0000)]
[LLD][ELF][AArch64] .note.gnu.property sections should have alignment 8

The .note.gnu.property SHT_NOTE sections on AArch64 (a 64-bit target)
should have alignment 8 to more closely match the binutils implementation
where alignment is 4-bytes on 32-bit machines and 8-bytes on 64-bit
machines.

Previously LLD was using 4 for both 32-bit and 64-bit machines.

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

4 years agoReland "[LiveDebugValues] Introduce entry values of unmodified params"
Djordje Todorovic [Tue, 3 Dec 2019 13:18:02 +0000 (14:18 +0100)]
Reland "[LiveDebugValues] Introduce entry values of unmodified params"

Relanding this after resolving the cause of the test failure.

4 years ago[Checkers] Added support for freopen to StreamChecker.
Balázs Kéri [Wed, 4 Dec 2019 16:15:03 +0000 (17:15 +0100)]
[Checkers] Added support for freopen to StreamChecker.

Summary: Extend StreamChecker with a new evaluation function for API call 'freopen'.

Reviewers: NoQ, baloghadamsoftware, Szelethus, martong

Reviewed By: baloghadamsoftware, martong

Subscribers: martong, rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits

Tags: #clang

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

4 years ago[LLD][ELF] Add support for PT_GNU_PROPERTY
Peter Smith [Mon, 2 Dec 2019 18:34:56 +0000 (18:34 +0000)]
[LLD][ELF] Add support for PT_GNU_PROPERTY

The PT_GNU_PROPERTY program header describes the location of the
.note.gnu.property SHT_NOTES section. The linux kernel uses this program
header to find the .note.gnu.property section rather than parsing.
Executables that have properties that the kernel needs to act on that don't
have the PT_GNU_PROPERTY program header will not boot.

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

4 years ago[clangd] Fix an incorrect comment, NFC.
Haojian Wu [Thu, 5 Dec 2019 09:43:29 +0000 (10:43 +0100)]
[clangd] Fix an incorrect comment, NFC.

4 years ago[ORC] Remove the automagic Main JITDylib fram ExecutionSession.
Lang Hames [Thu, 5 Dec 2019 06:45:38 +0000 (22:45 -0800)]
[ORC] Remove the automagic Main JITDylib fram ExecutionSession.

This patch removes the magic "main" JITDylib from ExecutionEngine. The main
JITDylib was created automatically at ExecutionSession construction time, and
all subsequently created JITDylibs were added to the main JITDylib's
links-against list by default. This saves a couple of lines of boilerplate for
simple JIT setups, but this isn't worth introducing magical behavior for.

ORCv2 clients should now construct their own main JITDylib using
ExecutionSession::createJITDylib and set up its linkages manually using
JITDylib::setSearchOrder (or related methods in JITDylib).

4 years ago[MCRegInfo] Add forward sub and super register iterators. (NFC)
Florian Hahn [Thu, 5 Dec 2019 09:16:08 +0000 (09:16 +0000)]
[MCRegInfo] Add forward sub and super register iterators. (NFC)

This patch adds forward iterators mc_difflist_iterator,
mc_subreg_iterator and mc_superreg_iterator, based on the existing
DiffListIterator. Those are used to provide iterator ranges over
sub- and super-register from TRI, which are slightly more convenient
than the existing MCSubRegIterator/MCSuperRegIterator. Unfortunately,
it duplicates a bit of functionality, but the new iterators are a bit
more convenient (and can be used with various existing iterator
utilities)  and should probably replace the old iterators in the future.

This patch updates some existing users.

Reviewers: evandro, qcolombet, paquette, MatzeB, arsenm

Reviewed By: qcolombet

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

4 years ago[MIBundle] Turn MachineOperandIteratorBase into a forward iterator.
Florian Hahn [Thu, 5 Dec 2019 08:52:24 +0000 (08:52 +0000)]
[MIBundle] Turn MachineOperandIteratorBase into a forward iterator.

This patch turns MachineOperandIteratorBase into a regular forward
iterator, which can be used with iterator_range.

It also adds mi_bundle_ops and const_mi_bundle_ops that return iterator
ranges over all operands in a bundle and updates a use of the old
iterator.

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

Reviewed By: arsenm

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

4 years agoAvoid triple corruption while merging core info
Muhammad Omair Javaid [Thu, 5 Dec 2019 08:04:04 +0000 (13:04 +0500)]
Avoid triple corruption while merging core info

Summary:
This patch fixes a bug where when target triple created from elf information
is arm-*-linux-eabihf and platform triple is armv8l-*-linux-gnueabihf. Merging
both triple results in armv8l--unknown-unknown.

This happens because we order a triple update while calling CoreUpdated and
CoreUpdated creates a new triple with no vendor or environment information.

Making sure we do not update triple and just update to more specific core
fixes the issue.

Reviewers: labath, jasonmolenda, clayborg

Reviewed By: jasonmolenda

Subscribers: jankratochvil, kristof.beyls, lldb-commits

Tags: #lldb

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

4 years ago[llvm-readelf/llvm-readobj] - Remove getSecTypeName() helper.
Georgii Rymar [Wed, 4 Dec 2019 15:29:01 +0000 (18:29 +0300)]
[llvm-readelf/llvm-readobj] - Remove getSecTypeName() helper.

We do not need it, we have
`object::getELFSectionTypeName` that can be used instead.

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

4 years agoFix the macro fusion table for X86 according to Intel optimization
Shengchen Kan [Thu, 5 Dec 2019 01:40:11 +0000 (09:40 +0800)]
Fix the macro fusion table for X86 according to Intel optimization
manual and add function isMacroFused

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

4 years agoReland [MachineCopyPropagation] Extend MCP to do trivial copy backward propagation.
Kai Luo [Thu, 5 Dec 2019 06:01:00 +0000 (14:01 +0800)]
Reland [MachineCopyPropagation] Extend MCP to do trivial copy backward propagation.

Fix assertion error
```
bool llvm::MachineOperand::isRenamable() const: Assertion `Register::isPhysicalRegister(getReg()) && "isRenamable should only be checked on physical registers"' failed.
```
by checking if the register is 0 before invoking `isRenamable`.

4 years agoRevert "Properly convert all declaration non-type template arguments when"
David L. Jones [Thu, 5 Dec 2019 06:08:38 +0000 (22:08 -0800)]
Revert "Properly convert all declaration non-type template arguments when"

This reverts commit 11d10527852b4d3ed738aa90d8bec0f398160593.

This change is problematic with function pointer template parameters. For
example, building libcxxabi with futexes (-D_LIBCXXABI_USE_FUTEX) produces this
diagnostic:

    In file included from .../llvm-project/libcxxabi/src/cxa_guard.cpp:15:
    .../llvm-project/libcxxabi/src/cxa_guard_impl.h:416:54: error: address of function 'PlatformThreadID' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
        has_thread_id_support(this->thread_id_address && GetThreadIDArg),
                                                      ~~ ^~~~~~~~~~~~~~
    .../llvm-project/libcxxabi/src/cxa_guard.cpp:38:26: note: in instantiation of member function '__cxxabiv1::(anonymous namespace)::InitByteFutex<&__cxxabiv1::(anonymous namespace)::PlatformFutexWait, &__cxxabiv1::(anonymous namespace)::PlatformFutexWake, &__cxxabiv1::(anonymous namespace)::PlatformThreadID>::InitByteFutex' requested here
      SelectedImplementation imp(raw_guard_object);
                             ^
    .../llvm-project/libcxxabi/src/cxa_guard_impl.h:416:54: note: prefix with the address-of operator to silence this warning
        has_thread_id_support(this->thread_id_address && GetThreadIDArg),
                                                         ^
                                                         &
    1 error generated.

The diagnostic is incorrect: adding the address-of operator also fails ("cannot
take the address of an rvalue of type 'uint32_t (*)()' (aka 'unsigned int
(*)()')").

4 years agoRevert "[MachineCopyPropagation] Extend MCP to do trivial copy backward propagation"
Kai Luo [Thu, 5 Dec 2019 04:48:37 +0000 (12:48 +0800)]
Revert "[MachineCopyPropagation] Extend MCP to do trivial copy backward propagation"

This reverts commit 75b3a1c318ccad0f96c38689279bc5db63e2ad05, since it
breaks bootstrap build.

4 years agoAdd a default copy-assignment or copy-constructor for -Wdeprecated-copy warnings.
Eric Christopher [Thu, 5 Dec 2019 04:34:56 +0000 (20:34 -0800)]
Add a default copy-assignment or copy-constructor for -Wdeprecated-copy warnings.

4 years ago[AArch64][SVE] Add intrinsics and patterns for logical predicate instructions
Danilo Carvalho Grael [Thu, 5 Dec 2019 02:45:59 +0000 (21:45 -0500)]
[AArch64][SVE] Add intrinsics and patterns for logical predicate instructions

Add instrinics and patters for the following logical predicate instructions:
-- and, ands, bic, bics, eor, eors
-- sel
-- orr, orrs, orn, orns, nor, nors, nand, nads

4 years ago[Signal] Allow one-shot SIGPIPE handler to be reached
Vedant Kumar [Thu, 5 Dec 2019 03:21:14 +0000 (19:21 -0800)]
[Signal] Allow one-shot SIGPIPE handler to be reached

As SIGPIPE is no longer in the IntSigs array, handle SIGPIPE before
handling any interrupt signals.

Thanks to Alexandre Ganea for pointing out the issue here.

4 years ago[fix][unittests][llvm] Fix running unit tests without assertions. [NFCI]
Francesco Petrogalli [Thu, 5 Dec 2019 03:23:31 +0000 (03:23 +0000)]
[fix][unittests][llvm] Fix running unit tests without assertions. [NFCI]

4 years ago[clangd] Add xref for macro to static index.
Utkarsh Saxena [Wed, 20 Nov 2019 14:18:54 +0000 (15:18 +0100)]
[clangd] Add xref for macro to static index.

Summary:
This adds the references for macros to the SymbolCollector (used for static index).
Enabled if `CollectMacro` option is set.

Reviewers: hokein

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

Tags: #clang

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

4 years ago[MachineCopyPropagation] Extend MCP to do trivial copy backward propagation
Kai Luo [Wed, 4 Dec 2019 03:19:50 +0000 (11:19 +0800)]
[MachineCopyPropagation] Extend MCP to do trivial copy backward propagation

Summary:
This patch mainly do such transformation
```
$R0 = OP ...
... // No read/clobber of $R0 and $R1
$R1 = COPY $R0 // $R0 is killed
```
Replace $R0 with $R1 and remove the COPY, we have
```
$R1 = OP ...
```
This transformation can also expose more opportunities for existing
copy elimination in MCP.

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

4 years agoProperly convert all declaration non-type template arguments when
Richard Smith [Thu, 5 Dec 2019 02:53:34 +0000 (18:53 -0800)]
Properly convert all declaration non-type template arguments when
forming non-type template parameter values.

4 years ago[c++17] Fix assert / wrong code when passing a noexcept pointer to
Richard Smith [Thu, 5 Dec 2019 01:31:58 +0000 (17:31 -0800)]
[c++17] Fix assert / wrong code when passing a noexcept pointer to
member function to a non-noexcept pointer to member non-type template
parameter.

4 years ago[lldb/Reproducers] Don't instrument SBFileSpec::GetPath
Jonas Devlieghere [Thu, 5 Dec 2019 01:51:23 +0000 (17:51 -0800)]
[lldb/Reproducers] Don't instrument SBFileSpec::GetPath

This method uses a char* and length as output arguments and the
reproducer instrumentation doesn't know how to deal with that (yet).