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: [PATCH] Fix optimize_range_tests_diff


Jakub Jelinek <jakub@redhat.com> writes:
> On Tue, Oct 14, 2014 at 11:23:22AM -0600, Jeff Law wrote:
>> On 10/14/14 10:02, Jakub Jelinek wrote:
>> >When hacking on range reassoc opt, I've noticed we can emit
>> >code with undefined behavior even when there wasn't one originally,
>> >in particular for:
>> >    (X - 43U) <= 3U || (X - 75U) <= 3U
>> >    and this loop can transform that into
>> >    ((X - 43U) & ~(75U - 43U)) <= 3U.  */
>> >we actually don't transform it to what the comment says, but
>> >    ((X - 43) & ~(75U - 43U)) <= 3U
>> >i.e. the initial subtraction can be performed in signed type,
>> >if in here X is e.g. INT_MIN or INT_MIN + 42, the subtraction
>> >at gimple level would be UB (not caught by -fsanitize=undefined,
>> >because that is handled much earlier).
>> >
>> >Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>> >
>> >2014-10-14  Jakub Jelinek  <jakub@redhat.com>
>> >
>> >	* tree-ssa-reassoc.c (optimize_range_tests_diff): Perform
>> >	MINUS_EXPR in unsigned type to avoid undefined behavior.
>> Any chance this fixes:
>> 
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63302
>
> No.  For that I have right now:
> -  if (tree_log2 (lowxor) < 0)
> +  if (wi::popcount (wi::to_widest (lowxor)) != 1)
> in my tree, though supposedly:
>    if (wi::popcount (wi::zext (wi::to_widest (lowxor), TYPE_PRECISION (TREE_TYPE (lowxor)))) != 1)
> might be better, as without zext it will supposedly
> not say popcount is 1 for smaller precision signed minimum values.
> My wide-int-fu is limited, so if there is a better way to do this, I'm all
> ears.

Sorry for the very late reply, but just:

  if (wi::popcount (lowxor) != 1)

should do what you want.

Thanks,
Richard


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