On Wed, Jul 15, 2015 at 12:10:51PM +0930, Alan Modra wrote: > There are one or two regressions related to a TODO that Segher added. > The following produces poorer code than mainline.
Yes, that's why it says TODO :-) > Also, rs6000.md patterns uses SImode for the rotate/shift count. > Segher has added some new insns that use DImode when 64-bit. "Some"? Looks like all even. &($^&*()%$&. Would be nice if gen* could warn, hrm. > I think that inconsistency ought to be fixed. Yeah; patch in progress. Thanks for spotting it. > (I haven't completely analysed this) but won't > > (define_insn_and_split "*and<mode>3_imm_dot_shifted" > [snip] > (lshiftrt:GPR (match_operand:GPR 1 "gpc_reg_operand" "%r,r") > (match_operand:GPR 4 "const_int_operand" "n,n")) > ^^^this > fail to match combined patterns generated from other rs6000.md > patterns like > > (define_insn "lshr<mode>3" This pattern isn't generated from that; it's generated from and_imm. Combine thinks many "dot1" patterns should look different than the "base" and dot2 patterns; this is an important case (it happens when testing a single bit). Segher