gimple type system

Kenneth Zadeck zadeck@naturalbridge.com
Fri Jul 18 22:49:00 GMT 2008


Richard Guenther wrote:
> On Fri, Jul 18, 2008 at 11:25 PM, Kenneth Zadeck
> <zadeck@naturalbridge.com> wrote:
>   
>> Diego has asked me to look into what would be needed in a gimple type
>> system.   This is an issue that has been brought to a head because now it is
>> time to merge types for lto.
>>
>> There are a lot of questions that need to be answered before designing such
>> a system and i would like to handle them one by one, rather than deal with a
>> thousand threads that go off in a lot of directions.  So for now, I would
>> like to limit the discussion to a single question:   "what do we want to do
>> in the middle end of a compiler with a middle end type system?"
>>
>> I have a couple of positive answers and one negative answer.  The point of
>> this mail is to get a more refined list.  The two positive answers are:
>>
>> 1) Type narrowing.   In an object oriented system, it is generally a big win
>> to be able to narrow a type as much as possible.   This can be used to then
>> be able to inline method calls, as well as remove runtime casts and type
>> checks (this is useless for c).
>> 2) Inter file type checking.  While this is not an optimization, there are
>> reasons why it would be useful to discover types that are mismatched across
>> compilation units.
>>
>> The thing that MAY not be useful anymore is the use of a type system of
>> alias analysis.   I would have hoped that danny and richi and all of the
>> other people hacking on the alias analysis would have subsumed anything that
>> one could have gathered from a type based alias analysis.  If I am wrong,
>> please correct me.
>>     
>
> Hah.  You are definitely wrong.
>
>   
I stand corrected.  I could hope.
>> Anyway, there must be other uses of types in either the existing middle end
>> or that people have dreams of adding to the middle end in the future.   Now
>> is the time to raise your hand before the design has been started.
>>     
>
> We already have a middle-end type-system.  It is unfortunately mostly
> implicitly defined by the assumptions we make and the information we
> extract from the types.
>
> I don't think you can just go and define a type-system - after all, what would
> be the result of such a definition?
>
>   
Here, I think that you are wrong.  You can first start with a series of 
requirements and only keep the information that is necessary to satisfy 
the requirements.    We currently have a type system that is defined by: 
here is what the c front end used to provide for use, and then we 
grafted on what the front ends would provide for use and now we have a mess.

It is my hope to define what what we really need and then to define an 
api to get that information and then engineer the underlying information 
to make this all work and I would like to know why we want to merge and 
what it means to merge (except for the obvious space reason) before i go 
proposing some algorithms and datastructures to support this. 
> Instead there are some goals we want to reach:
> 1) reduce the amount of data related to types (and declarations)
> during optimization
> 2) canonicalize "types" if their difference does not matter for the
> current and further
> stages of compilation (like we do now say all integral types with the
> same precision
> and signedness are "the same")
>
> For both of the above a prerequesite to actually really "unify" types
> (not treating
> them the same, but actually getting rid of either in favor of another)
> is to handle
> debug information properly.  The plan is to emit debug information for the
> source-level state of types early and refer to that from declarations via a
> unique identifier.
>
> One question would be if we want to gradually lower types (for example flatten
> structures, unify bit-precision integer types to modes, etc.) or if we
> just want to
> do one step after/during gimplification (we have a second step at RTL expansion
> of course).
>
>   
I would like to settle this lowering issue after i get an inventory of 
the uses we want to make of the type information.

kenny

> Richard.
>   



More information about the Gcc mailing list