tree-optimization/84201 - add --param vect-induction-float
This adds a --param to allow disabling of vectorization of floating point inductions. Ontop of -Ofast this should allow 549.fotonik3d_r to not miscompare. 2022-03-08 Richard Biener <rguenther@suse.de> PR tree-optimization/84201 * params.opt (-param=vect-induction-float): Add. * doc/invoke.texi (vect-induction-float): Document. * tree-vect-loop.cc (vectorizable_induction): Honor param_vect_induction_float. * gcc.dg/vect/pr84201.c: New testcase.
This commit is contained in:
parent
7cce7b1c3d
commit
058d19b42a
@ -14989,6 +14989,9 @@ in an inner loop relative to the loop being vectorized. The factor applied
|
||||
is the maximum of the estimated number of iterations of the inner loop and
|
||||
this parameter. The default value of this parameter is 50.
|
||||
|
||||
@item vect-induction-float
|
||||
Enable loop vectorization of floating point inductions.
|
||||
|
||||
@item avoid-fma-max-bits
|
||||
Maximum number of bits for which we avoid creating FMAs.
|
||||
|
||||
|
@ -1176,6 +1176,10 @@ Controls how loop vectorizer uses partial vectors. 0 means never, 1 means only
|
||||
Common Joined UInteger Var(param_vect_inner_loop_cost_factor) Init(50) IntegerRange(1, 10000) Param Optimization
|
||||
The maximum factor which the loop vectorizer applies to the cost of statements in an inner loop relative to the loop being vectorized.
|
||||
|
||||
-param=vect-induction-float=
|
||||
Common Joined UInteger Var(param_vect_induction_float) Init(1) IntegerRage(0, 1) Param Optimization
|
||||
Enable loop vectorization of floating point inductions.
|
||||
|
||||
-param=vrp1-mode=
|
||||
Common Joined Var(param_vrp1_mode) Enum(vrp_mode) Init(VRP_MODE_VRP) Param Optimization
|
||||
--param=vrp1-mode=[vrp|ranger] Specifies the mode VRP1 should operate in.
|
||||
|
22
gcc/testsuite/gcc.dg/vect/pr84201.c
Normal file
22
gcc/testsuite/gcc.dg/vect/pr84201.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-Ofast --param vect-induction-float=0" } */
|
||||
|
||||
void foo (float *a, float f, float s, int n)
|
||||
{
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
a[i] = f;
|
||||
f += s;
|
||||
}
|
||||
}
|
||||
|
||||
void bar (double *a, double f, double s, int n)
|
||||
{
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
a[i] = f;
|
||||
f += s;
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 2 "vect" } } */
|
@ -8175,6 +8175,14 @@ vectorizable_induction (loop_vec_info loop_vinfo,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (FLOAT_TYPE_P (vectype) && !param_vect_induction_float)
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
|
||||
"floating point induction vectorization disabled\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (stmt_info);
|
||||
gcc_assert (step_expr != NULL_TREE);
|
||||
tree step_vectype = get_same_sized_vectype (TREE_TYPE (step_expr), vectype);
|
||||
|
Loading…
Reference in New Issue
Block a user