[cfe-dev] struct copy
Chris Lattner
clattner at apple.com
Mon Sep 29 15:50:57 PDT 2008
On Sep 29, 2008, at 3:14 AM, Matthijs Kooijman wrote:
> Hi Chris,
>
>>> Ah ok, "unions as the biggest field" is bad. How about if we
>>> consider unions as arrays (as clang does):
>>>
>>> %struct.a = type { i8, double }
>>> %struct.c = type [12 x i8]
>> That would solve this problem, but also isn't a universally good
>> thing
>> to do. Doing things like this can break the (critical for some
>> codes)
>> Scalar Replacement of Aggregates optimization.
> Can you give an actual example of this? By my reasoning, if a struct
> is really
> part of a union, and the value is thus used in some other way,
> scalarrepl
> wouldn't be able to split it up anyway, right?
Right. By picking one of the types though, you do catch the case
where the union is only used as that type.
> If an alloca of a union is in fact only used as its struct type and
> never as
> any of the other types, then instcombine will change the i8 array
> alloca to
> a struct alloca and scalarrepl will still be able to do its work
> just fine.
Hrm... this is a big maybe. The instcombine xform has a lot of
constraints on it.
>> In general, it is good for the front-end to preserve as much
>> accurate type
>> info in the LLVM IR as possible.
> I agree with you here. However, I'm not so sure that picking one
> type a union
> can become over another, is much more accurate than just picking an
> i8 array
> always.
Why is there so much focus on this? Is there a specific problem
you're trying to solve? There are lots of real problems to tackle
too :)
-Chris
More information about the cfe-dev
mailing list