diff mbox

PR rtl-optimization/64905: Clear hard frame pointer alignment if not needed

Message ID CAFULd4ZEPR7xvQ_nVQ=4XXVOFDAa+JR7bJ15Dup8r7F8G-d8PA@mail.gmail.com
State New
Headers show

Commit Message

Uros Bizjak Feb. 5, 2015, 10:45 a.m. UTC
Hello!

>>> When hard frame pointer isn't needed, the register for hard frame pointer
>>> may be reused.  This patch clears alignment on hard frame pointer if hard
>>> frame pointer isn't needed.  OK for trunk after bootstrap and test on
>>> Linux/x86-64?
>>
>> LRA can set up frame_pointer_needed in some complicated cases (in
>> lra-eliminations.c::setup_can_eliminate).  So I'd reset REGNO_POINTER_ALIGN
>> in setup_can_eleminate for any case even although without the change the
>> patch is safe.
>>
>> So, H.J., if you add resetting REGNO_POINTER_ALIGN in setup_can_eliminate,
>> the patch is automatically approved.
>
> This is what I checked in.

Attached patch disables the test on -fPIC targets, explicitly passes
-fomit-frame-pointer and removes unneeded main for a compile test.

2015-02-05  Uros Bizjak  <ubizjak@gmail.com>

        PR rtl-optimization/64905
        * gcc.target/i386/pr64905.c: Require nonpic target.
        (dg-options): Add -fomit-frame-pointer.
        (main): Remove.

Tested on x86_64-linux-gnu and committed to mainline SVN.

Uros.
diff mbox

Patch

Index: gcc.target/i386/pr64905.c
===================================================================
--- gcc.target/i386/pr64905.c	(revision 220434)
+++ gcc.target/i386/pr64905.c	(working copy)
@@ -1,22 +1,13 @@ 
-/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-options "-Os -ffixed-rax -ffixed-rbx -ffixed-rcx -ffixed-rdx -ffixed-rdi -ffixed-rsi -ffixed-r8 -ffixed-r9 -ffixed-r10 -ffixed-r11 -ffixed-r12 -ffixed-r13 -ffixed-r14 -ffixed-r15" } */
+/* { dg-do compile { target { { ! ia32 } && nonpic } } } */
+/* { dg-options "-Os -fomit-frame-pointer -ffixed-rax -ffixed-rbx -ffixed-rcx -ffixed-rdx -ffixed-rdi -ffixed-rsi -ffixed-r8 -ffixed-r9 -ffixed-r10 -ffixed-r11 -ffixed-r12 -ffixed-r13 -ffixed-r14 -ffixed-r15" } */
 /* { dg-final { scan-assembler-not "movl\[ \t\]0\\(%.*\\), %.*" } } */
 
 typedef unsigned short uint16_t;
 uint16_t a_global;
 
-void __attribute__ ((noinline))
+void
 function (uint16_t **a_p)
 {
   // unaligned access by address in %rbp: mov    0x0(%rbp),%ebp
   a_global = **a_p;
 }
-
-int main(int argc, char **argv)
-{
-  uint16_t array [4] = { 1, 2, 3, 4 };
-  uint16_t *array_elem_p = &array [3];
-
-  function (&array_elem_p);
-  return 0;
-}