llvm/lib/IR
Philip Reames 3dbdebce48 [IR] Extend cmpxchg to allow pointer type operands
Today, we do not allow cmpxchg operations with pointer arguments. We require the frontend to insert ptrtoint casts and do the cmpxchg in integers. While correct, this is problematic from a couple of perspectives:
1) It makes the IR harder to analyse (for instance, it make capture tracking overly conservative)
2) It pushes work onto the frontend authors for no real gain

This patch implements the simplest form of IR support. As we did with floating point loads and stores, we teach AtomicExpand to convert back to the old representation. This prevents us needing to change all backends in a single lock step change. Over time, we can migrate each backend to natively selecting the pointer type. In the meantime, we get the advantages of a cleaner IR representation without waiting for the backend changes.

Differential Revision: http://reviews.llvm.org/D17413




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@261281 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-19 00:06:41 +00:00
..
AsmWriter.cpp This patch adds MemorySSA to LLVM. 2016-02-02 22:46:49 +00:00
AttributeImpl.h Remove TrailingObjects::operator delete. It's still suffering from 2016-02-09 02:09:16 +00:00
Attributes.cpp AttributeSetImpl: Summarize existing function attributes in a bitset. 2016-01-29 22:25:19 +00:00
AttributesCompatFunc.td Provide a way to specify inliner's attribute compatibility and merging. 2015-12-22 23:57:37 +00:00
AutoUpgrade.cpp Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
BasicBlock.cpp IR: Remove implicit iterator conversions from lib/IR, NFC 2015-10-08 23:49:46 +00:00
CMakeLists.txt [cmake] Remove /Og- flag which was working around PR24785 2016-01-27 01:52:46 +00:00
Comdat.cpp IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
ConstantFold.cpp [ConstantFolding] Reduce APInt and APFloat copying. 2016-02-13 16:54:14 +00:00
ConstantFold.h [opaque pointer types] [NFC] GEP: replace get(Pointer)ElementType uses with get{Source,Result}ElementType. 2016-01-19 17:28:00 +00:00
ConstantRange.cpp Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 20:50:44 +00:00
Constants.cpp Simplify handleOperandChangeImpl() removing last argument (NFC) 2016-02-10 22:47:15 +00:00
ConstantsContext.h Revert "Add a new insert_as() method to DenseMap and use it for ConstantUniqueMap" 2016-02-11 22:00:36 +00:00
Core.cpp Add support for invoke/landingpad/resume in C API test 2016-02-18 20:38:32 +00:00
DataLayout.cpp Replace Type::getInt32Ty() and comparison by isIntegerTy(32). NFC. 2016-01-22 03:30:27 +00:00
DebugInfo.cpp One more batch of self-containing headers. 2016-01-27 19:29:56 +00:00
DebugInfoMetadata.cpp Macro debug info support in LLVM IR 2015-12-10 12:56:35 +00:00
DebugLoc.cpp Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 20:50:44 +00:00
DiagnosticInfo.cpp Refactor backend diagnostics for unsupported features 2016-02-02 13:52:43 +00:00
DiagnosticPrinter.cpp MIR Serialization: Connect the machine function analysis pass to the MIR parser. 2015-06-15 20:30:22 +00:00
DIBuilder.cpp Macro debug info support in LLVM IR 2015-12-10 12:56:35 +00:00
Dominators.cpp [IR] Reformulate LLVM's EH funclet IR 2015-12-12 05:38:55 +00:00
Function.cpp Remove uses of builtin comma operator. 2016-02-18 22:09:30 +00:00
FunctionInfo.cpp Restore "[ThinLTO] Use MD5 hash in function index." with fix 2016-02-10 21:55:02 +00:00
GCOV.cpp llvm-cov: Fix reading gcov data that does not have function names 2016-02-08 22:49:40 +00:00
Globals.cpp Simplify handleOperandChangeImpl() removing last argument (NFC) 2016-02-10 22:47:15 +00:00
GVMaterializer.cpp [Layering] Move GVMaterializer.h into the IR library where its 2014-03-06 03:50:29 +00:00
InlineAsm.cpp Fix SEGV in InlineAsm::ConstraintInfo::Parse. 2015-09-03 15:41:37 +00:00
Instruction.cpp fix typos; NFC 2016-01-06 00:18:29 +00:00
Instructions.cpp Fix pointers to go on the right hand side. NFC. 2016-02-03 21:34:39 +00:00
IntrinsicInst.cpp Handle more edge cases in intrinsic name binary search 2016-01-26 22:33:19 +00:00
IRBuilder.cpp Fix warning on build without asserts 2016-02-17 21:16:59 +00:00
IRPrintingPasses.cpp Recommit r256952 "Filtering IR printing for print-after-all/print-before-all" 2016-01-06 22:55:03 +00:00
LegacyPassManager.cpp Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 20:50:44 +00:00
LLVMBuild.txt
LLVMContext.cpp Add a "gc-transition" operand bundle 2016-01-20 19:50:25 +00:00
LLVMContextImpl.cpp [IR] Manage TheNoneToken with a std::unique_ptr 2015-11-16 20:55:57 +00:00
LLVMContextImpl.h Remove static global GCNames from Function.cpp and move it to the Context 2016-01-08 02:28:20 +00:00
Mangler.cpp Update to use new name alignTo(). 2016-01-14 21:06:47 +00:00
MDBuilder.cpp [MDBuilder] Simplify code using initializer lists. NFC. 2015-11-22 18:03:17 +00:00
Metadata.cpp Revert "Query the StringMap only once when creating MDString (NFC)" 2016-02-17 02:18:58 +00:00
MetadataImpl.h DI: Disallow uniquable DICompileUnits 2015-08-03 17:26:41 +00:00
Module.cpp Restore "[ThinLTO] Use MD5 hash in function index." with fix 2016-02-10 21:55:02 +00:00
module.modulemap [modules] Add module maps for LLVM. These are not quite ready for prime-time 2014-05-21 02:46:14 +00:00
Operator.cpp [opaque pointer types] [NFC] GEP: replace get(Pointer)ElementType uses with get{Source,Result}ElementType. 2016-01-19 17:28:00 +00:00
Pass.cpp Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 20:50:44 +00:00
PassManager.cpp [PM] Push the debug option for the new pass manager into the opt tool 2015-01-13 22:42:38 +00:00
PassRegistry.cpp Revert r231276 (including r231277): Add a lock() function in PassRegistry to speed up multi-thread synchronization. 2015-03-05 17:53:00 +00:00
Statepoint.cpp [Statepoints] Refactor GCRelocateOperands into an intrinsic wrapper. NFC. 2016-01-05 04:03:00 +00:00
SymbolTableListTraitsImpl.h IR: Remove implicit iterator conversions from lib/IR, NFC 2015-10-08 23:49:46 +00:00
Type.cpp [IR] Mark the Type subclass helper methods 'inline' and move their definitions to DerivedTypes.h so they can be inlined by the compiler. 2015-12-25 04:06:20 +00:00
TypeFinder.cpp Re-reapply "[IR] Move optional data in llvm::Function into a hungoff uselist" 2015-12-19 08:52:49 +00:00
Use.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
User.cpp [IR] Teach llvm::User to co-allocate a descriptor. 2015-09-24 01:00:49 +00:00
Value.cpp Simplify handleOperandChangeImpl() removing last argument (NFC) 2016-02-10 22:47:15 +00:00
ValueSymbolTable.cpp Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 20:50:44 +00:00
ValueTypes.cpp Add new vector types for 512-, 1024- and 2048-bit vectors 2015-11-24 13:07:35 +00:00
Verifier.cpp [IR] Extend cmpxchg to allow pointer type operands 2016-02-19 00:06:41 +00:00