PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / volatile-2.c
blobf4e6fb124a82ae066ace93708d786516ce9a9c47
1 /* { dg-do compile } */
2 /* { dg-require-effective-target nonpic } */
3 /* { dg-options "-O2" } */
5 /* Check volatiles are written, read or not re-read consistently */
8 /* simple assignments */
10 extern int volatile obj_0;
11 void test_0 (int data)
13 /* should not reread obj */
14 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_0(\\(%rip\\))?" } } */
15 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_0(\\(%rip\\))?," } } */
16 obj_0 = data;
19 extern int volatile obj_1;
20 int test_1 (int data)
22 /* should not reread obj */
23 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_1(\\(%rip\\))?" } } */
24 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_1(\\(%rip\\))?," } } */
25 return obj_1 = data;
28 extern int volatile obj_2;
29 int test_2 (void)
31 /* should not reread obj */
32 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_2(\\(%rip\\))?" } } */
33 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_2(\\(%rip\\))?," } } */
34 return obj_2 = 0;
38 /* Assignments in compound exprs */
40 extern int volatile obj_3;
41 int test_3 (int data)
43 /* should not reread obj */
44 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_3(\\(%rip\\))?" } } */
45 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_3(\\(%rip\\))?," } } */
46 return (obj_3 = data, 0);
49 extern int volatile obj_4;
50 int test_4 (void)
52 /* should not reread obj */
53 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_4(\\(%rip\\))?" } } */
54 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_4(\\(%rip\\))?," } } */
55 return (obj_4 = 0, 0);
57 extern int volatile obj_5;
58 int test_5 (void)
60 /* should reread obj */
61 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_5(\\(%rip\\))?" } } */
62 /* { dg-final { scan-assembler "movl\[ \t\]_?obj_5(\\(%rip\\))?," } } */
63 return (obj_5 = 0, obj_5);
66 /* Assignments in conditional exprs */
68 extern int volatile obj_6;
69 void test_6 (int data, int cond)
71 /* should not reread obj */
72 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_6(\\(%rip\\))?" } } */
73 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_6(\\(%rip\\))?," } } */
74 cond ? obj_6 = data : 0;
77 extern int volatile obj_7;
78 int test_7 (int data, int cond)
80 /* should not reread obj */
81 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_7(\\(%rip\\))?" } } */
82 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_7(\\(%rip\\))?," } } */
83 return cond ? obj_7 = data : 0;
86 extern int volatile obj_8;
87 int test_8 (int cond)
89 /* should not reread obj */
90 /* { dg-final { scan-assembler "movl\[ \t\]\[^,\]+, _?obj_8(\\(%rip\\))?" } } */
91 /* { dg-final { scan-assembler-not "movl\[ \t\]_?obj_8(\\(%rip\\))?," } } */
92 return cond ? obj_8 = 0 : 0;