| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
and SlotIndexes.
llvm-svn: 175674
|
|
|
|
|
|
| |
automatically.
llvm-svn: 175673
|
|
|
|
|
|
|
|
|
| |
related failures when running 'make check' without LiveVariables with the
verifier enabled. Some of the remaining failures elsewhere may still be fallout
from incorrect updating of LiveIntervals or the few missing cases left in the
two-address pass.
llvm-svn: 175672
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(2xi32) (truncate ((2xi64) bitcast (buildvector i32 a, i32 x, i32 b, i32 y)))
can be folded into a (2xi32) (buildvector i32 a, i32 b).
Such a DAG would cause uneccessary vdup instructions followed by vmovn
instructions.
We generate this code on ARM NEON for a setcc olt, 2xf64, 2xf64. For example, in
the vectorized version of the code below.
double A[N];
double B[N];
void test_double_compare_to_double() {
int i;
for(i=0;i<N;i++)
A[i] = (double)(A[i] < B[i]);
}
radar://13191881
Fixes bug 15283.
llvm-svn: 175670
|
|
|
|
|
|
|
|
|
|
|
| |
http://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly
ivars should be camel-case and start with an upper-case letter. A few in
TargetLowering were starting with a lower-case letter.
No functional change intended.
llvm-svn: 175667
|
|
|
|
|
|
|
| |
Performance is the same, but LiveRangeUpdater has a more flexible
interface.
llvm-svn: 175645
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adding new segments to large LiveIntervals can be expensive because the
LiveRange objects after the insertion point may need to be moved left or
right. This can cause quadratic behavior when adding a large number of
segments to a live range.
The LiveRangeUpdater class allows the LIveInterval to be in a temporary
invalid state while segments are being added. It maintains an internal
gap in the LiveInterval when it is shrinking, and it has a spill area
for new segments when the LiveInterval is growing.
The behavior is similar to the existing mergeIntervalRanges() function,
except it allocates less memory for the spill area, and the algorithm is
turned inside out so the loop is driven by the clients.
llvm-svn: 175644
|
|
|
|
|
|
|
|
|
| |
- When extloading from a vector with non-byte-addressable element, e.g.
<4 x i1>, the current logic breaks. Extend the current logic to
fix the case where the element type is not byte-addressable by loading
all bytes, bit-extracting/packing each element.
llvm-svn: 175642
|
|
|
|
| |
llvm-svn: 175621
|
|
|
|
| |
llvm-svn: 175608
|
|
|
|
|
|
|
| |
common transformations. This includes updating repairIntervalsInRange() to
handle more cases.
llvm-svn: 175604
|
|
|
|
|
|
|
| |
correct value is needed in every iteration of the loop for updating
LiveIntervals.
llvm-svn: 175603
|
|
|
|
|
|
|
|
|
|
| |
and removing instructions. The implementation seems more complicated than it
needs to be, but I couldn't find something simpler that dealt with all of the
corner cases.
Also add a call to repairIndexesInRange() from repairIntervalsInRange().
llvm-svn: 175601
|
|
|
|
|
|
|
| |
after the two-address pass. The remaining problems in 'make check' are occurring
later.
llvm-svn: 175598
|
|
|
|
| |
llvm-svn: 175597
|
|
|
|
| |
llvm-svn: 175596
|
|
|
|
| |
llvm-svn: 175581
|
|
|
|
|
|
|
|
|
|
| |
Target implementations of getRegAllocationHints() should use the
provided allocation order, and they can never return hints outside the
order. This is already documented in TargetRegisterInfo.h.
<rdar://problem/13240556>
llvm-svn: 175540
|
|
|
|
|
|
|
|
|
|
|
| |
Due to the execution order of doFinalization functions, the GC information were
deleted before AsmPrinter::doFinalization was executed. Thus, the
GCMetadataPrinter::finishAssembly was never called.
The patch fixes that by moving the code of the GCInfoDeleter::doFinalization to
Printer::doFinalization.
llvm-svn: 175528
|
|
|
|
| |
llvm-svn: 175490
|
|
|
|
| |
llvm-svn: 175488
|
|
|
|
| |
llvm-svn: 175487
|
|
|
|
|
|
| |
performs.
llvm-svn: 175485
|
|
|
|
|
|
| |
lookups in collectMarkers.
llvm-svn: 175484
|
|
|
|
| |
llvm-svn: 175457
|
|
|
|
| |
llvm-svn: 175456
|
|
|
|
|
|
| |
SelectAllBasicBlocks().
llvm-svn: 175422
|
|
|
|
|
|
|
| |
arguably better than forward iterators for this use case, they are confusing and
there are some implementation problems with reverse iterators and MI bundles.
llvm-svn: 175393
|
|
|
|
| |
llvm-svn: 175385
|
|
|
|
|
|
|
|
|
|
|
| |
MachineBasicBlock::SplitCriticalEdge. Since this is an iterator rather than
an instr_iterator, the isBundled() check only passes if getFirstTerminator()
returned end() and the garbage memory happens to lean that way.
Multiple successors can be present without any terminator instructions in the
case of exception handling with a fallthrough.
llvm-svn: 175383
|
|
|
|
|
|
|
|
|
|
|
|
| |
terminators that actually have register uses when splitting critical edges.
This commit also introduces a method repairIntervalsInRange() on LiveIntervals,
which allows for repairing LiveIntervals in a small range after an arbitrary
target hook modifies, inserts, and removes instructions. It's pretty limited
right now, but I hope to extend it to support all of the things that are done
by the convertToThreeAddress() target hooks.
llvm-svn: 175382
|
|
|
|
|
|
| |
This avoids unnecessary copies. No functionality change.
llvm-svn: 175367
|
|
|
|
|
|
| |
No functionality change.
llvm-svn: 175366
|
|
|
|
| |
llvm-svn: 175365
|
|
|
|
|
|
| |
updateScheduledPressure method.
llvm-svn: 175362
|
|
|
|
|
|
|
|
|
|
|
| |
If the frame pointer is omitted, and any stack changes occur in the inline
assembly, e.g.: "pusha", then any C local variable or C argument references
will be incorrect.
I pass no judgement on anyone who would do such a thing. ;)
rdar://13218191
llvm-svn: 175334
|
|
|
|
|
|
|
|
|
|
| |
features.
If two functions require different features (e.g., `-mno-sse' vs. `-msse') then
we want to honor that, especially during LTO. We can do that by resetting the
subtarget's features depending upon the 'target-feature' attribute.
llvm-svn: 175314
|
|
|
|
|
|
|
|
|
|
|
|
| |
- add sincos to runtime library if target triple environment is GNU
- added canCombineSinCosLibcall() which checks that sincos is in the RTL and
if the environment is GNU then unsafe fpmath is enabled (required to
preserve errno)
- extended sincos-opt lit test
Reviewed by: Hal Finkel
llvm-svn: 175283
|
|
|
|
|
|
| |
linkage.
llvm-svn: 175264
|
|
|
|
| |
llvm-svn: 175190
|
|
|
|
|
|
| |
post-operand legalization.
llvm-svn: 175149
|
|
|
|
|
|
| |
register class to match the defining instruction.
llvm-svn: 175130
|
|
|
|
|
|
|
| |
CoalescerPairs. Also, make it take a CoalescerPair directly like other methods
of RegisterCoalescer.
llvm-svn: 175123
|
|
|
|
|
|
|
|
|
|
|
|
| |
of the copy is a subregister def. The current code assumes that it can do a full
def of the destination register, but it is not checking that the def operand is
read-undef. It also doesn't clear the subregister index of the destination in
the new instruction to reflect the full subregister def.
These issues were found running 'make check' with my next commit that enables
rematerialization in more cases.
llvm-svn: 175122
|
|
|
|
|
|
|
|
| |
Remove dead functions: renameRegister
Move private member variables from LDV to Impl
Remove ssp/uwtable from testing case
llvm-svn: 175072
|
|
|
|
| |
llvm-svn: 175067
|
|
|
|
| |
llvm-svn: 175024
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RegisterCoalescer used to depend on LiveDebugVariable. LDV removes DBG_VALUEs
without emitting them at the end.
We fix this by removing LDV from RegisterCoalescer. Also add an assertion to
make sure we call emitDebugValues if DBG_VALUEs are removed at
runOnMachineFunction.
rdar://problem/13183203
Reviewed by Andy & Jakob
llvm-svn: 175023
|
|
|
|
|
|
| |
function is called with a signed char argument, in order to avoid assertions in Windows Debug configuration.
llvm-svn: 175006
|
|
|
|
|
|
| |
option "generate-dwarf-pubnames" to control it, set to "false" by default.
llvm-svn: 174981
|