| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
also r134814 (test/CodeGen/X86/vector.ll).
llvm-svn: 134900
|
| |
|
|
| |
llvm-svn: 134889
|
| |
|
|
|
|
|
|
|
|
|
|
| |
and MCSubtargetInfo.
- Added methods to update subtarget features (used when targets automatically
detect subtarget features or switch modes).
- Teach X86Subtarget to update MCSubtargetInfo features bits since the
MCSubtargetInfo layer can be shared with other modules.
- These fixes .code 16 / .code 32 support since mode switch is updated in
MCSubtargetInfo so MC code emitter can do the right thing.
llvm-svn: 134884
|
| |
|
|
|
|
|
|
| |
more than one use.
Fixes PR10322.
llvm-svn: 134883
|
| |
|
|
|
|
|
| |
PR10292 doesn't show that the loads don't alias
the allocas.
llvm-svn: 134852
|
| |
|
|
| |
llvm-svn: 134850
|
| |
|
|
| |
llvm-svn: 134842
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
patch brings numerous advantages to LLVM. One way to look at it
is through diffstat:
109 files changed, 3005 insertions(+), 5906 deletions(-)
Removing almost 3K lines of code is a good thing. Other advantages
include:
1. Value::getType() is a simple load that can be CSE'd, not a mutating
union-find operation.
2. Types a uniqued and never move once created, defining away PATypeHolder.
3. Structs can be "named" now, and their name is part of the identity that
uniques them. This means that the compiler doesn't merge them structurally
which makes the IR much less confusing.
4. Now that there is no way to get a cycle in a type graph without a named
struct type, "upreferences" go away.
5. Type refinement is completely gone, which should make LTO much MUCH faster
in some common cases with C++ code.
6. Types are now generally immutable, so we can use "Type *" instead
"const Type *" everywhere.
Downsides of this patch are that it removes some functions from the C API,
so people using those will have to upgrade to (not yet added) new API.
"LLVM 3.0" is the right time to do this.
There are still some cleanups pending after this, this patch is large enough
as-is.
llvm-svn: 134829
|
| |
|
|
| |
llvm-svn: 134820
|
| |
|
|
| |
llvm-svn: 134819
|
| |
|
|
| |
llvm-svn: 134818
|
| |
|
|
|
|
|
|
| |
With Lit (not bash) in a test, multiple redirects >%t might open(%t, "w") multiple. It can be avoided if latter redirect is >>%t.
It might work even if ">/dev/null" were used.
llvm-svn: 134814
|
| |
|
|
| |
llvm-svn: 134778
|
| |
|
|
|
|
|
|
|
|
| |
Try to move spills as early as possible in their basic block. This can
help eliminate interferences by shortening the live range being
spilled.
This fixes PR10221.
llvm-svn: 134776
|
| |
|
|
| |
llvm-svn: 134760
|
| |
|
|
| |
llvm-svn: 134756
|
| |
|
|
|
|
| |
Clean up all the other hacks which are now unnecessary.
llvm-svn: 134753
|
| |
|
|
|
|
|
|
|
|
| |
The normal tBX instruction is predicable, so there's no reason the
pseudos for using it as a return shouldn't be. Gives us some nice code-gen
improvements as can be seen by the test changes. In particular, several
tests now have to disable if-conversion because it works too well and defeats
the test.
llvm-svn: 134746
|
| |
|
|
|
|
| |
http://llvm.org/bugs/show_bug.cgi?id=10305
llvm-svn: 134744
|
| |
|
|
|
|
| |
is to use this for architectures that have a native FMA instruction.
llvm-svn: 134742
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RAGreedy::tryAssign will now evict interference from the preferred
register even when another register is free.
To support this, add the EvictionCost struct that counts how many hints
are broken by an eviction. We don't want to break one hint just to
satisfy another.
Rename canEvict to shouldEvict, and add the first bit of eviction policy
that doesn't depend on spill weights: Always make room in the preferred
register as long as the evictees can be split and aren't already
assigned to their preferred register.
Also make the CSR avoidance more accurate. When looking for a cheaper
register it is OK to use a new volatile register. Only CSR aliases that
have never been used before should be avoided.
llvm-svn: 134735
|
| |
|
|
| |
llvm-svn: 134719
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We have to do this in DAGBuilder instead of DAGCombiner, because the exact bit is lost after building.
struct foo { char x[24]; };
long bar(struct foo *a, struct foo *b) { return a-b; }
is now compiled into
movl 4(%esp), %eax
subl 8(%esp), %eax
sarl $3, %eax
imull $-1431655765, %eax, %eax
instead of
movl 4(%esp), %eax
subl 8(%esp), %eax
movl $715827883, %ecx
imull %ecx
movl %edx, %eax
shrl $31, %eax
sarl $2, %edx
addl %eax, %edx
movl %edx, %eax
llvm-svn: 134695
|
| |
|
|
|
|
| |
CSE ops that match values produced by the intrinsics.
llvm-svn: 134677
|
| |
|
|
| |
llvm-svn: 134667
|
| |
|
|
|
|
|
|
|
|
|
|
| |
It was testing a linear scan feature:
Test if linearscan is unfavoring registers for allocation to allow
more reuse of reloads from stack slots.
The greedy register allocator doesn't access any stack slots in this
function, so the linear scan feature was not being tested.
llvm-svn: 134666
|
| |
|
|
|
|
| |
Fixes PR9602!
llvm-svn: 134665
|
| |
|
|
|
|
|
|
| |
processor supports it just fine.
Fixes PR9675 and rdar://9740801
llvm-svn: 134664
|
| |
|
|
|
|
| |
Fixes PR10149 and rdar://9738585
llvm-svn: 134648
|
| |
|
|
| |
llvm-svn: 134641
|
| |
|
|
|
|
| |
them down to MC layer. Also fix tests.
llvm-svn: 134590
|
| |
|
|
| |
llvm-svn: 134573
|
| |
|
|
| |
llvm-svn: 134530
|
| |
|
|
|
|
|
|
| |
The promotion code lost any alignment information, when hoisting loads and
stores out of the loop. This lead to incorrect aligned memory accesses. We now
use the largest alignment we can prove to be correct.
llvm-svn: 134520
|
| |
|
|
| |
llvm-svn: 134516
|
| |
|
|
| |
llvm-svn: 134511
|
| |
|
|
|
|
| |
push with a small constant produces a 2-byte push.
llvm-svn: 134501
|
| |
|
|
| |
llvm-svn: 134447
|
| |
|
|
|
|
| |
use proper aliases for the pclmullqlqdq and friends. PR10269.
llvm-svn: 134424
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remat during spilling triggers dead code elimination. If a phi-def
becomes unused, that may also cause live ranges to split into separate
connected components.
This type of splitting is different from normal live range splitting. In
particular, there may not be a common original interval.
When the split range is its own original, make sure that the new
siblings are also their own originals. The range being split cannot be
used as an original since it doesn't cover the new siblings.
llvm-svn: 134413
|
| |
|
|
|
|
|
|
| |
compare when the AND has more than one use.
This can pessimize code, inequalities are generally more expensive.
llvm-svn: 134379
|
| |
|
|
|
|
| |
Win32 hosts.
llvm-svn: 134366
|
| |
|
|
|
|
|
| |
makes one of the tests actually mean something (as the string 'add' will
always appear in the output of this file).
llvm-svn: 134358
|
| |
|
|
|
|
| |
a file descriptor.
llvm-svn: 134355
|
| |
|
|
|
|
| |
desired result based on the comments in the file.
llvm-svn: 134354
|
| |
|
|
| |
llvm-svn: 134353
|
| |
|
|
| |
llvm-svn: 134352
|
| |
|
|
| |
llvm-svn: 134351
|
| |
|
|
| |
llvm-svn: 134350
|
| |
|
|
| |
llvm-svn: 134349
|