Skip to content

Commit 6ad1847

Browse files
committed
Revert "[SPIRV] Correctly map OpGenericCastToPtrExplicit builtins (#137189)"
This reverts commit 76d83e6.
1 parent d8e85a0 commit 6ad1847

File tree

7 files changed

+40
-63
lines changed

7 files changed

+40
-63
lines changed

llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1656,29 +1656,10 @@ static bool generateBarrierInst(const SPIRV::IncomingCall *Call,
16561656
}
16571657

16581658
static bool generateCastToPtrInst(const SPIRV::IncomingCall *Call,
1659-
MachineIRBuilder &MIRBuilder,
1660-
SPIRVGlobalRegistry *GR) {
1661-
// Lookup the instruction opcode in the TableGen records.
1662-
const SPIRV::DemangledBuiltin *Builtin = Call->Builtin;
1663-
unsigned Opcode =
1664-
SPIRV::lookupNativeBuiltin(Builtin->Name, Builtin->Set)->Opcode;
1665-
1666-
if (Opcode == SPIRV::OpGenericCastToPtrExplicit) {
1667-
SPIRV::StorageClass::StorageClass ResSC =
1668-
GR->getPointerStorageClass(Call->ReturnRegister);
1669-
if (!isGenericCastablePtr(ResSC))
1670-
return false;
1671-
1672-
MIRBuilder.buildInstr(Opcode)
1673-
.addDef(Call->ReturnRegister)
1674-
.addUse(GR->getSPIRVTypeID(Call->ReturnType))
1675-
.addUse(Call->Arguments[0])
1676-
.addImm(ResSC);
1677-
} else {
1678-
MIRBuilder.buildInstr(TargetOpcode::G_ADDRSPACE_CAST)
1679-
.addDef(Call->ReturnRegister)
1680-
.addUse(Call->Arguments[0]);
1681-
}
1659+
MachineIRBuilder &MIRBuilder) {
1660+
MIRBuilder.buildInstr(TargetOpcode::G_ADDRSPACE_CAST)
1661+
.addDef(Call->ReturnRegister)
1662+
.addUse(Call->Arguments[0]);
16821663
return true;
16831664
}
16841665

@@ -2852,7 +2833,7 @@ std::optional<bool> lowerBuiltin(const StringRef DemangledCall,
28522833
case SPIRV::Barrier:
28532834
return generateBarrierInst(Call.get(), MIRBuilder, GR);
28542835
case SPIRV::CastToPtr:
2855-
return generateCastToPtrInst(Call.get(), MIRBuilder, GR);
2836+
return generateCastToPtrInst(Call.get(), MIRBuilder);
28562837
case SPIRV::Dot:
28572838
case SPIRV::IntegerDot:
28582839
return generateDotOrFMulInst(DemangledCall, Call.get(), MIRBuilder, GR);

llvm/lib/Target/SPIRV/SPIRVBuiltins.td

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -687,15 +687,15 @@ defm : DemangledNativeBuiltin<"__spirv_Load", OpenCL_std, LoadStore, 1, 3, OpLoa
687687
defm : DemangledNativeBuiltin<"__spirv_Store", OpenCL_std, LoadStore, 2, 4, OpStore>;
688688

689689
// Address Space Qualifier Functions/Pointers Conversion Instructions:
690-
defm : DemangledNativeBuiltin<"to_global", OpenCL_std, CastToPtr, 1, 1, OpGenericCastToPtrExplicit>;
691-
defm : DemangledNativeBuiltin<"to_local", OpenCL_std, CastToPtr, 1, 1, OpGenericCastToPtrExplicit>;
692-
defm : DemangledNativeBuiltin<"to_private", OpenCL_std, CastToPtr, 1, 1, OpGenericCastToPtrExplicit>;
690+
defm : DemangledNativeBuiltin<"to_global", OpenCL_std, CastToPtr, 1, 1, OpGenericCastToPtr>;
691+
defm : DemangledNativeBuiltin<"to_local", OpenCL_std, CastToPtr, 1, 1, OpGenericCastToPtr>;
692+
defm : DemangledNativeBuiltin<"to_private", OpenCL_std, CastToPtr, 1, 1, OpGenericCastToPtr>;
693693
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtr_ToGlobal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
694694
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtr_ToLocal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
695695
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtr_ToPrivate", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
696-
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToGlobal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtrExplicit>;
697-
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToLocal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtrExplicit>;
698-
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToPrivate", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtrExplicit>;
696+
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToGlobal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
697+
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToLocal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
698+
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToPrivate", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
699699

700700
// Cooperative Matrix builtin records:
701701
defm : DemangledNativeBuiltin<"__spirv_CooperativeMatrixLoadKHR", OpenCL_std, CoopMatr, 2, 4, OpCooperativeMatrixLoadKHR>;

llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,6 @@ void SPIRVTargetLowering::finalizeLowering(MachineFunction &MF) const {
429429
break;
430430
case SPIRV::OpPtrCastToGeneric:
431431
case SPIRV::OpGenericCastToPtr:
432-
case SPIRV::OpGenericCastToPtrExplicit:
433432
validateAccessChain(STI, MRI, GR, MI);
434433
break;
435434
case SPIRV::OpPtrAccessChain:

llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1552,6 +1552,17 @@ bool SPIRVInstructionSelector::selectAtomicCmpXchg(Register ResVReg,
15521552
.constrainAllUses(TII, TRI, RBI);
15531553
}
15541554

1555+
static bool isGenericCastablePtr(SPIRV::StorageClass::StorageClass SC) {
1556+
switch (SC) {
1557+
case SPIRV::StorageClass::Workgroup:
1558+
case SPIRV::StorageClass::CrossWorkgroup:
1559+
case SPIRV::StorageClass::Function:
1560+
return true;
1561+
default:
1562+
return false;
1563+
}
1564+
}
1565+
15551566
static bool isUSMStorageClass(SPIRV::StorageClass::StorageClass SC) {
15561567
switch (SC) {
15571568
case SPIRV::StorageClass::DeviceOnlyINTEL:

llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1683,7 +1683,6 @@ defm InBoundsAccessChain : OpcodeOperand<66>;
16831683
defm InBoundsPtrAccessChain : OpcodeOperand<70>;
16841684
defm PtrCastToGeneric : OpcodeOperand<121>;
16851685
defm GenericCastToPtr : OpcodeOperand<122>;
1686-
defm GenericCastToPtrExplicit : OpcodeOperand<123>;
16871686
defm Bitcast : OpcodeOperand<124>;
16881687
defm ConvertPtrToU : OpcodeOperand<117>;
16891688
defm ConvertUToPtr : OpcodeOperand<120>;

llvm/lib/Target/SPIRV/SPIRVUtils.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -167,19 +167,6 @@ MachineBasicBlock::iterator getOpVariableMBBIt(MachineInstr &I);
167167
// terminators and debug instructions.
168168
MachineBasicBlock::iterator getInsertPtValidEnd(MachineBasicBlock *MBB);
169169

170-
// Returns true if a pointer to the storage class can be casted to/from a
171-
// pointer to the Generic storage class.
172-
constexpr bool isGenericCastablePtr(SPIRV::StorageClass::StorageClass SC) {
173-
switch (SC) {
174-
case SPIRV::StorageClass::Workgroup:
175-
case SPIRV::StorageClass::CrossWorkgroup:
176-
case SPIRV::StorageClass::Function:
177-
return true;
178-
default:
179-
return false;
180-
}
181-
}
182-
183170
// Convert a SPIR-V storage class to the corresponding LLVM IR address space.
184171
// TODO: maybe the following two functions should be handled in the subtarget
185172
// to allow for different OpenCL vs Vulkan handling.

llvm/test/CodeGen/SPIRV/transcoding/OpGenericCastToPtr.ll

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]
2525
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]
2626
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]
27-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup
28-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup
29-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function
27+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]
28+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]
29+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]
3030
; CHECK-SPIRV: OpFunctionEnd
3131

3232
define spir_kernel void @test1(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {
@@ -52,9 +52,9 @@ entry:
5252
; CHECK-SPIRV: OpPtrCastToGeneric %[[#GenericIntPtr]]
5353
; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]
5454
; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]
55-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup
56-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup
57-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function
55+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]
56+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]
57+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]
5858
; CHECK-SPIRV: OpFunctionEnd
5959

6060
define spir_kernel void @test2(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {
@@ -93,9 +93,18 @@ declare spir_func ptr @_Z10to_privatePv(ptr addrspace(4))
9393
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]
9494
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]
9595
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]
96-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup
97-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup
98-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function
96+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]
97+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]
98+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]
99+
; CHECK-SPIRV: OpFunctionEnd
100+
101+
; CHECK-SPIRV: OpFunction
102+
; CHECK-SPIRV: OpPtrCastToGeneric %[[#GenericIntPtr]]
103+
; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]
104+
; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]
105+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]
106+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]
107+
; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]
99108
; CHECK-SPIRV: OpFunctionEnd
100109

101110
define spir_kernel void @test3(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {
@@ -117,15 +126,6 @@ entry:
117126
ret void
118127
}
119128

120-
; CHECK-SPIRV: OpFunction
121-
; CHECK-SPIRV: OpPtrCastToGeneric %[[#GenericIntPtr]]
122-
; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]
123-
; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]
124-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup
125-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup
126-
; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function
127-
; CHECK-SPIRV: OpFunctionEnd
128-
129129
define spir_kernel void @test4(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {
130130
entry:
131131
%var = alloca i32

0 commit comments

Comments
 (0)