123034 Commits

Author SHA1 Message Date
Bill Schmidt
e2e776f769 [PPC] Fix PR24686 by failing assembly for an invalid relocation
PR24686 identifies a problem where a relocation expression is invalid
when not all of the symbols in the expression can be locally
resolved.  This causes the compiler to request a PC-relative half16ds
relocation, which is nonsensical for PowerPC.  This patch recognizes
this situation and ensures we fail the assembly cleanly.

Test case provided by Anton Blanchard.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251027 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 15:53:44 +00:00
Rafael Espindola
1183c6f920 Avoid hash lookups when finalizing StringTableBuilder. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251024 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 15:26:35 +00:00
Rafael Espindola
603127adcc Use array_pod_sort. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251023 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 15:15:44 +00:00
Pirama Arumuga Nainar
bf967a2851 Fix incorrect target triple in fp16-promote.ll
Summary:
Hyphens were missing from the triple, causing it to be parsed
incorrectly.  This patch updates the triple and makes necessary
changes to the expected output.

Patch is from Vinicius Tinti.

Reviewers: ab, tinti

Subscribers: srhines, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251020 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 14:15:00 +00:00
Daniel Sanders
394b34cb8b [mips][mips16] Fix typo in FileCheck directive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251019 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 14:01:52 +00:00
Asaf Badouh
4673f9ea5e [X86][AVX512] extend vcvtph2ps to support xmm/ymm and sae versions
Differential Revision: http://reviews.llvm.org/D13945


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251018 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 14:01:16 +00:00
James Molloy
6085182230 [GlobalsAA] Loosen an overly conservative bailout
Instead of bailing out when we see loads, analyze them. If we can prove that the loaded-from address must escape, then we can conclude that a load from that address must escape too and therefore cannot alias a non-addr-taken global.

When checking if a Value can alias a non-addr-taken global, if the Value is a LoadInst of a non-global, recurse instead of bailing.

If we can follow a trail of loads up to some base that is captured, we know by inference that all the loads we followed are also captured.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251017 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 13:44:26 +00:00
James Molloy
dc5a8f2aac [BasicAA] Non-equal indices in a GEP of a SequentialType don't overlap
If the final indices of two GEPs can be proven to not be equal, and
the GEP is of a SequentialType (not a StructType), then the two GEPs
do not alias.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251016 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 13:28:18 +00:00
James Molloy
af1480aea6 [ValueTracking] Add a new predicate: isKnownNonEqual()
isKnownNonEqual(A, B) returns true if it can be determined that A != B.

At the moment it only knows two facts, that a non-wrapping add of nonzero to a value cannot be that value:

A + B != A [where B != 0, addition is nsw or nuw]

and that contradictory known bits imply two values are not equal.

This patch also hooks this up to InstSimplify; InstSimplify had a peephole for the first fact but not the second so this teaches InstSimplify a new trick too (alas no measured performance impact!)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251012 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 13:18:42 +00:00
Manuel Klimek
b217a9a460 Fix add_llvm_external_project.
r250835 unintentionally discarded the optional parameter to the
add_llvm_external_project() macro that may point to a path when the said
path is different from ${name}. This should fix it by passing ${ARGN} on
to add_llvm_subdirectory(). The problem manifests itself with e.g.
add_llvm_external_project(clang-tools-extra extra) from
clang/tools/CMakeLists.txt

Patch by Luchesar V. Iliev.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251001 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 08:31:46 +00:00
Pawel Bylica
5db5950151 Use range-based for loop in sys::path::append(). NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250999 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 08:12:15 +00:00
Elena Demikhovsky
26658aadc6 AVX-512: Fixed a bug in select_cc for i1 type
Fixed faiure:
LLVM ERROR: Cannot select: t33: i1 = select_cc t25, Constant:i32<0>, t45, t42, seteq:ch

added a test

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250996 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 07:10:29 +00:00
Elena Demikhovsky
98f84ad174 Partially reverted changes from r250686
Clang runtime failure was reported.
   Assertion failed: (isExtended() && "Type is not extended!"), function getTypeForEVT
I'll need to add a proper handling for PointerType in masked load/store intrinsics.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250995 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 06:20:29 +00:00
Sanjoy Das
2779d5708c [IR] Add a makeNoWrapRegion method to ConstantRange
Summary: This will be used in a future change to ScalarEvolution.

Reviewers: hfinkel, reames, nlewycky

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250975 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 03:12:57 +00:00
Sanjoy Das
d53277a434 [OperandBundles] Teach AliasAnalysis about operand bundles
Summary:
If a `CallSite` has operand bundles, then do not peek into the called
function to get a more precise `ModRef` answer.

This is tested using `argmemonly`, `-basicaa` and `-gvn`; but the
functionality is not specific to any of these.

Depends on D13961

Reviewers: reames, chandlerc

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250974 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 03:12:51 +00:00
Sanjoy Das
f1c277c270 [OperandBundles] Make function attributes conservatively correct
Summary:
This makes attribute accessors on `CallInst` and `InvokeInst` do the
(conservatively) right thing.  This essentially involves, in some
cases, *not* falling back querying the attributes on the called
`llvm::Function` when operand bundles are present.

Attributes locally present on the `CallInst` or `InvokeInst` will still
override operand bundle semantics.  The LangRef has been amended to
reflect this.  Note: this change does not do anything prevent
`-function-attrs` from inferring `CallSite` local attributes after
inspecting the called function -- that will be done as a separate
change.

I've used `-adce` and `-early-cse` to test these changes.  There is
nothing special about these passes (and they did not require any
changes) except that they seemed be the easiest way to write the tests.

This change does not add deal with `argmemonly`.  That's a later change
because alias analysis requires a related fix before `argmemonly` can be
tested.

Reviewers: reames, chandlerc

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250973 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 03:12:22 +00:00
JF Bastien
55a57a7674 WebAssembly: fix more syntax
br_if shouldn't start with a dot.
div and rem went from prefix u/s to suffix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250972 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 02:32:50 +00:00
Pete Cooper
ad5bea8202 Add missing load/store flags to thumb2 instructions.
These were the cause of a verifier error when building 7zip with
-verify-machineinstrs.  Running 'make check' with the verifier
triggered the same error on the test here so i've updated the test
to run the verifier on one of its runs instead of adding a new one.

While looking at this code, there was a stale comment that these
instructions were only used for disassembly.  This probably used to
be the case, but they are now used in the 'ARM load / store optimization pass' too.

This reapplies r242300 which was reverted in r242428 due to bot failures.

Ultimately those failures were spurious and completely unrelated to this commit.  I reverted this
at the time because it was thought to be at fault.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250969 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 01:48:57 +00:00
David Majnemer
e7b7bf7e75 Attempt to fix formatting for operand bundles
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250968 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 01:46:38 +00:00
David Blaikie
bf71837ab0 Update LangRef for changes to the alias textual IR format to support typeless pointer work
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250967 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 01:17:29 +00:00
David Majnemer
828759786d [WinEH] Remove extraneous call to emitEHRegistrationOffsetLabel
It's a relic from the earlier implementation, let's remove it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250964 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 23:20:39 +00:00
Justin Bogner
6ca71e2374 [PM]: Fix a doc typo. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250962 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 22:51:59 +00:00
Matt Arsenault
96d418302e AMDGPU: Fix adding redundant m0 uses
BuildMI already adds these since they are defined correctly now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250961 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 22:37:51 +00:00
Matt Arsenault
caa831cabd AMDGPU: Fix verifier error in SIFoldOperands
There may be other use operands that also need their kill flags cleared.

This happens in a few tests when SIFoldOperands is moved after
PeepholeOptimizer.

PeepholeOptimizer rewrites cases that look like:
%vreg0 = ...
%vreg1 = COPY %vreg0
use %vreg1<kill>
%vreg2 = COPY %vreg0
use %vreg2<kill>

to use the earlier source to
%vreg0 = ...
use %vreg0
use %vreg0

Currently SIFoldOperands sees the copied registers, so there is
only one use. So far I haven't managed to come up with a test
that currently has multiple uses of a foldable VGPR -> VGPR copy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250960 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 22:37:50 +00:00
Matt Arsenault
07437a8e79 AMDGPU: Split DiagnosticInfoUnsupported into its own file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250959 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 22:37:46 +00:00
Davide Italiano
8c651fbc41 [JIT] Towards a working small memory model.
This commit introduces an option, --preallocate, so that we can get memory
upfront and use it in small memory model tests (in order to get
reliable results).

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250956 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 22:12:03 +00:00
Matt Arsenault
110f55db52 AMDGPU: Simplify VOP3 operand legalization.
This was checking for a variety of situations that should
never happen. This saves a tiny bit of compile time.

We should not be selecting instructions with invalid operands in the
first place. Most of the time for registers copys are inserted
to the correct operand register class.

For VOP3, since all operand types are supported and literal
constants never are, we just need to verify the constant bus
requirements (all immediates should be legal inline ones).

The only possibly tricky case to maybe worry about is if when
legalizing operands in moveToVALU with s_add_i32 and similar
instructions. If the original s_add_i32 had a literal constant
and we need to replace it with v_add_i32_e64 we would have an
unsupported literal operand.  However, I don't think we should worry
about that because SIFoldOperands should handle folding literal
constant operands into the SALU instructions based on the uses.
At SIFoldOperands time, the legality and profitability of
operand types is a bit different.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250951 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 21:51:02 +00:00
Michael Liao
19b672882f [InstCombine] Revise the test case to match full sequene
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250950 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 21:50:58 +00:00
Matt Arsenault
ca4c86d2fd AMDGPU: Fix not checking implicit operands in verifyInstruction
When verifying constant bus restrictions, this wasn't catching
uses in implicit operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250948 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 21:15:01 +00:00
Matt Arsenault
8a10a4556b Use numeric_limits instead of LLONG_MAX
This is a build fix for configurations where LLONG_MAX is
not defined in system headers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250946 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 21:10:12 +00:00
Matt Arsenault
bcb3afc5fb LegalizeDAG: Implement promote for build_vector
This will be used in future commits for AMDGPU to promote
operations on i64 vectors into operations on 32-bit vector
components.

This will be used / tested in future AMDGPU commits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250945 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 21:10:10 +00:00
Vedant Kumar
32310b78d7 [Verifier] Minor comment update, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250943 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 20:33:31 +00:00
Keno Fischer
9e69560417 [RuntimeDyld] Ignore ST_FILE symbols when constructing GlobalSymbolTable
Summary: ELF's STT_File symbols may overlap with regular globals in
other files, so we should ignore them here in order to avoid having
bogus entries in the symbol table that confuse us when resolving relocations.

Reviewers: lhames

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250942 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 20:22:04 +00:00
Lang Hames
2268dabec5 [Orc] Clean up a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250940 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 20:13:41 +00:00
Joerg Sonnenberger
f1ad08798b Drop assert that a call with struct return goes to a function with sret
attribute. Clang incorrectly misses it on __muldc3 and friends and the
type system doesn't include it properly either.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250938 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 20:05:01 +00:00
Reid Kleckner
062c18d550 [WinEH] Add test for llvm.va.start in catchpad
It already works, but we should have a test for it.

This used to be PR23094 in the old model.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250936 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 19:54:40 +00:00
Teresa Johnson
bfe573bc32 Silence Visual C++ warning in function summary parsing code (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250929 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 19:25:14 +00:00
Sanjay Patel
e2266e94c8 [x86] move recursive add match for LEA to helper function; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250926 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 18:56:06 +00:00
Yaron Keren
ba3f35ef57 Revert r250923 as config.h is not an installed header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250924 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 18:36:52 +00:00
Yaron Keren
a41a157f21 Include llvm/Config/config.h in FileSystem.h as it depends upon HAVE_SYS_STAT_H which is defined (or not) in config.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250923 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 18:28:35 +00:00
David Majnemer
9f1da8432d [SimplifyCFG] Don't use-after-free an SSA value
SimplifyTerminatorOnSelect didn't consider the possibility that the
condition might be related to one of PHI nodes.

This fixes PR25267.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250922 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 18:22:24 +00:00
Peter Zotov
7d30a2ed8b [OCaml] Expose Llvm.{set_,}unnamed_addr.
Patch by Jacques-Pascal Deplaix <jp.deplaix@gmail.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250912 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 17:43:02 +00:00
Craig Topper
8b64b61d9a [X86] Add AMD mwaitx, monitorx, and clzero instructions to the assembly parser and disassembler.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250911 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 17:26:45 +00:00
Sanjay Patel
387446b597 [x86] add test case that shows holes in LEA isel
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250910 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 17:24:00 +00:00
Kevin Enderby
da785374d9 Backing out commit r250906 as it broke lld.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250908 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 17:13:20 +00:00
Kevin Enderby
e36c14fbed This removes the eating of the error in Archive::Child::getSize() when the characters
in the size field in the archive header for the member is not a number.  To do this we
have all of the needed methods return ErrorOr to push them up until we get out of lib.
Then the tools and can handle the error in whatever way is appropriate for that tool.

So the solution is to plumb all the ErrorOr stuff through everything that touches archives.
This include its iterators as one can create an Archive object but the first or any other
Child object may fail to be created due to a bad size field in its header.

Thanks to Lang Hames on the changes making child_iterator contain an
ErrorOr<Child> instead of a Child and the needed changes to ErrorOr.h to add
operator overloading for * and -> .

We don’t want to use llvm_unreachable() as it calls abort() and is produces a “crash”
and using report_fatal_error() to move the error checking will cause the program to
stop, neither of which are really correct in library code. There are still some uses of
these that should be cleaned up in this library code for other than the size field.

Also corrected the code where the size gets us to the “at the end of the archive”
which is OK but past the end of the archive will return object_error::parse_failed now.

The test cases use archives with text files so one can see the non-digit character,
in this case a ‘%’, in the size field.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250906 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 16:59:24 +00:00
Craig Topper
94f8b07c97 [Option] Use an ArrayRef to store the Option Infos in OptTable. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250901 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 16:30:42 +00:00
Vedant Kumar
f890225b78 [llvm-cov] Adjust column widths for function and file reports
Previously, we only expanded function and filename column widths when
rendering file reports. This commit makes the change for function
reports as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250900 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 16:03:32 +00:00
Daniel Sanders
49d94c2d2d [mips][mips16] Re-work the inline assembly stubs to work with IAS. NFC.
Summary:
Previously, we were inserting an InlineAsm statement for each line of the
inline assembly. This works for GAS but it triggers prologue/epilogue
emission when IAS is in use. This caused:
    .set noreorder
    .cpload $25
to be emitted as:
    .set push
    .set reorder
    .set noreorder
    .set pop
    .set push
    .set reorder
    .cpload $25
    .set pop
which led to assembler errors and caused the test to fail.

The whitespace-after-comma changes included in this patch are necessary to
match the output when IAS is in use.

Reviewers: vkalintiris

Subscribers: rkotler, llvm-commits, dsanders

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250895 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 12:44:14 +00:00
Chandler Carruth
198a6c5be5 [AA] Enhance the new AliasAnalysis infrastructure with an optional
"external" AA wrapper pass.

This is a generic hook that can be used to thread custom code into the
primary AAResultsWrapperPass for the legacy pass manager in order to
allow it to merge external AA results into the AA results it is
building. It does this by threading in a raw callback and so it is
*very* powerful and should serve almost any use case I have come up with
for extending the set of alias analyses used. The only thing not well
supported here is using a *different order* of alias analyses. That form
of extension *is* supportable with the new pass manager, and I can make
the callback structure here more elaborate to support it in the legacy
pass manager if this is a critical use case that people are already
depending on, but the only use cases I have heard of thus far should be
reasonably satisfied by this simpler extension mechanism.

It is hard to test this using normal facilities (the built-in AAs don't
use this for obvious reasons) so I've written a fairly extensive set of
custom passes in the alias analysis unit test that should be an
excellent test case because it models the out-of-tree users: it adds
a totally custom AA to the system. This should also serve as
a reasonably good example and guide for out-of-tree users to follow in
order to rig up their existing alias analyses.

No support in opt for commandline control is provided here however. I'm
really unhappy with the kind of contortions that would be required to
support that. It would fully re-introduce the analysis group
self-recursion kind of patterns. =/

I've heard from out-of-tree users that this will unblock their use cases
with extending AAs on top of the new infrastructure and let us retain
the new analysis-group-free-world.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250894 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 12:15:19 +00:00