| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 29619
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
introduced by previous commit.
- SelectCode now returns a SDNode*. If it is not null, the selected node
produces the same number of results as the input node. The seletion loop
is responsible for calling ReplaceAllUsesWith() to replace the input node
with the output target node. For other cases, e.g. when load is folded,
the selection code is responsible for calling ReplaceAllUsesOfValueWith()
and SelectCode returns NULL.
- Other clean ups.
llvm-svn: 29602
|
|
|
|
| |
llvm-svn: 29585
|
|
|
|
| |
llvm-svn: 29584
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in the start of an array and a count of operands where applicable. In many
cases, the number of operands is known, so this static array can be allocated
on the stack, avoiding the heap. In many other cases, a SmallVector can be
used, which has the same benefit in the common cases.
I updated a lot of code calling getNode that takes a vector, but ran out of
time. The rest of the code should be updated, and these methods should be
removed.
We should also do the same thing to eliminate the methods that take a
vector of MVT::ValueTypes.
It would be extra nice to convert the dagiselemitter to avoid creating vectors
for operands when calling getTargetNode.
llvm-svn: 29566
|
|
|
|
| |
llvm-svn: 29548
|
|
|
|
| |
llvm-svn: 29492
|
|
|
|
| |
llvm-svn: 29491
|
|
|
|
|
|
| |
stack.
llvm-svn: 29423
|
|
|
|
|
|
| |
moved to outside the actual select routine.
llvm-svn: 29415
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
per possible ValueType of the node. e.g. Select_add is split into Select_add_i8,
Select_add_i16, etc.
For opcodes which do not produce a non-chain result, it is split on the
ValueType of its first non-chain operand. e.g. Select_store.
On X86 / Mac OS X, Select_store used to be the largest function. It had a stack
frame size of 8.5k. Now the largest one is Store_i32 with a frame size of 3.1k.
llvm-svn: 29404
|
|
|
|
| |
llvm-svn: 29378
|
|
|
|
| |
llvm-svn: 29376
|
|
|
|
| |
llvm-svn: 29373
|
|
|
|
| |
llvm-svn: 29359
|
|
|
|
|
|
| |
node is foldable by another.
llvm-svn: 29335
|
|
|
|
| |
llvm-svn: 29311
|
|
|
|
|
|
| |
this with preprocessing.
llvm-svn: 29258
|
|
|
|
| |
llvm-svn: 29235
|
|
|
|
| |
llvm-svn: 29193
|
|
|
|
| |
llvm-svn: 29161
|
|
|
|
|
|
|
| |
Also reduce the number of arguments passed to emit functions and removed a
hack.
llvm-svn: 29160
|
|
|
|
|
|
|
|
|
|
| |
code that emit target specific nodes into emit functions that are uniquified
and shared among selection routines.
e.g. This reduces X86ISelDAGToDAG.o (release) from ~2M to ~1.5M. Stack frame
size of Select_store from ~13k down to ~8k.
This is the first step. Further work to enable more sharing will follow.
llvm-svn: 29158
|
|
|
|
| |
llvm-svn: 29106
|
|
|
|
|
|
| |
non-debug build.
llvm-svn: 29105
|
|
|
|
|
|
|
| |
RemoveInFlightSetEntry. They are used in place of direct set operators to
reduce instruction selection function stack size.
llvm-svn: 28987
|
|
|
|
|
|
|
|
| |
LI8: (LI8:i64 (imm:i64):$imm)
instead of:
LI8: (LI8:MVT::i64 (imm:MVT::i64):$imm)
llvm-svn: 28868
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
because information about one can help refine the other. This allows us to
write:
def : Pat<(i32 (extload xaddr:$src, i8)),
(LBZX xaddr:$src)>;
as:
def : Pat<(extload xaddr:$src, i8),
(LBZX xaddr:$src)>;
because tblgen knows LBZX returns i32.
llvm-svn: 28865
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instruction, and the result type of the instruction to refine the pattern.
This allows us to write things like this:
def : Pat<(v2i64 (bitconvert (v16i8 VR128:$src))), (v2i64 VR128:$src)>;
as:
def : Pat<(v2i64 (bitconvert (v16i8 VR128:$src))), (VR128:$src)>
and fixes a ppc64 issue.
llvm-svn: 28863
|
|
|
|
| |
llvm-svn: 28833
|
|
|
|
| |
llvm-svn: 28790
|
|
|
|
| |
llvm-svn: 28788
|
|
|
|
| |
llvm-svn: 28784
|
|
|
|
| |
llvm-svn: 28775
|
|
|
|
| |
llvm-svn: 28743
|
|
|
|
|
|
|
|
| |
a cycle. This increase the search space and will increase compile time (in
practice it appears to be small, e.g. 176.gcc goes from 62 sec to 65 sec)
that will be addressed later.
llvm-svn: 28476
|
|
|
|
|
|
|
| |
correctly. That is causing non-deterministic behavior (and possibly preventing
some load folding from happening).
llvm-svn: 28458
|
|
|
|
|
|
|
|
|
|
|
| |
patterns that look like this:
def : Pat<(i32 (X86Wrapper tconstpool :$dst)), (MOV32ri tconstpool :$dst)>;
InsertOneTypeCheck should copy the type from the resolved pattern to the
unresolved one as long as there types are different.
llvm-svn: 28389
|
|
|
|
|
|
| |
represent pointer type.
llvm-svn: 28363
|
|
|
|
|
|
| |
register classes.
llvm-svn: 28323
|
|
|
|
| |
llvm-svn: 28240
|
|
|
|
|
|
|
|
| |
1. Use expects a chain output.
2. Node is expanded into multiple target ops.
3. One of the inner node produces a chain, the outer most one doesn't.
llvm-svn: 28209
|
|
|
|
|
|
| |
def : Pat<> pattern.
llvm-svn: 28208
|
|
|
|
| |
llvm-svn: 28012
|
|
|
|
|
|
|
|
| |
nodes should not be folded into other nodes.
This fixes the miscompilation of PR 749.
Temporarily under flag control.
llvm-svn: 28002
|
|
|
|
|
|
|
|
| |
x86 and ppc for 100% dense switch statements when relocations are non-PIC.
This support will be extended and enhanced in the coming days to support
PIC, and less dense forms of jump tables.
llvm-svn: 27947
|
|
|
|
| |
llvm-svn: 27841
|
|
|
|
| |
llvm-svn: 27834
|
|
|
|
| |
llvm-svn: 27456
|
|
|
|
| |
llvm-svn: 27455
|