[Bug c++/17332] New: templated code optimization fails on fixed boolean template parameter

yuri at tsoft dot com gcc-bugzilla@gcc.gnu.org
Mon Sep 6 07:46:00 GMT 2004


I have piece of code that I compile in 2 variants:
w/out and with boolean template parameter in one class.
This boolean template parameter just includes some
extra code if turned on. It's defined in compile time as
false therefore should make no difference in program
logic in this case.

Runtime of optimized final code with template parameter
is 2 times longer than when this template parameter is
not defined at all.

PROBLEM: runtime depends on presense of template parameter
that obviously makes no difference.

I expect runtime to be insensitive to this kind of
template parameter.

Code below demonstrated the problem,
one of the first two lines should be uncommented.
First line enables template parameter,
second one disables it.

-----------------------------------------------------
#define TMPL(stmt...) stmt
//#define TMPL(stmt...)
                                                                               
                                 
#define SZ 50000000
                                                                               
                                 
char c1[SZ];
char c2[SZ];
                                                                               
                                 
template <class W>
class Scanner {
  public: inline void scan() {
    W w;
    char *pc1 = &c1[0], *pc2 = &c2[0];
    for (int idx = 0; idx < SZ; idx++) {
      w.work(pc1++, pc2++);
    }
  }
};
                                                                               
                                 
TMPL(template <bool b>)
class C {
  public: void work(char *p1, char *p2);
};
                                                                               
                                 
TMPL(template <bool b>)
void C TMPL(<b>) ::work(char *p1, char *p2) {
    TMPL(if (b)
      p2[6] += *p2;)
    *p2 = *p1;
    TMPL(if (b)
      p2[6] -= *p2;)
}
                                                                               
                                 
main() {
  Scanner<C TMPL(<false>) > sc;
  sc.scan();
}

-- 
           Summary: templated code optimization fails on fixed boolean
                    template parameter
           Product: gcc
           Version: 3.4.1
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: yuri at tsoft dot com
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: FreeBSD 5.1-RELEASE FreeBSD 5.1-RELEASE


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17332



More information about the Gcc-bugs mailing list