| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
readability.
llvm-svn: 225726
|
| |
|
|
|
|
| |
Thanks Chandler for noticing!
llvm-svn: 225724
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 225723
|
| |
|
|
| |
llvm-svn: 225720
|
| |
|
|
|
|
| |
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.
llvm-svn: 225718
|
| |
|
|
|
|
| |
NFC.
llvm-svn: 225717
|
| |
|
|
| |
llvm-svn: 225716
|
| |
|
|
| |
llvm-svn: 225715
|
| |
|
|
| |
llvm-svn: 225714
|
| |
|
|
| |
llvm-svn: 225713
|
| |
|
|
|
|
|
|
|
|
| |
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`.
llvm-svn: 225712
|
| |
|
|
|
|
|
|
| |
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
subclasses.
llvm-svn: 225711
|
| |
|
|
| |
llvm-svn: 225710
|
| |
|
|
| |
llvm-svn: 225709
|
| |
|
|
| |
llvm-svn: 225708
|
| |
|
|
|
|
| |
No functional change.
llvm-svn: 225707
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 225706
|
| |
|
|
|
|
| |
This isn't parsing arbitrary subclasses of `MDNode`, just `MDTuple`.
llvm-svn: 225702
|
| |
|
|
| |
llvm-svn: 225700
|
| |
|
|
|
|
|
| |
Merge the two versions of `ParseMDNodeID()` now that no one needs
special forward references.
llvm-svn: 225699
|
| |
|
|
|
|
|
|
| |
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.
llvm-svn: 225698
|
| |
|
|
|
|
|
|
| |
Add generic dispatch for the parts of `UniquableMDNode` that cast to
`MDTuple`. This makes adding other subclasses (like PR21433's
`MDLocation`) easier.
llvm-svn: 225697
|
| |
|
|
|
|
|
|
|
|
| |
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).
llvm-svn: 225696
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
legalization.
rdar://15763436
Differential Revision: http://reviews.llvm.org/D6557
llvm-svn: 225691
|
| |
|
|
|
|
|
| |
Same as with `MDTuple`, factor out a `friend MDNode` by moving creation
logic to the concrete subclass.
llvm-svn: 225690
|
| |
|
|
|
|
|
|
|
| |
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.
llvm-svn: 225685
|
| |
|
|
| |
llvm-svn: 225683
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.)
llvm-svn: 225682
|
| |
|
|
| |
llvm-svn: 225670
|
| |
|
|
| |
llvm-svn: 225667
|
| |
|
|
|
|
|
|
|
|
|
| |
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 ;).
llvm-svn: 225665
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 225662
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Allow optimizations based on FP comparison values in the same way
as integers.
This resolves PR17713:
http://llvm.org/bugs/show_bug.cgi?id=17713
Differential Revision: http://reviews.llvm.org/D6911
llvm-svn: 225660
|
| |
|
|
|
|
|
| |
Turns out this can happen. Remove the `FIXME` and add a testcase that
crashes without the extra logic.
llvm-svn: 225657
|
| |
|
|
| |
llvm-svn: 225655
|
| |
|
|
| |
llvm-svn: 225654
|
| |
|
|
|
|
|
| |
Simplify some logic by accessing `SubclassData32` directly instead of
relying on API.
llvm-svn: 225653
|
| |
|
|
|
|
|
|
| |
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
loop.
llvm-svn: 225652
|
| |
|
|
|
|
|
| |
Operands shouldn't change from being resolved to unresolved during graph
construction. Simplify the logic based on that assumption.
llvm-svn: 225649
|
| |
|
|
| |
llvm-svn: 225648
|
| |
|
|
| |
llvm-svn: 225647
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
bar:
.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
addend.
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.
llvm-svn: 225644
|
| |
|
|
|
|
|
|
| |
This will call `handleChangedOperand()` less frequently, but in that
case (i.e., `isStoredDistinctInContext()`) it has identical logic to
here.
llvm-svn: 225643
|
| |
|
|
|
|
| |
`storeDistinctInContext()` already calls `setHash(0)`.
llvm-svn: 225642
|
| |
|
|
| |
llvm-svn: 225641
|
| |
|
|
|
|
|
|
| |
This lets us remove CGP duplicate.
Differential Revision: http://reviews.llvm.org/D6541
llvm-svn: 225640
|
| |
|
|
|
|
|
|
|
| |
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
llvm-svn: 225639
|
| |
|
|
|
|
|
|
|
| |
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
llvm-svn: 225638
|
| |
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D5271
llvm-svn: 225627
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 225617
|