summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
Commit message (Collapse)AuthorAgeFilesLines
* X86: remove atomic instructions *after* we've iterated through them.Tim Northover2014-07-011-3/+6
| | | | | | | | | Otherwise they get freed and the implicit "isa<XYZ>" tests following turn out badly (at least under sanitizers). Also corrects the ordering of unordered atomic stores. llvm-svn: 212136
* [DAG] Pass the argument list to the CallLoweringInfo via move semantics. NFCI.Juergen Ributzka2014-07-0111-16/+19
| | | | | | | | 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
* X86: delegate expanding atomic libcalls to generic code.Tim Northover2014-07-011-0/+14
| | | | | | | | | | | | | | | On targets without cmpxchg16b or cmpxchg8b, the borderline atomic operations were slipping through the gaps. X86AtomicExpand.cpp was delegating to ISelLowering. Generic ISelLowering was delegating to X86ISelLowering and X86ISelLowering was asserting. The correct behaviour is to expand to a libcall, preferably in generic ISelLowering. This can be achieved by X86ISelLowering deciding it doesn't want the faff after all. llvm-svn: 212134
* Move the subtarget dependent features from SystemZTargetMachineEric Christopher2014-07-016-38/+55
| | | | | | down to the subtarget. Add an initialization routine to assist. llvm-svn: 212124
* Remove the use and initialization of the target machine and subtargetEric Christopher2014-07-013-29/+19
| | | | | | from SystemZFrameLowering. llvm-svn: 212123
* AArch64: fix comment typoTim Northover2014-07-011-1/+1
| | | | llvm-svn: 212120
* X86: expand atomics in IR instead of as MachineInstrs.Tim Northover2014-07-019-976/+294
| | | | | | | | | | | | The logic for expanding atomics that aren't natively supported in terms of cmpxchg loops is much simpler to express at the IR level. It also allows the normal optimisations and CodeGen improvements to help out with atomics, instead of using a limited set of possible instructions.. rdar://problem/13496295 llvm-svn: 212119
* [X86] AVX512: Allow writemasks with vpcmpAdam Nemet2014-07-011-0/+10
| | | | | | | | | For now I only updated the _alt variants. The main variants are used by codegen and that will need a bit more work to trigger. <rdar://problem/17492620> llvm-svn: 212114
* [X86] AVX512: Factor generating the AsmString into avx512_icmp_ccAdam Nemet2014-07-011-25/+24
| | | | | | | | | Adding a writemask variant would require a third asm string to be passed to the template. Generate the AsmString in the template instead. No change in X86.td.expanded. llvm-svn: 212113
* Fix .seh_stackalloc 0Reid Kleckner2014-07-011-4/+7
| | | | | | | | | | | | | seh_stackalloc 0 is not representable in Win64 SEH info, so emitting it is a bug. Reviewers: rnk Differential Revision: http://reviews.llvm.org/D4334 Patch by Vadim Chugunov! llvm-svn: 212081
* AArch64: Follow-up to r212073Duncan P. N. Exon Smith2014-07-011-4/+4
| | | | | | | | In r212073 I missed a call of `use_begin()` that assumed the wrong semantics. It's not clear to me at all what this code does without the fix, so I'm not sure how to write a testcase. llvm-svn: 212075
* AArch64: Actually do address type promotionDuncan P. N. Exon Smith2014-06-301-3/+3
| | | | | | | | AArch64AddressTypePromotion was doing nothing because it was using the old semantics of `Use` and `uses()`, when it really wanted to get at the `users()`. llvm-svn: 212073
* Fix 'platform-specific' hyphenationsAlp Toker2014-06-302-3/+3
| | | | llvm-svn: 212056
* R600: Move mul combine to separate functionMatt Arsenault2014-06-302-28/+35
| | | | llvm-svn: 212052
* R600: Remove unused declarations leftover from AMDILMatt Arsenault2014-06-301-8/+0
| | | | llvm-svn: 212051
* [X86] Add support for builtin to read performance monitoring counters.Andrea Di Biagio2014-06-304-2/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds support for a new builtin instruction called __builtin_ia32_rdpmc. Builtin '__builtin_ia32_rdpmc' is defined as a 'GCC builtin'; on X86, it can be used to read performance monitoring counters. It takes as input the index of the performance counter to read, and returns the value of the specified performance counter as a 64-bit number. Calls to this new builtin will map to instruction RDPMC. The index in input to the builtin call is moved to register %ECX. The result of the builtin call is the value of the specified performance counter (RDPMC would return that quantity in registers RDX:RAX). This patch: - Adds builtin int_x86_rdpmc as a GCCBuiltin; - Adds a new x86 DAG node called 'RDPMC_DAG'; - Teaches how to lower this new builtin; - Adds an ISel pattern to select instruction RDPMC; - Fixes the definition of instruction RDPMC adding %RAX and %RDX as implicit definitions, and adding %ECX as implicit use; - Adds a LLVM test to verify that the new builtin is correctly selected. llvm-svn: 212049
* [AArch64] Unsized types don't specify an alignment.Chad Rosier2014-06-301-2/+3
| | | | | | PR20109 llvm-svn: 212045
* [AArch64] Convert mul x, -(pow2 +/- 1) to shift + add/sub.Chad Rosier2014-06-301-17/+39
| | | | | | | The combine for mul x, pow2 +/- 1 is unchanged. Test cases for both combines as well as mul x, pow2 have been added as well. llvm-svn: 212044
* ARM: take care not to set the ThumbFunc bit on TLS data symbolsScott Douglass2014-06-301-1/+2
| | | | | | | | This fixes LNT SingleSource/UnitTests/Threads with -mthumb. Differential Revision: http://reviews.llvm.org/D4324 llvm-svn: 212029
* X86: fix commentSaleem Abdulrasool2014-06-301-1/+1
| | | | | | Fix a comment typo `DbgLocLImport` instead of `DLLImport`. llvm-svn: 212012
* ARM: use symbolic name for constantSaleem Abdulrasool2014-06-301-1/+1
| | | | | | | This just changes the constant value to the symbolic name corresponding to it. NFC. llvm-svn: 212011
* CodeGen: rename Win64 ExceptionHandling to WinEHSaleem Abdulrasool2014-06-292-10/+10
| | | | | | | | | | This exception format is not specific to Windows x64. A similar approach is taken on nearly all architectures. Generalise the name to reflect reality. This will eventually be used for Windows on ARM data emission as well. Switch the enum and namespace into an enum class. llvm-svn: 212000
* MC: rename EmitWin64EH routinesSaleem Abdulrasool2014-06-292-15/+13
| | | | | | | | | | | | | | | Rename the routines to reflect the reality that they are more related to call frame information than to Win64 EH. Although EH is implemented in an intertwined manner by augmenting with an exception handler and an associated parameter, the majority of these routines emit information required to unwind the frames. This also helps identify that these routines are generic for most windows platforms (they apply equally to nearly all architectures except x86) although the encoding of the information is architecture dependent. Unwinding data is emitted via EmitWinCFI* and exception handling information via EmitWinEH*. llvm-svn: 211994
* Add ops() method to SDNode that returns an ArrayRef<SDUse>. Use it to ↵Craig Topper2014-06-292-11/+8
| | | | | | simplify some code. llvm-svn: 211993
* [x86] Fix a bug in the v8i16 shuffling exposed by the new splat-likeChandler Carruth2014-06-281-1/+1
| | | | | | | | | | | lowering for v16i8. ASan and some bots caught this bug with existing test cases. Fixing it even fixed a miscompile with one of the test cases. I'm still a bit suspicious of this test case as I've not taken a proper amount of time to think about it, but the fix here is strict goodness. llvm-svn: 211976
* [x86] Add handling for splat-like widenings of v16i8 shuffles.Chandler Carruth2014-06-281-0/+80
| | | | | | | | | | | | | | | | These show up really frequently, not the least with actual splats. =] We lowered these quite badly before. The new code path tries to widen i8 shuffles to i16 shuffles in a splat-like way. There are still some inefficiencies in our i16 splat logic though, so we aren't really done here. Also, for certain patterns (bit of a gather-and-splat) we still generate pretty silly code, and I've left a fixme for addressing it. However, I'm not actually worried about this code pattern as much. The old shuffle lowering generates a 29 instruction monstrosity for it that should execute much more slowly. llvm-svn: 211974
* [x86] Fix another bug hit when bootstrapping with the new shuffleChandler Carruth2014-06-271-1/+1
| | | | | | | | | | | | | lowering. For maximum irony, I had already discovered this bug, diagnosed it, and left FIXMEs about it in the test cases. =[ I just failed to go back over those until after i had reduced a bootstrap miscompile down to a single TU, stared at the assembly for an hour, and figured out the bug. Again. Oh well. llvm-svn: 211955
* [NVPTX] Use GreatestCommonDivisor64 from MathExtras instead of using our ↵Justin Holewinski2014-06-271-14/+4
| | | | | | own. Thanks Hal! llvm-svn: 211952
* [NVPTX] Add reflect intrinsic (better than matching by function name)Justin Holewinski2014-06-271-22/+47
| | | | | | Also clean up some of the logic in NVVMReflect.cpp while we're messing around in there. llvm-svn: 211948
* [NVPTX] Handle all possible vector types in getSetCCResultType, not just the ↵Justin Holewinski2014-06-271-2/+2
| | | | | | ones representable as MVTs llvm-svn: 211947
* [NVPTX] Add 'b' asm constraintJustin Holewinski2014-06-271-0/+3
| | | | llvm-svn: 211946
* [NVPTX] Simplify some argument lowering logicJustin Holewinski2014-06-271-13/+8
| | | | llvm-svn: 211945
* [NVPTX] Do not process samplers in GenericToNVVMJustin Holewinski2014-06-271-1/+1
| | | | llvm-svn: 211944
* [NVPTX] Error out if initializer is given for variable in an address space ↵Justin Holewinski2014-06-271-7/+18
| | | | | | that does not support initialization llvm-svn: 211943
* [NVPTX] Add support for .managed variables for UVMJustin Holewinski2014-06-271-0/+5
| | | | llvm-svn: 211942
* [NVPTX] Emit .weak linkage for link_once, weak, available_externally, and ↵Justin Holewinski2014-06-271-0/+4
| | | | | | common linkage llvm-svn: 211941
* [NVPTX] Variables that start with llvm. or nvvm. are reserved and should not ↵Justin Holewinski2014-06-271-0/+5
| | | | | | be emitted llvm-svn: 211940
* [NVPTX] Fix handling of ldg/ldu intrinsics.Justin Holewinski2014-06-274-100/+375
| | | | | | | | | | The address space of the pointer must be global (1) for these intrinsics. There must also be alignment metadata attached to the intrinsic calls, e.g. %val = tail call i32 @llvm.nvvm.ldu.i.global.i32.p1i32(i32 addrspace(1)* %ptr), !align !0 !0 = metadata !{i32 4} llvm-svn: 211939
* [NVPTX] Clean up argument lowering code and properly handle alignment for ↵Justin Holewinski2014-06-271-90/+76
| | | | | | structs and vectors llvm-svn: 211938
* [NVPTX] Add missing boolean vector contents flagJustin Holewinski2014-06-271-0/+1
| | | | llvm-svn: 211937
* [NVPTX] Add support for [SHL,SRA,SRL]_PARTSJustin Holewinski2014-06-273-0/+170
| | | | llvm-svn: 211936
* [NVPTX] Implement fma and imad contraction as target DAGCombiner patternsJustin Holewinski2014-06-274-126/+549
| | | | | | This also introduces DAGCombiner patterns for mul.wide to multiply two smaller integers and produce a larger integer llvm-svn: 211935
* [NVPTX] Add support for efficient rotate instructions on SM 3.2+Justin Holewinski2014-06-272-4/+170
| | | | llvm-svn: 211934
* [NVPTX] Add missing isel patterns for 64-bit atomicsJustin Holewinski2014-06-271-0/+98
| | | | llvm-svn: 211933
* [NVPTX] Add isel patterns for bit-field extract (bfe)Justin Holewinski2014-06-273-0/+238
| | | | llvm-svn: 211932
* [NVPTX] Add support for isspacep instructionJustin Holewinski2014-06-272-0/+40
| | | | llvm-svn: 211931
* [NVPTX] Add support for envreg readsJustin Holewinski2014-06-272-1/+45
| | | | llvm-svn: 211930
* [NVPTX] Add target options for PTX 3.2/4.0 and SM 5.0 (Maxwell)Justin Holewinski2014-06-272-7/+11
| | | | | | Default PTX version is set to PTX 3.2 llvm-svn: 211929
* [NVPTX] Update sub-target feature detectionJustin Holewinski2014-06-271-3/+5
| | | | llvm-svn: 211928
* [NVPTX] Directly control the Machine SSA passes that are invoked for NVPTX.Justin Holewinski2014-06-271-0/+41
| | | | | | | NVPTX is a bit special in the optimizations it requires, so this gives us better control over the backend optimization pipeline. llvm-svn: 211927
OpenPOWER on IntegriCloud