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
Saleem Abdulrasool [Wed, 31 Aug 2016 20:29:05 +0000 (20:29 +0000)]
libc++abi: fix some -Wunused-function warnings
is_initialized is only used in the no threads case or if on non ARM Apple
targets. Use the preprocessor to remove the function otherwise. NFC.
llvm-svn: 280286
Derek Schuff [Wed, 31 Aug 2016 20:27:20 +0000 (20:27 +0000)]
[WebAssembly] Disable folding of GA+reg into load/store constant offsets
Summary:
If the register has a negative value then unsigned overflow will occur;
this case is sometimes even created intentionally by LSR. For now
disable GA+reg folding. Fixes PR29127
Differential Revision: https://reviews.llvm.org/D24053
llvm-svn: 280285
Rui Ueyama [Wed, 31 Aug 2016 20:03:54 +0000 (20:03 +0000)]
Linker script: support VERSION command.
Summary:
VERSION commands define symbol versions. The grammar of the
commnad is as follows
VERSION { version-script-commands }
where version-script-commands is
[ name ] { version-definitions }.
Note that we already support version-script-commands because
it is being used for version script command.
This patch is based on George's patch https://reviews.llvm.org/D23609
Reviewers: grimar
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D24089
llvm-svn: 280284
Zachary Turner [Wed, 31 Aug 2016 20:03:14 +0000 (20:03 +0000)]
Remove unused variables.
Patch by Taras Tsugrii
llvm-svn: 280283
Sanjay Patel [Wed, 31 Aug 2016 19:49:56 +0000 (19:49 +0000)]
[InstCombine] change insertRangeTest() to use APInt instead of Constant; NFCI
This is prep work before changing the callers to also use APInt which will
allow folds for splat vectors. Currently, the callers have ConstantInt
guards in place, so no functional change intended with this commit.
llvm-svn: 280282
Saleem Abdulrasool [Wed, 31 Aug 2016 19:27:07 +0000 (19:27 +0000)]
Revert "Driver: use the canonical static library naming"
This breaks chromium and its unclear if this is actually a modern convention.
This reverts SVN r280169.
llvm-svn: 280281
Michael Zolotukhin [Wed, 31 Aug 2016 19:26:19 +0000 (19:26 +0000)]
[LoopInfo] Add verification by recomputation.
Summary:
Current implementation of LI verifier isn't ideal and fails to detect
some cases when LI is incorrect. For instance, it checks that all
recorded loops are in a correct form, but it has no way to check if
there are no more other (unrecorded in LI) loops in the function. This
patch adds a way to detect such bugs.
Reviewers: chandlerc, sanjoy, hfinkel
Subscribers: llvm-commits, silvas, mzolotukhin
Differential Revision: https://reviews.llvm.org/D23437
llvm-svn: 280280
Geoff Berry [Wed, 31 Aug 2016 19:24:10 +0000 (19:24 +0000)]
[EarlyCSE] Optionally use MemorySSA. NFC.
Summary:
Use MemorySSA, if requested, to do less conservative memory dependency
checking.
This change doesn't enable the MemorySSA enhanced EarlyCSE in the
default pipelines, so should be NFC.
Reviewers: dberlin, sanjoy, reames, majnemer
Subscribers: mcrosier, llvm-commits
Differential Revision: http://reviews.llvm.org/D19821
llvm-svn: 280279
Jason Henline [Wed, 31 Aug 2016 19:02:47 +0000 (19:02 +0000)]
Exclude examples, unittests from doc gen
Public documentation shouldn't be generated for unit test code and code
that is only meant to be used as snippets in other documentation.
llvm-svn: 280278
Jason Henline [Wed, 31 Aug 2016 19:02:44 +0000 (19:02 +0000)]
[StreamExecutor] Add Doxygen main page
Reviewers: jlebar
Subscribers: jprice, parallel_libs-commits
Differential Revision: https://reviews.llvm.org/D24066
llvm-svn: 280277
Quentin Colombet [Wed, 31 Aug 2016 18:53:32 +0000 (18:53 +0000)]
Actually check for the diagnostic to be emitted!
This makes the test case in r280273 actually useful!
llvm-svn: 280276
Krzysztof Parzyszek [Wed, 31 Aug 2016 18:52:09 +0000 (18:52 +0000)]
[Hexagon] Deal with undefs when extending live intervals
llvm-svn: 280275
Tom Stellard [Wed, 31 Aug 2016 18:46:07 +0000 (18:46 +0000)]
AMDGPU/SI: Make sure llvm.amdgcn.implicitarg.ptr() is at least 4-byte aligned
Summary: This fixes some OpenCV tests that were broken by libclc commit r276443.
Reviewers: arsenm, jvesely
Subscribers: arsenm, wdng, llvm-commits
Differential Revision: https://reviews.llvm.org/D24051
llvm-svn: 280274
Quentin Colombet [Wed, 31 Aug 2016 18:43:04 +0000 (18:43 +0000)]
[TargetPassConfig] Add a hook to tell whether GlobalISel should warm on fallback.
Thanks to this patch, we know have a way to easly see if GlobalISel
failed.
llvm-svn: 280273
Quentin Colombet [Wed, 31 Aug 2016 18:43:01 +0000 (18:43 +0000)]
[ResetMachineFunction] Emit the diagnostic isel fallback when asked.
This pass is now able to report when the function is being reset.
llvm-svn: 280272
Quentin Colombet [Wed, 31 Aug 2016 18:42:55 +0000 (18:42 +0000)]
[DiagnosticInfo] Add a diagnostic class for the fallback of ISel.
This will be used to warm when we fallback in GlobalISel.
llvm-svn: 280271
Chad Rosier [Wed, 31 Aug 2016 18:37:52 +0000 (18:37 +0000)]
Fix indent. NFC.
llvm-svn: 280270
George Burgess IV [Wed, 31 Aug 2016 18:14:15 +0000 (18:14 +0000)]
Fix a typo in a comment.
llvm-svn: 280269
Krzysztof Parzyszek [Wed, 31 Aug 2016 18:02:19 +0000 (18:02 +0000)]
Add an optional parameter with a list of undefs to extendToIndices
llvm-svn: 280268
Kevin Enderby [Wed, 31 Aug 2016 17:57:46 +0000 (17:57 +0000)]
Next set of additional error checks for invalid Mach-O files for bad load commands
that use the Mach::linkedit_data_command type for the load commands that are
currently used in the MachOObjectFile constructor.
This contains the missing checks for LC_DATA_IN_CODE and
LC_LINKER_OPTIMIZATION_HINT load commands and the fields for the
Mach::linkedit_data_command type. Checking for other load commands that
use this type will be added later.
Also fixed a couple of places that was using sizeof(MachOObjectFile::LoadCommandInfo)
that should have been using sizeof(MachO::load_command).
llvm-svn: 280267
Kostya Serebryany [Wed, 31 Aug 2016 17:52:55 +0000 (17:52 +0000)]
[sanitizer] extend SizeClassMap to take more template parameters, add VeryCompactSizeClassMap for testing purposes
llvm-svn: 280266
Geoff Berry [Wed, 31 Aug 2016 17:45:31 +0000 (17:45 +0000)]
[EarlyCSE] Allow forwarding a non-invariant load into an invariant load.
Reviewers: sanjoy
Subscribers: mcrosier, llvm-commits
Differential Revision: https://reviews.llvm.org/D23935
llvm-svn: 280265
Pavel Labath [Wed, 31 Aug 2016 17:43:49 +0000 (17:43 +0000)]
Always rely on CFI unwind info for linux vdso
Summary:
The vdso is full of hand-written assembly which the instruction emulator has a hard time
understanding. Luckily, the kernel already provides us with correct unwind info for them. So
let's use it.
This fixes (at least) the AssertingInferiorTestCase.test_inferior_asserting_disassemble test on
android N i386.
Reviewers: tberghammer
Subscribers: tberghammer, danalbert, lldb-commits
Differential Revision: https://reviews.llvm.org/D24079
llvm-svn: 280264
Chad Rosier [Wed, 31 Aug 2016 17:41:12 +0000 (17:41 +0000)]
[SLP] Update the debug based on Michael's suggestion.
Passing the types/opcode check still doesn't guarantee we'll actually vectorize.
Therefore, just make it clear we're attempting to vectorize.
llvm-svn: 280263
Geoff Berry [Wed, 31 Aug 2016 17:39:21 +0000 (17:39 +0000)]
[LangRef] Clarify !invariant.load semantics.
Based on discussion on llvm-dev.
llvm-svn: 280262
Pavel Labath [Wed, 31 Aug 2016 17:38:17 +0000 (17:38 +0000)]
Fixup TestPyObjSynthProvider.py and enable it again
Summary:
- copies the new file in the cmake build
- adds an additional import statement
- marks the test as no-debug-info specific, as it seems to be testing a python feature
Reviewers: granata.enrico
Subscribers: lldb-commits
Differential Revision: https://reviews.llvm.org/D24074
llvm-svn: 280261
Chad Rosier [Wed, 31 Aug 2016 17:31:09 +0000 (17:31 +0000)]
[SLP] Sink debug after checking for matching types/opcode.
Differential Revision: https://reviews.llvm.org/D24090
llvm-svn: 280260
Ivan Krasin [Wed, 31 Aug 2016 17:23:05 +0000 (17:23 +0000)]
Fix UBSan bot by not passing NULL into memcpy src.
Summary:
UBSan complains like the following:
tools/lld/COFF/Writer.cpp:97:15: runtime error: null pointer passed as argument 2, which is declared to never be null
The reason is that the vector could be empty.
Reviewers: rsmith
Subscribers: Eugene.Zelenko, kcc
Differential Revision: https://reviews.llvm.org/D24050
llvm-svn: 280259
Davide Italiano [Wed, 31 Aug 2016 17:02:44 +0000 (17:02 +0000)]
[lib/LTO] Factor out logic for running passes.
This is in preparation for adding an option
to run a custom pipeline with the new PM. It's
currently used in lld.
llvm-svn: 280258
Tim Shen [Wed, 31 Aug 2016 16:48:13 +0000 (16:48 +0000)]
s/static inline/static/ for headers I have changed in r279475. NFC.
llvm-svn: 280257