summaryrefslogtreecommitdiffstats
path: root/llvm/docs
Commit message (Collapse)AuthorAgeFilesLines
...
* Update LLVM version: 3.5 => 3.6Hans Wennborg2014-07-281-2/+2
| | | | | | | | | | | | | We branched 3.5, it's now time to work on 3.6. This is Sylvestre's patch from [1] plus regenerated configure file by me, and minus the release notes reset, which Sean pointed out [2] should happen later. 1. http://reviews.llvm.org/D4660 2. http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20140721/111137.html llvm-svn: 214131
* Document the new LLVM CMake interface for building against LLVMDan Liew2014-07-281-45/+106
| | | | | | libraries. With many contributions from Brad King. llvm-svn: 214077
* Fixed sphinx warning.Dan Liew2014-07-281-1/+1
| | | | llvm-svn: 214076
* Add @llvm.assume, lowering, and some basic propertiesHal Finkel2014-07-251-0/+40
| | | | | | | | | | | | | | | | | This is the first commit in a series that add an @llvm.assume intrinsic which can be used to provide the optimizer with a condition it may assume to be true (when the control flow would hit the intrinsic call). Some basic properties are added here: - llvm.invariant(true) is dead. - llvm.invariant(false) is unreachable (this directly corresponds to the documented behavior of MSVC's __assume(0)), so is llvm.invariant(undef). The intrinsic is tagged as writing arbitrarily, in order to maintain control dependencies. BasicAA has been updated, however, to return NoModRef for any particular location-based query so that we don't unnecessarily block code motion. llvm-svn: 213973
* Simplify and improve scoped-noalias metadata semanticsHal Finkel2014-07-251-33/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the process of fixing the noalias parameter -> metadata conversion process that will take place during inlining (which will be committed soon, but not turned on by default), I have come to realize that the semantics provided by yesterday's commit are not really what we want. Here's why: void foo(noalias a, noalias b, noalias c, bool x) { *q = x ? a : b; *c = *q; } Generically, we know that *c does not alias with *a and with *b (so there is an 'and' in what we know we're not), and we know that *q might be derived from *a or from *b (so there is an 'or' in what we know that we are). So we do not want the semantics currently, where any noalias scope matching any alias.scope causes a NoAlias return. What we want to know is that the noalias scopes form a superset of the alias.scope list (meaning that all the things we know we're not is a superset of all of things the other instruction might be). Making that change, however, introduces a composibility problem. If we inline once, adding the noalias metadata, and then inline again adding more, and we append new scopes onto the noalias and alias.scope lists each time. But, this means that we could change what was a NoAlias result previously into a MayAlias result because we appended an additional scope onto one of the alias.scope lists. So, instead of giving scopes the ability to have parents (which I had borrowed from the TBAA implementation, but seems increasingly unlikely to be useful in practice), I've given them domains. The subset/superset condition now applies within each domain independently, and we only need it to hold in one domain. Each time we inline, we add the new scopes in a new scope domain, and everything now composes nicely. In addition, this simplifies the implementation. llvm-svn: 213948
* 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
OpenPOWER on IntegriCloud