- Jul 27, 2011
-
-
Jakob Stoklund Olesen authored
When splitting global live ranges, it is now possible to split for multiple destination intervals at once. Previously, we only had the main and stack intervals. Each edge bundle is assigned to a split candidate, and splitAroundRegion will insert copies between the candidate intervals and the stack interval as needed. The multi-way splitting is used to split around compact regions when enabled with -compact-regions. The best candidate register still gets all the bundles it wants, but everything outside the main interval is first split around compact regions before we create single-block intervals. Compact region splitting still causes some regressions, so it is not enabled by default. llvm-svn: 136186
-
Jakob Stoklund Olesen authored
llvm-svn: 136178
-
Jakob Stoklund Olesen authored
These copies would coalesce easily, but the resulting value would be defined by a deleted instruction. Now we also remove the undefined value number from the destination register. This fixes PR10503. llvm-svn: 136174
-
Dan Gohman authored
llvm-svn: 136156
-
- Jul 26, 2011
-
-
Eli Friedman authored
llvm-svn: 136130
-
Devang Patel authored
While extracting lexical scopes from machine instruction stream, work on one machine basic block at a time. llvm-svn: 136106
-
Duncan Sands authored
llvm-svn: 136080
-
Jakob Stoklund Olesen authored
When dead code elimination deletes a PHI value, the virtual register may split into multiple connected components. In that case, revert each component to the RS_Assign stage. The new components are guaranteed to be smaller (the original value numbers are distributed among the components), so this will always be making progress. The components are now allowed to evict other live ranges or be split again. llvm-svn: 136034
-
Evan Cheng authored
llvm-svn: 136031
-
Evan Cheng authored
Rename TargetAsmParser to MCTargetAsmParser and TargetAsmLexer to MCTargetAsmLexer; rename createAsmLexer to createMCAsmLexer and createAsmParser to createMCAsmParser. llvm-svn: 136027
-
Evan Cheng authored
llvm-svn: 136010
-
Eli Friedman authored
Initial implementation of 'fence' instruction, the new C++0x-style replacement for llvm.memory.barrier. This is just a LangRef entry and reading/writing/memory representation; optimizer+codegen support coming soon. llvm-svn: 136009
-
Eli Friedman authored
llvm-svn: 135993
-
- Jul 25, 2011
-
-
Jakub Staszak authored
MachineBlockFrequencyInfo. llvm-svn: 135937
-
Jakob Stoklund Olesen authored
This mechanism already exists, but the RS_Split2 stage makes it clearer. When live range splitting creates ranges that may not be making progress, they are marked RS_Split2 instead of RS_New. These ranges may be split again, but only in a way that can be proven to make progress. For local ranges, that means they must be split into ranges used by strictly fewer instructions. For global ranges, region splitting is bypassed and the RS_Split2 ranges go straight to per-block splitting. llvm-svn: 135912
-
Jakob Stoklund Olesen authored
The stage is used to control where a live range is going, not where it is coming from. Live ranges created by splitting will usually be marked RS_New, but some are marked RS_Spill to avoid wasting time trying to split them again. The old RS_Global and RS_Local stages are merged - they are really the same thing for local and global live ranges. llvm-svn: 135911
-
Jay Foad authored
llvm-svn: 135904
-
- Jul 24, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 135886
-
Jakob Stoklund Olesen authored
This fixes PR10463. A two-address instruction with an <undef> use operand was incorrectly rewritten so the def and use no longer used the same register, violating the tie constraint. Fix this by always rewriting <undef> operands with the register a def operand would use. llvm-svn: 135885
-
- Jul 23, 2011
-
-
Jakob Stoklund Olesen authored
This method computes the edge bundles that should be live when splitting around a compact region. This is independent of interference. The function returns false if the live range was already a compact region, or the compact region doesn't have any live bundles - it would be the same as splitting around basic blocks. Compact regions are computed using the normal spill placement code. We pretend there is interference in all live-through blocks that don't use the live range. This removes all edges from the Hopfield network used for spill placement, so it converges instantly. llvm-svn: 135847
-
Jakob Stoklund Olesen authored
If there is no interference and no last split point, we cannot enterIntvBefore(Stop) - that function needs a real instruction. Use enterIntvAtEnd instead for that very easy case. This code doesn't currently run, it is needed by multi-way splitting. llvm-svn: 135846
-
Jakob Stoklund Olesen authored
A split candidate can have a null PhysReg which means that it doesn't map to a real interference pattern. Instead, pretend that all through blocks have interference. This makes it possible to generate compact regions where the live range doesn't go through blocks that don't use it. The live range will still be live between directly connected blocks with uses. Splitting around a compact region tends to produce a live range with a high spill weight, so it may evict a less dense live range. llvm-svn: 135845
-
Jakob Stoklund Olesen authored
This method matches addLinks - All the listed blocks are considered to have interference, so they add a negative bias to their bundles. This could also be done by addConstraints, but that requires building a separate BlockConstraint array. llvm-svn: 135844
-
Jakob Stoklund Olesen authored
They always report 'no interference'. llvm-svn: 135843
-
Evan Cheng authored
llvm-svn: 135833
-
- Jul 22, 2011
-
-
Jay Foad authored
ConstantExpr::getGetElementPtr to use ArrayRef. llvm-svn: 135762
-
Jay Foad authored
ArrayRef. llvm-svn: 135761
-
Jakub Staszak authored
llvm-svn: 135742
-
Jakub Staszak authored
llvm-svn: 135738
-
Jakub Staszak authored
llvm-svn: 135734
-
Jakub Staszak authored
llvm-svn: 135724
-
Jakub Staszak authored
llvm-svn: 135714
-
- Jul 21, 2011
-
-
Devang Patel authored
llvm-svn: 135633
-
Devang Patel authored
There are two ways to map a variable to its lexical scope. Lexical scope information is embedded in MDNode describing the variable. It is also available as a part of DebugLoc attached with DBG_VALUE instruction. DebugLoc attached with an instruction is less reliable in optimized code so use information embedded in the MDNode. llvm-svn: 135629
-
- Jul 20, 2011
-
-
Devang Patel authored
While emitting constant value, look through derived type and use underlying basic type to determine size and signness of the constant value. llvm-svn: 135627
-
Evan Cheng authored
There is still a bit more refactoring left to do in Targets. But we are now very close to fixing all the layering issues in MC. llvm-svn: 135611
-
Eli Friedman authored
llvm-svn: 135595
-
Evan Cheng authored
- Introduce JITDefault code model. This tells targets to set different default code model for JIT. This eliminates the ugly hack in TargetMachine where code model is changed after construction. llvm-svn: 135580
-
Evan Cheng authored
TargetLoweringObjectFileImpl down to MCObjectFileInfo. TargetAsmInfo is done to one last method. It's *almost* gone! llvm-svn: 135569
-
Evan Cheng authored
llvm-svn: 135535
-