- Aug 08, 2011
-
-
Jakob Stoklund Olesen authored
X86FloatingPoint keeps track of pending ST registers for an upcoming inline asm instruction with fixed stack register constraints. It does this by remembering which FP register holds the value that should appear at a fixed stack position for the inline asm. When that FP register is killed before the inline asm, make sure to duplicate it to a scratch register, so the ST register still has a live FP reference. This could happen when the same FP register was copied to two ST registers, or when a spill instruction is inserted between the ST copy and the inline asm. This fixes PR10602. llvm-svn: 137050
-
Bill Wendling authored
llvm-svn: 137041
-
- Aug 07, 2011
-
-
Chris Lattner authored
with an opaque struct type, it doesn't make sense. This should resolve PR10473. llvm-svn: 137028
-
- Aug 06, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 137023
-
Andrew Trick authored
recurrence, the initial values low bits can sometimes be ignored. To take advantage of this, added FoldIVUser to IndVarSimplify to fold an IV operand into a udiv/lshr if the operator doesn't affect the result. -indvars -disable-iv-rewrite now transforms i = phi i4 i1 = i0 + 1 idx = i1 >> (2 or more) i4 = i + 4 into i = phi i4 idx = i0 >> ... i4 = i + 4 llvm-svn: 137013
-
Jakob Stoklund Olesen authored
All new local ranges are marked as RS_New now, so there is no need to attempt splitting of RS_Spill ranges any more. llvm-svn: 137002
-
Jakob Stoklund Olesen authored
The local ranges created get to stay in the RS_New stage, just like for local and region splitting. This gives tryLocalSplit a bit more freedom the first time it sees one of these new local ranges. llvm-svn: 137001
-
Jakob Stoklund Olesen authored
llvm-svn: 136996
-
Jakob Stoklund Olesen authored
No functional change. llvm-svn: 136994
-
Jakob Stoklund Olesen authored
These functions are no longer used, and they are easily replaced with a loop calling shouldSplitSingleBlock and splitSingleBlock. llvm-svn: 136993
-
Jakob Stoklund Olesen authored
Drop the use of SplitAnalysis::getMultiUseBlocks, there is no need to go through a SmallPtrSet any more. llvm-svn: 136992
-
Jakob Stoklund Olesen authored
Normally, we don't create a live range for a single instruction in a basic block, the spiller does that anyway. However, when splitting a live range that belongs to a proper register sub-class, inserting these extra COPY instructions completely remove the constraints from the remainder interval, and it may be allocated from the larger super-class. The spiller will mop up these small live ranges if we end up spilling anyway. It calls them snippets. llvm-svn: 136989
-
Jim Grosbach authored
Parsing and encoding for shifted index operands for load instructions. llvm-svn: 136986
-
- Aug 05, 2011
-
-
Jim Grosbach authored
More parsing support for indexed loads. Fix pre-indexed with writeback parsing for register offsets and handle basic post-indexed offsets. llvm-svn: 136982
-
Jakob Stoklund Olesen authored
Some instructions require restricted register classes, but most of the time that doesn't affect register allocation. For example, some instructions don't work with the stack pointer, but that is a reserved register anyway. Sometimes it matters, GR32_ABCD only has 4 allocatable registers. For such a proper sub-class, the register allocator should try to enable register class inflation since that makes more registers available for allocation. Make sure only legal super-classes are considered. For example, tGPR is not a proper sub-class in Thumb mode, but in ARM mode it is. llvm-svn: 136981
-
Jim Grosbach authored
Refactor STR[B] pre and post indexed instructions to use addressing modes for memory operands, which is necessary for assembly parsing and is more consistent with the rest of the memory instruction definitions. Make some incremental progress on refactoring away the mega-operand addrmode2 along the way, which is nice. llvm-svn: 136978
-
Jakob Stoklund Olesen authored
The old code would look at kills and defs in one pass over the instruction operands, causing problems with this code: %R0<def>, %CPSR<def,dead> = tLSLri %R5<kill>, 2, pred:14, pred:%noreg %R0<def>, %CPSR<def,dead> = tADDrr %R4<kill>, %R0<kill>, pred:14, %pred:%noreg The last instruction kills and redefines %R0, so it is still live after the instruction. This caused a register scavenger crash when compiling 483.xalancbmk for armv6. I am not including a test case because it requires too much bad luck to expose this old bug. First you need to convince the register allocator to use %R0 twice on the tADDrr instruction, then you have to convince BranchFolding to do something that causes it to run the register scavenger on he bad block. <rdar://problem/9898200> llvm-svn: 136973
-
Jim Grosbach authored
The immediate portion of the operand is just a boolean (the 'U' bit indicating add vs. subtract). Treat it as such. llvm-svn: 136969
-
Jim Grosbach authored
llvm-svn: 136968
-
Bob Wilson authored
<rdar://problem/9878189> llvm-svn: 136962
-
Chandler Carruth authored
llvm-svn: 136956
-
-
Chandler Carruth authored
inlined variable, based on the discussion in PR10542. This explodes the runtime of several passes down the pipeline due to a large number of "copies" remaining live across a large function. This only shows up with both debug and opt, but when it does it creates a many-minute compile when self-hosting LLVM+Clang. There are several other cases that show these types of regressions. All of this is tracked in PR10542, and progress is being made on fixing the issue. Once its addressed, the re-instated, but until then this restores the performance for self-hosting and other opt+debug builds. Devang, let me know if this causes any trouble, or impedes fixing it in any way, and thanks for working on this! llvm-svn: 136953
-
Owen Anderson authored
llvm-svn: 136942
-
Jim Grosbach authored
Enhance support for LDR instruction assembly parsing for post-indexed addressing with immediate values. Add tests. llvm-svn: 136940
-
- Aug 04, 2011
-
-
Jakob Stoklund Olesen authored
Patch by Ivan Krasin! llvm-svn: 136921
-
Devang Patel authored
llvm-svn: 136916
-
Devang Patel authored
llvm-svn: 136915
-
Devang Patel authored
We need to map DebugLoc. It leads to Fuction * (through subprogram entry node) which should be appropriately mapped. llvm-svn: 136910
-
Devang Patel authored
llvm-svn: 136909
-
Chris Lattner authored
llvm-svn: 136908
-
Roman Divacky authored
This is meant to be overriden by backends. Implement an override on PowerPC which adjusts the offset by 2 for ha16/lo16 relocation kinds. This removes a commented out hack and enables hello world to be compiled on PowerPC. llvm-svn: 136905
-
Devang Patel authored
llvm-svn: 136901
-
Evan Cheng authored
llvm-svn: 136900
-
Evan Cheng authored
llvm-svn: 136899
-
Owen Anderson authored
LDCL_POST and STCL_POST need one's-complement offsets, rather than two's complement offsets. Add an appropriate immediate type for them. llvm-svn: 136896
-
Duncan Sands authored
the PVS-studio tool. llvm-svn: 136878
-
Rafael Espindola authored
llvm-svn: 136868
-
Duncan Sands authored
reported at http://habrahabr.ru/blogs/compilers/125626/. llvm-svn: 136865
-
Andrew Trick authored
llvm-svn: 136857
-