* config/i386/i386.md (split after *testqi_ext_3_rex64): Only narrow
paradoxical subregs to prevent partial register stalls if the inner
mode is integer mode.
* g++.dg/torture/pr41680.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152665
138bc75d-0d04-0410-961f-
82ee72b054a4
+2009-10-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/41680
+ * config/i386/i386.md (split after *testqi_ext_3_rex64): Only narrow
+ paradoxical subregs to prevent partial register stalls if the inner
+ mode is integer mode.
+
2009-10-12 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (*setcc_<mode>_2): Do not use ix86_expand_clear
else if (GET_CODE (val) == SUBREG
&& (submode = GET_MODE (SUBREG_REG (val)),
GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (submode))
- && pos + len <= GET_MODE_BITSIZE (submode))
+ && pos + len <= GET_MODE_BITSIZE (submode)
+ && GET_MODE_CLASS (submode) == MODE_INT)
{
/* Narrow a paradoxical subreg to prevent partial register stalls. */
mode = submode;
+2009-10-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/41680
+ * g++.dg/torture/pr41680.C: New test.
+
2009-10-12 Dodji Seketeli <dodji@redhat.com>
PR c++/41570
--- /dev/null
+// PR target/41680
+// { dg-do compile }
+
+extern void baz (float);
+
+inline bool
+bar (float x)
+{
+ union { float f; int i; } u;
+ u.f = x;
+ return (u.i & 1);
+}
+
+void
+foo (float *x)
+{
+ for (int i = 0; i < 10; i++)
+ {
+ float f = x[i];
+ if (!bar (f))
+ baz (f);
+ }
+}