| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 267653
|
|
|
|
|
|
|
| |
It's probably the case for all 3 MMX users out there, but with
hand-crafted IR, you can trigger selection failures. Fix that.
llvm-svn: 267652
|
|
|
|
|
|
|
|
|
| |
This effectively adds back the extractelt combine removed by r262358:
the direct case can still occur (because x86_mmx is special, see
r262446), but it's the indirect case that's now superseded by the
generic combine.
llvm-svn: 267651
|
|
|
|
|
|
|
|
| |
the pattern is matched.
Differential revision: http://reviews.llvm.org/D14840
llvm-svn: 267649
|
|
|
|
|
|
| |
Or at least, I didn't understand the implications the first several times I read it it.
llvm-svn: 267648
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This tries to anchor down the concept of domains a bit better. I had
trouble initially relating this to anything. Also talking to David
Majnemer on IRC suggested that I wasn't the only one.
Reviewers: hfinkel
Subscribers: llvm-commits, majnemer
Differential Revision: http://reviews.llvm.org/D18799
llvm-svn: 267647
|
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D18298
From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267646
|
|
|
|
|
|
|
|
|
| |
In the case where isLegalAddressingMode is used for cases
not related to addressing modes, such as pure adds and muls,
it should not be using address space 0. LSR already passes -1
as the address space in these cases.
llvm-svn: 267645
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"MustPreserve" set
Summary:
If the linker requested to preserve a linkonce function, we should
honor this even if we drop all uses.
Reviewers: dexonsmith
Subscribers: llvm-commits, joker.eph
Differential Revision: http://reviews.llvm.org/D19527
From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267644
|
|
|
|
|
|
|
|
|
|
| |
This splits out the per-loop functionality from the Pass class.
With this the fact whether the loop is forced-distribute with the new
metadata/pragma can be cached in the per-loop class rather than passed
around.
llvm-svn: 267643
|
|
|
|
|
|
|
|
|
|
| |
When encountering a non-local pointer, LVI would eagerly scan the block for dereferences of the given object to prove the pointer to be non null. That's all well and good, but *then* we'd go recurse through our input blocks. As a result, we could end up scanning each and every block we traverse, even if the final definition was obviously non null or we found a constant value somewhere up the chain. The previous code papered over this by using the isKnownNonNull routine from value tracking. This made the duplication less painful in the common case.
Instead, we know do the block scan only *after* we've gotten the recursive results back. This lets us stop scanning individual blocks as soon as we've determined it to be non-null in any predecessor block and use our usual merge rules to propagate that information cheaply through successor blocks. For a pointer which can be found non-null, this does strictly less work and sometimes substaintially so.
Note that the case where we *can't* prove something non-null is still the really expensive case. We end up scanning each and every block looking for a dereference and never end up finding one.
llvm-svn: 267642
|
|
|
|
|
|
|
|
|
| |
is defined!
The users were checking the proper thing (Defined + PartialDeadDef), but the
information may have been wrong for other use cases, so fix that.
llvm-svn: 267641
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19566
llvm-svn: 267640
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The semantics of the -u flag are to load the lazy symbol named by the flag. We
were previously relying on this behavior falling out of symbol resolution
against a synthetic undefined symbol, but that didn't quite give us the
correct behavior, so we needed a flag to mark symbols created with -u so
we could treat them specially in the writer. However, it's simpler and less
error prone to implement the required behavior directly and remove the flag.
This fixes an issue where symbols loaded with -u would receive hidden
visibility even when the definition in an object file had wider visibility.
Differential Revision: http://reviews.llvm.org/D19560
llvm-svn: 267639
|
|
|
|
|
|
|
|
| |
I missed read the comment when I commited r267621 and thought the
comment did not need update. Matthias kindly proved me wrong.
Fixing that.
llvm-svn: 267638
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19490
llvm-svn: 267637
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19562
llvm-svn: 267636
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19518
llvm-svn: 267635
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the prologue.
Do not use basic blocks that have EFLAGS live-in as prologue if we need
to realign the stack. Realigning the stack uses AND instruction and this
clobbers EFLAGS.
An other alternative would have been to save and restore EFLAGS around
the stack realignment code, but this is likely inefficient.
Fixes PR27531.
llvm-svn: 267634
|
|
|
|
| |
llvm-svn: 267633
|
|
|
|
|
|
|
|
|
|
|
| |
table for a module / PCH, never map from a normal declaration of a class to an
injected-class-name declaration (or vice versa). Those declarations live in
distinct lookup tables and should not be confused.
We really shouldn't be using a CXXRecordDecl to represent an
injected-class-name in the first place; I've filed PR27532 so we don't forget.
llvm-svn: 267632
|
|
|
|
| |
llvm-svn: 267631
|
|
|
|
|
|
| |
Thanks again to Richard Smith for pointing this out.
llvm-svn: 267630
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19568
llvm-svn: 267629
|
|
|
|
|
|
| |
Also move the explanatory comment with it.
llvm-svn: 267628
|
|
|
|
|
|
| |
Previously we were recursing on our operands for unary and binary operators regardless of whether we knew how to reason about the operator in question. This has the effect of doing a potentially large amount of work, only to throw it away. By checking whether the operation is one LVI can handle, we can cut short the search and return the (overdefined) answer more quickly. The quality of the results produced should not change.
llvm-svn: 267626
|
|
|
|
|
|
| |
This is an addendum to r229921.
llvm-svn: 267625
|
|
|
|
| |
llvm-svn: 267624
|
|
|
|
|
|
|
| |
When the simple analysis provided by MachineBasicBlock::computeRegisterLiveness
fails, fall back on the LivePhysReg utility.
llvm-svn: 267623
|
|
|
|
|
|
|
| |
Thanks to that information we wouldn't lie on a register being live whereas it
is not.
llvm-svn: 267622
|
|
|
|
|
|
|
| |
Now, it is possible to know that partial definitions are dead definitions and
recognize that clobbered registers are also dead.
llvm-svn: 267621
|
|
|
|
|
|
|
|
| |
As pointed out by John Regehr over in http://reviews.llvm.org/D19485, LVI was being incredibly stupid about applying its transfer rules. Rather than gathering local facts from the expression itself, it was simply giving up entirely if one of the inputs was overdefined. This greatly impacts the precision of the overall analysis and makes it far more fragile as well.
This patch builds on 267609 which did the same thing for unary casts.
llvm-svn: 267620
|
|
|
|
|
|
|
|
|
|
| |
NVPTXLowerKernelArgs is required for correctness, so it should not be guarded
by CodeGenOpt::None.
NVPTXPeephole is optimization only, so it should be skipped when
CodeGenOpt::None.
llvm-svn: 267619
|
|
|
|
|
|
| |
Essentially, I was using the wrong size function. For types which were sized, but not primitive, I wasn't getting a useful size for the operand and failed an assert. I fixed this, and also added a guard that the input is a sized type. Test case is for the original mistake. I'm not sure how to actually exercise the sized type check.
llvm-svn: 267618
|
|
|
|
|
|
| |
I'll clean this up and add a test case shortly. I want to make sure this does actually fix the bots; if not, I'll revert.
llvm-svn: 267617
|
|
|
|
|
|
|
|
| |
Use __attribute__((regparm(x))) to ensure the compiler enregisters at least some arguments when calling functions.
Differential Revision: http://reviews.llvm.org/D19548
llvm-svn: 267616
|
|
|
|
|
|
|
|
|
|
| |
We need the default ratio to be sufficiently large that it triggers transforms
based on block frequency info (BFI) and plays well with the recently introduced
BranchProbability used by CGP.
Differential Revision: http://reviews.llvm.org/D19435
llvm-svn: 267615
|
|
|
|
| |
llvm-svn: 267614
|
|
|
|
|
|
|
| |
This lets Writer.cpp know that they are got relative, which will allow
further simplifications.
llvm-svn: 267613
|
|
|
|
|
|
| |
specializations.
llvm-svn: 267612
|
|
|
|
|
|
| |
Follow-up to r267464. Thanks to Richard Smith for pointing this out!
llvm-svn: 267611
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
On windows platform assert() call creates two distinct CFG edges
which are coverage-instrumented. Simply calling assert would
change coverage numbers on the platform.
Subscribers: kubabrecka
Differential Revision: http://reviews.llvm.org/D19514
llvm-svn: 267610
|
|
|
|
|
|
|
|
|
|
| |
As pointed out by John Regehr over in http://reviews.llvm.org/D19485, LVI was being incredibly stupid about applying its transfer rules. Rather than gathering local facts from the expression itself, it was simply giving up entirely if one of the inputs was overdefined. This greatly impacts the precision of the overall analysis and makes it far more fragile as well.
This patch implements only the unary operation case. Once this is in, I'll implement the same for the binary operations.
Differential Revision: http://reviews.llvm.org/D19492
llvm-svn: 267609
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19439
llvm-svn: 267608
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D17176
llvm-svn: 267606
|
|
|
|
|
|
|
|
|
|
| |
The destination buffer that sprintf uses is restrict qualified, we do
not need to worry about derived pointers referenced via format
specifiers.
This reverts commit r267580.
llvm-svn: 267605
|
|
|
|
| |
llvm-svn: 267604
|
|
|
|
|
|
| |
Every caller was doing it.
llvm-svn: 267603
|
|
|
|
| |
llvm-svn: 267602
|
|
|
|
|
|
|
|
|
|
| |
r267556 made backslashes escape the next character
unconditionally in rsp files. This test echos a path into
a rsp file, and paths contain backslashes on Windows. Since
it's not important for this test to get the filename from
the rsp file, just pass it regularly.
llvm-svn: 267601
|