Skip to content

Commit 9bd5f80

Browse files
committed
[OpenACC] Implement 'trivial' construct/directive parsing.
Now that the `parallel` support has landed, add the other 'trivial' to implement ones that don't require any additional work other than adding them to the StringSwitch.
1 parent 9052ac9 commit 9bd5f80

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

clang/include/clang/Basic/OpenACCKinds.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,34 @@ namespace clang {
2121
enum class OpenACCDirectiveKind {
2222
// Compute Constructs.
2323
Parallel,
24+
Serial,
25+
Kernels,
26+
27+
// Data Environment.
28+
Data,
29+
// FIXME: 'enter data', 'exit data'.
30+
HostData,
31+
32+
// Misc.
33+
Loop,
34+
// FIXME: 'cache'
35+
36+
// FIXME: Combined Constructs.
37+
38+
// FIXME: atomic Construct variants.
39+
40+
// Declare Directive.
41+
Declare,
42+
43+
// Executable Directives. "wait" is first referred to here, but ends up being
44+
// in its own section after "routine".
45+
Init,
46+
Shutdown,
47+
Set,
48+
Update,
49+
// FIXME: wait construct.
50+
51+
// FIXME: routine construct.
2452

2553
// Invalid.
2654
Invalid,

clang/lib/Parse/ParseOpenACC.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ namespace {
2626
OpenACCDirectiveKind GetOpenACCDirectiveKind(StringRef Name) {
2727
return llvm::StringSwitch<OpenACCDirectiveKind>(Name)
2828
.Case("parallel", OpenACCDirectiveKind::Parallel)
29+
.Case("serial", OpenACCDirectiveKind::Serial)
30+
.Case("kernels", OpenACCDirectiveKind::Kernels)
31+
.Case("data", OpenACCDirectiveKind::Data)
32+
.Case("host_data", OpenACCDirectiveKind::HostData)
33+
.Case("loop", OpenACCDirectiveKind::Loop)
34+
.Case("declare", OpenACCDirectiveKind::Declare)
35+
.Case("init", OpenACCDirectiveKind::Init)
36+
.Case("shutdown", OpenACCDirectiveKind::Shutdown)
37+
.Case("set", OpenACCDirectiveKind::Shutdown)
38+
.Case("update", OpenACCDirectiveKind::Update)
2939
.Default(OpenACCDirectiveKind::Invalid);
3040
}
3141

clang/test/ParserOpenACC/parse-constructs.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,62 @@ void func() {
1313
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
1414
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
1515
#pragma acc parallel() clause list
16+
for(;;){}
17+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
18+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
19+
#pragma acc serial clause list
20+
for(;;){}
21+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
22+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
23+
#pragma acc kernels clause list
24+
for(;;){}
25+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
26+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
27+
#pragma acc data clause list
28+
for(;;){}
29+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
30+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
31+
#pragma acc host_data clause list
32+
for(;;){}
33+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
34+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
35+
#pragma acc loop clause list
36+
for(;;){}
37+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
38+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
39+
#pragma acc parallel invalid clause list
40+
for(;;){}
41+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
42+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
43+
#pragma acc parallel loop clause list
44+
for(;;){}
45+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
46+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
47+
#pragma acc serial loop clause list
48+
for(;;){}
49+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
50+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
51+
#pragma acc kernels loop clause list
52+
for(;;){}
53+
54+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
55+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
56+
#pragma acc declare clause list
57+
for(;;){}
58+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
59+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
60+
#pragma acc init clause list
61+
for(;;){}
62+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
63+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
64+
#pragma acc shutdown clause list
65+
for(;;){}
66+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
67+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
68+
#pragma acc set clause list
69+
for(;;){}
70+
// expected-warning@+2{{OpenACC clause parsing not yet implemented}}
71+
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
72+
#pragma acc update clause list
73+
for(;;){}
1674
}

0 commit comments

Comments
 (0)