| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 128535
|
|
|
|
|
|
|
|
|
|
|
|
| |
When DCE clones a live range because it separates into connected components,
make sure that the clones enter the same register allocator stage as the
register they were cloned from.
For instance, clones may be split even when they where created during spilling.
Other registers created during spilling are not candidates for splitting or even
(re-)spilling.
llvm-svn: 128524
|
|
|
|
| |
llvm-svn: 128519
|
|
|
|
| |
llvm-svn: 128507
|
|
|
|
| |
llvm-svn: 128506
|
|
|
|
| |
llvm-svn: 128504
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
was lowering them to sext / uxt + mul instructions. Unfortunately the
optimization passes may hoist the extensions out of the loop and separate them.
When that happens, the long multiplication instructions can be broken into
several scalar instructions, causing significant performance issue.
Note the vmla and vmls intrinsics are not added back. Frontend will codegen them
as intrinsics vmull* + add / sub. Also note the isel optimizations for catching
mul + sext / zext are not changed either.
First part of rdar://8832507, rdar://9203134
llvm-svn: 128502
|
|
|
|
| |
llvm-svn: 128501
|
|
|
|
|
|
|
|
| |
On x86 we now compile "if (a < 0 && b < 0)" into
testl %edi, %esi
js IF.THEN
llvm-svn: 128496
|
|
|
|
|
|
| |
<rdar://problem/8875309> and <rdar://problem/9057191>.
llvm-svn: 128492
|
|
|
|
|
|
| |
The spill weight is not recomputed for an unspillable register - it stays infinite.
llvm-svn: 128490
|
|
|
|
|
|
| |
and Nans with the same strings as GAS supports. rdar://8673024
llvm-svn: 128488
|
|
|
|
| |
llvm-svn: 128485
|
|
|
|
|
|
|
|
| |
SmallPtrSet.
Fixes PR9569 and will hopefully make selfhost on ASLR-enabled systems more deterministic.
llvm-svn: 128482
|
|
|
|
|
|
| |
needlessly instantiating the base register in some cases.
llvm-svn: 128481
|
|
|
|
|
|
|
|
| |
The STC_OPTION and STC2_OPTION instructions should have their coprocessor option enclosed in {}.
rdar://problem/9200661
llvm-svn: 128478
|
|
|
|
| |
llvm-svn: 128469
|
|
|
|
|
|
|
| |
This may eliminate some uses of the spilled registers, and we don't want to
insert reloads for that.
llvm-svn: 128468
|
|
|
|
| |
llvm-svn: 128467
|
|
|
|
| |
llvm-svn: 128465
|
|
|
|
|
|
| |
actually exist.
llvm-svn: 128461
|
|
|
|
|
|
|
| |
the FailBB dominator is correctly calculated. Believe it or not, there isn't a
functionality change here.
llvm-svn: 128455
|
|
|
|
|
|
|
| |
vector types. This helps a lot with inlined functions when using the ARM soft
float ABI. Fixes <rdar://problem/9184212>.
llvm-svn: 128453
|
|
|
|
|
|
| |
dominator information.
llvm-svn: 128452
|
|
|
|
| |
llvm-svn: 128451
|
|
|
|
| |
llvm-svn: 128450
|
|
|
|
|
|
|
|
| |
The instruction to be rematerialized may not be the one defining the register
that is being spilled. The traceSiblingValue() function sees through sibling
copies to find the remat candidate.
llvm-svn: 128449
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
isel lowering to fold the zero-extend's and take advantage of no-stall
back to back vmul + vmla:
vmull q0, d4, d6
vmlal q0, d5, d6
is faster than
vaddl q0, d4, d5
vmovl q1, d6
vmul q0, q0, q1
This allows us to vmull + vmlal for:
f = vmull_u8( vget_high_u8(s), c);
f = vmlal_u8(f, vget_low_u8(s), c);
rdar://9197392
llvm-svn: 128444
|
|
|
|
| |
llvm-svn: 128441
|
|
|
|
|
|
|
| |
becomes reachable when before it wasn't). Check to make sure that it's not null
before trying to use it.
llvm-svn: 128434
|
|
|
|
|
|
| |
integrated-as.
llvm-svn: 128431
|
|
|
|
|
|
| |
on Darwin.
llvm-svn: 128430
|
|
|
|
| |
llvm-svn: 128426
|
|
|
|
|
|
|
|
| |
some test cases.
Add comments to ThumbDisassemblerCore.h for recent change made for t2PLD disassembly.
llvm-svn: 128417
|
|
|
|
|
|
|
|
|
|
|
| |
otool(1), this time with the needed fix for case sensitive file systems :) .
This is a work in progress as the interface for producing symbolic operands is
not done. But a hacked prototype using information from the object file's
relocation entiries and replacing immediate operands with MCExpr's has been
shown to work with no changes to the instrucion printer. These APIs will be
moved into a dynamic library at some point.
llvm-svn: 128415
|
|
|
|
| |
llvm-svn: 128413
|
|
|
|
| |
llvm-svn: 128406
|
|
|
|
| |
llvm-svn: 128405
|
|
|
|
|
|
| |
output for those cases much clearer since without this it only showed that the original instruction was removed, not what it was replaced with.
llvm-svn: 128399
|
|
|
|
| |
llvm-svn: 128398
|
|
|
|
|
|
|
|
|
| |
The reassignment phase was able to move interference with a higher spill weight,
but it didn't happen very often and it was fairly expensive.
The existing interference eviction picks up the slack.
llvm-svn: 128397
|
|
|
|
|
|
| |
the subclass optional data.
llvm-svn: 128388
|
|
|
|
| |
llvm-svn: 128380
|
|
|
|
|
|
| |
identical to the smul.with.overflow() code.
llvm-svn: 128379
|
|
|
|
|
|
|
|
|
|
| |
removes one use of X which helps it pass the many hasOneUse() checks.
In my analysis, this turns up very often where X = A >>exact B and that can't be
simplified unless X has one use (except by increasing the lifetime of A which is
generally a performance loss).
llvm-svn: 128373
|
|
|
|
| |
llvm-svn: 128370
|
|
|
|
|
|
|
|
|
| |
The main register class may have been inflated by live range splitting, so that
register class is not necessarily valid for the snippet instructions.
Use the original register class for the stack slot interval.
llvm-svn: 128351
|
|
|
|
|
|
|
|
| |
It couldn't be used outside of the file because SDISelAsmOperandInfo
is local to SelectionDAGBuilder.cpp. Making it a static function avoids
a weird linkage dance.
llvm-svn: 128342
|
|
|
|
| |
llvm-svn: 128338
|
|
|
|
| |
llvm-svn: 128333
|