#
da457c80 |
| 21-Aug-2008 |
Dan Gohman <gohman@apple.com> |
Fix a typo that Dale noticed.
llvm-svn: 55132
|
#
c6337ac0 |
| 21-Aug-2008 |
Dan Gohman <gohman@apple.com> |
Add libm-oriented ISD opcodes for rounding operations.
llvm-svn: 55130
|
#
82508106 |
| 21-Aug-2008 |
Dan Gohman <gohman@apple.com> |
Make HandleSDNode::getValue return an SDValue instead of the full SDUse, which isn't needed.
llvm-svn: 55121
|
#
2da2bedc |
| 20-Aug-2008 |
Dan Gohman <gohman@apple.com> |
Change the FoldingSetNodeID usage for objects which carry alignment and volatility information, such as loads and stores, to reduce the number of integer values added to the FoldingSetNodeID.
llvm-s
Change the FoldingSetNodeID usage for objects which carry alignment and volatility information, such as loads and stores, to reduce the number of integer values added to the FoldingSetNodeID.
llvm-svn: 55058
show more ...
|
#
44a15697 |
| 06-Aug-2008 |
Dan Gohman <gohman@apple.com> |
Clarify "node" vs. "value" in some comments.
llvm-svn: 54409
|
#
0e5546fa |
| 05-Aug-2008 |
Dan Gohman <gohman@apple.com> |
Correct an assertion string.
llvm-svn: 54348
|
#
43105328 |
| 29-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Revert 54147.
llvm-svn: 54148
|
#
26ec56c7 |
| 28-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Add x86 isel patterns to match what would be a ZERO_EXTEND_INREG operation, which is represented in codegen as an 'and' operation. This matches them with movz instructions, instead of leaving them to
Add x86 isel patterns to match what would be a ZERO_EXTEND_INREG operation, which is represented in codegen as an 'and' operation. This matches them with movz instructions, instead of leaving them to be matched by and instructions with an immediate field.
llvm-svn: 54147
show more ...
|
#
804c95df |
| 28-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Fold the useful features of alist and alist_node into ilist, and a new ilist_node class, and remove them. Unlike alist_node, ilist_node doesn't attempt to manage storage itself, so it avoids the asso
Fold the useful features of alist and alist_node into ilist, and a new ilist_node class, and remove them. Unlike alist_node, ilist_node doesn't attempt to manage storage itself, so it avoids the associated problems, including being opaque in gdb.
Adjust the Recycler class so that it doesn't depend on alist_node. Also, change it to use explicit Size and Align parameters, allowing it to work when the largest-sized node doesn't have the greatest alignment requirement.
Change MachineInstr's MachineMemOperand list from a pool-backed alist to a std::list for now.
llvm-svn: 54146
show more ...
|
#
2ce6f2ad |
| 27-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Rename SDOperand to SDValue.
llvm-svn: 54128
|
#
91e5dcb6 |
| 27-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Tidy SDNode::use_iterator, and complete the transition to have it parallel its analogue, Value::value_use_iterator. The operator* method now returns the user, rather than the use.
llvm-svn: 54127
|
#
bb5f43ed |
| 27-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Rename isOnlyUseOf to isOnlyUserOf.
llvm-svn: 54124
|
#
b7a791b7 |
| 27-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Improve comments for SDNode use-count methods. No functionality change.
llvm-svn: 54123
|
#
17059681 |
| 17-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk replacement of multiple values. This is slightly more efficient than doing multiple ReplaceAllUsesOfValueWith calls, and theoretical
Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk 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
show more ...
|
#
c20893b0 |
| 10-Jul-2008 |
Bill Wendling <isanbard@gmail.com> |
Pull r53428 from Gaz into mainline:
Remove warnings about unused/shadowed variables.
llvm-svn: 53430
|
#
f50b0a0c |
| 10-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Add a SubclassData field to SDNode, similar to what's done in Value, to make use of some otherwise unused space. Use this field to shrink LoadSDNode and StoreSDNode by moving the addressing mode and
Add a SubclassData field to SDNode, similar to what's done in Value, to make use of some otherwise unused space. Use this field to shrink LoadSDNode and StoreSDNode by moving the addressing mode and ext/trunc fields there.
llvm-svn: 53422
show more ...
|
#
7d94c49d |
| 09-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Simplify hasNUsesOfValue and hasAnyUsesOfValue even more. This makes their special-case checks of use_size() less beneficial, so remove them. This eliminates all but one use of use_size(), which is i
Simplify hasNUsesOfValue and hasAnyUsesOfValue even more. This makes their special-case checks of use_size() less beneficial, so remove them. This eliminates all but one use of use_size(), which is in AssignTopologicalOrder, which uses it only once for each node, and so can reasonably afford to recompute it, as this allows the UsesSize field of SDNode to be removed altogether.
llvm-svn: 53377
show more ...
|
#
db4504fa |
| 09-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Move MemoryVT out of LSBaseNode into MemSDNode, allowing the getMemOperand function to be moved into the base class as well and made non-virtual.
llvm-svn: 53372
|
#
89e71d48 |
| 09-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Move the IsVolatile and SVOffset fields into the MemSDNode base class, and store IsVolatile and Alignment in a more compact form. This makes AtomicSDNode slightly larger, but it shrinks LoadSDNode an
Move the IsVolatile and SVOffset fields into the MemSDNode base class, and store IsVolatile and Alignment in a more compact form. This makes AtomicSDNode slightly larger, but it shrinks LoadSDNode and StoreSDNode, which are much more common and are the largest of the SDNode subclasses. Also, this lets the isVolatile() and getAlignment() accessors be non-virtual.
llvm-svn: 53361
show more ...
|
#
7f8b6d5f |
| 07-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Pool-allocation for SDNodes. The pool is allocated once for each function, and reused across SelectionDAGs.
This drastically reduces the number of calls to malloc/free made during instruction select
Pool-allocation for SDNodes. The pool is allocated once for each function, and reused across SelectionDAGs.
This drastically reduces the number of calls to malloc/free made during instruction selection, and improves memory locality.
llvm-svn: 53211
show more ...
|
#
91697639 |
| 07-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Fix SDNode::MorphNodeTo (a function used by by SelectNodeTo) to properly track dead nodes that are on the original SDNode's operand list but not the new one, and have no other uses.
llvm-svn: 53201
|
#
768f2c92 |
| 07-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Remove most of the uses of SDOperandPtr, usually replacing it with a simple const SDOperand*, which is what's usually needed.
For AddNodeIDOperands, which is small, just duplicate the function to ac
Remove most of the uses of SDOperandPtr, usually replacing it with a simple const SDOperand*, which is what's usually needed.
For AddNodeIDOperands, which is small, just duplicate the function to accept an SDUse*.
For SelectionDAG::getNode - Add an overload that accepts SDUse* that copies the operands into a temporary SDOperand array, but also has special-case checks for 0 through 3 operands to avoid the copy in the common cases.
llvm-svn: 53183
show more ...
|
#
2fa6cf5c |
| 07-Jul-2008 |
Duncan Sands <baldrick@free.fr> |
LegalizeTypes soft-float support for stores of a float value.
llvm-svn: 53165
|
#
fb19f940 |
| 01-Jul-2008 |
Dan Gohman <gohman@apple.com> |
Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating the need for a flavor operand, and add a new SDNode subclass, LabelSDNode, for use with them to eliminate the need for a label id o
Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating the need for a flavor operand, and add a new SDNode subclass, LabelSDNode, for use with them to eliminate the need for a label id operand.
Change instruction selection to let these label nodes through unmodified instead of creating copies of them. Teach the MachineInstr emitter how to emit a MachineInstr directly from an ISD label node.
This avoids the need for allocating SDNodes for the label id and flavor value, as well as SDNodes for each of the post-isel label, label id, and label flavor.
llvm-svn: 52943
show more ...
|
#
5c73a886 |
| 30-Jun-2008 |
Dan Gohman <gohman@apple.com> |
Rename ISD::LOCATION to ISD::DBG_STOPPOINT to better reflect its purpose, and give it a custom SDNode subclass so that it doesn't need to have line number, column number, filename string, and directo
Rename ISD::LOCATION to ISD::DBG_STOPPOINT to better reflect its purpose, and give it a custom SDNode subclass so that it doesn't need to have line number, column number, filename string, and directory string, all existing as individual SDNodes to be the operands.
This was the only user of ISD::STRING, StringSDNode, etc., so remove those and some associated code.
This makes stop-points considerably easier to read in -view-legalize-dags output, and reduces overhead (creating new nodes and copying std::strings into them) on code containing debugging information.
llvm-svn: 52924
show more ...
|