Commit Graph

3393 Commits

Author SHA1 Message Date
Tom Stellard 9496ac113a Merging r279980:
------------------------------------------------------------------------
r279980 | david.majnemer | 2016-08-29 10:14:08 -0700 (Mon, 29 Aug 2016) | 7 lines

[SimplifyCFG] Hoisting invalidates metadata

We forgot to remove optimization metadata when performing hosting during
FoldTwoEntryPHINode.

This fixes PR29163.

------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@288063 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-28 21:13:03 +00:00
Hans Wennborg 3aa4a350b4 Merging r279268:
------------------------------------------------------------------------
r279268 | majnemer | 2016-08-19 09:37:40 -0700 (Fri, 19 Aug 2016) | 5 lines

[CloneFunction] Don't remove unrelated nodes from the CGSSC

CGSCC use a WeakVH to track call sites.  RAUW a call within a function
can result in that WeakVH getting confused about whether or not the call
site is still around.
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@279477 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-22 21:23:55 +00:00
Hans Wennborg d2e45b04fc Merging r278571:
------------------------------------------------------------------------
r278571 | rnk | 2016-08-12 15:23:04 -0700 (Fri, 12 Aug 2016) | 6 lines

[Inliner] Don't treat inalloca allocas as static

They aren't static, and moving them to the entry block across something
else will only result in tears.

Root cause of http://crbug.com/636558.
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@278831 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-16 18:06:44 +00:00
Hans Wennborg c39972a9b2 Merging r277691, r277693, and r277773:
------------------------------------------------------------------------
r277691 | majnemer | 2016-08-03 21:24:02 -0700 (Wed, 03 Aug 2016) | 4 lines

Reinstate "[CloneFunction] Don't remove side effecting calls"

This reinstates r277611 + r277614 and reverts r277642.  A cast_or_null
should have been a dyn_cast_or_null.
------------------------------------------------------------------------

------------------------------------------------------------------------
r277693 | majnemer | 2016-08-03 21:47:18 -0700 (Wed, 03 Aug 2016) | 1 line

Forgot the dyn_cast_or_null intended for r277691.
------------------------------------------------------------------------

------------------------------------------------------------------------
r277773 | majnemer | 2016-08-04 14:28:59 -0700 (Thu, 04 Aug 2016) | 6 lines

[CloneFunction] Add a testcase for r277691/r277693

PR28848 had a very nice reduction of the underlying cause of the bug.
Our ValueMap had, in an entry for an Instruction, a ConstantInt.

This is not at all unexpected but should be handled properly.
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@277781 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-04 22:44:36 +00:00
Hans Wennborg fc9c4d6ea9 Merging r276077:
------------------------------------------------------------------------
r276077 | mzolotukhin | 2016-07-19 18:55:27 -0700 (Tue, 19 Jul 2016) | 4 lines

Revert "Revert r275883 and r275891. They seem to cause PR28608."

This reverts commit r276064, and thus reapplies r275891 and r275883 with
a fix for PR28608.
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@276665 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-25 17:45:34 +00:00
George Burgess IV e41f8904d3 [MSSA] Fix PR28632 in the 3.9 branch.
The now-removed assertion was really more for initial debugging; it's
perfectly valid (albeit relatively rare) for `Q.Visited.size()` to be
greater than 1,000. A similar patch hasn't been applied to trunk
because the piece of code this assertion was a part of no longer exists
in trunk.

Fix okayed by Danny, merge to 3.9 okayed by Hans.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@276337 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 21:09:24 +00:00
Michael Zolotukhin bf4114e90b Make processInstruction from LCSSA.cpp externally available.
Summary:
When a pass tries to keep LCSSA form it's often convenient to be able to update
LCSSA for a set of instructions rather than for the entire loop. This patch makes the
processInstruction from LCSSA externally available under a name
formLCSSAForInstruction.

Reviewers: chandlerc, sanjoy, hfinkel

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275613 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-15 21:08:41 +00:00
David Majnemer af8dbbcde0 [AliasAnalysis] Give back AA results for fence instructions
Calling getModRefInfo with a fence resulted in crashes because fences
don't have a memory location.  Add a new predicate to Instruction
called isFenceLike which indicates that the instruction mutates memory
but not any single memory location in particular. In practice, it is a
proxy for the set of instructions which "mayWriteToMemory" but cannot be
used with MemoryLocation::get.

This fixes PR28570.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275581 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-15 17:19:24 +00:00
Andrew Kaylor b9ed6a643a Reverting r275284 due to platform-specific test failures
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275304 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 19:09:16 +00:00
Andrew Kaylor c949e6e642 Fix for Bug 26903, adds support to inline __builtin_mempcpy
Patch by Sunita Marathe

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275284 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 17:25:11 +00:00
Davide Italiano c3bccfa86f [LoopSimplify] Remove a comment which is unlikely to age well.
Chandler pointed out in his review but I forgot to remove before
committing, my bad.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274963 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 03:27:24 +00:00
Davide Italiano fff81b23a8 [PM] Port LoopSimplify to the new pass manager.
While here move simplifyLoop() function to the new header, as
suggested by Chandler in the review.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274959 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 03:03:01 +00:00
Xinliang David Li e042fe59dc Rename LoopAccessAnalysis to LoopAccessLegacyAnalysis /NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274927 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 20:55:26 +00:00
Davide Italiano d0de2d93f5 [PM] Port InstSimplify to the new pass manager.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274796 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-07 21:14:36 +00:00
Sjoerd Meijer 69d2b17af4 Addressing post-commit comments for not rewriting fputs:
moved the optimise for size check inside function optimizeFPuts.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274758 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-07 14:31:19 +00:00
Sjoerd Meijer 5ab922ce5c Code size optimisation: don't rewrite fputs to fwrite when optimising for size
because fwrite requires more arguments and thus extra MOVs are required.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274753 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-07 13:56:23 +00:00
Chad Rosier 705101d800 [MemorySSA] Reinstate the legacy printer and verifier.
Differential Revision: http://reviews.llvm.org/D22058

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274679 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 21:20:47 +00:00
Daniel Berlin dad636ee26 Fix handling of forward unreachable but reverse-reachable blocks in MemorySSA construction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274606 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 05:32:05 +00:00
George Burgess IV a3d4e373c0 [MSSA] Fix typo. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274590 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 00:28:43 +00:00
Xinliang David Li 6adce0835f [PM] refactor LoopAccessInfo code part-2
Differential Revision: http://reviews.llvm.org/D21636




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274334 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-01 05:59:55 +00:00
Michael Kuperstein ce2862caac [PM] Normalize FIXMEs for missing PreserveCFG to have the same wording.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273974 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-28 00:54:12 +00:00
Daniel Berlin 9577f286d4 Factor out buildMemorySSA from getWalker.
NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273901 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-27 18:22:27 +00:00
Benjamin Kramer 36a5f73f45 [CodeExtractor] Merge DEBUG statements in an attempt to fix the msvc
build.

There's a known bug in msvc 2013 that fails to compile do-while loops
inside of ranged for loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273811 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-26 13:39:33 +00:00
Benjamin Kramer 5288df58b7 Apply clang-tidy's modernize-loop-convert to most of lib/Transforms.
Only minor manual fixes. No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273808 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-26 12:28:59 +00:00
David Majnemer 23ee217fe1 Just a small cleanup
No functional change is intended

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273780 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 08:34:38 +00:00
David Majnemer db5173a31d Revert "[SimplifyCFG] Stop inserting calls to llvm.trap for UB"
This reverts commit r273778, it seems to break UBSan :/

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273779 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 08:19:55 +00:00
David Majnemer 46e1183e69 [SimplifyCFG] Stop inserting calls to llvm.trap for UB
SimplifyCFG had logic to insert calls to llvm.trap for two very
particular IR patterns: stores and invokes of undef/null.

While InstCombine canonicalizes certain undefined behavior IR patterns
to stores of undef, phase ordering means that this cannot be relied upon
in general.

There are much better tools than llvm.trap: UBSan and ASan.

N.B. I could be argued into reverting this change if a clear argument as
to why it is important that we synthesize llvm.trap for stores, I'd be
hard pressed to see why it'd be useful for invokes...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273778 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 08:04:19 +00:00
David Majnemer ae15013971 [SimplifyCFG] Replace calls to null/undef with unreachable
Calling null is undefined behavior, a call to undef can be trivially
treated as a call to null.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273776 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 07:37:27 +00:00
Michael Kuperstein 7360cd168a It isn't meaningful for a transform to preserve another transform. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273761 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 00:47:21 +00:00
David Majnemer c1fd19fd0b Reinstate r273711
r273711 was reverted by r273743.  The inliner needs to know about any
call sites in the inlined function.  These were obscured if we replaced
a call to undef with an undef but kept the call around.

This fixes PR28298.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273753 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 00:04:10 +00:00
David Majnemer 0a621f42a4 Silence a -Wsign-compare warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273752 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-25 00:04:06 +00:00
Nico Weber 336eefdaa0 Revert r273711, it caused PR28298.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273743 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-24 22:52:39 +00:00
George Burgess IV 122fe57ae3 [MemorySSA] Move code around a bit. NFC.
This patch moves MSSA's caching walker into MemorySSA, and moves the
actual definition of MSSA's caching walker out of MemorySSA.h. This is
done in preparation for the new walker, which should be out for review
soonish.

Also, this patch removes a field from UpwardsMemoryQuery and has a few
lines of diff from clang-format'ing MemorySSA.cpp.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273723 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-24 21:02:12 +00:00
David Majnemer 7748b9996e SimplifyInstruction does not imply DCE
We cannot remove an instruction with no uses just because
SimplifyInstruction succeeds.  It may have side effects.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273711 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-24 19:34:46 +00:00
David Majnemer 30ef1b33fa Switch more loops to be range-based
This makes the code a little more concise, no functional change is
intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273644 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-24 04:05:21 +00:00
Chuang-Yu Cheng fa7c6a0a04 Teaching SimplifyCFG to recognize the Or-Mask trick that InstCombine uses to
reduce the number of comparisons.

Specifically, InstCombine can turn:
  (i == 5334 || i == 5335)
into:
  ((i | 1) == 5335)

SimplifyCFG was already able to detect the pattern:
  (i == 5334 || i == 5335)
to:
  ((i & -2) == 5334)

This patch supersedes D21315 and resolves PR27555
(https://llvm.org/bugs/show_bug.cgi?id=27555).

Thanks to David and Chandler for the suggestions!

Author: Thomas Jablin (tjablin)
Reviewers: majnemer chandlerc halfdan cycheng

http://reviews.llvm.org/D21397

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273639 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-24 01:59:00 +00:00
Rafael Espindola 117a36f8b1 Delete more dead code.
Found by gcc 6.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273402 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-22 12:44:16 +00:00
Daniel Berlin 11e2958f9b Add MemoryAccess creation and PHI creation APIs to MemorySSA
Reviewers: george.burgess.iv, gberry, hfinkel

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273295 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-21 18:39:20 +00:00
Daniel Berlin 50d58070c0 Rename to be consistent with other type names. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273194 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-20 20:21:33 +00:00
Marcin Koscielnicki ccb3bb979e [sanitizers] Disable target-specific lowering of string functions.
CodeGen has hooks that allow targets to emit specialized code instead
of calls to memcmp, memchr, strcpy, stpcpy, strcmp, strlen, strnlen.
When ASan/MSan/TSan/ESan is in use, this sidesteps its interceptors, resulting
in uninstrumented memory accesses.  To avoid that, make these sanitizers
mark the calls as nobuiltin.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273083 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-18 10:10:37 +00:00
Chuang-Yu Cheng 5e71c1e0a7 Use m_APInt in SimplifyCFG
Switch from m_Constant to m_APInt per David's request. NFC.

Author: Thomas Jablin (tjablin)
Reviewers: majnemer cycheng

http://reviews.llvm.org/D21440

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272977 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-17 00:04:39 +00:00
Evgeniy Stepanov fd0154041b [safestack] Fixup llvm.dbg.value when rewriting unsafe allocas.
When moving unsafe allocas to the unsafe stack, dbg.declare intrinsics are
updated to refer to the new location.

This change does the same to dbg.value intrinsics.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272968 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 22:34:00 +00:00
Igor Laevsky bf43bfa0c0 Revert r272891 "[JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo"
It was causing failures in Profile-i386 and Profile-x86_64 tests.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272912 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 16:25:53 +00:00
Igor Laevsky 5695246406 [JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo
We should update results of the BranchProbabilityInfo after removing block in JumpThreading. Otherwise 
we will get dangling pointer inside BranchProbabilityInfo cache.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272891 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 13:28:25 +00:00
Adam Nemet 08e6f75e04 [LAA] Default getInfo to not speculate symbolic strides. NFC
Soon we won't be passing Strides to getInfo and then we'll have fewer
call sites to update.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272878 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 08:26:56 +00:00
Chuang-Yu Cheng c18d21a34d SimplifyCFG is able to detect the pattern:
(i == 5334 || i == 5335)
to:
    ((i & -2) == 5334)

This transformation has some incorrect side conditions. Specifically, the
transformation is only applied when the right-hand side constant (5334 in
the example) is a power of two not equal and not equal to the negated mask.
These side conditions were added in r258904 to fix PR26323. The correct side
condition is that: ((Constant & Mask) == Constant)[(5334 & -2) == 5334].

It's a little bit hard to see why these transformations are correct and what
the side conditions ought to be. Here is a CVC3 program to verify them for
64-bit values:
    ONE  : BITVECTOR(64) = BVZEROEXTEND(0bin1, 63);
    x    : BITVECTOR(64);
    y    : BITVECTOR(64);
    z    : BITVECTOR(64);
    mask : BITVECTOR(64) = BVSHL(ONE, z);
    QUERY( (y & ~mask = y) =>
           ((x & ~mask = y) <=> (x = y OR x = (y |  mask)))
    );

Please note that each pattern must be a dual implication (<--> or iff). One
directional implication can create spurious matches. If the implication is
only one-way, an unsatisfiable condition on the left side can imply a
satisfiable condition on the right side. Dual implication ensures that
satisfiable conditions are transformed to other satisfiable conditions and
unsatisfiable conditions are transformed to other unsatisfiable conditions.

Here is a concrete example of a unsatisfiable condition on the left
implying a satisfiable condition on the right:
    mask = (1 << z)
    (x & ~mask) == y --> (x == y || x == (y | mask))

Substituting y = 3, z = 0 yields:
    (x & -2) == 3 --> (x == 3 || x == 2)

The version of this code before r258904 had no side-conditions and
incorrectly justified itself in comments through one-directional
implication.

Thanks to Chandler for the suggestion!

Author: Thomas Jablin (tjablin)
Reviewers: chandlerc majnemer hfinkel cycheng

http://reviews.llvm.org/D21417

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272873 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 04:44:25 +00:00
Xinliang David Li ac1a58e7e9 Address review feedbacks of AddDiscriminator change
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272850 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-15 22:20:56 +00:00
Xinliang David Li 438355c7b4 [PM] Port Add discriminator pass to new PM
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272847 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-15 21:51:30 +00:00
Davide Italiano 227b804262 [LoopSimplify] Analyses do not need to be member variables.
In preparation for porting this pass to the new PM.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272818 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-15 18:51:25 +00:00
Geoff Berry dc68eca2c4 [MemorySSA] Set CFGOnly correctly for MemorySSAWrapperPass
Subscribers: mcrosier, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272712 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-14 21:19:40 +00:00