diff options
author | Alan Modra <amodra@gmail.com> | 2020-09-30 12:34:20 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-09-30 12:36:52 +0930 |
commit | ac001f5ce604f40f0a0099909325837b8792294b (patch) | |
tree | 835d29f420d1da4218a26d248967869960460515 | |
parent | 93bca37c0a6dec354592676233e40e66741fdbe4 (diff) | |
download | gcc-ac001f5ce604f40f0a0099909325837b8792294b.zip gcc-ac001f5ce604f40f0a0099909325837b8792294b.tar.gz gcc-ac001f5ce604f40f0a0099909325837b8792294b.tar.bz2 |
Re: rs6000: Use parameterized names for tablejump
* config/rs6000/rs6000.md (@tablejump<mode>_normal): Don't use
non-existent operands[].
(@tablejump<mode>_nospec): Likewise.
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 24ad809..779bfd1 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -12716,21 +12716,22 @@ (use (match_operand:P 1))] "rs6000_speculate_indirect_jumps" { + rtx off; operands[0] = force_reg (SImode, operands[0]); if (<MODE>mode == SImode) - operands[4] = operands[0]; + off = operands[0]; else { - operands[4] = gen_reg_rtx (Pmode); + off = gen_reg_rtx (Pmode); rtx src = gen_rtx_fmt_e (SIGN_EXTEND, Pmode, operands[0]); - emit_move_insn (operands[4], src); + emit_move_insn (off, src); } - operands[2] = force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, operands[1])); - operands[3] = gen_reg_rtx (Pmode); + rtx lab = force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, operands[1])); + rtx addr = gen_reg_rtx (Pmode); - emit_insn (gen_add<mode>3 (operands[3], operands[4], operands[2])); - emit_jump_insn (gen_tablejump_insn_normal (Pmode, operands[3], operands[1])); + emit_insn (gen_add<mode>3 (addr, off, lab)); + emit_jump_insn (gen_tablejump_insn_normal (Pmode, addr, operands[1])); DONE; }) @@ -12740,21 +12741,22 @@ (use (match_operand:CC 2))] "!rs6000_speculate_indirect_jumps" { + rtx off; operands[0] = force_reg (SImode, operands[0]); if (<MODE>mode == SImode) - operands[4] = operands[0]; + off = operands[0]; else { - operands[4] = gen_reg_rtx (Pmode); + off = gen_reg_rtx (Pmode); rtx src = gen_rtx_fmt_e (SIGN_EXTEND, Pmode, operands[0]); - emit_move_insn (operands[4], src); + emit_move_insn (off, src); } - operands[5] = force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, operands[1])); - operands[3] = gen_reg_rtx (Pmode); + rtx lab = force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, operands[1])); + rtx addr = gen_reg_rtx (Pmode); - emit_insn (gen_add<mode>3 (operands[3], operands[4], operands[5])); - emit_jump_insn (gen_tablejump_insn_nospec (Pmode, operands[3], operands[1], + emit_insn (gen_add<mode>3 (addr, off, lab)); + emit_jump_insn (gen_tablejump_insn_nospec (Pmode, addr, operands[1], operands[2])); DONE; }) |