This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/28364] New: poor optimization choices when iterating over a std::string (probably not c++-specific)
- From: "zackw at panix dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Jul 2006 22:32:56 -0000
- Subject: [Bug tree-optimization/28364] New: poor optimization choices when iterating over a std::string (probably not c++-specific)
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Consider the following test program:
#include <string>
bool has_bad_chars(std::string const & path)
{
for (std::string::const_iterator c = path.begin(); c != path.end(); c++)
{
unsigned char x = static_cast<unsigned char>(*c);
if (x <= 0x1f || x == 0x5c || x == 0x7f)
return true;
}
return false;
}
At -O2, GCC 4.1 chooses to duplicate the entire body of the loop for no good
reason; the code is not rendered more straight-line by this, and in fact it
executes strictly more instructions even for a single-character string. I'll
attach an assembly file showing what it did (Z13has_bad_charsRKSs) and what it
should have done (_Z14has_bad_chars2RKSs). The bad transformation is done by
the .t45.ch pass, which acronym does not mean anything to me.
--
Summary: poor optimization choices when iterating over a
std::string (probably not c++-specific)
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: zackw at panix dot com
GCC build triplet: i486-linux-gnu
GCC host triplet: i486-linux-gnu
GCC target triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28364