Michael Kruse [Thu, 1 Sep 2016 19:16:58 +0000 (19:16 +0000)]
Check validity of new access relations. NFC.
There are some constraints on maps that can be access relations. In builds with assertions enabled, verify
- The access domain is the same space as the statement's domain (modulo parameters).
- Whether an access is defined for every instance of the statement. (codegen does not yet support partial access relations)
- Whether the access range links to an array, represented by a ScopArrayInfo.
- The number of access dimensions equals the dimensions of the array.
- The array is not an indirect access. (also not supported by codegen)
Differential Revision: https://reviews.llvm.org/D23916
llvm-svn: 280404
Sanjay Patel [Thu, 1 Sep 2016 19:14:19 +0000 (19:14 +0000)]
[InstCombine] add tests to show potential shuffle+insert folds
llvm-svn: 280403
Andrey Turetskiy [Thu, 1 Sep 2016 18:50:02 +0000 (18:50 +0000)]
[X86] Loosen memory folding requirements for cvtdq2pd and cvtps2pd instructions.
According to spec cvtdq2pd and cvtps2pd instructions don't require memory operand to be aligned
to 16 bytes. This patch removes this requirement from the memory folding table.
Differential Revision: https://reviews.llvm.org/D23919
llvm-svn: 280402
Jason Henline [Thu, 1 Sep 2016 18:48:21 +0000 (18:48 +0000)]
[StreamExecutor] Dev handles in platform interface
Summary:
This is the first in a series of patches that will convert
GlobalDeviceMemory to own its device memory handle. The first step is to
remove GlobalDeviceMemoryBase from the PlatformInterface interfaces and
use raw handles there instead. This is useful because
GlobalDeviceMemoryBase is going to lose its importance in this process.
Reviewers: jlebar
Subscribers: jprice, parallel_libs-commits
Differential Revision: https://reviews.llvm.org/D24114
llvm-svn: 280401
Chris Bieneman [Thu, 1 Sep 2016 18:46:53 +0000 (18:46 +0000)]
[CMake] Don't copy headers on fully standalone
In r280108 I tried to make the headers copy relative to LLVM_BINARY_DIR, and the intent was that it would only happen on in-tree builds or runtimes directory builds. It didn't actually work that way.
This patch adds a check for CMAKE_SOURCE_DIR being equal to CMAKE_CURRENT_SOURCE_DIR. In this case we set a variable LIBCXX_USING_INSTLLED_LLVM. This doesn't necessarily mean the LLVM is installed (it could be a build directory), but it means we need to treat the LLVM directory as read-only.
llvm-svn: 280400
Yaxun Liu [Thu, 1 Sep 2016 18:46:49 +0000 (18:46 +0000)]
AMDGPU: Add runtime metadata for pointee alignment of argument.
Add runtime metdata for pointee alignment of pointer type kernel argument. The key is KeyArgPointeeAlign and the value is a 32 bit unsigned integer.
Differential Revision: https://reviews.llvm.org/D24145
llvm-svn: 280399
Filipe Cabecinhas [Thu, 1 Sep 2016 18:40:12 +0000 (18:40 +0000)]
Revert "Copy over most of the scariness_score test to the general tests"
This reverts commit r280361 until we have the proper change in place.
llvm-svn: 280398
Jason Henline [Thu, 1 Sep 2016 18:35:37 +0000 (18:35 +0000)]
[SE] Make Stream movable
Summary:
The example code makes it clear that this is a much better design
decision.
Reviewers: jlebar
Subscribers: jprice, parallel_libs-commits
Differential Revision: https://reviews.llvm.org/D24142
llvm-svn: 280397
Davide Italiano [Thu, 1 Sep 2016 18:34:47 +0000 (18:34 +0000)]
[lib/LTO] Simplify a bit. NFCI.
llvm-svn: 280396
Enrico Granata [Thu, 1 Sep 2016 18:31:40 +0000 (18:31 +0000)]
When updating a ValueObjectRegister, set the flag to remind yourself of whether it changed
llvm-svn: 280395
Chris Bieneman [Thu, 1 Sep 2016 18:28:49 +0000 (18:28 +0000)]
[CMake] Properly connecting Compiler-RT check and test-depends
This correctly connects compiler-rt-test-depends to test-depends and
check-compiler-rt to check-all.
Based on LLVM r280392, and Compiler-RT r280393.
llvm-svn: 280394
Chris Bieneman [Thu, 1 Sep 2016 18:26:51 +0000 (18:26 +0000)]
[CMake] Adding compiler-rt-test-depends target
This exposes a target for building the compiler-rt test dependencies and matches llvm-test-depends.
llvm-svn: 280393
Chris Bieneman [Thu, 1 Sep 2016 18:26:01 +0000 (18:26 +0000)]
[CMake] Connecting check-all and test-depends targets correctly
My previous attempt at this connected the sub-project check targets to the test-depends target instead of to the check-all target. That resulted in the tests running multiple times on bots that built "test-depends" and "check-all" in separate build invocations.
llvm-svn: 280392
Michael Kuperstein [Thu, 1 Sep 2016 18:24:42 +0000 (18:24 +0000)]
Rename some variables to have meaningful names. NFC.
llvm-svn: 280391
Matthew Simpson [Thu, 1 Sep 2016 18:14:27 +0000 (18:14 +0000)]
[LV] Move VectorParts allocation and mapping into PHI widening (NFC)
This patch moves the allocation of VectorParts for PHI nodes into the actual
PHI widening code. Previously, we allocated these VectorParts in
vectorizeBlockInLoop, and passed them by reference to widenPHIInstruction. Upon
returning, we would then map the VectorParts in VectorLoopValueMap. This
behavior is problematic for the cases where we only want to generate a scalar
version of a PHI node. For example, if in the future we only generate a scalar
version of an induction variable, we would end up inserting an empty vector
entry into the map once we return to vectorizeBlockInLoop. We now no longer
need to pass VectorParts to the various PHI widening functions, and we can keep
VectorParts allocation as close as possible to the point at which they are
actually mapped in VectorLoopValueMap.
llvm-svn: 280390
Enrico Granata [Thu, 1 Sep 2016 18:09:01 +0000 (18:09 +0000)]
Change the formula for tagged NSIndexPath data formatting
Fixes rdar://
25192935
llvm-svn: 280389
Zachary Turner [Thu, 1 Sep 2016 18:08:19 +0000 (18:08 +0000)]
[codeview] Properly propagate the TypeLeafKind through the pipeline.
llvm-svn: 280388
Reid Kleckner [Thu, 1 Sep 2016 18:08:05 +0000 (18:08 +0000)]
Fix dll_host.cc test after adding div and gep trace coverage points
llvm-svn: 280387
Michael Kuperstein [Thu, 1 Sep 2016 17:59:24 +0000 (17:59 +0000)]
[DAGCombine] Don't fold a trunc if it feeds an anyext
Legalization tends to create anyext(trunc) patterns. This should always be
combined - into either a single trunc, a single ext, or nothing if the
types match exactly. But if we happen to combine the trunc first, we may pull
the trunc away from the anyext or make it implicit (e.g. the truncate(extract)
-> extract(bitcast) fold).
To prevent this, we can avoid doing the fold, similarly to how we already handle
fpround(fpextend).
Differential Revision: https://reviews.llvm.org/D23893
llvm-svn: 280386
Changpeng Fang [Thu, 1 Sep 2016 17:54:54 +0000 (17:54 +0000)]
AMDGPU/SI: MIMG TD Refactoring.
Summary:
Created a new td file MIMGInstructions.td which contains all definitions
of MIMG related instructions.
Reviewed by:
kzhuravl, vpykhtin
Differential Revision:
http://reviews.llvm.org/D24106
llvm-svn: 280385
Jason Henline [Thu, 1 Sep 2016 17:47:17 +0000 (17:47 +0000)]
[SE] Docs use JAVADOC_AUTOBRIEF
That way we don't have to explicitly annotate each brief description as
\brief.
llvm-svn: 280384
Reid Kleckner [Thu, 1 Sep 2016 17:19:44 +0000 (17:19 +0000)]
[lit] Use multiprocessing by default on Windows
Apparently nobody evaluated multiprocessing on Windows since Daniel
enabled multiprocessing on Unix in r193279. It works so far as I can
tell.
Today this is worth about an 8x speedup (631.29s to 73.25s) on my 24
core Windows machine. Hopefully this will improve Windows buildbot cycle
time, where currently it takes more time to run check-all than it does
to self-host with assertions enabled:
http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/20
build stage 2 ninja all ( 28 mins, 22 secs )
ninja check 2 stage 2 ( 37 mins, 38 secs )
llvm-svn: 280382
Chris Bieneman [Thu, 1 Sep 2016 16:43:39 +0000 (16:43 +0000)]
[CMake] Revive LLVM_*_DIRS variables
This is a partial revert of r280013. Brad King pointed out these variable names are matching CMake conventions, so we should preserve them.
I've also added a direct mapping of the LLVM_*_DIR variables which we need to make projects support building in and out of tree.
llvm-svn: 280380
Geoff Berry [Thu, 1 Sep 2016 15:07:46 +0000 (15:07 +0000)]
[EarlyCSE] Change C API pass interface for EarlyCSE w/ MemorySSA
Previous change broke the C API for creating an EarlyCSE pass w/
MemorySSA by adding a bool parameter to control whether MemorySSA was
used or not. This broke the OCaml bindings. Instead, change the old C
API entry point back and add a new one to request an EarlyCSE pass with
MemorySSA.
llvm-svn: 280379
Saleem Abdulrasool [Thu, 1 Sep 2016 15:05:36 +0000 (15:05 +0000)]
build: profile is not a sanitizer
There was an invalid entry in the sanitizer list, remove it. This has no effect
on the building, just removes the definition of a cached variable.
llvm-svn: 280378
Simon Dardis [Thu, 1 Sep 2016 15:03:13 +0000 (15:03 +0000)]
[mips] Include missed file from previous commit
llvm-svn: 280377
Simon Pilgrim [Thu, 1 Sep 2016 14:59:20 +0000 (14:59 +0000)]
[X86][SSE] Dropped (V)CVTPD2PS intrinsic patterns now that its bound to X86vfpround
It now uses X86vfpround patterns directly instead.
Followup to D23797
llvm-svn: 280376
Rafael Espindola [Thu, 1 Sep 2016 14:59:11 +0000 (14:59 +0000)]
Add missing REQUIRES.
llvm-svn: 280375
Simon Dardis [Thu, 1 Sep 2016 14:53:53 +0000 (14:53 +0000)]
[mips] interAptiv based generic schedule model
This scheduler describes a processor which covers all MIPS ISAs based
around the interAptiv and P5600 timings.
Reviewers: vkalintiris, dsanders
Differential Revision: https://reviews.llvm.org/D23551
llvm-svn: 280374
Renato Golin [Thu, 1 Sep 2016 14:44:02 +0000 (14:44 +0000)]
Try to fix another profile test
Another CFG optimisation patch (280364) has broken bad profile tests, and this
is a similar attempt to fix the test without changing the semantics.
llvm-svn: 280373
Filipe Cabecinhas [Thu, 1 Sep 2016 14:41:17 +0000 (14:41 +0000)]
Remove extra scariness.Clear() call.
llvm-svn: 280372
Andrey Bokhanko [Thu, 1 Sep 2016 14:39:54 +0000 (14:39 +0000)]
[CMake] Fix LLVM_ENABLE_EH and LLVM_ENABLE_RTTI on MSVC
Patch by Johannes Sebastian Mueller-Roemer.
Differential Revision: https://reviews.llvm.org/D23645
llvm-svn: 280371
Sanjay Patel [Thu, 1 Sep 2016 14:20:43 +0000 (14:20 +0000)]
[InstCombine] remove fold of an icmp pattern that should never happen
While removing a scalar shackle from an icmp fold, I noticed that I couldn't find any tests to trigger
this code path.
The 'and' shrinking transform should be handled by InstCombiner::foldCastedBitwiseLogic()
or eliminated with InstSimplify. The icmp narrowing is part of InstCombiner::foldICmpWithCastAndCast().
Differential Revision: https://reviews.llvm.org/D24031
llvm-svn: 280370
Krzysztof Parzyszek [Thu, 1 Sep 2016 13:59:35 +0000 (13:59 +0000)]
[Hexagon] Deal with undefs when extending live intervals
Reapply r280275, since MSVC accepts r280358.
llvm-svn: 280369
Elena Demikhovsky [Thu, 1 Sep 2016 13:58:53 +0000 (13:58 +0000)]
Optimized FMA intrinsic + FNEG , like
-(a*b+c)
and FNEG + FMA, like
a*b-c or (-a)*b+c.
The bug description is here : https://llvm.org/bugs/show_bug.cgi?id=28892
Differential revision: https://reviews.llvm.org/D23313
llvm-svn: 280368
Aleksei Sidorin [Thu, 1 Sep 2016 13:55:38 +0000 (13:55 +0000)]
[analyzer] ExprEngine: remove second call to PreStmt<CastExpr>
This patch also introduces AnalysisOrderChecker which is intended for testing
of callback call correctness.
Differential Revision: https://reviews.llvm.org/D23804
llvm-svn: 280367
Rafael Espindola [Thu, 1 Sep 2016 13:52:52 +0000 (13:52 +0000)]
Sign extend a value before passing it to the Target.
This is what InputSectionBase<ELFT>::relocate does and we need to be
consistent. The other option would be to be more explicit about which
relocations are signed and which are not, and sign extend only when
appropriated. That would require extending the target interface.
llvm-svn: 280366
Renato Golin [Thu, 1 Sep 2016 13:45:47 +0000 (13:45 +0000)]
Fix profile test assuming dumb compiler
Commit r280364 has introduced some call-graph optmisations making a profiler
test "fail" due to not expecting the compiler to be "smart", and fold constants
across functions. This commit works around the issue, leaving the origial
semantics intact.
llvm-svn: 280365
James Molloy [Thu, 1 Sep 2016 12:58:13 +0000 (12:58 +0000)]
[SimplifyCFG] Handle tail-sinking of more than 2 incoming branches
This was a real restriction in the original version of SinkIfThenCodeToEnd. Now it's been rewritten, the restriction can be lifted.
As part of this, we handle a very common and useful case where one of the incoming branches is actually conditional. Consider:
if (a)
x(1);
else if (b)
x(2);
This produces the following CFG:
[if]
/ \
[x(1)] [if]
| | \
| | \
| [x(2)] |
\ | /
[ end ]
[end] has two unconditional predecessor arcs and one conditional. The conditional refers to the implicit empty 'else' arc. This same pattern can also be caused by an empty default block in a switch.
We can't sink the call to x() down to end because no call to x() happens on the third incoming arc (assume that x() has sideeffects for the sake of argument; if something is safe to speculate we could indeed sink nevertheless but this cannot happen in the general case and causes many extra selects).
We are now able to detect this case and split off the unconditional arcs to a common successor:
[if]
/ \
[x(1)] [if]
| | \
| | \
| [x(2)] |
\ / |
[sink.split] |
\ /
[ end ]
Now we can sink the call to x() into %sink.split. This can cause significant code simplification in many testcases.
llvm-svn: 280364
Filipe Cabecinhas [Thu, 1 Sep 2016 12:51:58 +0000 (12:51 +0000)]
Clear scariness score when initializing ErrorDoubleFree
llvm-svn: 280363
Filipe Cabecinhas [Thu, 1 Sep 2016 12:29:13 +0000 (12:29 +0000)]
Copy over most of the scariness_score test to the general tests
The abort() test wasn't copied over (original case 22). This is because
it doesn't work on OS X.
If theres no buildbot problem with this test later today, I will
minimize the Linux version.
llvm-svn: 280361
Aleksei Sidorin [Thu, 1 Sep 2016 12:25:16 +0000 (12:25 +0000)]
[analyzer] Add more FileIDs to PlistDiagnostic map to avoid assertion
Some FileIDs that may be used by PlistDiagnostics were not added while building
a list of pieces. This caused assertion violation in GetFID() function.
This patch adds some missing FileIDs to avoid the assertion. It also contains
small refactoring of PlistDiagnostics::FlushDiagnosticsImpl().
Patch by Aleksei Sidorin, Ilya Palachev.
Differential Revision: https://reviews.llvm.org/D22090
llvm-svn: 280360
Haojian Wu [Thu, 1 Sep 2016 12:17:28 +0000 (12:17 +0000)]
[include-fixer] Fix an undefined variable exception in vim script when there is
only one candidate header.
llvm-svn: 280359
Krzysztof Parzyszek [Thu, 1 Sep 2016 12:10:36 +0000 (12:10 +0000)]
Add an optional parameter with a list of undefs to extendToIndices
Reapply r280268, hopefully in a version that MSVC likes.
llvm-svn: 280358
Honggyu Kim [Thu, 1 Sep 2016 11:44:06 +0000 (11:44 +0000)]
[IR] Properly handle escape characters in Attribute::getAsString()
If an attribute name has special characters such as '\01', it is not
properly printed in LLVM assembly language format. Since the format
expects the special characters are printed as it is, it has to contain
escape characters to make it printable.
Before:
attributes #0 = { ... "counting-function"="^A__gnu_mcount_nc" ...
After:
attributes #0 = { ... "counting-function"="\01__gnu_mcount_nc" ...
Reviewers: hfinkel, rengolin, rjmccall, compnerd
Subscribers: nemanjai, mcrosier, hans, shenhan, majnemer, llvm-commits
Differential Revision: https://reviews.llvm.org/D23792
llvm-svn: 280357
Dimitar Vlahovski [Thu, 1 Sep 2016 11:29:53 +0000 (11:29 +0000)]
Minidump parsing
Summary:
This is a Minidump parsing code.
There are still some more structures/data streams that need to be added.
The aim ot this is to be used in the implementation of
a minidump debugging plugin that works on all platforms/architectures.
Currently we have a windows-only plugin that uses the WinAPI to parse
the dump files.
Also added unittests for the current functionality.
Reviewers: labath, amccarth
Subscribers: tberghammer, danalbert, srhines, lldb-commits, dschuff
Differential Revision: https://reviews.llvm.org/D23545
llvm-svn: 280356
Honggyu Kim [Thu, 1 Sep 2016 11:29:21 +0000 (11:29 +0000)]
[Frontend] Fix mcount inlining bug
Since some profiling tools, such as gprof, ftrace, and uftrace, use
-pg option to generate a mcount function call at the entry of each
function. Function invocation can be detected by this hook function.
But mcount insertion is done before function inlining phase in clang,
sometime a function that already has a mcount call can be inlined in the
middle of another function.
This patch adds an attribute "counting-function" to each function
rather than emitting the mcount call directly in frontend so that this
attribute can be processed in backend. Then the mcount calls can be
properly inserted in backend after all the other optimizations are
completed.
Link: https://llvm.org/bugs/show_bug.cgi?id=28660
Reviewers: hans, rjmccall, hfinkel, rengolin, compnerd
Subscribers: shenhan, cfe-commits
Differential Revision: https://reviews.llvm.org/D22666
llvm-svn: 280355
Aleksei Sidorin [Thu, 1 Sep 2016 11:11:46 +0000 (11:11 +0000)]
[analyzer][test commit] ExprEngine.cpp: Remove training whitespace; NFC
llvm-svn: 280352
James Molloy [Thu, 1 Sep 2016 10:44:35 +0000 (10:44 +0000)]
[SimplifyCFG] Change the algorithm in SinkThenElseCodeToEnd
r279460 rewrote this function to be able to handle more than two incoming edges and took pains to ensure this didn't regress anything.
This time we change the logic for determining if an instruction should be sunk. Previously we used a single pass greedy algorithm - sink instructions until one requires more than one PHI node or we run out of instructions to sink.
This had the problem that sinking instructions that had non-identical but trivially the same operands needed extra logic so we sunk them aggressively. For example:
%a = load i32* %b %d = load i32* %b
%c = gep i32* %a, i32 0 %e = gep i32* %d, i32 1
Sinking %c and %e would naively require two PHI merges as %a != %d. But the loads are obviously equivalent (and maybe can't be hoisted because there is no common predecessor).
This is why we implemented the fairly complex function areValuesTriviallySame(), to look through trivial differences like this. However it's just not clever enough.
Instead, throw areValuesTriviallySame away, use pointer equality to check equivalence of operands and switch to a two-stage algorithm.
In the "scan" stage, we look at every sinkable instruction in isolation from end of block to front. If it's sinkable, we keep track of all operands that required PHI merging.
In the "sink" stage, we iteratively sink the last non-terminator in the source blocks. But when calculating how many PHIs are actually required to be inserted (to work out if we should stop or not) we remove any values that have already been sunk from the set of PHI-merges required, which allows us to be more aggressive.
This turns an algorithm with potentially recursive lookahead (looking through GEPs, casts, loads and any other instruction potentially not CSE'd) to two linear scans.
llvm-svn: 280351
Hal Finkel [Thu, 1 Sep 2016 10:28:47 +0000 (10:28 +0000)]
Add ISD::EH_DWARF_CFA, simplify @llvm.eh.dwarf.cfa on Mips, fix on PowerPC
LLVM has an @llvm.eh.dwarf.cfa intrinsic, used to lower the GCC-compatible
__builtin_dwarf_cfa() builtin. As pointed out in PR26761, this is currently
broken on PowerPC (and likely on ARM as well). Currently, @llvm.eh.dwarf.cfa is
lowered using:
ADD(FRAMEADDR, FRAME_TO_ARGS_OFFSET)
where FRAME_TO_ARGS_OFFSET defaults to the constant zero. On x86,
FRAME_TO_ARGS_OFFSET is lowered to 2*SlotSize. This setup, however, does not
work for PowerPC. Because of the way that the stack layout works, the canonical
frame address is not exactly (FRAMEADDR + FRAME_TO_ARGS_OFFSET) on PowerPC
(there is a lower save-area offset as well), so it is not just a matter of
implementing FRAME_TO_ARGS_OFFSET for PowerPC (unless we redefine its
semantics -- We can do that, since it is currently used only for
@llvm.eh.dwarf.cfa lowering, but the better to directly lower the CFA construct
itself (since it can be easily represented as a fixed-offset FrameIndex)). Mips
currently does this, but by using a custom lowering for ADD that specifically
recognizes the (FRAMEADDR, FRAME_TO_ARGS_OFFSET) pattern.
This change introduces a ISD::EH_DWARF_CFA node, which by default expands using
the existing logic, but can be directly lowered by the target. Mips is updated
to use this method (which simplifies its implementation, and I suspect makes it
more robust), and updates PowerPC to do the same.
Fixes PR26761.
Differential Revision: https://reviews.llvm.org/D24038
llvm-svn: 280350
Valery Pykhtin [Thu, 1 Sep 2016 09:56:47 +0000 (09:56 +0000)]
[AMDGPU] Scalar Memory instructions TD refactoring
Differential revision: https://reviews.llvm.org/D23996
llvm-svn: 280349
Eugene Leviant [Thu, 1 Sep 2016 09:55:57 +0000 (09:55 +0000)]
Eliminate LayoutInputSection class
Previously we used LayoutInputSection class to correctly assign
symbols defined in linker script. This patch removes it and uses
pointer to preceding input section in SymbolAssignment class instead.
Differential revision: https://reviews.llvm.org/D23661
llvm-svn: 280348
Hal Finkel [Thu, 1 Sep 2016 09:42:39 +0000 (09:42 +0000)]
Add a counter-function insertion pass
As discussed in https://reviews.llvm.org/D22666, our current mechanism to
support -pg profiling, where we insert calls to mcount(), or some similar
function, is fundamentally broken. We insert these calls in the frontend, which
means they get duplicated when inlining, and so the accumulated execution
counts for the inlined-into functions are wrong.
Because we don't want the presence of these functions to affect optimizaton,
they should be inserted in the backend. Here's a pass which would do just that.
The knowledge of the name of the counting function lives in the frontend, so
we're passing it here as a function attribute. Clang will be updated to use
this mechanism.
Differential Revision: https://reviews.llvm.org/D22825
llvm-svn: 280347
Chandler Carruth [Thu, 1 Sep 2016 09:31:02 +0000 (09:31 +0000)]
[Support] Fix a warning introduced in r280339 due to the member
initializers not being in the same order as the members.
Specifically, 'preg' is the first member followed by 'error', so they
will be initialized in that order and should be written in the member
initializer list in that order.
For the constructor in question, there is no change in behavior.
llvm-svn: 280345
Pavel Labath [Thu, 1 Sep 2016 09:17:37 +0000 (09:17 +0000)]
XFail TestMemoryFind on 32-bit architectures
the test fails for a very prosaic reason: `(const char *)0x1000` returns "4096" on x86_64 and
"1000" (without the "0x") on i386. I haven't tried other 32-bit arches, but I am guessing the
behaviour is the same. XFAIL until someone can get a chance to look at this.
llvm-svn: 280344
Michael Kruse [Thu, 1 Sep 2016 09:03:27 +0000 (09:03 +0000)]
[ScopInfo] Add missing ISL annotations NFC.
llvm-svn: 280343
James Molloy [Thu, 1 Sep 2016 09:01:34 +0000 (09:01 +0000)]
[SimplifyCFG] Fix nondeterministic iteration order
We iterate over the result from SafeToMergeTerminators, so make it a SmallSetVector instead of a SmallPtrSet.
Should fix stage3 convergence builds.
llvm-svn: 280342
Michael Kruse [Thu, 1 Sep 2016 08:26:22 +0000 (08:26 +0000)]
Update ISL to isl-0.17.1-203-g3fef898.
This version has isl_space_has_equal_tuples added to the public API.
llvm-svn: 280341
George Rimar [Thu, 1 Sep 2016 08:02:20 +0000 (08:02 +0000)]
Commit of forgotten header for r280339 "[LLVM/Support] - Create no-arguments constructor for llvm::Regex"
llvm-svn: 280340
George Rimar [Thu, 1 Sep 2016 08:00:28 +0000 (08:00 +0000)]
[LLVM/Support] - Create no-arguments constructor for llvm::Regex
This is useful when need to defer the construction,
e.g. using Regex as a member of class.
Differential revision: https://reviews.llvm.org/D24101
llvm-svn: 280339
James Molloy [Thu, 1 Sep 2016 07:45:25 +0000 (07:45 +0000)]
[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases
A very important case is not handled here: multiple arcs to a single block with a PHI. Consider:
a:
%1 = icmp %b, 1
br %1, label %c, label %e
c:
%2 = icmp %b, 2
br %2, label %d, label %e
d:
br %e
e:
phi [0, %a], [1, %c], [2, %d]
FoldValueComparisonIntoPredecessors will refuse to fold this, as it doesn't know how to deal with two arcs to a common destination with different PHI values. The answer is obvious - just split all conflicting arcs.
llvm-svn: 280338
Honggyu Kim [Thu, 1 Sep 2016 06:14:45 +0000 (06:14 +0000)]
Remove whitespace to test commit access
llvm-svn: 280337
Dean Michael Berris [Thu, 1 Sep 2016 01:58:24 +0000 (01:58 +0000)]
[NFC] Remove unnecessary comment
llvm-svn: 280336
Ivan Krasin [Thu, 1 Sep 2016 01:38:32 +0000 (01:38 +0000)]
Fix libc++ configuration with -fsanitize-coverage
Summary:
a recent change (r280015) in libc++ configuration broke LibFuzzer bot:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/12245
It's not restricted just to that bot; any code that uses the sanitize coverage and configures libc++ hits it.
This CL fixes the issue.
Reviewers: compnerd
Subscribers: aizatsky
Differential Revision: https://reviews.llvm.org/D24116
llvm-svn: 280335
Dean Michael Berris [Thu, 1 Sep 2016 01:29:13 +0000 (01:29 +0000)]
[XRay] Detect and emit sleds for sibling/tail calls
Summary:
This change promotes the 'isTailCall(...)' member function to
TargetInstrInfo as a query interface for determining on a per-target
basis whether a given MachineInstr is a tail call instruction. We build
upon this in the XRay instrumentation pass to emit special sleds for
tail call optimisations, where we emit the correct kind of sled.
The tail call sleds look like a mix between the function entry and
function exit sleds. Form-wise, the sled comes before the "jmp"
instruction that implements the tail call similar to how we do it for
the function entry sled. Functionally, because we know this is a tail
call, it behaves much like an exit sled -- i.e. at runtime we may use
the exit trampolines instead of a different kind of trampoline.
A follow-up change to recognise these sleds will be done in compiler-rt,
so that we can start intercepting these initially as exits, but also
have the option to have different log entries to more accurately reflect
that this is actually a tail call.
Reviewers: echristo, rSerge, majnemer
Subscribers: mehdi_amini, dberris, llvm-commits
Differential Revision: https://reviews.llvm.org/D23986
llvm-svn: 280334
George Burgess IV [Thu, 1 Sep 2016 01:26:58 +0000 (01:26 +0000)]
Fix typos in comments.
llvm-svn: 280333
Kostya Serebryany [Thu, 1 Sep 2016 01:22:27 +0000 (01:22 +0000)]
[libFuzzer] add -minimize_crash flag (to minimize crashers). also add two tests that I failed to commit last time
llvm-svn: 280332
Dean Michael Berris [Thu, 1 Sep 2016 01:03:22 +0000 (01:03 +0000)]
[XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo.
This change is broken out from D23986, where XRay detects tail call
exits.
llvm-svn: 280331
Akira Hatanaka [Thu, 1 Sep 2016 01:03:21 +0000 (01:03 +0000)]
[Sema] Don't diagnose an array type mismatch when the new or previous
declaration has a dependent type.
This fixes a bug where clang errors out on a valid code.
rdar://problem/
28051467
Differential Revision: https://reviews.llvm.org/D24110
llvm-svn: 280330
Heejin Ahn [Thu, 1 Sep 2016 00:44:37 +0000 (00:44 +0000)]
Revert "Add asm.js-style setjmp/longjmp handling for wasm"
This reverts commit r280302, it broke the integration tests.
llvm-svn: 280329
Enrico Granata [Thu, 1 Sep 2016 00:32:53 +0000 (00:32 +0000)]
There exists at least one compiler on one platform that doesn't know how to assert on a std::shared_ptr<>
Appease it by being very very very explicit about what I mean
llvm-svn: 280328
Enrico Granata [Thu, 1 Sep 2016 00:09:59 +0000 (00:09 +0000)]
Change "memory find" over to using a variation of the Boyer–Moore search algorithm
Fixes rdar://
15455621 (and adds a test case for this command which - surprisingly and sadly - was not there originally)
llvm-svn: 280327
Justin Bogner [Wed, 31 Aug 2016 23:43:14 +0000 (23:43 +0000)]
Support: Avoid errors with LLVM_FALLTHROUGH in clang 3.6 and below in C mode
Older versions of clang defined __has_cpp_attribute in C mode, but
would choke on scoped attributes, as per llvm.org/PR23435. Since we
support building with clang all the way back to 3.1, we have to work
around this issue.
llvm-svn: 280326
Ivan Krasin [Wed, 31 Aug 2016 23:42:27 +0000 (23:42 +0000)]
Fix the use of unitialized value while reporting double free in ASAN.
Summary:
This is a follow up to https://reviews.llvm.org/rL280201 where this issue was introduced.
ASAN tests failed:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/25219/steps/run%20asan%20tests/logs/stdio
Reviewers: filcab
Subscribers: kubabrecka
Differential Revision: https://reviews.llvm.org/D24109
llvm-svn: 280325
Jason Henline [Wed, 31 Aug 2016 23:30:41 +0000 (23:30 +0000)]
[StreamExecutor] getOrDie and dieIfError utils
Reviewers: jlebar
Subscribers: jprice, parallel_libs-commits
Differential Revision: https://reviews.llvm.org/D24107
llvm-svn: 280312
Nick Lewycky [Wed, 31 Aug 2016 23:24:43 +0000 (23:24 +0000)]
Add cast to appease windows builder. Fixes build break introduced in r280306.
llvm-svn: 280311
Rafael Espindola [Wed, 31 Aug 2016 23:24:11 +0000 (23:24 +0000)]
Fix the implementation of R_386_GOTPC and R_386_GOTOFF.
They were both pointing to the start of the got, not the end.
Fixes pr28924.
llvm-svn: 280310
Richard Smith [Wed, 31 Aug 2016 23:24:08 +0000 (23:24 +0000)]
Fix all tests under test/CXX (and test/Analysis) to pass if clang's default
C++ language standard is not C++98.
llvm-svn: 280309
Richard Smith [Wed, 31 Aug 2016 23:23:25 +0000 (23:23 +0000)]
DR259: Demote the pedantic error for an explicit instantiation after an
explicit specialization to a warning for C++98 mode (this is a defect report
resolution, so per our informal policy it should apply in C++98), and turn
the warning on by default for C++11 and later. In all cases where it fires, the
right thing to do is to remove the pointless explicit instantiation.
llvm-svn: 280308
Zachary Turner [Wed, 31 Aug 2016 23:14:31 +0000 (23:14 +0000)]
[codeview] Have visitTypeBegin return the record type.
Previously we were assuming that any visitation of types would
necessarily be against a type we had binary data for. Reasonable
assumption when were just reading PDBs and dumping them, but once
we start writing PDBs from Yaml this breaks down, because we have
no binary data yet, only Yaml, and from that we need to read the
record kind and perform the switch based on that.
So this patch does that. Instead of having the visitor switch
on the kind that is already in the CVType record, we change the
visitTypeBegin() method to return the Kind, and switch on the
returned value. This way, the default implementation can still
return the value from the CVType, but the implementation which
visits Yaml records and serializes binary PDB type records can
use the field in the Yaml as the source of the switch.
llvm-svn: 280307
Nick Lewycky [Wed, 31 Aug 2016 23:04:32 +0000 (23:04 +0000)]
Add -fprofile-dir= to clang.
-fprofile-dir=path allows the user to specify where .gcda files should be
emitted when the program is run. In particular, this is the first flag that
causes the .gcno and .o files to have different paths, LLVM is extended to
support this. -fprofile-dir= does not change the file name in the .gcno (and
thus where lcov looks for the source) but it does change the name in the .gcda
(and thus where the runtime library writes the .gcda file). It's different from
a GCOV_PREFIX because a user can observe that the GCOV_PREFIX_STRIP will strip
paths off of -fprofile-dir= but not off of a supplied GCOV_PREFIX.
To implement this we split -coverage-file into -coverage-data-file and
-coverage-notes-file to specify the two different names. The !llvm.gcov
metadata node grows from a 2-element form {string coverage-file, node dbg.cu}
to 3-elements, {string coverage-notes-file, string coverage-data-file, node
dbg.cu}. In the 3-element form, the file name is already "mangled" with
.gcno/.gcda suffixes, while the 2-element form left that to the middle end
pass.
llvm-svn: 280306
Rafael Espindola [Wed, 31 Aug 2016 23:01:13 +0000 (23:01 +0000)]
Use getSize to find the size of a section. NFC.
llvm-svn: 280305
Reid Kleckner [Wed, 31 Aug 2016 22:45:36 +0000 (22:45 +0000)]
Fix the MSVC 2013 build by using Elf_Word instead of making a local typedef
llvm-svn: 280304
NAKAMURA Takumi [Wed, 31 Aug 2016 22:43:23 +0000 (22:43 +0000)]
[CMake] Increase stack size to 16MiB for all mingw executables.
llvm-svn: 280303
Heejin Ahn [Wed, 31 Aug 2016 22:40:34 +0000 (22:40 +0000)]
Add asm.js-style setjmp/longjmp handling for wasm
Summary: This patch adds asm.js-style setjmp/longjmp handling support for WebAssembly. It also uses JavaScript's try and catch mechanism.
Reviewers: jpp, dschuff
Subscribers: jfb, dschuff
Differential Revision: https://reviews.llvm.org/D23928
llvm-svn: 280302
Reid Kleckner [Wed, 31 Aug 2016 22:36:02 +0000 (22:36 +0000)]
Revert "Add an optional parameter with a list of undefs to extendToIndices"
This reverts commit r280268, it causes all MSVC 2013 to ICE. This
appears to have been fixed in a later MSVC 2013 update, because I cannot
reproduce it locally. That said, all upstream LLVM bots are broken right
now, so I am reverting.
Also reverts dependent change r280275, "[Hexagon] Deal with undefs when
extending live intervals".
llvm-svn: 280301
Sanjay Patel [Wed, 31 Aug 2016 22:18:43 +0000 (22:18 +0000)]
[InstCombine] allow icmp (shr exact X, C2), C fold for splat constant vectors
The enhancement to foldICmpDivConstant ( http://llvm.org/viewvc/llvm-project?view=revision&revision=280299 )
allows us to remove the ConstantInt check; no other changes needed.
llvm-svn: 280300
Sanjay Patel [Wed, 31 Aug 2016 21:57:21 +0000 (21:57 +0000)]
[InstCombine] allow icmp (div X, Y), C folds for splat constant vectors
Converting all of the overflow ops to APInt looked risky, so I've left that as a TODO.
llvm-svn: 280299
Matt Arsenault [Wed, 31 Aug 2016 21:52:27 +0000 (21:52 +0000)]
AMDGPU: Fix introducing stack access on unaligned v16i8
llvm-svn: 280298
Matt Arsenault [Wed, 31 Aug 2016 21:52:25 +0000 (21:52 +0000)]
AMDGPU: Use copy instead of mov during frame lowering
This occurs before RA pseudos are expanded. It's less
code to emit the copy.
llvm-svn: 280297
Matt Arsenault [Wed, 31 Aug 2016 21:52:21 +0000 (21:52 +0000)]
AMDGPU: Refactor frame lowering
This will make future changes easier.
llvm-svn: 280296
Enrico Granata [Wed, 31 Aug 2016 21:46:37 +0000 (21:46 +0000)]
Add a data formatter for std::function in libcxx
llvm-svn: 280295
Enrico Granata [Wed, 31 Aug 2016 21:46:21 +0000 (21:46 +0000)]
Fix an issue where a synthetic child provider could only provide a value of the same size as the containing type
llvm-svn: 280294
Zachary Turner [Wed, 31 Aug 2016 21:42:26 +0000 (21:42 +0000)]
[codeview] Add TypeVisitorCallbackPipeline.
We were kind of hacking this together before by embedding the
ability to forward requests into the TypeDeserializer. When
we want to start adding more different kinds of visitor callback
interfaces though, this doesn't scale well and is very inflexible.
So introduce the notion of a pipeline, which itself implements
the TypeVisitorCallbacks interface, but which contains an internal
list of other callbacks to invoke in sequence.
Also update the existing uses of CVTypeVisitor to use this new
pipeline class for deserializing records before visiting them
with another visitor.
llvm-svn: 280293
Tim Northover [Wed, 31 Aug 2016 21:24:02 +0000 (21:24 +0000)]
GlobalISel: use G_TYPE to annotate physregs with a type.
More preparation for dropping source types from MachineInstrs: regsters coming
out of already-selected code (i.e. non-generic instructions) don't have a type,
but that information is needed so we must add it manually.
This is done via a new G_TYPE instruction.
llvm-svn: 280292
Rui Ueyama [Wed, 31 Aug 2016 21:04:25 +0000 (21:04 +0000)]
Initialize RelativeRel for AMDGPU.
Target->RelativeRel is used for all platforms, but AMDGPU did
not send that member.
Fixes bug 30227 - RelativeRel is used, but not initialized for AMDGPU.
Differential Revision: https://reviews.llvm.org/D24100
llvm-svn: 280291
David Blaikie [Wed, 31 Aug 2016 20:54:35 +0000 (20:54 +0000)]
DebugInfo: Fix -gsplit-dwarf + -fno-split-dwarf-inlining
I tested the cases involving split-dwarf + gmlt +
no-split-dwarf-inlining, but didn't verify the simpler case without
gmlt.
The logic is, admittedly, a little hairy, but seems about as simple as I
could wrangle it.
llvm-svn: 280290
Richard Smith [Wed, 31 Aug 2016 20:38:32 +0000 (20:38 +0000)]
Don't diagnoes a mismatch between implicit and explicit exception
specifications under -fno-exceptions, just as we don't diagnose other exception
specification mismatch errors.
llvm-svn: 280289
Richard Smith [Wed, 31 Aug 2016 20:37:39 +0000 (20:37 +0000)]
Fix mishandling of deletedness for assignment operators of classes with
indirect virtual bases. We don't need to be able to invoke such an assignment
operator from the derived class, and we shouldn't delete the derived assignment
op if we can't do so.
llvm-svn: 280288
Reid Kleckner [Wed, 31 Aug 2016 20:35:01 +0000 (20:35 +0000)]
[codeview] Don't emit vshape info for classes without vfptrs
Classes with no virtual methods or whose virtual methods were all
inherited from virtual bases don't have a vfptr at offset zero. We were
crashing attempting to get the layout of that non-existent vftable.
We don't need any vshape info in this case because the debugger can
infer it from the base class information. The current class may not
introduce any virtual methods if we are in this situation.
llvm-svn: 280287