On October 18, 2015 6:06:51 PM GMT+02:00, Jan Hubicka <hubi...@ucw.cz> wrote: >Hello, >> > I was only tracking one isse I hit: Fortran/C interoperability nees >LTO to >> > produce same TYPE_CANONICAl for signed and unsigned version of >size_t. >> > Doing so broke useless_type_conversion because it used >TYPE_CANONICAL. We >> > discussed the topic on the GNU Cauldron and decided that it is >cleaner to >> > drop TYPE_CANONICAL from useless_type_conversion because it does >not really >> > belong there. >> >> OK, thanks for the explanation. >> >> > That is only change I plan into the area. The decision to drop >comparsion of >> > TYPE_MODE from the aggregate path was decision of the discussion >about this >> > particular patch and I do not really insist on it. >> > >> > Having fewer VCE expressions in the code is not a bad thing, but I >do not >> > really see it as an important change. I am sorry for the breakage >in move >> > expansion that I hoped to not be as important. I am willing to >continue >> > fixing the fallout (and be more cureful about it - obviously I >originally >> > underestimated the issue). I am also happy with simply adding back >the mode >> > checking and drop the changes we did to expr.c so far. >> >> I agree on the fewer VCE expressions goal (and I have an upcoming >gigi change >> to that effect) but some of them are essentially mandated by the RTL >level >> and, since GENERIC & GIMPLE are ultimately lowered to RTL, they need >to take >> that into account IMO. So, if the mode change is not really >necessary for the >> rest of the work, I'd restore the mode check (and this only affects >Ada in >> practice since apparently only the Ada compiler fiddles with the type >mode). > >Why is Ada fliddling with the modes? Is it only for packed structures? > >I was wondering how to produce VCE convesions of aggregates with C >frontend at >all (that is getting them synthetized by the middle-end) to get non-ada >testcases. Storing through union is never folded to one and I don't >see any >other obvious way of getting them. Perhaps it may be possible to get >them via >inliner on incompatible parameter and LTO, but that seems to be the >only case >I can think of right now. > >I am testing the change to compare modes and revert the two expr.c >changes. >Lets see what is Richard's opinion. The whole concept of modes on >aggregate >types is bit funny post-tree-ssa days when we do SRA. I suppose they >may be >tied to calling conventions, but should no longer be needed for code >quality?
Adding back the mode check is fine if all types with the same TYPE_CANONICAL have the same mode. Otherwise we'd regress here. I thought we do for Struct x { int i; }; Typedef y x __attribute__((packed)); And then doing X x; Y y; X = y; Richard. >Honza >> >> -- >> Eric Botcazou