----- Original Message ----- From: "Richard Guenther" To: "Kai Tietz" Cc: gcc-patches@gcc.gnu.org Sent: Monday, June 27, 2011 4:08:41 PM Subject: Re: [patch tree-optimization]: Try to sink type-casts for binary and/or/xor operations On Mon, Jun 27, 2011 at 3:46 PM, Kai Tietz wrote: > Hello, > > this patch sink type conversions in forward-propagate for the following patterns: > - ((type) X) op ((type) Y): If X and Y have compatible types. > - ((type) X) op CST: If the conversion of (type) ((type-x) CST) == CST and X has integral type. > - CST op ((type) X): If the conversion of (type) ((type-x) CST) == CST and X has integral type. See IRC comments. > Additionally it fixes another issue shown by this type-sinking in bswap detection. The bswap pattern matching algorithm goes for the first hit, and not tries to seek for best hit.  So we search here two times. First for di case (if present) and then for si mode case. Please split this piece out. I suppose either walking over stmts backwards or simply handling __builtin_bswap in find_bswap_1 would be a better fix than yours. Richard. > ChangeLog > > 2011-06-27  Kai Tietz   > >        * tree-ssa-forwprop.c (simplify_bitwise_binary): Improve >        type sinking. >        * tree-ssa-math-opts.c (execute_optimize_bswap): Separate >        search for di/si mode patterns for finding widest match. > > Bootstrapped and regression tested for x86_64-pc-linux-gnu.  Ok for apply? Revised patch without the bswap part. Regards, Kai