OSDN Git Service

* config/epiphany/epiphany.md (<insn_opname>v2si3):
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Apr 2013 16:03:05 +0000 (16:03 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Apr 2013 16:03:05 +0000 (16:03 +0000)
        Use gen_addsi3_i / gen_subsi3_i.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@197592 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/epiphany/epiphany.md

index e6abaf4..ec7aa1a 100644 (file)
@@ -30,6 +30,9 @@
        comparison to a non-zero operand.
        Use (clobber (scratch)) for first insn if the gpr output is not needed.
 
+       * config/epiphany/epiphany.md (<insn_opname>v2si3):
+       Use gen_addsi3_i / gen_subsi3_i.
+
 2013-04-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/34949
index 4bb8da3..7b63ef2 100644 (file)
   [(plus "add") (minus "sub") (mult "mul") (div "div")
    (and "and") (ior "ior") (xor "xor")])
 
+; The addsi3 / subsi3 do checks that we don't want when splitting V2SImode
+; operations into two SImode operations.
+(define_code_attr si_pattern_suffix
+  [(plus "_i") (minus "_i") (and "") (ior "") (xor "")])
+
 ; You might think that this would work better as a define_expand, but
 ; again lower_subreg pessimizes the code if it sees indiviudual operations.
 ; We need to keep inputs and outputs as register pairs if we want to
     o1h = copy_to_mode_reg (SImode, o1h);
   if (reg_overlap_mentioned_p (o0l, o2h))
     o2h = copy_to_mode_reg (SImode, o2h);
-  emit_insn (gen_<insn_opname>si3 (o0l, o1l, o2l));
-  emit_insn (gen_<insn_opname>si3 (o0h, o1h, o2h));
+  emit_insn (gen_<insn_opname>si3<si_pattern_suffix> (o0l, o1l, o2l));
+  emit_insn (gen_<insn_opname>si3<si_pattern_suffix> (o0h, o1h, o2h));
   DONE;
 }
   [(set_attr "length" "8")])