/* { dg-do compile } */ /* { dg-options "-O2 -dp" } */ /* This was extracted from coremark. */ typedef signed short ee_s16; typedef struct list_data_s { ee_s16 data16; ee_s16 idx; } list_data; typedef struct list_head_s { struct list_head_s *next; struct list_data_s *info; } list_head; list_head * core_list_find(list_head *list, list_data *info) { if (info->idx >= 0) { while (list && (list->info->idx != info->idx)) list = list->next; return list; } else { while (list && ((list->info->data16 & 0xff) != info->data16)) list = list->next; return list; } } /* There is only one legitimate unconditional jump, so test for that, which will catch the case where bb-reorder leaves a jump to a ret in the IL. */ /* { dg-final { scan-assembler-times "jump" 1 } } */