- Aug 08, 2009
-
-
Anton Korobeynikov authored
llvm-svn: 78468
-
- Aug 06, 2009
-
-
David Goodwin authored
Add parameter to pattern classes to enable an itinerary to be specified for instructions. For now just use the existing itineraries or NoItinerary. llvm-svn: 78321
-
- Aug 04, 2009
-
-
David Goodwin authored
Initial support for single-precision FP using NEON. Added "neonfp" attribute to enable. Added patterns for some binary FP operations. llvm-svn: 78081
-
- Jul 29, 2009
-
-
Evan Cheng authored
llvm-svn: 77507
-
Evan Cheng authored
- Darwin Thumb2 call clobbers r9. llvm-svn: 77500
-
Evan Cheng authored
llvm-svn: 77422
-
- Jul 28, 2009
-
-
Evan Cheng authored
In thumb2 mode, add pc is unpredictable. Use add + mov pc instead (that is until more optimization goes in). llvm-svn: 77364
-
- 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 23, 2009
-
-
Evan Cheng authored
llvm-svn: 76803
-
- Jul 22, 2009
-
-
Evan Cheng authored
llvm-svn: 76729
-
- Jul 14, 2009
-
-
Evan Cheng authored
2. BX does not "use" the link register, it defines it. 3. Fix a couple more places in thumb td file that still uses pre-UAL syntax. llvm-svn: 75585
-
David Goodwin authored
llvm-svn: 75576
-
- 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: 75187
-
- 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
-
Evan Cheng authored
llvm-svn: 74974
-
Evan Cheng authored
Statically encode bit 25 to indicate immediate form of data processing instructions. Patch by Sean Callanan. llvm-svn: 74972
-
- Jul 07, 2009
-
-
Evan Cheng authored
llvm-svn: 74938
-
Evan Cheng authored
llvm-svn: 74868
-
Evan Cheng authored
llvm-svn: 74866
-
- Jul 02, 2009
-
-
Evan Cheng authored
Change the meaning of predicate hasThumb2 to mean thumb2 ISA is available, not that it's in thumb mode and thumb2 is available. Added isThumb2 predicate to replace the old predicate. llvm-svn: 74692
-
Evan Cheng authored
llvm-svn: 74683
-
Bob Wilson authored
llvm-svn: 74658
-
- Jun 29, 2009
-
-
David Goodwin authored
Rename ARMcmpNZ to ARMcmpZ and use it to represent comparisons that set only the Z flag (i.e. eq and ne). Make ARMcmpZ commutative. llvm-svn: 74423
-
Evan Cheng authored
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
-
- Jun 26, 2009
-
-
Evan Cheng authored
llvm-svn: 74277
-
Evan Cheng authored
llvm-svn: 74237
-
Evan Cheng authored
llvm-svn: 74228
-
- Jun 25, 2009
-
-
Evan Cheng authored
llvm-svn: 74200
-
Evan Cheng authored
llvm-svn: 74138
-
- Jun 23, 2009
-
-
Evan Cheng authored
also some contribution from Jim Grosbach, Bob Wilson, and Evan Cheng. I've done my best to consolidate the patches with those that were done by Viktor Kutuzov and Anton Korzh from Access Softek, Inc. Let me know if missed anything. I've completely reorganized the thumb2 td file, made more extensive uses of multiclass, etc. Test cases will be contributed later after I re-organize what's in svn first. llvm-svn: 73965
-
Evan Cheng authored
llvm-svn: 73948
-
Bob Wilson authored
This is still a work in progress but most of the NEON instruction set is supported. llvm-svn: 73919
-
Bob Wilson authored
another change that makes the types ambiguous (at least as far as tablegen is concerned). llvm-svn: 73909
-
- Jun 22, 2009
-
-
Bob Wilson authored
caller-saved register. llvm-svn: 73901
-
- Jun 19, 2009
-
-
Evan Cheng authored
Latency information for ARM v6. It's rough and not yet hooked up. Right now we are only using branch latency to determine if-conversion limits. llvm-svn: 73747
-
- Jun 17, 2009
-
-
Anton Korobeynikov authored
Patch by Viktor Kutuzov and Anton Korzh from Access Softek, Inc. llvm-svn: 73622
-
- Jun 15, 2009
-
-
Anton Korobeynikov authored
llvm-svn: 73428
-
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 12, 2009
-
-
Evan Cheng authored
llvm-svn: 73252
-