- Jul 07, 2009
-
-
Evan Cheng authored
llvm-svn: 74946
-
Evan Cheng authored
llvm-svn: 74889
-
- Jul 03, 2009
-
-
Evan Cheng authored
llvm-svn: 74736
-
- Jul 02, 2009
-
-
Evan Cheng authored
llvm-svn: 74696
-
Evan Cheng authored
llvm-svn: 74681
-
Bob Wilson authored
llvm-svn: 74658
-
- Jul 01, 2009
-
-
David Goodwin authored
llvm-svn: 74566
-
- Jun 30, 2009
-
-
David Goodwin authored
llvm-svn: 74543
-
- Jun 29, 2009
-
-
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 27, 2009
-
-
Evan Cheng authored
llvm-svn: 74368
-
- Jun 26, 2009
-
-
Anton Korobeynikov authored
Step 1: ARMInstructionInfo => {ARM,Thumb}InstructionInfo llvm-svn: 74329
-
- Jun 23, 2009
-
-
Evan Cheng authored
llvm-svn: 73986
-
Evan Cheng authored
llvm-svn: 73975
-
Bob Wilson authored
This is still a work in progress but most of the NEON instruction set is supported. llvm-svn: 73919
-
- Jun 22, 2009
-
-
Bob Wilson authored
predicate does not check if Thumb mode is enabled, and when in ARM mode there are still some checks for constant-pool use that need to run. llvm-svn: 73887
-
- Jun 17, 2009
-
-
Anton Korobeynikov authored
Patch by Viktor Kutuzov and Anton Korzh from Access Softek, Inc. llvm-svn: 73622
-
- Jun 09, 2009
-
-
Anton Korobeynikov authored
llvm-svn: 73097
-
Anton Korobeynikov authored
ABI. The missing piece is support for putting "homogeneous aggregates" into registers. Patch by Sandeep Patel! llvm-svn: 73095
-
- May 19, 2009
-
-
Bob Wilson authored
llvm-svn: 72105
-
- 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
-
- Mar 26, 2009
-
-
Evan Cheng authored
llvm-svn: 67765
-
- Feb 12, 2009
-
-
Chris Lattner authored
llvm-svn: 64384
-
- Feb 06, 2009
-
-
Dale Johannesen authored
llvm-svn: 63951
-
Dale Johannesen authored
llvm-svn: 63909
-
Dale Johannesen authored
its corresponding getTargetNode. Lots of caller changes. llvm-svn: 63904
-
- Jan 15, 2009
-
-
Dan Gohman authored
and into the ScheduleDAGInstrs class, so that they don't get destructed and re-constructed for each block. This fixes a compile-time hot spot in the post-pass scheduler. To help facilitate this, tidy and do some minor reorganization in the scheduler constructor functions. llvm-svn: 62275
-
- Dec 10, 2008
-
-
Evan Cheng authored
llvm-svn: 60851
-
- Dec 03, 2008
-
-
Dan Gohman authored
llvm-svn: 60484
-
- Nov 05, 2008
-
-
Dan Gohman authored
priority function. Instead, just iterate over the AllNodes list, which is already in topological order. This eliminates a fair amount of bookkeeping, and speeds up the isel phase by about 15% on many testcases. The impact on most targets is that AddToISelQueue calls can be simply removed. In the x86 target, there are two additional notable changes. The rule-bending AND+SHIFT optimization in MatchAddress that creates new pre-isel nodes during isel is now a little more verbose, but more robust. Instead of either creating an invalid DAG or creating an invalid topological sort, as it has historically done, it can now just insert the new nodes into the node list at a position where they will be consistent with the topological ordering. Also, the address-matching code has logic that checked to see if a node was "already selected". However, when a node is selected, it has all its uses taken away via ReplaceAllUsesWith or equivalent, so it won't recieve any further visits from MatchAddress. This code is now removed. llvm-svn: 58748
-
- Oct 27, 2008
-
-
David Greene authored
Have TableGen emit setSubgraphColor calls under control of a -gen-debug flag. Then in a debugger developers can set breakpoints at these calls to see waht is about to be selected and what the resulting subgraph looks like. This really helps when debugging instruction selection. llvm-svn: 58278
-
- Oct 03, 2008
-
-
Dan Gohman authored
Instead, just create one, and make sure everything that needs it can access it. Previously most of the SelectionDAGISel subclasses all had their own TargetLowering object, which was redundant with the TargetLowering object in the TargetMachine subclasses, except on Sparc, where SparcTargetMachine didn't have a TargetLowering object. Change Sparc to work more like the other targets here. llvm-svn: 57016
-
- Sep 18, 2008
-
-
Evan Cheng authored
llvm-svn: 56299
-
- Sep 12, 2008
-
-
Dan Gohman authored
with ConstantInt. This led to fixing a bug in TargetLowering.cpp using getValue instead of getAPIntValue. llvm-svn: 56159
-
- Aug 28, 2008
-
-
Gabor Greif authored
llvm-svn: 55504
-
- Aug 27, 2008
-
-
Gabor Greif authored
llvm-svn: 55394
-
- Aug 23, 2008
-
-
Dan Gohman authored
process up to a higher level. This allows FastISel to leverage more of SelectionDAGISel's infastructure, such as updating Machine PHI nodes. Also, implement transitioning from SDISel back to FastISel in the middle of a block, so it's now possible to go back and forth. This allows FastISel to hand individual CallInsts and other complicated things off to SDISel to handle, while handling the rest of the block itself. To help support this, reorganize the SelectionDAG class so that it is allocated once and reused throughout a function, instead of being completely reallocated for each block. llvm-svn: 55219
-
- Aug 21, 2008
-
-
Dan Gohman authored
from all targets. llvm-svn: 55124
-
- Jul 27, 2008
-
-
Dan Gohman authored
llvm-svn: 54128
-
- Jul 17, 2008
-
-
Dan Gohman authored
replacement of multiple values. This is slightly more efficient than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically could be optimized even further. However, an important property of this new function is that it handles the case where the source value set and destination value set overlap. This makes it feasible for isel to use SelectNodeTo in many very common cases, which is advantageous because SelectNodeTo avoids a temporary node and it doesn't require CSEMap updates for users of values that don't change position. Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to handle operand lists more efficiently, and to correctly handle a number of corner cases to which its new wider use exposes it. This commit also includes a change to the encoding of post-isel opcodes in SDNodes; now instead of being sandwiched between the target-independent pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel opcodes are now represented as negative values. This makes it possible to test if an opcode is pre-isel or post-isel without having to know the size of the current target's post-isel instruction set. These changes speed up llc overall by 3% and reduce memory usage by 10% on the InstructionCombining.cpp testcase with -fast and -regalloc=local. llvm-svn: 53728
-
- Jul 07, 2008
-
-
Dan Gohman authored
llvm-svn: 53179
-