Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
ea0f3e87
Commit
ea0f3e87
authored
11 years ago
by
Xinliang David Li
Committed by
Xinliang David Li
11 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Introduce -ftree-loop-vectorize option
From-SVN: r202636
parent
7fe46fbe
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
76 additions
and
32 deletions
+76
-32
gcc/ChangeLog
+19
-0
gcc/common.opt
+6
-2
gcc/doc/invoke.texi
+11
-5
gcc/omp-low.c
+7
-5
gcc/opts.c
+16
-4
gcc/testsuite/ChangeLog
+4
-0
gcc/testsuite/gcc.misc-tests/help.exp
+2
-2
gcc/tree-if-conv.c
+2
-2
gcc/tree-ssa-loop.c
+5
-5
gcc/tree-ssa-pre.c
+1
-1
gcc/tree-vectorizer.c
+3
-6
No files found.
gcc/ChangeLog
View file @
ea0f3e87
2013-09-16 Xinliang David Li <davidxl@google.com>
* tree-if-conv.c (main_tree_if_conversion): Check new flag.
* omp-low.c (omp_max_vf): Ditto.
(expand_omp_simd): Ditto.
* tree-vectorizer.c (vectorize_loops): Ditto.
(gate_vect_slp): Ditto.
(gate_increase_alignment): Ditto.
* tree-ssa-pre.c (inhibit_phi_insertion): Ditto.
* tree-ssa-loop.c (gate_tree_vectorize): Ditto.
(gate_tree_vectorize): Name change.
(tree_vectorize): Ditto.
(pass_vectorize::gate): Call new function.
(pass_vectorize::execute): Ditto.
opts.c: O3 default setting change.
(finish_options): Check new flag.
* doc/invoke.texi: Document new flags.
* common.opt: New flags.
2013-09-16 Andreas Schwab <schwab@linux-m68k.org>
* doc/tm.texi.in (Cond Exec Macros): Remove node.
...
...
This diff is collapsed.
Click to expand it.
gcc/common.opt
View file @
ea0f3e87
...
...
@@ -2264,14 +2264,18 @@ Perform variable tracking and also tag variables that are uninitialized
ftree-vectorize
Common Report Var(flag_tree_vectorize) Optimization
Enable
loop
vectorization on trees
Enable vectorization on trees
ftree-vectorizer-verbose=
Common RejectNegative Joined UInteger Var(common_deferred_options) Defer
-ftree-vectorizer-verbose=<number> This switch is deprecated. Use -fopt-info instead.
ftree-loop-vectorize
Common Report Var(flag_tree_loop_vectorize) Optimization
Enable loop vectorization on trees
ftree-slp-vectorize
Common Report Var(flag_tree_slp_vectorize)
Init(2)
Optimization
Common Report Var(flag_tree_slp_vectorize) Optimization
Enable basic block vectorization (SLP) on trees
fvect-cost-model
...
...
This diff is collapsed.
Click to expand it.
gcc/doc/invoke.texi
View file @
ea0f3e87
...
...
@@ -419,10 +419,11 @@ Objective-C and Objective-C++ Dialects}.
-
ftree
-
loop
-
if
-
convert
-
stores
-
ftree
-
loop
-
im
@
gol
-
ftree
-
phiprop
-
ftree
-
loop
-
distribution
-
ftree
-
loop
-
distribute
-
patterns
@
gol
-
ftree
-
loop
-
ivcanon
-
ftree
-
loop
-
linear
-
ftree
-
loop
-
optimize
@
gol
-
ftree
-
loop
-
vectorize
@
gol
-
ftree
-
parallelize
-
loops
=@
var
{
n
}
-
ftree
-
pre
-
ftree
-
partial
-
pre
-
ftree
-
pta
@
gol
-
ftree
-
reassoc
-
ftree
-
sink
-
ftree
-
slsr
-
ftree
-
sra
@
gol
-
ftree
-
switch
-
conversion
-
ftree
-
tail
-
merge
@
gol
-
ftree
-
ter
-
ftree
-
vect
-
loop
-
version
-
ftree
-
vectorize
-
ftree
-
vrp
@
gol
-
ftree
-
switch
-
conversion
-
ftree
-
tail
-
merge
-
ftree
-
ter
@
gol
-
ftree
-
vect
-
loop
-
version
-
ftree
-
vectorize
-
ftree
-
vrp
@
gol
-
funit
-
at
-
a
-
time
-
funroll
-
all
-
loops
-
funroll
-
loops
@
gol
-
funsafe
-
loop
-
optimizations
-
funsafe
-
math
-
optimizations
-
funswitch
-
loops
@
gol
-
fvariable
-
expansion
-
in
-
unroller
-
fvect
-
cost
-
model
-
fvpt
-
fweb
@
gol
...
...
@@ -6751,8 +6752,8 @@ invoking @option{-O2} on programs that use computed gotos.
Optimize
yet
more
.
@
option
{-
O3
}
turns
on
all
optimizations
specified
by
@
option
{-
O2
}
and
also
turns
on
the
@
option
{-
finline
-
functions
},
@
option
{-
funswitch
-
loops
},
@
option
{-
fpredictive
-
commoning
},
@
option
{-
fgcse
-
after
-
reload
},
@
option
{-
ftree
-
vectorize
},
@
option
{-
fvect
-
cost
-
model
},
@
option
{-
fgcse
-
after
-
reload
},
@
option
{-
ftree
-
loop
-
vectorize
},
@
option
{-
f
tree
-
slp
-
vectorize
},
@
option
{-
f
vect
-
cost
-
model
},
@
option
{-
ftree
-
partial
-
pre
}
and
@
option
{-
fipa
-
cp
-
clone
}
options
.
@
item
-
O0
...
...
@@ -8011,8 +8012,13 @@ higher.
@item -ftree-vectorize
@opindex ftree-vectorize
Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
and @option{-ftree-slp-vectorize} if not explicitly specified.
@item -ftree-loop-vectorize
@opindex ftree-loop-vectorize
Perform loop vectorization on trees. This flag is enabled by default at
@option{-O3}.
@option{-O3}
and when @option{-ftree-vectorize} is enabled
.
@item -ftree-slp-vectorize
@opindex ftree-slp-vectorize
...
...
This diff is collapsed.
Click to expand it.
gcc/omp-low.c
View file @
ea0f3e87
...
...
@@ -2305,8 +2305,9 @@ omp_max_vf (void)
{
if
(
!
optimize
||
optimize_debug
||
(
!
flag_tree_vectorize
&&
global_options_set
.
x_flag_tree_vectorize
))
||
(
!
flag_tree_loop_vectorize
&&
(
global_options_set
.
x_flag_tree_loop_vectorize
||
global_options_set
.
x_flag_tree_vectorize
)))
return
1
;
int
vs
=
targetm
.
vectorize
.
autovectorize_vector_sizes
();
...
...
@@ -5684,10 +5685,11 @@ expand_omp_simd (struct omp_region *region, struct omp_for_data *fd)
loop
->
simduid
=
OMP_CLAUSE__SIMDUID__DECL
(
simduid
);
cfun
->
has_simduid_loops
=
true
;
}
/* If not -fno-tree-vectorize, hint that we want to vectorize
/* If not -fno-tree-
loop-
vectorize, hint that we want to vectorize
the loop. */
if
((
flag_tree_vectorize
||
!
global_options_set
.
x_flag_tree_vectorize
)
if
((
flag_tree_loop_vectorize
||
(
!
global_options_set
.
x_flag_tree_loop_vectorize
&&
!
global_options_set
.
x_flag_tree_vectorize
))
&&
loop
->
safelen
>
1
)
{
loop
->
force_vect
=
true
;
...
...
This diff is collapsed.
Click to expand it.
gcc/opts.c
View file @
ea0f3e87
...
...
@@ -498,7 +498,8 @@ static const struct default_options default_options_table[] =
{
OPT_LEVELS_1_PLUS_NOT_DEBUG
,
OPT_finline_functions_called_once
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_funswitch_loops
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_fgcse_after_reload
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_ftree_vectorize
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_ftree_loop_vectorize
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_ftree_slp_vectorize
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_fvect_cost_model
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_fipa_cp_clone
,
NULL
,
1
},
{
OPT_LEVELS_3_PLUS
,
OPT_ftree_partial_pre
,
NULL
,
1
},
...
...
@@ -826,7 +827,8 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
/* Set PARAM_MAX_STORES_TO_SINK to 0 if either vectorization or if-conversion
is disabled. */
if
(
!
opts
->
x_flag_tree_vectorize
||
!
opts
->
x_flag_tree_loop_if_convert
)
if
((
!
opts
->
x_flag_tree_loop_vectorize
&&
!
opts
->
x_flag_tree_slp_vectorize
)
||
!
opts
->
x_flag_tree_loop_if_convert
)
maybe_set_param_value
(
PARAM_MAX_STORES_TO_SINK
,
0
,
opts
->
x_param_values
,
opts_set
->
x_param_values
);
...
...
@@ -1660,8 +1662,12 @@ common_handle_option (struct gcc_options *opts,
opts
->
x_flag_unswitch_loops
=
value
;
if
(
!
opts_set
->
x_flag_gcse_after_reload
)
opts
->
x_flag_gcse_after_reload
=
value
;
if
(
!
opts_set
->
x_flag_tree_vectorize
)
opts
->
x_flag_tree_vectorize
=
value
;
if
(
!
opts_set
->
x_flag_tree_loop_vectorize
&&
!
opts_set
->
x_flag_tree_vectorize
)
opts
->
x_flag_tree_loop_vectorize
=
value
;
if
(
!
opts_set
->
x_flag_tree_slp_vectorize
&&
!
opts_set
->
x_flag_tree_vectorize
)
opts
->
x_flag_tree_slp_vectorize
=
value
;
if
(
!
opts_set
->
x_flag_vect_cost_model
)
opts
->
x_flag_vect_cost_model
=
value
;
if
(
!
opts_set
->
x_flag_tree_loop_distribute_patterns
)
...
...
@@ -1691,6 +1697,12 @@ common_handle_option (struct gcc_options *opts,
opts
->
x_flag_ipa_reference
=
false
;
break
;
case
OPT_ftree_vectorize
:
if
(
!
opts_set
->
x_flag_tree_loop_vectorize
)
opts
->
x_flag_tree_loop_vectorize
=
value
;
if
(
!
opts_set
->
x_flag_tree_slp_vectorize
)
opts
->
x_flag_tree_slp_vectorize
=
value
;
break
;
case
OPT_fshow_column
:
dc
->
show_column
=
value
;
break
;
...
...
This diff is collapsed.
Click to expand it.
gcc/testsuite/ChangeLog
View file @
ea0f3e87
2013-09-16 Xinliang David Li <davidxl@google.com>
* gcc.misc-tests/help.exp: Optimizer help change.
2013-09-16 Jeff Law <law@redhat.com>
* gcc.c-torture/execute/pr58419.c: New test.
...
...
This diff is collapsed.
Click to expand it.
gcc/testsuite/gcc.misc-tests/help.exp
View file @
ea0f3e87
...
...
@@ -55,11 +55,11 @@ check_for_options c "--help=target,optimizers" "" "" ""
check_for_options c "--help=warnings,^joined,^undocumented" "" "" ""
check_for_options c "-Q -O2 --help=optimizers" {
-O
-ftree-vectorize[^\n]*disabled
-ftree-
loop-
vectorize[^\n]*disabled
} " -g " ""
check_for_options c "-Q -O3 --help=optimizers" {
-O
-ftree-vectorize[^\n]*enabled
-ftree-
loop-
vectorize[^\n]*enabled
} " -g " ""
# Try repeated --help=.
check_for_options c "--help=params --help=optimizers" {
...
...
This diff is collapsed.
Click to expand it.
gcc/tree-if-conv.c
View file @
ea0f3e87
...
...
@@ -1789,7 +1789,7 @@ main_tree_if_conversion (void)
FOR_EACH_LOOP
(
li
,
loop
,
0
)
if
(
flag_tree_loop_if_convert
==
1
||
flag_tree_loop_if_convert_stores
==
1
||
flag_tree_vectorize
||
flag_tree_
loop_
vectorize
||
loop
->
force_vect
)
changed
|=
tree_if_conversion
(
loop
);
...
...
@@ -1815,7 +1815,7 @@ main_tree_if_conversion (void)
static
bool
gate_tree_if_conversion
(
void
)
{
return
(((
flag_tree_vectorize
||
cfun
->
has_force_vect_loops
)
return
(((
flag_tree_
loop_
vectorize
||
cfun
->
has_force_vect_loops
)
&&
flag_tree_loop_if_convert
!=
0
)
||
flag_tree_loop_if_convert
==
1
||
flag_tree_loop_if_convert_stores
==
1
);
...
...
This diff is collapsed.
Click to expand it.
gcc/tree-ssa-loop.c
View file @
ea0f3e87
...
...
@@ -303,7 +303,7 @@ make_pass_predcom (gcc::context *ctxt)
/* Loop autovectorization. */
static
unsigned
int
tree_vectorize
(
void
)
tree_
loop_
vectorize
(
void
)
{
if
(
number_of_loops
(
cfun
)
<=
1
)
return
0
;
...
...
@@ -312,9 +312,9 @@ tree_vectorize (void)
}
static
bool
gate_tree_vectorize
(
void
)
gate_tree_
loop_
vectorize
(
void
)
{
return
flag_tree_vectorize
||
cfun
->
has_force_vect_loops
;
return
flag_tree_
loop_
vectorize
||
cfun
->
has_force_vect_loops
;
}
namespace
{
...
...
@@ -342,8 +342,8 @@ public:
{}
/* opt_pass methods: */
bool
gate
()
{
return
gate_tree_vectorize
();
}
unsigned
int
execute
()
{
return
tree_vectorize
();
}
bool
gate
()
{
return
gate_tree_
loop_
vectorize
();
}
unsigned
int
execute
()
{
return
tree_
loop_
vectorize
();
}
};
// class pass_vectorize
...
...
This diff is collapsed.
Click to expand it.
gcc/tree-ssa-pre.c
View file @
ea0f3e87
...
...
@@ -3026,7 +3026,7 @@ inhibit_phi_insertion (basic_block bb, pre_expr expr)
unsigned
i
;
/* If we aren't going to vectorize we don't inhibit anything. */
if
(
!
flag_tree_vectorize
)
if
(
!
flag_tree_
loop_
vectorize
)
return
false
;
/* Otherwise we inhibit the insertion when the address of the
...
...
This diff is collapsed.
Click to expand it.
gcc/tree-vectorizer.c
View file @
ea0f3e87
...
...
@@ -341,7 +341,7 @@ vectorize_loops (void)
than all previously defined loops. This fact allows us to run
only over initial loops skipping newly generated ones. */
FOR_EACH_LOOP
(
li
,
loop
,
0
)
if
((
flag_tree_vectorize
&&
optimize_loop_nest_for_speed_p
(
loop
))
if
((
flag_tree_
loop_
vectorize
&&
optimize_loop_nest_for_speed_p
(
loop
))
||
loop
->
force_vect
)
{
loop_vec_info
loop_vinfo
;
...
...
@@ -486,10 +486,7 @@ execute_vect_slp (void)
static
bool
gate_vect_slp
(
void
)
{
/* Apply SLP either if the vectorizer is on and the user didn't specify
whether to run SLP or not, or if the SLP flag was set by the user. */
return
((
flag_tree_vectorize
!=
0
&&
flag_tree_slp_vectorize
!=
0
)
||
flag_tree_slp_vectorize
==
1
);
return
flag_tree_slp_vectorize
!=
0
;
}
namespace
{
...
...
@@ -579,7 +576,7 @@ increase_alignment (void)
static
bool
gate_increase_alignment
(
void
)
{
return
flag_section_anchors
&&
flag_tree_vectorize
;
return
flag_section_anchors
&&
flag_tree_
loop_
vectorize
;
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment