- Aug 09, 2011
-
-
Jim Grosbach authored
Fix the instruction representation to correctly only allow post-indexed form. Add tests. llvm-svn: 137074
-
Owen Anderson authored
llvm-svn: 137073
-
Bill Wendling authored
Patch by Jingyue! llvm-svn: 137072
-
Jim Grosbach authored
llvm-svn: 137071
-
Jim Grosbach authored
llvm-svn: 137070
-
- Aug 08, 2011
-
-
Jakob Stoklund Olesen authored
They improve the verbose assembly. llvm-svn: 137069
-
Bruno Cardoso Lopes authored
llvm-svn: 137067
-
Jim Grosbach authored
Allow labels for load/store instructions when parsing. There's encoding issues, still, so this doesn't work all the way through, yet. llvm-svn: 137064
-
Jakob Stoklund Olesen authored
These the methods are target-independent since they simply scan the memory operands. They can live in TargetInstrInfoImpl. llvm-svn: 137063
-
Owen Anderson authored
Fix encodings for Thumb ASR and LSR immediate operands. They encode the range 1-32, with 32 encoded as 0. llvm-svn: 137062
-
Eli Friedman authored
Fix up the patterns for SXTB, SXTH, UXTB, and UXTH so that they are correctly active without HasT2ExtractPack. PR10611. llvm-svn: 137061
-
Benjamin Kramer authored
llvm-svn: 137060
-
Benjamin Kramer authored
Add MCInstrAnalysis class. This allows the targets to specify own versions of MCInstrDescs functions. - Add overrides for ARM. - Teach llvm-objdump to use this instead of plain MCInstrDesc. llvm-svn: 137059
-
Benjamin Kramer authored
- Indent simple loops - Print unreachable blocks as .byte directives llvm-svn: 137058
-
Benjamin Kramer authored
This way we can avoid printing unreachable code (data). llvm-svn: 137057
-
Devang Patel authored
llvm-svn: 137056
-
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: 137042
-
Bill Wendling authored
llvm-svn: 137041
-
Bill Wendling authored
llvm-svn: 137040
-
- 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
-
Jim Grosbach authored
llvm-svn: 136977
-
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
-