From 67b8f1c1494dd7e1832030e4f6b1cb8c9ca0427d Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 7 Apr 2009 12:26:23 +0000 Subject: [PATCH] i386.c (ix86_compare_emitted): Remove. 2009-04-07 Paolo Bonzini * config/i386/i386.c (ix86_compare_emitted): Remove. (ix86_expand_compare, ix86_expand_branch): Handle MODE_CC ix86_compare_op0 like ix86_compare_emitted used to be handled. * config/i386/i386.h (ix86_compare_emitted): Remove. * config/i386/i386.md (stack_protect_test): Set ix86_compare_op0 instead of ix86_compare_emitted. * config/i386/sync.md (sync_compare_and_swap_cc): Likewise. From-SVN: r145665 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/i386/i386.c | 21 ++++++++------------- gcc/config/i386/i386.h | 1 - gcc/config/i386/i386.md | 6 +++--- gcc/config/i386/sync.md | 5 ++--- 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7219666f64c..1830f9df255 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2009-04-07 Paolo Bonzini + + * config/i386/i386.c (ix86_compare_emitted): Remove. + (ix86_expand_compare, ix86_expand_branch): Handle MODE_CC + ix86_compare_op0 like ix86_compare_emitted used to be handled. + * config/i386/i386.h (ix86_compare_emitted): Remove. + * config/i386/i386.md (stack_protect_test): Set ix86_compare_op0 + instead of ix86_compare_emitted. + * config/i386/sync.md (sync_compare_and_swap_cc): Likewise. + 2009-04-07 Andrew Stubbs * config.gcc (sh-*-*): Add sysroot-suffix.h to tm_file. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ea9d35efade..d87e853265f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -1702,7 +1702,6 @@ int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER] = rtx ix86_compare_op0 = NULL_RTX; rtx ix86_compare_op1 = NULL_RTX; -rtx ix86_compare_emitted = NULL_RTX; /* Define parameter passing and return registers. */ @@ -14271,11 +14270,9 @@ ix86_expand_compare (enum rtx_code code, rtx *second_test, rtx *bypass_test) if (bypass_test) *bypass_test = NULL_RTX; - if (ix86_compare_emitted) - { - ret = gen_rtx_fmt_ee (code, VOIDmode, ix86_compare_emitted, const0_rtx); - ix86_compare_emitted = NULL_RTX; - } + if (GET_MODE_CLASS (GET_MODE (ix86_compare_op0)) == MODE_CC) + ret = gen_rtx_fmt_ee (code, VOIDmode, ix86_compare_op0, ix86_compare_op1); + else if (SCALAR_FLOAT_MODE_P (GET_MODE (op0))) { gcc_assert (!DECIMAL_FLOAT_MODE_P (GET_MODE (op0))); @@ -14304,12 +14301,6 @@ ix86_expand_branch (enum rtx_code code, rtx label) { rtx tmp; - /* If we have emitted a compare insn, go straight to simple. - ix86_expand_compare won't emit anything if ix86_compare_emitted - is non NULL. */ - if (ix86_compare_emitted) - goto simple; - switch (GET_MODE (ix86_compare_op0)) { case QImode: @@ -14510,7 +14501,11 @@ ix86_expand_branch (enum rtx_code code, rtx label) } default: - gcc_unreachable (); + /* If we have already emitted a compare insn, go straight to simple. + ix86_expand_compare won't emit anything if ix86_compare_emitted + is non NULL. */ + gcc_assert (GET_MODE_CLASS (GET_MODE (ix86_compare_op0)) == MODE_CC); + goto simple; } } diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 9746e158f5a..1f87d10571b 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2333,7 +2333,6 @@ extern enum reg_class const regclass_map[FIRST_PSEUDO_REGISTER]; extern rtx ix86_compare_op0; /* operand 0 for comparisons */ extern rtx ix86_compare_op1; /* operand 1 for comparisons */ -extern rtx ix86_compare_emitted; /* To properly truncate FP values into integers, we need to set i387 control word. We can't emit proper mode switching code before reload, as spills diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 02a4f6ec8b8..b388cd16bfb 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -21954,9 +21954,6 @@ "" { rtx flags = gen_rtx_REG (CCZmode, FLAGS_REG); - ix86_compare_op0 = operands[0]; - ix86_compare_op1 = operands[1]; - ix86_compare_emitted = flags; #ifdef TARGET_THREAD_SSP_OFFSET if (TARGET_64BIT) @@ -21971,6 +21968,9 @@ else emit_insn (gen_stack_protect_test_si (flags, operands[0], operands[1])); #endif + + ix86_compare_op0 = flags; + ix86_compare_op1 = const0_rtx; emit_jump_insn (gen_beq (operands[2])); DONE; }) diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md index 05aad00ba94..7f92c14b3c5 100644 --- a/gcc/config/i386/sync.md +++ b/gcc/config/i386/sync.md @@ -168,9 +168,8 @@ "TARGET_CMPXCHG" { operands[4] = gen_rtx_REG (CCZmode, FLAGS_REG); - ix86_compare_op0 = operands[3]; - ix86_compare_op1 = NULL; - ix86_compare_emitted = operands[4]; + ix86_compare_op0 = operands[4]; + ix86_compare_op1 = const0_rtx; if ((mode == DImode && !TARGET_64BIT) || mode == TImode) { enum machine_mode hmode = mode == DImode ? SImode : DImode; -- 2.11.4.GIT