llvm-6502/include/llvm/IR
Hal Finkel 6f5c609076 Simplify and improve scoped-noalias metadata semantics
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213948 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-25 15:50:02 +00:00
..
Argument.h Add a dereferenceable attribute 2014-07-18 15:51:28 +00:00
AssemblyAnnotationWriter.h Move the LLVM IR asm writer header files into the IR directory, as they 2014-01-07 12:34:26 +00:00
Attributes.h Add a dereferenceable attribute 2014-07-18 15:51:28 +00:00
AutoUpgrade.h Rename loop unrolling and loop vectorizer metadata to have a common prefix. 2014-06-25 15:41:00 +00:00
BasicBlock.h Fix some obvious Doxygen comment bugs. 2014-05-06 05:05:59 +00:00
CallingConv.h Revert "[ms-cxxabi] Add a new calling convention that swaps 'this' and 'sret'" 2014-05-09 22:56:42 +00:00
CallSite.h Add a dereferenceable attribute 2014-07-18 15:51:28 +00:00
CFG.h Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges." 2014-07-21 17:06:51 +00:00
CMakeLists.txt [CMake] intrinsics_gen: Use add_public_tablegen_target(). 2014-02-20 13:42:16 +00:00
Comdat.h IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
Constant.h InstCombine: Don't turn -(x/INT_MIN) -> x/INT_MIN 2014-07-02 06:07:09 +00:00
ConstantFolder.h Add CreatePointerBitCastOrAddrSpaceCast to IRBuilder and co. 2014-07-14 17:24:35 +00:00
ConstantRange.h [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
Constants.h [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
DataLayout.h Fix typo 2014-06-25 23:39:08 +00:00
DebugInfo.h Constify the Function pointers in the result of makeSubprogramMap 2014-07-02 18:30:05 +00:00
DebugLoc.h Add missing const specifier to a const method. 2014-06-05 14:32:15 +00:00
DerivedTypes.h [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
DiagnosticInfo.h Rename DiagnosticInfoOptimizationWarning to DiagnosticInfoOptimizationFailure 2014-07-18 19:36:04 +00:00
DiagnosticPrinter.h [C++11] Add 'override' keyword to IR library. 2014-03-05 06:35:38 +00:00
DIBuilder.h Add new debug kind LocTrackingOnly. 2014-06-24 17:02:03 +00:00
Dominators.h Move operator[] to DomTreeNodeBase 2014-07-02 06:50:48 +00:00
Function.h Add a dereferenceable attribute 2014-07-18 15:51:28 +00:00
GetElementPtrTypeIterator.h [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
GlobalAlias.h IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
GlobalObject.h IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
GlobalValue.h IR: Add a helper to check for LinkOnceODRLinkage 2014-07-01 00:30:52 +00:00
GlobalVariable.h [pr19844] Add thread local mode to aliases. 2014-05-28 18:15:43 +00:00
GVMaterializer.h Make ObjectFile and BitcodeReader always own the MemoryBuffer. 2014-06-23 21:53:12 +00:00
InlineAsm.h Remove copy ctors that did the same thing as the default one. 2014-03-11 11:32:49 +00:00
InstIterator.h [Modules] Move InstIterator out of the Support library, where it had no 2014-03-04 10:30:26 +00:00
InstrTypes.h Add CreatePointerBitCastOrAddrSpaceCast to IRBuilder and co. 2014-07-14 17:24:35 +00:00
Instruction.def Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
Instruction.h AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
Instructions.h Add a dereferenceable attribute 2014-07-18 15:51:28 +00:00
InstVisitor.h [Layering] Move InstVisitor.h into the IR library as it is pretty 2014-03-06 03:23:41 +00:00
IntrinsicInst.h Add some convenience accessors for the underlying Use of an operand. 2014-02-25 03:34:17 +00:00
Intrinsics.h TableGen: introduce support for MSBuiltin 2014-07-04 18:42:25 +00:00
Intrinsics.td CodeGen: extend f16 conversions to permit types > float. 2014-07-17 10:51:23 +00:00
IntrinsicsAArch64.td Port memory barriers intrinsics to AArch64 2014-07-17 10:50:20 +00:00
IntrinsicsARM.td ARM: mark matching ARM intrinsics as MSBuiltin 2014-07-05 20:09:24 +00:00
IntrinsicsHexagon.td
IntrinsicsMips.td [mips][msa] Add DLSA instruction. 2014-02-10 12:05:17 +00:00
IntrinsicsNVVM.td [NVPTX] Add more surface/texture intrinsics, including CUDA unified texture fetch 2014-07-17 11:59:04 +00:00
IntrinsicsPowerPC.td Implement PPC counter loops as a late IR-level pass 2013-05-15 21:37:41 +00:00
IntrinsicsR600.td R600: Fix inconsistency in rsq instructions. 2014-06-24 22:13:39 +00:00
IntrinsicsX86.td AVX-512: Fixed intrinsic of VSQRTPS/PD instructions. 2014-07-22 11:07:31 +00:00
IntrinsicsXCore.td [XCore] Add intrinsic for CLRPT (clear port time) instruction. 2014-02-25 17:31:15 +00:00
IRBuilder.h Add scoped-noalias metadata 2014-07-24 14:25:39 +00:00
IRPrintingPasses.h [PM] Fix stale header blocker, found by Duncan Smith in code review! 2014-01-14 05:50:19 +00:00
LeakDetector.h [Modules] Move the LeakDetector header into the IR library where the 2014-03-04 12:46:06 +00:00
LegacyPassManager.h [C++11] Add 'override' keyword to IR library. 2014-03-05 06:35:38 +00:00
LegacyPassManagers.h Fix some misplaced spaces around 'override' 2014-05-24 20:19:40 +00:00
LegacyPassNameParser.h Do not register and de-register PassRegistrationListeners during 2014-06-12 00:16:36 +00:00
LLVMContext.h Add scoped-noalias metadata 2014-07-24 14:25:39 +00:00
Mangler.h Add back r201608, r201622, r201624 and r201625 2014-02-19 17:23:20 +00:00
MDBuilder.h Simplify and improve scoped-noalias metadata semantics 2014-07-25 15:50:02 +00:00
Metadata.h Add scoped-noalias metadata 2014-07-24 14:25:39 +00:00
Module.h IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
NoFolder.h [Modules] Move the NoFolder into the IR library as it creates 2014-03-04 12:05:47 +00:00
OperandTraits.h Fix include guards so they exactly match file names. 2013-01-10 00:45:19 +00:00
Operator.h [Modules] Move GetElementPtrTypeIterator into the IR library. As its 2014-03-04 10:40:04 +00:00
PassManager.h [C++] Use 'nullptr'. 2014-04-24 06:44:33 +00:00
PatternMatch.h [Modules] Move the LLVM IR pattern match header into the IR library, it 2014-03-04 11:08:18 +00:00
PredIteratorCache.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-15 04:59:12 +00:00
SymbolTableListTraits.h [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
Type.h [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
TypeBuilder.h #include <climits> instead of <limits.h> in C++ header file. 2013-06-13 23:49:09 +00:00
TypeFinder.h Move TypeFinder.h into the IR tree, it clearly belongs with the IR library. 2013-01-07 15:43:51 +00:00
Use.h Updated the link to the correct URL. 2014-04-29 13:21:05 +00:00
UseListOrder.h Try to fix a layering violation introduced by r213945 2014-07-25 15:41:49 +00:00
User.h Reorder Value and User fields to save 8 bytes of padding on 64-bit 2014-06-09 23:32:20 +00:00
Value.h IR: Fix comment from r213824 2014-07-24 02:56:59 +00:00
ValueHandle.h [C++] Use 'nullptr'. 2014-04-24 06:44:33 +00:00
ValueMap.h Revert "Replace Execution Engine's mutex with std::recursive_mutex." 2014-06-20 21:07:14 +00:00
ValueSymbolTable.h Fix include guards so they exactly match file names. 2013-01-10 00:45:19 +00:00
Verifier.h verify-di: Implement DebugInfoVerifier 2014-04-15 16:27:38 +00:00