mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-05 12:31:33 +00:00
Introduce enum values for previously defined metadata types. (NFC)
Our metadata scheme lazily assigns IDs to string metadata, but we have a mechanism to preassign them as well. Using a preassigned ID is helpful since we get compile time type checking, and avoid some (minimal) string construction and comparison. This change adds enum value for three existing metadata types: + MD_nontemporal = 9, // "nontemporal" + MD_mem_parallel_loop_access = 10, // "llvm.mem.parallel_loop_access" + MD_nonnull = 11 // "nonnull" I went through an updated various uses as well. I made no attempt to get all uses; I focused on the ones which were easily grepable and easily to translate. For example, there were several items in LoopInfo.cpp I chose not to update. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220248 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c0c4f1b78e
commit
9be9473394
@ -55,7 +55,10 @@ public:
|
||||
MD_tbaa_struct = 5, // "tbaa.struct"
|
||||
MD_invariant_load = 6, // "invariant.load"
|
||||
MD_alias_scope = 7, // "alias.scope"
|
||||
MD_noalias = 8 // "noalias"
|
||||
MD_noalias = 8, // "noalias",
|
||||
MD_nontemporal = 9, // "nontemporal"
|
||||
MD_mem_parallel_loop_access = 10, // "llvm.mem.parallel_loop_access"
|
||||
MD_nonnull = 11 // "nonnull"
|
||||
};
|
||||
|
||||
/// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/Metadata.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
@ -307,7 +308,8 @@ bool Loop::isAnnotatedParallel() const {
|
||||
// directly or indirectly through another list metadata (in case of
|
||||
// nested parallel loops). The loop identifier metadata refers to
|
||||
// itself so we can check both cases with the same routine.
|
||||
MDNode *loopIdMD = II->getMetadata("llvm.mem.parallel_loop_access");
|
||||
MDNode *loopIdMD =
|
||||
II->getMetadata(LLVMContext::MD_mem_parallel_loop_access);
|
||||
|
||||
if (!loopIdMD)
|
||||
return false;
|
||||
|
@ -2624,7 +2624,7 @@ bool llvm::isKnownNonNull(const Value *V, const TargetLibraryInfo *TLI) {
|
||||
|
||||
// A Load tagged w/nonnull metadata is never null.
|
||||
if (const LoadInst *LI = dyn_cast<LoadInst>(V))
|
||||
return LI->getMetadata("nonnull");
|
||||
return LI->getMetadata(LLVMContext::MD_nonnull);
|
||||
|
||||
if (ImmutableCallSite CS = V)
|
||||
if (CS.isReturnNonNull())
|
||||
|
@ -2122,8 +2122,8 @@ FastISel::createMachineMemOperandFor(const Instruction *I) const {
|
||||
} else
|
||||
return nullptr;
|
||||
|
||||
bool IsNonTemporal = I->getMetadata("nontemporal") != nullptr;
|
||||
bool IsInvariant = I->getMetadata("invariant.load") != nullptr;
|
||||
bool IsNonTemporal = I->getMetadata(LLVMContext::MD_nontemporal) != nullptr;
|
||||
bool IsInvariant = I->getMetadata(LLVMContext::MD_invariant_load) != nullptr;
|
||||
const MDNode *Ranges = I->getMetadata(LLVMContext::MD_range);
|
||||
|
||||
AAMDNodes AAInfo;
|
||||
|
@ -3480,8 +3480,8 @@ void SelectionDAGBuilder::visitLoad(const LoadInst &I) {
|
||||
Type *Ty = I.getType();
|
||||
|
||||
bool isVolatile = I.isVolatile();
|
||||
bool isNonTemporal = I.getMetadata("nontemporal") != nullptr;
|
||||
bool isInvariant = I.getMetadata("invariant.load") != nullptr;
|
||||
bool isNonTemporal = I.getMetadata(LLVMContext::MD_nontemporal) != nullptr;
|
||||
bool isInvariant = I.getMetadata(LLVMContext::MD_invariant_load) != nullptr;
|
||||
unsigned Alignment = I.getAlignment();
|
||||
|
||||
AAMDNodes AAInfo;
|
||||
@ -3584,7 +3584,7 @@ void SelectionDAGBuilder::visitStore(const StoreInst &I) {
|
||||
NumValues));
|
||||
EVT PtrVT = Ptr.getValueType();
|
||||
bool isVolatile = I.isVolatile();
|
||||
bool isNonTemporal = I.getMetadata("nontemporal") != nullptr;
|
||||
bool isNonTemporal = I.getMetadata(LLVMContext::MD_nontemporal) != nullptr;
|
||||
unsigned Alignment = I.getAlignment();
|
||||
|
||||
AAMDNodes AAInfo;
|
||||
|
@ -76,6 +76,23 @@ LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) {
|
||||
unsigned NoAliasID = getMDKindID("noalias");
|
||||
assert(NoAliasID == MD_noalias && "noalias kind id drifted");
|
||||
(void)NoAliasID;
|
||||
|
||||
// Create the 'nontemporal' metadata kind.
|
||||
unsigned NonTemporalID = getMDKindID("nontemporal");
|
||||
assert(NonTemporalID == MD_nontemporal && "nontemporal kind id drifted");
|
||||
(void)NonTemporalID;
|
||||
|
||||
// Create the 'llvm.mem.parallel_loop_access' metadata kind.
|
||||
unsigned MemParallelLoopAccessID = getMDKindID("llvm.mem.parallel_loop_access");
|
||||
assert(MemParallelLoopAccessID == MD_mem_parallel_loop_access &&
|
||||
"mem_parallel_loop_access kind id drifted");
|
||||
(void)MemParallelLoopAccessID;
|
||||
|
||||
|
||||
// Create the 'nonnull' metadata kind.
|
||||
unsigned NonNullID = getMDKindID("nonnull");
|
||||
assert(NonNullID == MD_nonnull && "nonnull kind id drifted");
|
||||
(void)NonNullID;
|
||||
}
|
||||
LLVMContext::~LLVMContext() { delete pImpl; }
|
||||
|
||||
|
@ -329,6 +329,8 @@ static LoadInst *combineLoadToNewType(InstCombiner &IC, LoadInst &LI, Type *NewT
|
||||
case LLVMContext::MD_invariant_load:
|
||||
case LLVMContext::MD_alias_scope:
|
||||
case LLVMContext::MD_noalias:
|
||||
case LLVMContext::MD_nontemporal:
|
||||
case LLVMContext::MD_mem_parallel_loop_access:
|
||||
// All of these directly apply.
|
||||
NewLoad->setMetadata(ID, N);
|
||||
break;
|
||||
@ -339,12 +341,6 @@ static LoadInst *combineLoadToNewType(InstCombiner &IC, LoadInst &LI, Type *NewT
|
||||
break;
|
||||
}
|
||||
}
|
||||
// FIXME: These metadata nodes should really have enumerators and be handled
|
||||
// above.
|
||||
if (MDNode *N = LI.getMetadata("nontemporal"))
|
||||
NewLoad->setMetadata("nontemporal", N);
|
||||
if (MDNode *N = LI.getMetadata("llvm.mem.parallel_loop_access"))
|
||||
NewLoad->setMetadata("llvm.mem.parallel_loop_access", N);
|
||||
return NewLoad;
|
||||
}
|
||||
|
||||
|
@ -444,7 +444,7 @@ bool LICM::canSinkOrHoistInst(Instruction &I) {
|
||||
// in the same alias set as something that ends up being modified.
|
||||
if (AA->pointsToConstantMemory(LI->getOperand(0)))
|
||||
return true;
|
||||
if (LI->getMetadata("invariant.load"))
|
||||
if (LI->getMetadata(LLVMContext::MD_invariant_load))
|
||||
return true;
|
||||
|
||||
// Don't hoist loads which have may-aliased stores in loop.
|
||||
|
Loading…
Reference in New Issue
Block a user