platform/upstream/llvm.git
4 years ago[CostModel] getCFInstrCost in getUserCost.
Sam Parker [Mon, 15 Jun 2020 07:58:25 +0000 (08:58 +0100)]
[CostModel] getCFInstrCost in getUserCost.

Have BasicTTI call the base implementation so that both agree on the
default behaviour, which the default being a cost of '1'. This has
required an X86 specific implementation as it seems to be very
reliant on those instructions being free. Changes are also made to
AMDGPU so that their implementations distinguish between cost kinds,
so that the unrolling isn't affected. PowerPC also has its own
implementation to prevent changes to the reg-usage vectorizer test.

The cost model test changes now reflect that ret instructions are not
generally free.

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

4 years ago[lldb] Handle all Clang::Type::Builtin enums
Kirill Bobyrev [Mon, 15 Jun 2020 08:18:59 +0000 (10:18 +0200)]
[lldb] Handle all Clang::Type::Builtin enums

Cleanup after https://reviews.llvm.org/D81459

4 years ago[CMake][runtimes] Skip adding 2nd set of the same variables for a generic target
Kristina Bessonova [Wed, 10 Jun 2020 14:18:30 +0000 (16:18 +0200)]
[CMake][runtimes] Skip adding 2nd set of the same variables for a generic target

No need to parse and add the same variables twice if runtimes is being
built for a generic target (i.e. w/o multilib).

Reviewed By: phosek

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

4 years ago[NFCI][CostModel] Unify FNeg cost
Sam Parker [Thu, 11 Jun 2020 08:59:12 +0000 (09:59 +0100)]
[NFCI][CostModel] Unify FNeg cost

Enable TTIImpl::getUserCost to handle FNeg so that
getInstructionThroughput can call that instead. This means we can
remove the code in the AMDGPU backend too.

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

4 years ago[IR] Prefer hasFnAttribute() where possible (NFC)
Nikita Popov [Sun, 14 Jun 2020 21:52:39 +0000 (23:52 +0200)]
[IR] Prefer hasFnAttribute() where possible (NFC)

When checking for an enum function attribute, use hasFnAttribute()
rather than hasAttribute() at FunctionIndex, because it is
significantly faster (and more concise to boot).

4 years ago[CostModel] Unify ExtractElement cost.
Sam Parker [Mon, 15 Jun 2020 07:27:14 +0000 (08:27 +0100)]
[CostModel] Unify ExtractElement cost.

Move the cost modelling, with the reduction pattern matching, from
getInstructionThroughput into generic TTIImpl::getUserCost. The
modelling in the AMDGPU backend can now be removed.

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

4 years ago[NFC] Bail early simplifying unconditional branches
Max Kazantsev [Mon, 15 Jun 2020 06:58:54 +0000 (13:58 +0700)]
[NFC] Bail early simplifying unconditional branches

4 years ago[msan] Fix comment of __msan::Origin::isHeapOrigin
Fangrui Song [Mon, 15 Jun 2020 06:00:04 +0000 (23:00 -0700)]
[msan] Fix comment of __msan::Origin::isHeapOrigin

4 years agoRevert "Return "[InstCombine] Simplify compare of Phi with constant inputs against...
Sam Parker [Mon, 15 Jun 2020 06:46:28 +0000 (07:46 +0100)]
Revert "Return "[InstCombine] Simplify compare of Phi with constant inputs against a constant""

This reverts commit 23291b9863c8af7ad348c4a7d85d8d784df88eb1.

This caused performance regressions.

4 years ago[SVE] Ensure proper mangling of ACLE tuple types
Sander de Smalen [Mon, 15 Jun 2020 06:20:55 +0000 (07:20 +0100)]
[SVE] Ensure proper mangling of ACLE tuple types

The AAPCS specifies that the tuple types such as `svint32x2_t`
should use their `arm_sve.h` names when mangled instead of their
builtin names.

This patch also renames the internal types for the tuples to
be prefixed with `__clang_`, so they are not misinterpreted as
specified internal types like the non-tuple types which *are* defined
in the AAPCS. Using a builtin type for the tuples is a purely
a choice of the Clang implementation.

Reviewers: rsandifo-arm, c-rhodes, efriedma, rengolin

Reviewed By: efriedma

Tags: #clang

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

4 years ago[SveEmitter] Add SVE tuple types and builtins for svundef.
Sander de Smalen [Mon, 15 Jun 2020 06:20:43 +0000 (07:20 +0100)]
[SveEmitter] Add SVE tuple types and builtins for svundef.

This patch adds new SVE types to Clang that describe tuples of SVE
vectors. For example `svint32x2_t` which maps to the twice-as-wide
vector `<vscale x 8 x i32>`. Similarly, `svint32x3_t` will map to
`<vscale x 12 x i32>`.

It also adds builtins to return an `undef` vector for a given
SVE type.

Reviewers: c-rhodes, david-arm, ctetreau, efriedma, rengolin

Reviewed By: c-rhodes

Tags: #clang

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

4 years ago[SafeStack,NFC] Make StackColoring read-only
Vitaly Buka [Mon, 15 Jun 2020 06:03:13 +0000 (23:03 -0700)]
[SafeStack,NFC] Make StackColoring read-only

Move core which removes markers out of StackColoring.

4 years ago[SafeStack,NFC] Remove unneded branch
Vitaly Buka [Mon, 15 Jun 2020 04:28:34 +0000 (21:28 -0700)]
[SafeStack,NFC] Remove unneded branch

4 years ago[SafeStack,NFC] Fix naming style
Vitaly Buka [Mon, 15 Jun 2020 02:04:47 +0000 (19:04 -0700)]
[SafeStack,NFC] Fix naming style

4 years ago[SafeStack,NFC] Cleanup LiveRange interface
Vitaly Buka [Mon, 15 Jun 2020 01:59:23 +0000 (18:59 -0700)]
[SafeStack,NFC] Cleanup LiveRange interface

4 years ago[SafeStack,NFC] "const" cleanup
Vitaly Buka [Sun, 14 Jun 2020 23:31:09 +0000 (16:31 -0700)]
[SafeStack,NFC] "const" cleanup

4 years ago[SafeStack,NFC] Add BlockLifetimeInfo constructor
Vitaly Buka [Sun, 14 Jun 2020 23:06:07 +0000 (16:06 -0700)]
[SafeStack,NFC] Add BlockLifetimeInfo constructor

4 years ago[SafeStack,NFC] Use IntrinsicInst instead of Instruction
Vitaly Buka [Sun, 14 Jun 2020 22:58:10 +0000 (15:58 -0700)]
[SafeStack,NFC] Use IntrinsicInst instead of Instruction

4 years ago[SafeStack,NFC] Move ClColoring into SafeStack.cpp
Vitaly Buka [Sun, 14 Jun 2020 22:32:07 +0000 (15:32 -0700)]
[SafeStack,NFC] Move ClColoring into SafeStack.cpp

This allows to reuse the code in other components.

4 years ago[SafeStack,NFC] Move unconditional code into constructor
Vitaly Buka [Sun, 14 Jun 2020 21:35:34 +0000 (14:35 -0700)]
[SafeStack,NFC] Move unconditional code into constructor

Prepare to move ClColoring from SafeStackCode to SafeStackLayout.
This will allow to reuse the code in other components.

4 years ago[Test] Update test with check script, add two more motivating cases
Max Kazantsev [Mon, 15 Jun 2020 05:36:33 +0000 (12:36 +0700)]
[Test] Update test with check script, add two more motivating cases

4 years ago[PowerPC] fma chain break to expose more ILP
Chen Zheng [Mon, 15 Jun 2020 01:34:52 +0000 (21:34 -0400)]
[PowerPC] fma chain break to expose more ILP

This patch tries to reassociate two patterns related to FMA to expose
more ILP on PowerPC.

// Pattern 1:
//   A =  FADD X,  Y          (Leaf)
//   B =  FMA  A,  M21,  M22  (Prev)
//   C =  FMA  B,  M31,  M32  (Root)
// -->
//   A =  FMA  X,  M21,  M22
//   B =  FMA  Y,  M31,  M32
//   C =  FADD A,  B

// Pattern 2:
//   A =  FMA  X,  M11,  M12  (Leaf)
//   B =  FMA  A,  M21,  M22  (Prev)
//   C =  FMA  B,  M31,  M32  (Root)
// -->
//   A =  FMUL M11,  M12
//   B =  FMA  X,  M21,  M22
//   D =  FMA  A,  M31,  M32
//   C =  FADD B,  D

Reviewed By: jsji

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

4 years ago[NewPM] Avoid redundant CGSCC run for updated SCC
Wenlei He [Tue, 26 May 2020 20:53:35 +0000 (13:53 -0700)]
[NewPM] Avoid redundant CGSCC run for updated SCC

Summary:
When an SCC got split due to inlining, we have two mechanisms for reprocessing the updated SCC, first is UR.UpdatedC
that repeatedly rerun the new, current SCC; second is a worklist for all newly split SCCs. We can avoid rerun of
the same SCC when the SCC is set to be processed by both mechanisms *back to back*. In pathological cases, such redundant
rerun could cause exponential size growth due to inlining along cycles, even when there's no SCC mutation and hence
convergence is not a problem.

Note that it's ok to have SCC updated and rerun immediately, and also in the work list if we have actually moved an SCC
to be topologically "below" the current one due to merging. In that case, we will need to revisit the current SCC after
those moved SCCs. For that reason, the redundant avoidance here only targets back to back rerun of the same SCC - the
case described by the now removed FIXME comment.

Reviewers: chandlerc, wmi

Subscribers: llvm-commits, hoy

Tags: #llvm

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

4 years ago[PowerPC] Add some InstAlias for mtspr/mfspr instructions
Kang Zhang [Mon, 15 Jun 2020 02:43:13 +0000 (02:43 +0000)]
[PowerPC] Add some InstAlias for mtspr/mfspr instructions

Summary:

We have defined MTSPR/MFSPR and MTSPR8/MFSPR8, but we only defined
mtspr/mfspr InstAlias for some MTSPR/MFSPR.
This patch is to add the InstAlias definitions for MTSPR8/MFSPR8,
and add the some new mtspr/mfspr InstAlias we may use.

Reviewed By: steven.zhang

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

4 years ago[lld-macho] Set REQUIRES: x86 on more tests
Jez Ng [Mon, 15 Jun 2020 01:59:28 +0000 (18:59 -0700)]
[lld-macho] Set REQUIRES: x86 on more tests

Summary: Fixes the build break caused by D81802.

4 years ago[PowerPC] fold a bug for rlwinm folding when with full mask.
Chen Zheng [Mon, 15 Jun 2020 01:22:50 +0000 (21:22 -0400)]
[PowerPC] fold a bug for rlwinm folding when with full mask.

Reviewed By: steven.zhang

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

4 years ago[lld-macho] Properly handle & validate relocation r_length
Jez Ng [Sun, 14 Jun 2020 02:52:20 +0000 (19:52 -0700)]
[lld-macho] Properly handle & validate relocation r_length

Summary:
We should be reading / writing our addends / relocated addresses based on
r_length, and not just based on the type of the relocation. But since only
some r_length values are valid for a given reloc type, I've also added some
validation.

ld64 has code to allow for r_length = 0 in X86_64_RELOC_BRANCH relocs, but I'm
not sure how to create such a relocation...

Reviewed By: smeenai

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

4 years ago[lld-macho] No need to explicitly specify -arch in tests
Jez Ng [Sun, 14 Jun 2020 04:45:29 +0000 (21:45 -0700)]
[lld-macho] No need to explicitly specify -arch in tests

Summary: After {D81326} landed, some tests started failing if they did
not have `-arch` specified. I think one of the reasons happened was due
to the fact that we were taking a reference to a temporary value that
was freed too early. Fixing that got the error to go away on my local
Linux machine.

Reviewed By: MaskRay

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

4 years ago[X86][SSE] Fold BITOP(MOVMSK(X),MOVMSK(Y)) -> MOVMSK(BITOP(X,Y))
Simon Pilgrim [Sun, 14 Jun 2020 16:53:33 +0000 (17:53 +0100)]
[X86][SSE] Fold BITOP(MOVMSK(X),MOVMSK(Y)) -> MOVMSK(BITOP(X,Y))

Reduce XMM->GPR traffic by performing bitops on the vectors, and using a single MOVMSK call.

This requires us to use vectors of the same size and element width, but we can mix fp/int type equivalents with suitable bitcasting.

4 years ago[IR] Remove unused IndexAttrPair typedef (NFC)
Nikita Popov [Sun, 14 Jun 2020 20:27:17 +0000 (22:27 +0200)]
[IR] Remove unused IndexAttrPair typedef (NFC)

This was part of an older attributes implementation.

4 years ago[IR] Support efficient AssertingVH/PoisoningVH lookup
Nikita Popov [Sat, 13 Jun 2020 19:10:22 +0000 (21:10 +0200)]
[IR] Support efficient AssertingVH/PoisoningVH lookup

Currently, there doesn't seem to be any way to look up a Value*
in a map/set indexed by AssertingVH/PoisoningVH, without creating
a value handle -- which is fairly expensive, because it involves
adding the value handle to the use list and immediately removing
it again. Using find_as(Value *) does not work (and is in fact
worse than just using find(Value *)), because it will end up
creating multiple value handles during the lookup itself.

For AssertingVH, address this by simply using DenseMapInfo<T *>
instead of manually implementing something. The AssertingVH<T>
will now get coerced to T*, rather than the other way around.

For PoisoningVH, add extra overloads of getHashValue() and
isEqual() that accept a T* argument.

This allows using find_as(Value *) to perform efficient lookups
in assertion-enabled builds.

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

4 years ago[LAA] Do not set CanDoRT to false for AS that do not need RT checks.
Florian Hahn [Sat, 13 Jun 2020 13:24:50 +0000 (14:24 +0100)]
[LAA] Do not set CanDoRT to false for AS that do not need RT checks.

Alternative approach to D80570.

canCheckPtrAtRT already contains checks the figure out for which alias
sets runtime checks are needed. But it currently sets CanDoRT to false
for alias sets for which we cannot do RT checks but also do not need
any.

If we know that we do not need RT checks based on the number of
reads/writes in the alias set, we can skip processing the AS.

This patch also adds an assertion to ensure that DepCands does not
contain more than one write from the alias set.

Reviewers: Ayal, anemet, hfinkel, dmgreen

Reviewed By: dmgreen

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

4 years ago[LoopUnroll] Allow loops with multiple exiting blocks where loop latch
Whitney Tsang [Sun, 14 Jun 2020 18:42:24 +0000 (18:42 +0000)]
[LoopUnroll] Allow loops with multiple exiting blocks where loop latch
is not necessary one of them.

Summary: Currently LoopUnrollPass already allow loops with multiple
exiting blocks, but it is only allowed when the loop latch is one of the
exiting blocks.
When the loop latch is not an exiting block, then only single exiting
block is supported.
When possible, the single loop latch or the single exiting block
terminator is optimized to an unconditional branch in the unrolled loop.

This patch allows loops with multiple exiting blocks even if the loop
latch is not one of them. However, the optimization of exiting block
terminator to unconditional branch is not done when there exists more
than one exiting block.
Reviewer: dmgreen, Meinersbur, etiotto, fhahn, efriedma, bmahjour
Reviewed By: efriedma
Subscribers: hiraditya, zzheng, llvm-commits
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D81053

4 years agoAMDGPU: Add some baseline immediate encoding test changes
Matt Arsenault [Sun, 14 Jun 2020 16:16:38 +0000 (12:16 -0400)]
AMDGPU: Add some baseline immediate encoding test changes

Add some encoding checks and add a few new cases.

4 years agoAMDGPU: Do not bundle inline asm
Matt Arsenault [Thu, 11 Jun 2020 20:09:41 +0000 (16:09 -0400)]
AMDGPU: Do not bundle inline asm

Fixes bug 46285

4 years agoGlobalISel: Add some basic getters to GISelKnownBits
Matt Arsenault [Wed, 10 Jun 2020 13:40:51 +0000 (09:40 -0400)]
GlobalISel: Add some basic getters to GISelKnownBits

4 years agoAMDGPU/GlobalISel: Select general case for G_PTRMASK
Matt Arsenault [Sat, 23 May 2020 21:10:58 +0000 (17:10 -0400)]
AMDGPU/GlobalISel: Select general case for G_PTRMASK

4 years agoAMDGPU: Fix spill/restore of 192-bit registers
Matt Arsenault [Fri, 12 Jun 2020 01:40:21 +0000 (21:40 -0400)]
AMDGPU: Fix spill/restore of 192-bit registers

I tried to use an IR inline asm test, but that doesn't work since the
inline asm handling asserts without an MVT to use.

4 years ago[X86][SSE] Add tests for missing BITOP(MOVMSK(X),MOVMSK(Y)) -> MOVMSK(BITOP(X,Y)...
Simon Pilgrim [Sun, 14 Jun 2020 15:24:18 +0000 (16:24 +0100)]
[X86][SSE] Add tests for missing BITOP(MOVMSK(X),MOVMSK(Y)) -> MOVMSK(BITOP(X,Y)) fold

This would help reduce XMM->GPR traffic for some reduction cases.

4 years ago[PowerPC] Support constrained rounding operations
Qiu Chaofan [Sun, 14 Jun 2020 15:43:31 +0000 (23:43 +0800)]
[PowerPC] Support constrained rounding operations

This patch adds handling of constrained FP intrinsics about round,
truncate and extend for PowerPC target, with necessary tests.

Reviewed By: steven.zhang

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

4 years ago[PowerPC] Exploit vnmsubfp instruction
Qiu Chaofan [Sun, 14 Jun 2020 15:19:17 +0000 (23:19 +0800)]
[PowerPC] Exploit vnmsubfp instruction

On PowerPC, we have vnmsubfp Altivec instruction for fnmsub operation on
v4f32 type. Default pattern for this instruction never works since we
don't have legal fneg for v4f32 when VSX disabled.

Reviewed By: steven.zhang

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

4 years ago[DAGCombiner] Require ninf for division estimation
Qiu Chaofan [Sun, 14 Jun 2020 14:58:22 +0000 (22:58 +0800)]
[DAGCombiner] Require ninf for division estimation

Current implementation of division estimation isn't correct for some
cases like 1.0/0.0 (result is nan, not expected inf).

And this change exposes a potential infinite loop: we use
isConstOrConstSplatFP in combineRepeatedFPDivisors to look up if the
divisor is some constant. But it doesn't work after legalized on some
platforms. This patch restricts the method to act before LegalDAG.

Reviewed By: spatel

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

4 years ago[PassManager] restore early-cse to vector cleanup
Sanjay Patel [Sun, 14 Jun 2020 13:50:10 +0000 (09:50 -0400)]
[PassManager] restore early-cse to vector cleanup

As noted in D80236 - the early-cse pass was included here before:
D75145 / rG71a316883d50
But it got moved outside of the "extra" option there, then it
got dropped while adjusting -vector-combine:
rG6438ea45e053
rG57bb4787d72f

So this is restoring the behavior and adding a test to prevent
accidental changes again. I don't see an equivalent option for
the new pass manager.

4 years ago[OpenMP][Tool] Extend reuse of OMPT testing
Joachim Protze [Wed, 11 Mar 2020 16:02:19 +0000 (17:02 +0100)]
[OpenMP][Tool] Extend reuse of OMPT testing

This patch allows to specify a prefix (default:empty) to be included into print-out
written by callback.h.
Also adding a cmake target to find the header file from other tests.

Reviewed by: jdoerfert

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

4 years ago[OpenMP] support alloc of serialized tasks
Joachim Protze [Wed, 10 Jun 2020 14:44:52 +0000 (16:44 +0200)]
[OpenMP] support alloc of serialized tasks

Reviewed by: AndreyChurbanov

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

4 years ago[LVI] Fix class indentation (NFC)
Nikita Popov [Sun, 14 Jun 2020 13:42:27 +0000 (15:42 +0200)]
[LVI] Fix class indentation (NFC)

This class uses a mix of different indentation levels, normalize it.

4 years ago[LVI] Cache lookup of experimental.guard intrinsic (NFC)
Nikita Popov [Sat, 13 Jun 2020 13:36:55 +0000 (15:36 +0200)]
[LVI] Cache lookup of experimental.guard intrinsic (NFC)

When LVI is performing assume intersections, it also checks for
llvm.experimental.guard intrinsics. To avoid unnecessary block
scans, it first checks whether this intrinsic is declared in the
module at all. I've noticed that we end up spending quite a lot
of time looking up that function again and again...

Avoid this by only looking it up once when LazyValueInfo is
constructed. This of course assumes that we don't introduce new
guard intrinsics (which is the case for all existing uses of LVI --
and even if it weren't, it would not introduce miscompiles, just
potentially lose optimization power.)

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

4 years ago[ARM] Additional cast cost tests.
David Green [Sun, 14 Jun 2020 11:05:20 +0000 (12:05 +0100)]
[ARM] Additional cast cost tests.

This adds additional cast cpst tests useful for MVE, notably around half
types.

4 years ago[InstCombine] reassociate FP diff of sums into sum of diffs
Sanjay Patel [Sun, 14 Jun 2020 13:09:03 +0000 (09:09 -0400)]
[InstCombine] reassociate FP diff of sums into sum of diffs

(a[0] + a[1] + a[2] + a[3]) - (b[0] + b[1] + b[2] +b[3]) -->
(a[0] - b[0]) + (a[1] - b[1]) + (a[2] - b[2]) + (a[3] - b[3])

This should be the last step in solving PR43953:
https://bugs.llvm.org/show_bug.cgi?id=43953

We started emitting reduction intrinsics with:
D80867/ rGe50059f6b6b3
So it's a relatively easy pattern match now to re-order those ops.
Also, I have not seen any complaints for the switch to intrinsics
yet, so I'll propose to remove the "experimental" tag from the
intrinsics soon.

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

4 years ago[InstCombine] allow undef elements when comparing vector constants for min/max bailout
Sanjay Patel [Sun, 14 Jun 2020 13:01:33 +0000 (09:01 -0400)]
[InstCombine] allow undef elements when comparing vector constants for min/max bailout

This is a hacky, but low-risk fix to avoid the infinite loop in PR46271:
https://bugs.llvm.org/show_bug.cgi?id=46271

As discussed there, the problem is that FoldOpIntoSelect() can get into a conflict
with a transform that wants to pull a 'not' op through min/max via
SimplifyDemandedVectorElts(). We need to relax our matching of min/max to include
undefined elements in vector constants to avoid that. Alternatively, we could
improve or cripple the demanded elements analysis, but that could create even
more problems.

The likely better, safer alternative will be to create min/max intrinsics, so
we can remove all of the hacks related to min/max matching in instcombine.

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

4 years ago[X86][SSE] LowerVectorAllZeroTest - add support for pre-SSE41 targets
Simon Pilgrim [Sun, 14 Jun 2020 12:10:33 +0000 (13:10 +0100)]
[X86][SSE] LowerVectorAllZeroTest - add support for pre-SSE41 targets

Even without PTEST, we can still efficiently perform an OR reduction as PMOVMSKB(PCMPEQB(X,0)) == 0, avoiding xmm->gpr extractions.

4 years ago[MLIR][NFC] Update vim syntax file
Uday Bondhugula [Sun, 14 Jun 2020 12:29:06 +0000 (17:59 +0530)]
[MLIR][NFC] Update vim syntax file

Add a few more commonly used ops and missing keywords.

4 years ago[clangd] Fix windows builds failing on check-clangd
njames93 [Sun, 14 Jun 2020 12:29:17 +0000 (13:29 +0100)]
[clangd] Fix windows builds failing on check-clangd

4 years ago[X86][SSE] Add non-SSE41 target PTEST tests
Simon Pilgrim [Sun, 14 Jun 2020 11:20:48 +0000 (12:20 +0100)]
[X86][SSE] Add non-SSE41 target PTEST tests

Ensure codegen is still reasonable - ideally we'd make use of MOVMSK for this.

4 years ago[NFC] mv llvm/test/tools/obj2yaml/macho-DWARF-debug-ranges.yaml llvm/test/ObjectYAML...
Xing GUO [Sun, 14 Jun 2020 08:39:15 +0000 (16:39 +0800)]
[NFC] mv llvm/test/tools/obj2yaml/macho-DWARF-debug-ranges.yaml llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml

4 years ago[ObjectYAML][DWARF] Let the target address size be inferred from FileHeader.
Xing GUO [Sun, 14 Jun 2020 04:00:46 +0000 (12:00 +0800)]
[ObjectYAML][DWARF] Let the target address size be inferred from FileHeader.

This patch adds a new field `bool Is64bit` in `DWARFYAML::Data` to indicate the address size of target. It's helpful for inferring the `AddrSize` in some DWARF sections.

Reviewed By: MaskRay

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

4 years ago[IteratedDominanceFrontier] Decrease number of SmallPtrSet::insert and delete unneede...
Fangrui Song [Sun, 14 Jun 2020 02:48:50 +0000 (19:48 -0700)]
[IteratedDominanceFrontier] Decrease number of SmallPtrSet::insert and delete unneeded SmallVector::clear

Also, fix the argument name to be consistent with the declaration.

4 years ago[X86] Add mayLoad flag to FARCALL*m/FARJMP memory instrutions. Add 'm' to the end...
Craig Topper [Sat, 13 Jun 2020 22:40:51 +0000 (15:40 -0700)]
[X86] Add mayLoad flag to FARCALL*m/FARJMP memory instrutions. Add 'm' to the end of FARJMP64/FARCALL64 instruction names.

We never codegen them so this doesn't matter in practice. But
sometimes someone comes along and tries to use these flags
for something else. LIke the Load Value Inject inline assembly
handling.

4 years ago[X86] Automatically harden inline assembly RET instructions against Load Value Inject...
Craig Topper [Sat, 13 Jun 2020 22:16:00 +0000 (15:16 -0700)]
[X86] Automatically harden inline assembly RET instructions against Load Value Injection (LVI)

Previously, the X86AsmParser would issue a warning whenever a ret instruction is encountered. This patch changes the behavior to automatically transform each ret instruction in an inline assembly stream into:

shlq $0, (%rsp)
lfence
ret

which is secure, according to https://software.intel.com/security-software-guidance/insights/deep-dive-load-value-injection#specialinstructions.

Patch by Scott Constable with some minor changes by Craig Topper.

4 years ago[X86] Teach combineBitcastvxi1 to prefer movmsk on avx512 in more cases
Craig Topper [Sat, 13 Jun 2020 21:50:06 +0000 (14:50 -0700)]
[X86] Teach combineBitcastvxi1 to prefer movmsk on avx512 in more cases

If the input to the bitcast is a sign bit test, it makes sense to
directly use vpmovmskb or vmovmskps/pd. This removes the need to
copy the sign bits to a k-register and then to a GPR.

Fixes PR46200.

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

4 years ago[X86] Move -x86-use-vzeroupper command line flag into runOnMachineFunction for the...
Craig Topper [Sat, 13 Jun 2020 21:40:56 +0000 (14:40 -0700)]
[X86] Move -x86-use-vzeroupper command line flag into runOnMachineFunction for the pass itself rather than the pass pipeline construction

This pass has no dependencies on other passes so conditionally
including it in the pipeline doens't do much. Just move it the
pass itself to keep it isolated.

4 years ago[NFCI][AggressiveInstCombiner] Add `STATISTIC()`s for transforms
Roman Lebedev [Sat, 13 Jun 2020 12:24:53 +0000 (15:24 +0300)]
[NFCI][AggressiveInstCombiner] Add `STATISTIC()`s for transforms

4 years agoRevert "[libc++] Migrate Lit platform detection to the DSL"
Vladimir Vereschaka [Sat, 13 Jun 2020 19:50:43 +0000 (12:50 -0700)]
Revert "[libc++] Migrate Lit platform detection to the DSL"

This reverts commit 3ea9450bda902574426a847e290567ffaf6a6c40.

The commit fails the remote library tests on the toolchain builders:

http://lab.llvm.org:8011/builders/llvm-clang-win-x-armv7l
http://lab.llvm.org:8011/builders/llvm-clang-win-x-aarch64

4 years ago[DSE,MSSA] Fix location order in isOverwrite call.
Florian Hahn [Sat, 13 Jun 2020 19:24:57 +0000 (20:24 +0100)]
[DSE,MSSA] Fix location order in isOverwrite call.

isOverwrite expects the later location as first argument and the earlier
result later. The adjusted call is intended to check whether CC
overwrites DefLoc.

4 years ago[X86] Enable the EVEX->VEX compression pass at -O0.
Craig Topper [Sat, 13 Jun 2020 19:28:46 +0000 (12:28 -0700)]
[X86] Enable the EVEX->VEX compression pass at -O0.

A lot of what EVEX->VEX does is equivalent to what the
prioritization in the assembly parser does. When an AVX mnemonic
is used without any EVEX features or XMM16-31, the parser will
pick the VEX encoding.

Since codegen doesn't go through the parser, we should also
use VEX instructions when we can so that the code coming out of
integrated assembler matches what you'd get from outputing an
assembly listing and parsing it.

The pass early outs if AVX isn't enabled and uses TSFlags to
check for EVEX instructions before doing the more costly table
lookups. Hopefully that's enough to keep this from impacting
-O0 compile times.

4 years ago[X86] Separate imm from relocImm handling.
Craig Topper [Sat, 13 Jun 2020 18:29:28 +0000 (11:29 -0700)]
[X86] Separate imm from relocImm handling.

relocImm was a complexPattern that handled both ConstantSDNode
and X86Wrapper. But it was only applied selectively because using
it would cause patterns to be not importable into FastISel or
GlobalISel. So it only got applied to flag setting instructions,
stores, RMW arithmetic instructions, and rotates.

Most of the test changes are a result of making patterns available
to GlobalISel or FastISel. The absolute-cmp.ll change is due to
this fixing a pattern ordering issue to make an absolute symbol
match to an 8-bit immediate before trying a 32-bit immediate.

I tried to use PatFrags to reduce the repetition, but I was getting
errors from TableGen.

4 years agoFix FastISel dropping srcloc metadata from InlineAsm
Amanieu d'Antras [Sat, 13 Jun 2020 07:16:58 +0000 (08:16 +0100)]
Fix FastISel dropping srcloc metadata from InlineAsm

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

I've also added the Extra_IsConvergent flag which was missing from FastISel.

Reviewers: echristo

Reviewed By: echristo

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[lldb][test] Trying to fix build bot after 0431e4bcb27bba30156ac49be4c09ac632c5a03a
Xing GUO [Sat, 13 Jun 2020 15:53:13 +0000 (23:53 +0800)]
[lldb][test] Trying to fix build bot after 0431e4bcb27bba30156ac49be4c09ac632c5a03a

4 years agoRecommit "[DWARFYAML][debug_line] Replace `InitialLength` with `Format` and `Length`."
Xing GUO [Sat, 13 Jun 2020 14:04:51 +0000 (22:04 +0800)]
Recommit "[DWARFYAML][debug_line] Replace `InitialLength` with `Format` and `Length`."

This recommits fcc0c186e9cea0af644581069058f0e00469d20e

4 years ago[clang][NFC] Pack LambdaExpr
Bruno Ricci [Sat, 13 Jun 2020 13:17:03 +0000 (14:17 +0100)]
[clang][NFC] Pack LambdaExpr

This saves sizeof(void *) bytes per LambdaExpr.

Review-after-commit since this is a straightforward change similar
to the work done on other nodes. NFC.

4 years ago[clang-format] Fix short block when braking after control statement
mydeveloperday [Sat, 13 Jun 2020 13:17:01 +0000 (14:17 +0100)]
[clang-format] Fix short block when braking after control statement

Summary:
This patch fixes bug #44192

When clang-format is run with option AllowShortBlocksOnASingleLine, it is expected to either succeed in putting the short block with its control statement on a single line or fail and leave the block as is. When brace wrapping after control statement is activated, if the block + the control statement length is superior to column limit but the block alone is not, clang-format puts the block in two lines: one for the control statement and one for the block. This patch removes this unexpected behaviour. Current unittests are updated to check for this behaviour.

Patch By: Bouska

Reviewed By: MyDeveloperDay

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

4 years ago[clang][NFC] Add an AST dump test for LambdaExpr
Bruno Ricci [Sat, 13 Jun 2020 13:03:25 +0000 (14:03 +0100)]
[clang][NFC] Add an AST dump test for LambdaExpr

This test illustrate the bug fixed in D81787.

4 years ago[clang][NFC] Mark CWG 1443 (Default arguments and non-static data members)...
Bruno Ricci [Sat, 13 Jun 2020 12:59:54 +0000 (13:59 +0100)]
[clang][NFC] Mark CWG 1443 (Default arguments and non-static data members)...

...as done. This is a NAD which has always been implemented correctly.

4 years ago[clang][NFC] Mark CWG 974 and 1814 (default argument in a...
Bruno Ricci [Sat, 13 Jun 2020 12:49:07 +0000 (13:49 +0100)]
[clang][NFC] Mark CWG 974 and 1814 (default argument in a...

...lambda-expression) as done. They have been allowed since at least clang 3.3.

4 years agoRevert "[DWARFYAML][debug_line] Replace `InitialLength` with `Format` and `Length`."
Xing GUO [Sat, 13 Jun 2020 09:57:02 +0000 (17:57 +0800)]
Revert "[DWARFYAML][debug_line] Replace `InitialLength` with `Format` and `Length`."

This reverts commit fcc0c186e9cea0af644581069058f0e00469d20e.

4 years ago[DWARFYAML][debug_line] Replace `InitialLength` with `Format` and `Length`.
Xing GUO [Sat, 13 Jun 2020 09:45:09 +0000 (17:45 +0800)]
[DWARFYAML][debug_line] Replace `InitialLength` with `Format` and `Length`.

4 years agoReapply [LVI] Restructure caching to fix non-determinism
Nikita Popov [Sat, 16 Nov 2019 15:22:18 +0000 (16:22 +0100)]
Reapply [LVI] Restructure caching to fix non-determinism

This was reverted due to a reported memory usage increase. However,
a test case was never provided, and I wasn't able to reproduce it
myself.

Relative to the original patch, I have moved the block cache
structure behind a unique_ptr, to avoid storing a huge structure
inside a DenseMap.

---

Variant on D70103 to fix https://bugs.llvm.org/show_bug.cgi?id=43909.
The caching is switched to always use a BB to cache entry map, which
then contains per-value caches. A separate set contains value handles
with a deletion callback. This allows us to properly invalidate
overdefined values.

A possible alternative would be to always cache by value first and
have per-BB maps/sets in the each cache entry. In that case we could
use a ValueMap and would avoid the separate value handle set. I went
with the BB indexing at the top level to make it easier to integrate
D69914, but possibly that's not the right choice.

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

4 years ago[libunwind][RISCV] Track PC separately from RA
Amanieu d'Antras [Sat, 13 Jun 2020 06:57:48 +0000 (07:57 +0100)]
[libunwind][RISCV] Track PC separately from RA

Summary:
This allows unwinding to work across signal handler frames where the IP of the previous frame is not the same as the current value of the RA register. This is particularly useful for acquiring backtraces from signal handlers.

I kept the size of the context structure the same to avoid ABI breakage; the PC is stored in the previously unused slot for register 0.

Reviewers: #libunwind, mhorne, lenary, luismarques, arichardson, compnerd

Reviewed By: #libunwind, mhorne, lenary, compnerd

Subscribers: kamleshbhalui, jrtc27, bsdjhb, arichardson, compnerd, simoncook, kito-cheng, shiva0217, rogfer01, rkruppe, psnobl, benna, Jim, s.egerton, sameer.abuasal, evandro, llvm-commits, libcxx-commits

Tags: #libunwind, #llvm

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

4 years ago[lldb] Remove unnecessary c_str() in OutputFormattedHelpText calls (NFC)
Jonas Devlieghere [Sat, 13 Jun 2020 04:13:20 +0000 (21:13 -0700)]
[lldb] Remove unnecessary c_str() in OutputFormattedHelpText calls (NFC)

4 years ago[lldb] Small improvements in ValueObjectPrinter::PrintDecl (NFC)
Jonas Devlieghere [Sat, 13 Jun 2020 04:01:37 +0000 (21:01 -0700)]
[lldb] Small improvements in ValueObjectPrinter::PrintDecl (NFC)

Remove unused argument, simply code and reformat.

4 years ago[X86] Remove brand_id check from getHostCPUName.
Craig Topper [Sat, 13 Jun 2020 03:38:30 +0000 (20:38 -0700)]
[X86] Remove brand_id check from getHostCPUName.

Brand index was a feature some Pentium III and Pentium 4 CPUs.
It provided an index into a software lookup table to provide a
brand name for the CPU. This is separate from the family/model.

It's unclear to me why this index being non-zero was used to
block checking family/model. I think the effect of this is that
-march=native was not working correctly on the CPUs that have a
non-zero brand index. They are all about 20 years old so this
probably hasn't affected many users.

4 years ago[X86] Remove brand_id check from cpu_indicator_init.
Craig Topper [Sat, 13 Jun 2020 03:35:47 +0000 (20:35 -0700)]
[X86] Remove brand_id check from cpu_indicator_init.

Brand index was a feature some Pentium III and Pentium 4 CPUs.
It provided an index into a software lookup table to provide a
brand name for the CPU. This is separate from the family/model.

It's unclear to me why this index being non-zero was used to
block checking family/model. None of the CPUs that had a non-zero
brand index are supported by __builtin_cpu_is or target
multi-versioning so this should have no real effect.

4 years agoFix GCC5 build by renaming variable used in 'auto' deduction (NFC)
Mehdi Amini [Sat, 13 Jun 2020 02:52:55 +0000 (02:52 +0000)]
Fix GCC5 build by renaming variable used in 'auto' deduction (NFC)

GCC5 errors out with:

llvm/lib/Analysis/StackSafetyAnalysis.cpp:935:21: error: use of 'KV' before deduction of 'auto'
     for (auto &KV : KV.second.Params) {
                     ^

4 years ago[WebAssembly] WebAssembly doesn't support "protected" visibility
Dan Gohman [Wed, 10 Jun 2020 00:34:55 +0000 (17:34 -0700)]
[WebAssembly] WebAssembly doesn't support "protected" visibility

Implement the `hasProtectedVisibility()` hook to indicate that, like
Darwin, WebAssembly doesn't support "protected" visibility.

On ELF, "protected" visibility is intended to be an optimization, however
in practice it often [isn't], and ELF documentation generally ranges from
[not mentioning it at all] to [strongly discouraging its use].

[isn't]: https://www.airs.com/blog/archives/307
[not mentioning it at all]: https://gcc.gnu.org/wiki/Visibility
[strongly discouraging its use]: https://www.akkadia.org/drepper/dsohowto.pdf

While here, also mention the new Reactor support in the release notes.

4 years ago[X86] Combine the three feature variables in getHostCPUName into an array and pass...
Craig Topper [Sat, 13 Jun 2020 00:13:49 +0000 (17:13 -0700)]
[X86] Combine the three feature variables in getHostCPUName into an array and pass it around as an array reference.

This makes the setting and clearing of bits simpler.

4 years ago[X86] Combine to two feature variables in __cpu_indicator_init into an array and...
Craig Topper [Sat, 13 Jun 2020 00:13:04 +0000 (17:13 -0700)]
[X86] Combine to two feature variables in __cpu_indicator_init into an array and pass them around as pointer we can treat as an array.

This simplifies the indexing code to set and test bits.

4 years ago[X86] Explicitly initialize __cpu_features2 global in compiler-rt to 0.
Craig Topper [Sat, 13 Jun 2020 00:09:17 +0000 (17:09 -0700)]
[X86] Explicitly initialize __cpu_features2 global in compiler-rt to 0.

Seems like this may be needed in order for the linker to find the
symbol. At least on my Mac.

4 years ago[StackSafety] Run ThinLTO
Vitaly Buka [Fri, 5 Jun 2020 08:11:35 +0000 (01:11 -0700)]
[StackSafety] Run ThinLTO

Summary:
ThinLTO linking runs dataflow processing on collected
function parameters. Then StackSafetyGlobalInfoWrapperPass
in ThinLTO backend will run as usual looking up to external
symbol in the summary if needed.

Depends on D80985.

Reviewers: eugenis, pcc

Reviewed By: eugenis

Subscribers: inglorion, hiraditya, steven_wu, dexonsmith, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

4 years ago[StackSafety,NFC] Extract addOverflowNever
Vitaly Buka [Sat, 13 Jun 2020 00:41:28 +0000 (17:41 -0700)]
[StackSafety,NFC] Extract addOverflowNever

4 years ago[flang] Add the helper class for building fir.do_loop operations. A fir.do_loop model...
Eric Schweitz [Thu, 11 Jun 2020 20:56:12 +0000 (13:56 -0700)]
[flang] Add the helper class for building fir.do_loop operations. A fir.do_loop models the semantics of a Fortran DO loop construct. One can use this operation to explicitly capture a DO loop for passing into the high-level optimizer.

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

4 years ago[MLIR][SPIRVToLLVM] Implemented shift conversion pattern
George Mitenkov [Fri, 12 Jun 2020 23:04:17 +0000 (19:04 -0400)]
[MLIR][SPIRVToLLVM] Implemented shift conversion pattern

This patch has shift ops conversion implementation. In SPIR-V dialect,
`Shift` and `Base` may have different bit width. On the contrary,
in LLVM dialect both `Base` and `Shift` have to be of the same bit width.
This leads to the following cases:
- if `Base` has the same bit width as `Shift`, the conversion is
  straightforward.
- if `Base` has a greater bit width than `Shift`, shift is sign/zero
  extended first. Then the extended value is passed to the shift.
- otherwise the conversion is considered to be illegal.

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

4 years ago[lldb/Test] Assert that no targets or modules remain after a test completes.
Jonas Devlieghere [Fri, 12 Jun 2020 22:12:55 +0000 (15:12 -0700)]
[lldb/Test] Assert that no targets or modules remain after a test completes.

The reproducer intentionally leak every object allocated during replay,
which means that modules never get orphaned. If this were to happen for
another reason, we might not be testing what we think we are. Assert
that there are no targets left at the end of a test and that the global
module cache is empty in the non-reproducer scenario.

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

4 years ago[flang] Added test for specification expressions
Pete Steinfeld [Fri, 12 Jun 2020 19:42:51 +0000 (12:42 -0700)]
[flang] Added test for specification expressions

I added a test the exercises all of the cases instances of specification expressions as defined in section 10.1.11.

Summary: [flang] Added test for specification expressions

Reviewers: tskeith, klausler, DavidTruby

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[mlir][spirv] Enhance structure type member decoration handling
HazemAbdelhafez [Wed, 10 Jun 2020 23:15:55 +0000 (19:15 -0400)]
[mlir][spirv] Enhance structure type member decoration handling

Modify structure type in SPIR-V dialect to support:
1) Multiple decorations per structure member
2) Key-value based decorations (e.g., MatrixStride)

This commit kept the Offset decoration separate from members'
decorations container for easier implementation and logical clarity.
As such, all references to Structure layoutinfo are now offsetinfo,
and any member layout defining decoration (e.g., RowMajor for Matrix)
will be add to the members' decorations container along with its
value if any.

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

4 years ago[libcxx][test] Silence MSVC signed-to-unsigned implicit conversion warnings
Casey Carter [Fri, 12 Jun 2020 21:54:51 +0000 (14:54 -0700)]
[libcxx][test] Silence MSVC signed-to-unsigned implicit conversion warnings

4 years ago[lldb/Test] Fix unit test suffixes and add a CMake error.
Jonas Devlieghere [Fri, 12 Jun 2020 21:17:20 +0000 (14:17 -0700)]
[lldb/Test] Fix unit test suffixes and add a CMake error.

Lit will only look for unittest targets ending in `Tests`. Add an error
when the target doesn't have the `Tests` suffix.

4 years ago[WebAssembly] Add intrinsic for i64x2.mul
Thomas Lively [Fri, 12 Jun 2020 21:08:18 +0000 (14:08 -0700)]
[WebAssembly] Add intrinsic for i64x2.mul

Summary:
This instruction was implemented in 3181273be7, but that commit did
not add an intrinsic for it.

Reviewers: aheejin

Subscribers: dschuff, sbc100, jgravelle-google, sunfish, cfe-commits

Tags: #clang

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

4 years agoTemporarily revert "[MemCpyOptimizer] Simplify API of processStore and processMem...
Eric Christopher [Fri, 12 Jun 2020 21:00:32 +0000 (14:00 -0700)]
Temporarily revert "[MemCpyOptimizer] Simplify API of processStore and processMem* functions"
as it seems to be causing some internal crashes in AA after
email with the author.

This reverts commit f79e6a8847aa330cac6837168d02f6b319024858.

4 years ago[lldb/Test] Fix unittest name
Jonas Devlieghere [Fri, 12 Jun 2020 21:00:57 +0000 (14:00 -0700)]
[lldb/Test] Fix unittest name

Lit looks for the Tests prefix in the unit test name.

4 years ago[NFCI][MachineCopyPropagation] invalidateRegister(): use SmallSet<8> instead of DenseSet.
Roman Lebedev [Fri, 12 Jun 2020 16:08:01 +0000 (19:08 +0300)]
[NFCI][MachineCopyPropagation] invalidateRegister(): use SmallSet<8> instead of DenseSet.

This decreases the time consumed by the pass [during RawSpeed unity build]
by 25% (0.0586 s -> 0.04388 s).

While that isn't really impressive overall, that wasn't the goal here.
The memory results here are noticeable.
The baseline results are:
```
total runtime: 55.65s.
calls to allocation functions: 19754254 (354960/s)
temporary memory allocations: 4951609 (88974/s)
peak heap memory consumption: 239.13MB
peak RSS (including heaptrack overhead): 463.79MB
total memory leaked: 198.01MB
```
While with this patch the results are:
```
total runtime: 55.37s.
calls to allocation functions: 19068237 (344403/s)   # -3.47 %
temporary memory allocations: 4261772 (76974/s)      # -13.93 % (!!!)
peak heap memory consumption: 239.13MB
peak RSS (including heaptrack overhead): 463.73MB
total memory leaked: 198.01MB
```

So we get rid of *a lot* of temporary allocations.

Using `SmallSet<8>` makes sense to me because at least here
for x86 BdVer2, the size of that set is *never* more than 3,
over all of llvm test-suite + RawSpeed.

The story might be different on other targets,
not sure if it will ever justify whole DenseSet,
but if it does SmallDenseSet might be a compromise.