- Nov 07, 2009
-
-
Evan Cheng authored
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
-
- Nov 02, 2009
-
-
Anton Korobeynikov authored
Use NEON reg-reg moves, where profitable. This reduces "domain-cross" stalls, when we used to mix vfp and neon code (the former were used for reg-reg moves) llvm-svn: 85764
-
- Oct 28, 2009
-
-
Bob Wilson authored
opcode and operand with a tab. Check for these instructions in the usual places. llvm-svn: 85411
-
- Oct 22, 2009
-
-
Evan Cheng authored
llvm-svn: 84832
-
- Sep 28, 2009
-
-
Evan Cheng authored
instruction. This makes it re-materializable. Thumb2 will split it back out into two instructions so IT pass will generate the right mask. Also, this expose opportunies to optimize the movw to a 16-bit move. llvm-svn: 82982
-
Anton Korobeynikov authored
Disable rematting of it for now. llvm-svn: 82975
-
Anton Korobeynikov authored
This should be better than single load from constpool. llvm-svn: 82948
-
- Aug 22, 2009
-
-
Chris Lattner authored
llvm-svn: 79763
-
- Aug 04, 2009
-
-
Evan Cheng authored
Remove ARM specific getInlineAsmLength. We'll rely on the simpler (and faster) generic algorithm for now. If more accurate computation is needed, we'll rely on the disassembler. llvm-svn: 78032
-
- Aug 02, 2009
-
-
Chris Lattner authored
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
-
- Jul 28, 2009
-
-
Evan Cheng authored
- 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
-
- Jul 27, 2009
-
-
Evan Cheng authored
llvm-svn: 77231
-
Evan Cheng authored
llvm-svn: 77227
-
Evan Cheng authored
This also fixes potential problems in ARMBaseInstrInfo routines not recognizing thumb1 instructions when 32-bit and 16-bit instructions mix. llvm-svn: 77218
-
Evan Cheng authored
llvm-svn: 77181
-
- Jul 25, 2009
-
-
Evan Cheng authored
Before: adr r12, #LJTI3_0_0 ldr pc, [r12, +r0, lsl #2] LJTI3_0_0: .long LBB3_24 .long LBB3_30 .long LBB3_31 .long LBB3_32 After: adr r12, #LJTI3_0_0 add pc, r12, +r0, lsl #2 LJTI3_0_0: b.w LBB3_24 b.w LBB3_30 b.w LBB3_31 b.w LBB3_32 This has several advantages. 1. This will make it easier to optimize this to a TBB / TBH instruction + (smaller) table. 2. This eliminate the need for ugly asm printer hack to force the address into thumb addresses (bit 0 is one). 3. Same codegen for pic and non-pic. 4. This eliminate the need to align the table so constantpool island pass won't have to over-estimate the size. Based on my calculation, the later is probably slightly faster as well since ldr pc with shifter address is very slow. That is, it should be a win as long as the HW implementation can do a reasonable job of branch predict the second branch. llvm-svn: 77024
-
- Jul 24, 2009
-
-
Evan Cheng authored
FLDD, FLDS, FCPYD, FCPYS, FSTD, FSTS, VMOVD, VMOVQ maps to the same instructions on all sub-targets. llvm-svn: 76925
-
David Goodwin authored
Correctly handle the Thumb-2 imm8 addrmode. Specialize frame index elimination more exactly for Thumb-2 to get better code gen. llvm-svn: 76919
-
- Jul 23, 2009
-
-
David Goodwin authored
Fix frame index elimination to correctly handle thumb-2 addressing modes 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
-
- Jul 16, 2009
-
-
Evan Cheng authored
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
-
- Jul 08, 2009
-
-
David Goodwin authored
llvm-svn: 75036
-
David Goodwin authored
Checkpoint Thumb2 Instr info work. Generalized base code so that it can be shared between ARM and Thumb2. Not yet activated because register information must be generalized first. llvm-svn: 75010
-
- Jul 03, 2009
-
-
David Goodwin authored
Checkpoint refactoring of ThumbInstrInfo and ThumbRegisterInfo into Thumb1InstrInfo, Thumb2InstrInfo, Thumb1RegisterInfo and Thumb2RegisterInfo. Move methods from ARMInstrInfo to ARMBaseInstrInfo to prepare for sharing with Thumb2. llvm-svn: 74731
-
- Jul 01, 2009
-
-
Evan Cheng authored
Handle IMPLICIT_DEF with isUndef operand marker, part 2. This patch moves the code to annotate machineoperands to LiveIntervalAnalysis. It also add markers for implicit_def that define physical registers. The rest, is just a lot of details. llvm-svn: 74580
-
- Jun 30, 2009
-
-
David Goodwin authored
llvm-svn: 74549
-
David Goodwin authored
llvm-svn: 74543
-
- Jun 27, 2009
-
-
Anton Korobeynikov authored
llvm-svn: 74385
-
Anton Korobeynikov authored
llvm-svn: 74384
-
- Jun 26, 2009
-
-
Anton Korobeynikov authored
Step 1: ARMInstructionInfo => {ARM,Thumb}InstructionInfo llvm-svn: 74329
-
- Jun 23, 2009
-
-
Bob Wilson authored
This is still a work in progress but most of the NEON instruction set is supported. llvm-svn: 73919
-
- Jun 16, 2009
-
-
Anton Korobeynikov authored
(this is the case when we have thumb vararg function with single callee-saved register, which is handled separately). llvm-svn: 73529
-
- May 14, 2009
-
-
Jim Grosbach authored
llvm.eh.sjlj.* for better clarity as to their purpose and scope. Add a description of llvm.eh.sjlj.setjmp to ExceptionHandling.html. (llvm.eh.sjlj.longjmp documentation coming when that implementation is added). llvm-svn: 71758
-
- 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
-
Jim Grosbach authored
a supporting preliminary patch for GCC-compatible SjLJ exception handling. Note that these intrinsics are not designed to be invoked directly by the user, but rather used by the front-end as target hooks for exception handling. llvm-svn: 71610
-
- Apr 07, 2009
-
-
rdar://problem/6584986Jim Grosbach authored
When compiling in Thumb mode, only the low (R0-R7) registers are available for most instructions. Breaking the low registers into a new register class handles this. Uses of R12, SP, etc, are handled explicitly where needed with copies inserted to move results into low registers where the rest of the code generator can deal with them. llvm-svn: 68545
-
- Apr 03, 2009
-
-
Bob Wilson authored
llvm-svn: 68405
-
Bob Wilson authored
llvm-svn: 68404
-
- Feb 18, 2009
-
-
Dan Gohman authored
llvm-svn: 64891
-
- Feb 13, 2009
-
-
Dale Johannesen authored
llvm-svn: 64429
-
Dale Johannesen authored
Modify callers. llvm-svn: 64409
-