summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMISelLowering.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* A minor simplification: no functional change.Bob Wilson2011-06-151-7/+4
| | | | llvm-svn: 133047
* PerformBFICombine - (bfi A, (and B, Mask1), Mask2) -> (bfi A, B, Mask2) iffEvan Cheng2011-06-151-4/+7
| | | | | | | | | | | the bits being cleared by the AND are not demanded by the BFI. The previous BFI dag combine rule was actually incorrect (or used to be correct until BFI representation changed). rdar://9609030 llvm-svn: 133034
* Add an optimization that looks for a specific pair-wise add pattern and ↵Tanya Lattner2011-06-141-5/+106
| | | | | | | | generates a vpaddl instruction instead of scalarizing the add. Includes a test case. llvm-svn: 133027
* Add one more argument to the prefetch intrinsic to indicate whether it's a dataBruno Cardoso Lopes2011-06-141-3/+4
| | | | | | | or instruction cache access. Update the targets to match it and also teach autoupgrade. llvm-svn: 132976
* Provide an ARMCCState subclass of CCState so that ARM clients will always setCameron Zwarich2011-06-101-17/+29
| | | | | | CallOrPrologue correctly and eliminate the existing setter. llvm-svn: 132856
* A CCState was being created without setting whether it is in the Call or ↵Cameron Zwarich2011-06-091-0/+1
| | | | | | | | | | | Prologue state, causing an assertion failure downstream. This fixes <rdar://problem/9562908>. This really seems like it should always be set at CCState creation time, so mistakes like this can never happen. I'll take a look at doing that. llvm-svn: 132811
* Add a parameter to CCState so that it can access the MachineFunction.Eric Christopher2011-06-081-16/+16
| | | | | | | | No functional change. Part of PR6965 llvm-svn: 132763
* Make the Uv constraint a memory operand. This doesn't solve theEric Christopher2011-06-031-0/+3
| | | | | | | | addressing mode problem mentioned in r132559. Backend part of rdar://9037836 and part of rdar://9119939 llvm-svn: 132561
* Have LowerOperandForConstraint handle multiple character constraints.Eric Christopher2011-06-021-3/+7
| | | | | | Part of rdar://9119939 llvm-svn: 132510
* On Darwin ARM, set the UNWIND_RESUME libcall to _Unwind_SjLj_Resume.John McCall2011-05-291-0/+1
| | | | | | | | | This is important for the correct lowering of unwind instructions (which doesn't matter at all) and llvm.eh.resume calls (which does). Take 2, now with more basic competence. llvm-svn: 132295
* I didn't mean to commit these residues of a personal project.John McCall2011-05-291-1/+0
| | | | llvm-svn: 132293
* On Darwin ARM, set the UNWIND_RESUME libcall to _Unwind_SjLj_Resume.John McCall2011-05-291-0/+1
| | | | | | | This is important for the correct lowering of unwind instructions (which doesn't matter at all) and llvm.eh.resume calls (which does). llvm-svn: 132291
* Add support for ARM ldrexd/strexd intrinsics. They both use i32 register pairsBruno Cardoso Lopes2011-05-281-0/+22
| | | | | | | | to load/store i64 values. Since there's no current support to explicitly declare such restrictions, implement it by using specific hardcoded register pairs during isel. llvm-svn: 132248
* Fix the remaining atomic intrinsics to use the right register classes on Thumb2,Cameron Zwarich2011-05-271-10/+23
| | | | | | and add some basic tests for them. llvm-svn: 132235
* Don't use movw / movt for iOS static codegen for now to workaround some ↵Evan Cheng2011-05-271-1/+2
| | | | | | tools issues. rdar://9514789 llvm-svn: 132211
* RTABI chapter 4.3.4 specifies __eabi_mem* calls. Specifically, __eabi_memset ↵Renato Golin2011-05-221-0/+6
| | | | | | accepts parameters (ptr, size, value) in a different order than GNU's memset (ptr, value, size), therefore the special lowering in AAPCS mode. Implementation by Evzen Muller. llvm-svn: 131868
* Revert accidental commit.Evan Cheng2011-05-201-1/+1
| | | | llvm-svn: 131739
* Revert r131664 and fix it in instcombine instead. rdar://9467055Evan Cheng2011-05-201-1/+1
| | | | llvm-svn: 131708
* Fixed sdiv and udiv for <4 x i16>. The test from r125402 still applies for ↵Mon P Wang2011-05-191-7/+7
| | | | | | this change. llvm-svn: 131630
* Handle perfect shuffle case that generates a vrev for vectors of floats.Tanya Lattner2011-05-181-1/+2
| | | | | | Add test case. llvm-svn: 131582
* Revise r131553. Just use the type of the input node and forgo the bitcast. ↵Evan Cheng2011-05-181-4/+3
| | | | | | rdar://9449159. llvm-svn: 131555
* Fix an ARMTargetLowering::LowerSELECT bug: legalized result must have same ↵Evan Cheng2011-05-181-1/+3
| | | | | | type as input. Sorry test cases only trigger when dag combine is disabled. rdar://9449178 llvm-svn: 131553
* In r131488 I misunderstood how VREV works. It splits the vector in half and ↵Tanya Lattner2011-05-181-1/+9
| | | | | | | | splits each half. Therefore, the real problem was that we were using a VREV64 for a 4xi16, when we should have been using a VREV32. Updated test case and reverted change to the PerfectShuffle Table. llvm-svn: 131529
* Fix typo.Cameron Zwarich2011-05-181-4/+4
| | | | llvm-svn: 131519
* Fix more of PR8825 by correctly using rGPR registers when lowering atomicCameron Zwarich2011-05-181-2/+11
| | | | | | compare-and-swap intrinsics. llvm-svn: 131518
* Give the 'eh.sjlj.dispatchsetup' intrinsic call the value coming from the setjmpBill Wendling2011-05-111-1/+1
| | | | | | | | intrinsic call. This prevents it from being reordered so that it appears *before* the setjmp intrinsic (thus making it completely useless). <rdar://problem/9409683> llvm-svn: 131174
* Make the logic for determining function alignment more explicit. No ↵Eli Friedman2011-05-061-5/+2
| | | | | | functionality change. llvm-svn: 131012
* Temporarily disable use of divmod compiler-rt functions for iOS.Bob Wilson2011-05-031-6/+0
| | | | llvm-svn: 130766
* Add an unfolded offset field to LSR's Formula record. This is used toDan Gohman2011-05-031-0/+8
| | | | | | | | model constants which can be added to base registers via add-immediate instructions which don't require an additional register to materialize the immediate. llvm-svn: 130743
* 80-col.Eric Christopher2011-04-291-8/+9
| | | | llvm-svn: 130558
* ARM and Thumb2 support for atomic MIN/MAX/UMIN/UMAX loads.Jim Grosbach2011-04-261-0/+143
| | | | | | rdar://9326019 llvm-svn: 130234
* Thumb2 and ARM add/subtract with carry fixes.Andrew Trick2011-04-231-66/+73
| | | | | | | | | | | | | Fixes Thumb2 ADCS and SBCS lowering: <rdar://problem/9275821>. t2ADCS/t2SBCS are now pseudo instructions, consistent with ARM, so the assembly printer correctly prints the 's' suffix. Fixes Thumb2 adde -> SBC matching to check for live/dead carry flags. Fixes the internal ARM machine opcode mnemonic for ADCS/SBCS. Fixes ARM SBC lowering to check for live carry (potential bug). llvm-svn: 130048
* Remove -use-divmod-libcall. Let targets opt in when they are available.Evan Cheng2011-04-201-1/+2
| | | | llvm-svn: 129884
* Excise unintended hunk in 129858. <rdar://problem/7662569>Stuart Hastings2011-04-201-5/+0
| | | | llvm-svn: 129862
* ARM byval support. Will be enabled by another patch to the FE. ↵Stuart Hastings2011-04-201-78/+164
| | | | | | <rdar://problem/7662569> llvm-svn: 129858
* Remove some duplicate op action entries and reorganize.Eric Christopher2011-04-191-8/+5
| | | | llvm-svn: 129781
* Fix a ton of comment typos found by codespell. Patch byChris Lattner2011-04-151-2/+2
| | | | | | Luis Felipe Strano Moraes! llvm-svn: 129558
* Fix another fcopysign lowering bug. If src is f64 and destination is f32, don'tEvan Cheng2011-04-151-1/+4
| | | | | | forget to right shift the source by 32 first. rdar://9287902 llvm-svn: 129556
* Fix a typo in an ARM-specific DAG combine. This fixes <rdar://problem/9278274>.Cameron Zwarich2011-04-131-1/+1
| | | | llvm-svn: 129468
* Split a store of a VMOVDRR into two integer stores to avoid mixing NEON and ARMCameron Zwarich2011-04-121-2/+22
| | | | | | | stores of arguments in the same cache line. This fixes the second half of <rdar://problem/8674845>. llvm-svn: 129345
* Change -arm-trap-func= into a non-arm specific option. Now Intrinsic::trap ↵Evan Cheng2011-04-081-23/+1
| | | | | | is lowered into a call to the specified trap function at sdisel time. llvm-svn: 129152
* Add option to emit @llvm.trap as a function call instead of a trap ↵Evan Cheng2011-04-071-1/+23
| | | | | | instruction. rdar://9249183. llvm-svn: 129107
* Prevent ARM DAG Combiner from doing an AND or OR combine on an illegal ↵Tanya Lattner2011-04-071-0/+6
| | | | | | vector type (vectors of size 3). Also included test cases. llvm-svn: 129074
* Change -arm-divmod-libcall to a target neutral option.Evan Cheng2011-04-071-6/+1
| | | | llvm-svn: 129045
* Reapply r128946 (pseudoization of various instructions), and fix the extra ↵Owen Anderson2011-04-051-1/+21
| | | | | | imp-def of CPSR it was adding. llvm-svn: 128965
* Revert r128946 while I figure out why it broke the buildbots.Owen Anderson2011-04-051-21/+1
| | | | llvm-svn: 128951
* Give RSBS and RSCS the pseudo treatment.Owen Anderson2011-04-051-1/+21
| | | | llvm-svn: 128946
* Fix bugs in the pseuo-ization of ADCS/SBCS pointed out by Jim, as well as ↵Owen Anderson2011-04-051-27/+69
| | | | | | doing the expansion earlier (using a custom inserter) to allow for the chance of predicating these instructions. llvm-svn: 128940
* Revamp the SjLj "dispatch setup" intrinsic.Bill Wendling2011-04-051-1/+1
| | | | | | | | | | | | It needed to be moved closer to the setjmp statement, because the code directly after the setjmp needs to know about values that are on the stack. Also, the 'bitcast' of the function context was causing a dead load. This wouldn't be too horrible, except that at -O0 it wasn't optimized out, and because it wasn't using the correct base pointer (if there is a VLA), it would try to access a value from a garbage address. <rdar://problem/9130540> llvm-svn: 128873
* Do some peephole optimizations to remove pointless VMOVs from Neon to integerCameron Zwarich2011-04-021-0/+31
| | | | | | | | registers that arise from argument shuffling with the soft float ABI. These instructions are particularly slow on Cortex A8. This fixes one half of <rdar://problem/8674845>. llvm-svn: 128759
OpenPOWER on IntegriCloud