Commit Graph

20352 Commits

Author SHA1 Message Date
Philip Reames 418492e425 [LICM] Extract a helper function for readability [NFC]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339069 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 22:07:37 +00:00
Evandro Menezes f064d04716 [SLC] Fix shrinking of pow()
Properly shrink `pow()` to `powf()` as a binary function and, when no other
simplification applies, do not discard it.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339046 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 19:40:17 +00:00
David Bolvansky 5edce4ca15 [NFC] Fixed unused function warnings
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339021 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 15:09:15 +00:00
David Bolvansky 5b20e129cf Revert unused function fix
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339020 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 15:05:51 +00:00
David Bolvansky 2813b7a46d [NFC] Fixed unused function warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@339019 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 14:42:07 +00:00
Max Kazantsev d9c4e38678 Try to fix buildbot
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338991 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 06:35:21 +00:00
Max Kazantsev a1706269a0 [GuardWidening] Widen guards with conditions of frequently taken dominated branches
If there is a frequently taken branch dominated by a guard, and its condition is available
at the point of the guard, we can widen guard with condition of this branch and convert
the branch into unconditional:

  guard(cond1)
  if (cond2) {
    // taken in 99.9% cases
    // do something
  } else {
    // do something else    
  }

Converts to

  guard(cond1 && cond2)
  // do something

Differential Revision: https://reviews.llvm.org/D49974
Reviewed By: reames


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338988 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 05:49:19 +00:00
David Bolvansky e3fd2cc5fe [NFC] Fixed unused function warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338986 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 04:45:46 +00:00
Hsiangkai Wang cb6242dabb [DebugInfo] Refactor DbgInfoIntrinsic class hierarchy.
In the past, DbgInfoIntrinsic has a strong assumption that these
intrinsics all have variables and expressions attached to them.
However, it is too strong to derive the class for other debug entities.
Now, it has problems for debug labels.

In order to make DbgInfoIntrinsic as a base class for 'debug info', I
create a class for 'variable debug info', DbgVariableIntrinsic.

DbgDeclareInst, DbgAddrIntrinsic, and DbgValueInst will be derived from it.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338984 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-06 03:59:47 +00:00
David Bolvansky 88ab670557 Enrich inline messages
Summary:
This patch improves Inliner to provide causes/reasons for negative inline decisions.
1. It adds one new message field to InlineCost to report causes for Always and Never instances. All Never and Always instantiations must provide a simple message.
2. Several functions that used to return the inlining results as boolean are changed to return InlineResult which carries the cause for negative decision.
3. Changed remark priniting and debug output messages to provide the additional messages and related inline cost.
4. Adjusted tests for changed printing.

Patch by: yrouban (Yevgeny Rouban)


Reviewers: craig.topper, sammccall, sgraenitz, NutshellySima, shchenz, chandlerc, apilipenko, javed.absar, tejohnson, dblaikie, sanjoy, eraman, xbolva00

Reviewed By: tejohnson, xbolva00

Subscribers: xbolva00, llvm-commits, arsenm, mehdi_amini, eraman, haicheng, steven_wu, dexonsmith

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338969 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-05 14:53:08 +00:00
Chijun Sima 30fa583f84 [TailCallElim] Preserve DT and PDT
Summary:
Previously, in the NewPM pipeline, TailCallElim recalculates the DomTree when it modifies any instruction in the Function.
For example,
```
CallInst *CI = dyn_cast<CallInst>(&I);
...
CI->setTailCall();
Modified = true;
...
if (!Modified || ...)
  return PreservedAnalyses::all();
```
After applying this patch, the DomTree only recalculates if needed (plus an extra insertEdge() + an extra deleteEdge() call).

When optimizing SQLite with `-passes="default<O3>"` pipeline of the newPM, the number of DomTree recalculation decreases by 6.2%, the number of nodes visited by DFS decreases by 2.9%. The time used by DomTree will decrease approximately 1%~2.5% after applying the patch.
 
Statistics:
```
Before the patch:
 23010 dom-tree-stats               - Number of DomTree recalculations
489264 dom-tree-stats               - Number of nodes visited by DFS -- DomTree
After the patch:
 21581 dom-tree-stats               - Number of DomTree recalculations
475088 dom-tree-stats               - Number of nodes visited by DFS -- DomTree
```

Reviewers: kuhar, dmgreen, brzycki, grosser, davide

Reviewed By: kuhar, brzycki

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338954 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-04 08:13:47 +00:00
Chijun Sima 134b06ddd0 [ADCE] Remove the need of DomTree
Summary: ADCE doesn't need to query domtree.

Reviewers: kuhar, brzycki, dmgreen, davide, grosser

Reviewed By: kuhar

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338950 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-04 02:50:12 +00:00
Anastasis Grammenos f8fba9029f [TRE][DebugInfo] Preserve Debug Location in new branch instruction
There are two branch instructions created
so the new test covers them both.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338917 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 20:27:13 +00:00
Evandro Menezes 8ef7ef81f7 [SLC] Refactor shrinking of functions (NFC)
Merge the helper functions for shrinking unary and binary functions into a
single one, while keeping all their functionality.  Otherwise, NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338905 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 17:50:16 +00:00
Joel Galenson 1a17324d81 Fix crash in bounds checking.
In r337830 I added SCEV checks to enable us to insert fewer bounds checks.  Unfortunately, this sometimes crashes when multiple bounds checks are added due to SCEV caching issues.  This patch splits the bounds checking pass into two phases, one that computes all the conditions (using SCEV checks) and the other that adds the new instructions.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338902 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 17:12:23 +00:00
Graham Yiu 5e1d437473 [Partial Inlining] Fix small bug in detecting if we did something
- It's possible for 'Changed' to return as false even if we did
  partial inline something.  Fixed to accumulate return values

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338896 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 14:42:53 +00:00
Chijun Sima 1a16c79be0 [Dominators] Make RemoveUnreachableBlocks return false if the BasicBlock is already awaiting deletion
Summary:
Previously, `removeUnreachableBlocks` still returns true (which indicates the CFG is changed) even when all the unreachable blocks found is awaiting deletion in the DDT class.
This makes code pattern like
```
// Code modified from lib/Transforms/Scalar/SimplifyCFGPass.cpp 
bool EverChanged = removeUnreachableBlocks(F, nullptr, DDT);
...
do {
    EverChanged = someMightHappenModifications();
    EverChanged |= removeUnreachableBlocks(F, nullptr, DDT);
  } while (EverChanged);
```
become a dead loop.
Fix this by detecting whether a BasicBlock is already awaiting deletion.

Reviewers: kuhar, brzycki, dmgreen, grosser, davide

Reviewed By: kuhar, brzycki

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338882 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 12:45:29 +00:00
Max Kazantsev 8d89c08c5b [NFC] Add missing comment
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338848 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 10:41:51 +00:00
Max Kazantsev 00ccfbc588 [NFC] Move some methods into static functions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338843 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 10:16:40 +00:00
Chijun Sima 18e311ebbb [Dominators] Convert existing passes and utils to use the DomTreeUpdater class
Summary:
This patch is the second in a series of patches related to the [[ http://lists.llvm.org/pipermail/llvm-dev/2018-June/123883.html | RFC - A new dominator tree updater for LLVM ]].

It converts passes (e.g. adce/jump-threading) and various functions which currently accept DDT in local.cpp and BasicBlockUtils.cpp to use the new DomTreeUpdater class.
These converted functions in utils can accept DomTreeUpdater with either UpdateStrategy and can deal with both DT and PDT held by the DomTreeUpdater.

Reviewers: brzycki, kuhar, dmgreen, grosser, davide

Reviewed By: brzycki

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338814 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 05:08:17 +00:00
Philip Reames fb8aeadb5e [LICM] Remove unneccessary safety check to increase sinking effectiveness
This one requires a bit of explaination.  It's not every day you simply delete code to implement an optimization.  :)

The transform in question is sinking an instruction from a loop to the uses in loop exiting blocks.  We know (from LCSSA) that all of the uses outside the loop must be phi nodes, and after predecessor splitting, we know all phi users must have a single operand.  Since the use must be strictly dominated by the def, we know from the definition of dominance/ssa that the exit block must execute along a (non-strict) subset of paths which reach the def.  As a result, duplicating a potentially faulting instruction can not *introduce* a fault that didn't previously exist in the program.  

The full story is that this patch builds on "rL338671: [LICM] Factor out fault legality from canHoistOrSinkInst [NFC]" which pulled this logic out of a common helper routine.  As best I can tell, this check was originally added to the helper function for hoisting legality, later an incorrect fastpath for loads/calls was added, and then the bug was fixed by duplicating the fault safety check in the hoist path.  This left the redundant check in the common code to pessimize sinking for no reason.  I split it out in an NFC, and am not removing the unneccessary check.  I wanted there to be something easy to revert in case I missed something.

Reviewed by: Anna Thomas (in person)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338794 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-03 00:21:56 +00:00
Evandro Menezes 00c9045712 [SLC] Refactor simplification of pow() (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338730 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 15:43:57 +00:00
Sanjay Patel e1c9b76cd3 [InstSimplify] move minnum/maxnum with undef fold from instcombine
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338719 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 14:33:40 +00:00
David Green f166ea7ca2 [UnJ] Add debug messages for why loops are not unrolled. NFC
Adds some cleaned up debug messages from back when I was writing this.
Hopefully useful to others (and myself) as to why unroll and jam is not
transforming as expected.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338676 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 07:30:53 +00:00
Philip Reames b41c2e390d [LICM] Factor out fault legality from canHoistOrSinkInst [NFC]
This method has three callers, each of which wanted distinct handling:
1) Sinking into a loop is moving an instruction known to execute before a loop into the loop.  We don't need to worry about introducing a fault at all in this case.
2) Hoisting from a loop into a preheader already duplicated the check in the caller.
3) Sinking from the loop into an exit block was the only true user of the code within the routine.  For the moment, this has just been lifted into the caller, but up next is examining the logic more carefully.  Whitelisting of loads and calls - while consistent with the previous code - is rather suspicious.  Either way, a behavior change is worthy of it's own patch.  



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338671 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 04:08:04 +00:00
Philip Reames 4f8fe65360 [LICM] hoisting/sinking legality - bail early for unsupported instructions
Originally, this was part of a larger refactoring I'd planned, but had to abandoned.  I figured the minor improvement in readability was worthwhile.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338663 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-02 00:54:14 +00:00
George Burgess IV baed6422b2 Reland r338431: "Add DebugCounters to DivRemPairs"
(Previously reverted in r338442)

I'm told that the breakage came from us using an x86 triple on configs
that didn't have x86 enabled. This is remedied by moving the
debugcounter test to an x86 directory (where there's also a
opt-bisect-isel.ll test for similar reasons).

I can't repro the reverse-iteration failure mentioned in the revert with
this patch, so I assume that a misconfiguration on my end is what caused
that.

Original commit message:

    Add DebugCounters to DivRemPairs

    For people who don't use DebugCounters, NFCI.

    Patch by Zhizhou Yang!

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338653 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 23:14:14 +00:00
Sanjay Patel 5ea9eaae86 [InstSimplify] move minnum/maxnum with same arg fold from instcombine
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338652 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 23:05:55 +00:00
John Baldwin 0318cbc235 [ASAN] Use the correct shadow offset for ASAN on FreeBSD/mips64.
Reviewed By: atanasyan

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338650 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 22:51:13 +00:00
Johannes Doerfert dc21a6f328 [NFC][FunctionAttrs] Remove duplication in old/new PM pipeline
This patch just extract code into a separate function to remove some
duplication between the old and new pass manager pipeline. Due to the
different CGSCC iterators used, not all code duplication was eliminated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338585 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 16:37:51 +00:00
David Bolvansky 8e70a95cbc Revert "Enrich inline messages", tests fail
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338496 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 08:02:40 +00:00
David Bolvansky 788bdbbd5c Enrich inline messages
Summary:
This patch improves Inliner to provide causes/reasons for negative inline decisions.
1. It adds one new message field to InlineCost to report causes for Always and Never instances. All Never and Always instantiations must provide a simple message.
2. Several functions that used to return the inlining results as boolean are changed to return InlineResult which carries the cause for negative decision.
3. Changed remark priniting and debug output messages to provide the additional messages and related inline cost.
4. Adjusted tests for changed printing.

Patch by: yrouban (Yevgeny Rouban)


Reviewers: craig.topper, sammccall, sgraenitz, NutshellySima, shchenz, chandlerc, apilipenko, javed.absar, tejohnson, dblaikie, sanjoy, eraman, xbolva00

Reviewed By: tejohnson, xbolva00

Subscribers: xbolva00, llvm-commits, arsenm, mehdi_amini, eraman, haicheng, steven_wu, dexonsmith

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338494 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-01 07:37:16 +00:00
Evandro Menezes 1c247de5ee [SLC] Refactor the simplication of pow() (NFC)
Reword comments and minor code reformatting.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338446 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 22:11:02 +00:00
George Burgess IV 0da0037233 Revert r338431: "Add DebugCounters to DivRemPairs"
This reverts r338431; the test it added is making buildbots unhappy.
Locally, I can repro the failure on reverse-iteration builds.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338442 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 21:18:44 +00:00
George Burgess IV 2f227c480a Add DebugCounters to DivRemPairs
For people who don't use DebugCounters, NFCI.

Patch by Zhizhou Yang!

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338431 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 20:07:46 +00:00
Ewan Crawford d9904414c2 Fix InstCombine address space assert
Workaround bug where the InstCombine pass was asserting on the IR added in lit
test, where we have a bitcast instruction after a GEP from an addrspace cast.

The second bitcast in the test was getting combined into
`bitcast <16 x i32>* %0 to <16 x i32> addrspace(3)*`, which looks like it should
be an addrspace cast instruction instead. Otherwise if control flow is allowed
to continue as it is now we create a GEP instruction
`<badref> = getelementptr inbounds <16 x i32>, <16 x i32>* %0, i32 0`. However
because the type of this instruction doesn't match the address space we hit an
assert when replacing the bitcast with that GEP.

```
void llvm::Value::doRAUW(llvm::Value*, bool): Assertion `New->getType() == getType() && "replaceAllUses of value with new value of different type!"' failed.
```

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338395 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 15:53:03 +00:00
Anastasis Grammenos c22c96db49 [DebugInfo][LCSSA] Preserve debug location in lcssa phis
Summary:
When inserting lcssa Phi Nodes in the exit block
mak sure to preserve the original instructions DL.

Reviewers: vsk

Subscribers: JDevlieghere, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338391 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 14:54:52 +00:00
David Bolvansky 757fc2f38e Revert Enrich inline messages
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338389 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 14:47:22 +00:00
David Bolvansky 99862d39d7 Enrich inline messages
Summary:
This patch improves Inliner to provide causes/reasons for negative inline decisions.
1. It adds one new message field to InlineCost to report causes for Always and Never instances. All Never and Always instantiations must provide a simple message.
2. Several functions that used to return the inlining results as boolean are changed to return InlineResult which carries the cause for negative decision.
3. Changed remark priniting and debug output messages to provide the additional messages and related inline cost.
4. Adjusted tests for changed printing.

Patch by: yrouban (Yevgeny Rouban)


Reviewers: craig.topper, sammccall, sgraenitz, NutshellySima, shchenz, chandlerc, apilipenko, javed.absar, tejohnson, dblaikie, sanjoy, eraman, xbolva00

Reviewed By: tejohnson, xbolva00

Subscribers: xbolva00, llvm-commits, arsenm, mehdi_amini, eraman, haicheng, steven_wu, dexonsmith

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338387 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 14:25:24 +00:00
Alexey Bataev 1ae9ed698a [SLP] Fix PR38339: Instruction does not dominate all uses!
Summary:
If the ExtractElement instructions can be optimized out during the
vectorization and we need to reshuffle the parent vector, this
ShuffleInstruction may be inserted in the wrong place causing compiler
to produce incorrect code.

Reviewers: spatel, RKSimon, mkuper, hfinkel, javed.absar

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338380 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 14:02:43 +00:00
Sanjay Patel 44442fbe1a [InstCombine] simplify code for A & (A ^ B) --> A & ~B
This fold was written in an odd way and tried to avoid
an endless loop by bailing out on all constants instead
of the supposedly problematic case of -1. But (X & -1) 
should always be simplified before we reach here, so I'm
not sure how that is a problem.

There were no tests for the commuted patterns, so I added
those at rL338364.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338367 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 13:00:03 +00:00
Max Kazantsev 8b661d1f71 [NFC] Collect statistics in GuardWidening
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338348 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 04:37:11 +00:00
Diego Caballero b2970fad9b [VPlan] Introduce VPLoopInfo analysis.
The patch introduces loop analysis (VPLoopInfo/VPLoop) for VPBlockBases.
This analysis will be necessary to perform some H-CFG transformations and
detect and introduce regions representing a loop in the H-CFG.

Reviewers: fhahn, rengolin, mkuper, hfinkel, mssimpso

Reviewed By: fhahn 

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338346 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-31 01:57:29 +00:00
Diego Caballero 00f1a051ef [VPlan] Introduce VPlan-based dominator analysis.
The patch introduces dominator analysis for VPBlockBases and extend
VPlan's GraphTraits specialization with the required interfaces. Dominator
analysis will be necessary to perform some H-CFG transformations and
to introduce VPLoopInfo (LoopInfo analysis on top of the VPlan representation).

Reviewers: fhahn, rengolin, mkuper, hfinkel, mssimpso

Reviewed By: fhahn

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338310 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 21:33:31 +00:00
David Bolvansky a5603d18b0 [InstCombine] Fold Select with binary op
Summary:
Fold
  %A = icmp eq i8 %x, 0
  %B = xor i8 %x, %z
  %C = select i1 %A, i8 %B, i8 %y
To
  %C = select i1 %A, i8 %z, i8 %y

Fixes https://bugs.llvm.org/show_bug.cgi?id=38345
Proof: https://rise4fun.com/Alive/43J

Reviewers: lebedev.ri, spatel

Reviewed By: spatel

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338300 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 20:38:53 +00:00
Vlad Tsyrklevich aec199b9d7 Revert "[GVNHoist] Re-enable GVNHoist by default"
This reverts commit r338240 because it was causing OOMs on the UBSan
buildbot when building clang/lib/Sema/SemaChecking.cpp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338297 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 20:07:33 +00:00
Fangrui Song af7b1832a0 Remove trailing space
sed -Ei 's/[[:space:]]+$//' include/**/*.{def,h,td} lib/**/*.{cpp,h}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338293 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 19:41:25 +00:00
Evandro Menezes fb73e7ba91 [SLC] Refactor the simplication of pow() (NFC)
Use more meaningful variable names.  Mostly NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338266 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 16:20:04 +00:00
Alexandros Lamprineas 7ca84ad7ea [GVNHoist] Re-enable GVNHoist by default
My initial motivation for this came from https://reviews.llvm.org/D48122,
where it was pointed out that my change didn't fit well in SimplifyCFG and
therefore using GVNHoist was a better way to go. GVNHoist has been disabled
for a while as there was a list of bugs related to it.

I have fixed the following bugs:

https://bugs.llvm.org/show_bug.cgi?id=37808 -> https://reviews.llvm.org/D48372 (rL337149)
https://bugs.llvm.org/show_bug.cgi?id=36787 -> https://reviews.llvm.org/D49555 (rL337674)
https://bugs.llvm.org/show_bug.cgi?id=37445 -> https://reviews.llvm.org/D49425 (rL337680)

The next two bugs no longer occur, and it's unclear which commit fixed them:

https://bugs.llvm.org/show_bug.cgi?id=36635
https://bugs.llvm.org/show_bug.cgi?id=37791

I investigated this one and proved to be unrelated to GVNHoist, but a genuine bug in NewGvn:

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

To convince myself GVNHoist is in a good state I made a successful bootstrap build of LLVM.
Merging this change now in order to make it to the LLVM 7.0.0 branch.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338240 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 10:50:18 +00:00
Max Kazantsev ef9e348db2 [NFC] Prepare GuardWidening for widening of cond branches
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338229 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-30 07:07:32 +00:00