From 6380a82ebec199fcd27f320c1f7115293781386b Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 21 Jun 2016 10:52:57 +0000 Subject: cse.c (canon_asm_operands): New function extracted from... * cse.c (canon_asm_operands): New function extracted from... (canonicalize_insn): ...here. Call it to canonicalize an ASM_OPERANDS either standalone or member of a PARALLEL. From-SVN: r237642 --- gcc/cse.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'gcc/cse.c') diff --git a/gcc/cse.c b/gcc/cse.c index 3b4cc96ce05..c14f29ddf73 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -4298,6 +4298,22 @@ find_sets_in_insn (rtx_insn *insn, struct set **psets) return n_sets; } +/* Subroutine of canonicalize_insn. X is an ASM_OPERANDS in INSN. */ + +static void +canon_asm_operands (rtx x, rtx_insn *insn) +{ + for (int i = ASM_OPERANDS_INPUT_LENGTH (x) - 1; i >= 0; i--) + { + rtx input = ASM_OPERANDS_INPUT (x, i); + if (!(REG_P (input) && HARD_REGISTER_P (input))) + { + input = canon_reg (input, insn); + validate_change (insn, &ASM_OPERANDS_INPUT (x, i), input, 1); + } + } +} + /* Where possible, substitute every register reference in the N_SETS number of SETS in INSN with the canonical register. @@ -4361,17 +4377,7 @@ canonicalize_insn (rtx_insn *insn, struct set **psets, int n_sets) /* Canonicalize a USE of a pseudo register or memory location. */ canon_reg (x, insn); else if (GET_CODE (x) == ASM_OPERANDS) - { - for (i = ASM_OPERANDS_INPUT_LENGTH (x) - 1; i >= 0; i--) - { - rtx input = ASM_OPERANDS_INPUT (x, i); - if (!(REG_P (input) && REGNO (input) < FIRST_PSEUDO_REGISTER)) - { - input = canon_reg (input, insn); - validate_change (insn, &ASM_OPERANDS_INPUT (x, i), input, 1); - } - } - } + canon_asm_operands (x, insn); else if (GET_CODE (x) == CALL) { canon_reg (x, insn); @@ -4400,6 +4406,8 @@ canonicalize_insn (rtx_insn *insn, struct set **psets, int n_sets) && ! (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) < FIRST_PSEUDO_REGISTER)) canon_reg (y, insn); + else if (GET_CODE (y) == ASM_OPERANDS) + canon_asm_operands (y, insn); else if (GET_CODE (y) == CALL) { canon_reg (y, insn); -- cgit v1.2.1