Skip to content

Commit 1dfbaa8

Browse files
committed
Merge from 'main' to 'sycl-web' (18 commits)
CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChain.cpp CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/AMDGPU.cpp CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/AMDGPU.h CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/AMDGPUOpenMP.h CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/HIPAMD.cpp CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/HIPAMD.h CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/HIPSPV.h
2 parents a708db8 + 073460a commit 1dfbaa8

File tree

64 files changed

+2725
-1214
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2725
-1214
lines changed

clang/include/clang/Basic/CodeGenOptions.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,10 @@ CODEGENOPT(SpeculativeLoadHardening, 1, 0, Benign) ///< Enable speculative load
313313
CODEGENOPT(FineGrainedBitfieldAccesses, 1, 0, Benign) ///< Enable fine-grained bitfield accesses.
314314
CODEGENOPT(StrictEnums , 1, 0, Benign) ///< Optimize based on strict enum definition.
315315
CODEGENOPT(StrictVTablePointers, 1, 0, Benign) ///< Optimize based on the strict vtable pointers
316-
CODEGENOPT(TimePasses , 1, 0, Benign) ///< Set when -ftime-report or -ftime-report= or -ftime-report-json is enabled.
316+
CODEGENOPT(TimePasses , 1, 0, Benign) ///< Set when -ftime-report, -ftime-report=, -ftime-report-json, or -stats-file-timers is enabled.
317317
CODEGENOPT(TimePassesPerRun , 1, 0, Benign) ///< Set when -ftime-report=per-pass-run is enabled.
318318
CODEGENOPT(TimePassesJson , 1, 0, Benign) ///< Set when -ftime-report-json is enabled.
319+
CODEGENOPT(TimePassesStatsFile , 1, 0, Benign) ///< Set when -stats-file-timers is enabled.
319320
CODEGENOPT(TimeTrace , 1, 0, Benign) ///< Set when -ftime-trace is enabled.
320321
VALUE_CODEGENOPT(TimeTraceGranularity, 32, 500, Benign) ///< Minimum time granularity (in microseconds),
321322
///< traced by time profiler

clang/include/clang/Driver/Options.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8687,6 +8687,9 @@ def stats_file : Joined<["-"], "stats-file=">,
86878687
def stats_file_append : Flag<["-"], "stats-file-append">,
86888688
HelpText<"If stats should be appended to stats-file instead of overwriting it">,
86898689
MarshallingInfoFlag<FrontendOpts<"AppendStats">>;
8690+
def stats_file_timers : Flag<["-"], "stats-file-timers">,
8691+
HelpText<"If stats should include timers.">,
8692+
MarshallingInfoFlag<CodeGenOpts<"TimePassesStatsFile">>;
86908693
def fdump_record_layouts_simple : Flag<["-"], "fdump-record-layouts-simple">,
86918694
HelpText<"Dump record layout information in a simple form used for testing">,
86928695
MarshallingInfoFlag<LangOpts<"DumpRecordLayoutsSimple">>;

clang/lib/AST/ByteCode/Compiler.cpp

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,6 @@ using APSInt = llvm::APSInt;
2525
namespace clang {
2626
namespace interp {
2727

28-
static bool refersToUnion(const Expr *E) {
29-
for (;;) {
30-
if (const auto *ME = dyn_cast<MemberExpr>(E)) {
31-
if (const auto *FD = dyn_cast<FieldDecl>(ME->getMemberDecl());
32-
FD && FD->getParent()->isUnion())
33-
return true;
34-
E = ME->getBase();
35-
continue;
36-
}
37-
38-
if (const auto *ASE = dyn_cast<ArraySubscriptExpr>(E)) {
39-
E = ASE->getBase()->IgnoreImplicit();
40-
continue;
41-
}
42-
43-
if (const auto *ICE = dyn_cast<ImplicitCastExpr>(E);
44-
ICE && (ICE->getCastKind() == CK_NoOp ||
45-
ICE->getCastKind() == CK_DerivedToBase ||
46-
ICE->getCastKind() == CK_UncheckedDerivedToBase)) {
47-
E = ICE->getSubExpr();
48-
continue;
49-
}
50-
51-
break;
52-
}
53-
return false;
54-
}
55-
5628
static std::optional<bool> getBoolValue(const Expr *E) {
5729
if (const auto *CE = dyn_cast_if_present<ConstantExpr>(E);
5830
CE && CE->hasAPValueResult() &&
@@ -5401,6 +5373,53 @@ bool Compiler<Emitter>::maybeEmitDeferredVarInit(const VarDecl *VD) {
54015373
return true;
54025374
}
54035375

5376+
static bool hasTrivialDefaultCtorParent(const FieldDecl *FD) {
5377+
assert(FD);
5378+
assert(FD->getParent()->isUnion());
5379+
const auto *CXXRD = dyn_cast<CXXRecordDecl>(FD->getParent());
5380+
return !CXXRD || CXXRD->hasTrivialDefaultConstructor();
5381+
}
5382+
5383+
template <class Emitter> bool Compiler<Emitter>::refersToUnion(const Expr *E) {
5384+
for (;;) {
5385+
if (const auto *ME = dyn_cast<MemberExpr>(E)) {
5386+
if (const auto *FD = dyn_cast<FieldDecl>(ME->getMemberDecl());
5387+
FD && FD->getParent()->isUnion() && hasTrivialDefaultCtorParent(FD))
5388+
return true;
5389+
E = ME->getBase();
5390+
continue;
5391+
}
5392+
5393+
if (const auto *ASE = dyn_cast<ArraySubscriptExpr>(E)) {
5394+
E = ASE->getBase()->IgnoreImplicit();
5395+
continue;
5396+
}
5397+
5398+
if (const auto *ICE = dyn_cast<ImplicitCastExpr>(E);
5399+
ICE && (ICE->getCastKind() == CK_NoOp ||
5400+
ICE->getCastKind() == CK_DerivedToBase ||
5401+
ICE->getCastKind() == CK_UncheckedDerivedToBase)) {
5402+
E = ICE->getSubExpr();
5403+
continue;
5404+
}
5405+
5406+
if (const auto *This = dyn_cast<CXXThisExpr>(E)) {
5407+
const auto *ThisRecord =
5408+
This->getType()->getPointeeType()->getAsRecordDecl();
5409+
if (!ThisRecord->isUnion())
5410+
return false;
5411+
// Otherwise, always activate if we're in the ctor.
5412+
if (const auto *Ctor =
5413+
dyn_cast_if_present<CXXConstructorDecl>(CompilingFunction))
5414+
return Ctor->getParent() == ThisRecord;
5415+
return false;
5416+
}
5417+
5418+
break;
5419+
}
5420+
return false;
5421+
}
5422+
54045423
template <class Emitter>
54055424
bool Compiler<Emitter>::visitDeclStmt(const DeclStmt *DS,
54065425
bool EvaluateConditionDecl) {
@@ -5933,16 +5952,15 @@ bool Compiler<Emitter>::compileConstructor(const CXXConstructorDecl *Ctor) {
59335952
return false;
59345953

59355954
if (OptPrimType T = this->classify(InitExpr)) {
5955+
if (Activate && !this->emitActivateThisField(FieldOffset, InitExpr))
5956+
return false;
5957+
59365958
if (!this->visit(InitExpr))
59375959
return false;
59385960

59395961
bool BitField = F->isBitField();
5940-
if (BitField && Activate)
5941-
return this->emitInitThisBitFieldActivate(*T, F, FieldOffset, InitExpr);
59425962
if (BitField)
59435963
return this->emitInitThisBitField(*T, F, FieldOffset, InitExpr);
5944-
if (Activate)
5945-
return this->emitInitThisFieldActivate(*T, FieldOffset, InitExpr);
59465964
return this->emitInitThisField(*T, FieldOffset, InitExpr);
59475965
}
59485966
// Non-primitive case. Get a pointer to the field-to-initialize

clang/lib/AST/ByteCode/Compiler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,8 @@ class Compiler : public ConstStmtVisitor<Compiler<Emitter>, bool>,
401401
bool checkLiteralType(const Expr *E);
402402
bool maybeEmitDeferredVarInit(const VarDecl *VD);
403403

404+
bool refersToUnion(const Expr *E);
405+
404406
protected:
405407
/// Variable to storage mapping.
406408
llvm::DenseMap<const ValueDecl *, Scope::Local> Locals;

clang/lib/AST/ByteCode/Interp.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,6 +1983,16 @@ static inline bool Activate(InterpState &S, CodePtr OpPC) {
19831983
return true;
19841984
}
19851985

1986+
static inline bool ActivateThisField(InterpState &S, CodePtr OpPC, uint32_t I) {
1987+
if (S.checkingPotentialConstantExpression())
1988+
return false;
1989+
1990+
const Pointer &Ptr = S.Current->getThis();
1991+
assert(Ptr.atField(I).canBeInitialized());
1992+
Ptr.atField(I).activate();
1993+
return true;
1994+
}
1995+
19861996
template <PrimType Name, class T = typename PrimConv<Name>::T>
19871997
bool StoreActivate(InterpState &S, CodePtr OpPC) {
19881998
const T &Value = S.Stk.pop<T>();

clang/lib/AST/ByteCode/Opcodes.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ def StoreBitFieldActivate : StoreBitFieldOpcode {}
510510
def StoreBitFieldActivatePop : StoreBitFieldOpcode {}
511511

512512
def Activate : Opcode {}
513+
def ActivateThisField : Opcode { let Args = [ArgUint32]; }
513514

514515
// [Pointer, Value] -> []
515516
def Init : StoreOpcode {}

clang/lib/Driver/ToolChain.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,9 +1747,8 @@ void ToolChain::addSYCLIncludeArgs(const ArgList &DriverArgs,
17471747
ArgStringList &CC1Args) const {}
17481748

17491749
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
1750-
ToolChain::getDeviceLibs(
1751-
const ArgList &DriverArgs,
1752-
const Action::OffloadKind DeviceOffloadingKind) const {
1750+
ToolChain::getDeviceLibs(const ArgList &DriverArgs,
1751+
const Action::OffloadKind DeviceOffloadingKind) const {
17531752
return {};
17541753
}
17551754

clang/lib/Driver/ToolChains/AMDGPU.cpp

Lines changed: 82 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,68 @@ using namespace clang::driver::toolchains;
3131
using namespace clang;
3232
using namespace llvm::opt;
3333

34+
RocmInstallationDetector::CommonBitcodeLibsPreferences::
35+
CommonBitcodeLibsPreferences(const Driver &D,
36+
const llvm::opt::ArgList &DriverArgs,
37+
StringRef GPUArch,
38+
const Action::OffloadKind DeviceOffloadingKind,
39+
const bool NeedsASanRT)
40+
: ABIVer(DeviceLibABIVersion::fromCodeObjectVersion(
41+
tools::getAMDGPUCodeObjectVersion(D, DriverArgs))) {
42+
const auto Kind = llvm::AMDGPU::parseArchAMDGCN(GPUArch);
43+
const unsigned ArchAttr = llvm::AMDGPU::getArchAttrAMDGCN(Kind);
44+
45+
IsOpenMP = DeviceOffloadingKind == Action::OFK_OpenMP;
46+
47+
const bool HasWave32 = (ArchAttr & llvm::AMDGPU::FEATURE_WAVE32);
48+
Wave64 =
49+
!HasWave32 || DriverArgs.hasFlag(options::OPT_mwavefrontsize64,
50+
options::OPT_mno_wavefrontsize64, false);
51+
52+
const bool IsKnownOffloading = DeviceOffloadingKind == Action::OFK_OpenMP ||
53+
DeviceOffloadingKind == Action::OFK_HIP;
54+
55+
// Default to enabling f32 denormals on subtargets where fma is fast with
56+
// denormals
57+
const bool DefaultDAZ =
58+
(Kind == llvm::AMDGPU::GK_NONE)
59+
? false
60+
: !((ArchAttr & llvm::AMDGPU::FEATURE_FAST_FMA_F32) &&
61+
(ArchAttr & llvm::AMDGPU::FEATURE_FAST_DENORMAL_F32));
62+
// TODO: There are way too many flags that change this. Do we need to
63+
// check them all?
64+
DAZ = IsKnownOffloading
65+
? DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
66+
options::OPT_fno_gpu_flush_denormals_to_zero,
67+
DefaultDAZ)
68+
: DriverArgs.hasArg(options::OPT_cl_denorms_are_zero) || DefaultDAZ;
69+
70+
FiniteOnly = DriverArgs.hasArg(options::OPT_cl_finite_math_only) ||
71+
DriverArgs.hasFlag(options::OPT_ffinite_math_only,
72+
options::OPT_fno_finite_math_only, false);
73+
74+
UnsafeMathOpt =
75+
DriverArgs.hasArg(options::OPT_cl_unsafe_math_optimizations) ||
76+
DriverArgs.hasFlag(options::OPT_funsafe_math_optimizations,
77+
options::OPT_fno_unsafe_math_optimizations, false);
78+
79+
FastRelaxedMath = DriverArgs.hasArg(options::OPT_cl_fast_relaxed_math) ||
80+
DriverArgs.hasFlag(options::OPT_ffast_math,
81+
options::OPT_fno_fast_math, false);
82+
83+
const bool DefaultSqrt = IsKnownOffloading ? true : false;
84+
CorrectSqrt =
85+
DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt) ||
86+
DriverArgs.hasFlag(
87+
options::OPT_fhip_fp32_correctly_rounded_divide_sqrt,
88+
options::OPT_fno_hip_fp32_correctly_rounded_divide_sqrt, DefaultSqrt);
89+
// GPU Sanitizer currently only supports ASan and is enabled through host
90+
// ASan.
91+
GPUSan = (DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
92+
options::OPT_fno_gpu_sanitize, true) &&
93+
NeedsASanRT);
94+
}
95+
3496
void RocmInstallationDetector::scanLibDevicePath(llvm::StringRef Path) {
3597
assert(!Path.empty());
3698

@@ -884,33 +946,14 @@ void ROCMToolChain::addClangTargetOptions(
884946
ABIVer))
885947
return;
886948

887-
bool Wave64 = isWave64(DriverArgs, Kind);
888-
// TODO: There are way too many flags that change this. Do we need to check
889-
// them all?
890-
bool DAZ = DriverArgs.hasArg(options::OPT_cl_denorms_are_zero) ||
891-
getDefaultDenormsAreZeroForTarget(Kind);
892-
bool FiniteOnly = DriverArgs.hasArg(options::OPT_cl_finite_math_only);
893-
894-
bool UnsafeMathOpt =
895-
DriverArgs.hasArg(options::OPT_cl_unsafe_math_optimizations);
896-
bool FastRelaxedMath = DriverArgs.hasArg(options::OPT_cl_fast_relaxed_math);
897-
bool CorrectSqrt =
898-
DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
899-
900-
// GPU Sanitizer currently only supports ASan and is enabled through host
901-
// ASan.
902-
bool GPUSan = DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
903-
options::OPT_fno_gpu_sanitize, true) &&
904-
getSanitizerArgs(DriverArgs).needsAsanRt();
905-
906949
// Add the OpenCL specific bitcode library.
907950
llvm::SmallVector<BitCodeLibraryInfo, 12> BCLibs;
908951
BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
909952

910953
// Add the generic set of libraries.
911954
BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
912-
DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
913-
FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
955+
DriverArgs, LibDeviceFile, GpuArch, DeviceOffloadingKind,
956+
getSanitizerArgs(DriverArgs).needsAsanRt()));
914957

915958
for (auto [BCFile, Internalize] : BCLibs) {
916959
if (Internalize)
@@ -947,35 +990,37 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
947990

948991
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
949992
RocmInstallationDetector::getCommonBitcodeLibs(
950-
const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
951-
bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
952-
bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool GPUSan,
953-
bool isOpenMP) const {
993+
const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile,
994+
StringRef GPUArch, const Action::OffloadKind DeviceOffloadingKind,
995+
const bool NeedsASanRT) const {
954996
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> BCLibs;
955997

998+
CommonBitcodeLibsPreferences Pref{D, DriverArgs, GPUArch,
999+
DeviceOffloadingKind, NeedsASanRT};
1000+
9561001
auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
9571002
bool Internalize = true) {
9581003
BCLib.ShouldInternalize = Internalize;
9591004
BCLibs.emplace_back(BCLib);
9601005
};
9611006
auto AddSanBCLibs = [&]() {
962-
if (GPUSan)
1007+
if (Pref.GPUSan)
9631008
AddBCLib(getAsanRTLPath(), false);
9641009
};
9651010

9661011
AddSanBCLibs();
9671012
AddBCLib(getOCMLPath());
968-
if (!isOpenMP)
1013+
if (!Pref.IsOpenMP)
9691014
AddBCLib(getOCKLPath());
970-
else if (GPUSan && isOpenMP)
1015+
else if (Pref.GPUSan && Pref.IsOpenMP)
9711016
AddBCLib(getOCKLPath(), false);
972-
AddBCLib(getDenormalsAreZeroPath(DAZ));
973-
AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath));
974-
AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath));
975-
AddBCLib(getCorrectlyRoundedSqrtPath(CorrectSqrt));
976-
AddBCLib(getWavefrontSize64Path(Wave64));
1017+
AddBCLib(getDenormalsAreZeroPath(Pref.DAZ));
1018+
AddBCLib(getUnsafeMathPath(Pref.UnsafeMathOpt || Pref.FastRelaxedMath));
1019+
AddBCLib(getFiniteOnlyPath(Pref.FiniteOnly || Pref.FastRelaxedMath));
1020+
AddBCLib(getCorrectlyRoundedSqrtPath(Pref.CorrectSqrt));
1021+
AddBCLib(getWavefrontSize64Path(Pref.Wave64));
9771022
AddBCLib(LibDeviceFile);
978-
auto ABIVerPath = getABIVersionPath(ABIVer);
1023+
auto ABIVerPath = getABIVersionPath(Pref.ABIVer);
9791024
if (!ABIVerPath.empty())
9801025
AddBCLib(ABIVerPath);
9811026

@@ -985,7 +1030,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
9851030
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
9861031
ROCMToolChain::getCommonDeviceLibNames(
9871032
const llvm::opt::ArgList &DriverArgs, const std::string &GPUArch,
988-
const Action::OffloadKind DeviceOffloadingKind, bool isOpenMP) const {
1033+
Action::OffloadKind DeviceOffloadingKind) const {
9891034
auto Kind = llvm::AMDGPU::parseArchAMDGCN(GPUArch);
9901035
const StringRef CanonArch = llvm::AMDGPU::getArchNameAMDGCN(Kind);
9911036

@@ -996,38 +1041,9 @@ ROCMToolChain::getCommonDeviceLibNames(
9961041
ABIVer))
9971042
return {};
9981043

999-
// If --hip-device-lib is not set, add the default bitcode libraries.
1000-
// TODO: There are way too many flags that change this. Do we need to check
1001-
// them all?
1002-
bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
1003-
options::OPT_fno_gpu_flush_denormals_to_zero,
1004-
getDefaultDenormsAreZeroForTarget(Kind));
1005-
bool FiniteOnly = DriverArgs.hasFlag(
1006-
options::OPT_ffinite_math_only, options::OPT_fno_finite_math_only, false);
1007-
bool UnsafeMathOpt =
1008-
DriverArgs.hasFlag(options::OPT_funsafe_math_optimizations,
1009-
options::OPT_fno_unsafe_math_optimizations, false);
1010-
bool FastRelaxedMath = DriverArgs.hasFlag(options::OPT_ffast_math,
1011-
options::OPT_fno_fast_math, false);
1012-
bool CorrectSqrt = false;
1013-
if (DeviceOffloadingKind == Action::OFK_SYCL)
1014-
// When using SYCL, sqrt is only correctly rounded if the flag is specified
1015-
CorrectSqrt = DriverArgs.hasArg(options::OPT_foffload_fp32_prec_sqrt);
1016-
else
1017-
CorrectSqrt = DriverArgs.hasFlag(
1018-
options::OPT_fhip_fp32_correctly_rounded_divide_sqrt,
1019-
options::OPT_fno_hip_fp32_correctly_rounded_divide_sqrt, true);
1020-
bool Wave64 = isWave64(DriverArgs, Kind);
1021-
1022-
// GPU Sanitizer currently only supports ASan and is enabled through host
1023-
// ASan.
1024-
bool GPUSan = DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
1025-
options::OPT_fno_gpu_sanitize, true) &&
1026-
getSanitizerArgs(DriverArgs).needsAsanRt();
1027-
10281044
return RocmInstallation->getCommonBitcodeLibs(
1029-
DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
1030-
FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, isOpenMP);
1045+
DriverArgs, LibDeviceFile, GPUArch, DeviceOffloadingKind,
1046+
getSanitizerArgs(DriverArgs).needsAsanRt());
10311047
}
10321048

10331049
bool AMDGPUToolChain::shouldSkipSanitizeOption(

clang/lib/Driver/ToolChains/AMDGPU.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain {
147147
llvm::SmallVector<BitCodeLibraryInfo, 12>
148148
getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs,
149149
const std::string &GPUArch,
150-
const Action::OffloadKind DeviceOffloadingKind,
151-
bool isOpenMP = false) const;
150+
Action::OffloadKind DeviceOffloadingKind) const;
152151

153152
SanitizerMask getSupportedSanitizers() const override {
154153
return SanitizerKind::Address;

0 commit comments

Comments
 (0)