arm: Generate correct const_ints (PR86640)
authorSegher Boessenkool <segher@kernel.crashing.org>
Mon, 30 Jul 2018 17:50:26 +0000 (19:50 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Mon, 30 Jul 2018 17:50:26 +0000 (19:50 +0200)
In arm_block_set_aligned_vect 8-bit constants are generated as zero-
extended const_ints, not sign-extended as required.  Fix that.

PR target/86640
* config/arm/arm.c (arm_block_set_aligned_vect): Use gen_int_mode
instead of GEN_INT.

From-SVN: r263075

gcc/ChangeLog
gcc/config/arm/arm.c

index 20781df77c77684f5c4d87fdb63b7de6acb6b1d1..0616687f5d9632a4562f0dbc05155e95d795063a 100644 (file)
@@ -1,3 +1,9 @@
+2018-07-30  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/86640
+       * config/arm/arm.c (arm_block_set_aligned_vect): Use gen_int_mode
+       instead of GEN_INT.
+
 2018-07-30  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        * tree-ssa-forwprop.c (simplify_builtin_call): Don't create a not NUL
index cf12aceb5fde303c9762c3d08c05a718146fe876..f5eece4f152b11dd6df2ba62a1f3b0b5bcd9cbf8 100644 (file)
@@ -30046,7 +30046,6 @@ arm_block_set_aligned_vect (rtx dstbase,
   rtx dst, addr, mem;
   rtx val_vec, reg;
   machine_mode mode;
-  unsigned HOST_WIDE_INT v = value;
   unsigned int offset = 0;
 
   gcc_assert ((align & 0x3) == 0);
@@ -30065,10 +30064,8 @@ arm_block_set_aligned_vect (rtx dstbase,
 
   dst = copy_addr_to_reg (XEXP (dstbase, 0));
 
-  v = sext_hwi (v, BITS_PER_WORD);
-
   reg = gen_reg_rtx (mode);
-  val_vec = gen_const_vec_duplicate (mode, GEN_INT (v));
+  val_vec = gen_const_vec_duplicate (mode, gen_int_mode (value, QImode));
   /* Emit instruction loading the constant value.  */
   emit_move_insn (reg, val_vec);