diff options
Diffstat (limited to 'clang/include')
| -rw-r--r-- | clang/include/clang/Basic/Attr.td | 25 | ||||
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticParseKinds.td | 6 | ||||
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 2 | ||||
| -rw-r--r-- | clang/include/clang/Parse/Parser.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Sema/LoopHint.h | 10 |
5 files changed, 14 insertions, 31 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 309f00aa26f..b914faf6b14 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1784,18 +1784,12 @@ def Unaligned : IgnoredAttr { } def LoopHint : Attr { - /// #pragma clang loop <option> directive - /// vectorize: vectorizes loop operations if State == Enable. - /// vectorize_width: vectorize loop operations with width 'Value'. - /// interleave: interleave multiple loop iterations if State == Enable. - /// interleave_count: interleaves 'Value' loop interations. - /// unroll: fully unroll loop if State == Enable. - /// unroll_count: unrolls loop 'Value' times. - - /// #pragma unroll <argument> directive - /// <no arg>: fully unrolls loop. - /// boolean: fully unrolls loop if State == Enable. - /// expression: unrolls loop 'Value' times. + /// vectorize: vectorizes loop operations if 'value != 0'. + /// vectorize_width: vectorize loop operations with width 'value'. + /// interleave: interleave multiple loop iterations if 'value != 0'. + /// interleave_count: interleaves 'value' loop interations. + /// unroll: fully unroll loop if 'value != 0'. + /// unroll_count: unrolls loop 'value' times. let Spellings = [Pragma<"clang", "loop">, Pragma<"", "unroll">, Pragma<"", "nounroll">]; @@ -1806,9 +1800,6 @@ def LoopHint : Attr { "unroll", "unroll_count"], ["Vectorize", "VectorizeWidth", "Interleave", "InterleaveCount", "Unroll", "UnrollCount"]>, - EnumArgument<"State", "LoopHintState", - ["default", "enable", "disable"], - ["Default", "Enable", "Disable"]>, DefaultIntArgument<"Value", 1>]; let AdditionalMembers = [{ @@ -1850,9 +1841,9 @@ def LoopHint : Attr { if (option == VectorizeWidth || option == InterleaveCount || option == UnrollCount) OS << value; - else if (state == Default) + else if (value < 0) return ""; - else if (state == Enable) + else if (value > 0) OS << (option == Unroll ? "full" : "enable"); else OS << "disable"; diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td index 6b73b3b93fa..38a4eac123f 100644 --- a/clang/include/clang/Basic/DiagnosticParseKinds.td +++ b/clang/include/clang/Basic/DiagnosticParseKinds.td @@ -917,16 +917,10 @@ def err_omp_immediate_directive : Error< def err_omp_expected_identifier_for_critical : Error< "expected identifier specifying the name of the 'omp critical' directive">; -// Pragma support. -def err_pragma_invalid_keyword : Error< - "%select{invalid|missing}0 argument; expected '%select{enable|full}1' or 'disable'">; - // Pragma loop support. def err_pragma_loop_invalid_option : Error< "%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, " "vectorize_width, interleave, interleave_count, unroll, or unroll_count">; -def err_pragma_loop_numeric_value : Error< - "invalid argument; expected a positive integer value">; // Pragma unroll support. def warn_pragma_unroll_cuda_value_in_parens : Warning< diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 87032b8a5c8..6fbd6aa8167 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -541,6 +541,8 @@ def note_surrounding_namespace_starts_here : Note< "surrounding namespace with visibility attribute starts here">; def err_pragma_loop_invalid_value : Error< "invalid argument; expected a positive integer value">; +def err_pragma_loop_invalid_keyword : Error< + "invalid argument; expected '%0' or 'disable'">; def err_pragma_loop_compatibility : Error< "%select{incompatible|duplicate}0 directives '%1' and '%2'">; def err_pragma_loop_precedes_nonloop : Error< diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h index 14b16558e60..3dccee7660d 100644 --- a/clang/include/clang/Parse/Parser.h +++ b/clang/include/clang/Parse/Parser.h @@ -525,7 +525,7 @@ private: /// \brief Handle the annotation token produced for /// #pragma clang loop and #pragma unroll. - bool HandlePragmaLoopHint(LoopHint &Hint); + LoopHint HandlePragmaLoopHint(); /// GetLookAheadToken - This peeks ahead N tokens and returns that token /// without consuming any tokens. LookAhead(0) returns 'Tok', LookAhead(1) diff --git a/clang/include/clang/Sema/LoopHint.h b/clang/include/clang/Sema/LoopHint.h index c8b2ee845e5..a0bc45572f7 100644 --- a/clang/include/clang/Sema/LoopHint.h +++ b/clang/include/clang/Sema/LoopHint.h @@ -29,15 +29,11 @@ struct LoopHint { // "#pragma unroll" and "#pragma nounroll" cases, this is identical to // PragmaNameLoc. IdentifierLoc *OptionLoc; - // Identifier for the hint state argument. If null, then the state is - // default value such as for "#pragma unroll". - IdentifierLoc *StateLoc; + // Identifier for the hint argument. If null, then the hint has no argument + // such as for "#pragma unroll". + IdentifierLoc *ValueLoc; // Expression for the hint argument if it exists, null otherwise. Expr *ValueExpr; - - LoopHint() - : PragmaNameLoc(nullptr), OptionLoc(nullptr), StateLoc(nullptr), - ValueExpr(nullptr) {} }; } // end namespace clang |

