This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/36431] New: The C++ front-end produces some NOP_EXPR for vector types
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Jun 2008 00:18:44 -0000
- Subject: [Bug c++/36431] New: The C++ front-end produces some NOP_EXPR for vector types
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
While looking into a performance issue in 4.1.1 on PowerPC, I noticed that the
C++ front-end produces a NOP_EXPR for a vector type. This caused the following
performance testcase to fail:
/* { dg-do compile { target powerpc*-*-* } } */
/* { dg-options "-O2" } */
// We should not produce any addi but instead use li for this function as
// the two address expressions should be done correctly.
/* { dg-final { scan-assembler-not "addi" } } */
#include <altivec.h>
typedef vector float SIMD_Vector;
struct g
{
vector float l[2];
};
vector float f(const struct g &a, const struct g &a1)
{
SIMD_Vector g0 = vec_splat (a.l[1], 0);
SIMD_Vector g1 = vec_splat (a.l[1], 1);
SIMD_Vector g2 = vec_splat (a1.l[1], 1);
SIMD_Vector g3 = vec_splat (a1.l[1], 2);
return g0 + g1 + g2 + g3;
}
---- CUT ---
Note on the trunk it works correctly as we prop the &a->l[1] into the indirect
reference during forwprop but the C++ front-end is still produce the weird IR.
--
Summary: The C++ front-end produces some NOP_EXPR for vector
types
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: pinskia at gcc dot gnu dot org
GCC target triplet: powerpc*-*-*
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36431