[cfe-commits] [LLVMdev] [cfe-dev] OpenMP support in CLANG: A proposal

Mahesha HS mahesha.llvm at gmail.com
Thu Oct 18 04:32:53 PDT 2012


Hi Eli,

Thanks for all your comments.

I have taken care of all your review comments. Yes, after I gone
through your review
comments, I also came to the conclusion that the addition of a new
class for OpenMP
pragma handling (class PragmaOmpHandler) is not necessarily required.
However, initially, when  started, I my-self had an opinion that this
class may required.
Now, I removed this class, and moved the omp pragma registration directly into
Preprocessor class.

I have attached following two patches along with this mail. The
patches also contains
 relevant *test cases*.

patch 1:  fopenmp_option_support.patch
patch 2:  omp_pragma_registration.patch

In patch 1, I have taken care of all your earlier review comments
related to -fopenmp option
support. Patch 2 contains the implementation for the omp pragma
registration with
Preprocessor.

Following files are changed respectively.

patch 1:
------------
#.  clang/include/clang/Driver/Options.td
#.  clang/include/clang/Basic/LangOptions.def
#.  clang/lib/Driver/Tools.cpp
#.  clang/lib/Frontend/CompilerInvocation.cpp
#.  clang/test/Driver/clang_fopenmp_opt.c

patch 2:
------------
#.  clang/include/clang/Lex/Preprocessor.h
#.  clang/lib/Lex/Preprocessor.cpp
#.  clang/lib/Lex/Pragma.cpp
#.  clang/test/Preprocessor/pragma_omp_ignored_warning.c

--
mahesha


On Wed, Oct 17, 2012 at 7:00 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Tue, Oct 16, 2012 at 4:11 AM, Mahesha HS <mahesha.llvm at gmail.com> wrote:
>> Hi Eli,
>>
>> Attached is the next patch in the line. This patch
>> (class_pragma_omp_handler_support.patch) contains the implementation
>> of the class "class PragmaOmpHandler".  I also attached the test case
>> (openmp_syntax_test.c).  This test case is actually to test the
>> syntactically legal simple OpenMP constructs. However, we can *really*
>> test it only after submitting the next two patches - one related to
>> PragmaOmpHandler object construction and the another related to OpenMP
>> parsing.
>>
>> Please, let me know, if you need to know any additional information.
>>
>> If you think that some other mechanism is required to speed-up the
>> review process, I will really welcome it.
>
> At this point, it's just a matter of finding time to review it.
>
> +  // \Brief: Holds all the OpenMP clause name strings.
> +  // \Brief: These strings are referenced while parsing OpenMP clauses.
> +  // Note that we won't introduce new *tokens* for openMP clause names
> +  // as these will get conflict with *identifier* token, and is very tricky
> +  // to handle. Instead, we reference below strings to recognize the OpenMP
> +  // clause names.
> +  StringRef* Clause[END_CLAUSE];
>
> This isn't correct documentation comment syntax; clang trunk has a
> warning -Wdocumentation to catch this.
>
> It's almost never appropriate to construct a StringRef*; a StringRef
> is already essentially a pointer.
>
> Is this array even necessary?  It's not clear what you're using it
> for.  If you want to convert from the enum to a string, just implement
> a method like "static StringRef StringForDefaultKind(ClauseKind
> Kind);" or something like that.
>
> +  // Note: These enum values *must* be in consistant in *size* and *order* with
> +  // that of enum values defined in the AST node class "OmpClause".
>
> If you want to share an enum, put it into a header in
> include/clang/Basic/.  (A new header if no existing one is
> appropriate.)  Having the same enum in multiple places is asking for
> trouble.
>
> This patch has a lot of copy-paste code; can you write a single
> PragmaHandler subclass which is parameterized based on the pragma in
> question?  (Or maybe a few, since it looks like some of them need
> special handling which is not yet implemented?)
>
> It looks like the only members of PragmaOmpHandler which actually need
> to be in a header are PragmaOmpUnknownWarning, initialize method, and
> the enums; please move PragmaOmpUnknownWarning and initialize onto the
> Preprocessor class, the enums into a new header in
> include/clang/Basic/, and everything else into the .cpp file, and
> remove include/clang/Lex/PragmaOmpHandler.h.
>
> -Eli



-- 
mahesha
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fopenmp_option_support.patch
Type: application/octet-stream
Size: 3038 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121018/45f3d5b2/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: omp_pragma_registration.patch
Type: application/octet-stream
Size: 9631 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121018/45f3d5b2/attachment-0001.obj>


More information about the cfe-commits mailing list