[PATCH] Passing down BinaryOperator flags to BinarySDNode + X86 optimization

Marcello Maggioni hayarms at gmail.com
Fri May 30 09:31:20 PDT 2014


2014-05-30 8:01 GMT-07:00 Marcello Maggioni <hayarms at gmail.com>:
>
>
>
>
> 2014-05-29 23:08 GMT-07:00 Pete Cooper <peter_cooper at apple.com>:
>
>> Hi Marcello
>>
>> This is great.  Thanks for working on this.
>>
>> So the first patch "flag_nodes.patch” contains quite a bit of code
cleanup.  Its all good cleanup, but as there’s quite a lot of it can you
please separate it out and rebase the other patches on top of the cleanup
work.
>>
>> The * here is a neat trick, but not really valid for a bool.  Would &&
work the same?
>>
>> +    SubclassData =
>> +      (SubclassData & ~NUW) | (b * NUW);
>>
>
> Hmm, I have to admit I copied this from the approach used in the
Operator.h:89 for the "OverflowingBinaryOperator" class.
>
> I thought it was strange, but I assumed it worked because it was there.
Maybe would be a good idea to change it everywhere? (in two separate
patches)
>


More on this.

I think this should work because in the C++ standard I found:

 §4.7/4  (Integral Conversion):

If the source type is bool, the value false is converted to zero and the
value true is converted to one.


So ideally "true" is converted to 1 for the multiplication and (1 * FLAG)
== FLAG.

  (SubclassData & ~NUW) | (b && NUW);
I don't think would work (if that is what you meant).

Otherwise there is the more standard:
(SubclassData & ~NUW) | (b ? NUW : 0);

Marcello
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140530/80223450/attachment.html>


More information about the llvm-commits mailing list