Skip to content

Commit b02068a

Browse files
committed
merge main into amd-staging
Change-Id: I720b9af00fc7da345e08b65f31fdb1dc20c0dad6
2 parents fbd615c + cd093c2 commit b02068a

File tree

84 files changed

+2643
-714
lines changed

Some content is hidden

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

84 files changed

+2643
-714
lines changed

bolt/lib/Core/BinaryEmitter.cpp

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -761,30 +761,16 @@ void BinaryEmitter::emitJumpTables(const BinaryFunction &BF) {
761761
continue;
762762
if (opts::PrintJumpTables)
763763
JT.print(BC.outs());
764-
if (opts::JumpTables == JTS_BASIC && BC.HasRelocations) {
764+
if (opts::JumpTables == JTS_BASIC) {
765765
JT.updateOriginal();
766766
} else {
767767
MCSection *HotSection, *ColdSection;
768-
if (opts::JumpTables == JTS_BASIC) {
769-
// In non-relocation mode we have to emit jump tables in local sections.
770-
// This way we only overwrite them when the corresponding function is
771-
// overwritten.
772-
std::string Name = ".local." + JT.Labels[0]->getName().str();
773-
std::replace(Name.begin(), Name.end(), '/', '.');
774-
BinarySection &Section =
775-
BC.registerOrUpdateSection(Name, ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
776-
Section.setAnonymous(true);
777-
JT.setOutputSection(Section);
778-
HotSection = BC.getDataSection(Name);
779-
ColdSection = HotSection;
768+
if (BF.isSimple()) {
769+
HotSection = ReadOnlySection;
770+
ColdSection = ReadOnlyColdSection;
780771
} else {
781-
if (BF.isSimple()) {
782-
HotSection = ReadOnlySection;
783-
ColdSection = ReadOnlyColdSection;
784-
} else {
785-
HotSection = BF.hasProfile() ? ReadOnlySection : ReadOnlyColdSection;
786-
ColdSection = HotSection;
787-
}
772+
HotSection = BF.hasProfile() ? ReadOnlySection : ReadOnlyColdSection;
773+
ColdSection = HotSection;
788774
}
789775
emitJumpTable(JT, HotSection, ColdSection);
790776
}

bolt/lib/Rewrite/RewriteInstance.cpp

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ namespace opts {
7878
extern cl::list<std::string> HotTextMoveSections;
7979
extern cl::opt<bool> Hugify;
8080
extern cl::opt<bool> Instrument;
81-
extern cl::opt<JumpTableSupportLevel> JumpTables;
8281
extern cl::opt<bool> KeepNops;
8382
extern cl::opt<bool> Lite;
8483
extern cl::list<std::string> ReorderData;
@@ -3848,20 +3847,6 @@ void RewriteInstance::mapCodeSections(BOLTLinker::SectionMapper MapSection) {
38483847
assert(Function.getImageSize() <= Function.getMaxSize() &&
38493848
"Unexpected large function");
38503849

3851-
// Map jump tables if updating in-place.
3852-
if (opts::JumpTables == JTS_BASIC) {
3853-
for (auto &JTI : Function.JumpTables) {
3854-
JumpTable *JT = JTI.second;
3855-
BinarySection &Section = JT->getOutputSection();
3856-
Section.setOutputAddress(JT->getAddress());
3857-
Section.setOutputFileOffset(getFileOffsetForAddress(JT->getAddress()));
3858-
LLVM_DEBUG(dbgs() << "BOLT-DEBUG: mapping JT " << Section.getName()
3859-
<< " to 0x" << Twine::utohexstr(JT->getAddress())
3860-
<< '\n');
3861-
MapSection(Section, JT->getAddress());
3862-
}
3863-
}
3864-
38653850
if (!Function.isSplit())
38663851
continue;
38673852

@@ -5644,26 +5629,8 @@ void RewriteInstance::rewriteFile() {
56445629
if (Function->getImageAddress() == 0 || Function->getImageSize() == 0)
56455630
continue;
56465631

5647-
if (Function->getImageSize() > Function->getMaxSize()) {
5648-
assert(!BC->isX86() && "Unexpected large function.");
5649-
if (opts::Verbosity >= 1)
5650-
BC->errs() << "BOLT-WARNING: new function size (0x"
5651-
<< Twine::utohexstr(Function->getImageSize())
5652-
<< ") is larger than maximum allowed size (0x"
5653-
<< Twine::utohexstr(Function->getMaxSize())
5654-
<< ") for function " << *Function << '\n';
5655-
5656-
// Remove jump table sections that this function owns in non-reloc mode
5657-
// because we don't want to write them anymore.
5658-
if (!BC->HasRelocations && opts::JumpTables == JTS_BASIC) {
5659-
for (auto &JTI : Function->JumpTables) {
5660-
JumpTable *JT = JTI.second;
5661-
BinarySection &Section = JT->getOutputSection();
5662-
BC->deregisterSection(Section);
5663-
}
5664-
}
5665-
continue;
5666-
}
5632+
assert(Function->getImageSize() <= Function->getMaxSize() &&
5633+
"Unexpected large function");
56675634

56685635
const auto HasAddress = [](const FunctionFragment &FF) {
56695636
return FF.empty() ||

clang/include/clang/AST/OpenACCClause.h

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,28 @@ class OpenACCFinalizeClause : public OpenACCClause {
9898
}
9999
};
100100

101+
// Represents the 'if_present' clause.
102+
class OpenACCIfPresentClause : public OpenACCClause {
103+
protected:
104+
OpenACCIfPresentClause(SourceLocation BeginLoc, SourceLocation EndLoc)
105+
: OpenACCClause(OpenACCClauseKind::IfPresent, BeginLoc, EndLoc) {}
106+
107+
public:
108+
static bool classof(const OpenACCClause *C) {
109+
return C->getClauseKind() == OpenACCClauseKind::IfPresent;
110+
}
111+
112+
static OpenACCIfPresentClause *
113+
Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc);
114+
115+
child_range children() {
116+
return child_range(child_iterator(), child_iterator());
117+
}
118+
const_child_range children() const {
119+
return const_child_range(const_child_iterator(), const_child_iterator());
120+
}
121+
};
122+
101123
// Represents the 'independent' clause.
102124
class OpenACCIndependentClause : public OpenACCClause {
103125
protected:
@@ -722,6 +744,28 @@ class OpenACCAttachClause final
722744
ArrayRef<Expr *> VarList, SourceLocation EndLoc);
723745
};
724746

747+
class OpenACCDetachClause final
748+
: public OpenACCClauseWithVarList,
749+
public llvm::TrailingObjects<OpenACCDetachClause, Expr *> {
750+
751+
OpenACCDetachClause(SourceLocation BeginLoc, SourceLocation LParenLoc,
752+
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
753+
: OpenACCClauseWithVarList(OpenACCClauseKind::Detach, BeginLoc, LParenLoc,
754+
EndLoc) {
755+
std::uninitialized_copy(VarList.begin(), VarList.end(),
756+
getTrailingObjects<Expr *>());
757+
setExprs(MutableArrayRef(getTrailingObjects<Expr *>(), VarList.size()));
758+
}
759+
760+
public:
761+
static bool classof(const OpenACCClause *C) {
762+
return C->getClauseKind() == OpenACCClauseKind::Detach;
763+
}
764+
static OpenACCDetachClause *
765+
Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc,
766+
ArrayRef<Expr *> VarList, SourceLocation EndLoc);
767+
};
768+
725769
class OpenACCNoCreateClause final
726770
: public OpenACCClauseWithVarList,
727771
public llvm::TrailingObjects<OpenACCNoCreateClause, Expr *> {

clang/include/clang/Basic/OpenACCClauses.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,15 @@ VISIT_CLAUSE(Create)
3838
CLAUSE_ALIAS(PCreate, Create, true)
3939
CLAUSE_ALIAS(PresentOrCreate, Create, true)
4040
VISIT_CLAUSE(Default)
41+
VISIT_CLAUSE(Detach)
4142
VISIT_CLAUSE(DevicePtr)
4243
VISIT_CLAUSE(DeviceType)
4344
CLAUSE_ALIAS(DType, DeviceType, false)
4445
VISIT_CLAUSE(Finalize)
4546
VISIT_CLAUSE(FirstPrivate)
4647
VISIT_CLAUSE(Gang)
4748
VISIT_CLAUSE(If)
49+
VISIT_CLAUSE(IfPresent)
4850
VISIT_CLAUSE(Independent)
4951
VISIT_CLAUSE(NoCreate)
5052
VISIT_CLAUSE(NumGangs)

clang/include/clang/Basic/arm_sve.td

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2495,3 +2495,34 @@ let SVETargetGuard = "sve2,fp8dot4", SMETargetGuard ="sme,ssve-fp8dot4" in {
24952495
def SVFDOT_LANE_4WAY : SInst<"svdot_lane[_f32_mf8]_fpm", "dd~~i>", "f", MergeNone, "aarch64_sve_fp8_fdot_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_3>]>;
24962496
}
24972497

2498+
let SVETargetGuard = "sve2,fp8fma", SMETargetGuard = "sme,ssve-fp8fma" in {
2499+
// 8-bit floating-point multiply-add long to half-precision (bottom)
2500+
def SVFMLALB : SInst<"svmlalb[_f16_mf8]_fpm", "dd~~>", "h", MergeNone, "aarch64_sve_fp8_fmlalb", [VerifyRuntimeMode, SetsFPMR]>;
2501+
def SVFMLALB_N : SInst<"svmlalb[_n_f16_mf8]_fpm", "dd~!>", "h", MergeNone, "aarch64_sve_fp8_fmlalb", [VerifyRuntimeMode, SetsFPMR]>;
2502+
2503+
// 8-bit floating-point multiply-add long to ha_fpmlf-precision (bottom, indexed)
2504+
def SVFMLALB_LANE : SInst<"svmlalb_lane[_f16_mf8]_fpm", "dd~~i>", "h", MergeNone, "aarch64_sve_fp8_fmlalb_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_15>]>;
2505+
2506+
// 8-bit floating-point multiply-add long to half-precision (top)
2507+
def SVFMLALT : SInst<"svmlalt[_f16_mf8]_fpm", "dd~~>", "h", MergeNone, "aarch64_sve_fp8_fmlalt", [VerifyRuntimeMode, SetsFPMR]>;
2508+
def SVFMLALT_N : SInst<"svmlalt[_n_f16_mf8]_fpm", "dd~!>", "h", MergeNone, "aarch64_sve_fp8_fmlalt", [VerifyRuntimeMode, SetsFPMR]>;
2509+
2510+
// 8-bit floating-point multiply-add long to half-precision (top, indexed)
2511+
def SVFMLALT_LANE : SInst<"svmlalt_lane[_f16_mf8]_fpm", "dd~~i>", "h", MergeNone, "aarch64_sve_fp8_fmlalt_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_15>]>;
2512+
2513+
// 8-bit floating-point multiply-add long long to single-precision (all top/bottom variants)
2514+
def SVFMLALLBB : SInst<"svmlallbb[_f32_mf8]_fpm", "dd~~>", "f", MergeNone, "aarch64_sve_fp8_fmlallbb", [VerifyRuntimeMode, SetsFPMR]>;
2515+
def SVFMLALLBB_N : SInst<"svmlallbb[_n_f32_mf8]_fpm", "dd~!>", "f", MergeNone, "aarch64_sve_fp8_fmlallbb", [VerifyRuntimeMode, SetsFPMR]>;
2516+
def SVFMLALLBT : SInst<"svmlallbt[_f32_mf8]_fpm", "dd~~>", "f", MergeNone, "aarch64_sve_fp8_fmlallbt", [VerifyRuntimeMode, SetsFPMR]>;
2517+
def SVFMLALLBT_N : SInst<"svmlallbt[_n_f32_mf8]_fpm", "dd~!>", "f", MergeNone, "aarch64_sve_fp8_fmlallbt", [VerifyRuntimeMode, SetsFPMR]>;
2518+
def SVFMLALLTB : SInst<"svmlalltb[_f32_mf8]_fpm", "dd~~>", "f", MergeNone, "aarch64_sve_fp8_fmlalltb", [VerifyRuntimeMode, SetsFPMR]>;
2519+
def SVFMLALLTB_N : SInst<"svmlalltb[_n_f32_mf8]_fpm", "dd~!>", "f", MergeNone, "aarch64_sve_fp8_fmlalltb", [VerifyRuntimeMode, SetsFPMR]>;
2520+
def SVFMLALLTT : SInst<"svmlalltt[_f32_mf8]_fpm", "dd~~>", "f", MergeNone, "aarch64_sve_fp8_fmlalltt", [VerifyRuntimeMode, SetsFPMR]>;
2521+
def SVFMLALLTT_N : SInst<"svmlalltt[_n_f32_mf8]_fpm", "dd~!>", "f", MergeNone, "aarch64_sve_fp8_fmlalltt", [VerifyRuntimeMode, SetsFPMR]>;
2522+
2523+
// 8-bit floating-point multiply-add long long to single-precision (indexed, all top/bottom variants)
2524+
def SVFMLALLBB_LANE : SInst<"svmlallbb_lane[_f32_mf8]_fpm", "dd~~i>", "f", MergeNone, "aarch64_sve_fp8_fmlallbb_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_7>]>;
2525+
def SVFMLALLBT_LANE : SInst<"svmlallbt_lane[_f32_mf8]_fpm", "dd~~i>", "f", MergeNone, "aarch64_sve_fp8_fmlallbt_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_7>]>;
2526+
def SVFMLALLTB_LANE : SInst<"svmlalltb_lane[_f32_mf8]_fpm", "dd~~i>", "f", MergeNone, "aarch64_sve_fp8_fmlalltb_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_7>]>;
2527+
def SVFMLALLTT_LANE : SInst<"svmlalltt_lane[_f32_mf8]_fpm", "dd~~i>", "f", MergeNone, "aarch64_sve_fp8_fmlalltt_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_7>]>;
2528+
}

clang/include/clang/Sema/SemaOpenACC.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ class SemaOpenACC : public SemaBase {
399399
ClauseKind == OpenACCClauseKind::PCreate ||
400400
ClauseKind == OpenACCClauseKind::PresentOrCreate ||
401401
ClauseKind == OpenACCClauseKind::Attach ||
402+
ClauseKind == OpenACCClauseKind::Detach ||
402403
ClauseKind == OpenACCClauseKind::DevicePtr ||
403404
ClauseKind == OpenACCClauseKind::Reduction ||
404405
ClauseKind == OpenACCClauseKind::FirstPrivate) &&
@@ -535,6 +536,7 @@ class SemaOpenACC : public SemaBase {
535536
ClauseKind == OpenACCClauseKind::PCreate ||
536537
ClauseKind == OpenACCClauseKind::PresentOrCreate ||
537538
ClauseKind == OpenACCClauseKind::Attach ||
539+
ClauseKind == OpenACCClauseKind::Detach ||
538540
ClauseKind == OpenACCClauseKind::DevicePtr ||
539541
ClauseKind == OpenACCClauseKind::FirstPrivate) &&
540542
"Parsed clause kind does not have a var-list");
@@ -571,6 +573,7 @@ class SemaOpenACC : public SemaBase {
571573
ClauseKind == OpenACCClauseKind::PCreate ||
572574
ClauseKind == OpenACCClauseKind::PresentOrCreate ||
573575
ClauseKind == OpenACCClauseKind::Attach ||
576+
ClauseKind == OpenACCClauseKind::Detach ||
574577
ClauseKind == OpenACCClauseKind::DevicePtr ||
575578
ClauseKind == OpenACCClauseKind::FirstPrivate) &&
576579
"Parsed clause kind does not have a var-list");

clang/lib/AST/OpenACCClause.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ bool OpenACCClauseWithVarList::classof(const OpenACCClause *C) {
3333
OpenACCFirstPrivateClause::classof(C) ||
3434
OpenACCDevicePtrClause::classof(C) ||
3535
OpenACCDevicePtrClause::classof(C) ||
36-
OpenACCAttachClause::classof(C) || OpenACCNoCreateClause::classof(C) ||
36+
OpenACCDetachClause::classof(C) || OpenACCAttachClause::classof(C) ||
37+
OpenACCNoCreateClause::classof(C) ||
3738
OpenACCPresentClause::classof(C) || OpenACCCopyClause::classof(C) ||
3839
OpenACCCopyInClause::classof(C) || OpenACCCopyOutClause::classof(C) ||
3940
OpenACCReductionClause::classof(C) || OpenACCCreateClause::classof(C);
@@ -277,6 +278,16 @@ OpenACCAttachClause *OpenACCAttachClause::Create(const ASTContext &C,
277278
return new (Mem) OpenACCAttachClause(BeginLoc, LParenLoc, VarList, EndLoc);
278279
}
279280

281+
OpenACCDetachClause *OpenACCDetachClause::Create(const ASTContext &C,
282+
SourceLocation BeginLoc,
283+
SourceLocation LParenLoc,
284+
ArrayRef<Expr *> VarList,
285+
SourceLocation EndLoc) {
286+
void *Mem =
287+
C.Allocate(OpenACCDetachClause::totalSizeToAlloc<Expr *>(VarList.size()));
288+
return new (Mem) OpenACCDetachClause(BeginLoc, LParenLoc, VarList, EndLoc);
289+
}
290+
280291
OpenACCDevicePtrClause *OpenACCDevicePtrClause::Create(const ASTContext &C,
281292
SourceLocation BeginLoc,
282293
SourceLocation LParenLoc,
@@ -452,6 +463,14 @@ OpenACCFinalizeClause *OpenACCFinalizeClause::Create(const ASTContext &C,
452463
return new (Mem) OpenACCFinalizeClause(BeginLoc, EndLoc);
453464
}
454465

466+
OpenACCIfPresentClause *OpenACCIfPresentClause::Create(const ASTContext &C,
467+
SourceLocation BeginLoc,
468+
SourceLocation EndLoc) {
469+
void *Mem = C.Allocate(sizeof(OpenACCIfPresentClause),
470+
alignof(OpenACCIfPresentClause));
471+
return new (Mem) OpenACCIfPresentClause(BeginLoc, EndLoc);
472+
}
473+
455474
//===----------------------------------------------------------------------===//
456475
// OpenACC clauses printing methods
457476
//===----------------------------------------------------------------------===//
@@ -538,6 +557,13 @@ void OpenACCClausePrinter::VisitAttachClause(const OpenACCAttachClause &C) {
538557
OS << ")";
539558
}
540559

560+
void OpenACCClausePrinter::VisitDetachClause(const OpenACCDetachClause &C) {
561+
OS << "detach(";
562+
llvm::interleaveComma(C.getVarList(), OS,
563+
[&](const Expr *E) { printExpr(E); });
564+
OS << ")";
565+
}
566+
541567
void OpenACCClausePrinter::VisitDevicePtrClause(
542568
const OpenACCDevicePtrClause &C) {
543569
OS << "deviceptr(";
@@ -697,3 +723,8 @@ void OpenACCClausePrinter::VisitVectorClause(const OpenACCVectorClause &C) {
697723
void OpenACCClausePrinter::VisitFinalizeClause(const OpenACCFinalizeClause &C) {
698724
OS << "finalize";
699725
}
726+
727+
void OpenACCClausePrinter::VisitIfPresentClause(
728+
const OpenACCIfPresentClause &C) {
729+
OS << "if_present";
730+
}

clang/lib/AST/StmtProfile.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2561,6 +2561,9 @@ void OpenACCClauseProfiler::VisitSelfClause(const OpenACCSelfClause &Clause) {
25612561
void OpenACCClauseProfiler::VisitFinalizeClause(
25622562
const OpenACCFinalizeClause &Clause) {}
25632563

2564+
void OpenACCClauseProfiler::VisitIfPresentClause(
2565+
const OpenACCIfPresentClause &Clause) {}
2566+
25642567
void OpenACCClauseProfiler::VisitNumGangsClause(
25652568
const OpenACCNumGangsClause &Clause) {
25662569
for (auto *E : Clause.getIntExprs())
@@ -2602,6 +2605,12 @@ void OpenACCClauseProfiler::VisitAttachClause(
26022605
Profiler.VisitStmt(E);
26032606
}
26042607

2608+
void OpenACCClauseProfiler::VisitDetachClause(
2609+
const OpenACCDetachClause &Clause) {
2610+
for (auto *E : Clause.getVarList())
2611+
Profiler.VisitStmt(E);
2612+
}
2613+
26052614
void OpenACCClauseProfiler::VisitDevicePtrClause(
26062615
const OpenACCDevicePtrClause &Clause) {
26072616
for (auto *E : Clause.getVarList())

clang/lib/AST/TextNodeDumper.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,9 @@ void TextNodeDumper::Visit(const OpenACCClause *C) {
409409
case OpenACCClauseKind::PCopy:
410410
case OpenACCClauseKind::PresentOrCopy:
411411
case OpenACCClauseKind::If:
412+
case OpenACCClauseKind::IfPresent:
412413
case OpenACCClauseKind::Independent:
414+
case OpenACCClauseKind::Detach:
413415
case OpenACCClauseKind::DevicePtr:
414416
case OpenACCClauseKind::Finalize:
415417
case OpenACCClauseKind::FirstPrivate:

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,9 @@ static void addSanitizers(const Triple &TargetTriple,
738738
if (LangOpts.Sanitize.has(SanitizerKind::NumericalStability))
739739
MPM.addPass(NumericalStabilitySanitizerPass());
740740

741+
if (LangOpts.Sanitize.has(SanitizerKind::Realtime))
742+
MPM.addPass(RealtimeSanitizerPass());
743+
741744
auto ASanPass = [&](SanitizerMask Mask, bool CompileKernel) {
742745
if (LangOpts.Sanitize.has(Mask)) {
743746
bool UseGlobalGC = asanUseGlobalsGC(TargetTriple, CodeGenOpts);
@@ -1023,9 +1026,6 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10231026
FPM.addPass(BoundsCheckingPass());
10241027
});
10251028

1026-
if (LangOpts.Sanitize.has(SanitizerKind::Realtime))
1027-
MPM.addPass(RealtimeSanitizerPass());
1028-
10291029
// Don't add sanitizers if we are here from ThinLTO PostLink. That already
10301030
// done on PreLink stage.
10311031
if (!IsThinLTOPostLink) {

clang/lib/Parse/ParseOpenACC.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,6 @@ Parser::OpenACCClauseParseResult Parser::ParseOpenACCClauseParams(
999999
assert(DirKind == OpenACCDirectiveKind::Update);
10001000
[[fallthrough]];
10011001
case OpenACCClauseKind::Delete:
1002-
case OpenACCClauseKind::Detach:
10031002
case OpenACCClauseKind::Device:
10041003
case OpenACCClauseKind::DeviceResident:
10051004
case OpenACCClauseKind::Host:
@@ -1008,6 +1007,7 @@ Parser::OpenACCClauseParseResult Parser::ParseOpenACCClauseParams(
10081007
ParseOpenACCVarList(ClauseKind);
10091008
break;
10101009
case OpenACCClauseKind::Attach:
1010+
case OpenACCClauseKind::Detach:
10111011
case OpenACCClauseKind::DevicePtr:
10121012
ParsedClause.setVarListDetails(ParseOpenACCVarList(ClauseKind),
10131013
/*IsReadOnly=*/false, /*IsZero=*/false);

0 commit comments

Comments
 (0)