aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Attributes.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-09-03Revert accidentally committed r217107Matt Arsenault1-21/+5
"Don't treat 0 as a special value for int attributes." llvm-svn: 217110
2014-09-03Don't treat 0 as a special value for int attributes.Matt Arsenault1-5/+21
Split the get() to not use a default value. This way attributes can be added that have 0 as a legitimate value. llvm-svn: 217107
2014-07-18Add a dereferenceable attributeHal Finkel1-4/+74
This attribute indicates that the parameter or return pointer is dereferenceable. Practically speaking, loads from such a pointer within the associated byte range are safe to speculatively execute. Such pointer parameters are common in source languages (C++ references, for example). llvm-svn: 213385
2014-07-18Rename AlignAttribute to IntAttributeHal Finkel1-16/+16
Currently the only kind of integer IR attributes that we have are alignment attributes, and so the attribute kind that takes an integer parameter is called AlignAttr, but that will change (we'll soon be adding a dereferenceable attribute that also takes an integer value). Accordingly, rename AlignAttribute to IntAttribute (class names, enums, etc.). No functionality change intended. llvm-svn: 213352
2014-07-02Fix typos.Eric Christopher1-1/+1
llvm-svn: 212228
2014-06-05Add a new attribute called 'jumptable' that creates jump-instruction tables ↵Tom Roeder1-0/+3
for functions marked with this attribute. It includes a pass that rewrites all indirect calls to jumptable functions to pass through these tables. This also adds backend support for generating the jump-instruction tables on ARM and X86. Note that since the jumptable attribute creates a second function pointer for a function, any function marked with jumptable must also be marked with unnamed_addr. llvm-svn: 210280
2014-05-20Add 'nonnull', a new parameter and return attribute which indicates that the ↵Nick Lewycky1-0/+4
pointer is not null. Instcombine will elide comparisons between these and null. Patch by Luqman Aden! llvm-svn: 209185
2014-05-03IR: Cleanup AttributeSet::get for AttrBuilderDavid Majnemer1-4/+5
We don't modify the AttrBuilder in AttributeSet::get, make the reference argument const. llvm-svn: 207924
2014-04-12Retire llvm::array_endof in favor of non-member std::end.Benjamin Kramer1-0/+1
While there make array_lengthof constexpr if we have support for it. llvm-svn: 206112
2014-04-09[C++11] More 'nullptr' conversion or in some cases just using a boolean ↵Craig Topper1-4/+4
check instead of comparing to nullptr. llvm-svn: 205831
2014-03-03Revert "[C++11] Replace LLVM atomics with std::atomic."Benjamin Kramer1-0/+1
Breaks the MSVC build. DataStream.cpp(44): error C2552: 'llvm::Statistic::Value' : non-aggregates cannot be initialized with initializer list llvm-svn: 202731
2014-03-03[C++11] Replace LLVM atomics with std::atomic.Benjamin Kramer1-1/+0
With C++11 we finally have a standardized way to specify atomic operations. Use them to replace the existing custom implemention. Sadly the translation is not entirely trivial as std::atomic allows more fine-grained control over the atomicity. I tried to preserve the old semantics as well as possible. Differential Revision: http://llvm-reviews.chandlerc.com/D2915 llvm-svn: 202730
2013-12-19Begin adding docs and IR-level support for the inalloca attributeReid Kleckner1-1/+5
The inalloca attribute is designed to support passing C++ objects by value in the Microsoft C++ ABI. It behaves the same as byval, except that it always implies that the argument is in memory and that the bytes are never copied. This attribute allows the caller to take the address of an outgoing argument's memory and execute arbitrary code to store into it. This patch adds basic IR support, docs, and verification. It does not attempt to implement any lowering or fix any possibly broken transforms. When this patch lands, a complete description of this feature should appear at http://llvm.org/docs/InAlloca.html . Differential Revision: http://llvm-reviews.chandlerc.com/D2173 llvm-svn: 197645
2013-11-19[weak vtables] Remove a bunch of weak vtablesJuergen Ributzka1-0/+4
This patch removes most of the trivial cases of weak vtables by pinning them to a single object file. The memory leaks in this version have been fixed. Thanks Alexey for pointing them out. Differential Revision: http://llvm-reviews.chandlerc.com/D2068 Reviewed by Andy llvm-svn: 195064
2013-11-18Revert r194865 and r194874.Alexey Samsonov1-0/+2
This change is incorrect. If you delete virtual destructor of both a base class and a subclass, then the following code: Base *foo = new Child(); delete foo; will not cause the destructor for members of Child class. As a result, I observe plently of memory leaks. Notable examples I investigated are: ObjectBuffer and ObjectBufferStream, AttributeImpl and StringSAttributeImpl. llvm-svn: 194997
2013-11-15[weak vtables] Remove a bunch of weak vtablesJuergen Ributzka1-2/+0
This patch removes most of the trivial cases of weak vtables by pinning them to a single object file. Differential Revision: http://llvm-reviews.chandlerc.com/D2068 Reviewed by Andy llvm-svn: 194865
2013-08-23Add function attribute 'optnone'.Andrea Di Biagio1-0/+3
This function attribute indicates that the function is not optimized by any optimization or code generator passes with the exception of interprocedural optimization passes. llvm-svn: 189101
2013-08-02Add a AttributeSetImpl::dump function.Peter Collingbourne1-0/+4
This is for the benefit of those of us with inferior debuggers which do not permit member function calls on value types. llvm-svn: 187685
2013-08-02Make one of the AttributeSet ctors maintain the invariant that thePeter Collingbourne1-2/+20
attribute list is ordered by index. Differential Revision: http://llvm-reviews.chandlerc.com/D1265 llvm-svn: 187682
2013-07-25Add a way to add a kind-value string pair to an attribute.Bill Wendling1-0/+7
llvm-svn: 187138
2013-07-25Replace the "NoFramePointerElimNonLeaf" target option with a function attribute.Bill Wendling1-0/+4
There's no need to specify a flag to omit frame pointer elimination on non-leaf nodes...(Honestly, I can't parse that option out.) Use the function attribute stuff instead. llvm-svn: 187093
2013-07-11Reduce the number of indirections in the attributes implementation.Benjamin Kramer1-64/+39
- Coallocate entires for AttributeSetImpls and Nodes after the class itself. - Remove mutable iterators from immutable classes. - Remove unused context field from AttributeImpl. - Derive Enum/Align/String attribute implementations from AttributeImpl instead of having a whole new inheritance tree for them. - Derive AlignAttributeImpl from EnumAttributeImpl. llvm-svn: 186075
2013-07-06Extend 'readonly' and 'readnone' to work on function arguments as well asNick Lewycky1-0/+2
functions. Make the function attributes pass add it to known library functions and when it can deduce it. llvm-svn: 185735
2013-06-27Added support for the Builtin attribute.Michael Gottesman1-0/+3
The Builtin attribute is an attribute that can be placed on function call site that signal that even though a function is declared as being a builtin, rdar://problem/13727199 llvm-svn: 185049
2013-05-24Add a new function attribute 'cold' to functions.Diego Novillo1-0/+3
Other than recognizing the attribute, the patch does little else. It changes the branch probability analyzer so that edges into blocks postdominated by a cold function are given low weight. Added analysis and code generation tests. Added documentation for the new attribute. llvm-svn: 182638
2013-05-01Now that the underlying issue is fixed, revert r180750 and r180722.Rafael Espindola1-9/+6
The cause of the windows failures was fixed by r180791. Revert to the state after Sabre's original revert. Original message: revert r179735, it has no testcases, and doesn't really make sense. llvm-svn: 180844
2013-04-30Change getSlotIndex to return unsigned.Rafael Espindola1-2/+2
The actual storage was already using unsigned, but the interface was using uint64_t. This is wasteful on 32 bits and looks to be the root causes of a miscompilation on Windows where a value was being sign extended to 64bits to compare with the result of getSlotIndex. Patch by Pasi Parviainen! llvm-svn: 180791
2013-04-29Revert the command line option patch. However, keep the part that makes this ↵Bill Wendling1-2/+1
pass on Windows. I.e., we don't emit the target dependent attributes in a comment before the function. llvm-svn: 180750
2013-04-29Revert "revert r179735, it has no testcases, and doesn't really make sense."Reid Kleckner1-6/+10
This un-reverts r179735 and reverts commit r180574. This fixes assertion failures for me locally and should fix the failures on Windows reported widely on llvm-dev. We should check if the bots caught this and if so why not. llvm-svn: 180722
2013-04-25revert r179735, it has no testcases, and doesn't really make sense.Chris Lattner1-10/+6
llvm-svn: 180574
2013-04-20Add CodeGen support for functions that always return arguments via a new ↵Stephen Lin1-0/+3
parameter attribute 'returned', which is taken advantage of in target-independent tail call opportunity detection and in ARM call lowering (when placed on an integral first parameter). llvm-svn: 179925
2013-04-19Attributes: Don't print trailing whitespace on the function attribute comment.Benjamin Kramer1-5/+4
llvm-svn: 179849
2013-04-18Make the TargetIndependent flag have the right boolean value.Bill Wendling1-1/+1
llvm-svn: 179798
2013-04-18Cleanup patch:Bill Wendling1-50/+50
Semantics of parameters named Index and Idx were inconsistent between "include/llvm/IR/Attributes.h", "lib/IR/AttributeImpl.h" and "lib/IR/Attributes.cpp": sometimes these were fixed 1-based indexes of IR parameters (or AttributeSet::ReturnIndex for IR return values or AttributeSet::FunctionIndex for IR functions), other times they were the internal slot for storage in the underlying AttributeSetImpl. I renamed usage of the former to "Index" and usage of the latter to "Slot" ("Slot" was already being used consistently for the latter in a subset of cases) Patch by Stephen Lin! llvm-svn: 179791
2013-04-18This patch addresses two cleanup issues:Bill Wendling1-27/+0
1. Verify::VerifyParameterAttrs in "lib/IR/Verifier.cpp" and AttrBuilder::removeFunctionOnlyAttrs in "lib/IR/Attributes.cpp" (only called by Verify::VerifyFunctionAttrs) separately maintained a list of function-only attribute types. I've consolidated the logic into a new function used for both cases in "lib/IR/Verifier.cpp", so this logic is in one place (other than the AsmParser front-end) 2. Various functions in "lib/IR/Verifier.cpp" passed AttributeSet around by reference needlessly, as it's just a handle to an immutable pimpl body. Patch by Stephen Lin! llvm-svn: 179790
2013-04-17Add an option `-enable-old-style-attr-syntax' to print out function ↵Bill Wendling1-5/+11
attributes in the "old" style. It's sometimes beneficial to emit a testcase with the old style attribute syntax. Allow someone to do this. <rdar://problem/13563209> llvm-svn: 179735
2013-03-13Add some additonal attribute helper functions. Test will be on followReed Kotler1-0/+7
up putback to clang for mips16. llvm-svn: 176968
2013-02-28Don't add an attribute that already exists and don't remove an attribute ↵Bill Wendling1-0/+2
that doesn't exist. llvm-svn: 176289
2013-02-26Unify clang/llvm attributes for asan/tsan/msan (LLVM part)Kostya Serebryany1-12/+12
These are two related changes (one in llvm, one in clang). LLVM: - rename address_safety => sanitize_address (the enum value is the same, so we preserve binary compatibility with old bitcode) - rename thread_safety => sanitize_thread - rename no_uninitialized_checks -> sanitize_memory CLANG: - add __attribute__((no_sanitize_address)) as a synonym for __attribute__((no_address_safety_analysis)) - add __attribute__((no_sanitize_thread)) - add __attribute__((no_sanitize_memory)) for S in address thread memory If -fsanitize=S is present and __attribute__((no_sanitize_S)) is not set llvm attribute sanitize_S llvm-svn: 176075
2013-02-22Remove warning about default covering no cases.Bill Wendling1-3/+2
llvm-svn: 175846
2013-02-22Add a bitmask for NoBuiltin. This should *not* be used.Bill Wendling1-1/+2
llvm-svn: 175843
2013-02-22Implement the NoBuiltin attribute.Bill Wendling1-1/+31
The 'nobuiltin' attribute is applied to call sites to indicate that LLVM should not treat the callee function as a built-in function. I.e., it shouldn't try to replace that function with different code. llvm-svn: 175835
2013-02-18Futureproof AttrBuild if we ever have more than 64 attr enum values.Benjamin Kramer1-14/+12
Currently we're at 34. Bitset should compile into virtually the same code as uint64_t here. llvm-svn: 175437
2013-02-16GCC doesn't like ++ on enums.Benjamin Kramer1-1/+1
llvm-svn: 175373
2013-02-16Turn the enum attributes DenseSet in AttrBuilder into a set of bits.Benjamin Kramer1-24/+23
Avoids malloc and is a lot denser. We lose iteration over target independent attributes, but that's a strange interface anyways and didn't have any users outside of AttrBuilder. llvm-svn: 175370
2013-02-15Simplify the 'operator<' for the attribute object.Bill Wendling1-15/+13
llvm-svn: 175252
2013-02-15Revert "Simplify the attributes '<' comparison function."Anna Zaks1-13/+15
This reverts commit 82c101153fe7b35bce48781fab038e1b8f31a7bd. llvm-svn: 175250
2013-02-15Simplify the attributes '<' comparison function.Bill Wendling1-15/+13
llvm-svn: 175235
2013-02-13Use array_pod_sort.Bill Wendling1-1/+1
llvm-svn: 175048
2013-02-13Add some accessor and query methods for retrieving Attribute objects and such.Bill Wendling1-0/+41
llvm-svn: 175046