]> granicus.if.org Git - llvm/log
llvm
5 years ago[Dwarf] Complete the list of type tags.
Jonas Devlieghere [Tue, 13 Aug 2019 17:00:54 +0000 (17:00 +0000)]
[Dwarf] Complete the list of type tags.

An incorrect verification error revealed that the list of type tags was
incomplete. This patch adds the missing types by adding a tag kind to
the Dwarf.def file, which is used by the `isType` function.

A test was added for the original verification error.

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

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

5 years ago[X86] Add some vXi8 extract subvector cost model tests
Simon Pilgrim [Tue, 13 Aug 2019 16:44:40 +0000 (16:44 +0000)]
[X86] Add some vXi8 extract subvector cost model tests

We don't have full 512-bit test coverage yet - but there's enough to help test D65892

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

5 years ago[SLC] Improve dereferenceable bytes annotation
David Bolvansky [Tue, 13 Aug 2019 16:44:16 +0000 (16:44 +0000)]
[SLC] Improve dereferenceable bytes annotation

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

5 years agoGlobalISel: Partially implement fewerElementsVector G_UNMERGE_VALUES
Matt Arsenault [Tue, 13 Aug 2019 16:26:28 +0000 (16:26 +0000)]
GlobalISel: Partially implement fewerElementsVector G_UNMERGE_VALUES

Odd sized vectors aren't handled yet.

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

5 years ago[ARM] Fix detection of duplicates when parsing reg list operands
Momchil Velikov [Tue, 13 Aug 2019 16:13:00 +0000 (16:13 +0000)]
[ARM] Fix detection of duplicates when parsing reg list operands

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

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

5 years ago[ARM] Fix encoding of APSR in CLRM instruction
Momchil Velikov [Tue, 13 Aug 2019 16:12:46 +0000 (16:12 +0000)]
[ARM] Fix encoding of APSR in CLRM instruction

The APSR is encoded by setting bit 15 in the register list of the CLRM
instruction (cf. https://static.docs.arm.com/ddi0553/bh/DDI0553B_h_armv8m_arm.pdf).

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

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

5 years agoGlobalISel: Implement lower for G_SHUFFLE_VECTOR
Matt Arsenault [Tue, 13 Aug 2019 16:09:07 +0000 (16:09 +0000)]
GlobalISel: Implement lower for G_SHUFFLE_VECTOR

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

5 years ago[ORC] Refactor definition-generation, add a generator for static libraries.
Lang Hames [Tue, 13 Aug 2019 16:05:18 +0000 (16:05 +0000)]
[ORC] Refactor definition-generation, add a generator for static libraries.

This patch replaces the JITDylib::DefinitionGenerator typedef with a class of
the same name, and adds support for attaching a sequence of DefinitionGeneration
objects to a JITDylib.

This patch also adds a new definition generator,
StaticLibraryDefinitionGenerator, that can be used to add symbols fom a static
library to a JITDylib. An object from the static library will be added (via
a supplied ObjectLayer reference) whenever a symbol from that object is
referenced.

To enable testing, lli is updated to add support for the --extra-archive option
when running in -jit-kind=orc-lazy mode.

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

5 years agoGlobalISel: Add more verifier checks for G_SHUFFLE_VECTOR
Matt Arsenault [Tue, 13 Aug 2019 15:52:21 +0000 (15:52 +0000)]
GlobalISel: Add more verifier checks for G_SHUFFLE_VECTOR

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

5 years agoGlobalISel: Change representation of shuffle masks
Matt Arsenault [Tue, 13 Aug 2019 15:34:38 +0000 (15:34 +0000)]
GlobalISel: Change representation of shuffle masks

Currently shufflemasks get emitted as any other constant, and you end
up with a bunch of virtual registers of G_CONSTANT with a
G_BUILD_VECTOR. The AArch64 selector then asserts on anything that
doesn't fit this pattern. This isn't an ideal representation, and
should avoid legalization and have fewer opportunities for a
representational error.

Rather than invent a new shuffle mask operand type, similar to what
ShuffleVectorSDNode does, just track the original IR Constant mask
operand. I don't completely like the idea of adding another link to
the IR, but MIR is already quite dependent on IR constants already,
and this will allow sharing the shuffle mask utility functions with
the IR.

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

5 years ago[CodeGen][SelectionDAG] More efficient code for X % C == 0 (SREM case)
Roman Lebedev [Tue, 13 Aug 2019 14:57:37 +0000 (14:57 +0000)]
[CodeGen][SelectionDAG] More efficient code for X % C == 0 (SREM case)

Summary:
This implements an optimization described in Hacker's Delight 10-17:
when `C` is constant, the result of `X % C == 0` can be computed
more cheaply without actually calculating the remainder.
The motivation is discussed here: https://bugs.llvm.org/show_bug.cgi?id=35479.

One huge caveat: this signed case is only valid for positive divisors.

While we can freely negate negative divisors, we can't negate `INT_MIN`,
so for now if `INT_MIN` is encountered, we bailout.
As a follow-up, it should be possible to handle that more gracefully
via extra `and`+`setcc`+`select`.

This passes llvm's test-suite, and from cursory(!) cross-examination
the folds (the assembly) match those of GCC, and manual checking via alive
did not reveal any issues (other than the `INT_MIN` case)

Reviewers: RKSimon, spatel, hermord, craig.topper, xbolva00

Reviewed By: RKSimon, xbolva00

Subscribers: xbolva00, thakis, javed.absar, hiraditya, dexonsmith, llvm-commits

Tags: #llvm

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

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

5 years ago[TargetLowering][NFC] prepareUREMEqFold(): fixup comment
Roman Lebedev [Tue, 13 Aug 2019 14:57:08 +0000 (14:57 +0000)]
[TargetLowering][NFC] prepareUREMEqFold(): fixup comment

The comment initially matched the code, but the code was incorrect
and was fixed after the initial revert back back when it was introduced,
but the comment was never updated.

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

5 years agoRevert r368691; test checked in without changes by accident
Hubert Tong [Tue, 13 Aug 2019 14:43:34 +0000 (14:43 +0000)]
Revert r368691; test checked in without changes by accident

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

5 years ago[llvm-readelf] Implement note parsing for NT_FILE and unknown descriptors
Jordan Rupprecht [Tue, 13 Aug 2019 14:38:45 +0000 (14:38 +0000)]
[llvm-readelf] Implement note parsing for NT_FILE and unknown descriptors

Summary:
This patch implements two note parsers; one for NT_FILE coredumps, e.g.:

```
  CORE                  0x00000080      NT_FILE (mapped files)
    Page size: 4096
                 Start                 End         Page Offset
    0x0000000000001000  0x0000000000002000  0x0000000000003000
        /path/to/a.out
    0x0000000000004000  0x0000000000005000  0x0000000000006000
        /path/to/libc.so
    0x0000000000007000  0x0000000000008000  0x0000000000009000
        [stack]
```

(A more realistic example can be tested locally by creating a crashing program and running `llvm-readelf -n core`)

And also implements a raw hex dump for unknown descriptor data for unhandled descriptor types.

Reviewers: MaskRay, jhenderson, grimar, alexshap

Reviewed By: MaskRay, grimar

Subscribers: emaste, llvm-commits, labath

Tags: #llvm

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

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

5 years agoFix -Wdocumentation warning (@returns used in void function). NFCI.
Simon Pilgrim [Tue, 13 Aug 2019 13:55:38 +0000 (13:55 +0000)]
Fix -Wdocumentation warning (@returns used in void function). NFCI.

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

5 years ago[AIX] Implement LR prolog/epilog save/restore
Hubert Tong [Tue, 13 Aug 2019 13:38:24 +0000 (13:38 +0000)]
[AIX] Implement LR prolog/epilog save/restore

Summary:
This patch fixes the offsets of fields in the stack frame linkage save
area for AIX.

Reviewers: sfertile, hubert.reinterpretcast, jasonliu, Xiangling_L, xingxue, ZarkoCA, daltenty

Reviewed By: hubert.reinterpretcast

Subscribers: wuzish, nemanjai, hiraditya, kbarton, MaskRay, jsji, llvm-commits

Tags: #llvm

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

Patch by Chris Bowler!

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

5 years ago[InstCombine] Non-canonical clamp-like pattern handling
Roman Lebedev [Tue, 13 Aug 2019 12:49:28 +0000 (12:49 +0000)]
[InstCombine] Non-canonical clamp-like pattern handling

Summary:
Given a pattern like:
```
%old_cmp1 = icmp slt i32 %x, C2
%old_replacement = select i1 %old_cmp1, i32 %target_low, i32 %target_high
%old_x_offseted = add i32 %x, C1
%old_cmp0 = icmp ult i32 %old_x_offseted, C0
%r = select i1 %old_cmp0, i32 %x, i32 %old_replacement
```
it can be rewritten as more canonical pattern:
```
%new_cmp1 = icmp slt i32 %x, -C1
%new_cmp2 = icmp sge i32 %x, C0-C1
%new_clamped_low = select i1 %new_cmp1, i32 %target_low, i32 %x
%r = select i1 %new_cmp2, i32 %target_high, i32 %new_clamped_low
```
Iff `-C1 s<= C2 s<= C0-C1`
Also, `ULT` predicate can also be `UGE`; or `UGT` iff `C0 != -1` (+invert result)
Also, `SLT` predicate can also be `SGE`; or `SGT` iff `C2 != INT_MAX` (+invert result)

If `C1 == 0`, then all 3 instructions must be one-use; else at most either `%old_cmp1` or `%old_x_offseted` can have extra uses.
NOTE: if we could reuse `%old_cmp1` as one of the comparisons we'll have to build, this could be less limiting.

So there are two icmp's, each one with 3 predicate variants, so there are 9 fold variants:

|     | ULT                            | UGE                             | UGT                             |
| SLT | https://rise4fun.com/Alive/yIJ | https://rise4fun.com/Alive/5BfN | https://rise4fun.com/Alive/INH  |
| SGE | https://rise4fun.com/Alive/hd8 | https://rise4fun.com/Alive/Abk  | https://rise4fun.com/Alive/PlzS |
| SGT | https://rise4fun.com/Alive/VYG | https://rise4fun.com/Alive/oMY  | https://rise4fun.com/Alive/KrzC |
{F9730206}

This fold was brought up in https://reviews.llvm.org/D65148#1603922 by @dmgreen, and is needed to unblock that patch.
This patch requires D65530.

Reviewers: spatel, nikic, xbolva00, dmgreen

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits, dmgreen

Tags: #llvm

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

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

5 years ago[InstCombine][NFC] Rename IsFreeToInvert() -> isFreeToInvert() for consistency
Roman Lebedev [Tue, 13 Aug 2019 12:49:16 +0000 (12:49 +0000)]
[InstCombine][NFC] Rename IsFreeToInvert() -> isFreeToInvert() for consistency

As per https://reviews.llvm.org/D65530#inline-592325

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

5 years ago[InstCombine] foldXorOfICmps(): don't give up on non-single-use ICmp's if all users...
Roman Lebedev [Tue, 13 Aug 2019 12:49:06 +0000 (12:49 +0000)]
[InstCombine] foldXorOfICmps(): don't give up on non-single-use ICmp's if all users are freely invertible

Summary:
This is rather unconventional..

As the comment there says, we don't have much folds for xor-of-icmps,
we try to turn them into an and-of-icmps, for which we have plenty of folds.
But if the ICmp we need to invert is not single-use - we give up.

As discussed in https://reviews.llvm.org/D65148#1603922,
we may have a non-canonical CLAMP pattern, with bit match and
select-of-threshold that we'll potentially clamp.
As it can be seen in `canonicalize-clamp-with-select-of-constant-threshold-pattern.ll`,
out of all 8 variations of the pattern, only two are **not** canonicalized into
the variant with and+icmp instead of bit math.
The reason is because the ICmp we need to invert is not single-use - we give up.

We indeed can't perform this fold at will, the general rule is that
we should not increase instruction count in InstCombine,

But we wouldn't end up increasing instruction count if we can adapt every other
user to the inverted value. This way the `not` we create **will** get folded,
and in the end the instruction count did not increase.

For that, of course, we need to look at the users of a Value,
which is again rather unconventional for InstCombine :S

Thus i'm proposing to be a little bit more insistive in `foldXorOfICmps()`.
The alternatives would be to not create that `not`, but add duplicate code to
manually invert all users; or to add some even less general combine to handle
some more specific pattern[s].

Reviewers: spatel, nikic, RKSimon, craig.topper

Reviewed By: spatel

Subscribers: hiraditya, jdoerfert, dmgreen, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-readobj] - Remove 'error(Error EC)' helper.
George Rimar [Tue, 13 Aug 2019 12:07:41 +0000 (12:07 +0000)]
[llvm-readobj] - Remove 'error(Error EC)' helper.

We do not need it. I replaced it with
reportError(StringRef Input, Error Err).

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

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

5 years agogn build: Extract git() and git_out() functions in sync script
Nico Weber [Tue, 13 Aug 2019 11:48:15 +0000 (11:48 +0000)]
gn build: Extract git() and git_out() functions in sync script

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

5 years agogn build: Merge r368630
Nico Weber [Tue, 13 Aug 2019 11:32:54 +0000 (11:32 +0000)]
gn build: Merge r368630

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

5 years agogn build: Give cmake sync script an opt-in --write flag
Nico Weber [Tue, 13 Aug 2019 11:32:45 +0000 (11:32 +0000)]
gn build: Give cmake sync script an opt-in --write flag

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

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

5 years agogn build: Make sync script group output by revision
Nico Weber [Tue, 13 Aug 2019 11:24:20 +0000 (11:24 +0000)]
gn build: Make sync script group output by revision

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

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

5 years ago[X86] XFormVExtractWithShuffleIntoLoad - handle shuffle mask scaling
Simon Pilgrim [Tue, 13 Aug 2019 11:11:42 +0000 (11:11 +0000)]
[X86] XFormVExtractWithShuffleIntoLoad - handle shuffle mask scaling

If the target shuffle mask is from a wider type, attempt to scale the mask so that the extraction can attempt to peek through.

Fixes the regression mentioned in rL368662

Reapplying this as rL368308 had to be reverted as part of rL368660 to revert rL368276

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

5 years ago[X86] SimplifyDemandedVectorElts - attempt to recombine target shuffle using Demanded...
Simon Pilgrim [Tue, 13 Aug 2019 10:51:39 +0000 (10:51 +0000)]
[X86] SimplifyDemandedVectorElts - attempt to recombine target shuffle using DemandedElts mask (reapplied)

If we don't demand all elements, then attempt to combine to a simpler shuffle.

At the moment we can only do this if Depth == 0 as combineX86ShufflesRecursively uses Depth to track whether the shuffle has really changed or not - we'll need to change this before we can properly start merging combineX86ShufflesRecursively into SimplifyDemandedVectorElts.

The insertps-combine.ll regression is because XFormVExtractWithShuffleIntoLoad can't see through shuffles of different widths - this will be fixed in a follow-up commit.

Reapplying this as rL368307 had to be reverted as part of rL368660 to revert rL368276

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

5 years agoRevert r368276 "[TargetLowering] SimplifyDemandedBits - call SimplifyMultipleUseDeman...
Hans Wennborg [Tue, 13 Aug 2019 09:33:25 +0000 (09:33 +0000)]
Revert r368276 "[TargetLowering] SimplifyDemandedBits - call SimplifyMultipleUseDemandedBits for ISD::EXTRACT_VECTOR_ELT"

This introduced a false positive MemorySanitizer warning about use of
uninitialized memory in a vectorized crc function in Chromium. That suggests
maybe something is not right with this transformation. See
https://crbug.com/992853#c7 for a reproducer.

This also reverts the follow-up commits r368307 and r368308 which
depended on this.

> This patch attempts to peek through vectors based on the demanded bits/elt of a particular ISD::EXTRACT_VECTOR_ELT node, allowing us to avoid dependencies on ops that have no impact on the extract.
>
> In particular this helps remove some unnecessary scalar->vector->scalar patterns.
>
> The wasm shift patterns are annoying - @tlively has indicated that the wasm vector shift codegen are to be refactored in the near-term and isn't considered a major issue.
>
> Differential Revision: https://reviews.llvm.org/D65887

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

5 years ago[SimplifyLibCalls] Add dereferenceable bytes from known callsites
David Bolvansky [Tue, 13 Aug 2019 09:11:49 +0000 (09:11 +0000)]
[SimplifyLibCalls] Add dereferenceable bytes from known callsites

Summary:
int mm(char *a, char *b) {
    return memcmp(a,b,16);
}

Currently:
define dso_local i32 @mm(i8* nocapture readonly %a, i8* nocapture readonly %b) local_unnamed_addr #1 {
entry:
  %call = tail call i32 @memcmp(i8* %a, i8* %b, i64 16)
  ret i32 %call
}

After patch:
define dso_local i32 @mm(i8* nocapture readonly %a, i8* nocapture readonly %b) local_unnamed_addr #1 {
entry:
  %call = tail call i32 @memcmp(i8* dereferenceable(16)  %a, i8* dereferenceable(16)  %b, i64 16)
  ret i32 %call
}

Reviewers: jdoerfert, efriedma

Reviewed By: jdoerfert

Subscribers: javed.absar, spatel, llvm-commits

Tags: #llvm

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

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

5 years ago[NFC][InstCombine] Non-canonical clamp pattern: non-canonical predicate tests
Roman Lebedev [Tue, 13 Aug 2019 08:14:13 +0000 (08:14 +0000)]
[NFC][InstCombine] Non-canonical clamp pattern: non-canonical predicate tests

We can't handle 'uge' case because we can't ever get it,
there needs to be extra use on that compare or else it will be
canonicalized, but because of extra use we can't handle it.

'sge' case we can have.

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

5 years ago[PowerPC] Fix ICE when truncating some vectors
Qiu Chaofan [Tue, 13 Aug 2019 07:53:29 +0000 (07:53 +0000)]
[PowerPC] Fix ICE when truncating some vectors

The legalizer would hit an assertion on PowerPC platform when truncating
a vector whose size is not power of 2.  This patch is to add a check to
prevent vectors with such odd-size elements from being custom lowered.

Reviewed By: Hal Finkel

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

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

5 years ago[AArch64][GlobalISel] Replace explicit vreg creation with implicit using SrcOp. NFC.
Amara Emerson [Tue, 13 Aug 2019 06:55:32 +0000 (06:55 +0000)]
[AArch64][GlobalISel] Replace explicit vreg creation with implicit using SrcOp. NFC.

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

5 years ago[GlobalISel] Make the InstructionSelector instance non-const, allowing state to be...
Amara Emerson [Tue, 13 Aug 2019 06:26:59 +0000 (06:26 +0000)]
[GlobalISel] Make the InstructionSelector instance non-const, allowing state to be maintained.

Currently we can't keep any state in the selector object that we get from
subtarget. As a result we have to plumb through all our variables through
multiple functions. This change makes it non-const and adds a virtual init()
method to allow further state to be captured for each target.

AArch64 makes use of this in this patch to cache a call to hasFnAttribute()
which is expensive to call, and is used on each selection of G_BRCOND.

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

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

5 years agoAdded unit tests to check supported rounding modes
Serge Pavlov [Tue, 13 Aug 2019 05:21:18 +0000 (05:21 +0000)]
Added unit tests to check supported rounding modes

Also added fixed misspelled metadata name.

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

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

5 years ago[GlobalISel]: Add KnownBits for G_XOR
Aditya Nandakumar [Tue, 13 Aug 2019 04:32:33 +0000 (04:32 +0000)]
[GlobalISel]: Add KnownBits for G_XOR

https://reviews.llvm.org/D66119

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

5 years agoVerifier: check prof branch_weights
Yevgeny Rouban [Tue, 13 Aug 2019 04:03:38 +0000 (04:03 +0000)]
Verifier: check prof branch_weights

This patch is to check some of constraints on
!pro branch_weights metadata:
https://llvm.org/docs/BranchWeightMetadata.html

Reviewers: asbirlea, reames, chandlerc
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D61179

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

5 years agoDo not call replaceAllUsesWith to upgrade calls to ARC runtime functions
Akira Hatanaka [Tue, 13 Aug 2019 01:23:06 +0000 (01:23 +0000)]
Do not call replaceAllUsesWith to upgrade calls to ARC runtime functions
to intrinsic calls

This fixes a bug in r368311.

It turns out that the ARC runtime functions in the IR can have pointer
parameter types that are not i8* or i8**. Instead of RAUWing normal
functions with intrinsics, manually bitcast the arguments before passing
them to the intrinsic functions and bitcast the return value back to the
type of the original call instruction.

This recommits r368634, which was reverted in r368637. The loop in the
patch was iterating over uses of a function and deleting function calls
inside it, which caused bots to crash.

rdar://problem/54125406

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

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

5 years ago[AMDGPU] Fix msan failure in printf lowering
Stanislav Mekhanoshin [Tue, 13 Aug 2019 01:07:27 +0000 (01:07 +0000)]
[AMDGPU] Fix msan failure in printf lowering

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

5 years agoEliminate implicit Register->unsigned conversions in VirtRegMap. NFC
Daniel Sanders [Tue, 13 Aug 2019 00:55:24 +0000 (00:55 +0000)]
Eliminate implicit Register->unsigned conversions in VirtRegMap. NFC

Summary:
This was mostly an experiment to assess the feasibility of completely
eliminating a problematic implicit conversion case in D61321 in advance of
landing that* but it also happens to align with the goal of propagating the
use of Register/MCRegister instead of unsigned so I believe it makes sense
to commit it.

The overall process for eliminating the implicit conversions from
Register/MCRegister -> unsigned was to:
1. Add an explicit conversion to support genuinely required conversions to
   unsigned. For example, using them as an index for IndexedMap. Sadly it's
   not possible to have an explicit and implicit conversion to the same
   type and only deprecate the implicit one so I called the explicit
   conversion get().
2. Temporarily annotate the implicit conversion to unsigned with
   LLVM_ATTRIBUTE_DEPRECATED to make them visible
3. Eliminate implicit conversions by propagating Register/MCRegister/
   explicit-conversions appropriately
4. Remove the deprecation added in 2.

* My conclusion is that it isn't feasible as there's too much code to
  update in one go.

Depends on D65678

Reviewers: arsenm

Subscribers: MatzeB, wdng, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years agoRevert "Do not call replaceAllUsesWith to upgrade calls to ARC runtime functions"
Akira Hatanaka [Tue, 13 Aug 2019 00:20:36 +0000 (00:20 +0000)]
Revert "Do not call replaceAllUsesWith to upgrade calls to ARC runtime functions"

This reverts commit r368634 because it broke a bot.

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

5 years agoMove findBBwithCalls to the file it's used in to avoid unused function
Eric Christopher [Tue, 13 Aug 2019 00:05:01 +0000 (00:05 +0000)]
Move findBBwithCalls to the file it's used in to avoid unused function
warnings.

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

5 years agoDo not call replaceAllUsesWith to upgrade calls to ARC runtime functions
Akira Hatanaka [Mon, 12 Aug 2019 23:53:23 +0000 (23:53 +0000)]
Do not call replaceAllUsesWith to upgrade calls to ARC runtime functions
to intrinsic calls

This fixes a bug in r368311.

It turns out that the ARC runtime functions in the IR can have pointer
parameter types that are not i8* or i8**. Instead of RAUWing normal
functions with intrinsics, manually bitcast the arguments before passing
them to the intrinsic functions and bitcast the return value back to the
type of the original call instruction.

rdar://problem/54125406

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

5 years ago[AMDGPU] removed unused functions from printf lowering
Stanislav Mekhanoshin [Mon, 12 Aug 2019 23:32:35 +0000 (23:32 +0000)]
[AMDGPU] removed unused functions from printf lowering

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

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

5 years ago[WinEH] Fix catch block parent frame pointer offset
Reid Kleckner [Mon, 12 Aug 2019 23:02:00 +0000 (23:02 +0000)]
[WinEH] Fix catch block parent frame pointer offset

r367088 made it so that funclets store XMM registers into their local
frame instead of storing them to the parent frame. However, that change
forgot to update the parent frame pointer offset for catch blocks. This
change does that.

Fixes crashes when an exception is rethrown in a catch block that saves
XMMs, as described in https://crbug.com/992860.

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

5 years ago[TextAPI] Fix & Add tests for tbd files version 3.
Juergen Ributzka [Mon, 12 Aug 2019 23:01:07 +0000 (23:01 +0000)]
[TextAPI] Fix & Add tests for tbd files version 3.

- There was a simple typo in TextStub code that prevented version 3 files to be read.
- Included a version 3 unit test to handle the differences in the format.
- Also a typo in Error.h inside the comments.

https://reviews.llvm.org/D66041

This patch is from Cyndy Ishida <cyndy_ishida@apple.com>.

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

5 years ago[risc-v] Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM
Daniel Sanders [Mon, 12 Aug 2019 22:41:02 +0000 (22:41 +0000)]
[risc-v] Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM

Summary:
This clang-tidy check is looking for unsigned integer variables whose initializer
starts with an implicit cast from llvm::Register and changes the type of the
variable to llvm::Register (dropping the llvm:: where possible).

Depends on D65919

Reviewers: lenary

Subscribers: jholewinski, MatzeB, qcolombet, dschuff, jyknight, dylanmckay, sdardis, nemanjai, jvesely, wdng, nhaehnle, sbc100, jgravelle-google, kristof.beyls, hiraditya, aheejin, kbarton, fedor.sergeev, javed.absar, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, tpr, PkmX, jocewei, jsji, Petar.Avramovic, asbirlea, Jim, s.egerton, llvm-commits

Tags: #llvm

Differential Revision for full review was: https://reviews.llvm.org/D65962

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

5 years ago[aarch64] Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM
Daniel Sanders [Mon, 12 Aug 2019 22:40:53 +0000 (22:40 +0000)]
[aarch64] Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM

Summary:
This clang-tidy check is looking for unsigned integer variables whose initializer
starts with an implicit cast from llvm::Register and changes the type of the
variable to llvm::Register (dropping the llvm:: where possible).

Manual fixups in:
AArch64InstrInfo.cpp - genFusedMultiply() now takes a Register* instead of unsigned*
AArch64LoadStoreOptimizer.cpp - Ternary operator was ambiguous between Register/MCRegister. Settled on Register

Depends on D65919

Reviewers: aemerson

Subscribers: jholewinski, MatzeB, qcolombet, dschuff, jyknight, dylanmckay, sdardis, nemanjai, jvesely, wdng, nhaehnle, sbc100, jgravelle-google, kristof.beyls, hiraditya, aheejin, kbarton, fedor.sergeev, javed.absar, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, tpr, PkmX, jocewei, jsji, Petar.Avramovic, asbirlea, Jim, s.egerton, llvm-commits

Tags: #llvm

Differential Revision for full review was: https://reviews.llvm.org/D65962

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

5 years ago[webassembly] Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM
Daniel Sanders [Mon, 12 Aug 2019 22:40:45 +0000 (22:40 +0000)]
[webassembly] Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM

Summary:
This clang-tidy check is looking for unsigned integer variables whose initializer
starts with an implicit cast from llvm::Register and changes the type of the
variable to llvm::Register (dropping the llvm:: where possible).

Reviewers: aheejin

Subscribers: jholewinski, MatzeB, qcolombet, dschuff, jyknight, dylanmckay, sdardis, nemanjai, jvesely, wdng, nhaehnle, sbc100, jgravelle-google, kristof.beyls, hiraditya, aheejin, kbarton, fedor.sergeev, javed.absar, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, tpr, PkmX, jocewei, jsji, Petar.Avramovic, asbirlea, Jim, s.egerton, llvm-commits

Tags: #llvm

Differential Revision for whole review: https://reviews.llvm.org/D65962

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

5 years ago[AMDGPU] Use PredicateControl in MIMGBaseOpcode. NFC.
Stanislav Mekhanoshin [Mon, 12 Aug 2019 22:32:21 +0000 (22:32 +0000)]
[AMDGPU] Use PredicateControl in MIMGBaseOpcode. NFC.

This is infrastructural, will be needed for future work.
For some reason it was only used in MIMG_NoSampler, while
needed everywere we use MIMGBaseOpcode if we want to use
predicates.

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

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

5 years ago[Attributor] Use the cached data layout directly
Johannes Doerfert [Mon, 12 Aug 2019 22:21:09 +0000 (22:21 +0000)]
[Attributor] Use the cached data layout directly

This removes the warning by using the new DL member.
It also simplifies the code.

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

5 years agoTitle: Fix build warning for operator<< when using GCC 7.
Whitney Tsang [Mon, 12 Aug 2019 22:20:54 +0000 (22:20 +0000)]
Title: Fix build warning for operator<< when using GCC 7.
Authored By: etiotto
Differential Revision: https://reviews.llvm.org/D63459

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

5 years ago[X86] Allow combineTruncateWithSat to use pack instructions for i16->i8 without AVX512BW.
Craig Topper [Mon, 12 Aug 2019 22:18:23 +0000 (22:18 +0000)]
[X86] Allow combineTruncateWithSat to use pack instructions for i16->i8 without AVX512BW.

We need AVX512BW to be able to truncate an i16 vector. If we don't
have that we have to extend i16->i32, then trunc, i32->i8. But we
won't be able to remove the min/max if we do that. At least not
without more special handling.

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

5 years ago[Attributor][NFC] Add IntegerState raw_ostream << operator
Johannes Doerfert [Mon, 12 Aug 2019 22:07:34 +0000 (22:07 +0000)]
[Attributor][NFC] Add IntegerState raw_ostream << operator

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

5 years ago[Attributor] Make the InformationCache an Attributor member
Johannes Doerfert [Mon, 12 Aug 2019 22:05:53 +0000 (22:05 +0000)]
[Attributor] Make the InformationCache an Attributor member

The functionality is not changed but the interfaces are simplified and
repetition is removed.

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

5 years ago[GISel]: Fix a bug in KnownBits where we should have been using SizeInBits
Aditya Nandakumar [Mon, 12 Aug 2019 21:28:12 +0000 (21:28 +0000)]
[GISel]: Fix a bug in KnownBits where we should have been using SizeInBits

https://reviews.llvm.org/D66039

We were using getIndexSize instead of getIndexSizeInBits().
Added test case for G_PTRTOINT and G_INTTOPTR.

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

5 years agoRevert "Disable MachO TBD write tests for Windows."
Juergen Ributzka [Mon, 12 Aug 2019 19:51:34 +0000 (19:51 +0000)]
Revert "Disable MachO TBD write tests for Windows."

The underlying issue was fixed in r357759.

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

5 years ago[X86] Remove unreachable code from LowerTRUNCATE. NFC
Craig Topper [Mon, 12 Aug 2019 19:26:45 +0000 (19:26 +0000)]
[X86] Remove unreachable code from LowerTRUNCATE. NFC

All three 256->128 bit cases were already handled above.

Noticed while looking at the coverage report.

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

5 years ago[X86] Add a paranoia type check to the code that detects AVG patterns from truncating...
Craig Topper [Mon, 12 Aug 2019 19:26:37 +0000 (19:26 +0000)]
[X86] Add a paranoia type check to the code that detects AVG patterns from truncating stores.

If we're after type legalize, we should make sure we won't create
a store with an illegal type when we separate the AVG pattern
from the truncating store.

I don't know of a way to fail for this today. Just noticed while
I was in the vicinity.

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

5 years ago[X86] Simplify creation of saturating truncating stores.
Craig Topper [Mon, 12 Aug 2019 19:26:30 +0000 (19:26 +0000)]
[X86] Simplify creation of saturating truncating stores.

We just need to check if the truncating store is legal
instead of going through isSATValidOnAVX512Subtarget.

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

5 years ago[X86] Replace call to isTruncStoreLegalOrCustom with isTruncStoreLegal. NFC
Craig Topper [Mon, 12 Aug 2019 19:26:22 +0000 (19:26 +0000)]
[X86] Replace call to isTruncStoreLegalOrCustom with isTruncStoreLegal. NFC

We have no custom trunc stores on X86.

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

5 years agogn build: Merge r368592
Nico Weber [Mon, 12 Aug 2019 18:33:10 +0000 (18:33 +0000)]
gn build: Merge r368592

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

5 years ago[NFC][PowerPC] Add the test case shrink-wrap.mir and shrink-wrap.ll for PPC
Kang Zhang [Mon, 12 Aug 2019 17:50:01 +0000 (17:50 +0000)]
[NFC][PowerPC] Add the test case shrink-wrap.mir and shrink-wrap.ll for PPC

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

5 years ago[ThinLTO][AutoFDO] Fix memory corruption due to race condition from thin backends
Wenlei He [Mon, 12 Aug 2019 17:45:14 +0000 (17:45 +0000)]
[ThinLTO][AutoFDO] Fix memory corruption due to race condition from thin backends

Summary:
This commit fixed a race condition from multi-threaded thinLTO backends that causes non-deterministic memory corruption for a data structure used only by AutoFDO with compact binary profile.
GUIDToFuncNameMap, a static data member of type DenseMap in FunctionSamples is used as a per-module mapping from function name MD5 to name string when input AutoFDO profile is in compact binary format. However with ThinLTO, we can have parallel backends modifying and accessing the class static map concurrently. The fix is to make GUIDToFuncNameMap a member of SampleProfileLoader instead of a file static data.

Reviewers: wmi, davidxl, danielcdh

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

Tags: #llvm

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

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

5 years ago[CostModel][X86][AArch64] Check all 3 cost kinds in aggregates.ll
Roman Lebedev [Mon, 12 Aug 2019 17:45:12 +0000 (17:45 +0000)]
[CostModel][X86][AArch64] Check all 3 cost kinds in aggregates.ll

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

5 years ago[X86] Disable use of zmm registers for varargs musttail calls under prefer-vector...
Craig Topper [Mon, 12 Aug 2019 17:43:26 +0000 (17:43 +0000)]
[X86] Disable use of zmm registers for varargs musttail calls under prefer-vector-width=256 and min-legal-vector-width=256.

Under this config, the v16f32 type we try to use isn't to a register
class so the getRegClassFor call will fail.

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

5 years ago[ARM] sext of a load is free
David Green [Mon, 12 Aug 2019 17:39:56 +0000 (17:39 +0000)]
[ARM] sext of a load is free

This teaches the cost model that the sext or zext of a load is going to be
free.

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

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

5 years ago[AMDGPU] Printf runtime binding pass
Stanislav Mekhanoshin [Mon, 12 Aug 2019 17:12:29 +0000 (17:12 +0000)]
[AMDGPU] Printf runtime binding pass

This pass is a port of the according pass from the HSAIL compiler.
It parses printf calls and setup runtime printf buffer.
After that it copies printf arguments to the buffer and fills in
module metadata for runtime.

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

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

5 years ago[ARM] MVE shuffle broadcast costs
David Green [Mon, 12 Aug 2019 16:54:07 +0000 (16:54 +0000)]
[ARM] MVE shuffle broadcast costs

A VDUP will perform a vector broadcast in a single instruction. Update the cost
model for MVE accordingly.

Code originally by David Sherwood.

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

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

5 years ago[ARM] Put some of the TTI costmodel behind hasNeon calls.
David Green [Mon, 12 Aug 2019 15:59:52 +0000 (15:59 +0000)]
[ARM] Put some of the TTI costmodel behind hasNeon calls.

This puts some of the calls in ARMTargetTransformInfo.cpp behind hasNeon()
checks, now that we have MVE, and updates all the tests accordingly.

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

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

5 years ago[ARM] Add or update a number of costmodel tests. NFC
David Green [Mon, 12 Aug 2019 15:40:27 +0000 (15:40 +0000)]
[ARM] Add or update a number of costmodel tests. NFC

This adds a number of cost model tests for ARM, useful for MVE. It also re-jigs
some of the existing tests to make them easier to update and read.

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

5 years ago[XCOFF] Use a single symbolic constant for the size of an embeded name. [NFC]
Sean Fertile [Mon, 12 Aug 2019 15:27:40 +0000 (15:27 +0000)]
[XCOFF] Use a single symbolic constant for the size of an embeded name. [NFC]

Convert SymbolNameSize and SectionNameSize into just `NameSize`. The length of
a name embeded in a symbol table entry or section header table entry is length 8
for Sections, Symbols and Files. No need to have a distinct constant for each
one. Also removes the Size argument to 'generateStringRef' as the size is
always 'XCOFF::NameSize'.

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

5 years ago[InstCombine] add tests for scalar-select-of-vectors; NFC
Sanjay Patel [Mon, 12 Aug 2019 15:21:11 +0000 (15:21 +0000)]
[InstCombine] add tests for scalar-select-of-vectors; NFC

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

5 years agoRevert r368339 "[MBP] Disable aggressive loop rotate in plain mode"
Hans Wennborg [Mon, 12 Aug 2019 14:23:13 +0000 (14:23 +0000)]
Revert r368339 "[MBP] Disable aggressive loop rotate in plain mode"

It caused assertions to fire when building Chromium:

  lib/CodeGen/LiveDebugValues.cpp:331: bool
  {anonymous}::LiveDebugValues::OpenRangesSet::empty() const: Assertion
  `Vars.empty() == VarLocs.empty() && "open ranges are inconsistent"' failed.

See https://crbug.com/992871#c3 for how to reproduce.

> Patch https://reviews.llvm.org/D43256 introduced more aggressive loop layout optimization which depends on profile information. If profile information is not available, the statically estimated profile information(generated by BranchProbabilityInfo.cpp) is used. If user program doesn't behave as BranchProbabilityInfo.cpp expected, the layout may be worse.
>
> To be conservative this patch restores the original layout algorithm in plain mode. But user can still try the aggressive layout optimization with -force-precise-rotation-cost=true.
>
> Differential Revision: https://reviews.llvm.org/D65673

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

5 years ago[llvm-ar][NFC] Fix buildbot
Jordan Rupprecht [Mon, 12 Aug 2019 14:21:51 +0000 (14:21 +0000)]
[llvm-ar][NFC] Fix buildbot

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

5 years ago[llvm-readobj] Downgrade 'PT_DYNAMIC segment offset + size exceeds the size of the...
Jordan Rupprecht [Mon, 12 Aug 2019 14:05:37 +0000 (14:05 +0000)]
[llvm-readobj] Downgrade 'PT_DYNAMIC segment offset + size exceeds the size of the file' from an error to a warning

Summary: This allows llvm-readobj to print other useful information for truncated files instead of giving up.

Reviewers: jhenderson, grimar, MaskRay

Reviewed By: jhenderson, grimar, MaskRay

Subscribers: llvm-commits

Tags: #llvm

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

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

5 years ago[X86][SSE] Add test showing missing demanded elts PSADBW handling
Simon Pilgrim [Mon, 12 Aug 2019 14:01:16 +0000 (14:01 +0000)]
[X86][SSE] Add test showing missing demanded elts PSADBW handling

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

5 years agoRevert r368565: [CodeGen] Do the Simple Early Return in block-placement pass to optim...
Kang Zhang [Mon, 12 Aug 2019 14:00:31 +0000 (14:00 +0000)]
Revert r368565: [CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks

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

5 years ago[llvm-ar] Accept file paths with windows format slashes
Owen Reynolds [Mon, 12 Aug 2019 14:00:28 +0000 (14:00 +0000)]
[llvm-ar] Accept file paths with windows format slashes

The internal representation of llvm-ar archives uses linux style slashes
for paths, no matter the OS. In the case of windows this meant file
paths input intending to match existing members would only match if
linux style slashes where used. This change allows either slash
direction to be input by the user.

This change includes removing an unnecessary call to normalisePath and
moving the call of another.

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

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

5 years ago[RISCV] Fix ICE in isDesirableToCommuteWithShift
Sam Elliott [Mon, 12 Aug 2019 13:51:00 +0000 (13:51 +0000)]
[RISCV] Fix ICE in isDesirableToCommuteWithShift

Summary:
Ana Pazos reported a bug where we were not checking that an APInt would
fit into 64-bits before calling `getSExtValue()`. This caused asserts when
compiling large constants, such as i128s, as happens when compiling compiler-rt.

This patch adds a testcase and makes the callback less error-prone.

Reviewers: apazos, asb, luismarques

Reviewed By: luismarques

Subscribers: hiraditya, rbar, johnrusso, simoncook, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, s.egerton, llvm-commits

Tags: #llvm

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

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

5 years ago[InstCombine] x /c fabs(x) -> copysign(1.0, x)
David Bolvansky [Mon, 12 Aug 2019 13:43:35 +0000 (13:43 +0000)]
[InstCombine] x /c fabs(x) -> copysign(1.0, x)

Summary:
x / fabs(x) -> copysign(1.0, x)
fabs(x) / x -> copysign(1.0, x)

Reviewers: spatel, foad, RKSimon, efriedma

Reviewed By: spatel

Subscribers: lebedev.ri, llvm-commits

Tags: #llvm

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

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

5 years ago[DebugInfo] Remove call sites when eliminating unreachable blocks
David Stenberg [Mon, 12 Aug 2019 13:22:29 +0000 (13:22 +0000)]
[DebugInfo] Remove call sites when eliminating unreachable blocks

Summary:
When eliminating an unreachable block we must remove any call site
information for calls residing in the block.

This was originally found on a downstream target, and the attached x86
test case was produced by hand-modifying some MIR.

Reviewers: aprantl, asowda, NikolaPrica, djtodoro, ivanbaev, vsk

Reviewed By: NikolaPrica, vsk

Subscribers: vsk, hiraditya, llvm-commits

Tags: #debug-info, #llvm

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

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

5 years ago[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks
Kang Zhang [Mon, 12 Aug 2019 13:15:31 +0000 (13:15 +0000)]
[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks

Summary:

In `block-placement` pass, it will create some patterns for unconditional we can do the simple early retrun.
But the `early-ret` pass is before `block-placement`, we don't want to run it again.
This patch is to do the simple early return to optimize the blocks at the last of `block-placement`.

Reviewed By: efriedma

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

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

5 years ago[llvm-ar][test] Correct tests marked as expected fails
Owen Reynolds [Mon, 12 Aug 2019 13:04:02 +0000 (13:04 +0000)]
[llvm-ar][test] Correct tests marked as expected fails

In diff D64802 I marked three tests as expected failures for darwin but
James Nagurne saw these fail on his downstream embedded ARM cross
compiler.
I believe XFAIL: system-darwin should be used instead of using XFAIL:
darwin due to the problem being related to the darwin host and not the
target.

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

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

5 years agoRevert r368509 "[CodeGen] Do the Simple Early Return in block-placement pass to optim...
Hans Wennborg [Mon, 12 Aug 2019 12:43:51 +0000 (12:43 +0000)]
Revert r368509 "[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks"

> In `block-placement` pass, it will create some patterns for unconditional we can do the simple early retrun.
> But the `early-ret` pass is before `block-placement`, we don't want to run it again.
> This patch is to do the simple early return to optimize the blocks at the last of `block-placement`.
>
> Reviewed By: efriedma
>
> Differential Revision: https://reviews.llvm.org/D63972

This also revertes follow-ups r368514 and r368532.

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

5 years ago[X86][SSE] ComputeKnownBits - add basic PSADBW handling
Simon Pilgrim [Mon, 12 Aug 2019 12:19:19 +0000 (12:19 +0000)]
[X86][SSE] ComputeKnownBits - add basic PSADBW handling

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

5 years ago[X86][SSE] Add test showing missing compute known bits PSADBW handling
Simon Pilgrim [Mon, 12 Aug 2019 12:13:08 +0000 (12:13 +0000)]
[X86][SSE] Add test showing missing compute known bits PSADBW handling

The upper 48-bits of each i64 element is guaranteed to be zero.

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

5 years agoNFC. Remove trailing whitespace in test
James Henderson [Mon, 12 Aug 2019 11:39:54 +0000 (11:39 +0000)]
NFC. Remove trailing whitespace in test

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

5 years ago[llvm-strings] Improve testing of llvm-strings
James Henderson [Mon, 12 Aug 2019 11:36:11 +0000 (11:36 +0000)]
[llvm-strings] Improve testing of llvm-strings

This patch tidies up the llvm-strings testing by:

1. Adding comments to every test.
2. Getting rid of canned input files, and having the tests generate
   them on the fly (this makes the tests self-contained).
3. Adding missing test coverage.
4. Renaming some tests that weren't clear as to their purpose.
5. Adding extra checking of various cases, formatting etc.
6. Removing a test that didn't seem to have any useful purpose for
   testing llvm-strings.

Reviewed by: rupprecht, grimar, MaskRay

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

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

5 years ago[InstCombine] foldShiftIntoShiftInAnotherHandOfAndInICmp(): avoid constantexpr pitfai...
Roman Lebedev [Mon, 12 Aug 2019 11:28:02 +0000 (11:28 +0000)]
[InstCombine] foldShiftIntoShiftInAnotherHandOfAndInICmp(): avoid constantexpr pitfail (PR42962)

Instead of matching value and then blindly casting to BinaryOperator
just to get the opcode, just match instruction and do no cast.

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

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

5 years ago[TargetLowering] SimplifyDemandedBits - call SimplifyMultipleUseDemandedBits for...
Simon Pilgrim [Mon, 12 Aug 2019 10:56:05 +0000 (10:56 +0000)]
[TargetLowering] SimplifyDemandedBits - call SimplifyMultipleUseDemandedBits for ISD::TRUNCATE

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

5 years ago[CostModel][X86][AArch64] Add some tests for extractvalue
Roman Lebedev [Mon, 12 Aug 2019 09:24:33 +0000 (09:24 +0000)]
[CostModel][X86][AArch64] Add some tests for extractvalue

In https://reviews.llvm.org/D65148 it is suggested that
it should have zero cost, always.

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

5 years ago[X86] Add some reduction add test cases that show sub-optimal code on avx2 and later.
Craig Topper [Mon, 12 Aug 2019 06:55:58 +0000 (06:55 +0000)]
[X86] Add some reduction add test cases that show sub-optimal code on avx2 and later.

For v4i8 and v8i8 when the reduction starts with a load we end up
shifting the data in the scalar domain and copying to the vector
domain a second time using a broadcast.

We already copied it to the vector domain once. It's better to
just shuffle it there.

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

5 years ago[X86] Support -march=tigerlake
Pengfei Wang [Mon, 12 Aug 2019 01:29:46 +0000 (01:29 +0000)]
[X86] Support -march=tigerlake

Support -march=tigerlake for x86.
Compare with Icelake Client, It include 4 more new features ,they are
avx512vp2intersect, movdiri, movdir64b, shstk.

Patch by Xiang Zhang (xiangzhangllvm)

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

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

5 years agoFix pass dependency for LICM
Wenlei He [Sun, 11 Aug 2019 22:54:05 +0000 (22:54 +0000)]
Fix pass dependency for LICM

Expected to address buildbot failure http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/16285 caused by D65060.

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

5 years ago[X86] Remove redundant ';' chars ending IR lines in lit tests. NFC
Bjorn Pettersson [Sun, 11 Aug 2019 19:27:14 +0000 (19:27 +0000)]
[X86] Remove redundant ';' chars ending IR lines in lit tests. NFC

Reviewers: RKSimon, craig.topper

Reviewed By: craig.topper

Subscribers: llvm-commits

Tags: #llvm

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

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

5 years ago[SelectionDAG] Widen vector results of SMULFIX/UMULFIX/SMULFIXSAT
Bjorn Pettersson [Sun, 11 Aug 2019 19:27:06 +0000 (19:27 +0000)]
[SelectionDAG] Widen vector results of SMULFIX/UMULFIX/SMULFIXSAT

Summary:
After the commits that changed x86 backend to widen vectors
instead of using promotion some of our downstream tests
started to fail. It was noticed that WidenVectorResult has
been missing support for SMULFIX/UMULFIX/SMULFIXSAT. This
patch adds the missing functionality.

Reviewers: craig.topper, RKSimon

Reviewed By: craig.topper

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Simplify some of the type checks in combineSubToSubus.
Craig Topper [Sun, 11 Aug 2019 17:36:49 +0000 (17:36 +0000)]
[X86] Simplify some of the type checks in combineSubToSubus.

If we have SSE2 we can handle any i8/i16 type and let
type legalization deal with it.

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

5 years ago[X86] Don't use SplitOpsAndApply for ISD::USUBSAT.
Craig Topper [Sun, 11 Aug 2019 17:36:45 +0000 (17:36 +0000)]
[X86] Don't use SplitOpsAndApply for ISD::USUBSAT.

Target independent type legalization and custom lowering
should be able to handle it.

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

5 years ago[NFC][CodeGen] Use while loop instead for loop in MachineBlockPlacement::optimizeBran...
Kang Zhang [Sun, 11 Aug 2019 12:58:50 +0000 (12:58 +0000)]
[NFC][CodeGen] Use while loop instead for loop in MachineBlockPlacement::optimizeBranches()
This will pass EXPENSIVE check.

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

5 years ago[ARM] MVE spill vector test. NFC
David Green [Sun, 11 Aug 2019 09:12:57 +0000 (09:12 +0000)]
[ARM] MVE spill vector test. NFC

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

5 years ago[MVE] Don't try to unroll vectorised MVE loops
David Green [Sun, 11 Aug 2019 08:53:18 +0000 (08:53 +0000)]
[MVE] Don't try to unroll vectorised MVE loops

Due to the nature of the beat system in the MVE architecture, along with tail
predication and low-overhead loops, unrolling has less benefit compared to
normal loops. You can not, for example, hide the latency of a load with other
instructions as you can for scalar code. Preventing unrolling also makes the
code easier to read and reason about.

So if a loop contains vector code, don't enable the runtime unrolling. At least
for the time being.

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

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