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
* tree-vrp.c (extract_range_from_binary_expr): For POINTER_PLUS_EXPR
with -fno-delete-null-pointer-checks, set_nonnull only if the pointer
final_start_function_1 (&first, asm_out_file, &seen, optimize);
final_1 (first, asm_out_file, seen, optimize);
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 ();
final_end_function ();
2018-12-07 Jakub Jelinek <jakub@redhat.com>
+ PR target/85593
+ * gcc.target/i386/pr85593.c: New test.
+
PR rtl-optimization/85770
* gcc.target/i386/pr85770.c: Require int128 effective target.
--- /dev/null
+/* 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;
+}