> Since this commit (r249013), I've noticed a regression on arm targets: > FAIL: gcc.target/arm/cold-lc.c scan-assembler-not bl[^\n]*dump_stack
I think that is because we optimize the testcase: /* { dg-do compile } */ /* { dg-options "-O2 -mlong-calls" } */ /* { dg-final { scan-assembler-not "bl\[^\n\]*dump_stack" } } */ extern void dump_stack (void) __attribute__ ((__cold__)) __attribute__ ((noinline)); struct thread_info { struct task_struct *task; }; extern struct thread_info *current_thread_info (void); extern int show_stack (struct task_struct *, unsigned long *); void dump_stack (void) { unsigned long stack; show_stack ((current_thread_info ()->task), &stack); } void die (char *str, void *fp, int nr) { dump_stack (); while (1); } the new logic will move die() into cold section (because it unavoidably leads to cold code and thus allow using the bl instruction. I guess just modifying die to call dump_stack conditionally should fix the testcase. Honza > > > >>+ if (!n->analyzed > >>+ || n->decl == current_function_decl) > >>+ return false; > >>+ return n->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED; > >>+} > >