From: uros Date: Fri, 10 Jul 2015 11:56:48 +0000 (+0000) Subject: PR target/66813 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ce85984c5002a164636515f712e762ce45ee63db;p=thirdparty%2Fgcc.git PR target/66813 * config/i386/i386.c (ix86_md_asm_adjust): Emit movstrictqi sequence for TARGET_ZERO_EXTEND_WITH_AND targets. testsuite/ChangeLog: PR target/66813 * gcc.target/i386/pr66813.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225662 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3b8d27da864..f305c72481ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-07-10 Uros Bizjak + + PR target/66813 + * config/i386/i386.c (ix86_md_asm_adjust): Emit movstrictqi + sequence for TARGET_ZERO_EXTEND_WITH_AND targets. + 2015-07-10 Jakub Jelinek PR middle-end/66820 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index a18c733d2112..007e0e13955c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -45842,7 +45842,17 @@ ix86_md_asm_adjust (vec &outputs, vec &/*inputs*/, { rtx destqi = gen_reg_rtx (QImode); emit_insn (gen_rtx_SET (destqi, x)); - x = gen_rtx_ZERO_EXTEND (dest_mode, destqi); + + if (TARGET_ZERO_EXTEND_WITH_AND + && optimize_function_for_speed_p (cfun)) + { + x = force_reg (dest_mode, const0_rtx); + + emit_insn (gen_movstrictqi + (gen_lowpart (QImode, x), destqi)); + } + else + x = gen_rtx_ZERO_EXTEND (dest_mode, destqi); } emit_insn (gen_rtx_SET (dest, x)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 04c64c45ff93..237827575488 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-07-10 Uros Bizjak + + PR target/66813 + * gcc.target/i386/pr66813.c: New test. + 2015-07-10 Jakub Jelinek PR middle-end/66820 diff --git a/gcc/testsuite/gcc.target/i386/pr66813.c b/gcc/testsuite/gcc.target/i386/pr66813.c new file mode 100644 index 000000000000..d4d8cc69d2db --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66813.c @@ -0,0 +1,5 @@ +/* { dg-do compile { target { ia32 } } } */ +/* { dg-options "-march=pentium" } */ + +void f_s(void) { short x; asm("" : "=@ccc"(x)); } +void f_i(void) { int x; asm("" : "=@ccc"(x)); }