summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMInstrInfo.h
Commit message (Collapse)AuthorAgeFilesLines
* Eliminate ARM::MOVi2pieces. Just use MOVi32imm and expand it to either ↵Evan Cheng2010-11-121-5/+0
| | | | | | movi+orr or movw+movt depending on the subtarget. llvm-svn: 118938
* Slightly change the meaning of the reMaterialize target hook when the originalJakob Stoklund Olesen2010-06-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | instruction defines subregisters. Any existing subreg indices on the original instruction are preserved or composed with the new subreg index. Also substitute multiple operands mentioning the original register by using the new MachineInstr::substituteRegister() function. This is necessary because there will soon be <imp-def> operands added to non read-modify-write partial definitions. This instruction: %reg1234:foo = FLAP %reg1234<imp-def> will reMaterialize(%reg3333, bar) like this: %reg3333:bar-foo = FLAP %reg333:bar<imp-def> Finally, replace the TargetRegisterInfo pointer argument with a reference to indicate that it cannot be NULL. llvm-svn: 105358
* Remove the target hook TargetInstrInfo::BlockHasNoFallThrough in favor ofDan Gohman2009-12-051-3/+0
| | | | | | | MachineBasicBlock::canFallThrough(), which is target-independent and more thorough. llvm-svn: 90634
* - Change TargetInstrInfo::reMaterialize to pass in TargetRegisterInfo.Evan Cheng2009-11-141-1/+2
| | | | | | | | - If destination is a physical register and it has a subreg index, use the sub-register instead. This fixes PR5423. llvm-svn: 88745
* - Add pseudo instructions tLDRpci_pic and t2LDRpci_pic which does a pc-relativeEvan Cheng2009-11-061-4/+4
| | | | | | | | | | | | load of a GV from constantpool and then add pc. It allows the code sequence to be rematerializable so it would be hoisted by machine licm. - Add a late pass to break these pseudo instructions into a number of real instructions. Also move the code in Thumb2 IT pass that breaks up t2MOVi32imm to this pass. This is done before post regalloc scheduling to allow the scheduler to proper schedule these instructions. It also allow them to be if-converted and shrunk by later passes. llvm-svn: 86304
* Use NEON reg-reg moves, where profitable. This reduces "domain-cross" ↵Anton Korobeynikov2009-11-021-1/+0
| | | | | | stalls, when we used to mix vfp and neon code (the former were used for reg-reg moves) llvm-svn: 85764
* Remove ARM specific getInlineAsmLength. We'll rely on the simpler (and ↵Evan Cheng2009-08-041-3/+0
| | | | | | faster) generic algorithm for now. If more accurate computation is needed, we'll rely on the disassembler. llvm-svn: 78032
* Move the getInlineAsmLength virtual method from TAI to TII, whereChris Lattner2009-08-021-0/+4
| | | | | | | | | | the only real caller (GetFunctionSizeInBytes) uses it. The custom ARM implementation of this is basically reimplementing an assembler poorly for negligible gain. It should be removed IMNSHO, but I'll leave that to ARMish folks to decide. llvm-svn: 77877
* - More refactoring. This gets rid of all of the getOpcode calls.Evan Cheng2009-07-281-3/+0
| | | | | | | | | | | - This change also makes it possible to switch between ARM / Thumb on a per-function basis. - Fixed thumb2 routine which expand reg + arbitrary immediate. It was using using ARM so_imm logic. - Use movw and movt to do reg + imm when profitable. - Other code clean ups and minor optimizations. llvm-svn: 77300
* Correctly handle the Thumb-2 imm8 addrmode. Specialize frame index ↵David Goodwin2009-07-241-7/+0
| | | | | | elimination more exactly for Thumb-2 to get better code gen. llvm-svn: 76919
* Fix frame index elimination to correctly handle thumb-2 addressing modes ↵David Goodwin2009-07-231-0/+7
| | | | | | that don't allow negative offsets. During frame elimination convert *i12 opcode to a *i8 when necessary due to a negative offset. llvm-svn: 76883
* Let callers decide the sub-register index on the def operand of ↵Evan Cheng2009-07-161-1/+2
| | | | | | | | rematerialized instructions. Avoid remat'ing instructions whose def have sub-register indices for now. It's just really really hard to get all the cases right. llvm-svn: 75900
* Checkpoint Thumb2 Instr info work. Generalized base code so that it can be ↵David Goodwin2009-07-081-234/+12
| | | | | | shared between ARM and Thumb2. Not yet activated because register information must be generalized first. llvm-svn: 75010
* Add a Thumb2 instruction flag to that indicates whether the instruction can ↵Evan Cheng2009-07-081-9/+13
| | | | | | be transformed to 16-bit variant. llvm-svn: 74988
* Checkpoint refactoring of ThumbInstrInfo and ThumbRegisterInfo into ↵David Goodwin2009-07-021-21/+21
| | | | | | Thumb1InstrInfo, Thumb2InstrInfo, Thumb1RegisterInfo and Thumb2RegisterInfo. Move methods from ARMInstrInfo to ARMBaseInstrInfo to prepare for sharing with Thumb2. llvm-svn: 74731
* Add a new addressing mode for NEON load/store instructions.Bob Wilson2009-07-011-9/+10
| | | | llvm-svn: 74658
* A few more load instructions.Evan Cheng2009-06-301-14/+15
| | | | llvm-svn: 74500
* Implement Thumb2 ldr.Evan Cheng2009-06-291-4/+8
| | | | | | After much back and forth, I decided to deviate from ARM design and split LDR into 4 instructions (r + imm12, r + imm8, r + r << imm12, constantpool). The advantage of this is 1) it follows the latest ARM technical manual, and 2) makes it easier to reduce the width of the instruction later. The down side is this creates more inconsistency between the two sub-targets. We should split ARM LDR instruction in a similar fashion later. I've added a README entry for this. llvm-svn: 74420
* ARM refactoring. Step 2: split RegisterInfoAnton Korobeynikov2009-06-271-14/+13
| | | | llvm-svn: 74384
* Split thumb-related stuff into separate classes.Anton Korobeynikov2009-06-261-54/+56
| | | | | | Step 1: ARMInstructionInfo => {ARM,Thumb}InstructionInfo llvm-svn: 74329
* Add support for ARM's Advanced SIMD (NEON) instruction set.Bob Wilson2009-06-221-0/+6
| | | | | | | This is still a work in progress but most of the NEON instruction set is supported. llvm-svn: 73919
* Turns out AnalyzeBranch can modify the mbb being analyzed. This is a nastyEvan Cheng2009-02-091-1/+2
| | | | | | | | suprise to some callers, e.g. register coalescer. For now, add an parameter that tells AnalyzeBranch whether it's safe to modify the mbb. A better solution is out there, but I don't have time to deal with it right now. llvm-svn: 64124
* Move getPointerRegClass from TargetInstrInfo to TargetRegisterInfo.Evan Cheng2009-02-061-4/+0
| | | | llvm-svn: 63938
* Change TargetInstrInfo::isMoveInstr to return source and destination ↵Evan Cheng2009-01-201-4/+5
| | | | | | sub-register indices as well. llvm-svn: 62600
* Split foldMemoryOperand into public non-virtual and protected virtualDan Gohman2008-12-031-9/+9
| | | | | | | parts, and add target-independent code to add/preserve MachineMemOperands. llvm-svn: 60488
* Add more const qualifiers. This fixes build breakage from r59540.Dan Gohman2008-11-181-2/+4
| | | | llvm-svn: 59542
* Handle the rest of pseudo instructions.Evan Cheng2008-11-131-24/+24
| | | | llvm-svn: 59275
* Fix pre- and post-indexed load / store encoding bugs.Evan Cheng2008-11-131-16/+18
| | | | llvm-svn: 59230
* Fix address mode 3 immediate offset mode encoding.Evan Cheng2008-11-121-0/+2
| | | | llvm-svn: 59109
* Consolidate formats; fix FCMPED etc. encodings.Evan Cheng2008-11-121-25/+22
| | | | llvm-svn: 59107
* Fix VFP conversion instruction encodings.Evan Cheng2008-11-121-4/+6
| | | | llvm-svn: 59104
* Fix FMDRR encoding.Evan Cheng2008-11-111-4/+5
| | | | llvm-svn: 59088
* Encode VFP load / store instructions.Evan Cheng2008-11-111-22/+24
| | | | llvm-svn: 59084
* Encode VFP conversion instructions.Evan Cheng2008-11-111-4/+4
| | | | llvm-svn: 59074
* Encode VFP arithmetic instructions.Evan Cheng2008-11-111-4/+11
| | | | llvm-svn: 59016
* Encode misc arithmetic instructions.Evan Cheng2008-11-071-0/+1
| | | | llvm-svn: 58828
* Encode extend instructions; more clean up.Evan Cheng2008-11-061-14/+20
| | | | llvm-svn: 58818
* - Improve naming consistency: Branch -> BrFrm, BranchMisc -> BrMiscFrm.Evan Cheng2008-11-061-2/+2
| | | | | | | - Consolidate instruction formats. - Other clean up. llvm-svn: 58808
* Remove opcode from instruction TS flags; add MOVCC support; fix addrmode3 ↵Evan Cheng2008-11-061-6/+2
| | | | | | encoding bug. llvm-svn: 58800
* Handle smul<x><y>, smulw<y>, smla<x><y>, smlaw<y>.Evan Cheng2008-11-061-18/+14
| | | | llvm-svn: 58793
* Fix encoding of multiple instructions with 3 src operands; also handle ↵Evan Cheng2008-11-061-19/+18
| | | | | | smmul, smmla, and smmls. llvm-svn: 58789
* Restructure ARM code emitter to use instruction formats instead of ↵Evan Cheng2008-11-051-37/+37
| | | | | | addressing modes to determine how to encode instructions. llvm-svn: 58764
* Add binary encoding support for multiply instructions. Some blanks left to ↵Jim Grosbach2008-11-031-15/+17
| | | | | | fill in, but the basics are there. llvm-svn: 58626
* Const-ify several TargetInstrInfo methods.Dan Gohman2008-10-161-5/+5
| | | | llvm-svn: 57622
* need ARM.h for ARMCC definitionJim Grosbach2008-10-071-0/+1
| | | | llvm-svn: 57261
* Encode the conditional execution predicate when JITing.Jim Grosbach2008-10-071-0/+6
| | | | llvm-svn: 57258
* Revert 56176. All those instruction formats are still needed.Evan Cheng2008-09-131-7/+23
| | | | llvm-svn: 56180
* Eliminate unnecessary instruction formats.Evan Cheng2008-09-121-23/+7
| | | | llvm-svn: 56176
* Rewrite address mode 1 code emission routines.Evan Cheng2008-09-121-0/+1
| | | | llvm-svn: 56171
* Make TargetInstrInfo::copyRegToReg return a bool indicating whether the copy ↵Owen Anderson2008-08-261-1/+1
| | | | | | | | | requested was inserted or not. This allows bitcast in fast isel to properly handle the case where an appropriate reg-to-reg copy is not available. llvm-svn: 55375
OpenPOWER on IntegriCloud