> 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;
> >>+}
> >

Reply via email to