Commit 820037ec by Jakub Jelinek Committed by Jakub Jelinek

re PR target/85593 (GCC on ARM allocates R3 for local variable when calling…

re PR target/85593 (GCC on ARM allocates R3 for local variable when calling naked function with O2 optimizations enabled)

	PR target/85593
	* final.c (rest_of_handle_final): Don't call collect_fn_hard_reg_usage
	for functions with naked attribute.

	* gcc.target/i386/pr85593.c: New test.

From-SVN: r266881
parent 1e41b184
2018-12-07 Jakub Jelinek <jakub@redhat.com> 2018-12-07 Jakub Jelinek <jakub@redhat.com>
PR target/85593
* final.c (rest_of_handle_final): Don't call collect_fn_hard_reg_usage
for functions with naked attribute.
PR c/88367 PR c/88367
* tree-vrp.c (extract_range_from_binary_expr): For POINTER_PLUS_EXPR * tree-vrp.c (extract_range_from_binary_expr): For POINTER_PLUS_EXPR
with -fno-delete-null-pointer-checks, set_nonnull only if the pointer with -fno-delete-null-pointer-checks, set_nonnull only if the pointer
...@@ -4659,7 +4659,11 @@ rest_of_handle_final (void) ...@@ -4659,7 +4659,11 @@ rest_of_handle_final (void)
final_start_function_1 (&first, asm_out_file, &seen, optimize); final_start_function_1 (&first, asm_out_file, &seen, optimize);
final_1 (first, asm_out_file, seen, optimize); final_1 (first, asm_out_file, seen, optimize);
if (flag_ipa_ra if (flag_ipa_ra
&& !lookup_attribute ("noipa", DECL_ATTRIBUTES (current_function_decl))) && !lookup_attribute ("noipa", DECL_ATTRIBUTES (current_function_decl))
/* Functions with naked attributes are supported only with basic asm
statements in the body, thus for supported use cases the information
on clobbered registers is not available. */
&& !lookup_attribute ("naked", DECL_ATTRIBUTES (current_function_decl)))
collect_fn_hard_reg_usage (); collect_fn_hard_reg_usage ();
final_end_function (); final_end_function ();
......
2018-12-07 Jakub Jelinek <jakub@redhat.com> 2018-12-07 Jakub Jelinek <jakub@redhat.com>
PR target/85593
* gcc.target/i386/pr85593.c: New test.
PR rtl-optimization/85770 PR rtl-optimization/85770
* gcc.target/i386/pr85770.c: Require int128 effective target. * gcc.target/i386/pr85770.c: Require int128 effective target.
......
/* PR target/85593 */
/* { dg-do run { target { { i?86-*-linux* x86_64-*-linux* } && lp64 } } } */
/* { dg-options "-O2" } */
__attribute__((naked)) void
bar (void)
{
asm ("xorl %eax, %eax\n\t"
"xorl %edx, %edx\n\t"
"xorl %ecx, %ecx\n\t"
"xorl %esi, %esi\n\t"
"xorl %edi, %edi\n\t"
"xorl %r8d, %r8d\n\t"
"xorl %r9d, %r9d\n\t"
"xorl %r10d, %r10d\n\t"
"xorl %r11d, %r11d\n\t"
"ret");
}
int
main ()
{
int a = 42;
asm ("" : "+r" (a));
bar ();
asm ("" : "+r" (a));
if (a != 42)
__builtin_abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment