#
b4690e3f |
| 31-May-2014 |
Adam Nemet <anemet@apple.com> |
[SelectionDAG] Force cycle detection in AssignTopologicalOrder before aborting
DAG cycle detection is only enabled with ENABLE_EXPENSIVE_CHECKS. However we can run it just before we would crash in
[SelectionDAG] Force cycle detection in AssignTopologicalOrder before aborting
DAG cycle detection is only enabled with ENABLE_EXPENSIVE_CHECKS. However we can run it just before we would crash in order to provide more informative diagnostics.
Now in addition to the "Overran sorted position" message we also get the Node printed if a cycle was detected.
Tested by building several configs: Debug+Assert, Debug+Assert+Check (this is ENABLE_EXPENSIVE_CHECKS), Release+Assert and Release. Also tried that the AssignTopologicalOrder assert produces the expected results.
llvm-svn: 209977
show more ...
|
#
7d39430a |
| 31-May-2014 |
Adam Nemet <anemet@apple.com> |
[SelectionDAG] Pass DAG to checkForCycles
Pass the DAG down to checkForCycles from all callers where we have it. This allows target-specific nodes to be printed properly.
Also print some missing n
[SelectionDAG] Pass DAG to checkForCycles
Pass the DAG down to checkForCycles from all callers where we have it. This allows target-specific nodes to be printed properly.
Also print some missing newlines.
llvm-svn: 209976
show more ...
|
Revision tags: llvmorg-3.4.2, llvmorg-3.4.2-rc1 |
|
#
2893b2e1 |
| 27-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Fix an assert I accidentally broke to hopefully fix the build bots.
llvm-svn: 207380
|
#
bb533072 |
| 27-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Convert SDNode constructor to use ArrayRef.
llvm-svn: 207375
|
#
2d7d6052 |
| 27-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Const-correct SelectionDAG::getAtomic.
llvm-svn: 207373
|
#
206fcd45 |
| 26-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Convert getMemIntrinsicNode to take ArrayRef of SDValue instead of pointer and size.
llvm-svn: 207329
|
Revision tags: llvmorg-3.4.1, llvmorg-3.4.1-rc2 |
|
#
aad475b3 |
| 15-Apr-2014 |
Nick Lewycky <nicholas@mxc.ca> |
Break PseudoSourceValue out of the Value hierarchy. It is now the root of its own tree containing FixedStackPseudoSourceValue (which you can use isa/dyn_cast on) and MipsCallEntry (which you can't).
Break PseudoSourceValue out of the Value hierarchy. It is now the root of its own tree containing FixedStackPseudoSourceValue (which you can use isa/dyn_cast on) and MipsCallEntry (which you can't). Anything that needs to use either a PseudoSourceValue* and Value* is strongly encouraged to use a MachinePointerInfo instead.
llvm-svn: 206255
show more ...
|
#
c0196b1b |
| 14-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
[C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr.
llvm-svn: 206142
|
Revision tags: llvmorg-3.4.1-rc1 |
|
#
e2e1c355 |
| 11-Apr-2014 |
Jim Grosbach <grosbach@apple.com> |
SDNode: Add uses() iterator_range convenience methods.
llvm-svn: 206005
|
#
5b0aacf1 |
| 22-Mar-2014 |
Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> |
[DAG] Fix an assertion failure caused by an invalid cast in method 'BuildVectorSDNode::isConstantSplat'
This patch renames method 'isConstantSplat' as 'getConstantSplatValue' (mainly for consistency
[DAG] Fix an assertion failure caused by an invalid cast in method 'BuildVectorSDNode::isConstantSplat'
This patch renames method 'isConstantSplat' as 'getConstantSplatValue' (mainly for consistency reasons), and rewrites its logic to ensure that we always perform a legal 'cast<ConstantSDNode>'.
Added test shift-combine-crash.ll to verify that DAGCombiner no longer crashes with an assertion failure in the attempt to simplify a vector shift by a vector of all undef counts.
llvm-svn: 204536
show more ...
|
#
985b9de4 |
| 17-Mar-2014 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Make DAGCombiner work on vector bitshifts with constant splat vectors.
llvm-svn: 204071
|
#
e94a518a |
| 11-Mar-2014 |
Tim Northover <tnorthover@apple.com> |
IR: add a second ordering operand to cmpxhg for failure
The syntax for "cmpxchg" should now look something like:
cmpxchg i32* %addr, i32 42, i32 3 acquire monotonic
where the second ordering argu
IR: add a second ordering operand to cmpxhg for failure
The syntax for "cmpxchg" should now look something like:
cmpxchg i32* %addr, i32 42, i32 3 acquire monotonic
where the second ordering argument gives the required semantics in the case that no exchange takes place. It should be no stronger than the first ordering constraint and cannot be either "release" or "acq_rel" (since no store will have taken place).
rdar://problem/15996804
llvm-svn: 203559
show more ...
|
#
3d994021 |
| 11-Mar-2014 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Add helpers for getting scalar sizes of vector value types.
llvm-svn: 203526
|
#
92051407 |
| 05-Mar-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[Layering] Move DebugLoc.h into the IR library. The implementation already lived there and it is where it belongs -- this is the in-memory debug location representation.
This is just cleanup -- Modu
[Layering] Move DebugLoc.h into the IR library. The implementation already lived there and it is where it belongs -- this is the in-memory debug location representation.
This is just cleanup -- Modules can actually cope with this, but that doesn't make it right. After chatting with folks that have out-of-tree stuff, going ahead and moving the rest of the headers seems preferable.
llvm-svn: 202960
show more ...
|
#
b2f034b8 |
| 03-Mar-2014 |
Benjamin Kramer <benny.kra@googlemail.com> |
[C++11] Use std::tie to simplify compare operators.
No functionality change.
llvm-svn: 202751
|
#
b6d0bd48 |
| 02-Mar-2014 |
Benjamin Kramer <benny.kra@googlemail.com> |
[C++11] Replace llvm::next and llvm::prior with std::next and std::prev.
Remove the old functions.
llvm-svn: 202636
|
#
b598f7b8 |
| 24-Feb-2014 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Add missing const
llvm-svn: 202074
|
#
73afb432 |
| 27-Jan-2014 |
Reid Kleckner <reid@kleckner.net> |
Silence MSVC warning on 'uint16_t |= bool' with a cast
This isn't C4800, it's C4805. MSVC says this is unsafe, but it generates correct code.
llvm-svn: 200229
|
#
f26beda7 |
| 25-Jan-2014 |
Juergen Ributzka <juergen@apple.com> |
Revert "Revert "Add Constant Hoisting Pass" (r200034)"
This reverts commit r200058 and adds the using directive for ARMTargetTransformInfo to silence two g++ overload warnings.
llvm-svn: 200062
|
#
4d67a2e8 |
| 25-Jan-2014 |
Hans Wennborg <hans@hanshq.net> |
Revert "Add Constant Hoisting Pass" (r200034)
This commit caused -Woverloaded-virtual warnings. The two new TargetTransformInfo::getIntImmCost functions were only added to the superclass, and to the
Revert "Add Constant Hoisting Pass" (r200034)
This commit caused -Woverloaded-virtual warnings. The two new TargetTransformInfo::getIntImmCost functions were only added to the superclass, and to the X86 subclass. The other targets were not updated, and the warning highlighted this by pointing out that e.g. ARMTTI::getIntImmCost was hiding the two new getIntImmCost variants.
We could pacify the warning by adding "using TargetTransformInfo::getIntImmCost" to the various subclasses, or turning it off, but I suspect that it's wrong to leave the functions unimplemnted in those targets. The default implementations return TCC_Free, which I don't think is right e.g. for ARM.
llvm-svn: 200058
show more ...
|
#
4f3df4ad |
| 24-Jan-2014 |
Juergen Ributzka <juergen@apple.com> |
Add Constant Hoisting Pass
Retry commit r200022 with a fix for the build bot errors. Constant expressions have (unlike instructions) module scope use lists and therefore may have users in different
Add Constant Hoisting Pass
Retry commit r200022 with a fix for the build bot errors. Constant expressions have (unlike instructions) module scope use lists and therefore may have users in different functions. The fix is to simply ignore these out-of-function uses.
llvm-svn: 200034
show more ...
|
#
50e7e80d |
| 24-Jan-2014 |
Juergen Ributzka <juergen@apple.com> |
Revert "Add Constant Hoisting Pass"
This reverts commit r200022 to unbreak the build bots.
llvm-svn: 200024
|
#
38b67d0c |
| 24-Jan-2014 |
Juergen Ributzka <juergen@apple.com> |
Add Constant Hoisting Pass
This pass identifies expensive constants to hoist and coalesces them to better prepare it for SelectionDAG-based code generation. This works around the limitations of the
Add Constant Hoisting Pass
This pass identifies expensive constants to hoist and coalesces them to better prepare it for SelectionDAG-based code generation. This works around the limitations of the basic-block-at-a-time approach.
First it scans all instructions for integer constants and calculates its cost. If the constant can be folded into the instruction (the cost is TCC_Free) or the cost is just a simple operation (TCC_BASIC), then we don't consider it expensive and leave it alone. This is the default behavior and the default implementation of getIntImmCost will always return TCC_Free.
If the cost is more than TCC_BASIC, then the integer constant can't be folded into the instruction and it might be beneficial to hoist the constant. Similar constants are coalesced to reduce register pressure and materialization code.
When a constant is hoisted, it is also hidden behind a bitcast to force it to be live-out of the basic block. Otherwise the constant would be just duplicated and each basic block would have its own copy in the SelectionDAG. The SelectionDAG recognizes such constants as opaque and doesn't perform certain transformations on them, which would create a new expensive constant.
This optimization is only applied to integer constants in instructions and simple (this means not nested) constant cast experessions. For example: %0 = load i64* inttoptr (i64 big_constant to i64*)
Reviewed by Eric
llvm-svn: 200022
show more ...
|
#
7384405f |
| 13-Jan-2014 |
Juergen Ributzka <juergen@apple.com> |
[DAG] Teach DAG to also reassociate vector operations
This commit teaches DAG to reassociate vector ops, which in turn enables constant folding of vector op chains that appear later on during custom
[DAG] Teach DAG to also reassociate vector operations
This commit teaches DAG to reassociate vector ops, which in turn enables constant folding of vector op chains that appear later on during custom lowering and DAG combine.
Reviewed by Andrea Di Biagio
llvm-svn: 199135
show more ...
|
#
46dcddb3 |
| 27-Dec-2013 |
Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> |
Teach DAGCombiner how to fold a SIGN_EXTEND_INREG of a BUILD_VECTOR of ConstantSDNodes (or UNDEFs) into a simple BUILD_VECTOR.
For example, given the following sequence of dag nodes:
i32 C = Cons
Teach DAGCombiner how to fold a SIGN_EXTEND_INREG of a BUILD_VECTOR of ConstantSDNodes (or UNDEFs) into a simple BUILD_VECTOR.
For example, given the following sequence of dag nodes:
i32 C = Constant<1> v4i32 V = BUILD_VECTOR C, C, C, C v4i32 Result = SIGN_EXTEND_INREG V, ValueType:v4i1
The SIGN_EXTEND_INREG node can be folded into a build_vector since the vector in input is a BUILD_VECTOR of constants.
The optimized sequence is:
i32 C = Constant<-1> v4i32 Result = BUILD_VECTOR C, C, C, C
llvm-svn: 198084
show more ...
|