Skip to content

Commit 8c75ecb

Browse files
authored
[IR] Provide array with poison-generating metadata IDs. (#123188)
Add Metadata::PoisonGeneratingIDs containing IDs of poison-generating metadata to allow easier re-use. PR: #123188
1 parent 12ba74e commit 8c75ecb

File tree

3 files changed

+9
-8
lines changed

3 files changed

+9
-8
lines changed

llvm/include/llvm/IR/Metadata.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ class Metadata {
138138
void printAsOperand(raw_ostream &OS, ModuleSlotTracker &MST,
139139
const Module *M = nullptr) const;
140140
/// @}
141+
142+
/// Metadata IDs that may generate poison.
143+
constexpr static const unsigned PoisonGeneratingIDs[] = {
144+
LLVMContext::MD_range, LLVMContext::MD_nonnull, LLVMContext::MD_align};
141145
};
142146

143147
// Create wrappers for C Binding types (see CBindingWrapping.h).

llvm/lib/IR/Instruction.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -458,9 +458,8 @@ void Instruction::dropPoisonGeneratingFlags() {
458458
}
459459

460460
bool Instruction::hasPoisonGeneratingMetadata() const {
461-
return hasMetadata(LLVMContext::MD_range) ||
462-
hasMetadata(LLVMContext::MD_nonnull) ||
463-
hasMetadata(LLVMContext::MD_align);
461+
return any_of(Metadata::PoisonGeneratingIDs,
462+
[this](unsigned ID) { return hasMetadata(ID); });
464463
}
465464

466465
bool Instruction::hasNonDebugLocLoopMetadata() const {
@@ -487,9 +486,8 @@ bool Instruction::hasNonDebugLocLoopMetadata() const {
487486
}
488487

489488
void Instruction::dropPoisonGeneratingMetadata() {
490-
eraseMetadata(LLVMContext::MD_range);
491-
eraseMetadata(LLVMContext::MD_nonnull);
492-
eraseMetadata(LLVMContext::MD_align);
489+
for (unsigned ID : Metadata::PoisonGeneratingIDs)
490+
eraseMetadata(ID);
493491
}
494492

495493
bool Instruction::hasPoisonGeneratingReturnAttributes() const {

llvm/lib/Transforms/IPO/ArgumentPromotion.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,7 @@ doPromotion(Function *F, FunctionAnalysisManager &FAM,
259259
// all promoted loads.
260260
if (LI->hasMetadata(LLVMContext::MD_noundef))
261261
LI->copyMetadata(*Pair.second.MustExecInstr,
262-
{LLVMContext::MD_range, LLVMContext::MD_nonnull,
263-
LLVMContext::MD_align});
262+
Metadata::PoisonGeneratingIDs);
264263
}
265264
Args.push_back(LI);
266265
ArgAttrVec.push_back(AttributeSet());

0 commit comments

Comments
 (0)