Fix factor_out_conditional_operation heuristics for constants
While working on a different patch, I noticed the heuristics were not doing the right thing if there was statements before the NOP/PREDICTs. (LABELS don't have other statements before them). This fixes that oversight which was added in r15-3334-gceda727dafba6e. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-ssa-phiopt.cc (factor_out_conditional_operation): Instead of just ignorning a NOP/PREDICT, skip over them before checking the heuristics. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
This commit is contained in:
parent
b55f5e344c
commit
8ed8c342fb
1 changed files with 8 additions and 6 deletions
|
@ -332,15 +332,17 @@ factor_out_conditional_operation (edge e0, edge e1, gphi *phi,
|
|||
{
|
||||
gsi = gsi_for_stmt (arg0_def_stmt);
|
||||
gsi_prev_nondebug (&gsi);
|
||||
/* Ignore nops, predicates and labels. */
|
||||
while (!gsi_end_p (gsi)
|
||||
&& (gimple_code (gsi_stmt (gsi)) == GIMPLE_NOP
|
||||
|| gimple_code (gsi_stmt (gsi)) == GIMPLE_PREDICT
|
||||
|| gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL))
|
||||
gsi_prev_nondebug (&gsi);
|
||||
|
||||
if (!gsi_end_p (gsi))
|
||||
{
|
||||
gimple *stmt = gsi_stmt (gsi);
|
||||
/* Ignore nops, predicates and labels. */
|
||||
if (gimple_code (stmt) == GIMPLE_NOP
|
||||
|| gimple_code (stmt) == GIMPLE_PREDICT
|
||||
|| gimple_code (stmt) == GIMPLE_LABEL)
|
||||
;
|
||||
else if (gassign *assign = dyn_cast <gassign *> (stmt))
|
||||
if (gassign *assign = dyn_cast <gassign *> (stmt))
|
||||
{
|
||||
tree lhs = gimple_assign_lhs (assign);
|
||||
enum tree_code ass_code
|
||||
|
|
Loading…
Add table
Reference in a new issue