Question about LTO dwarf reader vs. artificial variables and formal arguments

Mark Mitchell mark@codesourcery.com
Sun Oct 22 12:47:00 GMT 2006


Steven Bosscher wrote:

>         contains
>            subroutine sub(c)
>            character*10 c
>            end subroutine
> 
>         end
> 
> produces as a GIMPLE dump:

> 
> sub (c, _c)
> {
>   (void) 0;
> }
> 
> where _c is strlen("Hi World!").  From a user perspective, it would be better 
> to hide _c for the debugger because it is not something that the user had in 
> the original program. 

I think that _c should be emitted in DWARF, as an artificial parameter, 
both for the sake of the debugger and for LTO.  LTO is supposed to be 
language-independent, which means that the information it reads in needs 
to be sufficient to compute the types of things (as they will be at the 
level of GIMPLE) without language hooks.  It may be that this idea turns 
out to be too idealistic, and that some language hooks are necessary to 
interpret the DWARF, but I would hope to avoid that.

> Similarly, LTO has to somehow deal with DECL_VALUE_EXPR and the debug 
> information that is produced from it.  Is there already some provision 
> to handle this kind of trickery in LTO?

No, not yet.

> but what would happen if LTO reads this in and re-constructs the type of "i" 
> from this information?  I imagine it would lead to mis-matches of the GIMPLE 
> code that you read in, where "i" is a 1x100 array, and the re-constructed 
> variable "i" which would be a 10x10 2D array.
> 
> Has anyone working on LTO already thought of these challanges?

Yes, I've thought about these things -- but that doesn't mean I have 
ready answers.  I've been thinking first and foremost about C, and then 
about C and C++.

Some of the same issues apply, but some don't.  In C/C++, we don't 
linearize the array type.  I don't know if that's viable in gfortran or 
not; is there a way to get the same performance in the middle end that 
you currently get by doing this in the front end?

In the worst case, we will provide a separate type attribute in DWARF 
giving the "GIMPLE type" of the variable.  Then, that type would be the 
linearized array.  LTO would use the GIMPLE type attribute (if present) 
when reconstructing the type.

-- 
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713



More information about the Gcc mailing list