[llvm] [SPIRV][NFC] Refactor pointer creation in GlobalRegistery (PR #134429)
Nathan Gauër via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 7 05:48:11 PDT 2025
================
@@ -1693,6 +1728,43 @@ SPIRVType *SPIRVGlobalRegistry::getOrCreateSPIRVArrayType(
}
SPIRVType *SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(
+ Type *BaseType, MachineInstr &I, SPIRV::StorageClass::StorageClass SC) {
+ MachineIRBuilder MIRBuilder(I);
+ return getOrCreateSPIRVPointerType(BaseType, MIRBuilder, SC);
+}
+
+SPIRVType *SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(
+ Type *BaseType, MachineIRBuilder &MIRBuilder,
+ SPIRV::StorageClass::StorageClass SC) {
+ SPIRVType *SpirvBaseType = getOrCreateSPIRVType(
+ BaseType, MIRBuilder, SPIRV::AccessQualifier::ReadWrite, true);
+ return getOrCreateSPIRVPointerTypeInternal(SpirvBaseType, MIRBuilder, SC);
+}
+
+SPIRVType *SPIRVGlobalRegistry::changePointerStorageClass(
+ SPIRVType *PtrType, SPIRV::StorageClass::StorageClass SC, MachineInstr &I) {
+ SPIRV::StorageClass::StorageClass OldSC = getPointerStorageClass(PtrType);
+ assert(storageClassRequiresExplictLayout(OldSC) ==
+ storageClassRequiresExplictLayout(SC));
+
+ SPIRVType *PointeeType = getPointeeType(PtrType);
+ MachineIRBuilder MIRBuilder(I);
+ return getOrCreateSPIRVPointerTypeInternal(PointeeType, MIRBuilder, SC);
+}
+
+SPIRVType *SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(
+ SPIRVType *BaseType, MachineIRBuilder &MIRBuilder,
+ SPIRV::StorageClass::StorageClass SC) {
+ Type *LLVMType = const_cast<Type *>(getTypeForSPIRVType(BaseType));
+ assert(!storageClassRequiresExplictLayout(SC));
+ SPIRVType *R = getOrCreateSPIRVPointerType(LLVMType, MIRBuilder, SC);
+ assert(
+ getPointeeType(R) == BaseType &&
+ "The base type was not correctly laid out for the given storage class.");
+ return R;
+}
+
+SPIRVType *SPIRVGlobalRegistry::getOrCreateSPIRVPointerTypeInternal(
----------------
Keenuts wrote:
Since this is making a lookup in the CurMF, how does this handles functions referencing global types? Are those re-created and each function has its own type version?
https://github.com/llvm/llvm-project/pull/134429
More information about the llvm-commits
mailing list