[llvm] [llvm][SPIRV] Allow casts between AS9 and other AS (PR #194650)

via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 08:03:41 PDT 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp -- llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp llvm/lib/Target/SPIRV/SPIRVLegalizerInfo.cpp --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
index ed0dc1970..74b3aa3fb 100644
--- a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
@@ -2599,7 +2599,8 @@ bool SPIRVInstructionSelector::selectAddrSpaceCast(Register ResVReg,
                    ? static_cast<uint32_t>(SPIRV::Opcode::GenericCastToPtr)
                    : 0);
 
-    // Handle CodeSectionINTEL in constant context with SPV_INTEL_function_pointers.
+    // Handle CodeSectionINTEL in constant context with
+    // SPV_INTEL_function_pointers.
     if (STI.canUseExtension(SPIRV::Extension::SPV_INTEL_function_pointers) &&
         !SpecOpcode) {
       if (SrcSC == SPIRV::StorageClass::CodeSectionINTEL &&
@@ -2610,28 +2611,38 @@ bool SPIRVInstructionSelector::selectAddrSpaceCast(Register ResVReg,
         SpecOpcode = static_cast<uint32_t>(SPIRV::Opcode::GenericCastToPtr);
       } else if (SrcSC == SPIRV::StorageClass::CodeSectionINTEL &&
                  DstSC != SPIRV::StorageClass::CodeSectionINTEL) {
-        // For P9 -> other address spaces, cast through Generic via two OpSpecConstantOp.
-        Register GenericTypeReg = getUcharPtrTypeReg(I, SPIRV::StorageClass::Generic);
-        Register IntermediateReg = MRI->createVirtualRegister(&SPIRV::IDRegClass);
-
-        buildSpecConstantOp(I, IntermediateReg, SrcPtr, GenericTypeReg,
-                            static_cast<uint32_t>(SPIRV::Opcode::PtrCastToGeneric))
+        // For P9 -> other address spaces, cast through Generic via two
+        // OpSpecConstantOp.
+        Register GenericTypeReg =
+            getUcharPtrTypeReg(I, SPIRV::StorageClass::Generic);
+        Register IntermediateReg =
+            MRI->createVirtualRegister(&SPIRV::IDRegClass);
+
+        buildSpecConstantOp(
+            I, IntermediateReg, SrcPtr, GenericTypeReg,
+            static_cast<uint32_t>(SPIRV::Opcode::PtrCastToGeneric))
             .constrainAllUses(TII, TRI, RBI);
-        buildSpecConstantOp(I, ResVReg, IntermediateReg, getUcharPtrTypeReg(I, DstSC),
-                            static_cast<uint32_t>(SPIRV::Opcode::GenericCastToPtr))
+        buildSpecConstantOp(
+            I, ResVReg, IntermediateReg, getUcharPtrTypeReg(I, DstSC),
+            static_cast<uint32_t>(SPIRV::Opcode::GenericCastToPtr))
             .constrainAllUses(TII, TRI, RBI);
         return true;
       } else if (DstSC == SPIRV::StorageClass::CodeSectionINTEL &&
                  SrcSC != SPIRV::StorageClass::CodeSectionINTEL) {
-        // For other address spaces -> P9, cast through Generic via two OpSpecConstantOp.
-        Register GenericTypeReg = getUcharPtrTypeReg(I, SPIRV::StorageClass::Generic);
-        Register IntermediateReg = MRI->createVirtualRegister(&SPIRV::IDRegClass);
-
-        buildSpecConstantOp(I, IntermediateReg, SrcPtr, GenericTypeReg,
-                            static_cast<uint32_t>(SPIRV::Opcode::PtrCastToGeneric))
+        // For other address spaces -> P9, cast through Generic via two
+        // OpSpecConstantOp.
+        Register GenericTypeReg =
+            getUcharPtrTypeReg(I, SPIRV::StorageClass::Generic);
+        Register IntermediateReg =
+            MRI->createVirtualRegister(&SPIRV::IDRegClass);
+
+        buildSpecConstantOp(
+            I, IntermediateReg, SrcPtr, GenericTypeReg,
+            static_cast<uint32_t>(SPIRV::Opcode::PtrCastToGeneric))
             .constrainAllUses(TII, TRI, RBI);
-        buildSpecConstantOp(I, ResVReg, IntermediateReg, getUcharPtrTypeReg(I, DstSC),
-                            static_cast<uint32_t>(SPIRV::Opcode::GenericCastToPtr))
+        buildSpecConstantOp(
+            I, ResVReg, IntermediateReg, getUcharPtrTypeReg(I, DstSC),
+            static_cast<uint32_t>(SPIRV::Opcode::GenericCastToPtr))
             .constrainAllUses(TII, TRI, RBI);
         return true;
       }
@@ -2716,9 +2727,10 @@ bool SPIRVInstructionSelector::selectAddrSpaceCast(Register ResVReg,
     // Any address space <-> P9, cast through Generic as intermediary.
     if (SrcSC == SPIRV::StorageClass::CodeSectionINTEL &&
         DstSC != SPIRV::StorageClass::CodeSectionINTEL) {
-      SPIRVTypeInst GenericPtrTy =
-          GR.changePointerStorageClass(SrcPtrTy, SPIRV::StorageClass::Generic, I);
-      Register Tmp = createVirtualRegister(GenericPtrTy, &GR, MRI, MRI->getMF());
+      SPIRVTypeInst GenericPtrTy = GR.changePointerStorageClass(
+          SrcPtrTy, SPIRV::StorageClass::Generic, I);
+      Register Tmp =
+          createVirtualRegister(GenericPtrTy, &GR, MRI, MRI->getMF());
       BuildMI(BB, I, DL, TII.get(SPIRV::OpPtrCastToGeneric))
           .addDef(Tmp)
           .addUse(GR.getSPIRVTypeID(GenericPtrTy))
@@ -2734,9 +2746,10 @@ bool SPIRVInstructionSelector::selectAddrSpaceCast(Register ResVReg,
 
     if (DstSC == SPIRV::StorageClass::CodeSectionINTEL &&
         SrcSC != SPIRV::StorageClass::CodeSectionINTEL) {
-      SPIRVTypeInst GenericPtrTy =
-          GR.changePointerStorageClass(SrcPtrTy, SPIRV::StorageClass::Generic, I);
-      Register Tmp = createVirtualRegister(GenericPtrTy, &GR, MRI, MRI->getMF());
+      SPIRVTypeInst GenericPtrTy = GR.changePointerStorageClass(
+          SrcPtrTy, SPIRV::StorageClass::Generic, I);
+      Register Tmp =
+          createVirtualRegister(GenericPtrTy, &GR, MRI, MRI->getMF());
       BuildMI(BB, I, DL, TII.get(SPIRV::OpPtrCastToGeneric))
           .addDef(Tmp)
           .addUse(GR.getSPIRVTypeID(GenericPtrTy))

``````````

</details>


https://github.com/llvm/llvm-project/pull/194650


More information about the llvm-commits mailing list