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