re PR target/59021 (new vzeroupper instructions generated with -mavx)
PR target/59021 * config/i386/i386.c (ix86_avx_u128_mode_needed): Require AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers. (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn RTXes that return in AVX256 register. testsuite/ChangeLog: PR target/59021 * gcc.target/i386/pr59021.c: New test. From-SVN: r204464
This commit is contained in:
parent
b6e168f33a
commit
992147ee6b
4 changed files with 45 additions and 11 deletions
|
@ -1,8 +1,15 @@
|
|||
2013-11-06 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/59021
|
||||
* config/i386/i386.c (ix86_avx_u128_mode_needed): Require
|
||||
AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers.
|
||||
(ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn
|
||||
RTXes that return in AVX256 register.
|
||||
|
||||
2013-11-06 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/58653
|
||||
* tree-predcom.c (ref_at_iteration): Rewrite to generate
|
||||
a MEM_REF.
|
||||
* tree-predcom.c (ref_at_iteration): Rewrite to generate a MEM_REF.
|
||||
(prepare_initializers_chain): Adjust.
|
||||
|
||||
2013-11-06 Andrew MacLeod <amacleod@redhat.com>
|
||||
|
@ -48,8 +55,8 @@
|
|||
|
||||
2013-11-06 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* config/i386/i386.c (ix86_expand_prologue): Optimize stack checking for
|
||||
leaf functions without dynamic stack allocation.
|
||||
* config/i386/i386.c (ix86_expand_prologue): Optimize stack
|
||||
checking for leaf functions without dynamic stack allocation.
|
||||
* config/ia64/ia64.c (ia64_emit_probe_stack_range): Adjust.
|
||||
(ia64_expand_prologue): Likewise.
|
||||
* config/mips/mips.c (mips_expand_prologue): Likewise.
|
||||
|
@ -183,8 +190,7 @@
|
|||
2013-11-05 Jeff Law <law@redhat.com>
|
||||
|
||||
* Makefile.in (OBJS): Add gimple-ssa-isolate-paths.o
|
||||
* common.opt (-fisolate-erroneous-paths): Add option and
|
||||
documentation.
|
||||
* common.opt (-fisolate-erroneous-paths): Add option and documentation.
|
||||
* gimple-ssa-isolate-paths.c: New file.
|
||||
* gimple.c (check_loadstore): New function.
|
||||
(infer_nonnull_range): Moved into gimple.c from tree-vrp.c
|
||||
|
@ -233,12 +239,12 @@
|
|||
virtual_operand_p, is_gimple_reg, is_gimple_val, is_gimple_asm_val,
|
||||
is_gimple_min_lval, is_gimple_call_addr, is_gimple_mem_ref_addr,
|
||||
gimple_decl_printable_name, useless_type_conversion_p,
|
||||
types_compatible_p, gimple_can_coalesce_p, copy_var_decl): Move to
|
||||
types_compatible_p, gimple_can_coalesce_p, copy_var_decl): Move to
|
||||
gimple-expr.[ch].
|
||||
* gimple-expr.c: New File.
|
||||
(useless_type_conversion_p, gimple_set_body, gimple_body,
|
||||
gimple_has_body_p, gimple_decl_printable_name, copy_var_decl,
|
||||
gimple_can_coalesce_p, extract_ops_from_tree_1,
|
||||
gimple_can_coalesce_p, extract_ops_from_tree_1,
|
||||
gimple_cond_get_ops_from_tree, is_gimple_lvalue, is_gimple_condexpr,
|
||||
is_gimple_address, is_gimple_invariant_address,
|
||||
is_gimple_ip_invariant_address, is_gimple_min_invariant,
|
||||
|
|
|
@ -15708,7 +15708,7 @@ ix86_avx_u128_mode_needed (rtx insn)
|
|||
rtx arg = XEXP (XEXP (link, 0), 0);
|
||||
|
||||
if (ix86_check_avx256_register (&arg, NULL))
|
||||
return AVX_U128_ANY;
|
||||
return AVX_U128_DIRTY;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15828,8 +15828,8 @@ ix86_avx_u128_mode_after (int mode, rtx insn)
|
|||
{
|
||||
bool avx_reg256_found = false;
|
||||
note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
|
||||
if (!avx_reg256_found)
|
||||
return AVX_U128_CLEAN;
|
||||
|
||||
return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
|
||||
}
|
||||
|
||||
/* Otherwise, return current mode. Remember that if insn
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-11-06 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/59021
|
||||
* gcc.target/i386/pr59021.c: New test.
|
||||
|
||||
2013-11-06 James Lemke <jwlemke@codesourcery.com>
|
||||
|
||||
* lib/gcc-defs.exp (dg-additional-files-options): Extend regsub for
|
||||
|
|
23
gcc/testsuite/gcc.target/i386/pr59021.c
Normal file
23
gcc/testsuite/gcc.target/i386/pr59021.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mavx -mvzeroupper" } */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
struct S {
|
||||
int i1;
|
||||
int i2;
|
||||
int i3;
|
||||
};
|
||||
|
||||
typedef double v4df __attribute__ ((vector_size (32)));
|
||||
|
||||
extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
|
||||
|
||||
void bar (v4df v, struct S s)
|
||||
{
|
||||
int r = foo (v, 1, 2, 3, 4, 5, s);
|
||||
if (r)
|
||||
abort ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "vzeroupper" } } */
|
Loading…
Add table
Reference in a new issue