On Wed, Jun 3, 2020 at 12:36 PM Naveen Hurugalawadi <nave...@marvell.com> wrote: > > Hi Richard, > > Thanks for reviewing the patch and sharing your comments. > > >> pattern should be guarded with !TYPE_OVERFLOW_SANITIZED > >> and/or !TYPE_OVERFLOW_TRAPS > Done. > > >> can you add some cases with unsigned types and types > >> smaller than int (thus with integral promotion applied)? > Done. > > Please find attached the modified patch as per your suggestions. > Bootstrapped and regression tested on x86_64-pc-linux-gnu.
+(simplify + (plus (nop_convert1? (minus (nop_convert2? (bit_and @0 @1)) + (nop_convert3? (bit_ior @0 @1)))) + (nop_convert4? integer_all_onesp)) nop_convert4 cannot happen, constants will have been constant folded here. nop_convert2 and nop_convert3 can only happen together since the bit_and and the bit_ior will have the same type since they share operands. Btw, one of bit_and or bit_ior needs :c. + (if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type) + && !TYPE_SATURATING (type)) since we now have two types, the type of the plus and the type of the minus you have to check both of them So I think it should be (simplify (plus (nop_convert1? (minus@2 (nop_convert2? (bit_and:c @0 @1)) (nop_convert2? (bit_ior @0 @1)))) integer_all_onesp) (if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type) && !TYPE_SATURATING (type) && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (@2)) && !TYPE_OVERFLOW_TRAPS (TREE_TYPE (@2)) && !TYPE_SATURATING (TREE_TYPE (@2))) (bit_not (convert (bit_xor @0 @1)))))) and the other patterns adjusted accordingly. Thanks, Richard. > Thanks, > Naveen