7 years ago[OCaml] Allow out-of-tree builds of LLVM bindings.
Peter Zotov [Tue, 13 Jan 2015 12:17:56 +0000 (12:17 +0000)]
[OCaml] Allow out-of-tree builds of LLVM bindings.

In order to use this feature, configure LLVM as usual,
but then build and install it as:

   make all install SYSTEM_LLVM_CONFIG=llvm-config

where llvm-config is the llvm-config binary installed on your
system (possibly llvm-config-VERSION on e.g. Debian).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225787 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoSLPVectorizer: Cache results from memory alias checking.
Erik Eckstein [Tue, 13 Jan 2015 11:37:51 +0000 (11:37 +0000)]
SLPVectorizer: Cache results from memory alias checking.

This speeds up the dependency calculations for blocks with many load/store/call instructions.
Beside the improved runtime, there is no functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225786 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] In the PassManager template, remove a pointless indirection through
Chandler Carruth [Tue, 13 Jan 2015 11:36:43 +0000 (11:36 +0000)]
[PM] In the PassManager template, remove a pointless indirection through
a nested class template for the PassModel, and use the T-suffix for the
two typedefs to match the code in the AnalysisManager.

This is the last of the fairly fundamental code cleanups here. Will be
focusing on the printing of analyses next to finish that aspect off.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225785 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] Remove the 'AnalysisManagerT' type parameter from numerous layers
Chandler Carruth [Tue, 13 Jan 2015 11:31:43 +0000 (11:31 +0000)]
[PM] Remove the 'AnalysisManagerT' type parameter from numerous layers
of templates in the new pass manager.

The analysis manager is now itself just a template predicated on the IR
unit. This makes lots of the templates really trivial and more clear:
they are all parameterized on a single type, the IR unit's type.
Everything else is a function of that. To me, this is a really nice
cleanup of the APIs and removes a layer of 'magic' and 'indirection'
that really wasn't there and just got in the way of understanding what
is going on here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225784 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] Refactor the new pass manager to use a single template to implement
Chandler Carruth [Tue, 13 Jan 2015 11:13:56 +0000 (11:13 +0000)]
[PM] Refactor the new pass manager to use a single template to implement
the generic functionality of the pass managers themselves.

In the new infrastructure, the pass "manager" isn't actually interesting
at all. It just pipelines a single chunk of IR through N passes. We
don't need to know anything about the IR or the passes to do this really
and we can replace the 3 implementations of the exact same functionality
with a single generic PassManager template, complementing the single
generic AnalysisManager template.

I've left typedefs in place to give convenient names to the various
obvious instantiations of the template.

With this, I think I've nuked almost all of the redundant logic in the
managers, and I think the overall design is actually simpler for having
single templates that clearly indicate there is no special logic here.
The logging is made somewhat more annoying by this change, but I don't
think the difference is worth having heavy-weight traits to help log

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225783 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoUpdate release notes wrt OCaml bindings.
Peter Zotov [Tue, 13 Jan 2015 09:48:02 +0000 (09:48 +0000)]
Update release notes wrt OCaml bindings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225779 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OCaml] Use $CAMLORIGIN, an rpath-$ORIGIN-like mechanism in OCaml.
Peter Zotov [Tue, 13 Jan 2015 09:47:59 +0000 (09:47 +0000)]
[OCaml] Use $CAMLORIGIN, an rpath-$ORIGIN-like mechanism in OCaml.

As a result, installations of LLVM in non-standard locations
will not require passing custom -ccopt -L flags when building
the binary, nor absolute paths would be embedded in the cma/cmxa
files. Additionally, the executables will not require changes
has to be set for ocamlc without -custom.

See http://caml.inria.fr/mantis/view.php?id=6642.
Note that the patch is approved, but not merged yet.
It will be released in 4.03 and likely 4.02.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225778 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR/MetadataTest.cpp: Appease msc17 to avoid initializer list.
NAKAMURA Takumi [Tue, 13 Jan 2015 08:13:46 +0000 (08:13 +0000)]
IR/MetadataTest.cpp: Appease msc17 to avoid initializer list.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225775 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoPeephole opt needs optimizeSelect() to keep track of newly created MIs
Mehdi Amini [Tue, 13 Jan 2015 07:07:13 +0000 (07:07 +0000)]
Peephole opt needs optimizeSelect() to keep track of newly created MIs

Peephole optimizer is scanning a basic block forward. At some point it
needs to answer the question "given a pointer to an MI in the current
BB, is it located before or after the current instruction".
To perform this, it keeps a set of the MIs already seen during the scan,
if a MI is not in the set, it is assumed to be after.
It means that newly created MIs have to be inserted in the set as well.

This commit passes the set as an argument to the target-dependent
optimizeSelect() so that it can properly update the set with the
(potentially) newly created MIs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225772 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agofix {typo, build failure} in r225760
Ramkumar Ramachandra [Tue, 13 Jan 2015 04:17:47 +0000 (04:17 +0000)]
fix {typo, build failure} in r225760

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225762 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoStandardize {pred,succ,use,user}_empty()
Ramkumar Ramachandra [Tue, 13 Jan 2015 03:46:47 +0000 (03:46 +0000)]
Standardize {pred,succ,use,user}_empty()

The functions {pred,succ,use,user}_{begin,end} exist, but many users
have to check *_begin() with *_end() by hand to determine if the
BasicBlock or User is empty. Fix this with a standard *_empty(),
demonstrating a few usecases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225760 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoARM: prepare prefix parsing for improved AAELF support
Saleem Abdulrasool [Tue, 13 Jan 2015 03:22:49 +0000 (03:22 +0000)]
ARM: prepare prefix parsing for improved AAELF support

AAELF specifies a number of ELF specific relocation types which have custom
prefixes for the symbol reference.  Switch the parser to be more table driven
with an idea of file formats for which they apply.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225758 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] Fold all three analysis managers into a single AnalysisManager
Chandler Carruth [Tue, 13 Jan 2015 02:51:47 +0000 (02:51 +0000)]
[PM] Fold all three analysis managers into a single AnalysisManager

This consolidates three copies of nearly the same core logic. It adds
"complexity" to the ModuleAnalysisManager in that it makes it possible
to share a ModuleAnalysisManager across multiple modules... But it does
so by deleting *all of the code*, so I'm OK with that. This will
naturally make fixing bugs in this code much simpler, etc.

The only down side here is that we have to use 'typename' and 'this->'
in various places, and the implementation is lifted into the header.
I'll take that for the code size reduction.

The convenient names are still typedef-ed and used throughout so that
users can largely ignore this aspect of the implementation.

The follow-up change to this will do the exact same refactoring for the
PassManagers. =D

It turns out that the interesting different code is almost entirely in
the adaptors. At the end, that should be essentially all that is left.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225757 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDisable a warning for self move since the test is checking for this behavior.
Richard Trieu [Tue, 13 Jan 2015 02:10:33 +0000 (02:10 +0000)]
Disable a warning for self move since the test is checking for this behavior.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225754 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agofix typo; NFC
Sanjay Patel [Tue, 13 Jan 2015 01:51:52 +0000 (01:51 +0000)]
fix typo; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225753 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRename llvm.recoverframeallocation to llvm.framerecover
Reid Kleckner [Tue, 13 Jan 2015 01:51:34 +0000 (01:51 +0000)]
Rename llvm.recoverframeallocation to llvm.framerecover

This name is less descriptive, but it sort of puts things in the
'llvm.frame...' namespace, relating it to frameallocate and
frameaddress. It also avoids using "allocate" and "allocation" together.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225752 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] Fix another place where I was using an overly generic T&& for the
Chandler Carruth [Tue, 13 Jan 2015 01:44:56 +0000 (01:44 +0000)]
[PM] Fix another place where I was using an overly generic T&& for the
IR unit to directly use IRUnitT& for now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225750 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Use unique_ptr, NFC
Duncan P. N. Exon Smith [Tue, 13 Jan 2015 00:57:27 +0000 (00:57 +0000)]
IR: Use unique_ptr, NFC

Use `std::unique_ptr<>`, as suggested by David Blaikie.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225749 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoPhabricator calls it "subscriber" not "cc"
Paul Robinson [Tue, 13 Jan 2015 00:50:31 +0000 (00:50 +0000)]
Phabricator calls it "subscriber" not "cc"

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225747 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd the llvm.frameallocate and llvm.recoverframeallocation intrinsics
Reid Kleckner [Tue, 13 Jan 2015 00:48:10 +0000 (00:48 +0000)]
Add the llvm.frameallocate and llvm.recoverframeallocation intrinsics

These intrinsics allow multiple functions to share a single stack
allocation from one function's call frame. The function with the
allocation may only perform one allocation, and it must be in the entry

Functions accessing the allocation call llvm.recoverframeallocation with
the function whose frame they are accessing and a frame pointer from an
active call frame of that function.

These intrinsics are very difficult to inline correctly, so the
intention is that they be introduced rarely, or at least very late
during EH preparation.

Reviewers: echristo, andrew.w.kaylor

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225746 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Remove an invalid assertion when replacing resolved operands
Duncan P. N. Exon Smith [Tue, 13 Jan 2015 00:46:34 +0000 (00:46 +0000)]
IR: Remove an invalid assertion when replacing resolved operands

This adds back the testcase from r225738, and adds to it.  Looks like we
need both sides for now (the assertion was incorrect both ways, and
although it seemed reasonable (when written correctly) it wasn't
particularly important).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225745 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoCombine fcmp + select to fminnum / fmaxnum if no nans and legal
Matt Arsenault [Tue, 13 Jan 2015 00:43:00 +0000 (00:43 +0000)]
Combine fcmp + select to fminnum / fmaxnum if no nans and legal

Also require unsafe FP math for no since there isn't a way to
test for signed zeros.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225744 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] Re-clang-format much of this code as the code has changed some and
Chandler Carruth [Tue, 13 Jan 2015 00:36:47 +0000 (00:36 +0000)]
[PM] Re-clang-format much of this code as the code has changed some and
so has clang-format. Notably, this fixes a bunch of formatting in the
CGSCC pass manager side of things that has been improved in clang-format

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225743 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert "IR: Fix an inverted assertion when replacing resolved operands"
Duncan P. N. Exon Smith [Tue, 13 Jan 2015 00:34:21 +0000 (00:34 +0000)]
Revert "IR: Fix an inverted assertion when replacing resolved operands"

This reverts commit r225738.  Maybe the assertion is just plain wrong,
but this version fails on WAY more bots.  I'll make sure both ways work
in a follow-up but I want to get bots green in the meantime.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225742 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoGrammar and spelling.
Eric Christopher [Tue, 13 Jan 2015 00:21:14 +0000 (00:21 +0000)]
Grammar and spelling.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225740 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Fix an inverted assertion when replacing resolved operands
Duncan P. N. Exon Smith [Tue, 13 Jan 2015 00:10:38 +0000 (00:10 +0000)]
IR: Fix an inverted assertion when replacing resolved operands

Add a unit test, since this bug was only exposed by clang tests.  Thanks
to Rafael for tracking this down!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225738 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRelease merge script: don't actually commit the merge
Hans Wennborg [Tue, 13 Jan 2015 00:07:31 +0000 (00:07 +0000)]
Release merge script: don't actually commit the merge

Instead, just present the command for committing it. This way,
the user can test the merge locally, resolve conflicts, etc.
before committing, which seems much safer to me.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225737 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRelease tag script: add -revision option
Hans Wennborg [Tue, 13 Jan 2015 00:07:29 +0000 (00:07 +0000)]
Release tag script: add -revision option

It seems useful to be able to create the branch at a revision that looks good
on the buildbots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225736 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRelease tag script: add -dry-run flag
Hans Wennborg [Tue, 13 Jan 2015 00:07:22 +0000 (00:07 +0000)]
Release tag script: add -dry-run flag

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225735 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDebug Info: Move support for constants into DwarfExpression.
Adrian Prantl [Tue, 13 Jan 2015 00:04:06 +0000 (00:04 +0000)]
Debug Info: Move support for constants into DwarfExpression.
Move the declaration of DebugLocDwarfExpression into DwarfExpression.h
because it needs to be accessed from AsmPrinterDwarf.cpp and DwarfDebug.cpp


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225734 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Split out writeMDTuple(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 23:45:31 +0000 (23:45 +0000)]
IR: Split out writeMDTuple(), NFC

Prepare for more subclasses of `UniquableMDNode` than `MDTuple`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225732 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoMake DwarfExpression store the AsmPrinter instead of the TargetMachine.
Adrian Prantl [Mon, 12 Jan 2015 23:36:56 +0000 (23:36 +0000)]
Make DwarfExpression store the AsmPrinter instead of the TargetMachine.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225731 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoremove extra semicolon
Adrian Prantl [Mon, 12 Jan 2015 23:36:50 +0000 (23:36 +0000)]
remove extra semicolon

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225730 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agomusttail: Only set the inreg flag for fastcall and vectorcall
Reid Kleckner [Mon, 12 Jan 2015 23:28:23 +0000 (23:28 +0000)]
musttail: Only set the inreg flag for fastcall and vectorcall

Otherwise we'll attempt to forward ECX, EDX, and EAX for cdecl and
stdcall thunks, leaving us with no scratch registers for indirect call

Fixes PR22052.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225729 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoR600/SI: Remove redundant setting expand on f64 vectors
Matt Arsenault [Mon, 12 Jan 2015 23:13:00 +0000 (23:13 +0000)]
R600/SI: Remove redundant setting expand on f64 vectors

None of these are legal types already, so they default to

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225728 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Unbreak the MSVC build after r225689
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 23:09:14 +0000 (23:09 +0000)]
IR: Unbreak the MSVC build after r225689

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225727 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRun clang-format on the parts of AsmPrinterDwarf where it improves the
Adrian Prantl [Mon, 12 Jan 2015 23:03:23 +0000 (23:03 +0000)]
Run clang-format on the parts of AsmPrinterDwarf where it improves the

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225726 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDebug Info: Add a virtual destructor to DwarfExpression.
Adrian Prantl [Mon, 12 Jan 2015 22:59:28 +0000 (22:59 +0000)]
Debug Info: Add a virtual destructor to DwarfExpression.
Thanks Chandler for noticing!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225724 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PM] Sink the reference vs. value decision for IR units out of the
Chandler Carruth [Mon, 12 Jan 2015 22:53:31 +0000 (22:53 +0000)]
[PM] Sink the reference vs. value decision for IR units out of the
templated interface.

So far, every single IR unit I can come up with has address-identity.
That is, when two units of IR are both active in LLVM, their addresses
will be distinct of the IR is distinct. This is clearly true for
Modules, Functions, BasicBlocks, and Instructions. It turns out that the
only practical way to make the CGSCC stuff work the way we want is to
make it true for SCCs as well. I expect this pattern to continue.

When first designing the pass manager code, I kept this dimension of
freedom in the type parameters, essentially allowing for a wrapper-type
whose address did not form identity. But that really no longer makes
sense and is making the code more complex or subtle for no gain. If we
ever have an actual use case for this, we can figure out what makes
sense then and there. It will be better because then we will have the
actual example in hand.

While the simplifications afforded in this patch are fairly small
(mostly sinking the '&' out of many type parameters onto a few
interfaces), it would have become much more pronounced with subsequent
changes. I have a sequence of changes that will completely remove the
code duplication that currently exists between all of the pass managers
and analysis managers. =] Should make things much cleaner and avoid bug
fixing N times for the N pass managers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225723 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Remove incorrect comment, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:53:18 +0000 (22:53 +0000)]
IR: Remove incorrect comment, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225722 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Fix unit test memory leak reported by ASan
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:46:15 +0000 (22:46 +0000)]
IR: Fix unit test memory leak reported by ASan


Thanks Alexey for pointing me to this!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225721 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoUntwine this expression. Thanks to David for noticing!
Adrian Prantl [Mon, 12 Jan 2015 22:39:14 +0000 (22:39 +0000)]
Untwine this expression. Thanks to David for noticing!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225720 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[X86][SSE] Minor regression fix for r225551
Simon Pilgrim [Mon, 12 Jan 2015 22:38:08 +0000 (22:38 +0000)]
[X86][SSE] Minor regression fix for r225551

r225551 vector byte shuffle optimization caused an assertion as fully zeroable vectors can be produced under certain circumstances. This fix drops the assert and returns a zero vector where the assert would have failed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225718 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDebug Info: Implement DwarfUnit::addRegisterOpPiece() using DwarfExpression.
Adrian Prantl [Mon, 12 Jan 2015 22:37:16 +0000 (22:37 +0000)]
Debug Info: Implement DwarfUnit::addRegisterOpPiece() using DwarfExpression.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225717 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoBitcode: Range-based for, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:35:34 +0000 (22:35 +0000)]
Bitcode: Range-based for, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225716 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoBitcode: Add abbreviation for METADATA_NAME
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:34:10 +0000 (22:34 +0000)]
Bitcode: Add abbreviation for METADATA_NAME

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225715 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoBitcode: Range-based for, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:33:00 +0000 (22:33 +0000)]
Bitcode: Range-based for, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225714 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoBitcode: Range-based for, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:31:35 +0000 (22:31 +0000)]
Bitcode: Range-based for, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225713 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoBitcode: Simplify emission of METADATA_BLOCK
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:30:34 +0000 (22:30 +0000)]
Bitcode: Simplify emission of METADATA_BLOCK

Refactor logic so that we know up-front whether to open a block and
whether we need an MDString abbreviation.

This is almost NFC, but will start emitting `MDString` abbreviations
when the first record is not an `MDString`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225712 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: Use subclass API instead of MDNode wrappers, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:27:39 +0000 (22:27 +0000)]
AsmParser: Use subclass API instead of MDNode wrappers, NFC

Use subclass API instead of the wrappers in `MDNode` in the assembly
parser.  This will make the code easier to follow once we have multiple

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225711 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: Factor duplicated code into ParseMDNode(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:26:48 +0000 (22:26 +0000)]
AsmParser: Factor duplicated code into ParseMDNode(), NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225710 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: Reorder ParseMetadata() logic, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:24:50 +0000 (22:24 +0000)]
AsmParser: Reorder ParseMetadata() logic, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225709 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: Simplify ParseMDTuple(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 22:23:04 +0000 (22:23 +0000)]
AsmParser: Simplify ParseMDTuple(), NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225708 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDebug Info: Implement DwarfUnit::addRegisterOffset using DwarfExpression.
Adrian Prantl [Mon, 12 Jan 2015 22:19:26 +0000 (22:19 +0000)]
Debug Info: Implement DwarfUnit::addRegisterOffset using DwarfExpression.
No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225707 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDebug info: Factor out the creation of DWARF expressions from AsmPrinter
Adrian Prantl [Mon, 12 Jan 2015 22:19:22 +0000 (22:19 +0000)]
Debug info: Factor out the creation of DWARF expressions from AsmPrinter
into a new class DwarfExpression that can be shared between AsmPrinter
and DwarfUnit.

This is the first step towards unifying the two entirely redundant
implementations of dwarf expression emission in DwarfUnit and AsmPrinter.

Almost no functional change — Testcases were updated because asm comments
that used to be on two lines now appear on the same line, which is
actually preferable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225706 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: ParseMDNode() => ParseMDTuple(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 21:23:11 +0000 (21:23 +0000)]
AsmParser: ParseMDNode() => ParseMDTuple(), NFC

This isn't parsing arbitrary subclasses of `MDNode`, just `MDTuple`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225702 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago80-cols; NFC
Sanjay Patel [Mon, 12 Jan 2015 21:21:28 +0000 (21:21 +0000)]
80-cols; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225700 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: Remove unused version of ParseMDNodeID()
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 21:14:38 +0000 (21:14 +0000)]
AsmParser: Remove unused version of ParseMDNodeID()

Merge the two versions of `ParseMDNodeID()` now that no one needs
special forward references.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225699 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAsmParser: Use normal references for metadata attachments, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 21:13:09 +0000 (21:13 +0000)]
AsmParser: Use normal references for metadata attachments, NFC

Remove special parsing logic for metadata attachments.  Now that
`DebugLoc` is stored normally (since the metadata/value split), we don't
need this special forward referencing logic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225698 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Prepare for a new UniquableMDNode subclass, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:56:33 +0000 (20:56 +0000)]
IR: Prepare for a new UniquableMDNode subclass, NFC

Add generic dispatch for the parts of `UniquableMDNode` that cast to
`MDTuple`.  This makes adding other subclasses (like PR21433's
`MDLocation`) easier.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225697 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Stop erasing MDNodes from uniquing sets during teardown
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:50:25 +0000 (20:50 +0000)]
IR: Stop erasing MDNodes from uniquing sets during teardown

Stop erasing `MDNode`s from the uniquing sets in `LLVMContextImpl`
during teardown (in particular, during
`UniquableMDNode::~UniquableMDNode()`).  Although it's currently
feasible, there isn't any clear benefit and it may not be feasible for
other subclasses (which don't explicitly store the lookup hash).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225696 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFirst crack at PowerPC 3.6 release notes
Bill Schmidt [Mon, 12 Jan 2015 20:46:43 +0000 (20:46 +0000)]
First crack at PowerPC 3.6 release notes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225695 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[LIT] Remove string decoding in gtest discovery code. lit.util.capture now does decoding.
Eric Fiselier [Mon, 12 Jan 2015 20:43:34 +0000 (20:43 +0000)]
[LIT] Remove string decoding in gtest discovery code. lit.util.capture now does decoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225693 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[X86] Also create+widen FMIN/FMAX nodes for v2f32.
Ahmed Bougacha [Mon, 12 Jan 2015 20:31:30 +0000 (20:31 +0000)]
[X86] Also create+widen FMIN/FMAX nodes for v2f32.

This happens in the HINT benchmark, where the SLP-vectorizer created
v2f32 fcmp/select code.  The "correct" solution would have been to
teach the vectorizer cost model that v2f32 isn't legal (because really,
it isn't), but if we can vectorize we might as well do so.

We legalize these v2f32 FMIN/FMAX nodes by widening to v4f32 later on.
v3f32 were already widened to v4f32 by the generic unroll-and-build-vector

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225691 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Move creation logic to MDNodeFwdDecl, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:21:37 +0000 (20:21 +0000)]
IR: Move creation logic to MDNodeFwdDecl, NFC

Same as with `MDTuple`, factor out a `friend MDNode` by moving creation
logic to the concrete subclass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225690 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Make MDNodeFwdDecl destructor public
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:19:54 +0000 (20:19 +0000)]
IR: Make MDNodeFwdDecl destructor public

Now that the leak detector is gone, anyone can call this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225689 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[X86] Make SSE min/max testcases more explicit. NFC.
Ahmed Bougacha [Mon, 12 Jan 2015 20:15:47 +0000 (20:15 +0000)]
[X86] Make SSE min/max testcases more explicit. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225687 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Move creation logic down to MDTuple, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:13:56 +0000 (20:13 +0000)]
IR: Move creation logic down to MDTuple, NFC

Move creation logic for `MDTuple`s down where it belongs.  Once there
are a few more subclasses, these functions really won't make much sense
here (the `friend` relationship was already awkward).  For now, leave
the `MDNode` versions around, but have it forward down.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225685 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Push storeDistinctInContext() down to UniquableMDNode, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:11:32 +0000 (20:11 +0000)]
IR: Push storeDistinctInContext() down to UniquableMDNode, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225683 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Split GenericMDNode into MDTuple and UniquableMDNode
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 20:09:34 +0000 (20:09 +0000)]
IR: Split GenericMDNode into MDTuple and UniquableMDNode

Split `GenericMDNode` into two classes (with more descriptive names).

  - `UniquableMDNode` will be a common subclass for `MDNode`s that are
    sometimes uniqued like constants, and sometimes 'distinct'.

    This class gets the (short-lived) RAUW support and related API.

  - `MDTuple` is the basic tuple that has always been returned by
    `MDNode::get()`.  This is as opposed to more specific nodes to be
    added soon, which have additional fields, custom assembly syntax,
    and extra semantics.

    This class gets the hash-related logic, since other sublcasses of
    `UniquableMDNode` may need to hash based on other fields.

To keep this diff from getting too big, I've added casts to `MDTuple`
that won't really scale as new subclasses of `UniquableMDNode` are
added, but I'll clean those up incrementally.

(No functionality change intended.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225682 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[LIT] Decode string result in lit.util.capture
Eric Fiselier [Mon, 12 Jan 2015 20:09:34 +0000 (20:09 +0000)]
[LIT] Decode string result in lit.util.capture

Summary: I think this is probably a bug, but I'm putting this up for review just to be sure. I think that `lit.util.capture` should decode the resulting string in the same way `lit.util.executeCommand` does.

Reviewers: ddunbar, EricWF

Reviewed By: EricWF

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225681 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Invert logic to simplify control flow, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:45:44 +0000 (19:45 +0000)]
IR: Invert logic to simplify control flow, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225670 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Separate out decrementUnresolvedOperandCount(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:43:15 +0000 (19:43 +0000)]
IR: Separate out decrementUnresolvedOperandCount(), NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225667 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Prevent handleChangedOperand() recursion
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:36:35 +0000 (19:36 +0000)]
IR: Prevent handleChangedOperand() recursion

Instead of returning early on `handleChangedOperand()` recursion
(finally identified (and test added) in r225657), prevent it upfront by
releasing operands before RAUW.

Aside from massively different program flow, there should be no
functionality change ;).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225665 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoR600/SI: Use RegisterOperands to specify which operands can accept immediates
Tom Stellard [Mon, 12 Jan 2015 19:33:18 +0000 (19:33 +0000)]
R600/SI: Use RegisterOperands to specify which operands can accept immediates

There are some operands which can take either immediates or registers
and we were previously using different register class to distinguish
between operands that could take immediates and those that could not.

This patch switches to using RegisterOperands which should simplify the
backend by reducing the number of register classes and also make it
easier to implement the assembler.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225662 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoTarget: Allow target specific operand types
Tom Stellard [Mon, 12 Jan 2015 19:33:09 +0000 (19:33 +0000)]
Target: Allow target specific operand types

This adds two new fields to the RegisterOperand TableGen class:

string OperandNamespace = "MCOI";
string OperandType = "OPERAND_REGISTER";

These fields can be used to specify a target specific operand type,
which will be stored in the OperandType member of the MCOperandInfo

This can be useful for targets that need to store some extra information
about operands that cannot be expressed using the target independent
types.  For example, in the R600 backend, there are operands which
can take either registers or immediates and it is convenient to be able
to specify this in the TableGen definitions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225661 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoGVN: propagate equalities for floating point compares
Sanjay Patel [Mon, 12 Jan 2015 19:29:48 +0000 (19:29 +0000)]
GVN: propagate equalities for floating point compares

Allow optimizations based on FP comparison values in the same way
as integers.

This resolves PR17713:

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225660 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Add test for handleChangedOperand() recursion
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:22:04 +0000 (19:22 +0000)]
IR: Add test for handleChangedOperand() recursion

Turns out this can happen.  Remove the `FIXME` and add a testcase that
crashes without the extra logic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225657 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Separate out recalculateHash(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:16:34 +0000 (19:16 +0000)]
IR: Separate out recalculateHash(), NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225655 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Separate out helper: resolveAfterOperandChange(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:14:15 +0000 (19:14 +0000)]
IR: Separate out helper: resolveAfterOperandChange(), NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225654 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Use SubclassData32 directly, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 19:12:37 +0000 (19:12 +0000)]
IR: Use SubclassData32 directly, NFC

Simplify some logic by accessing `SubclassData32` directly instead of
relying on API.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225653 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRegisterCoalescer: Turn some impossible conditions into asserts
Matthias Braun [Mon, 12 Jan 2015 19:10:17 +0000 (19:10 +0000)]
RegisterCoalescer: Turn some impossible conditions into asserts

This is a fixed version of reverted r225500. It fixes the too early
if() continue; of the last patch and adds a comment to the unorthodox

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225652 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Don't allow operands to become unresolved
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 18:59:40 +0000 (18:59 +0000)]
IR: Don't allow operands to become unresolved

Operands shouldn't change from being resolved to unresolved during graph
construction.  Simplify the logic based on that assumption.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225649 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Remove redundant comment, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 18:45:32 +0000 (18:45 +0000)]
IR: Remove redundant comment, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225648 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Simplify code, NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 18:45:01 +0000 (18:45 +0000)]
IR: Simplify code, NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225647 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Make temporary nodes distinct
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 18:41:26 +0000 (18:41 +0000)]
IR: Make temporary nodes distinct

Change the return of `MDNode::isDistinct()` for `MDNode::getTemporary()`
to `true`.  They aren't uniqued.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225646 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd r224985 back with two fixes.
Rafael Espindola [Mon, 12 Jan 2015 18:13:07 +0000 (18:13 +0000)]
Add r224985 back with two fixes.

One is that AArch64 has additional restrictions on when local relocations can
be used. We have to take those into consideration when deciding to put a L
symbol in the symbol table or not.

The other is that ld64 requires the relocations to cstring to use linker
visible symbols on AArch64.

Thanks to Michael Zolotukhin for testing this!

Remove doesSectionRequireSymbols.

In an assembly expression like

.long L0 + 1

the intended semantics is that bar will contain a pointer one byte past L0.

In sections that are merged by content (strings, 4 byte constants, etc), a
single position in the section doesn't give the linker enough information.
For example, it would not be able to tell a relocation must point to the
end of a string, since that would look just like the start of the next.

The solution used in ELF to use relocation with symbols if there is a non-zero

In MachO before this patch we would just keep all symbols in some sections.

This would miss some cases (only cstrings on x86_64 were implemented) and was
inefficient since most relocations have an addend of 0 and can be represented
without the symbol.

This patch implements the non-zero addend logic for MachO too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225644 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Simplify replaceOperandWith(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 18:01:45 +0000 (18:01 +0000)]
IR: Simplify replaceOperandWith(), NFC

This will call `handleChangedOperand()` less frequently, but in that
case (i.e., `isStoredDistinctInContext()`) it has identical logic to

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225643 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoIR: Remove redundant calls to MDNode::setHash(), NFC
Duncan P. N. Exon Smith [Mon, 12 Jan 2015 17:57:38 +0000 (17:57 +0000)]
IR: Remove redundant calls to MDNode::setHash(), NFC

`storeDistinctInContext()` already calls `setHash(0)`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225642 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ASan] Move the shadow on Windows 32-bit from 0x20000000 to 0x40000000
Timur Iskhodzhanov [Mon, 12 Jan 2015 17:38:58 +0000 (17:38 +0000)]
[ASan] Move the shadow on Windows 32-bit from 0x20000000 to 0x40000000

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225641 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[SimplifyLibCalls] Factor out fortified libcall handling.
Ahmed Bougacha [Mon, 12 Jan 2015 17:22:43 +0000 (17:22 +0000)]
[SimplifyLibCalls] Factor out fortified libcall handling.

This lets us remove CGP duplicate.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225640 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[SimplifyLibCalls] Factor out str/mem libcall optimizations.
Ahmed Bougacha [Mon, 12 Jan 2015 17:20:06 +0000 (17:20 +0000)]
[SimplifyLibCalls] Factor out str/mem libcall optimizations.

Put them in a separate function, so we can reuse them to further
simplify fortified libcalls as well.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225639 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[SimplifyLibCalls] Factor out signature checks for fortifiable libcalls.
Ahmed Bougacha [Mon, 12 Jan 2015 17:18:19 +0000 (17:18 +0000)]
[SimplifyLibCalls] Factor out signature checks for fortifiable libcalls.

The checks are the same for fortified counterparts to the libcalls, so
we might as well do them in a single place.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225638 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[mips][microMIPS] Implement BEQZ16 and BNEZ16 instructions
Jozef Kolek [Mon, 12 Jan 2015 12:03:34 +0000 (12:03 +0000)]
[mips][microMIPS] Implement BEQZ16 and BNEZ16 instructions

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225627 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoPut this test's input in the Inputs directory where it belongs, rather than
Richard Smith [Mon, 12 Jan 2015 08:50:47 +0000 (08:50 +0000)]
Put this test's input in the Inputs directory where it belongs, rather than
reusing a file from a different test directory.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225621 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd a new utility script that helps update very simple regression tests.
Chandler Carruth [Mon, 12 Jan 2015 04:43:18 +0000 (04:43 +0000)]
Add a new utility script that helps update very simple regression tests.

This script is currently specific to x86 and limited to use with very
small regression or feature tests using 'llc' and 'FileCheck' in
a reasonably canonical way. It is in no way general purpose or robust at
this point. However, it works quite well for simple examples. Here is
the intended workflow:

- Make a change that requires updating N test files and M functions'
  assertions within those files.
- Stash the change.
- Update those N test files' RUN-lines to look "canonical"[1].
- Refresh the FileCheck lines for either the entire file or select
  functions by running this script.
  - The script will parse the RUN lines and run the 'llc' binary you
    give it according to each line, collecting the asm.
  - It will then annotate each function with the appropriate FileCheck
    comments to check every instruction from the start of the first
    basic block to the last return.
  - There will be numerous cases where the script either fails to remove
    the old lines, or inserts checks which need to be manually editted,
    but the manual edits tend to be deletions or replacements of
    registers with FileCheck variables which are fast manual edits.
  - A common pattern is to have the script insert complete checking of
    every instruction, and then edit it down to only check the relevant
  - Be careful to do all of these cleanups though! The script is
    designed to make transferring and formatting the asm output of llc
    into a test case fast, it is *not* designed to be authoratitive
    about what constitutes a good test!
- Commit the nice fresh baseline of checks.
- Unstash your change and rebuild llc.
- Re-run script to regenerate the FileCheck annotations
  - Remember to re-cleanup these annotations!!!
- Check the diff to make sure this is sane, checking the things you
  expected it to, and check that the newly updated tests actually pass.
- Profit!

Also, I'm *terrible* at writing Python, and frankly I didn't spend a lot
of time making this script beautiful or well engineered. But it's useful
to me and may be useful to others so I thought I'd send it out.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225618 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[PowerPC] Fix calls to non-function objects
Hal Finkel [Mon, 12 Jan 2015 04:34:47 +0000 (04:34 +0000)]
[PowerPC] Fix calls to non-function objects

Looking at r225438 inspired me to see how the PowerPC backend handled the
situation (calling a bitcasted TLS global), and it turns out we also produced
an error (cannot select ...). What it means to "call" something that is not a
function is implementation and platform specific, but in the name of doing
something (besides crashing), this makes sure we do what GCC does (treat all
such calls as calls through a function pointer -- meaning that the pointer is
assumed, as is the convention on PPC, to point to a function descriptor
structure holding the actual code address along with the function's TOC pointer
and environment pointer). As GCC does, we now do the same for calling regular
(non-TLS) non-function globals too.

I'm not sure whether this is the most useful way to define the behavior, but at
least we won't be alone.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225617 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[X86][SSE] Minor fix to VPBLENDW AVX2 commutation.
Simon Pilgrim [Sun, 11 Jan 2015 22:08:01 +0000 (22:08 +0000)]
[X86][SSE] Minor fix to VPBLENDW AVX2 commutation.

D6015 / rL221313 enabled commutation for SSE immediate blend instructions, but due to a typo the AVX2 VPBLENDW ymm instructions weren't flagged as commutative along with the others in the tables, but were still being commuted in code and tested for.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225612 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix silly mistake in release notes for Mips.
Daniel Sanders [Sun, 11 Jan 2015 10:48:20 +0000 (10:48 +0000)]
Fix silly mistake in release notes for Mips.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225608 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdded release notes for the Mips target.
Daniel Sanders [Sun, 11 Jan 2015 10:34:52 +0000 (10:34 +0000)]
Added release notes for the Mips target.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225607 91177308-0d34-0410-b5e6-96231b3b80d8