| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 22813
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
used to tack a register number onto the node.
Instead of doing this, make a new node, RegisterSDNode, which is a leaf
containing a register number. These three operations just become normal
DAG nodes now, instead of requiring special handling.
Note that with this change, it is no longer correct to make illegal
CopyFromReg/CopyToReg nodes. The legalizer will not touch them, and this
is bad, so don't do it. :)
llvm-svn: 22806
|
| |
|
|
|
|
|
| |
fixme from the PowerPC backend. Emit slightly better code for legalizing
select_cc.
llvm-svn: 22805
|
| |
|
|
|
|
|
| |
when printing a node, use it to render target operations with their
target instruction name instead of "<<unknown>>".
llvm-svn: 22804
|
| |
|
|
| |
llvm-svn: 22802
|
| |
|
|
|
|
| |
Split RemoveNodeFromCSEMaps out of DeleteNodesIfDead to do it.
llvm-svn: 22801
|
| |
|
|
|
|
|
|
|
| |
1. Not selecting the false value of a select_cc in the false arm, which
isn't legal for nested selects.
2. Actually returning the node we created and Legalized in the FP_TO_UINT
Expander.
llvm-svn: 22789
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Teach the legalizer to promote FP_TO_UINT to FP_TO_SINT if the wider
FP_TO_UINT is also illegal. This allows us on PPC to codegen
unsigned short foo(float a) { return a; }
as:
_foo:
.LBB_foo_0: ; entry
fctiwz f0, f1
stfd f0, -8(r1)
lwz r2, -4(r1)
rlwinm r3, r2, 0, 16, 31
blr
instead of:
_foo:
.LBB_foo_0: ; entry
fctiwz f0, f1
stfd f0, -8(r1)
lwz r2, -4(r1)
lis r3, ha16(.CPI_foo_0)
lfs f0, lo16(.CPI_foo_0)(r3)
fcmpu cr0, f1, f0
blt .LBB_foo_2 ; entry
.LBB_foo_1: ; entry
fsubs f0, f1, f0
fctiwz f0, f0
stfd f0, -16(r1)
lwz r2, -12(r1)
xoris r2, r2, 32768
.LBB_foo_2: ; entry
rlwinm r3, r2, 0, 16, 31
blr
llvm-svn: 22785
|
| |
|
|
|
|
| |
assert when creating a select_cc node.
llvm-svn: 22780
|
| |
|
|
|
|
|
| |
out into SimplifySelectCC. This allows both ISD::SELECT and ISD::SELECT_CC
to use the same set of simplifying folds.
llvm-svn: 22779
|
| |
|
|
|
|
| |
e.g. (X & 7) >> 3 -> 0
llvm-svn: 22774
|
| |
|
|
|
|
| |
integer MPEG encoding loop by a factor of two.
llvm-svn: 22758
|
| |
|
|
|
|
|
|
|
|
|
|
| |
1. move assertions for node creation to getNode()
2. legalize the values returned in ExpandOp immediately
3. Move select_cc optimizations from SELECT's getNode() to SELECT_CC's,
allowing them to be cleaned up significantly.
This paves the way to pick up additional optimizations on SELECT_CC, such
as sum-of-absolute-differences.
llvm-svn: 22757
|
| |
|
|
|
|
| |
implement SELECT.
llvm-svn: 22755
|
| |
|
|
| |
llvm-svn: 22753
|
| |
|
|
| |
llvm-svn: 22734
|
| |
|
|
| |
llvm-svn: 22731
|
| |
|
|
|
|
|
|
| |
CC out of the SetCC operation, making SETCC a standard ternary operation and
CC's a standard DAG leaf. This will make it possible for other node to use
CC's as operands in the future...
llvm-svn: 22728
|
| |
|
|
| |
llvm-svn: 22696
|
| |
|
|
| |
llvm-svn: 22691
|
| |
|
|
|
|
|
|
|
| |
avoid revisiting nodes more than once. This eliminates a source of
potentially exponential behavior. For a small function in 191.fma3d
(hexah_stress_divergence_), this speeds up isel from taking > 20mins to
taking 0.07s.
llvm-svn: 22680
|
| |
|
|
| |
llvm-svn: 22679
|
| |
|
|
|
|
| |
yesterday. This fixes whetstone and a bunch of programs in the External tests.
llvm-svn: 22678
|
| |
|
|
| |
llvm-svn: 22661
|
| |
|
|
|
|
| |
* Add comments to #endif pragmas for readability
llvm-svn: 22647
|
| |
|
|
|
|
| |
the sequence used for integer ops
llvm-svn: 22629
|
| |
|
|
|
|
| |
Patch contributed by Jim Laskey!
llvm-svn: 22594
|
| |
|
|
| |
llvm-svn: 22570
|
| |
|
|
| |
llvm-svn: 22565
|
| |
|
|
| |
llvm-svn: 22563
|
| |
|
|
|
|
| |
both the src and dest values are legal
llvm-svn: 22555
|
| |
|
|
| |
llvm-svn: 22548
|
| |
|
|
|
|
| |
a larger integer destination.
llvm-svn: 22547
|
| |
|
|
|
|
| |
subcases inside, break things out earlier.
llvm-svn: 22546
|
| |
|
|
| |
llvm-svn: 22542
|
| |
|
|
| |
llvm-svn: 22529
|
| |
|
|
| |
llvm-svn: 22528
|
| |
|
|
| |
llvm-svn: 22523
|
| |
|
|
| |
llvm-svn: 22469
|
| |
|
|
|
|
|
| |
expand the code to work for all integer datatypes. This should unbreak
alpha.
llvm-svn: 22464
|
| |
|
|
|
|
| |
This allows is to not emit empty sections when .data or .bss is not used.
llvm-svn: 22457
|
| |
|
|
| |
llvm-svn: 22455
|
| |
|
|
|
|
|
|
|
|
|
| |
vector that represents the .o file at once, build up a vector for each
section of the .o file. This is needed because the .o file writer needs
to be able to switch between sections as it emits them (e.g. switch
between the .text section and the .rel section when emitting code).
This patch has no functionality change.
llvm-svn: 22453
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the target natively supports. This eliminates some special-case code from
the x86 backend and generates better code as well.
For an i8 to f64 conversion, before & after:
_x87 before:
subl $2, %esp
movb 6(%esp), %al
movsbw %al, %ax
movw %ax, (%esp)
filds (%esp)
addl $2, %esp
ret
_x87 after:
subl $2, %esp
movsbw 6(%esp), %ax
movw %ax, (%esp)
filds (%esp)
addl $2, %esp
ret
_sse before:
subl $12, %esp
movb 16(%esp), %al
movsbl %al, %eax
cvtsi2sd %eax, %xmm0
addl $12, %esp
ret
_sse after:
subl $12, %esp
movsbl 16(%esp), %eax
cvtsi2sd %eax, %xmm0
addl $12, %esp
ret
llvm-svn: 22452
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
SelectionDAGLegalize::ExpandLegalUINT_TO_FP method.
Add a new method, PromoteLegalUINT_TO_FP, which allows targets to request
that UINT_TO_FP operations be promoted to a larger input type. This is
useful for targets that have some UINT_TO_FP or SINT_TO_FP operations but
not all of them (like X86).
The same should be done with SINT_TO_FP, but this patch does not do that
yet.
llvm-svn: 22447
|
| |
|
|
| |
llvm-svn: 22446
|
| |
|
|
|
|
| |
gv and Graphviz.
llvm-svn: 22434
|
| |
|
|
| |
llvm-svn: 22432
|
| |
|
|
| |
llvm-svn: 22429
|
| |
|
|
|
|
|
|
|
|
| |
It is not safe to call LegalizeOp on something that has already been legalized.
Instead, just force another iteration of legalization.
This could affect all platforms but X86, as this codepath is dynamically
dead on X86 (ISD::MEMSET and friends are legal).
llvm-svn: 22419
|