platform/upstream/llvm.git
4 years ago[LLD][ELF] Put back rounding which was lost in 8404aeb56a73ab24f9b295111de3b37a37f0b841
Alexandre Ganea [Mon, 30 Mar 2020 01:51:45 +0000 (21:51 -0400)]
[LLD][ELF] Put back rounding which was lost in 8404aeb56a73ab24f9b295111de3b37a37f0b841

4 years agoRevert "[libc++] NFC: Simplify substitutions by using lit recursive substitutions"
David Zarzycki [Sun, 29 Mar 2020 01:25:07 +0000 (21:25 -0400)]
Revert "[libc++] NFC: Simplify substitutions by using lit recursive substitutions"

This reverts commit cd7f9751c30092033a5e97591876f972daf61989 which has
unintended breakage to non-libcxx projects when using the documented way
of building LLVM. (See the Getting Started guide. I.e. one big CMake setup.)

4 years ago[X86] Add sse4.1 RUNs lines to the min/max reduction cost model tests.
Craig Topper [Sun, 29 Mar 2020 22:54:34 +0000 (15:54 -0700)]
[X86] Add sse4.1 RUNs lines to the min/max reduction cost model tests.

Mostly this matches the sse4.2 we already had command lines for.
Except in the i64 case since sse4.1 doesn't have pcmpgtq.

4 years ago[InstCombine] Add tests for trunc (extelt x); (NFC)
Daan Sprenkels [Sun, 29 Mar 2020 21:25:39 +0000 (17:25 -0400)]
[InstCombine] Add tests for trunc (extelt x); (NFC)
Baseline tests for D76983 (PR45314)

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

4 years ago[X86] Add sse4.2 command lines to min/max reduction tests.
Craig Topper [Sun, 29 Mar 2020 07:27:33 +0000 (00:27 -0700)]
[X86] Add sse4.2 command lines to min/max reduction tests.

SSE4.2 has the pcmpgtq instruction which we will use in
vXi64 reductions when its available.

4 years ago[ARMMVE] Create fewer temporary SmallVectors
Benjamin Kramer [Sun, 29 Mar 2020 20:30:06 +0000 (22:30 +0200)]
[ARMMVE] Create fewer temporary SmallVectors

Shrinks clang by 40k.

4 years agoDon't claim template names that name non-templates are undeclared.
Richard Smith [Sun, 29 Mar 2020 20:13:57 +0000 (13:13 -0700)]
Don't claim template names that name non-templates are undeclared.

4 years ago[ELF][test] Improve arm-exidx-output.s to test different output text sections
Fangrui Song [Thu, 19 Mar 2020 05:28:21 +0000 (22:28 -0700)]
[ELF][test] Improve arm-exidx-output.s to test different output text sections

Delete arm-exidx-link.s which is now covered by arm-exidx-output.s

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

4 years ago[ARM] VMOV.64 immediate tests. NFC
David Green [Sat, 28 Mar 2020 16:11:37 +0000 (16:11 +0000)]
[ARM] VMOV.64 immediate tests. NFC

4 years ago[gn build] Port 854f268ca62
LLVM GN Syncbot [Sun, 29 Mar 2020 19:24:34 +0000 (19:24 +0000)]
[gn build] Port 854f268ca62

4 years ago[MC] Move deprecation infos from MCTargetDesc to MCInstrInfo
Benjamin Kramer [Sun, 29 Mar 2020 19:09:07 +0000 (21:09 +0200)]
[MC] Move deprecation infos from MCTargetDesc to MCInstrInfo

This allows emitting it only when the feature is used by a target.
Shrinks Release+Asserts clang by 900k.

4 years ago[clangd] Handle clang-tidy suppression comments for diagnostics inside macro expansions
Nathan Ridge [Sun, 29 Mar 2020 19:13:13 +0000 (15:13 -0400)]
[clangd] Handle clang-tidy suppression comments for diagnostics inside macro expansions

Summary:
Not handling this was a side-effect of being overly cautious when trying
to avoid reading files for which clangd doesn't have the source mapped.

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

Reviewers: sammccall

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

Tags: #clang

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

4 years agoclang-format fixes in ClangTidyDiagnosticConsumer.cpp and DiagnosticsTets.cpp
Nathan Ridge [Sun, 29 Mar 2020 19:12:58 +0000 (15:12 -0400)]
clang-format fixes in ClangTidyDiagnosticConsumer.cpp and DiagnosticsTets.cpp

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

Tags: #clang

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

4 years ago[X86][AVX] Combine 128/256-bit lane shuffles with zeroable upper subvectors to EXTRAC...
Simon Pilgrim [Sun, 29 Mar 2020 18:44:39 +0000 (19:44 +0100)]
[X86][AVX] Combine 128/256-bit lane shuffles with zeroable upper subvectors to EXTRACT_SUBVECTOR (PR40720)

As explained on PR40720, EXTRACTF128 is always as good/better than VPERM2F128/SHUF128, and we can use the implicit zeroing of the uppers.

4 years agoFix -Wdocumentation warning. NFC.
Simon Pilgrim [Sun, 29 Mar 2020 18:40:42 +0000 (19:40 +0100)]
Fix -Wdocumentation warning. NFC.

gcc was misinterpreting the template code snippet as html.

4 years ago[X86] Add isAnyZero shuffle mask helper
Simon Pilgrim [Sun, 29 Mar 2020 17:48:02 +0000 (18:48 +0100)]
[X86] Add isAnyZero shuffle mask helper

4 years ago[InstCombine] Erase old mul when creating umulo
Nikita Popov [Sun, 29 Mar 2020 17:20:11 +0000 (19:20 +0200)]
[InstCombine] Erase old mul when creating umulo

As we don't return the result of replaceInstUsesWith(), we are
responsible for erasing the instruction.

There is a small subtlety here in that we need to do this after
the other uses of Builder, which uses the original multiply as
the insertion point.

NFC apart from worklist order changes.

4 years ago[InstCombine] Use replaceOperand() in demanded elements simplification
Nikita Popov [Sun, 29 Mar 2020 18:07:46 +0000 (20:07 +0200)]
[InstCombine] Use replaceOperand() in demanded elements simplification

To make sure that dead operands get DCEd. This fixes the largest
source of leftover dead operands we see in tests.

NFC apart from worklist changes.

4 years ago[MLIR] Add missing asserts in interchangeLoops util, doc comment update
Uday Bondhugula [Sat, 28 Mar 2020 18:36:10 +0000 (00:06 +0530)]
[MLIR] Add missing asserts in interchangeLoops util, doc comment update

Add missing assert checks for input to mlir::interchangeLoops utility.
Rename interchangeLoops -> permuteLoops; update doc comments to clarify
inputs / return val. Other than the assert checks, this is NFC.

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D77003

4 years ago[InstCombine] Use replaceOperand() in assoc cast simplification
Nikita Popov [Sun, 29 Mar 2020 17:59:00 +0000 (19:59 +0200)]
[InstCombine] Use replaceOperand() in assoc cast simplification

To make sure the old operands are DCEd.

NFC apart from worklist order.

4 years ago[InstCombine] Erase old add when optimizing add overflow
Nikita Popov [Sun, 29 Mar 2020 17:50:23 +0000 (19:50 +0200)]
[InstCombine] Erase old add when optimizing add overflow

We don't return the replaceInstUsesWith() result, so we're
responsible for cleaning up.

NFC apart from worklist order changes.

4 years agoIntroduce support for lib function aligned_alloc in TLI / memory builtins
Uday Bondhugula [Sat, 28 Mar 2020 05:59:52 +0000 (11:29 +0530)]
Introduce support for lib function aligned_alloc in TLI / memory builtins

Aligned_alloc is a standard lib function and has been in glibc since
2.16 and in the C11 standard. It has semantics similar to malloc/calloc
for several analyses/transforms. This patch introduces aligned_alloc
in target library info and memory builtins. Subsequent ones will
make other passes aware and fix https://bugs.llvm.org/show_bug.cgi?id=44062

This change will also be useful to LLVM generators that need to allocate
buffers of vector elements larger than 16 bytes (for eg. 256-bit ones),
element boundary alignment for which is not typically provided by glibc malloc.

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76970

4 years agoGlobalISel: Add matcher for G_SHL
Matt Arsenault [Sun, 29 Mar 2020 17:07:43 +0000 (13:07 -0400)]
GlobalISel: Add matcher for G_SHL

4 years agoAMDGPU/GlobalISel: Remove redundant virtual
Matt Arsenault [Sat, 28 Mar 2020 23:04:47 +0000 (19:04 -0400)]
AMDGPU/GlobalISel: Remove redundant virtual

4 years agoAMDGPU: Fix using wrong instruction for FP conversion
Matt Arsenault [Sun, 29 Mar 2020 14:40:12 +0000 (10:40 -0400)]
AMDGPU: Fix using wrong instruction for FP conversion

This was was never actually hit, but FTRUNC was clearly not the intent
here.

4 years agoAMDGPU: Add some additional tests for v_cvt_ubyte* formation
Matt Arsenault [Sun, 29 Mar 2020 14:10:28 +0000 (10:10 -0400)]
AMDGPU: Add some additional tests for v_cvt_ubyte* formation

Use functions now that we have them for less boilerplate in the
output.

4 years agoAMDGPU: Fix typo
Matt Arsenault [Sun, 29 Mar 2020 14:29:04 +0000 (10:29 -0400)]
AMDGPU: Fix typo

4 years ago[VectorCombine] skip debug intrinsics first for efficiency
Sanjay Patel [Sun, 29 Mar 2020 17:58:04 +0000 (13:58 -0400)]
[VectorCombine] skip debug intrinsics first for efficiency

4 years ago[InstCombine] make test independent of branch undef/UB; NFC
Sanjay Patel [Sun, 29 Mar 2020 17:31:44 +0000 (13:31 -0400)]
[InstCombine] make test independent of branch undef/UB; NFC

4 years ago[X86][AVX] Add tests for 512-bit shuffle patterns that could reduce to subvector...
Simon Pilgrim [Sun, 29 Mar 2020 17:26:56 +0000 (18:26 +0100)]
[X86][AVX] Add tests for 512-bit shuffle patterns that could reduce to subvector extractions

4 years agoRemove unnecessary empty comments from test check lines. NFC.
Simon Pilgrim [Sun, 29 Mar 2020 17:17:09 +0000 (18:17 +0100)]
Remove unnecessary empty comments from test check lines. NFC.

4 years ago[InstCombine] Simplify select of cmpxchg transform
Nikita Popov [Sun, 29 Mar 2020 16:55:59 +0000 (18:55 +0200)]
[InstCombine] Simplify select of cmpxchg transform

Rather than converting to a dummy select with equal true and false
ops, just directly return the resulting value.

As a side-effect, this fixes missing DCE of the previously replaced
operand.

4 years ago[OpenMP] set_bits iterator yields unsigned elements, no reference (NFC).
Florian Hahn [Sun, 29 Mar 2020 16:05:29 +0000 (17:05 +0100)]
[OpenMP] set_bits iterator yields unsigned elements, no reference (NFC).

BitVector::set_bits() returns an iterator range yielding unsinged
elements, which always will be copied while const & gives the impression
that there will be no copy. Newer version of clang complain:

    warning: loop variable 'SetBitsIt' is always a copy because the range of type 'iterator_range<llvm::BitVector::const_set_bits_iterator>' (aka 'iterator_range<const_set_bits_iterator_impl<llvm::BitVector> >') does not return a reference [-Wrange-loop-analysis]

Reviewers: jdoerfert, rnk

Reviewed By: rnk

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

4 years ago[InstCombine] Fix worklist management in varargs transform
Nikita Popov [Sun, 29 Mar 2020 15:38:23 +0000 (17:38 +0200)]
[InstCombine] Fix worklist management in varargs transform

Add a replaceUse() helper to mirror replaceOperand() for the
rare cases where we're working directly on uses.

NFC apart from worklist order changes.

4 years ago[InstCombine] Erase original add when creating saddo
Nikita Popov [Sun, 29 Mar 2020 15:25:42 +0000 (17:25 +0200)]
[InstCombine] Erase original add when creating saddo

Usually when we replaceInstUsesWith() we also return the original
instruction, and InstCombine will take care of erasing it. Here
we don't do that, so we need to manually erase it.

NFC apart from worklist order changes.

4 years ago[InstCombine] Use replaceOperand() in a few more places
Nikita Popov [Sun, 29 Mar 2020 15:08:04 +0000 (17:08 +0200)]
[InstCombine] Use replaceOperand() in a few more places

To make sure the old operands get DCEd.

NFC apart from worklist order changes.

4 years ago[X86][AVX] Combine 128-bit lane shuffles with a zeroable upper half to EXTRACT_SUBVEC...
Simon Pilgrim [Sun, 29 Mar 2020 15:41:37 +0000 (16:41 +0100)]
[X86][AVX] Combine 128-bit lane shuffles with a zeroable upper half to EXTRACT_SUBVECTOR (PR40720)

As explained on PR40720, EXTRACTF128 is always as good/better than VPERM2F128, and we can use the implicit zeroing of the upper half.

I've added some extra tests to vector-shuffle-combining-avx2.ll to make sure we don't lose coverage.

4 years ago[X86] Rename matchShuffleAsByteRotate to matchShuffleAsElementRotate. NFC.
Simon Pilgrim [Sun, 29 Mar 2020 11:51:52 +0000 (12:51 +0100)]
[X86] Rename matchShuffleAsByteRotate to matchShuffleAsElementRotate. NFC.

This was an inner helper function for the real matchShuffleAsByteRotate function, but it is more generic and is used directly for VALIGN lowering which doesn't work at the byte level.

4 years ago[X86][AVX] Add X86ISD::VALIGN target shuffle decode support
Simon Pilgrim [Sun, 29 Mar 2020 11:41:14 +0000 (12:41 +0100)]
[X86][AVX] Add X86ISD::VALIGN target shuffle decode support

Allows us to combine VALIGN instructions with other shuffles - the combiner doesn't create VALIGN yet though.

4 years ago[mlir] NFC: fix trivial typo in documents
Kazuaki Ishizaki [Sat, 28 Mar 2020 18:20:02 +0000 (03:20 +0900)]
[mlir] NFC: fix trivial typo in documents

Reviewers: mravishankar, antiagainst, nicolasvasilache, herhut, aartbik, mehdi_amini, bondhugula

Reviewed By: mehdi_amini, bondhugula

Subscribers: bondhugula, jdoerfert, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, csigg, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, Joonsoo, bader, llvm-commits

Tags: #llvm

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

4 years ago[VPlan] Use one VPWidenRecipe per original IR instruction. (NFC).
Florian Hahn [Sun, 29 Mar 2020 10:35:17 +0000 (11:35 +0100)]
[VPlan] Use one VPWidenRecipe per original IR instruction. (NFC).

This patch changes VPWidenRecipe to only store a single original IR
instruction. This is the first required step towards modeling it's
operands as VPValues and also towards breaking it up into a
VPInstruction.

Discussed as part of D74695.

Reviewers: Ayal, gilr, rengolin

Reviewed By: gilr

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

4 years ago[PostOrderIterator] Use SmallVector to store stack; NFC
Nikita Popov [Sun, 29 Mar 2020 09:36:30 +0000 (11:36 +0200)]
[PostOrderIterator] Use SmallVector to store stack; NFC

We use a SmallPtrSet to track visited nodes, use a SmallVector
of the same size for the stack.

4 years ago[X86] X86CallFrameOptimization - generalize slow push code path
Simon Pilgrim [Sun, 29 Mar 2020 10:01:42 +0000 (11:01 +0100)]
[X86] X86CallFrameOptimization - generalize slow push code path

Replace the explicit isAtom() || isSLM() test with the more general (and more specific) slowTwoMemOps() check to avoid the use of the PUSHrmm push from memory case.

This is actually very tricky to test in anything but quite complex code, but the atomic-idempotent.ll tests seem to be the most straightforward to use.

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

4 years ago[mlir] Add exp2 conversion to llvm.intr.exp2
Aaron Smith [Sun, 29 Mar 2020 08:23:08 +0000 (01:23 -0700)]
[mlir] Add exp2 conversion to llvm.intr.exp2

4 years ago[AlignmentFromAssumptions] Fix a SCEV assertion resulting from address space differences.
Richard Diamond [Mon, 2 Mar 2020 18:08:57 +0000 (12:08 -0600)]
[AlignmentFromAssumptions] Fix a SCEV assertion resulting from address space differences.

Summary:
On targets with different pointer sizes, -alignment-from-assumptions could attempt to create SCEV expressions which use different effective SCEV types. The provided test illustrates the issue.

In `getNewAlignment`, AASCEV would be the (only) alloca, which would have an effective SCEV type of i32. But PtrSCEV, the GEP in this case, due to being in the flat/default address space, will have an effective SCEV of i64.

This patch resolves the issue by truncating PtrSCEV to AASCEV's effective type.

Reviewers: hfinkel, jdoerfert

Reviewed By: jdoerfert

Subscribers: jvesely, nhaehnle, hiraditya, javed.absar, kerbowa, llvm-commits

Tags: #llvm

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

4 years ago[X86] Add cost model test cases for fmin/fmax reduction.
Craig Topper [Sat, 28 Mar 2020 22:30:13 +0000 (15:30 -0700)]
[X86] Add cost model test cases for fmin/fmax reduction.

4 years ago[MC][PowerPC] Make .reloc support arbitrary relocation types
Fangrui Song [Sat, 28 Mar 2020 23:48:59 +0000 (16:48 -0700)]
[MC][PowerPC] Make .reloc support arbitrary relocation types

Generalizes ad7199f3e60a49db023099dcb879fcc9cdf94a2e (R_PPC_NONE/R_PPC64_NONE).

4 years agoFix compatibility for __builtin_stdarg_start
Joerg Sonnenberger [Tue, 17 Mar 2020 23:39:54 +0000 (00:39 +0100)]
Fix compatibility for __builtin_stdarg_start

The __builtin_stdarg_start is the legacy spelling of __builtin_va_start.
It should behave exactly the same, but for the last 9 years it would
behave subtly different for diagnostics. Follow the change from
29ad95b23217 to require custom type checking.

4 years agoAMDGPU: Make use of default operands
Matt Arsenault [Sat, 7 Sep 2019 23:07:47 +0000 (19:07 -0400)]
AMDGPU: Make use of default operands

4 years agoPut back initializers that were dropped in 0ab5b5b8581d9f2951575f7245824e6e4fc57dec
Benjamin Kramer [Sat, 28 Mar 2020 21:06:12 +0000 (22:06 +0100)]
Put back initializers that were dropped in 0ab5b5b8581d9f2951575f7245824e6e4fc57dec

Found by msan.

4 years ago[COFF] Stabilize sort
Benjamin Kramer [Sat, 28 Mar 2020 20:38:50 +0000 (21:38 +0100)]
[COFF] Stabilize sort

Found by llvm::sort's expensive checks.

4 years ago[MDBuilder] Don't use stable sort for sorting integers.
Benjamin Kramer [Sat, 28 Mar 2020 20:16:51 +0000 (21:16 +0100)]
[MDBuilder] Don't use stable sort for sorting integers.

4 years ago[InstCombine] Remove unreachable blocks before DCE
Nikita Popov [Sat, 28 Mar 2020 20:16:48 +0000 (21:16 +0100)]
[InstCombine] Remove unreachable blocks before DCE

Dropping unreachable code may reduce use counts on other instructions,
so it's better to do this earlier rather than later.

NFC-ish, may only impact worklist order.

4 years ago[InstCombine] Merge two functions; NFC
Nikita Popov [Sat, 28 Mar 2020 20:13:33 +0000 (21:13 +0100)]
[InstCombine] Merge two functions; NFC

Merge AddReachableCodeToWorklist() into prepareICWorklistFromFunction().
It's one logical step, and this makes it easier to move code.

4 years ago[ADT] Automatically forward llvm::sort to array_pod_sort if safe
Benjamin Kramer [Sat, 28 Mar 2020 17:47:26 +0000 (18:47 +0100)]
[ADT] Automatically forward llvm::sort to array_pod_sort if safe

This is safe if the iterator type is a pointer and the comparator is
stateless. The enable_if pattern I'm adding here only uses
array_pod_sort for the default comparator (std::less).

Using array_pod_sort has a potential performance impact, but I didn't
notice anything when testing clang. Sorting doesn't seem to be on the
hot path anywhere in LLVM.

Shrinks Release+Asserts clang by 73k.

4 years ago[AMDGPU] Stabilize sort order
Benjamin Kramer [Sat, 28 Mar 2020 19:16:41 +0000 (20:16 +0100)]
[AMDGPU] Stabilize sort order

Found by the expensive checks in llvm::sort.

4 years ago[BPF] support 128bit int explicitly in layout spec
Yonghong Song [Sun, 22 Mar 2020 05:54:20 +0000 (22:54 -0700)]
[BPF] support 128bit int explicitly in layout spec

Currently, bpf does not specify 128bit alignment in its
layout spec. So for a structure like
  struct ipv6_key_t {
    unsigned pid;
    unsigned __int128 saddr;
    unsigned short lport;
  };
clang will generate IR type
  %struct.ipv6_key_t = type { i32, [12 x i8], i128, i16, [14 x i8] }
Additional padding is to ensure later IR->MIR can generate correct
stack layout with target layout spec.

But it is common practice for a tracing program to be
first compiled with target flag (e.g., x86_64 or aarch64) through
clang to generate IR and then go through llc to generate bpf
byte code. Tracing program often refers to kernel internal
data structures which needs to be compiled with non-bpf target.

But such a compilation model may cause a problem on aarch64.
The bcc issue https://github.com/iovisor/bcc/issues/2827
reported such a problem.

For the above structure, since aarch64 has "i128:128" in its
layout string, the generated IR will have
  %struct.ipv6_key_t = type { i32, i128, i16 }

Since bpf does not have "i128:128" in its spec string,
the selectionDAG assumes alignment 8 for i128 and
computes the stack storage size for the above is 32 bytes,
which leads incorrect code later.

The x86_64 does not have this issue as it does not have
"i128:128" in its layout spec as it does permits i128 to
be alignmented at 8 bytes at stack. Its IR type looks like
  %struct.ipv6_key_t = type { i32, [12 x i8], i128, i16, [14 x i8] }

The fix here is add i128 support in layout spec, the same as
aarch64. The only downside is we may have less optimal stack
allocation in certain cases since we require 16byte alignment
for i128 instead of 8. But this is probably fine as i128 is
not used widely and in most cases users should already
have proper alignment.

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

4 years agoUpgrade some instances of std::sort to llvm::sort. NFC.
Benjamin Kramer [Sat, 28 Mar 2020 18:19:55 +0000 (19:19 +0100)]
Upgrade some instances of std::sort to llvm::sort. NFC.

4 years agoRemove constexpr that MSVC doesn't like
Benjamin Kramer [Sat, 28 Mar 2020 18:21:56 +0000 (19:21 +0100)]
Remove constexpr that MSVC doesn't like

4 years ago[CodeGen] Fix sinking local values in lpads with phis
Reid Kleckner [Sat, 28 Mar 2020 18:03:14 +0000 (11:03 -0700)]
[CodeGen] Fix sinking local values in lpads with phis

There was already a test case for landingpads to handle this case, but I
had forgotten to consider PHI instructions preceding the EH_LABEL in the
landingpad.

PR45261

4 years ago[InstCombine] Use replaceOperand() API in GEP transforms
Nikita Popov [Sat, 28 Mar 2020 18:02:48 +0000 (19:02 +0100)]
[InstCombine] Use replaceOperand() API in GEP transforms

To make sure that replaced operands get DCEd. This drops one
iteration from gepphigep.ll, which is still not optimal.

This was the last test case performing more than 3 iterations.

NFC-ish, only worklist order should change.

4 years ago[InstCombine] Reduce code duplication in GEP of PHI transform; NFC
Nikita Popov [Sat, 28 Mar 2020 17:44:35 +0000 (18:44 +0100)]
[InstCombine] Reduce code duplication in GEP of PHI transform; NFC

The `NewGEP->setOperand(DI, NewPN)` call was duplicated, and the
insertion of NewGEP is the same in both if/else, so we can extract it.

4 years agoConst-initialize ParsedAttrInfos
Benjamin Kramer [Sat, 28 Mar 2020 17:12:28 +0000 (18:12 +0100)]
Const-initialize ParsedAttrInfos

Gets rid of a 150k static initializer (Release clang)

4 years agoAfter 09158252f777c2e2f06a86b154c44abcbcf9bb74, fix build when -DLLVM_ENABLE_THREADS=OFF
Alexandre Ganea [Sat, 28 Mar 2020 17:54:44 +0000 (13:54 -0400)]
After 09158252f777c2e2f06a86b154c44abcbcf9bb74, fix build when -DLLVM_ENABLE_THREADS=OFF

Tested on Linux with Clang 9, and on Windows with Visual Studio 2019 16.5.1 with -DLLVM_ENABLE_THREADS=ON and OFF.

4 years ago[InstCombine] Fix worklist management in foldXorOfICmps()
Nikita Popov [Fri, 21 Feb 2020 21:48:06 +0000 (22:48 +0100)]
[InstCombine] Fix worklist management in foldXorOfICmps()

Because this code does not use the IC-aware replaceInstUsesWith()
helper, we need to manually push users to the worklist.

This is NFC-ish, in that it may only change worklist order.

4 years ago[InstCombine] Change limit-max-iterations test case; NFC
Nikita Popov [Sat, 28 Mar 2020 17:15:31 +0000 (18:15 +0100)]
[InstCombine] Change limit-max-iterations test case; NFC

This particular case will stop needing multiple iterations in
a followup change.

4 years ago[lld][ELF] Mark empty NOLOAD output sections SHT_NOBITS instead of SHT_PROGBITS
Matt Schulte [Sat, 28 Mar 2020 16:54:06 +0000 (09:54 -0700)]
[lld][ELF] Mark empty NOLOAD output sections SHT_NOBITS instead of SHT_PROGBITS

This fixes PR# 45336.
Output sections described in a linker script as NOLOAD with no input sections would be marked as SHT_PROGBITS.

Reviewed By: MaskRay

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

4 years ago[CorrelatedValuePropagation] Remove redundant if statement in processSelect()
Enna1 [Sat, 28 Mar 2020 16:59:22 +0000 (17:59 +0100)]
[CorrelatedValuePropagation] Remove redundant if statement in processSelect()

This statement

    if (ReplaceWith == S) ReplaceWith = UndefValue::get(S->getType());

is introduced in https://reviews.llvm.org/rG35609d97ae89b8e13f40f4e6b9b056954f8baa83
to fix a case where unreachable code can cause select instruction
simplification to fail. In https://reviews.llvm.org/rGd10480657527ffb44ea213460fb3676a6b1300aa,
we begin to perform a depth-first walk of basic blocks. This means
we will not visit unreachable blocks. So we do not need this the
special check any more.

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

4 years ago[AsmPrinter] Emit .weak directive for weak linkage on COFF for symbols without a...
Martin Storsjö [Sat, 28 Mar 2020 15:37:59 +0000 (17:37 +0200)]
[AsmPrinter] Emit .weak directive for weak linkage on COFF for symbols without a comdat

MC already knows how to emulate the .weak directive (with its ELF
semantics; i.e., an undefined weak symbol resolves to 0, and a defined
weak symbol has lower link precedence than a strong symbol of the same
name) using COFF weak externals. Plumb this through the ASM printer too,
so that definitions marked with __attribute__((weak)) at the language
level (which gets translated to weak linkage at the IR level) have the
corresponding .weak directive emitted. Note that declarations marked
with __attribute__((weak)) at the language level (which translates to
extern_weak at the IR level) already have .weak directives emitted.

Weak*/linkonce* symbols without an associated comdat (in particular, ones
generated with __attribute__((weak)) in C/C++) were earlier emitted as
normal unique globals, as the comdat is required to provide the linkonce
semantics. This change makes sure they are emitted as .weak instead,
allowing other symbols to override them.

Rename the existing coff-weak.ll test to coff-linkonce.ll. I'm not
quite sure what that test covers, since the behavior being tested in it
(the emission of a one_only section) is just a result of passing
-function-sections to llc; the linkonce_odr makes no difference.

Add a new coff-weak.ll which tests the new directive emission.

Based on an previous patch by Shoaib Meenai.

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

4 years ago[libc] Only use __has_builtin on clang
Alex Brachet [Sat, 28 Mar 2020 16:28:43 +0000 (12:28 -0400)]
[libc] Only use __has_builtin on clang

The preprocessor reads the whole line even if the first condition of an and is false so this broke when compiling on older gcc versions which don't recognize `__has_builtin`

4 years ago[SCCP] Remove LatticeVal alias now that transition is done (NFC).
Florian Hahn [Sat, 28 Mar 2020 15:20:10 +0000 (15:20 +0000)]
[SCCP] Remove LatticeVal alias now that transition is done (NFC).

The LatticeVal alias was introduced to reduce the diff size for the
transition to ValueLatticeElement, which is done now.

This patch removes the unnecessary alias and updates some very verbose
type uses with auto.

4 years ago[SCCP] Remove unused toLatticeValue helper (NFC).
Florian Hahn [Sat, 28 Mar 2020 15:18:12 +0000 (15:18 +0000)]
[SCCP] Remove unused toLatticeValue helper (NFC).

LatticeVal is an alias for ValueLatticeElement and the function is not
used any longer.

4 years ago[clang][Syntax] Handle macro arguments in spelledForExpanded
Kadir Cetinkaya [Sat, 29 Feb 2020 12:37:31 +0000 (13:37 +0100)]
[clang][Syntax] Handle macro arguments in spelledForExpanded

Reviewers: sammccall

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[lldb][NFC] Fix typo in TestInvalidArgsLog
Raphael Isemann [Sat, 28 Mar 2020 15:16:08 +0000 (16:16 +0100)]
[lldb][NFC] Fix typo in TestInvalidArgsLog

4 years agoFix GCC warning on enum class bitfield. NFC.
Michael Liao [Sat, 28 Mar 2020 14:12:58 +0000 (10:12 -0400)]
Fix GCC warning on enum class bitfield. NFC.

4 years agoFix `-Wsign-compare` warning. NFC.
Michael Liao [Sat, 28 Mar 2020 05:40:31 +0000 (01:40 -0400)]
Fix `-Wsign-compare` warning. NFC.

4 years ago[llvm-rc] Allow -1 for menu item IDs
Martin Storsjö [Fri, 27 Mar 2020 19:58:48 +0000 (21:58 +0200)]
[llvm-rc] Allow -1 for menu item IDs

This seems to be used in some resource files, e.g.
https://github.com/wxWidgets/wxWidgets/blob/f3217573d7240411e7817c9d76d965b2452987a2/include/wx/msw/wx.rc#L28.

MSVC rc.exe and GNU windres both allow any value here, and silently
just truncate to uint16_t range. This just explicitly allows the
-1 value and errors out on others - the same was done for control
IDs in dialogs in c1a67857ba0a6ba558818b589fe7c0fcc8f238ae.

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

4 years ago[X86][SSE] Add testnzc(~X,Y) -> testnzc(X,Y) test cases
Simon Pilgrim [Sat, 28 Mar 2020 10:56:34 +0000 (10:56 +0000)]
[X86][SSE] Add testnzc(~X,Y) -> testnzc(X,Y) test cases

4 years ago[X86][SSE] Add original PR38522 test case
Simon Pilgrim [Fri, 27 Mar 2020 22:42:58 +0000 (22:42 +0000)]
[X86][SSE] Add original PR38522 test case

4 years ago[X86][SSE] Add combine tests for PTEST/TESTPS/TESTPD instructions
Simon Pilgrim [Fri, 27 Mar 2020 21:52:51 +0000 (21:52 +0000)]
[X86][SSE] Add combine tests for PTEST/TESTPS/TESTPD instructions

Including some test coverage for PR38522

4 years ago[docs] Added solutions to slow build under common problems.
Evan LeClercq [Sat, 28 Mar 2020 09:09:58 +0000 (04:09 -0500)]
[docs] Added solutions to slow build under common problems.

I added a list of options to configure should someone have issues with
long build time or running out of memory. This was added under common
problems in the getting started section of the documentation.

Reviewed By: Meinersbur, dim, e-leclercq

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

4 years agotsan: fix build bugs
Dmitry Vyukov [Sat, 28 Mar 2020 08:07:15 +0000 (09:07 +0100)]
tsan: fix build bugs

1. Fix expression inside of DCHECK_LE.
2. Add a debug build test to buildgo.sh.
3. Fix race binary path in buildgo.sh.

4 years ago[NFC] Attributor comment updates / cast cleanup
Uday Bondhugula [Sat, 28 Mar 2020 06:51:49 +0000 (12:21 +0530)]
[NFC] Attributor comment updates / cast cleanup

Minor update/fixes to comments for the Attributor pass, and dyn_cast -> cast.

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76972

4 years ago[libc] Extend add_object rule to handle helper object libraries.
Siva Chandra Reddy [Wed, 25 Mar 2020 16:44:06 +0000 (09:44 -0700)]
[libc] Extend add_object rule to handle helper object libraries.

The rule is now called add_object_library.

Reviewers: abrachet

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

4 years ago[libc][NFC] Ensure internal implementation is in __llvm_libc namespace
Alex Brachet [Sat, 28 Mar 2020 06:59:42 +0000 (02:59 -0400)]
[libc][NFC] Ensure internal implementation is in __llvm_libc namespace

Summary: In preparation for D76818.

Reviewers: PaulkaToast, sivachandra, gchatelet

Reviewed By: PaulkaToast, sivachandra

Subscribers: MaskRay, tschuett, libc-commits

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

4 years agoMerge in symbols from Mach-O dyld trie to the symbol table
Jason Molenda [Sat, 28 Mar 2020 05:35:19 +0000 (22:35 -0700)]
Merge in symbols from Mach-O dyld trie to the symbol table

In ObjectFileMachO we construct the symbol table from multiple
sources -- primarily the binary's nlist records, but when the nlist
symbols have been stripped, we would augment those with function
start address from the LC_FUNCTION_STARTS or eh_frame.  This patch
adds another source of symbols - the exported symbols that the
dynamic linker, dyld, uses at runtime from its trie structure.  This
provides us names and addresses for these functions/data.

This patch removes the code from ParseSymtab that would reject an
empty symbol table / nlist source.  It adds a new symbols_added
set which tracks the address of every symbol we've added to the
symtab.  We add symbols in most-information-ful order, and before
adding a symbol from less-informational-ful source (e.g.
LC_FUNCTION_STARTS with no function name), we check if that symbol
has already been added.

On targets with thumb code generation, instead of using the 0th bit
in these addresses in FunctionStarts (or now the trie entries), we
use the data field of FunctionStarts (formerly used to track if the
func_start should be added) and a flag for the trie entries to
encode this, and only store the actual addresses in the symbols_seen
and these vectors.

<rdar://problem/50791451>

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

4 years ago[FEnv] Constfold some unary constrained operations
Serge Pavlov [Wed, 15 Jan 2020 05:44:54 +0000 (12:44 +0700)]
[FEnv] Constfold some unary constrained operations

This change implements constant folding to constrained versions of
intrinsics, implementing rounding: floor, ceil, trunc, round, rint and
nearbyint.

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

4 years ago[AMDGPU] Add __builtin_amdgcn_workgroup_size_x/y/z
Yaxun (Sam) Liu [Wed, 25 Mar 2020 13:50:51 +0000 (09:50 -0400)]
[AMDGPU] Add __builtin_amdgcn_workgroup_size_x/y/z

The main purpose of introducing these builtins is to add a range
metadata [1, 1025) on the work group size loaded from dispatch
ptr, which cannot be done by source code.

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

4 years agoPR45294: Fix handling of assumed template names looked up in the lexical
Richard Smith [Sat, 28 Mar 2020 03:59:49 +0000 (20:59 -0700)]
PR45294: Fix handling of assumed template names looked up in the lexical
scope.

There are a few contexts in which we assume a name is a template name;
if such a context is one where we should perform an unqualified lookup,
and lookup finds nothing, we would form a dependent template name even
if the name is not dependent. This happens in particular for the lookup
of a pseudo-destructor.

In passing, rename ActOnDependentTemplateName to just ActOnTemplateName
given that we apply it for non-dependent template names too.

4 years agoRemove spurious duplicated header include (NFC)
Mehdi Amini [Sat, 28 Mar 2020 03:49:53 +0000 (03:49 +0000)]
Remove spurious duplicated header include (NFC)

4 years agoForm invalid template-id annotations when parsing a construct that is
Richard Smith [Sat, 28 Mar 2020 03:26:34 +0000 (20:26 -0700)]
Form invalid template-id annotations when parsing a construct that is
required to be a template-id but names an undeclared identifier.

4 years agoVerify number of result types in generated builder.
Sean Silva [Thu, 26 Mar 2020 21:57:01 +0000 (14:57 -0700)]
Verify number of result types in generated builder.

Summary: This just bit me and is nasty to debug.

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

4 years agoRevert "[FileCollector] Add a method to add a whole directory and it contents."
Jonas Devlieghere [Sat, 28 Mar 2020 02:21:10 +0000 (19:21 -0700)]
Revert "[FileCollector] Add a method to add a whole directory and it contents."

This reverts commit 8913769e353a171ba01fa8ce9d598e979b620be9 because the
unit test is failing on the Windows bot.

4 years ago[compiler-rt] Fall back to internal_uname() when called early
Ilya Leoshkevich [Fri, 27 Mar 2020 19:23:20 +0000 (20:23 +0100)]
[compiler-rt] Fall back to internal_uname() when called early

Summary:
Commit 5f5fb56c68e4 ("[compiler-rt] Intercept the uname() function")
broke sanitizer-x86_64-linux and clang-cmake-thumbv7-full-sh (again)
builds:

http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/26313
http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-full-sh/builds/4324

The reason is that uname() can be called as early as
__pthread_initialize_minimal_internal(). When intercepted, this
triggers ASan initialization, which eventually calls dlerror(), which
in turn uses pthreads, causing all sorts of issues.

Fix by falling back to internal_uname() when interceptor runs before
ASan is initialized. This is only for Linux at the moment.

Reviewers: eugenis, vitalybuka

Reviewed By: eugenis

Subscribers: dberris, #sanitizers, pcc

Tags: #sanitizers

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

4 years agoImprove error recovery from missing '>' in template argument list.
Richard Smith [Sat, 28 Mar 2020 01:50:02 +0000 (18:50 -0700)]
Improve error recovery from missing '>' in template argument list.

Produce the conventional "to match this '<'" note, so that the user
knows why we expected a '>', and properly handle '>>' in C++11 onwards.

4 years ago[MLIR][NFC] Move TestDialect -> Dialect/Test
Uday Bondhugula [Tue, 24 Mar 2020 08:43:46 +0000 (14:13 +0530)]
[MLIR][NFC] Move TestDialect -> Dialect/Test

Move test/lib/TestDialect to test/lib/Dialect/Test - makes the dir
structure more uniform.

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76677

4 years ago[MLIR] Introduce full/partial tile separation using if/else
Uday Bondhugula [Mon, 23 Mar 2020 15:00:12 +0000 (20:30 +0530)]
[MLIR] Introduce full/partial tile separation using if/else

This patch introduces a utility to separate full tiles from partial
tiles when tiling affine loop nests where trip counts are unknown or
where tile sizes don't divide trip counts. A conditional guard is
generated to separate out the full tile (with constant trip count loops)
into the then block of an 'affine.if' and the partial tile to the else
block. The separation allows the 'then' block (which has constant trip
count loops) to be optimized better subsequently: for eg. for
unroll-and-jam, register tiling, vectorization without leading to
cleanup code, or to offload to accelerators. Among techniques from the
literature, the if/else based separation leads to the most compact
cleanup code for multi-dimensional cases (because a single version is
used to model all partial tiles).

INPUT

  affine.for %i0 = 0 to %M {
    affine.for %i1 = 0 to %N {
      "foo"() : () -> ()
    }
  }

OUTPUT AFTER TILING W/O SEPARATION

  map0 = affine_map<(d0) -> (d0)>
  map1 = affine_map<(d0)[s0] -> (d0 + 32, s0)>

  affine.for %arg2 = 0 to %M step 32 {
    affine.for %arg3 = 0 to %N step 32 {
      affine.for %arg4 = #map0(%arg2) to min #map1(%arg2)[%M] {
        affine.for %arg5 = #map0(%arg3) to min #map1(%arg3)[%N] {
          "foo"() : () -> ()
        }
      }
    }
  }

  OUTPUT AFTER TILING WITH SEPARATION

  map0 = affine_map<(d0) -> (d0)>
  map1 = affine_map<(d0) -> (d0 + 32)>
  map2 = affine_map<(d0)[s0] -> (d0 + 32, s0)>

  #set0 = affine_set<(d0, d1)[s0, s1] : (-d0 + s0 - 32 >= 0, -d1 + s1 - 32 >= 0)>

  affine.for %arg2 = 0 to %M step 32 {
    affine.for %arg3 = 0 to %N step 32 {
      affine.if #set0(%arg2, %arg3)[%M, %N] {
        // Full tile.
        affine.for %arg4 = #map0(%arg2) to #map1(%arg2) {
          affine.for %arg5 = #map0(%arg3) to #map1(%arg3) {
            "foo"() : () -> ()
          }
        }
      } else {
        // Partial tile.
        affine.for %arg4 = #map0(%arg2) to min #map2(%arg2)[%M] {
          affine.for %arg5 = #map0(%arg3) to min #map2(%arg3)[%N] {
            "foo"() : () -> ()
          }
        }
      }
    }
  }

The separation is tested via a cmd line flag on the loop tiling pass.
The utility itself allows one to pass in any band of contiguously nested
loops, and can be used by other transforms/utilities. The current
implementation works for hyperrectangular loop nests.

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D76700

4 years ago [mlir] NFC: fix trivial typo in source files
Kazuaki Ishizaki [Thu, 26 Mar 2020 18:51:37 +0000 (03:51 +0900)]
 [mlir] NFC: fix trivial typo in source files

Summary: fix trivial typos in the source files

Reviewers: mravishankar, antiagainst, nicolasvasilache, herhut, rriddle, aartbik

Reviewed By: antiagainst, rriddle

Subscribers: mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, csigg, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, Joonsoo, bader, llvm-commits

Tags: #llvm

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

4 years ago[GlobalISel] Fix equality for copies from physregs in matchEqualDefs
Jessica Paquette [Thu, 26 Mar 2020 22:00:34 +0000 (15:00 -0700)]
[GlobalISel] Fix equality for copies from physregs in matchEqualDefs

When we see this:

```
%a = COPY $physreg
...
SOMETHING implicit-def $physreg
...
%b = COPY $physreg
```

The two copies are not equivalent, and so we shouldn't perform any folding
on them.

When we have two instructions which use a physical register check that they
define the same virtual register(s) as well.

e.g., if we run into this case

```
%a = COPY $physreg
...
%b = COPY %a
```

we can say that the two copies are the same, and can be folded.

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

4 years ago[lldb/CMake] Only CMAKE_CFG_INTDIR if it's not '.'
Jonas Devlieghere [Sat, 28 Mar 2020 00:48:58 +0000 (17:48 -0700)]
[lldb/CMake] Only CMAKE_CFG_INTDIR if it's not '.'

Thanks to Brooks Davis for spotting this and finding a solution.