OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [opt/] [temp1.C] - Blame information for rev 774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 693 jeremybenn
// PR c++/16405
2
// { dg-options "-O2" }
3
// { dg-do run }
4
 
5
// There should be exactly one temporary generated for the code in "f"
6
// below when optimizing -- for the result of "b + c".  We have no
7
// easy way of checking that directly, so we count the number of calls
8
// to "memcpy", which is used on (some?) targets to copy temporaries.
9
// If there is more than two calls (one for coping "*this" to "t", and
10
// one for copying the temporary to "a"), then there are too many
11
// temporaries.
12
 
13
int i;
14
 
15
extern "C"
16
void *memcpy (void *dest, const void *src, __SIZE_TYPE__ n)
17
{
18
  char *d = (char *) dest;
19
  const char *s = (const char *) src;
20
  while (n--)
21
    d[n] = s[n];
22
  ++i;
23
  return dest;
24
}
25
 
26
struct T {
27
#ifdef __SPU__
28
  /* SPU returns aggregates up to 1172 bytes in registers.  */
29
  int a[300];
30
#else
31
  int a[128];
32
#endif
33
  T &operator+=(T const &v) __attribute__((noinline));
34
  T operator+(T const &v) const { T t = *this; t += v; return t; }
35
};
36
 
37
T &T::operator+=(T const &v) {
38
  return *this;
39
}
40
 
41
T a, b, c;
42
 
43
void f() { a = b + c; }
44
 
45
int main () {
46
  i = 0;
47
  f();
48
  if (i > 2)
49
    return 1;
50
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.