blob: f65f3c14637e770c2efe3fd10e04a035e1aa8bad (
plain)
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
|
/* { dg-options "-mthumb -Os -fpic -march=armv5te -fdump-rtl-hoist" } */
/* { dg-require-effective-target arm_thumb1_ok } */
/* { dg-require-effective-target fpic } */
/* Make sure all calculations of gObj's address get hoisted to one location. */
/* { dg-final { scan-rtl-dump "PRE/HOIST: end of bb .* copying expression" "hoist" } } */
struct st_a {
int data;
};
struct st_b {
struct st_a *p_a;
struct st_b *next;
};
extern struct st_b gObj;
extern void foo(int, struct st_b*);
int goo(struct st_b * obj) {
struct st_a *pa;
if (gObj.p_a->data != 0) {
foo(gObj.p_a->data, obj);
}
pa = obj->p_a;
if (pa == 0) {
return 0;
} else if (pa == gObj.p_a) {
return 0;
}
return pa->data;
}
|