1 /* This is a case extracted from CSiBE which would sometimes contain the
10 where the negated T bit store did not combine properly. Since there are
11 other movt insns and the sequence will try to utilize the 'movt_movrt'
12 patterns, we only check for the extu. */
13 /* { dg-do compile } */
14 /* { dg-options "-O2" } */
15 /* { dg-final { scan-assembler-not "extu" } } */
17 typedef struct transaction_s transaction_t
;
21 transaction_t
* b_transaction
;
22 struct journal_head
*b_cpnext
, *b_cpprev
;
27 struct journal_head
* t_checkpoint_list
;
28 transaction_t
*t_cpnext
, *t_cpprev
;
33 transaction_t
* j_checkpoint_transactions
;
34 unsigned long j_first
, j_last
;
37 typedef struct journal_s journal_t
;
39 extern int __try_to_free_cp_buf (struct journal_head
*jh
);
40 extern int __cleanup_transaction (journal_t
*journal
, transaction_t
*transaction
);
41 extern void __flush_batch (void **bhs
, int *batch_count
);
42 extern void* jh2bh (void*);
45 __flush_buffer (journal_t
*journal
, struct journal_head
*jh
,
46 void **bhs
, int *batch_count
, int *drop_count
)
48 void *bh
= jh2bh (jh
);
52 bhs
[*batch_count
] = bh
;
54 if (*batch_count
== 64)
60 if (jh
->b_cpnext
== jh
)
62 if (__try_to_free_cp_buf (jh
))
72 log_do_checkpoint (journal_t
*journal
, int nblocks
)
74 transaction_t
*transaction
, *last_transaction
, *next_transaction
;
79 transaction
= journal
->j_checkpoint_transactions
;
80 if (transaction
== ((void *)0))
82 last_transaction
= transaction
->t_cpprev
;
83 next_transaction
= transaction
;
86 struct journal_head
*jh
, *last_jh
, *next_jh
;
88 int cleanup_ret
, retry
= 0;
89 transaction
= next_transaction
;
90 next_transaction
= transaction
->t_cpnext
;
91 jh
= transaction
->t_checkpoint_list
;
92 last_jh
= jh
->b_cpprev
;
97 next_jh
= jh
->b_cpnext
;
98 retry
= __flush_buffer(journal
, jh
, bhs
, &batch_count
, &drop_count
);
99 } while (jh
!= last_jh
&& !retry
);
104 cleanup_ret
= __cleanup_transaction(journal
, transaction
);
106 } while (transaction
!= last_transaction
);