#
728d4172 |
| 14-Feb-2014 |
Tom Stellard <thomas.stellard@amd.com> |
TargetLowering: n * r where n > 2 should be an illegal addressing mode
llvm-svn: 201433
|
#
decb024c |
| 02-Jan-2014 |
Hal Finkel <hfinkel@anl.gov> |
Disable compare sinking in CodeGenPrepare when multiple condition registers are available
As noted in the comment above CodeGenPrepare::OptimizeInst, which aggressively sinks compares to reduce pres
Disable compare sinking in CodeGenPrepare when multiple condition registers are available
As noted in the comment above CodeGenPrepare::OptimizeInst, which aggressively sinks compares to reduce pressure on the condition register(s), for targets such as PowerPC with multiple condition registers, this may not be the right thing to do. This adds an HasMultipleConditionRegisters boolean to TLI, and CodeGenPrepare::OptimizeInst is skipped when HasMultipleConditionRegisters is true.
This functionality will be used by the PowerPC backend in an upcoming commit. Especially when the PowerPC backend starts tracking individual condition register bits as separate allocatable entities (which will happen in this upcoming commit), this sinking from CodeGenPrepare::OptimizeInst is significantly suboptimial.
llvm-svn: 198354
show more ...
|
#
6994fdf3 |
| 01-Jan-2014 |
Rafael Espindola <rafael.espindola@gmail.com> |
Remove the 's' DataLayout specification
During the years there have been some attempts at figuring out how to align byval arguments. A look at the commit log suggests that they were
* Use the ABI a
Remove the 's' DataLayout specification
During the years there have been some attempts at figuring out how to align byval arguments. A look at the commit log suggests that they were
* Use the ABI alignment. * When that was not sufficient for x86-64, I added the 's' specification to DataLayout. * When that was not sufficient Evan added the virtual getByValTypeAlignment. * When even that was not sufficient, we just got the FE to add the alignment to the byval.
This patch is just a simple cleanup that removes my first attempt at fixing the problem. I also added an AArch64 implementation of getByValTypeAlignment to make sure this patch is a nop. I also left the 's' parsing for backward compatibility.
I will send a short email to llvmdev about the change for anyone maintaining an out of tree target.
llvm-svn: 198287
show more ...
|
Revision tags: llvmorg-3.4.0, llvmorg-3.4.0-rc3, llvmorg-3.4.0-rc2 |
|
#
c8a73af3 |
| 29-Nov-2013 |
Lang Hames <lhames@gmail.com> |
Remove unused variable from r195944.
llvm-svn: 195945
|
#
39609996 |
| 29-Nov-2013 |
Lang Hames <lhames@gmail.com> |
Refactor a lot of patchpoint/stackmap related code to simplify and make it target independent.
Most of the x86 specific stackmap/patchpoint handling was necessitated by the use of the native address
Refactor a lot of patchpoint/stackmap related code to simplify and make it target independent.
Most of the x86 specific stackmap/patchpoint handling was necessitated by the use of the native address-mode format for frame index operands. PEI has now been modified to treat stackmap/patchpoint similarly to DEBUG_INFO, allowing us to use a simple, platform independent register/offset pair for frame indexes on stackmap/patchpoints.
Notes: - Folding is now platform independent and automatically supported. - Emiting patchpoints with direct memory references now just involves calling the TargetLoweringBase::emitPatchPoint utility method from the target's XXXTargetLowering::EmitInstrWithCustomInserter method. (See X86TargetLowering for an example). - No more ugly platform-specific operand parsers.
This patch shouldn't change the generated output for X86.
llvm-svn: 195944
show more ...
|
Revision tags: llvmorg-3.4.0-rc1 |
|
#
b03bd4d9 |
| 15-Nov-2013 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Add addrspacecast instruction.
Patch by Michele Scandale!
llvm-svn: 194760
|
#
a564d329 |
| 25-Oct-2013 |
Tim Northover <tnorthover@apple.com> |
LegalizeDAG: allow libcalls for max/min atomic operations
ARM processors without ldrex/strex need to be able to make libcalls for all atomic operations, including the newer min/max versions.
The al
LegalizeDAG: allow libcalls for max/min atomic operations
ARM processors without ldrex/strex need to be able to make libcalls for all atomic operations, including the newer min/max versions.
The alternative would probably be expanding these operations in terms of cmpxchg (as x86 does always), but in the configurations where this matters code-size tends to be paramount so the libcall is more desirable.
llvm-svn: 193398
show more ...
|
#
8d7d4dea |
| 23-Oct-2013 |
Tom Stellard <thomas.stellard@amd.com> |
SelectionDAG: Pass along the original argument/element type in ISD::InputArg
For some targets, it is useful to be able to look at the original type of an argument without having to dig through the o
SelectionDAG: Pass along the original argument/element type in ISD::InputArg
For some targets, it is useful to be able to look at the original type of an argument without having to dig through the original IR.
This also fixes a bug in SelectionDAGBuilder where InputArg.PartOffset was not taking into account the offset of structure elements.
Patch by: Justin Holewinski
Tom Stellard: - Changed the type of ArgVT to EVT, so it can store non-simple types like v3i32.
llvm-svn: 193214
show more ...
|
#
bc424211 |
| 21-Oct-2013 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Remove unused TargetLowering field.
llvm-svn: 193113
|
#
451b7dd1 |
| 18-Oct-2013 |
David Majnemer <david.majnemer@gmail.com> |
CodeGen: Emit a libcall if the target doesn't support 16-byte wide atomics
There are targets that support i128 sized scalars but cannot emit instructions that modify them directly. The proper thing
CodeGen: Emit a libcall if the target doesn't support 16-byte wide atomics
There are targets that support i128 sized scalars but cannot emit instructions that modify them directly. The proper thing to do is to emit a libcall.
This fixes PR17481.
llvm-svn: 192957
show more ...
|
#
fd155828 |
| 26-Aug-2013 |
Tom Stellard <thomas.stellard@amd.com> |
SelectionDAG: Use correct pointer size when lowering function arguments v2
This adds minimal support to the SelectionDAG for handling address spaces with different pointer sizes. The SelectionDAG s
SelectionDAG: Use correct pointer size when lowering function arguments v2
This adds minimal support to the SelectionDAG for handling address spaces with different pointer sizes. The SelectionDAG should now correctly lower pointer function arguments to the correct size as well as generate the correct code when lowering getelementptr.
This patch also updates the R600 DataLayout to use 32-bit pointers for the local address space.
v2: - Add more helper functions to TargetLoweringBase - Use CHECK-LABEL for tests
llvm-svn: 189221
show more ...
|
#
0c5c01aa |
| 19-Aug-2013 |
Hal Finkel <hfinkel@anl.gov> |
Add a llvm.copysign intrinsic
This adds a llvm.copysign intrinsic; We already have Libfunc recognition for copysign (which is turned into the FCOPYSIGN SDAG node). In order to autovectorize calls to
Add a llvm.copysign intrinsic
This adds a llvm.copysign intrinsic; We already have Libfunc recognition for copysign (which is turned into the FCOPYSIGN SDAG node). In order to autovectorize calls to copysign in the loop vectorizer, we need a corresponding intrinsic as well.
In addition to the expected changes to the language reference, the loop vectorizer, BasicTTI, and the SDAG builder (the intrinsic is transformed into an FCOPYSIGN node, just like the function call), this also adds FCOPYSIGN to a few lists in LegalizeVector{Ops,Types} so that vector copysigns can be expanded.
In TargetLoweringBase::initActions, I've made the default action for FCOPYSIGN be Expand for vector types. This seems correct for all in-tree targets, and I think is the right thing to do because, previously, there was no way to generate vector-values FCOPYSIGN nodes (and most targets don't specify an action for vector-typed FCOPYSIGN).
llvm-svn: 188728
show more ...
|
#
7dce16f6 |
| 12-Aug-2013 |
Michael Gottesman <mgottesman@apple.com> |
[stackprotector] Add in the stackprotector libcall.
We support this libcall on all platforms except for OpenBSD (See lib/Codegen/StackProtector.cpp).
llvm-svn: 188193
|
#
8ec43c6a |
| 09-Aug-2013 |
Hal Finkel <hfinkel@anl.gov> |
Set ISD::FROUND to Expand by default for all types
For most libm ISD nodes, TargetLoweringBase::initActions sets the default scalar-type action to Expand, and leaves the vector-type action default a
Set ISD::FROUND to Expand by default for all types
For most libm ISD nodes, TargetLoweringBase::initActions sets the default scalar-type action to Expand, and leaves the vector-type action default as Legal. This is not appropriate for the new ISD::FROUND node (which no backend but PowerPC handles explicitly).
Fixes PR16842.
llvm-svn: 188048
show more ...
|
#
171817ee |
| 07-Aug-2013 |
Hal Finkel <hfinkel@anl.gov> |
Add ISD::FROUND for libm round()
All libm floating-point rounding functions, except for round(), had their own ISD nodes. Recent PowerPC cores have an instruction for round(), and so here I'm adding
Add ISD::FROUND for libm round()
All libm floating-point rounding functions, except for round(), had their own ISD nodes. Recent PowerPC cores have an instruction for round(), and so here I'm adding ISD::FROUND so that round() can be custom lowered as well.
For the most part, this is straightforward. I've added an intrinsic and a matching ISD node just like those for nearbyint() and friends. The SelectionDAG pattern I've named frnd (because ISD::FP_ROUND has already claimed fround).
This will be used by the PowerPC backend in a follow-up commit.
llvm-svn: 187926
show more ...
|
Revision tags: llvmorg-3.3.1-rc1, llvmorg-3.3.0, llvmorg-3.3.0-rc3, llvmorg-3.3.0-rc2 |
|
#
75865923 |
| 18-May-2013 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Add LLVMContext argument to getSetCCResultType
llvm-svn: 182180
|
Revision tags: llvmorg-3.3.0-rc1 |
|
#
16aba170 |
| 20-Apr-2013 |
Tim Northover <Tim.Northover@arm.com> |
Remove unused ShouldFoldAtomicFences flag.
I think it's almost impossible to fold atomic fences profitably under LLVM/C++11 semantics. As a result, this is now unused and just cluttering up the targ
Remove unused ShouldFoldAtomicFences flag.
I think it's almost impossible to fold atomic fences profitably under LLVM/C++11 semantics. As a result, this is now unused and just cluttering up the target interface.
llvm-svn: 179940
show more ...
|
#
eb108bad |
| 05-Apr-2013 |
Bill Wendling <isanbard@gmail.com> |
Use the target options specified on a function to reset the back-end.
During LTO, the target options on functions within the same Module may change. This would necessitate resetting some of the back
Use the target options specified on a function to reset the back-end.
During LTO, the target options on functions within the same Module may change. This would necessitate resetting some of the back-end. Do this for X86, because it's a Friday afternoon.
llvm-svn: 178917
show more ...
|
#
70671b99 |
| 29-Mar-2013 |
Benjamin Kramer <benny.kra@googlemail.com> |
Remove the old CodePlacementOpt pass.
It was superseded by MachineBlockPlacement and disabled by default since LLVM 3.1.
llvm-svn: 178349
|
#
3d055580 |
| 01-Mar-2013 |
Akira Hatanaka <ahatanaka@mips.com> |
Set properties for f128 type.
llvm-svn: 176378
|
#
6af16fc3 |
| 01-Mar-2013 |
Michael Liao <michael.liao@intel.com> |
Fix PR10475
- ISD::SHL/SRL/SRA must have either both scalar or both vector operands but TLI.getShiftAmountTy() so far only return scalar type. As a result, backend logic assuming that breaks. -
Fix PR10475
- ISD::SHL/SRL/SRA must have either both scalar or both vector operands but TLI.getShiftAmountTy() so far only return scalar type. As a result, backend logic assuming that breaks. - Rename the original TLI.getShiftAmountTy() to TLI.getScalarShiftAmountTy() and re-define TLI.getShiftAmountTy() to return target-specificed scalar type or the same vector type as the 1st operand. - Fix most TICG logic assuming TLI.getShiftAmountTy() a simple scalar type.
llvm-svn: 176364
show more ...
|
#
341ad3e7 |
| 20-Feb-2013 |
Jim Grosbach <grosbach@apple.com> |
Update TargetLowering ivars for name policy.
http://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly
ivars should be camel-case and start with an upper-cas
Update TargetLowering ivars for name policy.
http://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly
ivars should be camel-case and start with an upper-case letter. A few in TargetLowering were starting with a lower-case letter.
No functional change intended.
llvm-svn: 175667
show more ...
|
#
f29ddfe9 |
| 15-Feb-2013 |
Paul Redmond <paul.redmond@intel.com> |
enable SDISel sincos optimization for GNU environments
- add sincos to runtime library if target triple environment is GNU - added canCombineSinCosLibcall() which checks that sincos is in the RTL an
enable SDISel sincos optimization for GNU environments
- add sincos to runtime library if target triple environment is GNU - added canCombineSinCosLibcall() which checks that sincos is in the RTL and if the environment is GNU then unsafe fpmath is enabled (required to preserve errno) - extended sincos-opt lit test
Reviewed by: Hal Finkel
llvm-svn: 175283
show more ...
|
#
0e88c7d8 |
| 29-Jan-2013 |
Evan Cheng <evan.cheng@apple.com> |
Teach SDISel to combine fsin / fcos into a fsincos node if the following conditions are met: 1. They share the same operand and are in the same BB. 2. Both outputs are used. 3. The target has a nativ
Teach SDISel to combine fsin / fcos into a fsincos node if the following conditions are met: 1. They share the same operand and are in the same BB. 2. Both outputs are used. 3. The target has a native instruction that maps to ISD::FSINCOS node or the target provides a sincos library call.
Implemented the generic optimization in sdisel and enabled it for Mac OSX. Also added an additional optimization for x86_64 Mac OSX by using an alternative entry point __sincos_stret which returns the two results in xmm0 / xmm1.
rdar://13087969 PR13204
llvm-svn: 173755
show more ...
|
#
56b31bd9 |
| 11-Jan-2013 |
Benjamin Kramer <benny.kra@googlemail.com> |
Split TargetLowering into a CodeGen and a SelectionDAG part.
This fixes some of the cycles between libCodeGen and libSelectionDAG. It's still a complete mess but as long as the edges consist of virt
Split TargetLowering into a CodeGen and a SelectionDAG part.
This fixes some of the cycles between libCodeGen and libSelectionDAG. It's still a complete mess but as long as the edges consist of virtual call it doesn't cause breakage. BasicTTI did static calls and thus broke some build configurations.
llvm-svn: 172246
show more ...
|