1 /* { dg-do compile } */
2 /* { dg-options "-O2 -msse2 -ftree-vectorize -march=nocona" } */
3 
4 typedef __SIZE_TYPE__ size_t;
5 extern void *malloc (size_t);
6 extern void free (void *);
7 
8 typedef struct _Resource
9 {
10   struct _Resource *next;
11   unsigned int id;
12 } ResourceRec, *ResourcePtr;
13 
14 typedef struct _ClientResource
15 {
16   ResourcePtr *resources;
17   int elements;
18   int buckets;
19   int hashsize;
20 } ClientResourceRec;
21 
22 static ClientResourceRec clientTable[256];
23 int Hash (int, unsigned int);
24 
25 void
RebuildTable(int client)26 RebuildTable (int client)
27 {
28   int j;
29   ResourcePtr res, next;
30   ResourcePtr **tails, *resources;
31   ResourcePtr **tptr, *rptr;
32 
33   j = 2 * clientTable[client].buckets;
34 
35   tails =
36     (ResourcePtr **) malloc ((unsigned long) (j * sizeof (ResourcePtr *)));
37   resources =
38     (ResourcePtr *) malloc ((unsigned long) (j * sizeof (ResourcePtr)));
39 
40   for (rptr = resources, tptr = tails; --j >= 0; rptr++, tptr++)
41     {
42       *rptr = ((ResourcePtr) ((void *) 0));
43       *tptr = rptr;
44     }
45 
46   clientTable[client].hashsize++;
47   for (j = clientTable[client].buckets,
48        rptr = clientTable[client].resources; --j >= 0; rptr++)
49     {
50       for (res = *rptr; res; res = next)
51 	{
52 	  next = res->next;
53 	  res->next = ((ResourcePtr) ((void *) 0));
54 	  tptr = &tails[Hash (client, res->id)];
55 	  **tptr = res;
56 	  *tptr = &res->next;
57 	}
58     }
59   free ((void *) tails);
60   clientTable[client].buckets *= 2;
61   free ((void *) clientTable[client].resources);
62   clientTable[client].resources = resources;
63 }
64 
65 /* { dg-final { scan-assembler-not "movlps" } } */
66