Commit 57ac4c34 by Andreas Krebbel Committed by Andreas Krebbel

recog.c (insn_invalid_p): Add IN_GROUP parameter and use validate_change to add clobbers if...

2012-04-24  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

	* recog.c (insn_invalid_p): Add IN_GROUP parameter and use
	validate_change to add clobbers if IN_GROUP is nonzero.
	(verify_changes): Call insn_invalid_p with IN_GROUP set to true.
	* recog.h (insn_invalid_p): Add IN_GROUP parameter to function
	prototype.
	* gcse.c (process_insert_insn): Call insn_invalid_p with IN_GROUP
	set to false.
	* config/s390/s390.c (insn_invalid_p): Likewise.

From-SVN: r186748
parent d9030ea4
2012-04-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* recog.c (insn_invalid_p): Add IN_GROUP parameter and use
validate_change to add clobbers if IN_GROUP is nonzero.
(verify_changes): Call insn_invalid_p with IN_GROUP set to true.
* recog.h (insn_invalid_p): Add IN_GROUP parameter to function
prototype.
* gcse.c (process_insert_insn): Call insn_invalid_p with IN_GROUP
set to false.
* config/s390/s390.c (insn_invalid_p): Likewise.
2012-04-24 Jakub Jelinek <jakub@redhat.com>
PR middle-end/53084
......
......@@ -4413,7 +4413,7 @@ s390_expand_addcc (enum rtx_code cmp_code, rtx cmp_op0, rtx cmp_op1,
insn = gen_rtx_SET (VOIDmode, gen_rtx_REG (cc_mode, CC_REGNUM),
gen_rtx_COMPARE (cc_mode, cmp_op0, cmp_op1));
/* We use insn_invalid_p here to add clobbers if required. */
ret = insn_invalid_p (emit_insn (insn));
ret = insn_invalid_p (emit_insn (insn), false);
gcc_assert (!ret);
/* Emit ALC instruction pattern. */
......@@ -4485,7 +4485,7 @@ s390_expand_addcc (enum rtx_code cmp_code, rtx cmp_op0, rtx cmp_op1,
insn = gen_rtx_SET (VOIDmode, gen_rtx_REG (cc_mode, CC_REGNUM),
gen_rtx_COMPARE (cc_mode, cmp_op0, cmp_op1));
/* We use insn_invalid_p here to add clobbers if required. */
ret = insn_invalid_p (emit_insn (insn));
ret = insn_invalid_p (emit_insn (insn), false);
gcc_assert (!ret);
/* Emit SLB instruction pattern. */
......
......@@ -2087,7 +2087,7 @@ process_insert_insn (struct expr *expr)
{
rtx insn = emit_insn (gen_rtx_SET (VOIDmode, reg, exp));
if (insn_invalid_p (insn))
if (insn_invalid_p (insn, false))
gcc_unreachable ();
}
......
......@@ -309,10 +309,14 @@ canonicalize_change_group (rtx insn, rtx x)
/* This subroutine of apply_change_group verifies whether the changes to INSN
were valid; i.e. whether INSN can still be recognized. */
were valid; i.e. whether INSN can still be recognized.
If IN_GROUP is true clobbers which have to be added in order to
match the instructions will be added to the current change group.
Otherwise the changes will take effect immediately. */
int
insn_invalid_p (rtx insn)
insn_invalid_p (rtx insn, bool in_group)
{
rtx pat = PATTERN (insn);
int num_clobbers = 0;
......@@ -344,7 +348,10 @@ insn_invalid_p (rtx insn)
newpat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (num_clobbers + 1));
XVECEXP (newpat, 0, 0) = pat;
add_clobbers (newpat, icode);
PATTERN (insn) = pat = newpat;
if (in_group)
validate_change (insn, &PATTERN (insn), newpat, 1);
else
PATTERN (insn) = pat = newpat;
}
/* After reload, verify that all constraints are satisfied. */
......@@ -413,7 +420,7 @@ verify_changes (int num)
}
else if (DEBUG_INSN_P (object))
continue;
else if (insn_invalid_p (object))
else if (insn_invalid_p (object, true))
{
rtx pat = PATTERN (object);
......
......@@ -79,7 +79,7 @@ extern int asm_operand_ok (rtx, const char *, const char **);
extern bool validate_change (rtx, rtx *, rtx, bool);
extern bool validate_unshare_change (rtx, rtx *, rtx, bool);
extern bool canonicalize_change_group (rtx insn, rtx x);
extern int insn_invalid_p (rtx);
extern int insn_invalid_p (rtx, bool);
extern int verify_changes (int);
extern void confirm_change_group (void);
extern int apply_change_group (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment