- Feb 23, 2013
-
-
Nadav Rotem authored
One of the phases of SelectionDAG is LegalizeVectors. We don't need to sort the DAG and copy nodes around if there are no vector ops. Speeds up the compilation time of SelectionDAG on a big scalar workload by ~8%. llvm-svn: 175929
-
- Feb 22, 2013
-
-
Pete Cooper authored
It was incorrectly checking a Function* being an IntrinsicInst* which isn't possible. It should always have been checking the CallInst* instead. Added test case for x86 which ensures we only get one constant load. It was 2 before this change. rdar://problem/13267920 llvm-svn: 175853
-
- Feb 21, 2013
-
-
Cameron Zwarich authored
pass. One of the callers of isKilled() can cope with overapproximation of kills and the other can't, so I added a flag to indicate this. In theory this could pessimize code slightly, but in practice most physical register uses are kills, and most important kills of physical registers are the only uses of that register prior to register allocation, so we can recognize them as kills even without kill flags. This is relevant because LiveIntervals gets rid of all kill flags. llvm-svn: 175821
-
Lang Hames authored
llvm-svn: 175809
-
Eli Bendersky authored
to TargetFrameLowering, where it belongs. Incidentally, this allows us to delete some duplicated (and slightly different!) code in TRI. There are potentially other layering problems that can be cleaned up as a result, or in a similar manner. The refactoring was OK'd by Anton Korobeynikov on llvmdev. Note: this touches the target interfaces, so out-of-tree targets may be affected. llvm-svn: 175788
-
Jakob Stoklund Olesen authored
This fixes some problems with too conservative checking where we were marking all aliases of a register as used, and then also checking all aliases when allocating a register. <rdar://problem/13249625> llvm-svn: 175782
-
Lang Hames authored
llvm-svn: 175765
-
Benjamin Kramer authored
A legal BUILD_VECTOR goes in and gets constant folded into another legal BUILD_VECTOR so we don't lose any legality here. The problematic PPC optimization that made this check necessary was fixed recently. llvm-svn: 175759
-
Cameron Zwarich authored
llvm-svn: 175732
-
Cameron Zwarich authored
llvm-svn: 175731
-
Cameron Zwarich authored
This brings the number of remaining failures in 'make check' without LiveVariables down to 39, with 1 unexpectedly passing test. llvm-svn: 175727
-
Cameron Zwarich authored
llvm-svn: 175726
-
Cameron Zwarich authored
available. With this commit there are no longer any assertion or verifier failures when running 'make check' without LiveVariables. There are still 56 failing tests with codegen differences and 1 unexpectedly passing test. llvm-svn: 175719
-
Jakob Stoklund Olesen authored
Rewrite value numbers directly in the 'Other' LiveInterval which is moribund anyway. This avoids allocating the OtherAssignments vector. llvm-svn: 175690
-
Lang Hames authored
just be turned into kills on the spot. llvm-svn: 175688
-
Jakob Stoklund Olesen authored
When findReachingDefs() finds that only one value can reach the basic block, just copy the work list of visited blocks directly into the live interval. Sort the block list and use a LiveRangeUpdater to make the bulk add fast. When multiple reaching defs are found, transfer the work list to the updateSSA() work list as before. Also use LiveRangeUpdater in updateLiveIns() following updateSSA(). This makes live interval analysis more than 3x faster on one huge test case. llvm-svn: 175685
-
- Feb 20, 2013
-
-
Cameron Zwarich authored
and SlotIndexes. llvm-svn: 175674
-
Cameron Zwarich authored
automatically. llvm-svn: 175673
-
Cameron Zwarich authored
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
-
Arnold Schwaighofer authored
(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
-
Jim Grosbach authored
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
-
Jakob Stoklund Olesen authored
Performance is the same, but LiveRangeUpdater has a more flexible interface. llvm-svn: 175645
-
Jakob Stoklund Olesen authored
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
-
Michael Liao authored
- 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
-
Benjamin Kramer authored
llvm-svn: 175621
-
David Blaikie authored
llvm-svn: 175608
-
Cameron Zwarich authored
common transformations. This includes updating repairIntervalsInRange() to handle more cases. llvm-svn: 175604
-
Cameron Zwarich authored
correct value is needed in every iteration of the loop for updating LiveIntervals. llvm-svn: 175603
-
Cameron Zwarich authored
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
-
Cameron Zwarich authored
after the two-address pass. The remaining problems in 'make check' are occurring later. llvm-svn: 175598
-
Cameron Zwarich authored
llvm-svn: 175597
-
Cameron Zwarich authored
llvm-svn: 175596
-
Jakub Staszak authored
llvm-svn: 175581
-
- Feb 19, 2013
-
-
Jakob Stoklund Olesen authored
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
-
Benjamin Kramer authored
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
-
Craig Topper authored
llvm-svn: 175490
-
Craig Topper authored
llvm-svn: 175488
-
Craig Topper authored
llvm-svn: 175487
-
Craig Topper authored
llvm-svn: 175485
-
Craig Topper authored
llvm-svn: 175484
-