mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 10:54:07 +08:00
tree-ifcvt: Add zero maskload else value.
When predicating a load we implicitly assume that the else value is zero. This matters in case the loaded value is padded (like e.g. a Bool) and we must ensure that the padding bytes are zero on targets that don't implicitly zero inactive elements. A former version of this patch still had this handling in ifcvt but the latest version defers it to the vectorizer. gcc/ChangeLog: * tree-if-conv.cc (predicate_load_or_store): Add zero else operand and comment.
This commit is contained in:
parent
8f68d9cb78
commit
6b6bd53619
@ -2555,9 +2555,17 @@ predicate_load_or_store (gimple_stmt_iterator *gsi, gassign *stmt, tree mask)
|
||||
ref);
|
||||
if (TREE_CODE (lhs) == SSA_NAME)
|
||||
{
|
||||
/* Get a zero else value. This might not be what a target actually uses
|
||||
but we cannot be sure about which vector mode the vectorizer will
|
||||
choose. Therefore, leave the decision whether we need to force the
|
||||
inactive elements to zero to the vectorizer. */
|
||||
tree els = vect_get_mask_load_else (MASK_LOAD_ELSE_ZERO,
|
||||
TREE_TYPE (lhs));
|
||||
|
||||
new_stmt
|
||||
= gimple_build_call_internal (IFN_MASK_LOAD, 3, addr,
|
||||
ptr, mask);
|
||||
= gimple_build_call_internal (IFN_MASK_LOAD, 4, addr,
|
||||
ptr, mask, els);
|
||||
|
||||
gimple_call_set_lhs (new_stmt, lhs);
|
||||
gimple_set_vuse (new_stmt, gimple_vuse (stmt));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user