diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20071030-1.c | 79 | ||||
-rw-r--r-- | gcc/tree-ssa-operands.c | 3 |
4 files changed, 91 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 90dfa57ed..14c0428 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2007-10-30 Richard Guenther <rguenther@suse.de> + * tree-ssa-operands.c (add_vars_for_offset): Fix exit test + of loop adding SFTs as virtual operands. + +2007-10-30 Richard Guenther <rguenther@suse.de> + * Makefile.in (dse.o): Add $(OPTABS_H) and $(RECOG_H) dependencies. 2007-10-29 Dorit Nuzman <dorit@il.ibm.com> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 60f0c8f..11a54f1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-10-30 Richard Guenther <rguenther@suse.de> + + * gcc.c-torture/execute/20071030-1.c: New testcase copied from + gcc.target/i386/loop-3.c. + 2007-10-30 Revital Eres <eres@il.ibm.com> * testsuite/gcc.dg/vect/pr33866.c: Require vect_long. diff --git a/gcc/testsuite/gcc.c-torture/execute/20071030-1.c b/gcc/testsuite/gcc.c-torture/execute/20071030-1.c new file mode 100644 index 0000000..7be3cd8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20071030-1.c @@ -0,0 +1,79 @@ +/* PR target/11044 */ +/* Originator: Tim McGrath <misty-@charter.net> */ +/* Testcase contributed by Eric Botcazou <ebotcazou@libertysurf.fr> */ + +/* Testcase copied from gcc.target/i386/loop-3.c */ + +extern void *memset (void *, int, __SIZE_TYPE__); +extern void abort (void); + +typedef struct +{ + unsigned char colormod; +} entity_state_t; + +typedef struct +{ + int num_entities; + entity_state_t *entities; +} packet_entities_t; + +typedef struct +{ + double senttime; + float ping_time; + packet_entities_t entities; +} client_frame_t; + +typedef enum +{ + cs_free, + cs_server, + cs_zombie, + cs_connected, + cs_spawned +} sv_client_state_t; + +typedef struct client_s +{ + sv_client_state_t state; + int ping; + client_frame_t frames[64]; +} client_t; + +int CalcPing (client_t *cl) +{ + float ping; + int count, i; + register client_frame_t *frame; + + if (cl->state == cs_server) + return cl->ping; + ping = 0; + count = 0; + for (frame = cl->frames, i = 0; i < 64; i++, frame++) { + if (frame->ping_time > 0) { + ping += frame->ping_time; + count++; + } + } + if (!count) + return 9999; + ping /= count; + + return ping * 1000; +} + +int main(void) +{ + client_t cl; + + memset(&cl, 0, sizeof(cl)); + + cl.frames[0].ping_time = 1.0f; + + if (CalcPing(&cl) != 1000) + abort(); + + return 0; +} diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 8772313..2f95705 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -1409,7 +1409,8 @@ add_vars_for_offset (tree var, for (; VEC_iterate (tree, sv, i, subvar); ++i) { - if (size <= SFT_OFFSET (subvar) - offset) + if (SFT_OFFSET (subvar) > offset + && size <= SFT_OFFSET (subvar) - offset) break; if (is_def) |