This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/35714] x86 poor code with pmaddwd
- From: "ubizjak at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 7 May 2008 13:33:56 -0000
- Subject: [Bug target/35714] x86 poor code with pmaddwd
- References: <bug-35714-10175@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #5 from ubizjak at gmail dot com 2008-05-07 13:33 -------
The problem with memory operands has been fixed by the patch, so we generate
optimal one insn sequence for both functions in:
--cut here--
#include <emmintrin.h>
extern __m128i a;
__m128i madd (__m128i b)
{
return _mm_madd_epi16(a, b);
}
__m128i madd_swapped (__m128i b)
{
return _mm_madd_epi16(b, a);
}
--cut here--
Original testcase passes immediate operand to expanders. Since immediates don't
satisfy insn operand constraints, we move them to the register. Since there is
no direct imm->reg load insn for V4SF, they are first pushed to memory and then
loaded to register.
To solve this problem, we should push immediates to the memory in case insn
supports memory operands. Alternatively, we can perhaps find original memory
location (if available) and pass this location to the expander.
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |ubizjak at gmail dot com
|dot org |
Status|UNCONFIRMED |ASSIGNED
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2008-05-07 13:33:55
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35714