annotate gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-54.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2 /* { dg-require-effective-target int32plus } */
kono
parents:
diff changeset
3 /* { dg-options "-O -fdump-tree-fre1 -fdump-tree-dse1" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 extern void abort (void);
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 union U { int i; char c[4]; short s[2]; };
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 char __attribute__((noinline,noclone)) foo(int i)
kono
parents:
diff changeset
10 {
kono
parents:
diff changeset
11 union U u;
kono
parents:
diff changeset
12 u.i = i;
kono
parents:
diff changeset
13 /* This should be equivalent to (char) i. */
kono
parents:
diff changeset
14 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
kono
parents:
diff changeset
15 return u.c[0];
kono
parents:
diff changeset
16 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
kono
parents:
diff changeset
17 return u.c[3];
kono
parents:
diff changeset
18 #else
kono
parents:
diff changeset
19 return 0x04;
kono
parents:
diff changeset
20 #endif
kono
parents:
diff changeset
21 }
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 short __attribute__((noinline,noclone)) baz(int i)
kono
parents:
diff changeset
24 {
kono
parents:
diff changeset
25 union U u;
kono
parents:
diff changeset
26 u.i = i;
kono
parents:
diff changeset
27 /* This should be equivalent to (char) i. */
kono
parents:
diff changeset
28 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
kono
parents:
diff changeset
29 return u.s[0];
kono
parents:
diff changeset
30 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
kono
parents:
diff changeset
31 return u.s[1];
kono
parents:
diff changeset
32 #else
kono
parents:
diff changeset
33 return 0x0304;
kono
parents:
diff changeset
34 #endif
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 char __attribute__((noinline,noclone)) bar(int j)
kono
parents:
diff changeset
38 {
kono
parents:
diff changeset
39 union U u;
kono
parents:
diff changeset
40 u.i = j;
kono
parents:
diff changeset
41 /* This gets simplified to a BIT_FIELD_REF. */
kono
parents:
diff changeset
42 return u.c[2];
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 int main()
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 if (foo (0x01020304) != 0x04)
kono
parents:
diff changeset
48 abort ();
kono
parents:
diff changeset
49 if (baz (0x01020304) != 0x0304)
kono
parents:
diff changeset
50 abort ();
kono
parents:
diff changeset
51 return 0;
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 /* { dg-final { scan-tree-dump "\\(char\\) i_" "fre1" } } */
kono
parents:
diff changeset
55 /* { dg-final { scan-tree-dump "\\(short int\\) i_" "fre1" } } */
kono
parents:
diff changeset
56 /* { dg-final { scan-tree-dump-not "u.i =" "dse1" } } */