OSDN Git Service

android-x86/external-llvm.git
5 years ago[GlobalISel] Fix choice of instruction selector for AArch64 at -O0 with -global-isel=0
Petr Pavlu [Tue, 8 Jan 2019 14:19:06 +0000 (14:19 +0000)]
[GlobalISel] Fix choice of instruction selector for AArch64 at -O0 with -global-isel=0

Commit rL347861 introduced an unintentional change in the behaviour when
compiling for AArch64 at -O0 with -global-isel=0. Previously, explicitly
disabling GlobalISel resulted in using FastISel but an updated condition
in the commit changed it to using SelectionDAG. The patch fixes this
condition and slightly better organizes the code that chooses the
instruction selector.

Fixes PR40131.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350626 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[DA][NewPM] Add a printerpass and port the testsuite
Philip Pfaffe [Tue, 8 Jan 2019 14:06:58 +0000 (14:06 +0000)]
[DA][NewPM] Add a printerpass and port the testsuite

The new-pm version of DA is untested. Testing requires a printer, so
add that and use it in the existing DA tests.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350624 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86][Darwin] Emit compact-unwind for register-sized stack adjustments
Francis Visoiu Mistrih [Tue, 8 Jan 2019 13:53:15 +0000 (13:53 +0000)]
[X86][Darwin] Emit compact-unwind for register-sized stack adjustments

For stack frames on the size of a register in x86, a code size optimization
emits "push rax/eax" instead of "sub" for stack allocation. For example:

foo:
  .cfi_startproc
BB#0:
  pushq %rax
Ltmp0:
  .cfi_def_cfa_offset 16
  ...
  .cfi_endproc

However, we are falling back to DWARF in this case because we cannot
encode %rax as a saved register.

This requirement is wrong, since we don't care about the contents of
%rax, it is the equivalent of a sub.

In order to specify that we care about the contents of %rax, we would
need a .cfi_offset %rax, <offset>.

It's also overzealous in the case where there are pushes for callee saved
registers followed by a "push rax/eax" instead of "sub", in which case we should
also be able to encode the callee saved regs and everything else using compact
unwind.

Patch authored by Bruno Cardoso Lopes.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350623 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "Revert "Resubmit rL345008 "Split MachinePipeliner code into header and cpp...
Lama Saba [Tue, 8 Jan 2019 13:30:36 +0000 (13:30 +0000)]
Revert "Revert "Resubmit rL345008 "Split MachinePipeliner code into header and cpp files"""

This reverts commit rL350497
reported remaining issues seem to be unrelated to modules or this change.
more info: https://reviews.llvm.org/D56084

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350621 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAArch64: avoid splitting vector truncating stores.
Tim Northover [Tue, 8 Jan 2019 13:30:27 +0000 (13:30 +0000)]
AArch64: avoid splitting vector truncating stores.

We have code to split vector splats (of zero and non-zero) for performance
reasons, but it ignores the fact that a store might be truncating.

Actually, truncating stores are formed for vNi8 and vNi16 types. Since the
truncation is from a legal type, the size of the store is always <= 64-bits and
so they don't actually benefit from being split up anyway, so this patch just
disables that transformation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350620 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[GlobalISel] Fix unused variable warning in Release builds.
Benjamin Kramer [Tue, 8 Jan 2019 12:54:26 +0000 (12:54 +0000)]
[GlobalISel] Fix unused variable warning in Release builds.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350618 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-readobj] Don't print '@' at end of unversioned dynsym names
James Henderson [Tue, 8 Jan 2019 10:58:05 +0000 (10:58 +0000)]
[llvm-readobj] Don't print '@' at end of unversioned dynsym names

This fixes https://bugs.llvm.org/show_bug.cgi?id=40097. The problem was
caused by a regression in r188022.

See also r350614.

Reviewed by: rupprecht, mstorsjo, Higuoxing, jakehehrlich

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350615 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ARM] Add missing patterns for DSP muls
Sam Parker [Tue, 8 Jan 2019 10:12:36 +0000 (10:12 +0000)]
[ARM] Add missing patterns for DSP muls

Using a PatLeaf for sext_16_node allowed matching smulbb and smlabb
instructions once the operands had been sign extended. But we also
need to use sext_inreg operands along with sext_16_node to catch a
few more cases that enable use to remove the unnecessary sxth.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350613 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU/GlobalISel: Introduce vcc reg bank
Matt Arsenault [Tue, 8 Jan 2019 06:30:53 +0000 (06:30 +0000)]
AMDGPU/GlobalISel: Introduce vcc reg bank

I'm not entirely sure this is the correct thing
to do with the global isel philosophy, but I think
this is necessary to handle how differently SGPRs
are used normally vs. from a condition.

For example, it makes sense to allow a copy
from a VGPR to an SGPR, but it makes no sense
to allow a copy from VGPRs to SGPRs used as
select mask.

This avoids regbankselecting strange code with
a truncate feeding directly into a condition field.
Now a copy is forced from sgpr(s1) to vcc, which is
more sensible to handle.

Some of these issues could probably avoided with making enough
operations resulting in i1 illegal. I think we can't avoid
this register bank for legality.

For example, an i1 and where one source is from a truncate, and
one source is a compare needs some kind of copy inserted to
make sure both are in condition registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350611 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[WebAssembly] Massive instruction renaming
Thomas Lively [Tue, 8 Jan 2019 06:25:55 +0000 (06:25 +0000)]
[WebAssembly] Massive instruction renaming

Summary:
An automated renaming of all the instructions listed at
https://github.com/WebAssembly/spec/issues/884#issuecomment-426433329
as well as some similarly-named identifiers.

Reviewers: aheejin, dschuff, aardappel

Subscribers: sbc100, jgravelle-google, eraman, sunfish, jfb, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350609 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LLVM-C] Allow For Creating a BasicBlock without a Parent Function
Robert Widmann [Tue, 8 Jan 2019 06:24:19 +0000 (06:24 +0000)]
[LLVM-C] Allow For Creating a BasicBlock without a Parent Function

Summary: Add a utility function for creating a basic block without a parent function.  A useful operation for compilers that need to synthesize and conditionally insert code without having to bother with appending and immediately unlinking a block.

Reviewers: whitequark, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350608 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LLVM-C] Allow Specifying Signedness in Int Cast
Robert Widmann [Tue, 8 Jan 2019 06:23:22 +0000 (06:23 +0000)]
[LLVM-C] Allow Specifying Signedness in Int Cast

Summary: Fix an old outstanding problem with the int cast builder binding always assuming the cast is signed by introducing a new LLVMBuildIntCast2 operation and deprecating the old prototype.

Reviewers: whitequark, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350607 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MC] [AArch64] Support resolving signed fixups for :abs_g0_s: etc.
Mandeep Singh Grang [Tue, 8 Jan 2019 04:48:00 +0000 (04:48 +0000)]
[MC] [AArch64] Support resolving signed fixups for :abs_g0_s: etc.

Summary: This patch is a follow-up to D55896.

Reviewers: efriedma, mstorsjo

Reviewed By: efriedma

Subscribers: javed.absar, kristof.beyls, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350606 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[NFC] Remove empty line as a test commit.
Chris Kennelly [Tue, 8 Jan 2019 04:04:51 +0000 (04:04 +0000)]
[NFC] Remove empty line as a test commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350605 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agogn build: Stop passing -o to ar.
Peter Collingbourne [Tue, 8 Jan 2019 04:00:22 +0000 (04:00 +0000)]
gn build: Stop passing -o to ar.

The -o flag means something different to ar than what appears to be
intended here. Also, llvm-ar doesn't accept the flag in this position.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350604 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agogn build: Merge r350580.
Peter Collingbourne [Tue, 8 Jan 2019 01:46:57 +0000 (01:46 +0000)]
gn build: Merge r350580.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350600 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU/GlobalISel: Legalize concat_vectors
Matt Arsenault [Tue, 8 Jan 2019 01:30:02 +0000 (01:30 +0000)]
AMDGPU/GlobalISel: Legalize concat_vectors

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350598 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix typos
Matt Arsenault [Tue, 8 Jan 2019 01:25:47 +0000 (01:25 +0000)]
Fix typos

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350597 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[WebAssembly] Move CFG-changing passes before RegStackify
Heejin Ahn [Tue, 8 Jan 2019 01:25:12 +0000 (01:25 +0000)]
[WebAssembly] Move CFG-changing passes before RegStackify

Summary:
FixIrreducibleControlFlow and LateEHPrepare both possibly modify CFG and
create new registers. There seems to be no reason these passes go after
register-related optimization passes (PrepareForLiveIntervals,
OptimizeLiveIntervals, StoreResults, RegStackify, and RegColoring), and
this also possibly create new optimization opportunities. I think we
should put all current and future optimization passes before RegStackify
(and related passes) unless there's a reason not to.

Reviewers: kripken

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

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350596 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRegBankSelect: Fix copy insertion point for terminators
Matt Arsenault [Tue, 8 Jan 2019 01:22:47 +0000 (01:22 +0000)]
RegBankSelect: Fix copy insertion point for terminators

If a copy was needed to handle the condition of brcond, it was being
inserted before the defining instruction. Add tests for iterator edge
cases.

I find the existing code here suspect for the case where it's looking
for terminators that modify the register. It's going to insert a copy
in the middle of the terminators, which isn't allowed (it might be
necessary to have a COPY_terminator if anybody actually needs this).

Also legalize brcond for AMDGPU.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350595 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[WebAssembly] Use 'I' multiclass template for br_table (NFC)
Heejin Ahn [Tue, 8 Jan 2019 01:15:15 +0000 (01:15 +0000)]
[WebAssembly] Use 'I' multiclass template for br_table (NFC)

Summary:
We don't need to explicitly use `NI` anymore because we now don't use
`let` statements within the definitions.

Reviewers: aardappel

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

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350594 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU/GlobalISel: Disallow VGPR->SCC copies
Matt Arsenault [Tue, 8 Jan 2019 01:13:20 +0000 (01:13 +0000)]
AMDGPU/GlobalISel: Disallow VGPR->SCC copies

This fixes using scalar adds when only the carry in is a VGPR
using greedy regbankselect.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350593 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU/GlobalISel: RegBankSelect for carry-in
Matt Arsenault [Tue, 8 Jan 2019 01:09:09 +0000 (01:09 +0000)]
AMDGPU/GlobalISel: RegBankSelect for carry-in

I'm not sure we should be allowing the truncate
to s1 for the inputs. It may be necessary to
create a new VCC reg bank.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350592 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[dsymutil] Fix assertion triggered by empty address range.
Jonas Devlieghere [Tue, 8 Jan 2019 01:08:09 +0000 (01:08 +0000)]
[dsymutil] Fix assertion triggered by empty address range.

An assertion was hit when running dsymutil on a gcc generated binary
that contained an empty address range. Address ranges are stored in an
interval map of half open intervals. Since the interval is empty and
therefore meaningless, we simply don't add it to the map.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350591 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU/GlobalISel: RegBankSelect for add/sub with carry out
Matt Arsenault [Tue, 8 Jan 2019 01:03:58 +0000 (01:03 +0000)]
AMDGPU/GlobalISel: RegBankSelect for add/sub with carry out

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350589 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU/GlobalISel: InstrMapping for G_UNMERGE_VALUES
Matt Arsenault [Tue, 8 Jan 2019 00:46:19 +0000 (00:46 +0000)]
AMDGPU/GlobalISel: InstrMapping for G_UNMERGE_VALUES

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350588 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agofix comment typo - NFC
Chen Zheng [Tue, 8 Jan 2019 00:40:01 +0000 (00:40 +0000)]
fix comment typo - NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350587 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[RegisterCoalescer] dst register's live interval needs to be updated when
Wei Mi [Tue, 8 Jan 2019 00:26:11 +0000 (00:26 +0000)]
[RegisterCoalescer] dst register's live interval needs to be updated when
merging a src register in ToBeUpdated set.

This is to fix PR40061 related with https://reviews.llvm.org/rL339035.

In https://reviews.llvm.org/rL339035, live interval of source pseudo register
in rematerialized copy may be saved in ToBeUpdated set and its update may be
postponed.

In PR40061, %t2 = %t1 is rematerialized and %t1 is added into toBeUpdated set
to postpone its live interval update. After the rematerialization, the live
interval of %t1 is larger than necessary. Then %t1 is merged into %t3 and %t1
gets removed. After the merge, %t3 contains live interval larger than necessary.
Because %t3 is not in toBeUpdated set, its live interval is not updated after
register coalescing and it will break some assumption in regalloc.

The patch requires the live interval of destination register in a merge to be
updated if the source register is in ToBeUpdated.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350586 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[dsymutil] Upstream unobfuscation logic.
Jonas Devlieghere [Mon, 7 Jan 2019 23:27:25 +0000 (23:27 +0000)]
[dsymutil] Upstream unobfuscation logic.

The unobufscation support for BCSymbolMaps was the last piece of code
that hasn't been upstreamed yet. This patch contains a reworked version
of the existing code and relevant tests.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350580 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[PGO] Use SourceFileName rather module name in PGOFuncName
Rong Xu [Mon, 7 Jan 2019 23:25:56 +0000 (23:25 +0000)]
[PGO] Use SourceFileName rather module name in PGOFuncName

In LTO or Thin-lto mode (though linker plugin), the module
names are of temp file names which are different for
different compilations. Using SourceFileName avoids the issue.
This should not change any functionality for current PGO as
all the current callers of getPGOFuncName() is before LTO.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350579 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[Verifier] Reject invalid type for DILocalVariable.
Davide Italiano [Mon, 7 Jan 2019 23:09:09 +0000 (23:09 +0000)]
[Verifier] Reject invalid type for DILocalVariable.

Reviewers: aprantl

Subscribers: hiraditya, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350578 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ValueTracking] Adjust comment in test
Michael Ferguson [Mon, 7 Jan 2019 21:02:22 +0000 (21:02 +0000)]
[ValueTracking] Adjust comment in test

Adjusts a comment in this test to verify commit access.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350569 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRecommit r350554 "[X86] Remove AVX512VBMI2 concat and shift intrinsics. Replace with...
Craig Topper [Mon, 7 Jan 2019 21:00:32 +0000 (21:00 +0000)]
Recommit r350554 "[X86] Remove AVX512VBMI2 concat and shift intrinsics. Replace with target independent funnel shift intrinsics."

The MSVC limit we hit on AutoUpgrade.cpp has been worked around for now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350567 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ObjectYAML] [COFF] Support multiple symbols with the same name
Martin Storsjo [Mon, 7 Jan 2019 20:55:33 +0000 (20:55 +0000)]
[ObjectYAML] [COFF] Support multiple symbols with the same name

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350566 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86][AutoUpgrade] Make some tweaks to reduce the number of nested if/else in the...
Craig Topper [Mon, 7 Jan 2019 20:13:45 +0000 (20:13 +0000)]
[X86][AutoUpgrade] Make some tweaks to reduce the number of nested if/else in the intrinsic upgrade code to avoid an MSVC compiler limit.

MSVC has a nesting limit of around 110-130. An if/else if/else if counts against this next level. The autoupgrade code consists a long chain of these checking matches against strings.

This commit moves some code to a helper function to move out a large if/else chain that was inside of one of the blocks into a separate function. There are more of these we could move or we could change some to lookup tables.

I've also merged together a few similar blocks in the outer chain. This should buy us some margin for a little bit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350564 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert r350554 "[X86] Remove AVX512VBMI2 concat and shift intrinsics. Replace with...
Craig Topper [Mon, 7 Jan 2019 19:39:05 +0000 (19:39 +0000)]
Revert r350554 "[X86] Remove AVX512VBMI2 concat and shift intrinsics. Replace with target independent funnel shift intrinsics."

The AutoUpgrade.cpp if/else cascade hit an MSVC limit again.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350562 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MemorySSA] Add SkipSelfWalker.
Alina Sbirlea [Mon, 7 Jan 2019 19:38:47 +0000 (19:38 +0000)]
[MemorySSA] Add SkipSelfWalker.

Summary: Add implementation of SkipSelfWalker.

Reviewers: george.burgess.iv

Subscribers: sanjoy, jlebar, Prazek, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350561 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[TargetLowering][AMDGPU] Remove the SimplifyDemandedBits function that takes a User...
Craig Topper [Mon, 7 Jan 2019 19:30:43 +0000 (19:30 +0000)]
[TargetLowering][AMDGPU] Remove the SimplifyDemandedBits function that takes a User and OpIdx. Stop using it in AMDGPU target for simplifyI24.

As we saw in D56057 when we tried to use this function on X86, it's unsafe. It allows the operand node to have multiple users, but doesn't prevent recursing past the first node when it does have multiple users. This can cause other simplifications earlier in the graph without regard to what bits are needed by the other users of the first node. Ideally all we should do to the first node if it has multiple uses is bypass it when its not needed by the user we started from. Doing any other transformation that SimplifyDemandedBits can do like turning ZEXT/SEXT into AEXT would result in an increase in instructions.

Fortunately, we already have a function that can do just that, GetDemandedBits. It will only make transformations that involve bypassing a node.

This patch changes AMDGPU's simplifyI24, to use a combination of GetDemandedBits to handle the multiple use simplifications. And then uses the regular SimplifyDemandedBits on each operand to handle simplifications allowed when the operand only has a single use. Unfortunately, GetDemandedBits simplifies constants more aggressively than SimplifyDemandedBits. This caused the -7 constant in the changed test to be simplified to remove the upper bits. I had to modify computeKnownBits to account for this by ignoring the upper 8 bits of the input.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350560 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MemorySSA] Refactor CachingWalker.
Alina Sbirlea [Mon, 7 Jan 2019 19:22:37 +0000 (19:22 +0000)]
[MemorySSA] Refactor CachingWalker.

Summary:
Refactor caching walker to make creating a walker that skips the
starting access strightforward.

Reviewers: george.burgess.iv

Subscribers: sanjoy, jlebar, Prazek, llvm-commits, jfb

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350558 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Remove AVX512VBMI2 concat and shift intrinsics. Replace with target independent...
Craig Topper [Mon, 7 Jan 2019 19:10:12 +0000 (19:10 +0000)]
[X86] Remove AVX512VBMI2 concat and shift intrinsics. Replace with target independent funnel shift intrinsics.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350554 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ARM] ComputeKnownBits to handle extract vectors
Diogo N. Sampaio [Mon, 7 Jan 2019 19:01:47 +0000 (19:01 +0000)]
[ARM] ComputeKnownBits to handle extract vectors

This patch adds the sign/zero extension done by
vgetlane to ARM computeKnownBitsForTargetNode.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350553 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MemorySSA] Extend the clobber walker with the option to skip the starting access.
Alina Sbirlea [Mon, 7 Jan 2019 18:40:27 +0000 (18:40 +0000)]
[MemorySSA] Extend the clobber walker with the option to skip the starting access.

Summary:
The option enables loop transformations to hoist accesses that do not
have clobbers in the loop. If the clobber queries skips the starting
access, the result may be outside the loop instead of the header Phi.

Adding the walker that uses this option in a separate patch.

Reviewers: george.burgess.iv

Subscribers: sanjoy, jlebar, Prazek, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350551 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "[DemandedBits] Use SetVector for Worklist"
Nikita Popov [Mon, 7 Jan 2019 18:15:11 +0000 (18:15 +0000)]
Revert "[DemandedBits] Use SetVector for Worklist"

This reverts commit r350547.

Seeing assertion failures on clang tests.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350549 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add OR(AND(X,C),AND(Y,~C)) bit select tests
Simon Pilgrim [Mon, 7 Jan 2019 18:07:56 +0000 (18:07 +0000)]
[X86] Add OR(AND(X,C),AND(Y,~C)) bit select tests

Based off work for D55935

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350548 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[DemandedBits] Use SetVector for Worklist
Nikita Popov [Mon, 7 Jan 2019 18:03:36 +0000 (18:03 +0000)]
[DemandedBits] Use SetVector for Worklist

DemandedBits currently uses a simple vector for the worklist, which
means that instructions may be inserted multiple times into it.
Especially in combination with the deep lattice, this may cause
instructions too be recomputed very often. To avoid this, switch
to a SetVector.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350547 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[elfabi] Add option to manually specify file read format
Armando Montanez [Mon, 7 Jan 2019 17:33:10 +0000 (17:33 +0000)]
[elfabi] Add option to manually specify file read format

Although llvm-elfabi will attempt to read input files without needing the format to be manually specified, doing so has the potential to introduce extraneous errors that can hinder debugging (since multiple readers may fail in attempts to read the file). This change allows the input file format to be manually specified to force elfabi to use a single reader. This makes it easier to test and debug errors specific to a given reader.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350545 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-objcopy] Handle -O <format> flag.
Jordan Rupprecht [Mon, 7 Jan 2019 16:59:12 +0000 (16:59 +0000)]
[llvm-objcopy] Handle -O <format> flag.

Summary:
The -O flag is currently being mostly ignored; it's only checked whether or not the output format is "binary". This adds support for a few formats (e.g. elf64-x86-64), so that when specified, the output can change between 32/64 bit and sizes/alignments are updated accordingly.

This fixes PR39135

Reviewers: jakehehrlich, jhenderson, alexshap, espindola

Reviewed By: jhenderson

Subscribers: emaste, arichardson, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350541 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[lit] Respect PYTHONPATH
David Greene [Mon, 7 Jan 2019 16:24:37 +0000 (16:24 +0000)]
[lit] Respect PYTHONPATH

If a user has PYTHONPATH set in the environment, append new entries to
it rather than blindly setting PYTHONPATH to a fixed string. This
allows tests to, for example, find psutil if it is in
PYTHONPATH. Without this change, lit will detect psutil but then
various tests will fail because PYTHONPATH has been overwritten and
psutil cannot be found.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350536 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-demangle-fuzzer] Also fuzz microsoftDemangle().
Matt Morehouse [Mon, 7 Jan 2019 16:14:00 +0000 (16:14 +0000)]
[llvm-demangle-fuzzer] Also fuzz microsoftDemangle().

Summary:
Use first byte of input to determine whether to call itaniumDemangle()
or microsoftDemangle().

Addresses https://bugs.llvm.org/show_bug.cgi?id=39582.

Reviewers: kcc, thakis

Reviewed By: kcc, thakis

Subscribers: mgorny, thakis, erik.pilkington, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350534 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[x86] add more tests for LowerToHorizontalOp(); NFC
Sanjay Patel [Mon, 7 Jan 2019 16:10:14 +0000 (16:10 +0000)]
[x86] add more tests for LowerToHorizontalOp(); NFC

These tests show missed optimizations and a miscompile
similar to PR40243 - https://bugs.llvm.org/show_bug.cgi?id=40243

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350533 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU: test for uniformity of branch instruction, not its condition
Rhys Perry [Mon, 7 Jan 2019 15:52:28 +0000 (15:52 +0000)]
AMDGPU: test for uniformity of branch instruction, not its condition

Summary:
If a divergent branch instruction is marked as divergent by propagation
rule 2 in DivergencePropagator::exploreSyncDependency() and its condition
is uniform, that branch would incorrectly be assumed to be uniform.

Reviewers: arsenm, tstellar

Reviewed By: arsenm

Subscribers: kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350532 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-nm] Add --portability as alias for --format=posix
James Henderson [Mon, 7 Jan 2019 14:12:51 +0000 (14:12 +0000)]
[llvm-nm] Add --portability as alias for --format=posix

GNU nm supports this alias, so supporting it in llvm-nm makes it easier
to transition between the two.

Fixes https://bugs.llvm.org/show_bug.cgi?id=40002

Reviewed by: mstorsjo, rupprecht

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350522 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[CodeView] More appropriate name and type for a Microsoft precompiled headers paramet...
Alexandre Ganea [Mon, 7 Jan 2019 13:53:16 +0000 (13:53 +0000)]
[CodeView] More appropriate name and type for a Microsoft precompiled headers parameter. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350520 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU: Remove v16i8 from register classes
Matt Arsenault [Mon, 7 Jan 2019 13:31:55 +0000 (13:31 +0000)]
AMDGPU: Remove v16i8 from register classes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350518 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU: Remove VS/SV mappings from select
Matt Arsenault [Mon, 7 Jan 2019 13:21:36 +0000 (13:21 +0000)]
AMDGPU: Remove VS/SV mappings from select

These would violate the constant bus restriction

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350517 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRegenerate test.
Simon Pilgrim [Mon, 7 Jan 2019 12:21:13 +0000 (12:21 +0000)]
Regenerate test.

Prep work towards enabling SimplifyDemandedBits vector support for TRUNCATE as discussed on D56118.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350514 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRegenerate test.
Simon Pilgrim [Mon, 7 Jan 2019 12:20:35 +0000 (12:20 +0000)]
Regenerate test.

Prep work towards enabling SimplifyDemandedBits vector support for TRUNCATE as discussed on D56118.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350513 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[CallSite removal] Move the rest of IR implementation code away from
Chandler Carruth [Mon, 7 Jan 2019 07:31:49 +0000 (07:31 +0000)]
[CallSite removal] Move the rest of IR implementation code away from
`CallSite`.

With this change, the remaining `CallSite` usages are just for
implementing the wrapper type itself.

This does update the C API but leaves the names of that API alone and
only updates their implementation.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350509 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[CallSite removal] Port `IndirectCallSiteVisitor` to use `CallBase` and
Chandler Carruth [Mon, 7 Jan 2019 07:15:51 +0000 (07:15 +0000)]
[CallSite removal] Port `IndirectCallSiteVisitor` to use `CallBase` and
update client code.

Also rename it to use the more generic term `call` instead of something
that could be confused with a praticular type.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350508 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[CallSite removal] Move the verifier to use `CallBase` instead of the
Chandler Carruth [Mon, 7 Jan 2019 07:02:34 +0000 (07:02 +0000)]
[CallSite removal] Move the verifier to use `CallBase` instead of the
`CallSite` wrapper.

Mostly mechanical, but I've tried to tidy up code where it made sense to
do so.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350507 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Update VBMI2 vshld/vshrd tests to use an immediate that doesn't require a modulo.
Craig Topper [Mon, 7 Jan 2019 05:58:53 +0000 (05:58 +0000)]
[X86] Update VBMI2 vshld/vshrd tests to use an immediate that doesn't require a modulo.

Planning to replace these with funnel shift intrinsics which would mask out the extra bits. This will help minimize test diffs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350504 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[CallSite removal] Migrate all Alias Analysis APIs to use the newly
Chandler Carruth [Mon, 7 Jan 2019 05:42:51 +0000 (05:42 +0000)]
[CallSite removal] Migrate all Alias Analysis APIs to use the newly
minted `CallBase` class instead of the `CallSite` wrapper.

This moves the largest interwoven collection of APIs that traffic in
`CallSite`s. While a handful of these could have been migrated with
a minorly more shallow migration by converting from a `CallSite` to
a `CallBase`, it hardly seemed worth it. Most of the APIs needed to
migrate together because of the complex interplay of AA APIs and the
fact that converting from a `CallBase` to a `CallSite` isn't free in its
current implementation.

Out of tree users of these APIs can fairly reliably migrate with some
combination of `.getInstruction()` on the `CallSite` instance and
casting the resulting pointer. The most generic form will look like `CS`
-> `cast_or_null<CallBase>(CS.getInstruction())` but in most cases there
is a more elegant migration. Hopefully, this migrates enough APIs for
users to fully move from `CallSite` to the base class. All of the
in-tree users were easily migrated in that fashion.

Thanks for the review from Saleem!

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350503 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[CallSite removal] Add `CallBase` support to the `InstVisitor` in such
Chandler Carruth [Mon, 7 Jan 2019 05:15:49 +0000 (05:15 +0000)]
[CallSite removal] Add `CallBase` support to the `InstVisitor` in such
a way that it still supports `CallSite` but users can be ported to rely
on `CallBase` instead.

This will unblock the ports across the analysis and transforms libraries
(and out-of-tree users) and once done we can clean this up by removing
the `CallSite` layer.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350502 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Add build files for llvm/lib/Target/ARM + tests
Nico Weber [Mon, 7 Jan 2019 01:26:12 +0000 (01:26 +0000)]
[gn build] Add build files for llvm/lib/Target/ARM + tests

The ARM target itself is similar to the X86 target in https://reviews.llvm.org/rL348903
The llvm-exegesis unittests ARM bits are similar to the X86 bits in https://reviews.llvm.org/rL350413
Both are similar to the corresponding AArch64 bits in https://reviews.llvm.org/rL350499 too

After this, everything in my local GN branch is upstreamed to LLVM.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350500 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Add build files for llvm/lib/Target/AArch64 + tests
Nico Weber [Mon, 7 Jan 2019 01:23:11 +0000 (01:23 +0000)]
[gn build] Add build files for llvm/lib/Target/AArch64 + tests

The AArch64 target itself is similar to the X86 target in https://reviews.llvm.org/rL348903
The llvm-exegesis AArch64 bits are similar to the X86 bits in http://reviews.llvm.org/rL350184
The llvm-exegesis unittests AArch64 bits are similar to the X86 bits in https://reviews.llvm.org/rL350413

llvm/unittests/Target/AArch64 doesn't have an equivalent since the X86 Target
only has lit tests, no unittests.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350499 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add support for matching vector funnel shift to AVX512VBMI2 instructions.
Craig Topper [Sun, 6 Jan 2019 18:10:18 +0000 (18:10 +0000)]
[X86] Add support for matching vector funnel shift to AVX512VBMI2 instructions.

Summary: AVX512VBMI2 supports a funnel shift by immediate and a funnel shift by a variable vector.

Reviewers: spatel, RKSimon

Reviewed By: RKSimon

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350498 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "Resubmit rL345008 "Split MachinePipeliner code into header and cpp files""
Lama Saba [Sun, 6 Jan 2019 16:39:14 +0000 (16:39 +0000)]
Revert "Resubmit rL345008 "Split MachinePipeliner code into header and cpp files""

This reverts commit rL350493
issues related to modules  still appear in http://green.lab.llvm.org/green/job/lldb-cmake

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350497 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[x86] explicitly set cost of integer add/sub
Sanjay Patel [Sun, 6 Jan 2019 16:21:42 +0000 (16:21 +0000)]
[x86] explicitly set cost of integer add/sub

There are no test changes here in the existing cost model
regression tests because integer add/sub have a default
legal cost of 1 already. This would break, however, if
we custom lower those ops because the default cost model
assumes that custom-lowered ops are more expensive.

This is similar to the change in rL350403. See discussion
in D56011 for more details. When we enhance that patch to
handle integer ops, we need this cost model change to avoid
unintended diffs here from the custom lowering.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350496 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Merge r350341
Nico Weber [Sun, 6 Jan 2019 15:49:10 +0000 (15:49 +0000)]
[gn build] Merge r350341

Adds a build file for llvm-elfabi and makes check-llvm depend on it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350494 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoResubmit rL345008 "Split MachinePipeliner code into header and cpp files"
Lama Saba [Sun, 6 Jan 2019 15:45:40 +0000 (15:45 +0000)]
Resubmit rL345008 "Split MachinePipeliner code into header and cpp files"

Resubmitted in rL345290 and reverted in rL350345 due to failures in
http://green.lab.llvm.org/green/job/lldb-cmake/
Resubmitting after a workaround to lldb-cmake failure was
committed in rL350346, more info in https://reviews.llvm.org/D56084

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350493 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Add build files for LLVM unittests with a custom main() function
Nico Weber [Sun, 6 Jan 2019 15:09:22 +0000 (15:09 +0000)]
[gn build] Add build files for LLVM unittests with a custom main() function

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350492 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LegalizeVectorOps] Add FSHL/FSHR to the list of vector operations that should be...
Craig Topper [Sun, 6 Jan 2019 07:06:35 +0000 (07:06 +0000)]
[LegalizeVectorOps] Add FSHL/FSHR to the list of vector operations that should be handled.

The FSHL/FSHR nodes are handled in the expand function, but they need to also be listed in the code that queries for the operation action too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350490 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86][AsmParser] Don't allow X86::DX in CheckBaseRegAndIndexRegAndScale.
Craig Topper [Sat, 5 Jan 2019 23:30:28 +0000 (23:30 +0000)]
[X86][AsmParser] Don't allow X86::DX in CheckBaseRegAndIndexRegAndScale.

This was here because out and in instructions allow '(%dx)' even though its not a memory reference. To handle this we build a special operand for the DX register reference before we get to the call to CheckBaseRegAndIndexRegAndScale. So we no longer need this special case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350483 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Use two pmovmskbs in combineBitcastvxi1 for (i64 (bitcast (v64i1 (truncate...
Craig Topper [Sat, 5 Jan 2019 22:42:58 +0000 (22:42 +0000)]
[X86] Use two pmovmskbs in combineBitcastvxi1 for (i64 (bitcast (v64i1 (truncate (v64i8)))) on KNL.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350481 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Allow combinevxi1Bitcast to use pmovmskb on avx512 targets if the input is...
Craig Topper [Sat, 5 Jan 2019 21:40:07 +0000 (21:40 +0000)]
[X86] Allow combinevxi1Bitcast to use pmovmskb on avx512 targets if the input is a truncate from v16i8/v32i8.

This is especially helpful on targets without avx512bw since we don't have a good way to convert from v16i8/v32i8 to v16i1/v32i1 for the truncate anyway. If we're just going to convert it to a GPR we might as well use pmovmskb to accomplish both.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350480 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAdded single use check to ShrinkDemandedConstant
Stanislav Mekhanoshin [Sat, 5 Jan 2019 19:20:00 +0000 (19:20 +0000)]
Added single use check to ShrinkDemandedConstant

Fixes cvt_f32_ubyte combine. performCvtF32UByteNCombine() could shrink
source node to demanded bits only even if there are other uses.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350475 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Regenerate test to merge 32-bit and 64-bit check lines. NFC
Craig Topper [Sat, 5 Jan 2019 19:19:37 +0000 (19:19 +0000)]
[X86] Regenerate test to merge 32-bit and 64-bit check lines. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350474 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Allow LowerTRUNCATE to use PACKUS/PACKSS for v16i16->v16i8 truncate when -mpref...
Craig Topper [Sat, 5 Jan 2019 18:48:11 +0000 (18:48 +0000)]
[X86] Allow LowerTRUNCATE to use PACKUS/PACKSS for v16i16->v16i8 truncate when -mprefer-vector-width-256 is in effect and BWI is not available.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350473 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] Improve cttz/ctlz + icmp tests; NFC
Nikita Popov [Sat, 5 Jan 2019 17:36:05 +0000 (17:36 +0000)]
[InstCombine] Improve cttz/ctlz + icmp tests; NFC

Change part of the tests to use vectors (I'm using scalar for ugt
and vector for ult), add multiuse variations, rename %lz to %tz
for the cttz tests.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350471 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoEnhance MSVC visualization of PointerUnions
Mike Spertus [Sat, 5 Jan 2019 16:59:27 +0000 (16:59 +0000)]
Enhance MSVC visualization of PointerUnions

Add a "deref" view that displays the pointed to objects since
other visualizers often need to display data reference by internal
PointerUnions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350469 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] Add cttz/ctlz + icmp ugt/ult tests; NFC
Nikita Popov [Sat, 5 Jan 2019 15:51:59 +0000 (15:51 +0000)]
[InstCombine] Add cttz/ctlz + icmp ugt/ult tests; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350468 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] Relax cttz/ctlz with select on zero
Nikita Popov [Sat, 5 Jan 2019 09:48:16 +0000 (09:48 +0000)]
[InstCombine] Relax cttz/ctlz with select on zero

The cttz/ctlz intrinsics have a parameter specifying whether the
result is undefined for zero. cttz(x, false) can be relaxed to
cttz(x, true) if x is known non-zero, and in fact such an optimization
is already performed. However, this currently doesn't work if x is
non-zero as a result of a select rather than an explicit branch.
This patch adds handling for this case, thus allowing
x != 0 ? cttz(x, false) : y to simplify to x != 0 ? cttz(x, true) : y.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350463 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] Add vector tests for select + ctlz/cttz; NFC
Nikita Popov [Sat, 5 Jan 2019 09:48:05 +0000 (09:48 +0000)]
[InstCombine] Add vector tests for select + ctlz/cttz; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350462 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Merge r350423
Nico Weber [Sat, 5 Jan 2019 05:01:20 +0000 (05:01 +0000)]
[gn build] Merge r350423

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350458 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Add build files for unittests under llvm/unittests/ExecutionEngine
Nico Weber [Sat, 5 Jan 2019 04:05:25 +0000 (04:05 +0000)]
[gn build] Add build files for unittests under llvm/unittests/ExecutionEngine

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350457 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[Inliner] Optimize shouldBeDeferred
Easwaran Raman [Sat, 5 Jan 2019 02:26:29 +0000 (02:26 +0000)]
[Inliner] Optimize shouldBeDeferred

This has some minor optimizations to shouldBeDeferred. This is not
strictly NFC because the early exit inside the loop assumes
TotalSecondaryCost is monotonically non-decreasing, which is not true if
the threshold used by CostAnalyzer is negative. AFAICT the thresholds do
not go below 0 for the default values of the various options we use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350456 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Require second operand of X86vshiftuniform to be an integer. NFC
Craig Topper [Sat, 5 Jan 2019 01:40:29 +0000 (01:40 +0000)]
[X86] Require second operand of X86vshiftuniform to be an integer. NFC

We don't need to require the first operand to be an integer because we already said it was the same type as the result which we also constrained to an integer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350455 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Add build files for unittests that load shared libraries
Nico Weber [Sat, 5 Jan 2019 01:39:18 +0000 (01:39 +0000)]
[gn build] Add build files for unittests that load shared libraries

This is slightly ugly for three reasons:

- The shlib needs to go next to the binary to be found on all platforms, so the
  build files refer to target_out_dir
- The explicit -fPIC flag needed on the shared lib side, and the -rdynamic flag
  needed on the host side, on Linux
- Plugins that refer to LLVM code and assume that the host will resolve them
  don't work on Windows -- PluginsTests won't test anything on Windows (but
  DynamicLibraryTests will, since the dll here doesn't call LLVM code)

If we get lots more of these plugin / plugin host targets it might make sense
to add a template for them. But for now, these are the last ones we need.

(We're at 6 plugin hosts, 2 of them tests, and at 6 shared libraries, 2 of them
tests as well. clang is a plugin host by default in the CMake build but not
(yet?) in the GN build.)

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350454 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "Revert "[hwasan] Android: Switch from TLS_SLOT_TSAN(8) to TLS_SLOT_SANITIZER...
Evgeniy Stepanov [Sat, 5 Jan 2019 00:44:58 +0000 (00:44 +0000)]
Revert "Revert "[hwasan] Android: Switch from TLS_SLOT_TSAN(8) to TLS_SLOT_SANITIZER(6)""

This reapplies commit r348983.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350448 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[gn build] Add build file for DebugInfoPDBTests
Nico Weber [Sat, 5 Jan 2019 00:14:37 +0000 (00:14 +0000)]
[gn build] Add build file for DebugInfoPDBTests

I'm pretty unhappy this patch: DebugInfoPDBTests uses an API that requires some
magic txt file to be next to the unit test executable that stores the absolute
path to the LLVM source root.

The choices here are:

1. Don't use the unittest() template for DebugInfoPDBTests and set output_dir
   for unit tests in two places (the gni file for every test but this one, and the
   BUILD.gn file for this specific test).

2. Add another unittest_foo() template variation for this one test.

I went with the former, and added a comment to the template to look out for
this.

(The CMake build has the same issue.)

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350447 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[PGO] Use SourceFileName rather module name in PGOFuncName
Rong Xu [Fri, 4 Jan 2019 22:54:03 +0000 (22:54 +0000)]
[PGO] Use SourceFileName rather module name in PGOFuncName

In LTO or Thin-lto mode (though linker plugin), the module
names are of temp file names which are different for
different compilations. Using SourceFileName avoids the issue.
This should not change any functionality for current PGO as
all the current callers of getPGOFuncName() is before LTO.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350442 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Fix warning; NFC
Nikita Popov [Fri, 4 Jan 2019 21:41:35 +0000 (21:41 +0000)]
[X86] Fix warning; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350437 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoUpdate the pr_datasz of .note.gnu.property section.
Vyacheslav Zakharin [Fri, 4 Jan 2019 21:25:01 +0000 (21:25 +0000)]
Update the pr_datasz of .note.gnu.property section.
Patch by Xiang Zhang.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350436 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[BDCE] Remove dead uses of arguments
Nikita Popov [Fri, 4 Jan 2019 21:21:43 +0000 (21:21 +0000)]
[BDCE] Remove dead uses of arguments

In addition to finding dead uses of instructions, also find dead uses
of function arguments, and replace them with zero as well.

I'm changing the way the known bits are computed here to remove the
coupling between the transfer function and the algorithm. It previously
relied on the first op being visited first and computing known bits --
unless the first op is not an instruction, in which case they're computed
on the second op. I could have adjusted this to check for "instruction
or argument", but I think it's better to avoid the repeated calculation
with an explicit flag.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350435 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[AArch64] Adjust the cost model for Exynos M3
Evandro Menezes [Fri, 4 Jan 2019 21:02:25 +0000 (21:02 +0000)]
[AArch64] Adjust the cost model for Exynos M3

Improve the modeling of ASIMD loads and stores.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350434 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add INSERT_SUBVECTOR to ComputeNumSignBits
Craig Topper [Fri, 4 Jan 2019 20:50:59 +0000 (20:50 +0000)]
[X86] Add INSERT_SUBVECTOR to ComputeNumSignBits

This adds support for calculating sign bits of insert_subvector. I based it on the computeKnownBits.

My motivating case is propagating sign bits information across basic blocks on AVX targets where concatenating using insert_subvector is common.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350432 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[x86] add tests for potential horizontal vector ops; NFC
Sanjay Patel [Fri, 4 Jan 2019 20:14:53 +0000 (20:14 +0000)]
[x86] add tests for potential horizontal vector ops; NFC

These are modified versions of the FP tests from rL349923.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350430 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agohwasan: Implement lazy thread initialization for the interceptor ABI.
Peter Collingbourne [Fri, 4 Jan 2019 19:27:04 +0000 (19:27 +0000)]
hwasan: Implement lazy thread initialization for the interceptor ABI.

The problem is similar to D55986 but for threads: a process with the
interceptor hwasan library loaded might have some threads started by
instrumented libraries and some by uninstrumented libraries, and we
need to be able to run instrumented code on the latter.

The solution is to perform per-thread initialization lazily. If a
function needs to access shadow memory or add itself to the per-thread
ring buffer its prologue checks to see whether the value in the
sanitizer TLS slot is null, and if so it calls __hwasan_thread_enter
and reloads from the TLS slot. The runtime does the same thing if it
needs to access this data structure.

This change means that the code generator needs to know whether we
are targeting the interceptor runtime, since we don't want to pay
the cost of lazy initialization when targeting a platform with native
hwasan support. A flag -fsanitize-hwaddress-abi={interceptor,platform}
has been introduced for selecting the runtime ABI to target. The
default ABI is set to interceptor since it's assumed that it will
be more common that users will be compiling application code than
platform code.

Because we can no longer assume that the TLS slot is initialized,
the pthread_create interceptor is no longer necessary, so it has
been removed.

Ideally, lazy initialization should only cost one instruction in the
hot path, but at present the call may cause us to spill arguments
to the stack, which means more instructions in the hot path (or
theoretically in the cold path if the spills are moved with shrink
wrapping). With an appropriately chosen calling convention for
the per-thread initialization function (TODO) the hot path should
always need just one instruction and the cold path should need two
instructions with no spilling required.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350429 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ThinLTO] Handle chains of aliases
Teresa Johnson [Fri, 4 Jan 2019 19:04:54 +0000 (19:04 +0000)]
[ThinLTO] Handle chains of aliases

At -O0, globalopt is not run during the compile step, and we can have a
chain of an alias having an immediate aliasee of another alias. The
summaries are constructed assuming aliases in a canonical form
(flattened chains), and as a result only the base object but no
intermediate aliases were preserved.

Fix by adding a pass that canonicalize aliases, which ensures each
alias is a direct alias of the base object.

Reviewers: pcc, davidxl

Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, arphaman, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350423 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[x86] lower extracted fadd/fsub to horizontal vector math; 2nd try
Sanjay Patel [Fri, 4 Jan 2019 17:48:13 +0000 (17:48 +0000)]
[x86] lower extracted fadd/fsub to horizontal vector math; 2nd try

The 1st try for this was at rL350369, but it caused IR-level diffs because
our cost models differentiate custom vs. legal/promote lowering. So that was
reverted at rL350373. The cost models were fixed independently at rL350403,
so this is effectively the same patch as last time.

Original commit message:
This would show up if we fix horizontal reductions to narrow as they go along,
but it's an improvement for size and/or Jaguar (fast-hops) independent of that.

We need to do this late to not interfere with other pattern matching of larger
horizontal sequences.

We can extend this to integer ops in a follow-up patch.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350421 91177308-0d34-0410-b5e6-96231b3b80d8