aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2011-08-27 12:44:00 +0200
committerUros Bizjak <uros@gcc.gnu.org>2011-08-27 12:44:00 +0200
commit3b0eee5d58175e688fe3fe6f7538db7b96e7f9b8 (patch)
tree90a03f17b60baaf7d5bf48876a3f0c5103628510
parentb807694e275968b94ea4363e032c057ada5a5da9 (diff)
downloadgcc-3b0eee5d58175e688fe3fe6f7538db7b96e7f9b8.zip
gcc-3b0eee5d58175e688fe3fe6f7538db7b96e7f9b8.tar.gz
gcc-3b0eee5d58175e688fe3fe6f7538db7b96e7f9b8.tar.bz2
sse.md (*absneg<mode>2): Fix split condition.
* config/i386/sse.md (*absneg<mode>2): Fix split condition. (vec_extract_lo_<mode>): Prevent both operands in memory. (vec_extract_lo_v16hi): Ditto. (*vec_extract_v4sf_mem): Add TARGET_SSE insn constraint. * config/i386/sse.md (mulv16qi3): Attach REG_EQUAL note. (*sse2_mulv4si3): Ditto. (mulv2di3): Ditto. * config/i386/i386.c (legitimize_tls_address): Change REG_EQIV notes to REG_EQUAL. From-SVN: r178132
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/config/i386/sse.md23
3 files changed, 36 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 659bb0e..b1cde85 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,9 +1,24 @@
2011-08-27 Uros Bizjak <ubizjak@gmail.com>
+ * config/i386/sse.md (*absneg<mode>2): Fix split condition.
+ (vec_extract_lo_<mode>): Prevent both operands in memory.
+ (vec_extract_lo_v16hi): Ditto.
+ (*vec_extract_v4sf_mem): Add TARGET_SSE insn constraint.
+
+2011-08-27 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sse.md (mulv16qi3): Attach REG_EQUAL note.
+ (*sse2_mulv4si3): Ditto.
+ (mulv2di3): Ditto.
+ * config/i386/i386.c (legitimize_tls_address): Change REG_EQIV
+ notes to REG_EQUAL.
+
+2011-08-27 Uros Bizjak <ubizjak@gmail.com>
+
PR target/50202
* config/i386/sse.md (sse4_2_pcmpestr): Emit NOTE_INSN_DELETED note
when all outputs are unused.
- (sse4_2_pcmpestr): Ditto.
+ (sse4_2_pcmpistr): Ditto.
2011-08-26 Uros Bizjak <ubizjak@gmail.com>
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 3a8b081..bfb42a4 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -12268,7 +12268,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
tp = get_thread_pointer (true);
dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, tp, dest));
- set_unique_reg_note (get_last_insn (), REG_EQUIV, x);
+ set_unique_reg_note (get_last_insn (), REG_EQUAL, x);
}
else
{
@@ -12315,7 +12315,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
emit_insn (gen_tls_dynamic_gnu2_32 (base, tmp, pic));
tp = get_thread_pointer (true);
- set_unique_reg_note (get_last_insn (), REG_EQUIV,
+ set_unique_reg_note (get_last_insn (), REG_EQUAL,
gen_rtx_MINUS (Pmode, tmp, tp));
}
else
@@ -12331,7 +12331,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
insns = get_insns ();
end_sequence ();
- /* Attach a unique REG_EQUIV, to allow the RTL optimizers to
+ /* Attach a unique REG_EQUAL, to allow the RTL optimizers to
share the LD_BASE result with other LD model accesses. */
eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
UNSPEC_TLS_LD_BASE);
@@ -12352,7 +12352,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
{
dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, dest, tp));
- set_unique_reg_note (get_last_insn (), REG_EQUIV, x);
+ set_unique_reg_note (get_last_insn (), REG_EQUAL, x);
}
break;
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 0c7daf2..fa22e9a 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -648,7 +648,7 @@
(use (match_operand:VF 2 "nonimmediate_operand" "xm,0, xm,x"))]
"TARGET_SSE"
"#"
- "reload_completed"
+ "&& reload_completed"
[(const_int 0)]
{
enum rtx_code absneg_op;
@@ -3708,7 +3708,7 @@
(vec_select:<ssehalfvecmode>
(match_operand:VI8F_256 1 "nonimmediate_operand" "xm,x")
(parallel [(const_int 0) (const_int 1)])))]
- "TARGET_AVX"
+ "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -3742,7 +3742,7 @@
(match_operand:VI4F_256 1 "nonimmediate_operand" "xm,x")
(parallel [(const_int 0) (const_int 1)
(const_int 2) (const_int 3)])))]
- "TARGET_AVX"
+ "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -3779,7 +3779,7 @@
(const_int 2) (const_int 3)
(const_int 4) (const_int 5)
(const_int 6) (const_int 7)])))]
- "TARGET_AVX"
+ "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -3822,7 +3822,7 @@
(const_int 10) (const_int 11)
(const_int 12) (const_int 13)
(const_int 14) (const_int 15)])))]
- "TARGET_AVX"
+ "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -3876,9 +3876,9 @@
(vec_select:SF
(match_operand:V4SF 1 "memory_operand" "o")
(parallel [(match_operand 2 "const_0_to_3_operand" "n")])))]
- ""
+ "TARGET_SSE"
"#"
- "reload_completed"
+ "&& reload_completed"
[(const_int 0)]
{
int i = INTVAL (operands[2]);
@@ -4726,6 +4726,9 @@
/* Extract the even bytes and merge them back together. */
ix86_expand_vec_extract_even_odd (operands[0], t[5], t[4], 0);
+
+ set_unique_reg_note (get_last_insn (), REG_EQUAL,
+ gen_rtx_MULT (V16QImode, operands[1], operands[2]));
DONE;
})
@@ -5179,6 +5182,9 @@
/* Merge the parts back together. */
emit_insn (gen_vec_interleave_lowv4si (op0, t5, t6));
+
+ set_unique_reg_note (get_last_insn (), REG_EQUAL,
+ gen_rtx_MULT (V4SImode, operands[1], operands[2]));
DONE;
})
@@ -5261,6 +5267,9 @@
emit_insn (gen_addv2di3 (t6, t1, t4));
emit_insn (gen_addv2di3 (op0, t6, t5));
}
+
+ set_unique_reg_note (get_last_insn (), REG_EQUAL,
+ gen_rtx_MULT (V2DImode, operands[1], operands[2]));
DONE;
})