This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Wed, Jan 15, 2020 at 09:52:57PM +0100, Jakub Jelinek wrote: > This looks wrong. For one, this function is used for two purposes now and > you tweak it for one, but more importantly, whether he initial stmt > you see is a PHI or not can't make a difference, how is that case e.g. > different from _1 = PHI <_3, _4>; _2 = _1 + 1; and asking about _2? > For _1, you'd use (correctly) the maximum, but if called on _2, you'd ask > (wrongly) for minimum instead of maximum. And now with testcases. strlenopt-95.c shows the above. > This also looks like a hack to shut up the particular testcases instead of > really playing with what the IL provides. Instead of the unions, consider > e.g. C++ placement new, have a pointer to a buffer into which you placement > new one structure, take address of some member in it, pass it to something, > if it doesn't have a destructor do a C++ placement new into the same buffer > but with different structure, take address of a different member with the > same address as the first member, do the str*cmp on it that invokes this > stuff. SCCVN will (likely) find out that the values of those two pointers > are the same and just use the former pointer in the latter case. And strlenopt-93.C shows the latter. strlenopt-94.C is similar, just to show that it breaks equally badly with non-PODs that will be constructed by placement new and destructed later. Jakub
Attachment:
strlenopt-95.c
Description: Text document
Attachment:
strlenopt-93.C
Description: Text document
Attachment:
strlenopt-94.C
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |