nds32: Fix casesi (PR70668)
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 28 Apr 2016 16:50:41 +0000 (18:50 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Thu, 28 Apr 2016 16:50:41 +0000 (18:50 +0200)
Expanders do not have more elements in the operands array than declared
in the pattern.  So, we cannot use operands[5] here.  Instead just
declare and use another rtx.

PR target/70668
* config/nds32/nds32.md (casesi): Don't access the operands array
out of bounds.

From-SVN: r235583

gcc/ChangeLog
gcc/config/nds32/nds32.md

index 3defcd2adf0fbab2e835449cda279fe5add76a12..c3a9c5ed457463ffdd7545ac036a2b7506a2628a 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-28  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/70668
+       * config/nds32/nds32.md (casesi): Don't access the operands array
+       out of bounds.
+
 2016-04-28  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (zeroing peephole2): Use general_reg_operand.
index 5cdd8b24aae65652ba99e65306bfe151d0494619..494a78d91e58fba231698ab72732e3cf50f2f186 100644 (file)
@@ -2288,11 +2288,9 @@ create_template:
   emit_jump_insn (gen_cbranchsi4 (test, operands[0], operands[2],
                                  operands[4]));
 
-  operands[5] = gen_reg_rtx (SImode);
-  /* Step C, D, E, and F, using another temporary register operands[5].  */
-  emit_jump_insn (gen_casesi_internal (operands[0],
-                                      operands[3],
-                                      operands[5]));
+  /* Step C, D, E, and F, using another temporary register.  */
+  rtx tmp = gen_reg_rtx (SImode);
+  emit_jump_insn (gen_casesi_internal (operands[0], operands[3], tmp));
   DONE;
 })