mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 14:41:07 +08:00
re PR target/69454 (ix86_expand_prologue internal compiler error: Segmentation fault)
PR target/69454 * config/i386/i386.c (convert_scalars_to_vector): Remove stack alignment fixes. (ix86_option_override_internal): Disable TARGET_STV if stack might not be aligned enough. (ix86_minimum_alignment): Assert that TARGET_STV is false. * gcc.target/i386/pr69454-1.c: New test. * gcc.target/i386/pr69454-2.c: New test. From-SVN: r233128
This commit is contained in:
parent
07d88205a6
commit
61f727fe02
@ -1,3 +1,14 @@
|
||||
2016-02-04 Jakub Jelinek <jakub@redhat.com>
|
||||
Ilya Enkovich <enkovich.gnu@gmail.com>
|
||||
H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/69454
|
||||
* config/i386/i386.c (convert_scalars_to_vector): Remove
|
||||
stack alignment fixes.
|
||||
(ix86_option_override_internal): Disable TARGET_STV if stack
|
||||
might not be aligned enough.
|
||||
(ix86_minimum_alignment): Assert that TARGET_STV is false.
|
||||
|
||||
2016-02-04 Victoria Stepanyan <victoria.stepanyan@amd.com>
|
||||
|
||||
* gcc/config/i386/x86-tune.def: Disable default prefetching
|
||||
|
@ -3588,16 +3588,6 @@ convert_scalars_to_vector ()
|
||||
bitmap_obstack_release (NULL);
|
||||
df_process_deferred_rescans ();
|
||||
|
||||
/* Conversion means we may have 128bit register spills/fills
|
||||
which require aligned stack. */
|
||||
if (converted_insns)
|
||||
{
|
||||
if (crtl->stack_alignment_needed < 128)
|
||||
crtl->stack_alignment_needed = 128;
|
||||
if (crtl->stack_alignment_estimated < 128)
|
||||
crtl->stack_alignment_estimated = 128;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5453,6 +5443,13 @@ ix86_option_override_internal (bool main_args_p,
|
||||
opts->x_target_flags |= MASK_VZEROUPPER;
|
||||
if (!(opts_set->x_target_flags & MASK_STV))
|
||||
opts->x_target_flags |= MASK_STV;
|
||||
/* Disable STV if -mpreferred-stack-boundary=2 or
|
||||
-mincoming-stack-boundary=2 - the needed
|
||||
stack realignment will be extra cost the pass doesn't take into
|
||||
account and the pass can't realign the stack. */
|
||||
if (ix86_preferred_stack_boundary < 64
|
||||
|| ix86_incoming_stack_boundary < 64)
|
||||
opts->x_target_flags &= ~MASK_STV;
|
||||
if (!ix86_tune_features[X86_TUNE_AVX256_UNALIGNED_LOAD_OPTIMAL]
|
||||
&& !(opts_set->x_target_flags & MASK_AVX256_SPLIT_UNALIGNED_LOAD))
|
||||
opts->x_target_flags |= MASK_AVX256_SPLIT_UNALIGNED_LOAD;
|
||||
@ -29323,7 +29320,10 @@ ix86_minimum_alignment (tree exp, machine_mode mode,
|
||||
if ((mode == DImode || (type && TYPE_MODE (type) == DImode))
|
||||
&& (!type || !TYPE_USER_ALIGN (type))
|
||||
&& (!decl || !DECL_USER_ALIGN (decl)))
|
||||
return 32;
|
||||
{
|
||||
gcc_checking_assert (!TARGET_STV);
|
||||
return 32;
|
||||
}
|
||||
|
||||
return align;
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
2016-02-04 Ilya Enkovich <enkovich.gnu@gmail.com>
|
||||
|
||||
PR target/69454
|
||||
* gcc.target/i386/pr69454-1.c: New test.
|
||||
* gcc.target/i386/pr69454-2.c: New test.
|
||||
|
||||
2016-02-03 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c++/69251
|
||||
|
11
gcc/testsuite/gcc.target/i386/pr69454-1.c
Normal file
11
gcc/testsuite/gcc.target/i386/pr69454-1.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile { target { ia32 } } } */
|
||||
/* { dg-options "-O2 -msse2 -mno-accumulate-outgoing-args -mpreferred-stack-boundary=2" } */
|
||||
|
||||
typedef struct { long long w64[2]; } V128;
|
||||
extern V128* fn2(void);
|
||||
long long a;
|
||||
V128 b;
|
||||
void fn1() {
|
||||
V128 *c = fn2();
|
||||
c->w64[0] = a ^ b.w64[0];
|
||||
}
|
13
gcc/testsuite/gcc.target/i386/pr69454-2.c
Normal file
13
gcc/testsuite/gcc.target/i386/pr69454-2.c
Normal file
@ -0,0 +1,13 @@
|
||||
/* { dg-do compile { target { ia32 } } } */
|
||||
/* { dg-options "-O2 -mpreferred-stack-boundary=2" } */
|
||||
|
||||
extern void fn2 ();
|
||||
long long a, b;
|
||||
|
||||
void fn1 ()
|
||||
{
|
||||
long long c = a;
|
||||
a = b ^ a;
|
||||
fn2 ();
|
||||
a = c;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user