Resending in plain text mode so it goes through. Teresa On Mon, Jul 23, 2012 at 12:03 PM, Teresa Johnson <tejohn...@google.com> wrote: > Any possibility of getting these patches (186979 and 186993), along with > r184891 (which added the and->zext splitter), backported to the 4_7 branch? > I found a performance issue where "andw $0xff, %reg" was not being converted > to movzbl when the source and target registers are the same, resulting in > LCP stalls, which is fixed by this series of patches. > > Thanks, > Teresa > > > On Mon, Apr 30, 2012 at 10:14 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >> >> On Mon, Apr 30, 2012 at 3:10 PM, Jakub Jelinek <ja...@redhat.com> wrote: >> > On Mon, Apr 30, 2012 at 02:54:05PM +0200, Uros Bizjak wrote: >> >> > My recent changes to zero_extend expanders should handle this >> >> > automatically, and will undo generation of zero_extend pattern. >> >> > Please >> >> > see zero_extend<mode>si2_and expander, and how it handles >> >> > TARGET_ZERO_EXTEND_WITH_AND targets. >> >> >> >> Attached patch implements this idea. In addition, it fixes the >> >> splitter to not change output mode of zero_extension from HImode and >> >> QImode from DImode to SImode. Although they generate the same >> >> instruction, I think we should better keep original mode here. >> > >> > Thanks. I was trying this morning slightly different patch for the >> > same, >> > but strangely it failed bootstrap, and didn't get around to analysing >> > why a mem store had (zero_extend (subreg (reg))) on a RHS. >> > >> >> + operands[1] = gen_lowpart (mode, operands[1]); >> >> + >> >> + if (GET_MODE (operands[0]) == DImode) >> >> + insn = (mode == SImode) >> >> + ? gen_zero_extendsidi2 >> >> + : (mode == HImode) >> >> + ? gen_zero_extendhidi2 >> >> + : gen_zero_extendqidi2; >> >> + else if (GET_MODE (operands[0]) == SImode) >> >> + insn = (mode == HImode) >> >> + ? gen_zero_extendhisi2 >> >> + : gen_zero_extendqisi2; >> >> + else if (GET_MODE (operands[0]) == HImode) >> >> + insn = gen_zero_extendqihi2; >> >> else >> >> - ix86_expand_binary_operator (AND, <MODE>mode, operands); >> >> + gcc_unreachable (); >> >> + >> >> + emit_insn (insn (operands[0], operands[1])); >> > >> > IMHO you should use <MODE>mode instead of GET_MODE (operands[0]) >> > in all of the above, then the compiler can actually optimize >> > it at compile time. >> >> 2012-04-30 Uros Bizjak <ubiz...@gmail.com> >> >> * config/i386/i386.md (and<mode>3): Change runtime operand mode >> checks >> to compile-time "mode == <MODE>mode" checks. >> (and splitter): Ditto. >> >> Tested on x86_64-pc-linux-gnu, committed to mainline SVN. >> >> Uros. > > > > > -- > Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413 >
-- Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413