summaryrefslogtreecommitdiffstats
path: root/llvm/docs
Commit message (Collapse)AuthorAgeFilesLines
* Add scoped-noalias metadataHal Finkel2014-07-241-0/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds scoped noalias metadata. The primary motivations for this feature are: 1. To preserve noalias function attribute information when inlining 2. To provide the ability to model block-scope C99 restrict pointers Neither of these two abilities are added here, only the necessary infrastructure. In fact, there should be no change to existing functionality, only the addition of new features. The logic that converts noalias function parameters into this metadata during inlining will come in a follow-up commit. What is added here is the ability to generally specify noalias memory-access sets. Regarding the metadata, alias-analysis scopes are defined similar to TBAA nodes: !scope0 = metadata !{ metadata !"scope of foo()" } !scope1 = metadata !{ metadata !"scope 1", metadata !scope0 } !scope2 = metadata !{ metadata !"scope 2", metadata !scope0 } !scope3 = metadata !{ metadata !"scope 2.1", metadata !scope2 } !scope4 = metadata !{ metadata !"scope 2.2", metadata !scope2 } Loads and stores can be tagged with an alias-analysis scope, and also, with a noalias tag for a specific scope: ... = load %ptr1, !alias.scope !{ !scope1 } ... = load %ptr2, !alias.scope !{ !scope1, !scope2 }, !noalias !{ !scope1 } When evaluating an aliasing query, if one of the instructions is associated with an alias.scope id that is identical to the noalias scope associated with the other instruction, or is a descendant (in the scope hierarchy) of the noalias scope associated with the other instruction, then the two memory accesses are assumed not to alias. Note that is the first element of the scope metadata is a string, then it can be combined accross functions and translation units. The string can be replaced by a self-reference to create globally unqiue scope identifiers. [Note: This overview is slightly stylized, since the metadata nodes really need to just be numbers (!0 instead of !scope0), and the scope lists are also global unnamed metadata.] Existing noalias metadata in a callee is "cloned" for use by the inlined code. This is necessary because the aliasing scopes are unique to each call site (because of possible control dependencies on the aliasing properties). For example, consider a function: foo(noalias a, noalias b) { *a = *b; } that gets inlined into bar() { ... if (...) foo(a1, b1); ... if (...) foo(a2, b2); } -- now just because we know that a1 does not alias with b1 at the first call site, and a2 does not alias with b2 at the second call site, we cannot let inlining these functons have the metadata imply that a1 does not alias with b2. llvm-svn: 213864
* Document what backwards compatibility we provide for bitcode.Rafael Espindola2014-07-231-0/+23
| | | | llvm-svn: 213813
* In unroll pragma syntax and loop hint metadata, change "enable" forms to a ↵Mark Heffernan2014-07-231-20/+20
| | | | | | new form using the string "full". llvm-svn: 213772
* Added release notes for MIPS.Daniel Sanders2014-07-231-1/+69
| | | | llvm-svn: 213749
* Revert "Treat warnings in Sphinx as errors. The reasons for doing this are..."Dan Liew2014-07-221-1/+1
| | | | | | | | This reverts commit r213661. Reverting at the request of Sean Silva. llvm-svn: 213675
* Make use of the align parameter attribute for all pointer argumentsHal Finkel2014-07-221-0/+7
| | | | | | | | | | | | | | | | | | | | We previously supported the align attribute on all (pointer) parameters, but we only used it for byval parameters. However, it is completely consistent at the IR level to treat 'align n' on all pointer parameters as an alignment assumption on the pointer, and now we wll. Specifically, this causes computeKnownBits to use the align attribute on all pointer parameters, not just byval parameters. I've also added an explicit parameter attribute test for this to test/Bitcode/attributes.ll. And I've updated the LangRef to document the align parameter attribute (as it turns out, it was not documented at all previously, although the byval documentation mentioned that it could be used). There are (at least) two benefits to doing this: - It allows enhancing alignment based on the pointer alignment after inlining callees. - It allows simplification of pointer arithmetic. llvm-svn: 213670
* Added LLVM_ENABLE_RTTI and LLVM_ENABLE_EH options that allow RTTI and EHDan Liew2014-07-221-0/+8
| | | | | | | | to globally be controlled. Individual targets (e.g. ExceptionDemo) can still override this by using LLVM_REQUIRE_RTTI and LLVM_REQUIRE_EH if they need to be compiled with RTTI or exception handling respectively. llvm-svn: 213663
* Treat warnings in Sphinx as errors. The reasons for doing this are...Dan Liew2014-07-221-1/+1
| | | | | | | | | | - When CMake builds the documentation with sphinx-build it treats warnings as errors. We should be consistent with what we do in CMake. - Having warnings treated as errors will hopefully encourage developers to write documentation correctly. llvm-svn: 213661
* Fix Sphinx warning.Dan Liew2014-07-221-1/+1
| | | | llvm-svn: 213660
* Rename metadata llvm.loop.vectorize.unroll to llvm.loop.vectorize.interleave.Mark Heffernan2014-07-212-20/+34
| | | | llvm-svn: 213588
* Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) ↵Duncan P. N. Exon Smith2014-07-211-2/+3
| | | | | | | | | iterator ranges." This reverts commit r213474 (and r213475), which causes a miscompile on a stage2 LTO build. I'll reply on the list in a moment. llvm-svn: 213562
* Fix Sphinx warnings.Dan Liew2014-07-212-5/+2
| | | | llvm-svn: 213559
* docs: Update relaease documents to include the patch number in the RELEASE tagsTom Stellard2014-07-211-17/+17
| | | | | | | This will make it easier to update the release scripts to support bug-fix releases. llvm-svn: 213544
* [C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ↵Manuel Jacob2014-07-201-3/+2
| | | | | | | | | | | | | | | | | | ranges. Summary: This patch introduces two new iterator ranges and updates existing code to use it. No functional change intended. Test Plan: All tests (make check-all) still pass. Reviewers: dblaikie Reviewed By: dblaikie Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D4481 llvm-svn: 213474
* Add loop unrolling metadata descriptions to docs/LangRef.rst.Mark Heffernan2014-07-181-54/+97
| | | | llvm-svn: 213397
* Add a dereferenceable attributeHal Finkel2014-07-181-0/+11
| | | | | | | | | 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
* Remove rules against std::function from the programmer's manualReid Kleckner2014-07-171-12/+8
| | | | | | Clarify that llvm::function_ref is like StringRef for callables. llvm-svn: 213326
* Drop the udis86 wrapper from llvm::sysAlp Toker2014-07-171-7/+0
| | | | | | | | This optional dependency on the udis86 library was added some time back to aid JIT development, but doesn't make much sense to link into LLVM binaries these days. llvm-svn: 213300
* [TableGen] Allow shift operators to take bits<n>Adam Nemet2014-07-171-0/+6
| | | | | | | | | | | | | | | Convert the operand to int if possible, i.e. if the value is properly initialized. (I suppose there is further room for improvement here to also peform the shift if the uninitialized bits are shifted out.) With this little change we can now compute the scaling factor for compressed displacement with pure tablegen code in the X86 backend. This is useful because both the X86-disassembler-specific part of tablegen and the assembler need this and TD is the natural sharing place. The patch also adds the missing documentation for the shift and add operator. llvm-svn: 213277
* CodeGen: extend f16 conversions to permit types > float.Tim Northover2014-07-171-10/+10
| | | | | | | | | | | | | | | | | | | This makes the two intrinsics @llvm.convert.from.f16 and @llvm.convert.to.f16 accept types other than simple "float". This is only strictly needed for the truncate operation, since otherwise double rounding occurs and there's no way to represent the strict IEEE conversion. However, for symmetry we allow larger types in the extend too. During legalization, we can expand an "fp16_to_double" operation into two extends for convenience, but abort when the truncate isn't legal. A new libcall is probably needed here. Even after this commit, various target tweaks are needed to actually use the extended intrinsics. I've put these into separate commits for clarity, so there are no actual tests of f64 conversion here. llvm-svn: 213248
* Fix a typo in the inalloca descriptionHal Finkel2014-07-161-1/+1
| | | | llvm-svn: 213200
* ADT: Add MapVector::remove_ifDuncan P. N. Exon Smith2014-07-151-2/+4
| | | | | | | Add a `MapVector::remove_if()` that erases items in bulk in linear time, as opposed to quadratic time for repeated calls to `MapVector::erase()`. llvm-svn: 213090
* ADT: Fix MapVector::erase()Duncan P. N. Exon Smith2014-07-151-1/+1
| | | | | | | | | | | | Actually update the changed indexes in the map portion of `MapVector` when erasing from the middle. Add a unit test that checks for this. Note that `MapVector::erase()` is a linear time operation (it was and still is). I'll commit a new method in a moment called `MapVector::remove_if()` that deletes multiple entries in linear time, which should be slightly less painful. llvm-svn: 213084
* Document the maximum LLVM IR alignment, which is 1 << 29 or 0.5 GiBReid Kleckner2014-07-151-6/+8
| | | | | | | Add verifier checks. We already check these in the assembly parser, but a frontend producing IR in memory wouldn't hit those checks. llvm-svn: 213027
* fixed linkSanjay Patel2014-07-141-1/+1
| | | | llvm-svn: 212977
* Add FileCheck -implicit-check-not option to allow stricter tests without ↵Alexander Kornienko2014-07-111-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | adding too many CHECK-NOTs manually. Summary: Add FileCheck -implicit-check-not option which allows specifying a pattern that should only occur in the input when explicitly matched by a positive check. This feature allows checking tool diagnostics in a way clang -verify does it for compiler diagnostics. The option has been tested on a number of clang-tidy checks, I'll post a link to the clang-tidy patch to this thread. Once there's an agreement on the general direction, I can add tests and documentation. Reviewers: djasper, bkramer Reviewed By: bkramer Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D4462 llvm-svn: 212810
* Fix types in documentation.Matt Arsenault2014-07-101-4/+4
| | | | | | The examples were using f32, but the IR type is called float llvm-svn: 212675
* Update ReleaseNotes to mention Atomic NAND semantic changes.Cameron McInally2014-07-091-0/+4
| | | | llvm-svn: 212635
* fixed typosSanjay Patel2014-07-041-2/+2
| | | | llvm-svn: 212355
* Phabricator doc: Explicit the fact that the patch needs to be there before ↵Sylvestre Ledru2014-07-041-0/+1
| | | | | | the commit llvm-svn: 212328
* Expand the note about llvm-ar now that inline asm works.Rafael Espindola2014-07-031-1/+2
| | | | llvm-svn: 212292
* Also document the 'arc commit' commands in the 'Committing a change' section ↵Sylvestre Ledru2014-07-021-0/+8
| | | | | | of the Phabricator doc llvm-svn: 212184
* Remove the recommendation against using std::functionReid Kleckner2014-07-021-4/+1
| | | | | | | | Clang-cl supports MSVC-style RTTI now, and we can even compile typeid(...) with /GR-. Just don't instantiate std::function with a polymorphic type, or bad things will happen. llvm-svn: 212148
* [docs] Fix a mangled sentence.Sean Silva2014-07-011-1/+1
| | | | | | Fixes PR20169 llvm-svn: 212116
* [docs] Remove stray HTML tag.Sean Silva2014-07-011-1/+1
| | | | | | Fixes PR20167 llvm-svn: 212115
* Fix 'platform-specific' hyphenationsAlp Toker2014-06-304-4/+4
| | | | llvm-svn: 212056
* Debug info: split out complex DIVariable address expressions into aAdrian Prantl2014-06-301-0/+1
| | | | | | | | | | | separate MDNode so they can be uniqued via folding set magic. To conserve space, DIVariable nodes are still variable-length, with the last two fields being optional. No functional change. http://reviews.llvm.org/D3526 llvm-svn: 212050
* undo test commit (whitespace only)Scott Douglass2014-06-301-1/+0
| | | | llvm-svn: 212021
* test commit (whitespace only)Scott Douglass2014-06-301-0/+1
| | | | llvm-svn: 212020
* Vectorization documentation for loop hint pragmas and Rpass diagnostics.Tyler Nowicki2014-06-271-0/+83
| | | | llvm-svn: 211924
* IR: Add COMDATs to the IRDavid Majnemer2014-06-271-4/+91
| | | | | | | | | | | | | | | | This new IR facility allows us to represent the object-file semantic of a COMDAT group. COMDATs allow us to tie together sections and make the inclusion of one dependent on another. This is required to implement features like MS ABI VFTables and optimizing away certain kinds of initialization in C++. This functionality is only representable in COFF and ELF, Mach-O has no similar mechanism. Differential Revision: http://reviews.llvm.org/D4178 llvm-svn: 211920
* Re-apply r211287: Remove support for LLVM runtime multi-threading.Chandler Carruth2014-06-271-41/+4
| | | | | | | I'll fix the problems in libclang and other projects in ways that don't require <mutex> until we sort out the cygwin situation. llvm-svn: 211900
* fixed typoSanjay Patel2014-06-261-1/+1
| | | | llvm-svn: 211808
* Changed Phab 'CC' to 'subscriber'; fixed typoSanjay Patel2014-06-261-3/+3
| | | | llvm-svn: 211793
* Mention that Phabricator users should subscribe to *-commitsReid Kleckner2014-06-251-4/+16
| | | | | | | This probably explains why a lot of messages get lost for first time Phabricator users. llvm-svn: 211731
* Rename loop unrolling and loop vectorizer metadata to have a common prefix.Eli Bendersky2014-06-252-24/+27
| | | | | | | | | | | | | | | | | | | [LLVM part] These patches rename the loop unrolling and loop vectorizer metadata such that they have a common 'llvm.loop.' prefix. Metadata name changes: llvm.vectorizer.* => llvm.loop.vectorizer.* llvm.loopunroll.* => llvm.loop.unroll.* This was a suggestion from an earlier review (http://reviews.llvm.org/D4090) which added the loop unrolling metadata. Patch by Mark Heffernan. llvm-svn: 211710
* Revert r211287, "Remove support for LLVM runtime multi-threading."NAKAMURA Takumi2014-06-241-4/+41
| | | | | | libclang still requires it on cygming, lack of incomplete <mutex>. llvm-svn: 211592
* Emit the ARM build attributes ABI_PCS_wchar_t and ABI_enum_size.Oliver Stannard2014-06-201-0/+36
| | | | | | | Emit the ARM build attributes ABI_PCS_wchar_t and ABI_enum_size based on module flags metadata. llvm-svn: 211349
* Remove support for LLVM runtime multi-threading.Zachary Turner2014-06-191-41/+4
| | | | | | | | | | | | | After a number of previous small iterations, the functions llvm_start_multithreaded() and llvm_stop_multithreaded() have been reduced essentially to no-ops. This change removes them entirely. Reviewed by: rnk, dblaikie Differential Revision: http://reviews.llvm.org/D4216 llvm-svn: 211287
* [ValueTracking] Extend range metadata to call/invokeJingyue Wu2014-06-191-7/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: With this patch, range metadata can be added to call/invoke including IntrinsicInst. Previously, it could only be added to load. Rename computeKnownBitsLoad to computeKnownBitsFromRangeMetadata because range metadata is not only used by load. Update the language reference to reflect this change. Test Plan: Add several tests in range-2.ll to confirm the verifier is happy with having range metadata on call/invoke. Add two tests in AddOverFlow.ll to confirm annotating range metadata to call/invoke can benefit InstCombine. Reviewers: meheff, nlewycky, reames, hfinkel, eliben Reviewed By: eliben Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D4187 llvm-svn: 211281
OpenPOWER on IntegriCloud