Skip to content

Commit 01c0bf3

Browse files
committed
fix a few issues
1 parent f197461 commit 01c0bf3

File tree

12 files changed

+102
-81
lines changed

12 files changed

+102
-81
lines changed

Diff for: clang/include/clang/Basic/TargetOptions.h

+3
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ class TargetOptions {
125125

126126
/// The entry point name for HLSL shader being compiled as specified by -E.
127127
std::string HLSLEntry;
128+
129+
/// Assume the use of the SPIR-V Backend.
130+
bool SYCLUseSPIRVBackend = false;
128131
};
129132

130133
} // end namespace clang

Diff for: clang/include/clang/Driver/Options.td

+1
Original file line numberDiff line numberDiff line change
@@ -7158,6 +7158,7 @@ def fno_sycl_libspirv : Flag<["-"], "fno-sycl-libspirv">,
71587158
HelpText<"Disable check for libspirv">;
71597159
def fsycl_use_spirv_backend_for_spirv_gen : Flag<["-"], "fsycl-use-spirv-backend-for-spirv-gen">,
71607160
Flags<[HelpHidden]>,
7161+
MarshallingInfoFlag<TargetOpts<"SYCLUseSPIRVBackend">>,
71617162
HelpText<"Use the SPIR-V backend for SPIR-V code generation. "
71627163
"Has effect only for SPIR-based targets. It is off by default and "
71637164
"the SPIR-V LLVM Translator is used for SPIR-V code generation. "

Diff for: clang/lib/Basic/Targets/SPIR.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ static constexpr Builtin::Info BuiltinInfos[] = {
3535
static_assert(std::size(BuiltinInfos) == NumBuiltins);
3636

3737
llvm::SmallVector<Builtin::InfosShard>
38-
BaseSPIRVTargetInfo::getTargetBuiltins() const {
39-
return {{&BuiltinStrings, BuiltinInfos}};
38+
BaseSPIRTargetInfo::getTargetBuiltins() const {
39+
if (getTriple().isSPIRV() || getTargetOpts().SYCLUseSPIRVBackend)
40+
return {{&BuiltinStrings, BuiltinInfos}};
41+
return {};
4042
}
4143

4244
void SPIRTargetInfo::getTargetDefines(const LangOptions &Opts,

Diff for: clang/lib/Basic/Targets/SPIR.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,7 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo {
167167
// memcpy as per section 3 of the SPIR spec.
168168
bool useFP16ConversionIntrinsics() const override { return false; }
169169

170-
llvm::SmallVector<Builtin::InfosShard> getTargetBuiltins() const override {
171-
return {};
172-
}
170+
llvm::SmallVector<Builtin::InfosShard> getTargetBuiltins() const override;
173171

174172
std::string_view getClobbers() const override { return ""; }
175173

@@ -405,8 +403,6 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRVTargetInfo : public BaseSPIRTargetInfo {
405403
return Feature == "spirv";
406404
}
407405

408-
llvm::SmallVector<Builtin::InfosShard> getTargetBuiltins() const override;
409-
410406
void getTargetDefines(const LangOptions &Opts,
411407
MacroBuilder &Builder) const override;
412408
};

Diff for: clang/lib/Driver/ToolChains/Clang.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -1174,11 +1174,13 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA,
11741174
getToolChain().AddCudaIncludeArgs(Args, CmdArgs);
11751175
if (JA.isOffloading(Action::OFK_HIP))
11761176
getToolChain().AddHIPIncludeArgs(Args, CmdArgs);
1177-
if (JA.isOffloading(Action::OFK_SYCL))
1178-
getToolChain().addSYCLIncludeArgs(Args, CmdArgs);
11791177

11801178
if (JA.isOffloading(Action::OFK_SYCL)) {
11811179
getToolChain().addSYCLIncludeArgs(Args, CmdArgs);
1180+
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
1181+
CmdArgs.push_back("-include");
1182+
CmdArgs.push_back("__clang_spirv_builtins.h");
1183+
}
11821184
if (Inputs[0].getType() == types::TY_CUDA ||
11831185
isSYCLCudaCompatEnabled(Args)) {
11841186
// Include __clang_cuda_runtime_wrapper.h in .cu SYCL compilation.
@@ -5940,6 +5942,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
59405942
if (Arg *A = Args.getLastArg(options::OPT_fsycl_range_rounding_EQ))
59415943
A->render(Args, CmdArgs);
59425944

5945+
if (Arg *A =
5946+
Args.getLastArg(options::OPT_fsycl_use_spirv_backend_for_spirv_gen))
5947+
A->render(Args, CmdArgs);
5948+
59435949
if (Arg *A = Args.getLastArg(options::OPT_fsycl_exp_range_rounding))
59445950
A->render(Args, CmdArgs);
59455951

Diff for: clang/lib/Driver/ToolChains/SYCL.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,6 @@ void SYCLInstallationDetector::addSYCLIncludeArgs(
188188
CC1Args.push_back(DriverArgs.MakeArgString(STLWrappersPath));
189189
CC1Args.push_back("-internal-isystem");
190190
CC1Args.push_back(DriverArgs.MakeArgString(IncludePath));
191-
CC1Args.push_back("-include");
192-
CC1Args.push_back("__clang_spirv_builtins.h");
193191
}
194192

195193
void SYCLInstallationDetector::print(llvm::raw_ostream &OS) const {

Diff for: clang/lib/Headers/__clang_spirv_builtins.h

+76-55
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
#pragma clang diagnostic push
1414
#pragma clang diagnostic ignored "-Wsycl-strict"
1515

16+
#pragma push_macro("SPIRV_NOEXCEPT")
17+
#if __cplusplus >= 201103L
18+
#define SPIRV_NOEXCEPT noexcept
19+
#else
20+
#define SPIRV_NOEXCEPT
21+
#endif
22+
1623
#define __SPIRV_overloadable __attribute__((overloadable))
1724
#define __SPIRV_convergent __attribute__((convergent))
1825
#define __SPIRV_inline __attribute__((always_inline))
@@ -30,16 +37,12 @@
3037
#define __generic __attribute__((opencl_generic))
3138
#endif
3239

33-
#ifdef __SYCL_DEVICE_ONLY__
34-
#else
35-
#endif
36-
3740
// Check if SPIR-V builtins are supported.
3841
// As the translator doesn't use the LLVM intrinsics (which would be emitted if
3942
// we use the SPIR-V builtins) we can't rely on the SPIRV32/SPIRV64 etc macros
40-
// to establish if we can use the builtin alias. We disable builtin altogether if we do not
41-
// intent to use the backend.
42-
// So instead of use target macros, rely on a __has_builtin test.
43+
// to establish if we can use the builtin alias. We disable builtin altogether
44+
// if we do not intent to use the backend. So instead of use target macros, rely
45+
// on a __has_builtin test.
4346
#if (__has_builtin(__builtin_spirv_generic_cast_to_ptr_explicit))
4447
#define _SPIRV_BUILTIN_ALIAS(builtin) \
4548
__attribute__((clang_builtin_alias(builtin)))
@@ -54,102 +57,119 @@
5457

5558
// OpGenericCastToPtrExplicit
5659

57-
__SPIRV_overloadable
60+
extern __SPIRV_overloadable
5861
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
59-
__global void *__spirv_GenericCastToPtrExplicit_ToGlobal(__generic void *, int);
60-
__SPIRV_overloadable
62+
__global void *__spirv_GenericCastToPtrExplicit_ToGlobal(__generic void *,
63+
int) SPIRV_NOEXCEPT;
64+
extern __SPIRV_overloadable
6165
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
6266
__global const void *
63-
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const void *, int);
64-
__SPIRV_overloadable
67+
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const void *,
68+
int) SPIRV_NOEXCEPT;
69+
extern __SPIRV_overloadable
6570
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
6671
__global volatile void *
67-
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic volatile void *, int);
68-
__SPIRV_overloadable
72+
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic volatile void *,
73+
int) SPIRV_NOEXCEPT;
74+
extern __SPIRV_overloadable
6975
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
7076
__global const volatile void *
71-
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const volatile void *, int);
72-
__SPIRV_overloadable
77+
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const volatile void *,
78+
int) SPIRV_NOEXCEPT;
79+
extern __SPIRV_overloadable
7380
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
74-
__local void *__spirv_GenericCastToPtrExplicit_ToLocal(__generic void *, int);
75-
__SPIRV_overloadable
81+
__local void *__spirv_GenericCastToPtrExplicit_ToLocal(__generic void *,
82+
int) SPIRV_NOEXCEPT;
83+
extern __SPIRV_overloadable
7684
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
7785
__local const void *
78-
__spirv_GenericCastToPtrExplicit_ToLocal(__generic const void *, int);
79-
__SPIRV_overloadable
86+
__spirv_GenericCastToPtrExplicit_ToLocal(__generic const void *,
87+
int) SPIRV_NOEXCEPT;
88+
extern __SPIRV_overloadable
8089
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
8190
__local volatile void *
82-
__spirv_GenericCastToPtrExplicit_ToLocal(__generic volatile void *, int);
83-
__SPIRV_overloadable
91+
__spirv_GenericCastToPtrExplicit_ToLocal(__generic volatile void *,
92+
int) SPIRV_NOEXCEPT;
93+
extern __SPIRV_overloadable
8494
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
8595
__local const volatile void *
86-
__spirv_GenericCastToPtrExplicit_ToLocal(__generic const volatile void *, int);
87-
__SPIRV_overloadable
96+
__spirv_GenericCastToPtrExplicit_ToLocal(__generic const volatile void *,
97+
int) SPIRV_NOEXCEPT;
98+
extern __SPIRV_overloadable
8899
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
89100
__private void *__spirv_GenericCastToPtrExplicit_ToPrivate(__generic void *,
90-
int);
91-
__SPIRV_overloadable
101+
int) SPIRV_NOEXCEPT;
102+
extern __SPIRV_overloadable
92103
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
93104
__private const void *
94-
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const void *, int);
95-
__SPIRV_overloadable
105+
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const void *,
106+
int) SPIRV_NOEXCEPT;
107+
extern __SPIRV_overloadable
96108
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
97109
__private volatile void *
98-
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic volatile void *, int);
99-
__SPIRV_overloadable
110+
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic volatile void *,
111+
int) SPIRV_NOEXCEPT;
112+
extern __SPIRV_overloadable
100113
_SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
101114
__private const volatile void *
102115
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const volatile void *,
103-
int);
116+
int) SPIRV_NOEXCEPT;
104117

105118
// OpGenericCastToPtr
106119

107-
__SPIRV_overloadable __SPIRV_inline __global void *
108-
__spirv_GenericCastToPtr_ToGlobal(__generic void *p, int) {
120+
static __SPIRV_overloadable __SPIRV_inline __global void *
121+
__spirv_GenericCastToPtr_ToGlobal(__generic void *p, int) SPIRV_NOEXCEPT {
109122
return (__global void *)p;
110123
}
111-
__SPIRV_overloadable __SPIRV_inline __global const void *
112-
__spirv_GenericCastToPtr_ToGlobal(__generic const void *p, int) {
124+
static __SPIRV_overloadable __SPIRV_inline __global const void *
125+
__spirv_GenericCastToPtr_ToGlobal(__generic const void *p, int) SPIRV_NOEXCEPT {
113126
return (__global const void *)p;
114127
}
115-
__SPIRV_overloadable __SPIRV_inline __global volatile void *
116-
__spirv_GenericCastToPtr_ToGlobal(__generic volatile void *p, int) {
128+
static __SPIRV_overloadable __SPIRV_inline __global volatile void *
129+
__spirv_GenericCastToPtr_ToGlobal(__generic volatile void *p,
130+
int) SPIRV_NOEXCEPT {
117131
return (__global volatile void *)p;
118132
}
119-
__SPIRV_overloadable __SPIRV_inline __global const volatile void *
120-
__spirv_GenericCastToPtr_ToGlobal(__generic const volatile void *p, int) {
133+
static __SPIRV_overloadable __SPIRV_inline __global const volatile void *
134+
__spirv_GenericCastToPtr_ToGlobal(__generic const volatile void *p,
135+
int) SPIRV_NOEXCEPT {
121136
return (__global const volatile void *)p;
122137
}
123-
__SPIRV_overloadable __SPIRV_inline __local void *
124-
__spirv_GenericCastToPtr_ToLocal(__generic void *p, int) {
138+
static __SPIRV_overloadable __SPIRV_inline __local void *
139+
__spirv_GenericCastToPtr_ToLocal(__generic void *p, int) SPIRV_NOEXCEPT {
125140
return (__local void *)p;
126141
}
127-
__SPIRV_overloadable __SPIRV_inline __local const void *
128-
__spirv_GenericCastToPtr_ToLocal(__generic const void *p, int) {
142+
static __SPIRV_overloadable __SPIRV_inline __local const void *
143+
__spirv_GenericCastToPtr_ToLocal(__generic const void *p, int) SPIRV_NOEXCEPT {
129144
return (__local const void *)p;
130145
}
131-
__SPIRV_overloadable __SPIRV_inline __local volatile void *
132-
__spirv_GenericCastToPtr_ToLocal(__generic volatile void *p, int) {
146+
static __SPIRV_overloadable __SPIRV_inline __local volatile void *
147+
__spirv_GenericCastToPtr_ToLocal(__generic volatile void *p,
148+
int) SPIRV_NOEXCEPT {
133149
return (__local volatile void *)p;
134150
}
135-
__SPIRV_overloadable __SPIRV_inline __local const volatile void *
136-
__spirv_GenericCastToPtr_ToLocal(__generic const volatile void *p, int) {
151+
static __SPIRV_overloadable __SPIRV_inline __local const volatile void *
152+
__spirv_GenericCastToPtr_ToLocal(__generic const volatile void *p,
153+
int) SPIRV_NOEXCEPT {
137154
return (__local const volatile void *)p;
138155
}
139-
__SPIRV_overloadable __SPIRV_inline __private void *
140-
__spirv_GenericCastToPtr_ToPrivate(__generic void *p, int) {
156+
static __SPIRV_overloadable __SPIRV_inline __private void *
157+
__spirv_GenericCastToPtr_ToPrivate(__generic void *p, int) SPIRV_NOEXCEPT {
141158
return (__private void *)p;
142159
}
143-
__SPIRV_overloadable __SPIRV_inline __private const void *
144-
__spirv_GenericCastToPtr_ToPrivate(__generic const void *p, int) {
160+
static __SPIRV_overloadable __SPIRV_inline __private const void *
161+
__spirv_GenericCastToPtr_ToPrivate(__generic const void *p,
162+
int) SPIRV_NOEXCEPT {
145163
return (__private const void *)p;
146164
}
147-
__SPIRV_overloadable __SPIRV_inline __private volatile void *
148-
__spirv_GenericCastToPtr_ToPrivate(__generic volatile void *p, int) {
165+
static __SPIRV_overloadable __SPIRV_inline __private volatile void *
166+
__spirv_GenericCastToPtr_ToPrivate(__generic volatile void *p,
167+
int) SPIRV_NOEXCEPT {
149168
return (__private volatile void *)p;
150169
}
151-
__SPIRV_overloadable __SPIRV_inline __private const volatile void *
152-
__spirv_GenericCastToPtr_ToPrivate(__generic const volatile void *p, int) {
170+
static __SPIRV_overloadable __SPIRV_inline __private const volatile void *
171+
__spirv_GenericCastToPtr_ToPrivate(__generic const volatile void *p,
172+
int) SPIRV_NOEXCEPT {
153173
return (__private const volatile void *)p;
154174
}
155175

@@ -169,6 +189,7 @@ __spirv_GenericCastToPtr_ToPrivate(__generic const volatile void *p, int) {
169189
#undef _SPIRV_AVAILABILITY
170190
#undef _SPIRV_AVAILABILITY_STAGE
171191

192+
#pragma pop_macro("SPIRV_NOEXCEPT")
172193
#pragma clang diagnostic pop
173194

174195
#endif /* __SPIRV_BUILTIN_VARS_H */

Diff for: clang/lib/Sema/SPIRVBuiltins.td

-9
Original file line numberDiff line numberDiff line change
@@ -847,15 +847,6 @@ foreach AS = [GlobalAS, LocalAS, PrivateAS] in {
847847
def : SPVBuiltin<"GenericCastToPtrExplicit", [PointerType<Char, AS>, PointerType<Char, GenericAS>], Attr.Const>;
848848
}
849849

850-
foreach Ty = [Void, ConstType<Void>, VolatileType<Void>, VolatileType<ConstType<Void>>] in {
851-
def : SPVBuiltin<"GenericCastToPtrExplicit_ToGlobal", [PointerType<Ty, GlobalAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
852-
def : SPVBuiltin<"GenericCastToPtrExplicit_ToLocal", [PointerType<Ty, LocalAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
853-
def : SPVBuiltin<"GenericCastToPtrExplicit_ToPrivate", [PointerType<Ty, PrivateAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
854-
def : SPVBuiltin<"GenericCastToPtr_ToGlobal", [PointerType<Ty, GlobalAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
855-
def : SPVBuiltin<"GenericCastToPtr_ToLocal", [PointerType<Ty, LocalAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
856-
def : SPVBuiltin<"GenericCastToPtr_ToPrivate", [PointerType<Ty, PrivateAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
857-
}
858-
859850
foreach Type = TLFloat.List in {
860851
foreach v = [2, 3, 4, 8, 16] in {
861852
def : SPVBuiltin<"VectorTimesScalar", [VectorType<Type, v>, VectorType<Type, v>, Type], Attr.Const>;

Diff for: clang/lib/Sema/SemaChecking.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -1944,7 +1944,9 @@ bool Sema::CheckTSBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
19441944
case llvm::Triple::spirv:
19451945
case llvm::Triple::spirv32:
19461946
case llvm::Triple::spirv64:
1947-
return SPIRV().CheckSPIRVBuiltinFunctionCall(BuiltinID, TheCall);
1947+
if (TI.getTriple().getOS() != llvm::Triple::OSType::AMDHSA)
1948+
return SPIRV().CheckSPIRVBuiltinFunctionCall(BuiltinID, TheCall);
1949+
return false;
19481950
case llvm::Triple::systemz:
19491951
return SystemZ().CheckSystemZBuiltinFunctionCall(BuiltinID, TheCall);
19501952
case llvm::Triple::x86:

Diff for: clang/test/Driver/sycl-offload-new-driver.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
/// Check the toolflow for SYCL compilation using new offload model
2727
// RUN: %clangxx -### --target=x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64 --offload-new-driver %s 2>&1 | FileCheck -check-prefix=CHK-FLOW %s
28-
// CHK-FLOW: clang{{.*}} "-cc1" "-triple" "spir64-unknown-unknown" "-aux-triple" "x86_64-unknown-linux-gnu" "-fsycl-is-device" {{.*}} "-fsycl-int-header=[[HEADER:.*]].h" "-fsycl-int-footer=[[FOOTER:.*]].h" {{.*}} "--offload-new-driver" {{.*}} "-o" "[[CC1DEVOUT:.*]]" "-x" "c++" "[[INPUT:.*]]"
28+
// CHK-FLOW: clang{{.*}} "-cc1" "-triple" "spir64-unknown-unknown" "-aux-triple" "x86_64-unknown-linux-gnu" "-fsycl-is-device" {{.*}} "-fsycl-int-header=[[HEADER:.*]].h" "-fsycl-int-footer=[[FOOTER:[^"]*]].h" {{.*}} "--offload-new-driver" {{.*}} "-o" "[[CC1DEVOUT:.*]]" "-x" "c++" "[[INPUT:.*]]"
2929
// CHK-FLOW-NEXT: clang-offload-packager{{.*}} "-o" "[[PACKOUT:.*]]" "--image=file=[[CC1DEVOUT]],triple=spir64-unknown-unknown,arch=generic,kind=sycl{{.*}}"
3030
// CHK-FLOW-NEXT: clang{{.*}} "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}} "-fsycl-is-host"{{.*}} "-include-internal-header" "[[HEADER]].h" "-dependency-filter" "[[HEADER]].h" {{.*}} "-include-internal-footer" "[[FOOTER]].h" "-dependency-filter" "[[FOOTER]].h"{{.*}} "--offload-new-driver" {{.*}} "-fembed-offload-object=[[PACKOUT]]" {{.*}} "-o" "[[CC1FINALOUT:.*]]" "-x" "c++" "[[INPUT]]"
3131
// CHK-FLOW-NEXT: clang-linker-wrapper{{.*}} "--host-triple=x86_64-unknown-linux-gnu"{{.*}} "--linker-path={{.*}}/ld" {{.*}} "[[CC1FINALOUT]]"

Diff for: clang/test/Headers/spirv_functions.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33

44
// CHECK: define spir_func void @_Z9test_castPi
5-
// CHECK: call noundef ptr addrspace(1) @llvm.spv.generic.cast.to.ptr.explicit.p1.p4
6-
// CHECK: call noundef ptr addrspace(3) @llvm.spv.generic.cast.to.ptr.explicit.p3.p4
7-
// CHECK: call noundef ptr @llvm.spv.generic.cast.to.ptr.explicit.p0.p4
5+
// CHECK: call noundef ptr addrspace(1) @llvm.spv.generic.cast.to.ptr.explicit.p1
6+
// CHECK: call noundef ptr addrspace(3) @llvm.spv.generic.cast.to.ptr.explicit.p3
7+
// CHECK: call noundef ptr @llvm.spv.generic.cast.to.ptr.explicit.p0
88
// CHECK: addrspacecast ptr addrspace(4) %{{.*}} to ptr addrspace(1)
99
// CHECK: addrspacecast ptr addrspace(4) %{{.*}} to ptr addrspace(3)
1010
// CHECK: addrspacecast ptr addrspace(4) %{{.*}} to ptr

Diff for: llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -3134,7 +3134,8 @@ bool SPIRVInstructionSelector::selectIntrinsic(Register ResVReg,
31343134
case Intrinsic::spv_generic_cast_to_ptr_explicit: {
31353135
bool Result = true;
31363136
Register PtrReg = I.getOperand(I.getNumExplicitDefs() + 1).getReg();
3137-
SPIRV::StorageClass::StorageClass ResSC = GR.getPointerStorageClass(ResType);
3137+
SPIRV::StorageClass::StorageClass ResSC =
3138+
GR.getPointerStorageClass(ResType);
31383139
Result &= isGenericCastablePtr(ResSC);
31393140
return Result && BuildMI(BB, I, I.getDebugLoc(),
31403141
TII.get(SPIRV::OpGenericCastToPtrExplicit))

0 commit comments

Comments
 (0)