Fix IFN_MASK_STORE handling of IFN_GOMP_SIMD_LANE
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 7 Jan 2019 18:53:44 +0000 (18:53 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 7 Jan 2019 18:53:44 +0000 (18:53 +0000)
The IFN_GOMP_SIMD_LANE handling in vectorizable_store tries to use MEM_REF
offsets to maintain pointer disambiguation info.  This patch makes sure
that we don't try to do the same optimisation for IFN_MASK_STOREs, which
have no similar offset argument.

The patch fixes libgomp.c-c++-common/pr66199-*.c for SVE.  Previously
we had an ncopies==2 store and stored both halves to the same address.

2019-01-07  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-stmts.c (vectorizable_store): Don't use the dataref_offset
optimization for masked stores.

From-SVN: r267654

gcc/ChangeLog
gcc/tree-vect-stmts.c

index c236588c23a5964ef7c012595fe137ec21520d7d..c2074578d3f423c928bb457ea52a0c0421d176f6 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-07  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * tree-vect-stmts.c (vectorizable_store): Don't use the dataref_offset
+       optimization for masked stores.
+
 2019-01-07  Richard Sandiford  <richard.sandiford@arm.com>
 
        PR middle-end/88567
index 45550927069addd2bb025cf1e27cedf3e52eb866..c0e19dd178c4f255fd725bf43fee4f54f65314ff 100644 (file)
@@ -7059,6 +7059,7 @@ vectorizable_store (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
          bool simd_lane_access_p
            = STMT_VINFO_SIMD_LANE_ACCESS_P (stmt_info);
          if (simd_lane_access_p
+             && !loop_masks
              && TREE_CODE (DR_BASE_ADDRESS (first_dr_info->dr)) == ADDR_EXPR
              && VAR_P (TREE_OPERAND (DR_BASE_ADDRESS (first_dr_info->dr), 0))
              && integer_zerop (DR_OFFSET (first_dr_info->dr))