- May 18, 2012
-
-
Eric Christopher authored
llvm-svn: 157060
-
Jakob Stoklund Olesen authored
It is no longer necessary to separate VirtCopies, PhysCopies, and ImpDefCopies. Implicitly defined copies are extremely rare after we added the ProcessImplicitDefs pass, and physical register copies are not joined any longer. llvm-svn: 157059
-
Eric Christopher authored
Patch by Jack Carter. llvm-svn: 157057
-
Jakob Stoklund Olesen authored
This has been disabled for a while, and it is not a feature we want to support. Copies between physical and virtual registers are eliminated by good hinting support in the register allocator. Joining virtual and physical registers is really a form of register allocation, and the coalescer is not properly equipped to do that. In particular, it cannot backtrack coalescing decisions, and sometimes that would cause it to create programs that were impossible to register allocate, by exhausting a small register class. It was also very difficult to keep track of the live ranges of aliasing registers when extending the live range of a physreg. By disabling physreg joining, we can let fixed physreg live ranges remain constant throughout the register allocator super-pass. One type of physreg joining remains: A virtual register that has a single value which is a copy of a reserved register can be merged into the reserved physreg. This always lowers register pressure, and since we don't compute live ranges for reserved registers, there are no problems with aliases. llvm-svn: 157055
-
Stepan Dyatkovskiy authored
SelectionDAGBuilder::Clusterify : main functinality was replaced with CRSBuilder::optimize, so big part of Clusterify's code was reduced. llvm-svn: 157046
-
Craig Topper authored
llvm-svn: 157044
-
Craig Topper authored
llvm-svn: 157043
-
Evan Cheng authored
non-profitable commute using outdated info. The test case would still fail because of poor pre-RA schedule. That will be fixed by MI scheduler. rdar://11472010 llvm-svn: 157038
-
Eric Christopher authored
llvm-svn: 157033
-
Nuno Lopes authored
this fixes the missed optimization I was seeing in the CorrelatedValuePropagation pass llvm-svn: 157032
-
Nuno Lopes authored
llvm-svn: 157024
-
Andrew Trick authored
llvm-svn: 157020
-
Kevin Enderby authored
the 0b10 mask encoding bits. Make MSR APSR writes without a _<bits> qualifier an alias for MSR APSR_nzcvq even though ARM as deprecated it use. Also add support for suffixes (_nzcvq, _g, _nzcvqg) for APSR versions. Some FIXMEs in the code for better error checking when versions shouldn't be used. rdar://11457025 llvm-svn: 157019
-
- May 17, 2012
-
-
Bill Wendling authored
llvm-svn: 157011
-
Andrew Trick authored
llvm-svn: 157007
-
Andrew Trick authored
Introduce the basic strategy for register pressure scheduling. 1) Respect target limits at all times. 2) Indentify critical register classes (pressure sets). Track pressure within the scheduled region. Avoid increasing scheduled pressure for critical registers. 3) Avoid exceeding the max pressure of the region prior to scheduling. Added logic for picking between the top and bottom ready Q's based on regpressure heuristics. Status: functional but needs to be asjusted to achieve good results. llvm-svn: 157006
-
Andrew Trick authored
llvm-svn: 157005
-
Andrew Trick authored
llvm-svn: 157004
-
Andrew Trick authored
llvm-svn: 157003
-
Andrew Trick authored
llvm-svn: 157002
-
Jakob Stoklund Olesen authored
RegisterCoalescer set <undef> flags on all operands of copy instructions that are scheduled to be removed. This is so they won't affect shrinkToUses() by introducing false register reads. Make sure those <undef> flags are never cleared, or shrinkToUses() could cause live intervals to end at instructions about to be deleted. This would be a lot simpler if RegisterCoalescer could just erase joined copies immediately instead of keeping all the to-be-deleted instructions around. This fixes PR12862. Unfortunately, bugpoint can't create a sane test case for this. Like many other coalescer problems, this failure depends of a very fragile series of events. <rdar://problem/11474428> llvm-svn: 157001
-
Jakob Stoklund Olesen authored
Make sure useless (def-only) intervals also get verified. llvm-svn: 157000
-
Bill Wendling authored
bugpoint-ing, it may turn into something else. llvm-svn: 156998
-
Chris Lattner authored
separate side table, using the handy SequenceToOffsetTable class. This encodes all these weird things into another 256 bytes, allowing all intrinsics to be encoded this way. llvm-svn: 156995
-
Tim Northover authored
Patch by Meador Inge. llvm-svn: 156989
-
Manuel Klimek authored
llvm-svn: 156986
-
Stepan Dyatkovskiy authored
SelectionDAGBuilder: CaseBlock, CaseRanges and CaseCmp changed representation of Low and High from signed to unsigned. Since unsigned ints usually simpler, faster and allows to reduce some extra signed bit checks needed before <,>,<=,>= comparisons. llvm-svn: 156985
-
Chris Lattner authored
for future expansion, no functionality change yet though. llvm-svn: 156979
-
Chris Lattner authored
are only rejected because they can't be encoded into a 32-bit unit, not because they contain an unencodable feature. llvm-svn: 156978
-
Chris Lattner authored
intrinsics that use passed-in arguments. llvm-svn: 156977
-
Akira Hatanaka authored
llc to recognize MIPS16 as a MIPS ASE extension. -mips16 will mean the mips16 ASE for mips32 by default. As part of fixing of adding this we discovered some small changes that need to be made to MipsInstrInfo::storeRegToStackSLot and MipsInstrInfo::loadRegFromStackSlot. We were using some "==" equality tests where in fact we should have been using Mips::<regclas>.hasSubClassEQ instead, per suggestion of Jakob Stoklund Olesen. Patch by Reed Kotler. llvm-svn: 156958
-
- May 16, 2012
-
-
Jakob Stoklund Olesen authored
When widening an existing <def,reads-undef> operand to a super-register, it may be necessary to clear the <undef> flag because the wider register is now read-modify-write through the instruction. Conversely, it may be necessary to add an <undef> flag when the coalescer turns a full-register def into a sub-register def, but the larger register wasn't live before the instruction. This happens in test/CodeGen/ARM/coalesce-subregs.ll, but the test is too small for the <undef> flags to affect the generated code. llvm-svn: 156951
-
Danil Malyshev authored
Added LLIMCJITMemoryManager to the lli. This manager will be used for MCJIT instead of DefaultJIMMemoryManager. It's more flexible for MCJIT tasks, in addition it's provides a invalidation instruction cache for code sections which will be used before JIT code will be executed. llvm-svn: 156933
-
Benjamin Kramer authored
llvm-svn: 156917
-
Duncan Sands authored
llvm-svn: 156909
-
Chris Lattner authored
generated code (for Intrinsic::getType) into a table. This handles common cases right now, but I plan to extend it to handle all cases and merge in type verification logic as well in follow-on patches. llvm-svn: 156905
-
-
Jakob Stoklund Olesen authored
It is now possible to coalesce weird skewed sub-register copies by picking a super-register class larger than both original registers. The included test case produces code like this: vld2.32 {d16, d17, d18, d19}, [r0]! vst2.32 {d18, d19, d20, d21}, [r0] We still perform interference checking as if it were a normal full copy join, so this is still quite conservative. In particular, the f1 and f2 functions in the included test case still have remaining copies because of false interference. llvm-svn: 156878
-
Jakob Stoklund Olesen authored
It is possible to coalesce two overlapping registers to a common super-register that it larger than both of the original registers. The important difference is that it may be necessary to rewrite DstReg operands as well as SrcReg operands because the sub-register index has changed. This behavior is still disabled by CoalescerPair. llvm-svn: 156869
-
Jakob Stoklund Olesen authored
This can happen when widening a virtual register to a super-register class. llvm-svn: 156867
-