This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, AARCH64] movi type attribute confusion


We have 5 patterns that can emit the movi instruction.  These patterns
map it to 4 different type attributes.  The mov<mode>_aarch64 pattern
uses mov_imm.  The movdi_aarch64 pattern uses fmov.  The movtf_aarch64
pattern uses fconstd.  And the two aarch64_simd_mov<mode> patterns for
VD and VQ use neon_move.  Bitwise identical instructions should always
map to the same attribute type, so we need to change these patterns to
agree on the right attribute.  movi is an integer simd instruction, so
neon_move is the only choice that makes sense.  The following patch
corrects the first 3 patterns to use neon_move like the last two.

We could optionally create a new type attribute, e.g. neon_move_imm.
I can do that if people think it would be better.

This patch was tested with a make bootstrap and make check on an APM
box running Ubuntu 14.04.

FYI This patch overlaps with my movtf-zero patch which is still
waiting review, but the overlap is trivial to resolve so this should
not be a problem.

Jim
2015-06-12  Jim Wilson  <jim.wilson@linaro.org>

	* config/aarch64/aarch64.md (mov<mode>_aarch64): Change alternative 2
	to use neon_move instead of mov_imm.
	(movdi_aarch64): Change alternative 14 to use neon_move not fmov.
	(movtf_aarch64): Change alternative 4 to use neon_move_q not fconstd.

Index: config/aarch64/aarch64.md
===================================================================
--- config/aarch64/aarch64.md	(revision 224441)
+++ config/aarch64/aarch64.md	(working copy)
@@ -827,7 +827,7 @@ (define_insn "*mov<mode>_aarch64"
        gcc_unreachable ();
      }
 }
-  [(set_attr "type" "mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\
+  [(set_attr "type" "mov_reg,mov_imm,neon_move,load1,load1,store1,store1,\
                      neon_to_gp<q>,neon_from_gp<q>,neon_dup")
    (set_attr "simd" "*,*,yes,*,*,*,*,yes,yes,yes")]
 )
@@ -912,7 +912,7 @@ (define_insn_and_split "*movdi_aarch64"
        DONE;
     }"
   [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\
-                     adr,adr,f_mcr,f_mrc,fmov,fmov")
+                     adr,adr,f_mcr,f_mrc,fmov,neon_move")
    (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*")
    (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")]
 )
@@ -1063,7 +1063,7 @@ (define_insn "*movtf_aarch64"
    str\\t%q1, %0
    ldp\\t%0, %H0, %1
    stp\\t%1, %H1, %0"
-  [(set_attr "type" "logic_reg,multiple,f_mcr,f_mrc,fconstd,fconstd,\
+  [(set_attr "type" "logic_reg,multiple,f_mcr,f_mrc,neon_move_q,fconstd,\
                      f_loadd,f_stored,neon_load1_2reg,neon_store1_2reg")
    (set_attr "length" "4,8,8,8,4,4,4,4,4,4")
    (set_attr "fp" "*,*,yes,yes,*,yes,yes,yes,*,*")

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]