diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2009-03-30 09:09:52 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2009-03-30 09:09:52 +0000 |
commit | 65c5ae8b1d8c9f86dd398f0c0313598fb5172f02 (patch) | |
tree | 8cea258def420209db5de2fb050cfcbf6909f08b /gcc | |
parent | d25aa7ab77a7ffa75ba3a029d1b2fd6a4084e965 (diff) | |
download | gcc-65c5ae8b1d8c9f86dd398f0c0313598fb5172f02.zip gcc-65c5ae8b1d8c9f86dd398f0c0313598fb5172f02.tar.gz gcc-65c5ae8b1d8c9f86dd398f0c0313598fb5172f02.tar.bz2 |
sparc.c (sparc_compare_emitted): Remove.
2009-03-30 Paolo Bonzini <bonzini@gnu.org>
* config/sparc/sparc.c (sparc_compare_emitted): Remove.
(gen_compare_reg, emit_v9_brxx_insn): Handle MODE_CC
sparc_compare_op0 like sparc_compare_emitted used to be handled.
(sparc_expand_compare_and_swap_12): Set sparc_compare_op0
instead of sparc_compare_emitted.
* config/sparc/sparc.h (sparc_compare_emitted): Remove.
* config/sparc/sparc.md (stack_protect_test): Set sparc_compare_op0
instead of sparc_compare_emitted.
From-SVN: r145284
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 25 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.h | 4 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.md | 5 |
4 files changed, 26 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e70130..552e97d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2009-03-30 Paolo Bonzini <bonzini@gnu.org> + * config/sparc/sparc.c (sparc_compare_emitted): Remove. + (gen_compare_reg, emit_v9_brxx_insn): Handle MODE_CC + sparc_compare_op0 like sparc_compare_emitted used to be handled. + (sparc_expand_compare_and_swap_12): Set sparc_compare_op0 + instead of sparc_compare_emitted. + * config/sparc/sparc.h (sparc_compare_emitted): Remove. + * config/sparc/sparc.md (stack_protect_test): Set sparc_compare_op0 + instead of sparc_compare_emitted. + +2009-03-30 Paolo Bonzini <bonzini@gnu.org> + * bb-reorder.c (partition_hot_cold_basic_blocks): Do not enter/exit cfglayout mode. (pass_partition_block): Require it. diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index e20bfbdb..7e6a358 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -282,7 +282,7 @@ static GTY(()) alias_set_type struct_value_alias_set; /* Save the operands last given to a compare for use when we generate a scc or bcc insn. */ -rtx sparc_compare_op0, sparc_compare_op1, sparc_compare_emitted; +rtx sparc_compare_op0, sparc_compare_op1; /* Vector to say how input registers are mapped to output registers. HARD_FRAME_POINTER_REGNUM cannot be remapped by this function to @@ -2006,17 +2006,15 @@ select_cc_mode (enum rtx_code op, rtx x, rtx y ATTRIBUTE_UNUSED) rtx gen_compare_reg (enum rtx_code code) { - rtx x = sparc_compare_op0; - rtx y = sparc_compare_op1; - enum machine_mode mode = SELECT_CC_MODE (code, x, y); - rtx cc_reg; + enum machine_mode mode; + rtx x, y, cc_reg; - if (sparc_compare_emitted != NULL_RTX) - { - cc_reg = sparc_compare_emitted; - sparc_compare_emitted = NULL_RTX; - return cc_reg; - } + if (GET_MODE_CLASS (GET_MODE (sparc_compare_op0)) == MODE_CC) + return sparc_compare_op0; + + x = sparc_compare_op0; + y = sparc_compare_op1; + mode = SELECT_CC_MODE (code, x, y); /* ??? We don't have movcc patterns so we cannot generate pseudo regs for the fcc regs (cse can't tell they're really call clobbered regs and will @@ -2198,7 +2196,7 @@ gen_v9_scc (enum rtx_code compare_code, register rtx *operands) void emit_v9_brxx_insn (enum rtx_code code, rtx op0, rtx label) { - gcc_assert (sparc_compare_emitted == NULL_RTX); + gcc_assert (GET_MODE_CLASS (GET_MODE (sparc_compare_op0)) != MODE_CC); emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, gen_rtx_IF_THEN_ELSE (VOIDmode, @@ -9026,7 +9024,8 @@ sparc_expand_compare_and_swap_12 (rtx result, rtx mem, rtx oldval, rtx newval) emit_insn (gen_rtx_SET (VOIDmode, val, resv)); - sparc_compare_emitted = cc; + sparc_compare_op0 = cc; + sparc_compare_op1 = const0_rtx; emit_jump_insn (gen_bne (loop_label)); emit_label (end_label); diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 6271a94..6a46093 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1558,12 +1558,10 @@ function_arg_padding ((MODE), (TYPE)) ? 128 : PARM_BOUNDARY) /* Define the information needed to generate branch and scc insns. This is - stored from the compare operation. Note that we can't use "rtx" here - since it hasn't been defined! */ + stored from the compare operation. */ extern GTY(()) rtx sparc_compare_op0; extern GTY(()) rtx sparc_compare_op1; -extern GTY(()) rtx sparc_compare_emitted; /* Generate the special assembly code needed to tell the assembler whatever diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index e5098a5..dd282a2 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -8076,9 +8076,8 @@ else { emit_insn (gen_stack_protect_testsi (operands[0], operands[1])); - sparc_compare_op0 = operands[0]; - sparc_compare_op1 = operands[1]; - sparc_compare_emitted = gen_rtx_REG (CCmode, SPARC_ICC_REG); + sparc_compare_op0 = gen_rtx_REG (CCmode, SPARC_ICC_REG); + sparc_compare_op1 = const0_rtx; } emit_jump_insn (gen_beq (operands[2])); DONE; |