- Jun 30, 2011
-
-
Rafael Espindola authored
llvm-svn: 134189
-
Rafael Espindola authored
llvm-svn: 134148
-
Jakob Stoklund Olesen authored
This patch will sometimes choose live range split points next to interference instead of always splitting next to a register point. That means spill code can now appear almost anywhere, and it was necessary to fix code that didn't expect that. The difficult places were: - Between a CALL returning a value on the x87 stack and the corresponding FpPOP_RETVAL (was FpGET_ST0). Probably also near x87 inline assembly, but that didn't actually show up in testing. - Between a CALL popping arguments off the stack and the corresponding ADJCALLSTACKUP. Both are fixed now. The only place spill code can't appear is after terminators, see SplitAnalysis::getLastSplitPoint. Original commit message: Rewrite RAGreedy::splitAroundRegion, now with cool ASCII art. This function has to deal with a lot of special cases, and the old version got it wrong sometimes. In particular, it would sometimes leave multiple uses in the stack interval in a single block. That causes bad code with multiple reloads in the same basic block. The new version handles block entry and exit in a single pass. It first eliminates all the easy cases, and then goes on to create a local interval for the blocks with difficult interference. Previously, we would only create the local interval for completely isolated blocks. It can happen that the stack interval becomes completely empty because we could allocate a register in all edge bundles, and the new local intervals deal with the interference. The empty stack interval is harmless, but we need to remove a SplitKit assertion that checks for empty intervals. llvm-svn: 134125
-
Eric Christopher authored
Fixes rdar://9643582 llvm-svn: 134123
-
Devang Patel authored
Revert r133953 for now. llvm-svn: 134116
-
- Jun 29, 2011
-
-
Rafael Espindola authored
llvm-svn: 134093
-
Benjamin Kramer authored
llvm-svn: 134067
-
Jakob Stoklund Olesen authored
miscompile. llvm-svn: 134053
-
Evan Cheng authored
llvm-svn: 134049
-
Jakob Stoklund Olesen authored
This function has to deal with a lot of special cases, and the old version got it wrong sometimes. In particular, it would sometimes leave multiple uses in the stack interval in a single block. That causes bad code with multiple reloads in the same basic block. The new version handles block entry and exit in a single pass. It first eliminates all the easy cases, and then goes on to create a local interval for the blocks with difficult interference. Previously, we would only create the local interval for completely isolated blocks. It can happen that the stack interval becomes completely empty because we could allocate a register in all edge bundles, and the new local intervals deal with the interference. The empty stack interval is harmless, but we need to remove a SplitKit assertion that checks for empty intervals. llvm-svn: 134047
-
- Jun 28, 2011
-
-
Evan Cheng authored
llvm-svn: 134030
-
Evan Cheng authored
sink them into MC layer. - Added MCInstrInfo, which captures the tablegen generated static data. Chang TargetInstrInfo so it's based off MCInstrInfo. llvm-svn: 134021
-
Jakob Stoklund Olesen authored
llvm-svn: 134013
-
Chandler Carruth authored
llvm-svn: 133981
-
Jakob Stoklund Olesen authored
llvm-svn: 133978
-
Evan Cheng authored
llvm-svn: 133967
-
Evan Cheng authored
llvm-svn: 133962
-
Devang Patel authored
During bottom up fast-isel, instructions emitted to materalize registers are at top of basic block and do not have debug location. This may misguide debugger while entering the basic block and sometimes debugger provides semi useful view of current location to developer by picking up previous known location as current location. Assign a sensible location to the first instruction in a basic block, if it does not have one location derived from source file, so that debugger can provide meaningful user experience to developers in edge cases. llvm-svn: 133953
-
- Jun 27, 2011
-
-
Evan Cheng authored
llvm-svn: 133944
-
Owen Anderson authored
The index stored in the RegDefIter is one after the current index. When getting the index, decrement it so that it points to the current element. Fixes an off-by-one bug encountered when trying to make use of MVT::untyped. llvm-svn: 133923
-
Andrew Trick authored
Removed the check that peeks past EXTRA_SUBREG, which I don't think makes sense any more. Intead treat it as a normal register def. No significant affect on x86 or ARM benchmarks. llvm-svn: 133917
-
Jakob Stoklund Olesen authored
Patch by Sanjoy Das! llvm-svn: 133910
-
Jakob Stoklund Olesen authored
Both become <earlyclobber> defs on the INLINEASM MachineInstr, but we now use two different asm operand kinds. The new Kind_Clobber is treated identically to the old Kind_RegDefEarlyClobber for now, but x87 floating point stack inline assembly does care about the difference. This will pop a register off the stack: asm("fstp %st" : : "t"(x) : "st"); While this will pop the input and push an output: asm("fst %st" : "=&t"(r) : "t"(x)); We need to know if ST0 was a clobber or an output operand, and we can't depend on <dead> flags for that. llvm-svn: 133902
-
Jakob Stoklund Olesen authored
The INLINEASM MachineInstrs have an immediate operand describing each original inline asm operand. Decode the bits in MachineInstr::print() so it is easier to read: INLINEASM <es:rorq $1,$0>, $0:[regdef], %vreg0<def>, %vreg1<def>, $1:[imm], 1, $2:[reguse] [tiedto:$0], %vreg2, %vreg3, $3:[regdef-ec], %EFLAGS<earlyclobber,imp-def> llvm-svn: 133901
-
Rafael Espindola authored
llvm-svn: 133900
-
Rafael Espindola authored
remove the analysis group. llvm-svn: 133899
-
Rafael Espindola authored
llvm-svn: 133897
-
- Jun 26, 2011
-
-
Rafael Espindola authored
llvm-svn: 133896
-
Rafael Espindola authored
llvm-svn: 133895
-
Rafael Espindola authored
llvm-svn: 133886
-
- Jun 25, 2011
-
-
Owen Anderson authored
The scheduler needs to be aware on the existence of untyped nodes when it performs type propagation for EXTRACT_SUBREG. llvm-svn: 133838
-
- Jun 24, 2011
-
-
Devang Patel authored
llvm-svn: 133821
-
Rafael Espindola authored
llvm-svn: 133798
-
Rafael Espindola authored
we cannot duplicate to every predecessor. llvm-svn: 133797
-
Rafael Espindola authored
llvm-svn: 133793
-
Evan Cheng authored
target machine from those that are only needed by codegen. The goal is to sink the essential target description into MC layer so we can start building MC based tools without needing to link in the entire codegen. First step is to refactor TargetRegisterInfo. This patch added a base class MCRegisterInfo which TargetRegisterInfo is derived from. Changed TableGen to separate register description from the rest of the stuff. llvm-svn: 133782
-
- Jun 23, 2011
-
-
Bill Wendling authored
supports compact unwind info instead of having a separate flag indicating this. llvm-svn: 133685
-
Rafael Espindola authored
register allocation if it has a indirectbr or if we can duplicate it to every predecessor. This fixes the SingleSource/Benchmarks/Shootout-C++/matrix.cpp regression but keeps the previous improvements to sunspider. llvm-svn: 133682
-
Bill Wendling authored
llvm-svn: 133662
-
Rafael Espindola authored
don't remove blocks that have their address taken. llvm-svn: 133659
-