Commit Graph

17946 Commits

Author SHA1 Message Date
Eugene Zelenko
6f42331357 [ADT] Fix some Clang-tidy modernize-use-using warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303221 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 23:10:25 +00:00
Davide Italiano
40240a1e6b [IR] Prefer use_empty() to !hasNUsesOrMore(1) for clarity.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303218 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 22:38:40 +00:00
Evgeny Stupachenko
10dbbfe1c9 The patch exclude a case from zero check skip in
CTLZ idiom recognition (r303102).

Summary:

The following case:
i = 1;
if(n)
  while (n >>= 1)
    i++;
use(i);

Was converted to:

i = 1;
if(n)
  i += builtin_ctlz(n >> 1, false);
use(i);

Which is not correct. The patch make it:

i = 1;
if(n)
  i += builtin_ctlz(n >> 1, true);
use(i);

From: Evgeny Stupachenko <evstupac@gmail.com>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303212 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 21:44:59 +00:00
Dmitry Mikulin
5bdd161daf In debug builds non-trivial amount of time is spent in InstCombine processing
@llvm.dbg.* calls in visitCallInst(). They can be safely ignored.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303202 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 20:08:49 +00:00
Daniel Berlin
d0402428ae NewGVN: Only do something in verifyStoreExpressions if assertions are enabled, to avoid unused code warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303201 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 20:02:45 +00:00
Daniel Berlin
39f419be0f NewGVN: Fix PR 33051 by making sure we remove old store expressions
from the ExpressionToClass mapping.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303200 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 19:58:47 +00:00
Matthew Simpson
61c3d36e2e Revert 303174, 303176, and 303178
These commits are breaking the bots. Reverting to investigate.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303182 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 15:50:30 +00:00
Matthew Simpson
d9ed77b3ad [LV] Avoid potentential division by zero when selecting IC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303174 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 14:43:55 +00:00
Gor Nishanov
9c7e9d2676 [coroutines] Handle unwind edge splitting
Summary:
RewritePHIs algorithm used in building of CoroFrame inserts a placeholder
```
%placeholder = phi [%val]
```
on every edge leading to a block starting with PHI node with multiple incoming edges,
so that if one of the incoming values was spilled and need to be reloaded, we have a
place to insert a reload. We use SplitEdge helper function to split the incoming edge.

SplitEdge function does not deal with unwind edges comping into a block with an EHPad.

This patch adds an ehAwareSplitEdge function that can correctly split the unwind edge.

For landing pads, we clone the landing pad into every edge block and replace the original
landing pad with a PHI collection the values from all incoming landing pads.

For WinEH pads, we keep the original EHPad in place and insert cleanuppad/cleapret in the
edge blocks.

Reviewers: majnemer, rnk

Reviewed By: majnemer

Subscribers: EricWF, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303172 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 14:11:39 +00:00
Craig Topper
1f5970481f [CorrelatedValuePropagation] Don't use -> to call a static method of ConstantRange. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303147 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 07:05:38 +00:00
Daniel Berlin
9b42d75c41 NewGVN: Use StoreExpression StoredValue instead of looking it up again, since it was already looked up when it was created
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303144 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 06:06:15 +00:00
Daniel Berlin
158f63f59e NewGVN: Formatting fixes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303143 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 06:06:12 +00:00
Davide Italiano
84be2d3a3b Revert "[NewGVN] Replace predicate info leftovers."
It's breaking the bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303142 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 05:51:21 +00:00
Davide Italiano
7c0283272a [NewGVN] Replace predicate info leftovers.
Fixes PR32945.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303141 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 05:23:23 +00:00
Peter Collingbourne
6ba81f2c10 IR: Give function GlobalValue::getRealLinkageName() a less misleading name: dropLLVMManglingEscape().
This function gives the wrong answer on some non-ELF platforms in some
cases. The function that does the right thing lives in Mangler.h. To try to
discourage people from using this function, give it a different name.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303134 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-16 00:39:01 +00:00
Xinliang David Li
813b227d46 Fix memory leak
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303126 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 22:43:52 +00:00
David Blaikie
f80f771764 PR32288: Describe a bool parameter's DWARF location with a simple register
There's no need (& a bit incorrect) to mask off the high bits of the
register reference when describing a simple bool value.

Reviewers: aprantl

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303117 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 21:34:01 +00:00
Adam Nemet
2efa5091b6 [SLP] Enable 64-bit wide vectorization on AArch64
ARM Neon has native support for half-sized vector registers (64 bits).  This
is beneficial for example for 2D and 3D graphics.  This patch adds the option
to lower MinVecRegSize from 128 via a TTI in the SLP Vectorizer.

*** Performance Analysis

This change was motivated by some internal benchmarks but it is also
beneficial on SPEC and the LLVM testsuite.

The results are with -O3 and PGO.  A negative percentage is an improvement.
The testsuite was run with a sample size of 4.

** SPEC

* CFP2006/482.sphinx3  -3.34%

A pretty hot loop is SLP vectorized resulting in nice instruction reduction.
This used to be a +22% regression before rL299482.

* CFP2000/177.mesa     -3.34%
* CINT2000/256.bzip2   +6.97%

My current plan is to extend the fix in rL299482 to i16 which brings the
regression down to +2.5%.  There are also other problems with the codegen in
this loop so there is further room for improvement.

** LLVM testsuite

* SingleSource/Benchmarks/Misc/ReedSolomon               -10.75%

There are multiple small SLP vectorizations outside the hot code.  It's a bit
surprising that it adds up to 10%.  Some of this may be code-layout noise.

* MultiSource/Benchmarks/VersaBench/beamformer/beamformer -8.40%

The opt-viewer screenshot can be seen at F3218284.  We start at a colder store
but the tree leads us into the hottest loop.

* MultiSource/Applications/lambda-0.1.3/lambda            -2.68%
* MultiSource/Benchmarks/Bullet/bullet                    -2.18%

This is using 3D vectors.

* SingleSource/Benchmarks/Shootout-C++/Shootout-C++-lists +6.67%

Noise, binary is unchanged.

* MultiSource/Benchmarks/Ptrdist/anagram/anagram          +4.90%

There is an additional SLP in the cold code.  The test runs for ~1sec and
prints out over 2000 lines. This is most likely noise.

* MultiSource/Applications/aha/aha                        +1.63%
* MultiSource/Applications/JM/lencod/lencod               +1.41%
* SingleSource/Benchmarks/Misc/richards_benchmark         +1.15%

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303116 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 21:15:01 +00:00
Evgeniy Stepanov
b046920f48 [asan] Better workaround for gold PR19002.
See the comment for more details. Test in a follow-up CFE commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303113 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 20:43:42 +00:00
Davide Italiano
cd3977bec3 [NewGVN] Remove unused setDefiningExpr(). NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303107 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 19:35:40 +00:00
Sanjay Patel
6d2022f1d3 [InstCombine] restrict icmp fold with 2 sdiv exact operands (PR32949)
This is the InstCombine counterpart to D32954. 
I added some comments about the code duplication in:
rL302436

Alive-based verification:
http://rise4fun.com/Alive/dPw

This is a 2nd fix for the problem reported in:
https://bugs.llvm.org/show_bug.cgi?id=32949

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303105 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 19:27:53 +00:00
Evgeny Stupachenko
8b48b0420b The patch adds CTLZ idiom recognition.
Summary:

The following loops should be recognized:
i = 0;
while (n) {
  n = n >> 1;
  i++;
  body();
}
use(i);

And replaced with builtin_ctlz(n) if body() is empty or
for CPUs that have CTLZ instruction converted to countable:

for (j = 0; j < builtin_ctlz(n); j++) {
  n = n >> 1;
  i++;
  body();
}
use(builtin_ctlz(n));

Reviewers: rengolin, joerg

Differential Revision: http://reviews.llvm.org/D32605

From: Evgeny Stupachenko <evstupac@gmail.com>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303102 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 19:08:56 +00:00
Davide Italiano
297d728cd5 [NewGVN] Fix verification of MemoryPhis in verifyMemoryCongruency().
verifyMemoryCongruency() filters out trivially dead MemoryDef(s),
as we find them immediately dead, before moving from TOP to a new
congruence class.
This fixes the same problem for PHI(s) skipping MemoryPhis if all
the operands are dead.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303100 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 18:50:53 +00:00
Sanjay Patel
db932d4256 [InstCombine] use m_OneUse to reduce code; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303090 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 18:08:17 +00:00
Craig Topper
32a237d8c0 [ValueTracking] Replace all uses of ComputeSignBit with computeKnownBits.
This patch finishes off the conversion of ComputeSignBit to computeKnownBits.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303035 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 06:39:41 +00:00
Craig Topper
b2bc907841 [InstCombine] Merge duplicate functionality between InstCombine and ValueTracking
Summary:
Merge overflow computation for signed add,
appearing both in InstCombine and ValueTracking.

As part of the merge,
cleanup the interface for overflow checks in InstCombine.

Patch by Yoav Ben-Shalom.

Reviewers: craig.topper, majnemer

Reviewed By: craig.topper

Subscribers: takuto.ikuta, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303029 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 02:44:08 +00:00
Craig Topper
28de70efae [InstCombine] Remove 'return' of a called function that also returned void. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303028 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 02:30:27 +00:00
Xinliang David Li
affec73618 Fix test failure on windows -- do not return deleted func
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302999 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-14 02:54:02 +00:00
Simon Pilgrim
07ac640d6c [LoopOptimizer][Fix]PR32859, PR24738
The Loop vectorizer pass introduced undef value while it is fixing output of LCSSA form.
Here it is:

before: %e.0.ph = phi i32 [ 0, %for.inc.2.i ]
after: %e.0.ph = phi i32 [ 0, %for.inc.2.i ], [ undef, %middle.block ]

and after this change we have:

%e.0.ph = phi i32 [ 0, %for.inc.2.i ]
%e.0.ph = phi i32 [ 0, %for.inc.2.i ], [ 0, %middle.block ]

Committed on behalf of @dtemirbulatov

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302988 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-13 13:25:57 +00:00
Craig Topper
f671e9e87b [InstCombine] Prevent InstCombine from triggering an extra iteration if something changed in the initial Worklist creation
Summary:
If the Worklist build causes an IR change this change flag currently factors into the flag for running another iteration of the iteration loop. But only changes during processing should trigger another loop.

This patch captures the worklist creation change flag into the outside the loop flag currently used for DbgDeclares and only sends that flag up to the caller. Rerunning the loop only depends on IC.run() now.

This uses the debug output of InstCombine to determine if one or two iterations run. I couldn't think of a better way to detect it since the second spurious iteration shoudn't make any visible changes. Just wasted computation.

I can do a pre-commit of the test case with the CHECK-NOT as a CHECK if this is an ok way to check this.

This is a subset of D31678 as I'm still not sure how to verify the analysis behavior for that.

Reviewers: davide, majnemer, spatel, chandlerc

Reviewed By: davide

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302982 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-13 06:56:04 +00:00
Xinliang David Li
650f9d4bf5 [PartialInlining] Profile based cost analysis
Implemented frequency based cost/saving analysis
and related options.

The pass is now in a state ready to be turne on
in the pipeline (in follow up).

Differential Revision: http://reviews.llvm.org/D32783


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302967 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-12 23:41:43 +00:00
Craig Topper
d49344495d [KnownBits] Add bit counting methods to KnownBits struct and use them where possible
This patch adds min/max population count, leading/trailing zero/one bit counting methods.

The min methods return answers based on bits that are known without considering unknown bits. The max methods give answers taking into account the largest count that unknown bits could give.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302925 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-12 17:20:30 +00:00
Davide Italiano
343d3f3e44 [NewGVN] Improve debug output a bit. NFCI.
While debugging a predicate info problem, I noticed this was missing
a newline, making the debug output slightly less readable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302908 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-12 15:28:12 +00:00
Davide Italiano
6b14cfa286 [NewGVN] Format an assertion and fix a typo. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302906 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-12 15:25:56 +00:00
Davide Italiano
de15f17e31 [NewGVN] Don't incorrectly reset the memory leader.
This code was missing a check for stores, so we were thinking the
congruency class didn't have any memory members, and reset the
memory leader.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302905 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-12 15:22:45 +00:00
Chandler Carruth
1dfa6e7374 [PM/Unswitch] Teach the new simple loop unswitch to handle loop
invariant PHI inputs and to rewrite PHI nodes during the actual
unswitching.

The checking is quite easy, but rewriting the PHI nodes is somewhat
surprisingly challenging. This should handle both branches and switches.

I think this is now a full featured trivial unswitcher, and more full
featured than the trivial cases in the old pass while still being (IMO)
somewhat simpler in how it works.

Next up is to verify its correctness in more widespread testing, and
then to add non-trivial unswitching.

Thanks to Davide and Sanjoy for the excellent review. There is one
remaining question that I may address in a follow-up patch (see the
review thread for details) but it isn't related to the functionality
specifically.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302867 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-12 02:19:59 +00:00
Adam Nemet
65ad27f81e [SLP] Emit optimization remarks
The approach I followed was to emit the remark after getTreeCost concludes
that SLP is profitable.  I initially tried emitting them after the
vectorizeRootInstruction calls in vectorizeChainsInBlock but I vaguely
remember missing a few cases for example in HorizontalReduction::tryToReduce.

ORE is placed in BoUpSLP so that it's available from everywhere (notably
HorizontalReduction::tryToReduce).

We use the first instruction in the root bundle as the locator for the remark.
In order to get a sense how far the tree is spanning I've include the size of
the tree in the remark.  This is not perfect of course but it gives you at
least a rough idea about the tree.  Then you can follow up with -view-slp-tree
to really see the actual tree.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302811 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-11 17:06:17 +00:00
Ayal Zaks
7a3330e101 [LV] Refactor ILV.vectorize{Loop}() by introducing LVP.executePlan(); NFC
Introduce LoopVectorizationPlanner.executePlan(), replacing ILV.vectorize() and
refactoring ILV.vectorizeLoop(). Method collectDeadInstructions() is moved from
ILV to LVP. These changes facilitate building VPlans and using them to generate
code, following https://reviews.llvm.org/D28975 and its tentative breakdown.

Method ILV.createEmptyLoop() is renamed ILV.createVectorizedLoopSkeleton() to
improve clarity; it's contents remain intact.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302790 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-11 11:36:33 +00:00
Alexander Potapenko
a0d77192f6 [msan] Fix PR32842
It turned out that MSan was incorrectly calculating the shadow for int comparisons: it was done by truncating the result of (Shadow1 OR Shadow2) to i1, effectively rendering all bits except LSB useless.
This approach doesn't work e.g. in the case where the values being compared are even (i.e. have the LSB of the shadow equal to zero).
Instead, if CreateShadowCast() has to cast a bigger int to i1, we replace the truncation with an ICMP to 0.

This patch doesn't affect the code generated for SPEC 2006 binaries, i.e. there's no performance impact.

For the test case reported in PR32842 MSan with the patch generates a slightly more efficient code:

  orq     %rcx, %rax
  jne     .LBB0_6
, instead of:

  orl     %ecx, %eax
  testb   $1, %al
  jne     .LBB0_6




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302787 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-11 11:07:48 +00:00
Serge Guelton
cee7471c11 Remove spurious cast of nullptr. NFC.
Conversion rules allow automatic casting of nullptr to any pointer type.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302780 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-11 08:53:00 +00:00
Sanjay Patel
3ba25d2222 [InstCombine] remove fold that swaps xor/or with constants; NFCI
// (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)

This canonicalization was added at:
https://reviews.llvm.org/rL7264 

By moving xors out/down, we can more easily combine constants. I'm adding
tests that do not change with this patch, so we can verify that those kinds
of transforms are still happening.

This is no-functional-change-intended because there's a later fold:
// (X^C)|Y -> (X|Y)^C iff Y&C == 0
...and demanded-bits appears to guarantee that any fold that would have
hit the fold we're removing here would be caught by that 2nd fold.

Similar reasoning was used in:
https://reviews.llvm.org/rL299384

The larger motivation for removing this code is that it could interfere with 
the fix for PR32706:
https://bugs.llvm.org/show_bug.cgi?id=32706

Ie, we're not checking if the 'xor' is actually a 'not', so we could reverse
a 'not' optimization and cause an infinite loop by altering an 'xor X, -1'. 

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302733 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 21:33:55 +00:00
Davide Italiano
3750feec55 [NewGVN] Introduce a definesNoMemory() helper and use it.
This is nice as is, but it will be used in my next patch to
fix a bug. Suggested by Daniel Berlin.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302714 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 19:57:43 +00:00
Teresa Johnson
63eb7ab316 Ensure non-null ProfileSummaryInfo passed to ModuleSummaryIndex builder
This fixes a ubsan bot failure after r302597, which made getProfileCount
non-static, but ended up invoking it on a null ProfileSummaryInfo object
in some cases from buildModuleSummaryIndex.

Most testing passed because the non-static getProfileCount currently
doesn't access any member variables, but I found this when testing a
follow on patch (D32877) that adds a member variable access.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302705 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 18:52:16 +00:00
Sanjay Patel
0cf1e1c318 [InstCombine] add (ashr (shl i32 X, 31), 31), 1 --> and (not X), 1
This is another step towards favoring 'not' ops over random 'xor' in IR:
https://bugs.llvm.org/show_bug.cgi?id=32706

This transformation may have occurred in longer IR sequences using computeKnownBits,
but that could be much more expensive to calculate.

As the scalar result shows, we do not currently favor 'not' in all cases. The 'not'
created by the transform is transformed again (unnecessarily). Vectors don't have
this problem because vectors are (wrongly) excluded from several other combines.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302659 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 13:56:52 +00:00
Serge Guelton
2490292bed Use explicit false instead of casted nullptr. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302656 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 13:24:17 +00:00
Chandler Carruth
7fa7b1a23a Revert r301950: SpeculativeExecution: Stop using whitelist for costs
This pass doesn't correctly handle testing for when it is legal to hoist
arbitrary instructions. The whitelist happens to make it safe, so before
it is removed the pass's legality checks will need to be enhanced.

Details have been added to the code review thread for the patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302640 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 12:30:07 +00:00
Amara Emerson
0dd30f878b Add a late IR expansion pass for the experimental reduction intrinsics.
This pass uses a new target hook to decide whether or not to expand a particular
intrinsic to the shuffevector sequence.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302631 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 09:42:49 +00:00
Sanjay Patel
4daaa86b34 [InstCombine] add helper function for add X, C folds; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302605 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 00:07:16 +00:00
Easwaran Raman
9051122d57 [ProfileSummary] Make getProfileCount a non-static member function.
This change is required because the notion of count is different for
sample profiling and getProfileCount will need to determine the
underlying profile type.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302597 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-09 23:21:10 +00:00
Peter Collingbourne
851b7e5dc8 FunctionImport: Simplify function llvm::thinLTOInternalizeModule. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302595 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-09 22:43:31 +00:00