OSDN Git Service
Ashutosh Nema [Wed, 19 Aug 2015 05:40:42 +0000 (05:40 +0000)]
Exposed findDefsUsedOutsideOfLoop as a loop utility function
Exposed findDefsUsedOutsideOfLoop as a loop utility function by moving
it from LoopDistribute to LoopUtils.
Reviewed By: anemet
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245416
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 19 Aug 2015 03:02:12 +0000 (03:02 +0000)]
[LPM] Teach the legacy pass manager to support *using* an analysis
without *requiring* it.
This allows a pass indicate that it will use an analysis if available
(through getAnalysisIfAvailable). When the pass manager knows this, it
will refrain from deleting that analysis if it can. Naturally, it will
still get invalidated at the correct time. These passes are not
considered when scheduling the pass pipeline, so typically they will
require manual scheduling, but this may also allow passes with
getAnalysisIfAvailable to find the analysis more often if nothing after
them requires that analysis and it wasn't invalidated.
I don't have a particular use case with the current passes, but with my
new structure for alias analyses, this will be very useful. We want to
allow people to customize the set of AAs available by scheduling
additional passes. These's aren't ever *required* for obvious reasons.
So we need some way to mark in the legacy pass manager that they will
still be used if available.
This is essentially how analysis groups already work. But this makes the
feature generally available and more explicit. It should allow the AA
change to not impact how people trigger a custom alias analysis being
available at a certain point in compilation.
Differential Revision: http://reviews.llvm.org/D12114
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245409
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 19 Aug 2015 02:56:36 +0000 (02:56 +0000)]
Fix how DependenceAnalysis calls delinearization
Fix how DependenceAnalysis calls delinearization, mirroring what is done in
Delinearization.cpp (mostly by making sure to call getSCEVAtScope before
delinearizing, and by removing the unnecessary 'Pairs == 1' check).
Patch by Vaivaswatha Nagaraj!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245408
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Wed, 19 Aug 2015 02:15:13 +0000 (02:15 +0000)]
Revert "Fix PR24469 resulting from r245025 and re-enable dead store elimination across basicblocks."
This is causing bootstrap problems, e.g.: http://bb.pgr.jp/builders/clang-3stage-i686-linux/builds/2960
This reverts r245195.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245402
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 19 Aug 2015 01:51:51 +0000 (01:51 +0000)]
Make ScalarEvolution::isKnownPredicate a little smarter
Here we make ScalarEvolution::isKnownPredicate, indirectly, a little smarter.
Given some relational comparison operator OP, and two AddRec SCEVs, {I,+,S} OP
{J,+,T}, we can reduce this to the comparison I OP J when S == T, both AddRecs
are for the same loop, and both are known not to wrap.
As it turns out, because of the way that backedge-guard expressions can be
leveraged when computing known predicates, this allows indvars to simplify the
if-statement comparison in this loop:
void foo (int *a, int *b, int n) {
for (int i = 0; i < n; ++i) {
if (i > n)
a[i] = b[i] + 1;
}
}
which, somewhat surprisingly, we were not previously optimizing away.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245400
91177308-0d34-0410-b5e6-
96231b3b80d8
Chih-Hung Hsieh [Wed, 19 Aug 2015 01:44:51 +0000 (01:44 +0000)]
Split ARM and AArch64 emutls.ll test
Differential Revision: http://reviews.llvm.org/D12127
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245399
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Wed, 19 Aug 2015 00:13:25 +0000 (00:13 +0000)]
MIR Serialization: Serialize MMI's variable debug information.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245396
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Wed, 19 Aug 2015 00:08:26 +0000 (00:08 +0000)]
[BasicAA] Add a test for PR24468 to be sure we won't regress
when we finally get the GEP aliasing right.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245395
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Wed, 19 Aug 2015 00:07:20 +0000 (00:07 +0000)]
[BasicAA] Revert r221876 because it can produce incorrect aliasing
information: see PR24468.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245394
91177308-0d34-0410-b5e6-
96231b3b80d8
Steve King [Tue, 18 Aug 2015 23:02:41 +0000 (23:02 +0000)]
Fix backward operands in call to isTruncateFree() and improve comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245385
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Tue, 18 Aug 2015 22:57:36 +0000 (22:57 +0000)]
MIR Parser: Return true on error when parsing standalone registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245384
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Tue, 18 Aug 2015 22:52:15 +0000 (22:52 +0000)]
MIR Serialization: Serialize the operand's bit mask target flags.
This commit adds support for bit mask target flag serialization to the MIR
printer and the MIR parser. It also adds support for the machine operand's
target flag serialization to the AArch64 target.
Reviewers: Duncan P. N. Exon Smith
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245383
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 18 Aug 2015 22:48:12 +0000 (22:48 +0000)]
use TLI.allowsMemoryAccess() to check if memory accesses are fast; NFCI
This consolidates use of isUnalignedMem32Slow() in one place.
There is a slight change in logic although I'm not sure that it would ever
come up in the real world: we were assuming that an alignment of the type
size is always fast; now, we actually check the data layout to confirm that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245382
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Tue, 18 Aug 2015 22:41:58 +0000 (22:41 +0000)]
Fix three typos in comments; "easilly" -> "easily".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245379
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 18 Aug 2015 22:31:24 +0000 (22:31 +0000)]
Support: Clean up TSan annotations.
Remove support for Valgrind-based TSan, which hasn't been maintained for a
few years. We now use the TSan annotations only if LLVM is compiled with
-fsanitize=thread. We no longer need the weak function definitions as we
are guaranteed that our program is linked directly with the TSan runtime.
Differential Revision: http://reviews.llvm.org/D12121
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245374
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Tue, 18 Aug 2015 22:26:26 +0000 (22:26 +0000)]
MIR Serialization: Serialize the frame information's stack protector index.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245372
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Tue, 18 Aug 2015 22:18:52 +0000 (22:18 +0000)]
MIR Parser: Extract the code that parses stack object references into a new
method.
This commit extracts the code that parses the stack object references into a
new method named 'parseStackFrameIndex', so that it can be reused when
parsing standalone stack object references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245370
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 18 Aug 2015 22:18:22 +0000 (22:18 +0000)]
[InstSimplify] Remove unused variable
No functionality change is intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245369
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 18 Aug 2015 22:07:25 +0000 (22:07 +0000)]
[InstSimplify] Don't assume getAggregateElement will succeed
It isn't always possible to get a value from getAggregateElement.
This fixes PR24488.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245365
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 18 Aug 2015 22:07:20 +0000 (22:07 +0000)]
[VectorUtils] Replace 'llvm::' qualification with 'using llvm'
No funcitonal change is intended, this just makes the file look more
like the rest of LLVM.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245364
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Tue, 18 Aug 2015 21:31:46 +0000 (21:31 +0000)]
Load/store instructions for floating points with address space require SparcV9.
To properly handle this, define the *a instructions as separate
instruction classes by refactoring the LoadA and StoreA multiclasses.
Move the instruction tests into the sparcv9 file to test the difference.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245360
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 18 Aug 2015 21:21:35 +0000 (21:21 +0000)]
[X86] Refreshed sign extension tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245358
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Tue, 18 Aug 2015 21:10:17 +0000 (21:10 +0000)]
Release script: correctly symlink clang-tools-extra into the build (PR22765)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245355
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 18 Aug 2015 20:51:15 +0000 (20:51 +0000)]
[X86][AVX] Added shuffle concatenation tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245351
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Tue, 18 Aug 2015 20:48:36 +0000 (20:48 +0000)]
DAGCombiner: Improve DAGCombiner select normalization
The current code normalizes select(C0, x, select(C1, x, y)) towards
select(C0|C1, x, y) if the targets prefers that form. This patch adds an
additional rule that if the select(C1, x, y) part already exists in the
function then we want to normalize into the other direction because the
effects of reusing the existing value are bigger than transforming into
the target preferred form.
This addresses regressions following r238793, see also:
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-
20150727/290272.html
Differential Revision: http://reviews.llvm.org/D11616
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245350
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Tue, 18 Aug 2015 20:48:29 +0000 (20:48 +0000)]
DAGCombiner: Optimize SELECTs first before turning them into SELECT_CC
This is part of http://reviews.llvm.org/D11616 - I just decided to split
this up into a separate commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245349
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 18 Aug 2015 20:46:48 +0000 (20:46 +0000)]
Updated constants to give more useful min/max constant folding tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245348
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 18 Aug 2015 20:28:40 +0000 (20:28 +0000)]
[PM/AA] Add using declarations to avoid hiding virtual overloads.
Note that this actually has no functional change -- we never call these
methods using the derived type. But it is still cleaner and fixes a GCC
warning.
Spotted by Dave in code review and the warning spotted by Joerg on IRC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245341
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 18 Aug 2015 19:07:12 +0000 (19:07 +0000)]
[WinEH] Calculate state numbers for the new EH representation
State numbers are calculated by performing a walk from the innermost
funclet to the outermost funclet. Rudimentary support for the new EH
constructs has been added to the assembly printer, just enough to test
the new machinery.
Differential Revision: http://reviews.llvm.org/D12098
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245331
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Tue, 18 Aug 2015 18:54:27 +0000 (18:54 +0000)]
MachineRegisterInfo: Introduce isPhysRegUsed()
This method checks whether a physical regiser or any of its aliases are
used in the function.
Using this function in SIRegisterInfo::findUnusedReg() should also fix
this reported failure:
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-
20150803/292143.html
http://reviews.llvm.org/rL242173#inline-533
The report doesn't come with a testcase and I don't know enough about
AMDGPU to create one myself.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245329
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 18 Aug 2015 18:41:53 +0000 (18:41 +0000)]
[LPM] Cleanup some loops to be range based for loops before hacking on
this code. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245327
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 18 Aug 2015 18:18:37 +0000 (18:18 +0000)]
[LPM] Group the addPreserved template with the non-template variants,
NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245324
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Tue, 18 Aug 2015 18:11:06 +0000 (18:11 +0000)]
[Kaleidoscope] Start C++11'ifying the kaleidoscope tutorials.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245322
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 18 Aug 2015 17:51:53 +0000 (17:51 +0000)]
[PM/AA] Remove the last relics of the separate IPA library from LLVM,
folding the code into the main Analysis library.
There already wasn't much of a distinction between Analysis and IPA.
A number of the passes in Analysis are actually IPA passes, and there
doesn't seem to be any advantage to separating them.
Moreover, it makes it hard to have interactions between analyses that
are both local and interprocedural. In trying to make the Alias Analysis
infrastructure work with the new pass manager, it becomes particularly
awkward to navigate this split.
I've tried to find all the places where we referenced this, but I may
have missed some. I have also adjusted the C API to continue to be
equivalently functional after this change.
Differential Revision: http://reviews.llvm.org/D12075
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245318
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Tue, 18 Aug 2015 17:17:13 +0000 (17:17 +0000)]
MIR Parser: Implicit register verifier should accept unexpected implicit
subregister operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245315
91177308-0d34-0410-b5e6-
96231b3b80d8
Bruno Cardoso Lopes [Tue, 18 Aug 2015 16:54:36 +0000 (16:54 +0000)]
[LVI] Use a SmallDenseMap instead of std::map for ValueCacheEntryTy
Historically there seems to be some resistance regarding the change to DenseMap
(r147980). However, I couldn't find cases of iterator invalidation for
ValueCacheEntryTy, but only for ValueCache, which I left untouched.
This reduces 20s on an internal testcase. Follow up from r245309.
Differential Revision: http://reviews.llvm.org/D11651
rdar://problem/
21320066
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245314
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 18 Aug 2015 16:44:23 +0000 (16:44 +0000)]
use minSize wrapper; NFCI
These were missed when other uses were switched over:
http://llvm.org/viewvc/llvm-project?view=revision&revision=243994
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245311
91177308-0d34-0410-b5e6-
96231b3b80d8
Bruno Cardoso Lopes [Tue, 18 Aug 2015 16:34:27 +0000 (16:34 +0000)]
[LVI] Improve LazyValueInfo compile time performance
Changes in LoopUnroll in the past six months exposed scalability
issues in LazyValueInfo when used from JumpThreading. One internal test
that used to take 20s under -O2 now takes 6min.
This commit change the OverDefinedCache from
DenseSet<std::pair<AssertingVH<BasicBlock>, Value*>> to
DenseMap<AssertingVH<BasicBlock>, SmallPtrSet<Value *, 4>>
and reduces compile time down to 1m40s.
Differential Revision: http://reviews.llvm.org/D11651
rdar://problem/
21320066
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245309
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Tue, 18 Aug 2015 16:20:03 +0000 (16:20 +0000)]
[AArch64] Simplify the logic for computing in bounds offset. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245307
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 18 Aug 2015 16:18:09 +0000 (16:18 +0000)]
[mips] Expand JAL instructions when PIC is enabled.
Summary: This is the correct way to handle JAL instructions when PIC is enabled.
Patch by Toma Tabacu
Reviewers: seanbruno, tomatabacu
Subscribers: brooks, seanbruno, emaste, llvm-commits
Differential Revision: http://reviews.llvm.org/D6231
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245305
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Tue, 18 Aug 2015 16:05:13 +0000 (16:05 +0000)]
[MC] Convert another bunch of tests from macho-dump to llvm-readobj.
This is (almost) everything under MC/MachO/ARM. There are still some
cases missing, because llvm-readobj doesn't (yet) support some features,
that macho-dump provides. I plan to reduce the gap between them shortly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245302
91177308-0d34-0410-b5e6-
96231b3b80d8
Zoran Jovanovic [Tue, 18 Aug 2015 14:40:43 +0000 (14:40 +0000)]
[mips][microMIPS] Implement DDIV, DMOD, DDIVU and DMODU instructions
Differential Revision: http://reviews.llvm.org/D10953
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245297
91177308-0d34-0410-b5e6-
96231b3b80d8
Zoran Jovanovic [Tue, 18 Aug 2015 12:53:08 +0000 (12:53 +0000)]
[mips][microMIPS] Implement SW and SWE instructions
Differential Revision: http://reviews.llvm.org/D10869
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245293
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 18 Aug 2015 12:33:54 +0000 (12:33 +0000)]
[mips] Make the MipsAsmParser capable of knowing whether PIC mode is enabled or not.
Summary:
This information is needed to decide whether we do the PIC-only JAL expansions or not. It's also needed for an upcoming patch which implements the .cprestore assembler directive (which can only be used effectively in PIC mode).
By making this information available to the MipsAsmParser, we will know when to insert the instructions mandated by the .cprestore assembler directive and we will be able to give some useful warnings when we encounter a potential misuse of this directive.
Patch by Toma Tabacu
Reviewers: dsanders, seanbruno
Subscribers: brooks, seanbruno, rafael, llvm-commits
Differential Revision: http://reviews.llvm.org/D5626
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245291
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kruse [Tue, 18 Aug 2015 12:17:37 +0000 (12:17 +0000)]
[Support] On Windows, generate PDF files for graphs and open with associated viewer
Summary: Windows system rarely have good PostScript viewers installed, but PDF viewers are common. So for viewing graphs, generate PDF files and open with the associated PDF viewer using cmd.exe's start command.
Reviewers: Bigcheese, aaron.ballman
Subscribers: aaron.ballman, JakeVanAdrighem, dwiberg, llvm-commits
Differential Revision: http://reviews.llvm.org/D11877
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245290
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kruse [Tue, 18 Aug 2015 12:13:57 +0000 (12:13 +0000)]
[Support] Always wait for GraphViz before opening the viewer
Summary:
When calling DisplayGraph and a PS viewer is chosen, two programs are executed: The GraphViz generator and the PostScript viewer. Always for the generator to finish to ensure that the .ps file is written before opening the viewer for that file. DisplayGraph's wait parameter refers to whether to wait until the user closes the viewer.
This happened on Windows and if none of the options to open the .dot file directly applies, also on Linux.
Reviewers: Bigcheese, chandlerc, aaron.ballman
Subscribers: dwiberg, aaron.ballman, llvm-commits
Differential Revision: http://reviews.llvm.org/D11876
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245289
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 18 Aug 2015 09:55:57 +0000 (09:55 +0000)]
[mips] Correct -Woverflow warning in r245208 without changing signedness of the constant.
This was supposed to have been committed as part of r245208
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245285
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 18 Aug 2015 09:02:51 +0000 (09:02 +0000)]
Fixed max/min typo in test names
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245278
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 18 Aug 2015 08:52:43 +0000 (08:52 +0000)]
[X86][SSE} Added constant SMAX/SMIN/UMAX/UMIN tests
Constant folding patch to follow soon
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245276
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 18 Aug 2015 08:37:09 +0000 (08:37 +0000)]
[X86][SSE] Added extra vector truncation tests.
Including cases for PR14866
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245274
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Tue, 18 Aug 2015 07:59:09 +0000 (07:59 +0000)]
Add unit test for isLayoutIdentical(empty, empty).
It was previously asserting in Visual C++ debug mode on a null
iterator passed to std::equal.
Test by Hans Wennborg!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245270
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Bogner [Tue, 18 Aug 2015 07:00:34 +0000 (07:00 +0000)]
Revert "Constant propagation after hiting llvm.assume"
This was also failing bootstrap:
http://lab.llvm.org:8080/green/job/clang-stage2-configure-Rlto_build
This reverts r245265.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245269
91177308-0d34-0410-b5e6-
96231b3b80d8
Piotr Padlewski [Tue, 18 Aug 2015 03:55:30 +0000 (03:55 +0000)]
Constant propagation after hiting llvm.assume
After hitting @llvm.assume(X) we can:
- propagate equality that X == true
- if X is icmp/fcmp (with eq operation), and one of operand
is constant we can change all variables with constants in the same BasicBlock
http://reviews.llvm.org/D11918
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245265
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 17 Aug 2015 23:24:17 +0000 (23:24 +0000)]
Doxygen: add build option to use svg instead of png files for graphs
Differential Revision: http://reviews.llvm.org/D11994
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245256
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Mon, 17 Aug 2015 22:46:26 +0000 (22:46 +0000)]
Add an exposed variable for which c++ compiler we're using for our
build.
Patch by Chris Bieneman!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245255
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 17 Aug 2015 22:37:56 +0000 (22:37 +0000)]
[WebAssembly] Don't default to ELF in the triple.
WebAssembly doesn't yet have a specified binary format, and it may not
end up being ELF, so we don't want the Triple class defaulting to ELF
for it at this time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245254
91177308-0d34-0410-b5e6-
96231b3b80d8
Guozhi Wei [Mon, 17 Aug 2015 22:36:27 +0000 (22:36 +0000)]
Align SP adjustment in function getSPAdjust
This commit adds a new function TargetFrameLowering::alignSPAdjust
and calls it from TargetInstrInfo::getSPAdjust. It fixes PR24142.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245253
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 17 Aug 2015 22:35:40 +0000 (22:35 +0000)]
[WebAssembly] Make getArchTypePrefix return "wasm".
The arch prefix string isn't currently being used for anything on
WebAssembly, but if it were to be used, it makes sense to use the
same arch prefix string for wasm32 and wasm64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245252
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Mon, 17 Aug 2015 22:17:42 +0000 (22:17 +0000)]
MIR Serialization: Serialize the local offsets for the stack objects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245249
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Mon, 17 Aug 2015 22:09:52 +0000 (22:09 +0000)]
MIR Serialization: Serialize the memory operand's range metadata node.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245247
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Mon, 17 Aug 2015 22:08:02 +0000 (22:08 +0000)]
MIR Serialization: Serialize the memory operand's noalias metadata node.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245246
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Mon, 17 Aug 2015 22:06:40 +0000 (22:06 +0000)]
MIR Serialization: Serialize the memory operand's alias scope metadata node.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245245
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Mon, 17 Aug 2015 22:05:15 +0000 (22:05 +0000)]
MIR Serialization: Serialize the memory operand's TBAA metadata node.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245244
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 17 Aug 2015 20:56:39 +0000 (20:56 +0000)]
[WinEHPrepare] Replace unreasonable funclet terminators with unreachable
It is possible to be in a situation where more than one funclet token is
a valid SSA value. If we see a terminator which exits a funclet which
doesn't use the funclet's token, replace it with unreachable.
Differential Revision: http://reviews.llvm.org/D12074
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245238
91177308-0d34-0410-b5e6-
96231b3b80d8
Douglas Katzman [Mon, 17 Aug 2015 19:55:01 +0000 (19:55 +0000)]
[SPARC]: recognize '.' as the start of an assembler expression.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245232
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Mon, 17 Aug 2015 19:37:12 +0000 (19:37 +0000)]
[ARM] Fix crash when targetting CPU without NEON
We emulate a scalar vmin/vmax with NEON instructions as they don't exist in the VFP ISA. So only mark these as legal when NEON is available.
Found here: https://code.google.com/p/chromium/issues/detail?id=521671
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245231
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Laevsky [Mon, 17 Aug 2015 16:37:04 +0000 (16:37 +0000)]
[ScalarEvolutionExpander] Reuse findExistingExpansion during expansion cost calculation for division
Primary purpose of this change is to reuse existing code inside findExistingExpansion. However it introduces very slight semantic change - findExistingExpansion now looks into exiting blocks instead of a loop latches. Originally heuristic was based on the fact that we want to look at the loop exit conditions. And since all exiting latches will be listed in the ExitingBlocks, heuristic stays roughly the same.
Differential Revision: http://reviews.llvm.org/D12008
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245227
91177308-0d34-0410-b5e6-
96231b3b80d8
Silviu Baranga [Mon, 17 Aug 2015 16:05:09 +0000 (16:05 +0000)]
[CostModel][AArch64] Increase cost of vector insert element and add missing cast costs
Summary:
Increase the estimated costs for insert/extract element operations on
AArch64. This is motivated by results from benchmarking interleaved
accesses.
Add missing costs for zext/sext/trunc instructions and some integer to
floating point conversions. These costs were previously calculated
by scalarizing these operation and were affected by the cost increase of
the insert/extract element operations.
Reviewers: rengolin
Subscribers: mcrosier, aemerson, rengolin, llvm-commits
Differential Revision: http://reviews.llvm.org/D11939
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245226
91177308-0d34-0410-b5e6-
96231b3b80d8
Silviu Baranga [Mon, 17 Aug 2015 15:57:05 +0000 (15:57 +0000)]
[CostModel][ARM] Increase cost of insert/extract operations
Summary:
This change limits the minimum cost of an insert/extract
element operation to 2 in cases where this would result
in mixing of NEON and VFP code.
Reviewers: rengolin
Subscribers: mssimpso, aemerson, llvm-commits, rengolin
Differential Revision: http://reviews.llvm.org/D12030
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245225
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Laevsky [Mon, 17 Aug 2015 15:56:56 +0000 (15:56 +0000)]
[BasicAliasAnalysis] Do not check ModRef table for intrinsics
All possible ModRef behaviours can be completely represented using existing LLVM IR attributes.
Differential Revision: http://reviews.llvm.org/D12033
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245224
91177308-0d34-0410-b5e6-
96231b3b80d8
Artur Pilipenko [Mon, 17 Aug 2015 15:54:26 +0000 (15:54 +0000)]
Take alignment into account in isSafeToSpeculativelyExecute and isSafeToLoadUnconditionally.
Reviewed By: hfinkel, sanjoy, MatzeB
Differential Revision: http://reviews.llvm.org/D9791
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245223
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 17 Aug 2015 14:35:25 +0000 (14:35 +0000)]
Extend MCAsmLexer so that it can peek forward several tokens
This commit adds a virtual `peekTokens()` function to `MCAsmLexer`
which can peek forward an arbitrary number of tokens.
It also makes the `peekTok()` method call `peekTokens()` method, but
only requesting one token.
The idea is to better support targets which more more ambiguous
assembly syntaxes.
Patch by Dylan McKay!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245221
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Mon, 17 Aug 2015 14:25:57 +0000 (14:25 +0000)]
Correcting a -Woverflow warning where 0xFFFF was overflowing an implicit constant conversion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245220
91177308-0d34-0410-b5e6-
96231b3b80d8
Joseph Tremoulet [Mon, 17 Aug 2015 13:51:37 +0000 (13:51 +0000)]
[WinEHPrepare] Fix catchret successor phi demotion
Summary:
When demoting an SSA value that has a use on a phi and one of the phi's
predecessors terminates with catchret, the edge needs to be split and the
load inserted in the new block, else we'll still have a cross-funclet SSA
value.
Add a test for this, and for the similar case where a def to be spilled is
on and invoke and a critical edge, which was already implemented but
missing a test.
Reviewers: majnemer
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D12065
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245218
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Mon, 17 Aug 2015 10:58:03 +0000 (10:58 +0000)]
Revert "Disable targetdatalayoutcheck"
I committed by accident a local hack that should not have made it upstream.
Sorry for the noise.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245212
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Mon, 17 Aug 2015 10:56:35 +0000 (10:56 +0000)]
Disable targetdatalayoutcheck
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245210
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Mon, 17 Aug 2015 10:11:55 +0000 (10:11 +0000)]
[mips] [IAS] Add support for the DLA pseudo-instruction and fix problems with DLI
Summary: It is the same as LA, except that it can also load 64-bit addresses and it only works on 64-bit MIPS architectures.
Reviewers: tomatabacu, seanbruno, vkalintiris
Subscribers: brooks, seanbruno, emaste, llvm-commits
Differential Revision: http://reviews.llvm.org/D9524
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245208
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Mon, 17 Aug 2015 10:06:08 +0000 (10:06 +0000)]
[GMR] isNonEscapingGlobalNoAlias() should look through Bitcasts/GEPs when looking at loads.
This fixes yet another case from PR24288.
Differential Revision: http://reviews.llvm.org/D12064
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245207
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Mon, 17 Aug 2015 07:13:20 +0000 (07:13 +0000)]
Remove hand-rolled matching for fmin and fmax.
SDAGBuilder now does this all for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245198
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Mon, 17 Aug 2015 07:13:15 +0000 (07:13 +0000)]
Rip out hand-rolled matching code for VMIN, VMAX, VMINNM and VMAXNM
This is no longer needed - SDAGBuilder will do this for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245197
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Mon, 17 Aug 2015 07:13:10 +0000 (07:13 +0000)]
Generate FMINNAN/FMINNUM/FMAXNAN/FMAXNUM from SDAGBuilder.
These only get generated if the target supports them. If one of the variants is not legal and the other is, and it is safe to do so, the other variant will be emitted.
For example on AArch32 (V8), we have scalar fminnm but not fmin.
Fix up a couple of tests while we're here - one now produces better code, and the other was just plain wrong to start with.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245196
91177308-0d34-0410-b5e6-
96231b3b80d8
Karthik Bhat [Mon, 17 Aug 2015 05:51:39 +0000 (05:51 +0000)]
Fix PR24469 resulting from r245025 and re-enable dead store elimination across basicblocks.
PR24469 resulted because DeleteDeadInstruction in handleNonLocalStoreDeletion was
deleting the next basic block iterator. Fixed the same by resetting the basic block iterator
post call to DeleteDeadInstruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245195
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 17 Aug 2015 03:11:26 +0000 (03:11 +0000)]
Revert "[InstCombinePHI] Partial simplification of identity operations."
This reverts commit r244887, it caused PR24470.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245194
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Mon, 17 Aug 2015 02:08:17 +0000 (02:08 +0000)]
[PM] Port ScalarEvolution to the new pass manager.
This change makes ScalarEvolution a stand-alone object and just produces
one from a pass as needed. Making this work well requires making the
object movable, using references instead of overwritten pointers in
a number of places, and other refactorings.
I've also wired it up to the new pass manager and added a RUN line to
a test to exercise it under the new pass manager. This includes basic
printing support much like with other analyses.
But there is a big and somewhat scary change here. Prior to this patch
ScalarEvolution was never *actually* invalidated!!! Re-running the pass
just re-wired up the various other analyses and didn't remove any of the
existing entries in the SCEV caches or clear out anything at all. This
might seem OK as everything in SCEV that can uses ValueHandles to track
updates to the values that serve as SCEV keys. However, this still means
that as we ran SCEV over each function in the module, we kept
accumulating more and more SCEVs into the cache. At the end, we would
have a SCEV cache with every value that we ever needed a SCEV for in the
entire module!!! Yowzers. The releaseMemory routine would dump all of
this, but that isn't realy called during normal runs of the pipeline as
far as I can see.
To make matters worse, there *is* actually a key that we don't update
with value handles -- there is a map keyed off of Loop*s. Because
LoopInfo *does* release its memory from run to run, it is entirely
possible to run SCEV over one function, then over another function, and
then lookup a Loop* from the second function but find an entry inserted
for the first function! Ouch.
To make matters still worse, there are plenty of updates that *don't*
trip a value handle. It seems incredibly unlikely that today GVN or
another pass that invalidates SCEV can update values in *just* such
a way that a subsequent run of SCEV will incorrectly find lookups in
a cache, but it is theoretically possible and would be a nightmare to
debug.
With this refactoring, I've fixed all this by actually destroying and
recreating the ScalarEvolution object from run to run. Technically, this
could increase the amount of malloc traffic we see, but then again it is
also technically correct. ;] I don't actually think we're suffering from
tons of malloc traffic from SCEV because if we were, the fact that we
never clear the memory would seem more likely to have come up as an
actual problem before now. So, I've made the simple fix here. If in fact
there are serious issues with too much allocation and deallocation,
I can work on a clever fix that preserves the allocations (while
clearing the data) between each run, but I'd prefer to do that kind of
optimization with a test case / benchmark that shows why we need such
cleverness (and that can test that we actually make it faster). It's
possible that this will make some things faster by making the SCEV
caches have higher locality (due to being significantly smaller) so
until there is a clear benchmark, I think the simple change is best.
Differential Revision: http://reviews.llvm.org/D12063
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245193
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sun, 16 Aug 2015 23:17:27 +0000 (23:17 +0000)]
[ADT] Teach FoldingSet to be movable.
This is a very minimal move support - it leaves the moved-from object in
a zombie state that is only valid for destruction and move assignment.
This seems fine to me, and leaving it in the default constructed state
would require adding more state to the object and potentially allocating
memory (!!!) and so seems like a Bad Idea.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245192
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 16 Aug 2015 21:27:10 +0000 (21:27 +0000)]
[TableGen] Use range-based for loop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245191
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 16 Aug 2015 21:27:08 +0000 (21:27 +0000)]
[TableGen] Move the ConversionRow vector into the ConversionTable instead of copying.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245190
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sun, 16 Aug 2015 21:16:37 +0000 (21:16 +0000)]
[SimplifyLibCalls] Drop default template args. No functional change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245189
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sun, 16 Aug 2015 21:16:26 +0000 (21:16 +0000)]
[IR] Simplify code. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245188
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 16 Aug 2015 20:18:19 +0000 (20:18 +0000)]
transform fmin/fmax calls when possible (PR24314)
If we can ignore NaNs, fmin/fmax libcalls can become compare and select
(this is what we turn std::min / std::max into).
This IR should then be optimized in the backend to whatever is best for
any given target. Eg, x86 can use minss/maxss instructions.
This should solve PR24314:
https://llvm.org/bugs/show_bug.cgi?id=24314
Differential Revision: http://reviews.llvm.org/D11866
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245187
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Sun, 16 Aug 2015 18:22:46 +0000 (18:22 +0000)]
[LSR][NFC] Don’t duplicate entity name at the beginning of the comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245183
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Sun, 16 Aug 2015 18:22:43 +0000 (18:22 +0000)]
[LSR][NFC] Use camelCase for method names in Formula and RegUseTracker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245182
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 16 Aug 2015 17:54:28 +0000 (17:54 +0000)]
use SDValue bool operator; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245181
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Sun, 16 Aug 2015 07:55:08 +0000 (07:55 +0000)]
Add missing include guard.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245173
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sun, 16 Aug 2015 07:11:59 +0000 (07:11 +0000)]
Revert "Add support for cross block dse. This patch enables dead stroe elimination across basicblocks."
This reverts commit r245025, it caused PR24469.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245172
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sun, 16 Aug 2015 07:09:17 +0000 (07:09 +0000)]
[InstCombine] Replace an and+icmp with a trunc+icmp
Bitwise arithmetic can obscure a simple sign-test. If replacing the
mask with a truncate is preferable if the type is legal because it
permits us to rephrase the comparison more explicitly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245171
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sun, 16 Aug 2015 06:35:19 +0000 (06:35 +0000)]
Revert r244127: [PM] Remove a failed attempt to port the CallGraph
analysis ...
It turns out that we *do* need the old CallGraph ported to the new pass
manager. There are times where this model of a call graph is really
superior to the one provided by the LazyCallGraph. For example,
GlobalsModRef very specifically needs the model provided by CallGraph.
While here, I've tried to make the move semantics actually work. =]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245170
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sun, 16 Aug 2015 04:52:11 +0000 (04:52 +0000)]
[X86] Widen the 'AND' mask if doing so shrinks the encoding size
We can set additional bits in a mask given that we know the other
operand of an AND already has some bits set to zero. This can be more
efficient if doing so allows us to use an instruction which implicitly
sign extends the immediate.
This fixes PR24085.
Differential Revision: http://reviews.llvm.org/D11289
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245169
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Sun, 16 Aug 2015 02:41:23 +0000 (02:41 +0000)]
MergeFunc: Quick fix for r245140, Ignore second, aka Function*, in sorting.
Don't assume second would be ordered in the module.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245168
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Sat, 15 Aug 2015 19:06:14 +0000 (19:06 +0000)]
Try to appease VS 2015 warnings from reviews.llvm.org/D11890
ByteSize and BitSize should not be size_t but unsigned, considering
1) They are at most 2^16 and 2^19, respectively.
2) BitSize is an argument to Type::getIntNTy which takes unsigned.
Also, use the correct utostr instead itostr and cache the string result.
Thanks to James Touton for reporting this!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245167
91177308-0d34-0410-b5e6-
96231b3b80d8