- Oct 25, 2009
-
-
Nick Lewycky authored
VISIBILITY_HIDDEN removal. llvm-svn: 85043
-
Nick Lewycky authored
Chris claims we should never have visibility_hidden inside any .cpp file but that's still not true even after this commit. llvm-svn: 85042
-
- Oct 22, 2009
-
-
Evan Cheng authored
Load / store multiple was missing opportunites when the load / store bundles are at the end of the bb. Test case is already in, the bug is exposed by subsequent commit. llvm-svn: 84842
-
- Oct 01, 2009
-
-
Evan Cheng authored
Change ld/st multiples to explicitly model the writeback to base register. This fixes most of the -ldstopti-before-sched2 regressions. llvm-svn: 83191
-
- Sep 29, 2009
-
-
Evan Cheng authored
llvm-svn: 83058
-
- Sep 27, 2009
-
-
Evan Cheng authored
llvm-svn: 82893
-
- Sep 26, 2009
-
-
Evan Cheng authored
llvm-svn: 82836
-
- Sep 25, 2009
-
-
Evan Cheng authored
llvm-svn: 82805
-
Dan Gohman authored
- Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions. This eliminates MachineInstr's std::list member and allows the data to be created by isel and live for the remainder of codegen, avoiding a lot of copying and unnecessary translation. This also shrinks MemSDNode. - Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated fields for MachineMemOperands. - Change MemSDNode to have a MachineMemOperand member instead of its own fields with the same information. This introduces some redundancy, but it's more consistent with what MachineInstr will eventually want. - Ignore alignment when searching for redundant loads for CSE, but remember the greatest alignment. Target-specific code which previously used MemOperandSDNodes with generic SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range so that the SelectionDAG framework knows that MachineMemOperand information is available. llvm-svn: 82794
-
- Sep 11, 2009
-
-
Jim Grosbach authored
llvm-svn: 81556
-
- Aug 18, 2009
-
-
Jakob Stoklund Olesen authored
- Drop the Candidates argument and fix all callers. Now that RegScavenger tracks available registers accurately, there is no need to restict the search. - Make sure that no aliases of the found register are in use. This was a potential bug. llvm-svn: 79369
-
- Aug 13, 2009
-
-
Owen Anderson authored
llvm-svn: 78948
-
- Aug 11, 2009
-
-
Jim Grosbach authored
llvm-svn: 78666
-
- Aug 08, 2009
-
-
Evan Cheng authored
llvm-svn: 78455
-
- Aug 07, 2009
-
-
Evan Cheng authored
It turns out most of the thumb2 instructions are not allowed to touch SP. The semantics of such instructions are unpredictable. We have just been lucky that tests have been passing. This patch takes pain to ensure all the PEI lowering code does the right thing when lowering frame indices, insert code to manipulate stack pointers, etc. It's also custom lowering dynamic stack alloc into pseudo instructions so we can insert the right instructions at scheduling time. This fixes PR4659 and PR4682. llvm-svn: 78361
-
- Aug 04, 2009
-
-
Evan Cheng authored
llvm-svn: 78104
-
Evan Cheng authored
llvm-svn: 78057
-
Evan Cheng authored
llvm-svn: 78031
-
- Jul 14, 2009
-
-
Torok Edwin authored
This adds location info for all llvm_unreachable calls (which is a macro now) in !NDEBUG builds. In NDEBUG builds location info and the message is off (it only prints "UREACHABLE executed"). llvm-svn: 75640
-
- Jul 11, 2009
-
-
Evan Cheng authored
Major changes to Thumb (not Thumb2). Many 16-bit instructions either modifies CPSR when they are outside the IT blocks, or they can predicated when in Thumb2. Move the implicit def of CPSR to an optional def which defaults CPSR. This allows the 's' bit to be toggled dynamically. A side-effect of this change is asm printer is now using unified assembly. There are some minor clean ups and fixes as well. llvm-svn: 75359
-
- Jul 10, 2009
-
-
Evan Cheng authored
llvm-svn: 75206
-
Evan Cheng authored
Initial support for load / store multiple opt pass Thumb2 support (post-allocation only). It's kind of there, but not quite. I'll return to this later. llvm-svn: 75190
-
- Jul 08, 2009
-
-
Evan Cheng authored
Change how so_imm and t2_so_imm are handled. At instruction selection time, the immediates are no longer encoded in the imm8 + rot format, that are left as it is. The encoding is now done in ams printing and code emission time instead. llvm-svn: 75048
-
Torok Edwin authored
Finish converting lib/Target. llvm-svn: 75043
-
Torok Edwin authored
cerr+abort -> llvm_report_error assert(0)+abort -> LLVM_UNREACHABLE (assert(0)+llvm_unreachable-> abort() included) llvm-svn: 75018
-
- Jun 20, 2009
-
-
Evan Cheng authored
llvm-svn: 73791
-
- Jun 19, 2009
-
-
Evan Cheng authored
llvm-svn: 73749
-
- Jun 18, 2009
-
-
Evan Cheng authored
- Update register allocation hint after coalescing. This is done by the target since the hint is target dependent. This is important for ARM register pair hints. - Register allocator should resolve the second part of the hint (register number) before passing it to the target since it knows virtual register to physical register mapping. - More fixes to get ARM load / store double word working. llvm-svn: 73671
-
- Jun 15, 2009
-
-
Evan Cheng authored
llvm-svn: 73422
-
Evan Cheng authored
llvm-svn: 73413
-
Evan Cheng authored
llvm-svn: 73406
-
Evan Cheng authored
- Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent. - Allow targets to specify alternative register allocation orders based on allocation hint. Part 2. - Use the register allocation hint system to implement more aggressive load / store multiple formation. - Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g. v1025 = LDR v1024, 0 v1026 = LDR v1024, 0 => v1025,v1026 = LDRD v1024, 0 If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair. - Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions. This is work in progress, not yet enabled. llvm-svn: 73381
-
- Jun 13, 2009
-
-
Evan Cheng authored
consecutive addresses togther. This makes it easier for the post-allocation pass to form ldm / stm. This is step 1. We are still missing a lot of ldm / stm opportunities because of register allocation are not done in the desired order. More enhancements coming. llvm-svn: 73291
-
- Jun 05, 2009
-
-
Evan Cheng authored
Changing allocation ordering from r3 ... r0 back to r0 ... r3. The order change no longer make sense after the coalescing changes we have made since then. llvm-svn: 72955
-
Evan Cheng authored
llvm-svn: 72952
-
Evan Cheng authored
llvm-svn: 72950
-
- Jun 04, 2009
-
-
Evan Cheng authored
Re-apply 72756 with fixes. One of those was introduced by we changed MachineInstrBuilder::addReg() interface. llvm-svn: 72826
-
- Jun 03, 2009
-
-
Evan Cheng authored
llvm-svn: 72757
-
Evan Cheng authored
llvm-svn: 72756
-
- May 13, 2009
-
-
Bill Wendling authored
booleans. This gives a better indication of what the "addReg()" is doing. Remembering what all of those booleans mean isn't easy, especially if you aren't spending all of your time in that code. I took Jakob's suggestion and made it illegal to pass in "true" for the flag. This should hopefully prevent any unintended misuse of this (by reverting to the old way of using addReg()). llvm-svn: 71722
-