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]

Re: [C PATCH] Discard P - (P + CST) optimization in pointer_diff (PR c/61240)


On Tue, Aug 05, 2014 at 02:14:21PM -0600, Jeff Law wrote:
> My concern is the code we're removing discusses the need to simplify when
> these expressions are in static initializers.  What's going to ensure that
> we're still simplifying instances which appear in static initializers?  I
> don't see anything which tests that.   And does it still work for targets
> which utilize PSImode?

Aw nuts.  So with the patch we'd start erroring out on
static __PTRDIFF_TYPE__ d1 = p - (p + 1);
static __PTRDIFF_TYPE__ d2 = p - (p - 1);
(it's nowhere in the testsuite/code base - and I hadn't noticed that
until today :()
while we'd still accept
static __PTRDIFF_TYPE__ d5 = (p - 1) - p;
static __PTRDIFF_TYPE__ d6 = (p + 1) - p;
(Those are not constant expression according to ISO C.)

The reason is that fold_build can fold
"(long int) (p + 4) - (long int) p" to 4, but not
"(long int) p - (long int) (p + 4)".

That means we have to have a way how to fold the latter, but only in
static initializers.  So I guess I need to implement this in
fold-const.c...   Oh well.

Nevertheless, I'd guess the fwprop bits could go in separately (it's
beneficial for C++).

As for PSImode, I dunno - seems only m32c and AVR use that?  I have no
way how to perform testing on such targets.

	Marek


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]