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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.dg/] [sibcall-4.c] - Blame information for rev 867

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

Line No. Rev Author Line
1 149 jeremybenn
/* Simple check that sibling calls are performed from a
2
   void non-leaf-function taking no arguments calling a function which
3
   is about the same as itself.
4
 
5
   Copyright (C) 2002 Free Software Foundation Inc.
6
   Contributed by Hans-Peter Nilsson  <hp@bitrange.com>  */
7
 
8
/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* hppa*64*-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
9
/* { dg-options "-O2 -foptimize-sibling-calls" } */
10
 
11
/* The option -foptimize-sibling-calls is the default, but serves as
12
   marker.  This test is xfailed on targets without sibcall patterns
13
   (except targets where the test does not work due to the return address
14
   not saved on the regular stack).  */
15
 
16
extern void abort (void);
17
extern void exit (int);
18
 
19
static void recurser_void1 (void);
20
static void recurser_void2 (void);
21
extern void track (void);
22
 
23
int n = 0;
24
int main ()
25
{
26
  recurser_void1 ();
27
  exit (0);
28
}
29
 
30
/* The functions should get the same stack-frame, and best way to make it
31
   reasonably sure is to make them have the same contents (regarding the
32
   n tests).  */
33
 
34
static void __attribute__((noinline))
35
recurser_void1 (void)
36
{
37
  if (n == 0 || n == 7 || n == 8)
38
    track ();
39
 
40
  if (n == 10)
41
    return;
42
  n++;
43
  recurser_void2 ();
44
}
45
 
46
static void __attribute__((noinline))
47
recurser_void2 (void)
48
{
49
  if (n == 0 || n == 7 || n == 8)
50
    track ();
51
 
52
  if (n == 10)
53
    return;
54
  n++;
55
  recurser_void1 ();
56
}
57
 
58
void *trackpoint;
59
 
60
void
61
track ()
62
{
63
  char stackpos[1];
64
 
65
  if (n == 0)
66
    trackpoint = stackpos;
67
  else if ((n != 7 && n != 8) || trackpoint != stackpos)
68
    abort ();
69
}

powered by: WebSVN 2.1.0

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