From 78e661f2cab6d79bfd566fda1555bfc1fc574b46 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Sat, 27 Sep 2025 00:00:50 +0200 Subject: [PATCH] [SPIR-V] Make SPIRVModuleAnalysis::MAI a non static member Otherwise multiple translation units in the same process could run into ID reuse collisions cause invalid SPIR-Vs to be generated due to having multiple definition for the same SPIR-V SSA value. Closes: https://github.com/llvm/llvm-project/issues/160613 --- llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp | 2 +- llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | 2 -- llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.h | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp b/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp index c2a6e51913a0a..c0fb217e8006f 100644 --- a/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp @@ -611,7 +611,7 @@ void SPIRVAsmPrinter::outputModuleSections() { // Get the global subtarget to output module-level info. ST = static_cast(TM).getSubtargetImpl(); TII = ST->getInstrInfo(); - MAI = &SPIRVModuleAnalysis::MAI; + MAI = &getAnalysis().MAI; assert(ST && TII && MAI && M && "Module analysis is required"); // Output instructions according to the Logical Layout of a Module: // 1,2. All OpCapability instructions, then optional OpExtension instructions. diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp index a95f393b75605..9aa815b13e76e 100644 --- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp @@ -2126,8 +2126,6 @@ static void patchPhis(const Module &M, SPIRVGlobalRegistry *GR, } } -struct SPIRV::ModuleAnalysisInfo SPIRVModuleAnalysis::MAI; - void SPIRVModuleAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); AU.addRequired(); diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.h b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.h index 41c792a98534f..4e9ca064b8d37 100644 --- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.h +++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.h @@ -222,7 +222,7 @@ struct SPIRVModuleAnalysis : public ModulePass { bool runOnModule(Module &M) override; void getAnalysisUsage(AnalysisUsage &AU) const override; - static struct SPIRV::ModuleAnalysisInfo MAI; + struct SPIRV::ModuleAnalysisInfo MAI; private: void setBaseInfo(const Module &M);