From adf4c102c3de1ac69c51d8af151ff61c4b82b0ad Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 18 Dec 2024 12:09:25 +0700 Subject: [PATCH 1/2] LLVMContext: Cleanup registration of known bundle IDs --- llvm/lib/IR/LLVMContext.cpp | 85 +++++++++++++++---------------------- 1 file changed, 35 insertions(+), 50 deletions(-) diff --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp index eb51a751bfa08..0a90bcbf323e8 100644 --- a/llvm/lib/IR/LLVMContext.cpp +++ b/llvm/lib/IR/LLVMContext.cpp @@ -31,6 +31,35 @@ using namespace llvm; +static constexpr StringRef knownBundleName(unsigned BundleTagID) { + switch (BundleTagID) { + case LLVMContext::OB_deopt: + return "deopt"; + case LLVMContext::OB_funclet: + return "funclet"; + case LLVMContext::OB_gc_transition: + return "gc-transition"; + case LLVMContext::OB_cfguardtarget: + return "cfguardtarget"; + case LLVMContext::OB_preallocated: + return "preallocated"; + case LLVMContext::OB_gc_live: + return "gc-live"; + case LLVMContext::OB_clang_arc_attachedcall: + return "clang.arc.attachedcall"; + case LLVMContext::OB_ptrauth: + return "ptrauth"; + case LLVMContext::OB_kcfi: + return "kcfi"; + case LLVMContext::OB_convergencectrl: + return "convergencectrl"; + default: + return ""; + } + + llvm_unreachable("covered switch"); +} + LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { // Create the fixed metadata kinds. This is done in the same order as the // MD_* enum values so that they correspond. @@ -46,56 +75,12 @@ LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { (void)ID; } - auto *DeoptEntry = pImpl->getOrInsertBundleTag("deopt"); - assert(DeoptEntry->second == LLVMContext::OB_deopt && - "deopt operand bundle id drifted!"); - (void)DeoptEntry; - - auto *FuncletEntry = pImpl->getOrInsertBundleTag("funclet"); - assert(FuncletEntry->second == LLVMContext::OB_funclet && - "funclet operand bundle id drifted!"); - (void)FuncletEntry; - - auto *GCTransitionEntry = pImpl->getOrInsertBundleTag("gc-transition"); - assert(GCTransitionEntry->second == LLVMContext::OB_gc_transition && - "gc-transition operand bundle id drifted!"); - (void)GCTransitionEntry; - - auto *CFGuardTargetEntry = pImpl->getOrInsertBundleTag("cfguardtarget"); - assert(CFGuardTargetEntry->second == LLVMContext::OB_cfguardtarget && - "cfguardtarget operand bundle id drifted!"); - (void)CFGuardTargetEntry; - - auto *PreallocatedEntry = pImpl->getOrInsertBundleTag("preallocated"); - assert(PreallocatedEntry->second == LLVMContext::OB_preallocated && - "preallocated operand bundle id drifted!"); - (void)PreallocatedEntry; - - auto *GCLiveEntry = pImpl->getOrInsertBundleTag("gc-live"); - assert(GCLiveEntry->second == LLVMContext::OB_gc_live && - "gc-transition operand bundle id drifted!"); - (void)GCLiveEntry; - - auto *ClangAttachedCall = - pImpl->getOrInsertBundleTag("clang.arc.attachedcall"); - assert(ClangAttachedCall->second == LLVMContext::OB_clang_arc_attachedcall && - "clang.arc.attachedcall operand bundle id drifted!"); - (void)ClangAttachedCall; - - auto *PtrauthEntry = pImpl->getOrInsertBundleTag("ptrauth"); - assert(PtrauthEntry->second == LLVMContext::OB_ptrauth && - "ptrauth operand bundle id drifted!"); - (void)PtrauthEntry; - - auto *KCFIEntry = pImpl->getOrInsertBundleTag("kcfi"); - assert(KCFIEntry->second == LLVMContext::OB_kcfi && - "kcfi operand bundle id drifted!"); - (void)KCFIEntry; - - auto *ConvergenceCtrlEntry = pImpl->getOrInsertBundleTag("convergencectrl"); - assert(ConvergenceCtrlEntry->second == LLVMContext::OB_convergencectrl && - "convergencectrl operand bundle id drifted!"); - (void)ConvergenceCtrlEntry; + for (unsigned BundleTagID = LLVMContext::OB_deopt; + BundleTagID <= LLVMContext::OB_convergencectrl; ++BundleTagID) { + [[maybe_unused]] const auto *Entry = + pImpl->getOrInsertBundleTag(knownBundleName(BundleTagID)); + assert(Entry->second == BundleTagID && "operand bundle id drifted!"); + } SyncScope::ID SingleThreadSSID = pImpl->getOrInsertSyncScopeID("singlethread"); From b056eb65bfb95ddc8ed6c941b1f4e1bb1cb112de Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 18 Dec 2024 12:33:18 +0700 Subject: [PATCH 2/2] Use unreachable for default --- llvm/lib/IR/LLVMContext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp index 0a90bcbf323e8..9acc15f11316a 100644 --- a/llvm/lib/IR/LLVMContext.cpp +++ b/llvm/lib/IR/LLVMContext.cpp @@ -54,7 +54,7 @@ static constexpr StringRef knownBundleName(unsigned BundleTagID) { case LLVMContext::OB_convergencectrl: return "convergencectrl"; default: - return ""; + llvm_unreachable("unknown bundle id"); } llvm_unreachable("covered switch");