[PATCH 2/6] [GOMP4] OpenACC 1.0+ support in fortran front-end
Ilmir Usmanov
i.usmanov@samsung.com
Wed Feb 19 16:43:00 GMT 2014
Hi Tobias!
On 10.02.2014 03:10, Tobias Burnus wrote:
> Shouldn't you also reject polymorphic types ("BT_CLASS" and
> "BT_ASSUMED")? [BT_CLASS = "class(derived_type_name)" or "class(*)";
> BT_ASSUMED = "type(*)"]
>
>> + if (n->sym->attr.pointer)
>> + gfc_error ("POINTER object '%s' in %s clause at %L",
>> + n->sym->name, name, &code->loc);
>
> Actually, here and probably elsewhere: Do you need to take care of
> derived-type components? I mean something like
> clause(derived_type%comp)
>
> Do you also need to reject AS_ASSUMED_RANK (new since Fortran
> Technical Specification ISO/IEC TS 29113:2012)? I mean code like:
>
> subroutine foo(x)
> integer, DIMENSION(..) :: x
> ... openacc_clause(x)
>
> Side note: One should also check how OpenMP handles those.
>
I think we should reject assumed size, assumed shape and assumed rank
variables, as OpenMP does.
>> + case OMP_LIST_DEVICEPTR:
>> + if (n->sym->attr.pointer)
>> + gfc_error ("POINTER object '%s' in %s clause at %L",
>> + n->sym->name, name, &code->loc);
>
> Talking about pointers, you probably also want to reject Cray pointers
> (attr.cray_pointee - and cray_pointee). [One should also check what
> OpenMP does; I think it does handle it correctly.]
>
I agree, currently my implementation does not handle Cray pointers
correctly, will fix.
> And another point: I think you have to check whether the argument is a
> named constant (PARAMETER, attr.flavor == FL_PARAMETER), I think those
> you cannot put them there either.
>
> What happens if you try to use a literal such as "deviceptr(5)"?
>
Both parameter and literal are rejected.
By the way, PGI compiler accepts parameters with warning, CAPS silently
accepts. I think, we also should support parameters with warning.
>
>> + resolve_oacc_positive_int_expr (el->expr, "TILE");
>> + if (el->expr->expr_type != EXPR_CONSTANT)
>> + gfc_error ("TILE requires constant expression at %L",
>> &code->loc);
>
> Is the following permitted: "tile(4+5)"? If so, do you need to call
> gfc_simplify_expr() as some point? (Or is this already done at some
> point?)
>
Yes, the syntax is allowed, but ...
CAPSCompilers-3.4.1/bin/hmpp: [Error HP0112] tile.f95:30: Syntax error:
expecting ')'
!$acc parallel loop collapse(1+ 1)
CAPS compiler doesn't support this. But PGI does.
There is no need to simplify expression since it is constant anyway. The
simplification is done during match stage (gfc_match_expr calls gfc_add).
--
Ilmir.
More information about the Gcc-patches
mailing list