1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/lib/IR
Michael Kruse a9ec994652 Introduce llvm.loop.parallel_accesses and llvm.access.group metadata.
The current llvm.mem.parallel_loop_access metadata has a problem in that
it uses LoopIDs. LoopID unfortunately is not loop identifier. It is
neither unique (there's even a regression test assigning the some LoopID
to multiple loops; can otherwise happen if passes such as LoopVersioning
make copies of entire loops) nor persistent (every time a property is
removed/added from a LoopID's MDNode, it will also receive a new LoopID;
this happens e.g. when calling Loop::setLoopAlreadyUnrolled()).
Since most loop transformation passes change the loop attributes (even
if it just to mark that a loop should not be processed again as
llvm.loop.isvectorized does, for the versioned and unversioned loop),
the parallel access information is lost for any subsequent pass.

This patch unlinks LoopIDs and parallel accesses.
llvm.mem.parallel_loop_access metadata on instruction is replaced by
llvm.access.group metadata. llvm.access.group points to a distinct
MDNode with no operands (avoiding the problem to ever need to add/remove
operands), called "access group". Alternatively, it can point to a list
of access groups. The LoopID then has an attribute
llvm.loop.parallel_accesses with all the access groups that are parallel
(no dependencies carries by this loop).

This intentionally avoid any kind of "ID". Loops that are clones/have
their attributes modifies retain the llvm.loop.parallel_accesses
attribute. Access instructions that a cloned point to the same access
group. It is not necessary for each access to have it's own "ID" MDNode,
but those memory access instructions with the same behavior can be
grouped together.

The behavior of llvm.mem.parallel_loop_access is not changed by this
patch, but should be considered deprecated.

Differential Revision: https://reviews.llvm.org/D52116

llvm-svn: 349725
2018-12-20 04:58:07 +00:00
..
AsmWriter.cpp [mir] Serialize DILocation inline when not possible to use a metadata reference 2018-12-13 14:25:27 +00:00
AttributeImpl.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Attributes.cpp [Inliner] Modify the merging of min-legal-vector-width attribute to better handle when the caller or callee don't have the attribute. 2018-11-29 07:27:38 +00:00
AttributesCompatFunc.td
AutoUpgrade.cpp [X86][SSE] Auto upgrade PADDUS/PSUBUS intrinsics to UADD_SAT/USUB_SAT generic intrinsics (llvm) 2018-12-19 14:43:36 +00:00
BasicBlock.cpp [IR] Add hasNPredecessors, hasNPredecessorsOrMore to BasicBlock 2018-11-19 19:54:27 +00:00
CMakeLists.txt [New PM] Introducing PassInstrumentation framework 2018-09-20 17:08:45 +00:00
Comdat.cpp [LLVM-C] [bindings/go] Add C and Golang bindings for COMDAT 2018-03-14 18:33:53 +00:00
ConstantFold.cpp [ConstantFold] Use getMinSignedBits for APInt in isIndexInRangeOfArrayType. 2018-12-12 18:55:14 +00:00
ConstantFold.h IR: Introduce inrange attribute on getelementptr indices. 2016-11-10 22:34:55 +00:00
ConstantRange.cpp [IR] Strip trailing whitespace. NFC 2018-07-03 12:39:52 +00:00
Constants.cpp [ConstantInt] Check active bits before calling getZExtValue. 2018-12-12 02:22:12 +00:00
ConstantsContext.h [IR] Add a dedicated FNeg IR Instruction 2018-11-13 18:15:47 +00:00
Core.cpp [LLVM-C] Fix Windows Build of Core 2018-11-06 01:54:12 +00:00
DataLayout.cpp [NFC] Make getPreferredAlignment honor section markings. 2018-08-29 23:46:26 +00:00
DebugInfo.cpp llvm-dwarfdump: Improve/fix pretty printing of array dimensions 2018-12-19 19:34:24 +00:00
DebugInfoMetadata.cpp Comment tweak requested in code review. NFC 2018-11-29 21:13:51 +00:00
DebugLoc.cpp [IR] Add a boolean field in DILocation to know if a line must covered or not 2018-09-20 08:53:06 +00:00
DiagnosticHandler.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
DiagnosticInfo.cpp Reapply "Adapt gcov to changes in CFE." 2018-12-06 18:44:48 +00:00
DiagnosticPrinter.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
DIBuilder.cpp [DebugInfo] DISubprogram flags get their own flags word. NFC. 2018-11-19 18:29:28 +00:00
Dominators.cpp [TI removal] Make variables declared as TerminatorInst and initialized 2018-10-15 10:04:59 +00:00
DomTreeUpdater.cpp [Dominators] Refine the logic of recalculate() in the DomTreeUpdater 2018-08-03 06:51:35 +00:00
Function.cpp Make Function::getInstructionCount const 2018-10-18 19:49:44 +00:00
Globals.cpp [IR] Allow increasing the alignment of dso-local globals. 2018-10-31 23:03:58 +00:00
GVMaterializer.cpp
InlineAsm.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
Instruction.cpp [IR] Add a dedicated FNeg IR Instruction 2018-11-13 18:15:47 +00:00
Instructions.cpp [TI removal] Leverage the fact that TerminatorInst is gone to create 2018-11-22 10:31:35 +00:00
IntrinsicInst.cpp [FPEnv] Add constrained CEIL/FLOOR/ROUND/TRUNC intrinsics 2018-11-05 15:59:49 +00:00
IRBuilder.cpp [IRBuilder] Fixup CreateIntrinsic to allow specifying Types to Mangle. 2018-10-08 10:32:33 +00:00
IRPrintingPasses.cpp Print newline after banner for ModulePass 2018-11-14 10:05:28 +00:00
LegacyPassManager.cpp [New PM][PassInstrumentation] IR printing support for New Pass Manager 2018-09-24 16:08:15 +00:00
LLVMBuild.txt Move Object format code to lib/BinaryFormat. 2017-06-07 03:48:56 +00:00
LLVMContext.cpp Introduce llvm.loop.parallel_accesses and llvm.access.group metadata. 2018-12-20 04:58:07 +00:00
LLVMContextImpl.cpp [LLVMContext] Detecting leaked instructions with metadata 2018-06-29 20:13:13 +00:00
LLVMContextImpl.h [DebugInfo] DISubprogram flags get their own flags word. NFC. 2018-11-19 18:29:28 +00:00
Mangler.cpp [IR] Avoid the need to prefix MS C++ symbols with '\01' 2018-03-16 20:13:32 +00:00
MDBuilder.cpp [Metadata] Replace a SmallVector with an array; NFC 2018-08-15 22:15:35 +00:00
Metadata.cpp Use llvm::copy. NFC 2018-11-17 01:44:25 +00:00
MetadataImpl.h
Module.cpp [macho] save the SDK version stored in module metadata into the version min and 2018-12-14 01:14:10 +00:00
ModuleSummaryIndex.cpp [ThinLTO] Fix comment. NFC 2018-11-19 14:19:37 +00:00
Operator.cpp Adding a width of the GEP index to the Data Layout. 2018-02-14 06:58:08 +00:00
OptBisect.cpp [NFC] OptPassGate extracted from OptBisect 2018-03-27 16:57:20 +00:00
Pass.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
PassInstrumentation.cpp [New PM] Introducing PassInstrumentation framework 2018-09-20 17:08:45 +00:00
PassManager.cpp [PM] Introduce an analysis set used to preserve all analyses over 2017-01-15 06:32:49 +00:00
PassRegistry.cpp [Pass] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-09-06 23:05:38 +00:00
PassTimingInfo.cpp [NewPM] fixing asserts on deleted loop in -print-after-all 2018-12-11 19:05:35 +00:00
ProfileSummary.cpp [ProfileSummary] Move a vector we're about to destroy anyway; NFC 2018-04-12 20:54:05 +00:00
SafepointIRVerifier.cpp Use llvm::any_of instead std::any_of. NFC 2018-10-31 00:31:06 +00:00
Statepoint.cpp [Statepoint] Add helper functions for GCRelocate and GCResult 2017-06-20 20:54:57 +00:00
SymbolTableListTraitsImpl.h Remove trailing space 2018-07-30 19:41:25 +00:00
Type.cpp IR: Optimize StructType::get to perform one hash lookup instead of two, NFCI 2018-10-25 13:38:07 +00:00
TypeFinder.cpp Use ranged for loops in TypeFinder.cpp, NFC 2018-02-08 18:02:27 +00:00
Use.cpp
User.cpp Remove redundant includes from lib/IR. 2017-12-13 21:30:52 +00:00
Value.cpp [IR] Add hasNPredecessors, hasNPredecessorsOrMore to BasicBlock 2018-11-19 19:54:27 +00:00
ValueSymbolTable.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
Verifier.cpp Implement -frecord-command-line (-frecord-gcc-switches) 2018-12-14 15:38:15 +00:00