+2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * tree-vect-loop.c (vect_transform_loop): Stub out scalar
+ IFN_MASK_LOAD calls here rather than...
+ * tree-vect-stmts.c (vectorizable_mask_load_store): ...here.
+
2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gsi_next (&si);
}
} /* stmts in BB */
+
+ /* Stub out scalar statements that must not survive vectorization.
+ Doing this here helps with grouped statements, or statements that
+ are involved in patterns. */
+ for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
+ !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ gcall *call = dyn_cast <gcall *> (gsi_stmt (gsi));
+ if (call && gimple_call_internal_p (call, IFN_MASK_LOAD))
+ {
+ tree lhs = gimple_get_lhs (call);
+ if (!VECTOR_TYPE_P (TREE_TYPE (lhs)))
+ {
+ tree zero = build_zero_cst (TREE_TYPE (lhs));
+ gimple *new_stmt = gimple_build_assign (lhs, zero);
+ gsi_replace (&gsi, new_stmt, true);
+ }
+ }
+ }
} /* BBs in loop */
/* The vectorization factor is always > 1, so if we use an IV increment of 1.
STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;
prev_stmt_info = vinfo_for_stmt (new_stmt);
}
-
- /* Ensure that even with -fno-tree-dce the scalar MASK_LOAD is removed
- from the IL. */
- if (STMT_VINFO_RELATED_STMT (stmt_info))
- {
- stmt = STMT_VINFO_RELATED_STMT (stmt_info);
- stmt_info = vinfo_for_stmt (stmt);
- }
- tree lhs = gimple_call_lhs (stmt);
- new_stmt = gimple_build_assign (lhs, build_zero_cst (TREE_TYPE (lhs)));
- set_vinfo_for_stmt (new_stmt, stmt_info);
- set_vinfo_for_stmt (stmt, NULL);
- STMT_VINFO_STMT (stmt_info) = new_stmt;
- gsi_replace (gsi, new_stmt, true);
return true;
}
else if (vls_type != VLS_LOAD)
}
}
- if (vls_type == VLS_LOAD)
- {
- /* Ensure that even with -fno-tree-dce the scalar MASK_LOAD is removed
- from the IL. */
- if (STMT_VINFO_RELATED_STMT (stmt_info))
- {
- stmt = STMT_VINFO_RELATED_STMT (stmt_info);
- stmt_info = vinfo_for_stmt (stmt);
- }
- tree lhs = gimple_call_lhs (stmt);
- new_stmt = gimple_build_assign (lhs, build_zero_cst (TREE_TYPE (lhs)));
- set_vinfo_for_stmt (new_stmt, stmt_info);
- set_vinfo_for_stmt (stmt, NULL);
- STMT_VINFO_STMT (stmt_info) = new_stmt;
- gsi_replace (gsi, new_stmt, true);
- }
-
return true;
}