#
480872b4 |
| 16-Jul-2014 |
Juergen Ributzka <juergen@apple.com> |
Remove TLI from isInTailCallPosition's arguments. NFC.
There is no need to pass on TLI separately to the function. As Eric pointed out the Target Machine already provides everything we need.
llvm-s
Remove TLI from isInTailCallPosition's arguments. NFC.
There is no need to pass on TLI separately to the function. As Eric pointed out the Target Machine already provides everything we need.
llvm-svn: 213108
show more ...
|
#
4ce9863d |
| 11-Jul-2014 |
Juergen Ributzka <juergen@apple.com> |
[FastISel] Make isInTailCallPosition independent of SelectionDAG.
Break out the arguemnts required from SelectionDAG, so that this function can also be used by FastISel.
llvm-svn: 212844
|
#
f236bb1b |
| 03-Jul-2014 |
Ulrich Weigand <ulrich.weigand@de.ibm.com> |
Fix ppcf128 component access on little-endian systems
The PowerPC 128-bit long double data type (ppcf128 in LLVM) is in fact a pair of two doubles, where one is considered the "high" or more-signifi
Fix ppcf128 component access on little-endian systems
The PowerPC 128-bit long double data type (ppcf128 in LLVM) is in fact a pair of two doubles, where one is considered the "high" or more-significant part, and the other is considered the "low" or less-significant part. When a ppcf128 value is stored in memory or a register pair, the high part always comes first, i.e. at the lower memory address or in the lower-numbered register, and the low part always comes second. This is true both on big-endian and little-endian PowerPC systems. (Similar to how with a complex number, the real part always comes first and the imaginary part second, no matter the byte order of the system.)
This was implemented incorrectly for little-endian systems in LLVM. This commit fixes three related issues:
- When printing an immediate ppcf128 constant to assembler output in emitGlobalConstantFP, emit the high part first on both big- and little-endian systems.
- When lowering a ppcf128 type to a pair of f64 types in SelectionDAG (which is used e.g. when generating code to load an argument into a register pair), use correct low/high part ordering on little-endian systems.
- In a related issue, because lowering ppcf128 into a pair of f64 must operate differently from lowering an int128 into a pair of i64, bitcasts between ppcf128 and int128 must not be optimized away by the DAG combiner on little-endian systems, but must effect a word-swap.
Reviewed by Hal Finkel.
llvm-svn: 212274
show more ...
|
#
3bd03c70 |
| 01-Jul-2014 |
Juergen Ributzka <juergen@apple.com> |
[DAG] Pass the argument list to the CallLoweringInfo via move semantics. NFCI.
The argument list vector is never used after it has been passed to the CallLoweringInfo and moving it to the CallLoweri
[DAG] Pass the argument list to the CallLoweringInfo via move semantics. NFCI.
The argument list vector is never used after it has been passed to the CallLoweringInfo and moving it to the CallLoweringInfo is cleaner and pretty much as cheap as keeping a pointer to it.
llvm-svn: 212135
show more ...
|
#
d82ed2e5 |
| 18-Jun-2014 |
Tim Northover <tnorthover@apple.com> |
DAG: move sret demotion into most basic LowerCallTo implementation.
It looks like there are two versions of LowerCallTo here: the SelectionDAGBuilder one is designed to operate on LLVM IR, and the T
DAG: move sret demotion into most basic LowerCallTo implementation.
It looks like there are two versions of LowerCallTo here: the SelectionDAGBuilder one is designed to operate on LLVM IR, and the TargetLowering one in the case where everything is at DAG level.
Previously, only the SelectionDAGBuilder variant could handle demoting an impossible return to sret semantics (before delegating to the TargetLowering version), but this functionality is also useful for certain libcalls (e.g. 128-bit operations on 32-bit x86). So this commit moves the sret handling down a level.
rdar://problem/17242889
llvm-svn: 211155
show more ...
|
#
420a2168 |
| 13-Jun-2014 |
Tim Northover <tnorthover@apple.com> |
IR: add "cmpxchg weak" variant to support permitted failure.
This commit adds a weak variant of the cmpxchg operation, as described in C++11. A cmpxchg instruction with this modifier is permitted to
IR: add "cmpxchg weak" variant to support permitted failure.
This commit adds a weak variant of the cmpxchg operation, as described in C++11. A cmpxchg instruction with this modifier is permitted to fail to store, even if the comparison indicated it should.
As a result, cmpxchg instructions must return a flag indicating success in addition to their original iN value loaded. Thus, for uniformity *all* cmpxchg instructions now return "{ iN, i1 }". The second flag is 1 when the store succeeded.
At the DAG level, a new ATOMIC_CMP_SWAP_WITH_SUCCESS node has been added as the natural representation for the new cmpxchg instructions. It is a strong cmpxchg.
By default this gets Expanded to the existing ATOMIC_CMP_SWAP during Legalization, so existing backends should see no change in behaviour. If they wish to deal with the enhanced node instead, they can call setOperationAction on it. Beware: as a node with 2 results, it cannot be selected from TableGen.
Currently, no use is made of the extra information provided in this patch. Test updates are almost entirely adapting the input IR to the new scheme.
Summary for out of tree users: ------------------------------
+ Legacy Bitcode files are upgraded during read. + Legacy assembly IR files will be invalid. + Front-ends must adapt to different type for "cmpxchg". + Backends should be unaffected by default.
llvm-svn: 210903
show more ...
|
#
576d36ae |
| 10-Jun-2014 |
Eric Christopher <echristo@gmail.com> |
Have isInTailCallPosition take the DAG so that we can use the version of TargetLowering/Machine from there on the way to avoiding TargetMachine in TargetLowering.
llvm-svn: 210579
|
#
4db1abea |
| 09-Jun-2014 |
Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> |
[DAG] Expose NoSignedWrap, NoUnsignedWrap and Exact flags to SelectionDAG.
This patch modifies SelectionDAGBuilder to construct SDNodes with associated NoSignedWrap, NoUnsignedWrap and Exact flags c
[DAG] Expose NoSignedWrap, NoUnsignedWrap and Exact flags to SelectionDAG.
This patch modifies SelectionDAGBuilder to construct SDNodes with associated NoSignedWrap, NoUnsignedWrap and Exact flags coming from IR BinaryOperator instructions.
Added a new SDNode type called 'BinaryWithFlagsSDNode' to allow accessing nsw/nuw/exact flags during codegen.
Patch by Marcello Maggioni.
llvm-svn: 210467
show more ...
|
#
d622e128 |
| 30-May-2014 |
Tim Northover <tnorthover@apple.com> |
SelectionDAG: skip barriers for unordered atomic operations
Unordered is strictly weaker than monotonic, so if the latter doesn't have any barriers then the former certainly shouldn't.
rdar://probl
SelectionDAG: skip barriers for unordered atomic operations
Unordered is strictly weaker than monotonic, so if the latter doesn't have any barriers then the former certainly shouldn't.
rdar://problem/16548260
llvm-svn: 209901
show more ...
|
#
4f1909f1 |
| 27-May-2014 |
Tim Northover <tnorthover@apple.com> |
ARM: teach AAPCS-VFP to deal with Cortex-M4.
Cortex-M4 only has single-precision floating point support, so any LLVM "double" type will have been split into 2 i32s by now. Fortunately, the consecuti
ARM: teach AAPCS-VFP to deal with Cortex-M4.
Cortex-M4 only has single-precision floating point support, so any LLVM "double" type will have been split into 2 i32s by now. Fortunately, the consecutive-register framework turns out to be precisely what's needed to reconstruct the double and follow AAPCS-VFP correctly!
rdar://problem/17012966
llvm-svn: 209650
show more ...
|
#
f3a5a5c5 |
| 17-May-2014 |
Saleem Abdulrasool <compnerd@compnerd.org> |
Target: remove old constructors for CallLoweringInfo
This is mostly a mechanical change changing all the call sites to the newer chained-function construction pattern. This removes the horrible 15-
Target: remove old constructors for CallLoweringInfo
This is mostly a mechanical change changing all the call sites to the newer chained-function construction pattern. This removes the horrible 15-parameter constructor for the CallLoweringInfo in favour of setting properties of the call via chained functions. No functional change beyond the removal of the old constructors are intended.
llvm-svn: 209082
show more ...
|
#
9f664c10 |
| 17-May-2014 |
Saleem Abdulrasool <compnerd@compnerd.org> |
Target: change member from reference to pointer
This is a preliminary step to help ease the construction of CallLoweringInfo. Changing the construction to a chained function pattern requires that th
Target: change member from reference to pointer
This is a preliminary step to help ease the construction of CallLoweringInfo. Changing the construction to a chained function pattern requires that the parameter be nullable. However, rather than copying the vector, save a pointer rather than the reference to permit a late binding of the arguments.
llvm-svn: 209080
show more ...
|
Revision tags: llvmorg-3.4.2, llvmorg-3.4.2-rc1 |
|
#
c24f2171 |
| 09-May-2014 |
Oliver Stannard <oliver.stannard@arm.com> |
ARM: HFAs must be passed in consecutive registers
When using the ARM AAPCS, HFAs (Homogeneous Floating-point Aggregates) must be passed in a block of consecutive floating-point registers, or on the
ARM: HFAs must be passed in consecutive registers
When using the ARM AAPCS, HFAs (Homogeneous Floating-point Aggregates) must be passed in a block of consecutive floating-point registers, or on the stack. This means that unused floating-point registers cannot be back-filled with part of an HFA, however this can currently happen. This patch, along with the corresponding clang patch (http://reviews.llvm.org/D3083) prevents this.
llvm-svn: 208413
show more ...
|
#
c7aea40e |
| 06-May-2014 |
Renato Golin <renato.golin@linaro.org> |
Implememting named register intrinsics
This patch implements the infrastructure to use named register constructs in programs that need access to specific registers (bare metal, kernels, etc).
So fa
Implememting named register intrinsics
This patch implements the infrastructure to use named register constructs in programs that need access to specific registers (bare metal, kernels, etc).
So far, only the stack pointer is supported as a technology preview, but as it is, the intrinsic can already support all non-allocatable registers from any architecture.
llvm-svn: 208104
show more ...
|
#
2d2aa0ca |
| 30-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Use makeArrayRef insted of calling ArrayRef<T> constructor directly. I introduced most of these recently.
llvm-svn: 207616
|
#
64941d97 |
| 27-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Convert SelectionDAG::getMergeValues to use ArrayRef.
llvm-svn: 207374
|
#
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
|
#
48d114be |
| 26-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
Convert SelectionDAG::getNode methods to use ArrayRef<SDValue>.
llvm-svn: 207327
|
Revision tags: llvmorg-3.4.1, llvmorg-3.4.1-rc2 |
|
#
32da8892 |
| 25-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
This reapplies r207235 with an additional bugfixes caught by the msan buildbot - do not insert debug intrinsics before phi nodes.
Debug info for optimized code: Support variables that are on the sta
This reapplies r207235 with an additional bugfixes caught by the msan buildbot - do not insert debug intrinsics before phi nodes.
Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime.
Previously, when a variable was at a FrameIndex for any part of its lifetime, this would shadow all other DBG_VALUEs and only a single fbreg location would be emitted, which in fact is only valid for a small range and not the entire lexical scope of the variable. The included dbg-value-const-byref testcase demonstrates this.
This patch fixes this by Local - emitting dbg.value intrinsics for allocas that are passed by reference - dropping all dbg.declares (they are now fully lowered to dbg.values) SelectionDAG - renamed constructors for SDDbgValue for better readability. - fix UserValue::match() to handle indirect values correctly - not inserting an MMI table entries for dbg.values that describe allocas. - lowering dbg.values that describe allocas into *indirect* DBG_VALUEs. CodeGenPrepare - leaving dbg.values for an alloca were they are (see comment) Other - regenerated/updated instcombine.ll testcase and included source
rdar://problem/16679879 http://reviews.llvm.org/D3374
llvm-svn: 207269
show more ...
|
#
d2d9b76e |
| 25-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
Revert "This reapplies r207130 with an additional testcase+and a missing check for"
This reverts commit 207235 to investigate msan buildbot breakage.
llvm-svn: 207250
|
#
f5834a4b |
| 25-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
This reapplies r207130 with an additional testcase+and a missing check for AllocaInst that was missing in one location. Debug info for optimized code: Support variables that are on the stack and desc
This reapplies r207130 with an additional testcase+and a missing check for AllocaInst that was missing in one location. Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime.
Previously, when a variable was at a FrameIndex for any part of its lifetime, this would shadow all other DBG_VALUEs and only a single fbreg location would be emitted, which in fact is only valid for a small range and not the entire lexical scope of the variable. The included dbg-value-const-byref testcase demonstrates this.
This patch fixes this by Local - emitting dbg.value intrinsics for allocas that are passed by reference - dropping all dbg.declares (they are now fully lowered to dbg.values) SelectionDAG - renamed constructors for SDDbgValue for better readability. - fix UserValue::match() to handle indirect values correctly - not inserting an MMI table entries for dbg.values that describe allocas. - lowering dbg.values that describe allocas into *indirect* DBG_VALUEs. CodeGenPrepare - leaving dbg.values for an alloca were they are (see comment) Other - regenerated/updated instcombine.ll testcase and included source
rdar://problem/16679879 http://reviews.llvm.org/D3374
llvm-svn: 207235
show more ...
|
#
6e5de2ea |
| 25-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
Revert "This reapplies r207130 with an additional testcase+and a missing check for" Typo in testcase.
llvm-svn: 207166
|
#
3512190a |
| 25-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
This reapplies r207130 with an additional testcase+and a missing check for AllocaInst that was missing in one location. Debug info for optimized code: Support variables that are on the stack and desc
This reapplies r207130 with an additional testcase+and a missing check for AllocaInst that was missing in one location. Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime.
Previously, when a variable was at a FrameIndex for any part of its lifetime, this would shadow all other DBG_VALUEs and only a single fbreg location would be emitted, which in fact is only valid for a small range and not the entire lexical scope of the variable. The included dbg-value-const-byref testcase demonstrates this.
This patch fixes this by Local - emitting dbg.value intrinsics for allocas that are passed by reference - dropping all dbg.declares (they are now fully lowered to dbg.values) SelectionDAG - renamed constructors for SDDbgValue for better readability. - fix UserValue::match() to handle indirect values correctly - not inserting an MMI table entries for dbg.values that describe allocas. - lowering dbg.values that describe allocas into *indirect* DBG_VALUEs. CodeGenPrepare - leaving dbg.values for an alloca were they are (see comment) Other - regenerated/updated instcombine.ll testcase and included source
rdar://problem/16679879 http://reviews.llvm.org/D3374
llvm-svn: 207165
show more ...
|
#
ff4282a2 |
| 25-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
Revert "Debug info for optimized code: Support variables that are on the stack and"
This reverts commit 207130 for buildbot breakage.
llvm-svn: 207162
|
#
f4223918 |
| 24-Apr-2014 |
Adrian Prantl <aprantl@apple.com> |
Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime.
Previously, when a variable was at a FrameIndex for any part of its lifetime
Debug info for optimized code: Support variables that are on the stack and described by DBG_VALUEs during their lifetime.
Previously, when a variable was at a FrameIndex for any part of its lifetime, this would shadow all other DBG_VALUEs and only a single fbreg location would be emitted, which in fact is only valid for a small range and not the entire lexical scope of the variable. The included dbg-value-const-byref testcase demonstrates this.
This patch fixes this by Local - emitting dbg.value intrinsics for allocas that are passed by reference - dropping all dbg.declares (they are now fully lowered to dbg.values) SelectionDAG - renamed constructors for SDDbgValue for better readability. - fix UserValue::match() to handle indirect values correctly - not inserting an MMI table entries for dbg.values that describe allocas. - lowering dbg.values that describe allocas into *indirect* DBG_VALUEs. CodeGenPrepare - leaving dbg.values for an alloca were they are (see comment) Other - regenerated/updated instcombine-intrinsics testcase and included source
rdar://problem/16679879 http://reviews.llvm.org/D3374
llvm-svn: 207130
show more ...
|