1/* PR rtl-optimization/49095 */
2/* { dg-do compile } */
3/* { dg-options "-Os" } */
4/* { dg-options "-Os -mregparm=2" { target ia32 } } */
5
6void foo (void *);
7
8int *
9f1 (int *x)
10{
11  if (!--*x)
12    foo (x);
13  return x;
14}
15
16int
17g1 (int x)
18{
19  if (!--x)
20    foo ((void *) 0);
21  return x;
22}
23
24#define F(T, OP, OPN) \
25T *			\
26f##T##OPN (T *x, T y)	\
27{			\
28  *x OP y;		\
29  if (!*x)		\
30    foo (x);		\
31  return x;		\
32}			\
33			\
34T			\
35g##T##OPN (T x, T y)	\
36{			\
37  x OP y;		\
38  if (!x)		\
39    foo ((void *) 0);	\
40  return x;		\
41}			\
42			\
43T *			\
44h##T##OPN (T *x)	\
45{			\
46  *x OP 24;		\
47  if (!*x)		\
48    foo (x);		\
49  return x;		\
50}			\
51			\
52T			\
53i##T##OPN (T x, T y)	\
54{			\
55  x OP 24;		\
56  if (!x)		\
57    foo ((void *) 0);	\
58  return x;		\
59}
60
61#define G(T) \
62F (T, +=, plus)		\
63F (T, -=, minus)	\
64F (T, &=, and)		\
65F (T, |=, or)		\
66F (T, ^=, xor)
67
68G (char)
69G (short)
70G (int)
71G (long)
72
73/* See PR61225 for the XFAIL.  */
74/* { dg-final { scan-assembler-not "test\[lq\]" { xfail { ia32 } } } } */
75