- Jan 20, 2011
-
-
Evan Cheng authored
TargetInstrInfo: Change produceSameValue() to take MachineRegisterInfo as an optional argument. When in SSA form, targets can use it to make more aggressive equality analysis. Machine LICM: 1. Eliminate isLoadFromConstantMemory, use MI.isInvariantLoad instead. 2. Fix a bug which prevent CSE of instructions which are not re-materializable. 3. Use improved form of produceSameValue. ARM: 1. Teach ARM produceSameValue to look pass some PIC labels. 2. Look for operands from different loads of different constant pool entries which have same values. 3. Re-implement PIC GA materialization using movw + movt. Combine the pair with a "add pc" or "ldr [pc]" to form pseudo instructions. This makes it possible to re-materialize the instruction, allow machine LICM to hoist the set of instructions out of the loop and make it possible to CSE them. It's a bit hacky, but it significantly improve code quality. 4. Some minor bug fixes as well. With the fixes, using movw + movt to materialize GAs significantly outperform the load from constantpool method. 186.crafty and 255.vortex improved > 20%, 254.gap and 176.gcc ~10%. llvm-svn: 123905
-
Michael J. Spencer authored
llvm-svn: 123902
-
Michael J. Spencer authored
llvm-svn: 123901
-
Michael J. Spencer authored
llvm-svn: 123899
-
Michael J. Spencer authored
llvm-svn: 123898
-
Michael J. Spencer authored
llvm-svn: 123897
-
Michael J. Spencer authored
llvm-svn: 123896
-
Michael J. Spencer authored
llvm-svn: 123895
-
Andrew Trick authored
Added a check for already live regs before claiming HighRegPressure. Fixed a few cases of checking the wrong number of successors. Added some tracing until these heuristics are better understood. llvm-svn: 123892
-
Jakob Stoklund Olesen authored
The live range may have been deleted earlier because of rematerialization. llvm-svn: 123891
-
Jakob Stoklund Olesen authored
register coalescing. llvm-svn: 123890
-
Michael J. Spencer authored
llvm-svn: 123886
-
Venkatraman Govindaraju authored
with useful instructions. llvm-svn: 123884
-
Cameron Zwarich authored
llvm-svn: 123879
-
Cameron Zwarich authored
llvm-svn: 123877
-
Jakob Stoklund Olesen authored
llvm-svn: 123872
-
Eric Christopher authored
llvm-svn: 123866
-
Eric Christopher authored
with an invalid type then split the result and perform the overflow check normally. Fixes the 32-bit parts of rdar://8622122 and rdar://8774702. llvm-svn: 123864
-
Devang Patel authored
llvm-svn: 123862
-
Jakob Stoklund Olesen authored
llvm-svn: 123859
-
Jakob Stoklund Olesen authored
interval after an instruction. The leaveIntvAfter() method only adds liveness from the instruction's boundary index to the inserted copy. Ideally, SplitKit should be smarter about this, perhaps by combining useIntv() and leaveIntvAfter() into one method that guarantees continuity. llvm-svn: 123858
-
Jim Grosbach authored
llvm-svn: 123857
-
Devang Patel authored
llvm-svn: 123856
-
- Jan 19, 2011
-
-
Jakob Stoklund Olesen authored
Region splitting includes loop splitting as a subset, and it is more generic. The splitting heuristics for variables that are live in more than one block are now: 1. Try to create a region that covers multiple basic blocks. 2. Try to create a new live range for each block with multiple uses. 3. Spill. Steps 2 and 3 are similar to what the standard spiller is doing. llvm-svn: 123853
-
Nick Lewycky authored
llvm-svn: 123842
-
Nick Lewycky authored
by indvars through the scev expander. trunc(add x, y) --> add(trunc x, y). Currently SCEV largely folds the other way which is probably wrong, but preserved to minimize churn. Instcombine doesn't do this fold either, demonstrating a missed optz'n opportunity on code doing add+trunc+add. llvm-svn: 123838
-
Bruno Cardoso Lopes authored
llvm-svn: 123837
-
Rafael Espindola authored
llvm-svn: 123834
-
Douglas Gregor authored
llvm-svn: 123833
-
Nick Lewycky authored
llvm-svn: 123832
-
Daniel Dunbar authored
llvm-svn: 123823
-
Andrew Trick authored
of the floating point types less than 64-bits. It's somewhat of a temporary hack but forces more accurate modeling of register pressure and results in fewer spills. llvm-svn: 123811
-
Andrew Trick authored
llvm-svn: 123810
-
Evan Cheng authored
Don't forget to emit the load from indirect symbol when using movw + movt to materialize GA indirect symbols. llvm-svn: 123809
-
Owen Anderson authored
Unfortunately, while this is the "right" thing to do, it breaks some ARM asm parsing tests because MemMode5 and ThumbMemModeReg are ambiguous. This is tricky to resolve since neither is a subset of the other. XFAIL the test for now. The old way was broken in other ways, just ways we didn't happen to be testing, and our ARM asm parsing is going to require significant revisiting at a later point anyways. llvm-svn: 123786
-
- Jan 18, 2011
-
-
Bruno Cardoso Lopes authored
vmrs reg, fpexc vmrs reg, fpsid vmsr fpexc, reg vmsr fpsid, reg llvm-svn: 123783
-
Bruno Cardoso Lopes authored
llvm-svn: 123778
-
Bruno Cardoso Lopes authored
llvm-svn: 123776
-
Dan Gohman authored
are pointing to the same object, one pointer is accessing the entire object, and the other is access has a non-zero size. This prevents TBAA from kicking in and saying NoAlias in such cases. llvm-svn: 123775
-
Jakob Stoklund Olesen authored
Analyze the live range's behavior entering and leaving basic blocks. Compute an interference pattern for each allocation candidate, and use SpillPlacement to find an optimal region where that register can be live. This code is still not enabled. llvm-svn: 123774
-