From: Andrew Stubbs Date: Tue, 17 Mar 2020 12:58:14 +0000 (+0000) Subject: amdgcn: refactor mode iterators X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=038769535a8cbdd3dd3e100bde3140df52f868c5;p=gcc.git amdgcn: refactor mode iterators The iterative addition of 8 and 16 bit vectors has left the mode iterators in a bit of a mess. Also, the original names were rather verbose leading to formatting difficulties. This patch renames all the vector modes such that they are shorter and tidier. It does not change the output machine description at all. 2020-03-27 Andrew Stubbs gcc/ * config/gcn/gcn-valu.md: (VEC_SUBDWORD_MODE): Rename to V_QIHI throughout. (VEC_1REG_MODE): Delete. (VEC_1REG_ALT): Delete. (VEC_ALL1REG_MODE): Rename to V_1REG throughout. (VEC_1REG_INT_MODE): Delete. (VEC_ALL1REG_INT_MODE): Rename to V_INT_1REG throughout. (VEC_ALL1REG_INT_ALT): Rename to V_INT_1REG_ALT throughout. (VEC_2REG_MODE): Rename to V_2REG throughout. (VEC_REG_MODE): Rename to V_noHI throughout. (VEC_ALLREG_MODE): Rename to V_ALL throughout. (VEC_ALLREG_ALT): Rename to V_ALL_ALT throughout. (VEC_ALLREG_INT_MODE): Rename to V_INT throughout. (VEC_INT_MODE): Delete. (VEC_FP_MODE): Rename to V_FP throughout and move to top. (VEC_FP_1REG_MODE): Rename to V_FP_1REG throughout and move to top. (FP_MODE): Delete and replace with FP throughout. (FP_1REG_MODE): Delete and replace with FP_1REG throughout. (VCMP_MODE): Rename to V_noQI throughout and move to top. (VCMP_MODE_INT): Rename to V_INT_noQI throughout and move to top. * config/gcn/gcn.md (FP): New mode iterator. (FP_1REG): New mode iterator. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c4386d832dd..3a52840eff1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,28 @@ +2020-03-27 Andrew Stubbs + + * config/gcn/gcn-valu.md: + (VEC_SUBDWORD_MODE): Rename to V_QIHI throughout. + (VEC_1REG_MODE): Delete. + (VEC_1REG_ALT): Delete. + (VEC_ALL1REG_MODE): Rename to V_1REG throughout. + (VEC_1REG_INT_MODE): Delete. + (VEC_ALL1REG_INT_MODE): Rename to V_INT_1REG throughout. + (VEC_ALL1REG_INT_ALT): Rename to V_INT_1REG_ALT throughout. + (VEC_2REG_MODE): Rename to V_2REG throughout. + (VEC_REG_MODE): Rename to V_noHI throughout. + (VEC_ALLREG_MODE): Rename to V_ALL throughout. + (VEC_ALLREG_ALT): Rename to V_ALL_ALT throughout. + (VEC_ALLREG_INT_MODE): Rename to V_INT throughout. + (VEC_INT_MODE): Delete. + (VEC_FP_MODE): Rename to V_FP throughout and move to top. + (VEC_FP_1REG_MODE): Rename to V_FP_1REG throughout and move to top. + (FP_MODE): Delete and replace with FP throughout. + (FP_1REG_MODE): Delete and replace with FP_1REG throughout. + (VCMP_MODE): Rename to V_noQI throughout and move to top. + (VCMP_MODE_INT): Rename to V_INT_noQI throughout and move to top. + * config/gcn/gcn.md (FP): New mode iterator. + (FP_1REG): New mode iterator. + 2020-03-27 David Malcolm * doc/invoke.texi (-fdump-analyzer-supergraph): Document that this diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md index d3620688a9c..475d2d4e61e 100644 --- a/gcc/config/gcn/gcn-valu.md +++ b/gcc/config/gcn/gcn-valu.md @@ -17,41 +17,43 @@ ;; {{{ Vector iterators ; Vector modes for sub-dword modes -(define_mode_iterator VEC_SUBDWORD_MODE +(define_mode_iterator V_QIHI [V64QI V64HI]) ; Vector modes for one vector register -(define_mode_iterator VEC_1REG_MODE - [V64SI V64HF V64SF]) -(define_mode_iterator VEC_1REG_ALT - [V64SI V64HF V64SF]) -(define_mode_iterator VEC_ALL1REG_MODE +(define_mode_iterator V_1REG [V64QI V64HI V64SI V64HF V64SF]) -(define_mode_iterator VEC_1REG_INT_MODE - [V64SI]) -(define_mode_iterator VEC_ALL1REG_INT_MODE +(define_mode_iterator V_INT_1REG [V64QI V64HI V64SI]) -(define_mode_iterator VEC_ALL1REG_INT_ALT +(define_mode_iterator V_INT_1REG_ALT [V64QI V64HI V64SI]) +(define_mode_iterator V_FP_1REG + [V64HF V64SF]) ; Vector modes for two vector registers -(define_mode_iterator VEC_2REG_MODE +(define_mode_iterator V_2REG [V64DI V64DF]) +; Vector modes with native support +(define_mode_iterator V_noQI + [V64HI V64HF V64SI V64SF V64DI V64DF]) +(define_mode_iterator V_noHI + [V64HF V64SI V64SF V64DI V64DF]) + +(define_mode_iterator V_INT_noQI + [V64HI V64SI V64DI]) + ; All of above -(define_mode_iterator VEC_REG_MODE - [V64SI V64HF V64SF ; Single reg - V64DI V64DF]) ; Double reg -(define_mode_iterator VEC_ALLREG_MODE - [V64QI V64HI V64SI V64HF V64SF ; Single reg - V64DI V64DF]) ; Double reg -(define_mode_iterator VEC_ALLREG_ALT - [V64QI V64HI V64SI V64HF V64SF ; Single reg - V64DI V64DF]) ; Double reg -(define_mode_iterator VEC_ALLREG_INT_MODE - [V64QI V64HI V64SI ; Single reg - V64DI]) ; Double reg +(define_mode_iterator V_ALL + [V64QI V64HI V64HF V64SI V64SF V64DI V64DF]) +(define_mode_iterator V_ALL_ALT + [V64QI V64HI V64HF V64SI V64SF V64DI V64DF]) + +(define_mode_iterator V_INT + [V64QI V64HI V64SI V64DI]) +(define_mode_iterator V_FP + [V64HF V64SF V64DF]) (define_mode_attr scalar_mode [(V64QI "qi") (V64HI "hi") (V64SI "si") @@ -76,41 +78,38 @@ "" "_exec") (define_subst "vec_merge" - [(set (match_operand:VEC_ALLREG_MODE 0) - (match_operand:VEC_ALLREG_MODE 1))] + [(set (match_operand:V_ALL 0) + (match_operand:V_ALL 1))] "" [(set (match_dup 0) - (vec_merge:VEC_ALLREG_MODE + (vec_merge:V_ALL (match_dup 1) - (match_operand:VEC_ALLREG_MODE 3 - "gcn_register_or_unspec_operand" "U0") + (match_operand:V_ALL 3 "gcn_register_or_unspec_operand" "U0") (match_operand:DI 4 "gcn_exec_reg_operand" "e")))]) (define_subst "vec_merge_with_clobber" - [(set (match_operand:VEC_ALLREG_MODE 0) - (match_operand:VEC_ALLREG_MODE 1)) + [(set (match_operand:V_ALL 0) + (match_operand:V_ALL 1)) (clobber (match_operand 2))] "" [(set (match_dup 0) - (vec_merge:VEC_ALLREG_MODE + (vec_merge:V_ALL (match_dup 1) - (match_operand:VEC_ALLREG_MODE 3 - "gcn_register_or_unspec_operand" "U0") + (match_operand:V_ALL 3 "gcn_register_or_unspec_operand" "U0") (match_operand:DI 4 "gcn_exec_reg_operand" "e"))) (clobber (match_dup 2))]) (define_subst "vec_merge_with_vcc" - [(set (match_operand:VEC_ALLREG_MODE 0) - (match_operand:VEC_ALLREG_MODE 1)) + [(set (match_operand:V_ALL 0) + (match_operand:V_ALL 1)) (set (match_operand:DI 2) (match_operand:DI 3))] "" [(parallel [(set (match_dup 0) - (vec_merge:VEC_ALLREG_MODE + (vec_merge:V_ALL (match_dup 1) - (match_operand:VEC_ALLREG_MODE 4 - "gcn_register_or_unspec_operand" "U0") + (match_operand:V_ALL 4 "gcn_register_or_unspec_operand" "U0") (match_operand:DI 5 "gcn_exec_reg_operand" "e"))) (set (match_dup 2) (and:DI (match_dup 3) @@ -142,8 +141,8 @@ ; gather/scatter, maskload/store, etc. (define_expand "mov" - [(set (match_operand:VEC_ALLREG_MODE 0 "nonimmediate_operand") - (match_operand:VEC_ALLREG_MODE 1 "general_operand"))] + [(set (match_operand:V_ALL 0 "nonimmediate_operand") + (match_operand:V_ALL 1 "general_operand"))] "" { if (MEM_P (operands[0]) && !lra_in_progress && !reload_completed) @@ -181,28 +180,26 @@ ; A pseudo instruction that helps LRA use the "U0" constraint. (define_insn "mov_unspec" - [(set (match_operand:VEC_ALLREG_MODE 0 "nonimmediate_operand" "=v") - (match_operand:VEC_ALLREG_MODE 1 "gcn_unspec_operand" " U"))] + [(set (match_operand:V_ALL 0 "nonimmediate_operand" "=v") + (match_operand:V_ALL 1 "gcn_unspec_operand" " U"))] "" "" [(set_attr "type" "unknown") (set_attr "length" "0")]) (define_insn "*mov" - [(set (match_operand:VEC_ALL1REG_MODE 0 "nonimmediate_operand" "=v,v") - (match_operand:VEC_ALL1REG_MODE 1 "general_operand" "vA,B"))] + [(set (match_operand:V_1REG 0 "nonimmediate_operand" "=v,v") + (match_operand:V_1REG 1 "general_operand" "vA,B"))] "" "v_mov_b32\t%0, %1" [(set_attr "type" "vop1,vop1") (set_attr "length" "4,8")]) (define_insn "mov_exec" - [(set (match_operand:VEC_ALL1REG_MODE 0 "nonimmediate_operand" - "=v, v, v, v, v, m") - (vec_merge:VEC_ALL1REG_MODE - (match_operand:VEC_ALL1REG_MODE 1 "general_operand" - "vA, B, v,vA, m, v") - (match_operand:VEC_ALL1REG_MODE 3 "gcn_alu_or_unspec_operand" + [(set (match_operand:V_1REG 0 "nonimmediate_operand" "=v, v, v, v, v, m") + (vec_merge:V_1REG + (match_operand:V_1REG 1 "general_operand" "vA, B, v,vA, m, v") + (match_operand:V_1REG 3 "gcn_alu_or_unspec_operand" "U0,U0,vA,vA,U0,U0") (match_operand:DI 2 "register_operand" " e, e,cV,Sv, e, e"))) (clobber (match_scratch:V64DI 4 "=X, X, X, X,&v,&v"))] @@ -221,13 +218,12 @@ ; read/modify/write which is necessary for maskstore. ;(define_insn "*mov_exec_match" -; [(set (match_operand:VEC_ALL1REG_MODE 0 "nonimmediate_operand" -; "=v,v, v, m") -; (vec_merge:VEC_ALL1REG_MODE -; (match_operand:VEC_ALL1REG_MODE 1 "general_operand" "vA,B, m, v") +; [(set (match_operand:V_1REG 0 "nonimmediate_operand" "=v,v, v, m") +; (vec_merge:V_1REG +; (match_operand:V_1REG 1 "general_operand" "vA,B, m, v") ; (match_dup 0) -; (match_operand:DI 2 "gcn_exec_reg_operand" " e,e, e, e"))) -; (clobber (match_scratch:V64DI 3 "=X,X,&v,&v"))] +; (match_operand:DI 2 "gcn_exec_reg_operand" " e,e, e, e"))) +; (clobber (match_scratch:V64DI 3 "=X,X,&v,&v"))] ; "!MEM_P (operands[0]) || REG_P (operands[1])" ; "@ ; v_mov_b32\t%0, %1 @@ -238,8 +234,8 @@ ; (set_attr "length" "4,8,16,16")]) (define_insn "*mov" - [(set (match_operand:VEC_2REG_MODE 0 "nonimmediate_operand" "=v") - (match_operand:VEC_2REG_MODE 1 "general_operand" "vDB"))] + [(set (match_operand:V_2REG 0 "nonimmediate_operand" "=v") + (match_operand:V_2REG 1 "general_operand" "vDB"))] "" { if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) @@ -251,12 +247,10 @@ (set_attr "length" "16")]) (define_insn "mov_exec" - [(set (match_operand:VEC_2REG_MODE 0 "nonimmediate_operand" - "= v, v, v, v, m") - (vec_merge:VEC_2REG_MODE - (match_operand:VEC_2REG_MODE 1 "general_operand" - "vDB, v0, v0, m, v") - (match_operand:VEC_2REG_MODE 3 "gcn_alu_or_unspec_operand" + [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, v, v, m") + (vec_merge:V_2REG + (match_operand:V_2REG 1 "general_operand" "vDB, v0, v0, m, v") + (match_operand:V_2REG 3 "gcn_alu_or_unspec_operand" " U0,vDA0,vDA0,U0,U0") (match_operand:DI 2 "register_operand" " e, cV, Sv, e, e"))) (clobber (match_scratch:V64DI 4 "= X, X, X,&v,&v"))] @@ -296,12 +290,12 @@ ; read/modify/write which is necessary for maskstore. ;(define_insn "*mov_exec_match" -; [(set (match_operand:VEC_2REG_MODE 0 "nonimmediate_operand" "=v, v, m") -; (vec_merge:VEC_2REG_MODE -; (match_operand:VEC_2REG_MODE 1 "general_operand" "vDB, m, v") +; [(set (match_operand:V_2REG 0 "nonimmediate_operand" "=v, v, m") +; (vec_merge:V_2REG +; (match_operand:V_2REG 1 "general_operand" "vDB, m, v") ; (match_dup 0) -; (match_operand:DI 2 "gcn_exec_reg_operand" " e, e, e"))) -; (clobber (match_scratch:V64DI 3 "=X,&v,&v"))] +; (match_operand:DI 2 "gcn_exec_reg_operand" " e, e, e"))) +; (clobber (match_scratch:V64DI 3 "=X,&v,&v"))] ; "!MEM_P (operands[0]) || REG_P (operands[1])" ; "@ ; * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \ @@ -326,13 +320,11 @@ ; flat_load v, vT (define_insn "mov_sgprbase" - [(set (match_operand:VEC_ALL1REG_MODE 0 "nonimmediate_operand" - "= v, v, v, m") - (unspec:VEC_ALL1REG_MODE - [(match_operand:VEC_ALL1REG_MODE 1 "general_operand" - " vA,vB, m, v")] + [(set (match_operand:V_1REG 0 "nonimmediate_operand" "= v, v, v, m") + (unspec:V_1REG + [(match_operand:V_1REG 1 "general_operand" " vA,vB, m, v")] UNSPEC_SGPRBASE)) - (clobber (match_operand:V64DI 2 "register_operand" "=&v,&v,&v,&v"))] + (clobber (match_operand:V64DI 2 "register_operand" "=&v,&v,&v,&v"))] "lra_in_progress || reload_completed" "@ v_mov_b32\t%0, %1 @@ -343,11 +335,11 @@ (set_attr "length" "4,8,12,12")]) (define_insn "mov_sgprbase" - [(set (match_operand:VEC_2REG_MODE 0 "nonimmediate_operand" "= v, v, m") - (unspec:VEC_2REG_MODE - [(match_operand:VEC_2REG_MODE 1 "general_operand" "vDB, m, v")] + [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, m") + (unspec:V_2REG + [(match_operand:V_2REG 1 "general_operand" "vDB, m, v")] UNSPEC_SGPRBASE)) - (clobber (match_operand:V64DI 2 "register_operand" "=&v,&v,&v"))] + (clobber (match_operand:V64DI 2 "register_operand" "=&v,&v,&v"))] "lra_in_progress || reload_completed" "@ * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \ @@ -363,9 +355,9 @@ ; gcn_secondary_reload. It allows a reload with a scratch register. (define_expand "reload_in" - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand" "= v") - (match_operand:VEC_ALLREG_MODE 1 "memory_operand" " m")) - (clobber (match_operand:V64DI 2 "register_operand" "=&v"))] + [(set (match_operand:V_ALL 0 "register_operand" "= v") + (match_operand:V_ALL 1 "memory_operand" " m")) + (clobber (match_operand:V64DI 2 "register_operand" "=&v"))] "" { emit_insn (gen_mov_sgprbase (operands[0], operands[1], operands[2])); @@ -375,9 +367,9 @@ ; reload_out is similar to reload_in, above. (define_expand "reload_out" - [(set (match_operand:VEC_ALLREG_MODE 0 "memory_operand" "= m") - (match_operand:VEC_ALLREG_MODE 1 "register_operand" " v")) - (clobber (match_operand:V64DI 2 "register_operand" "=&v"))] + [(set (match_operand:V_ALL 0 "memory_operand" "= m") + (match_operand:V_ALL 1 "register_operand" " v")) + (clobber (match_operand:V64DI 2 "register_operand" "=&v"))] "" { emit_insn (gen_mov_sgprbase (operands[0], operands[1], operands[2])); @@ -387,9 +379,9 @@ ; Expand scalar addresses into gather/scatter patterns (define_split - [(set (match_operand:VEC_ALLREG_MODE 0 "memory_operand") - (unspec:VEC_ALLREG_MODE - [(match_operand:VEC_ALLREG_MODE 1 "general_operand")] + [(set (match_operand:V_ALL 0 "memory_operand") + (unspec:V_ALL + [(match_operand:V_ALL 1 "general_operand")] UNSPEC_SGPRBASE)) (clobber (match_scratch:V64DI 2))] "" @@ -405,10 +397,10 @@ }) (define_split - [(set (match_operand:VEC_ALLREG_MODE 0 "memory_operand") - (vec_merge:VEC_ALLREG_MODE - (match_operand:VEC_ALLREG_MODE 1 "general_operand") - (match_operand:VEC_ALLREG_MODE 2 "") + [(set (match_operand:V_ALL 0 "memory_operand") + (vec_merge:V_ALL + (match_operand:V_ALL 1 "general_operand") + (match_operand:V_ALL 2 "") (match_operand:DI 3 "gcn_exec_reg_operand"))) (clobber (match_scratch:V64DI 4))] "" @@ -426,16 +418,16 @@ }) (define_split - [(set (match_operand:VEC_ALLREG_MODE 0 "nonimmediate_operand") - (unspec:VEC_ALLREG_MODE - [(match_operand:VEC_ALLREG_MODE 1 "memory_operand")] + [(set (match_operand:V_ALL 0 "nonimmediate_operand") + (unspec:V_ALL + [(match_operand:V_ALL 1 "memory_operand")] UNSPEC_SGPRBASE)) (clobber (match_scratch:V64DI 2))] "" [(set (match_dup 0) - (unspec:VEC_ALLREG_MODE [(match_dup 5) (match_dup 6) (match_dup 7) - (mem:BLK (scratch))] - UNSPEC_GATHER))] + (unspec:V_ALL [(match_dup 5) (match_dup 6) (match_dup 7) + (mem:BLK (scratch))] + UNSPEC_GATHER))] { operands[5] = gcn_expand_scalar_to_vector_address (mode, NULL, operands[1], @@ -445,18 +437,18 @@ }) (define_split - [(set (match_operand:VEC_ALLREG_MODE 0 "nonimmediate_operand") - (vec_merge:VEC_ALLREG_MODE - (match_operand:VEC_ALLREG_MODE 1 "memory_operand") - (match_operand:VEC_ALLREG_MODE 2 "") + [(set (match_operand:V_ALL 0 "nonimmediate_operand") + (vec_merge:V_ALL + (match_operand:V_ALL 1 "memory_operand") + (match_operand:V_ALL 2 "") (match_operand:DI 3 "gcn_exec_reg_operand"))) (clobber (match_scratch:V64DI 4))] "" [(set (match_dup 0) - (vec_merge:VEC_ALLREG_MODE - (unspec:VEC_ALLREG_MODE [(match_dup 5) (match_dup 6) (match_dup 7) - (mem:BLK (scratch))] - UNSPEC_GATHER) + (vec_merge:V_ALL + (unspec:V_ALL [(match_dup 5) (match_dup 6) (match_dup 7) + (mem:BLK (scratch))] + UNSPEC_GATHER) (match_dup 2) (match_dup 3)))] { @@ -479,14 +471,13 @@ ; FIXME these should take A immediates (define_insn "*vec_set" - [(set (match_operand:VEC_ALL1REG_MODE 0 "register_operand" "= v") - (vec_merge:VEC_ALL1REG_MODE - (vec_duplicate:VEC_ALL1REG_MODE - (match_operand: 1 "register_operand" " Sv")) - (match_operand:VEC_ALL1REG_MODE 3 "gcn_register_or_unspec_operand" - " U0") + [(set (match_operand:V_1REG 0 "register_operand" "= v") + (vec_merge:V_1REG + (vec_duplicate:V_1REG + (match_operand: 1 "register_operand" " Sv")) + (match_operand:V_1REG 3 "gcn_register_or_unspec_operand" " U0") (ashift (const_int 1) - (match_operand:SI 2 "gcn_alu_operand" "SvB"))))] + (match_operand:SI 2 "gcn_alu_operand" "SvB"))))] "" "v_writelane_b32 %0, %1, %2" [(set_attr "type" "vop3a") @@ -497,14 +488,13 @@ ; FIXME: 64bit operations really should be splitters, but I am not sure how ; to represent vertical subregs. (define_insn "*vec_set" - [(set (match_operand:VEC_2REG_MODE 0 "register_operand" "= v") - (vec_merge:VEC_2REG_MODE - (vec_duplicate:VEC_2REG_MODE - (match_operand: 1 "register_operand" " Sv")) - (match_operand:VEC_2REG_MODE 3 "gcn_register_or_unspec_operand" - " U0") + [(set (match_operand:V_2REG 0 "register_operand" "= v") + (vec_merge:V_2REG + (vec_duplicate:V_2REG + (match_operand: 1 "register_operand" " Sv")) + (match_operand:V_2REG 3 "gcn_register_or_unspec_operand" " U0") (ashift (const_int 1) - (match_operand:SI 2 "gcn_alu_operand" "SvB"))))] + (match_operand:SI 2 "gcn_alu_operand" "SvB"))))] "" "v_writelane_b32 %L0, %L1, %2\;v_writelane_b32 %H0, %H1, %2" [(set_attr "type" "vmult") @@ -513,22 +503,21 @@ (set_attr "laneselect" "yes")]) (define_expand "vec_set" - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand") - (vec_merge:VEC_ALLREG_MODE - (vec_duplicate:VEC_ALLREG_MODE + [(set (match_operand:V_ALL 0 "register_operand") + (vec_merge:V_ALL + (vec_duplicate:V_ALL (match_operand: 1 "register_operand")) (match_dup 0) (ashift (const_int 1) (match_operand:SI 2 "gcn_alu_operand"))))] "") (define_insn "*vec_set_1" - [(set (match_operand:VEC_ALL1REG_MODE 0 "register_operand" "=v") - (vec_merge:VEC_ALL1REG_MODE - (vec_duplicate:VEC_ALL1REG_MODE - (match_operand: 1 "register_operand" "Sv")) - (match_operand:VEC_ALL1REG_MODE 3 "gcn_register_or_unspec_operand" - "U0") - (match_operand:SI 2 "const_int_operand" " i")))] + [(set (match_operand:V_1REG 0 "register_operand" "=v") + (vec_merge:V_1REG + (vec_duplicate:V_1REG + (match_operand: 1 "register_operand" "Sv")) + (match_operand:V_1REG 3 "gcn_register_or_unspec_operand" "U0") + (match_operand:SI 2 "const_int_operand" " i")))] "((unsigned) exact_log2 (INTVAL (operands[2])) < 64)" { operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2]))); @@ -540,13 +529,12 @@ (set_attr "laneselect" "yes")]) (define_insn "*vec_set_1" - [(set (match_operand:VEC_2REG_MODE 0 "register_operand" "=v") - (vec_merge:VEC_2REG_MODE - (vec_duplicate:VEC_2REG_MODE - (match_operand: 1 "register_operand" "Sv")) - (match_operand:VEC_2REG_MODE 3 "gcn_register_or_unspec_operand" - "U0") - (match_operand:SI 2 "const_int_operand" " i")))] + [(set (match_operand:V_2REG 0 "register_operand" "=v") + (vec_merge:V_2REG + (vec_duplicate:V_2REG + (match_operand: 1 "register_operand" "Sv")) + (match_operand:V_2REG 3 "gcn_register_or_unspec_operand" "U0") + (match_operand:SI 2 "const_int_operand" " i")))] "((unsigned) exact_log2 (INTVAL (operands[2])) < 64)" { operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2]))); @@ -558,17 +546,17 @@ (set_attr "laneselect" "yes")]) (define_insn "vec_duplicate" - [(set (match_operand:VEC_ALL1REG_MODE 0 "register_operand" "=v") - (vec_duplicate:VEC_ALL1REG_MODE - (match_operand: 1 "gcn_alu_operand" "SvB")))] + [(set (match_operand:V_1REG 0 "register_operand" "=v") + (vec_duplicate:V_1REG + (match_operand: 1 "gcn_alu_operand" "SvB")))] "" "v_mov_b32\t%0, %1" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "vec_duplicate" - [(set (match_operand:VEC_2REG_MODE 0 "register_operand" "= v") - (vec_duplicate:VEC_2REG_MODE + [(set (match_operand:V_2REG 0 "register_operand" "= v") + (vec_duplicate:V_2REG (match_operand: 1 "gcn_alu_operand" "SvDB")))] "" "v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1" @@ -576,10 +564,10 @@ (set_attr "length" "16")]) (define_insn "vec_extract" - [(set (match_operand: 0 "register_operand" "=Sg") + [(set (match_operand: 0 "register_operand" "=Sg") (vec_select: - (match_operand:VEC_ALL1REG_MODE 1 "register_operand" " v") - (parallel [(match_operand:SI 2 "gcn_alu_operand" "SvB")])))] + (match_operand:V_1REG 1 "register_operand" " v") + (parallel [(match_operand:SI 2 "gcn_alu_operand" "SvB")])))] "" "v_readlane_b32 %0, %1, %2" [(set_attr "type" "vop3a") @@ -588,10 +576,10 @@ (set_attr "laneselect" "yes")]) (define_insn "vec_extract" - [(set (match_operand: 0 "register_operand" "=&Sg") + [(set (match_operand: 0 "register_operand" "=&Sg") (vec_select: - (match_operand:VEC_2REG_MODE 1 "register_operand" " v") - (parallel [(match_operand:SI 2 "gcn_alu_operand" " SvB")])))] + (match_operand:V_2REG 1 "register_operand" " v") + (parallel [(match_operand:SI 2 "gcn_alu_operand" " SvB")])))] "" "v_readlane_b32 %L0, %L1, %2\;v_readlane_b32 %H0, %H1, %2" [(set_attr "type" "vmult") @@ -602,7 +590,7 @@ (define_expand "extract_last_" [(match_operand: 0 "register_operand") (match_operand:DI 1 "gcn_alu_operand") - (match_operand:VEC_ALLREG_MODE 2 "register_operand")] + (match_operand:V_ALL 2 "register_operand")] "can_create_pseudo_p ()" { rtx dst = operands[0]; @@ -620,7 +608,7 @@ [(match_operand: 0 "register_operand") (match_operand: 1 "gcn_alu_operand") (match_operand:DI 2 "gcn_alu_operand") - (match_operand:VEC_ALLREG_MODE 3 "register_operand")] + (match_operand:V_ALL 3 "register_operand")] "can_create_pseudo_p ()" { rtx dst = operands[0]; @@ -642,7 +630,7 @@ }) (define_expand "vec_init" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") + [(match_operand:V_ALL 0 "register_operand") (match_operand 1)] "" { @@ -684,7 +672,7 @@ ;; - Multiple forms of address expression are supported, below. (define_expand "gather_loadv64si" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") + [(match_operand:V_ALL 0 "register_operand") (match_operand:DI 1 "register_operand") (match_operand:V64SI 2 "register_operand") (match_operand 3 "immediate_operand") @@ -707,8 +695,8 @@ ; Allow any address expression (define_expand "gather_expr" - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand") - (unspec:VEC_ALLREG_MODE + [(set (match_operand:V_ALL 0 "register_operand") + (unspec:V_ALL [(match_operand 1 "") (match_operand 2 "immediate_operand") (match_operand 3 "immediate_operand") @@ -718,8 +706,8 @@ {}) (define_insn "gather_insn_1offset" - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand" "=v") - (unspec:VEC_ALLREG_MODE + [(set (match_operand:V_ALL 0 "register_operand" "=v") + (unspec:V_ALL [(plus:V64DI (match_operand:V64DI 1 "register_operand" " v") (vec_duplicate:V64DI (match_operand 2 "immediate_operand" " n"))) @@ -757,8 +745,8 @@ (set_attr "length" "12")]) (define_insn "gather_insn_1offset_ds" - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand" "=v") - (unspec:VEC_ALLREG_MODE + [(set (match_operand:V_ALL 0 "register_operand" "=v") + (unspec:V_ALL [(plus:V64SI (match_operand:V64SI 1 "register_operand" " v") (vec_duplicate:V64SI (match_operand 2 "immediate_operand" " n"))) @@ -779,8 +767,8 @@ (set_attr "length" "12")]) (define_insn "gather_insn_2offsets" - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand" "=v") - (unspec:VEC_ALLREG_MODE + [(set (match_operand:V_ALL 0 "register_operand" "=v") + (unspec:V_ALL [(plus:V64DI (plus:V64DI (vec_duplicate:V64DI @@ -820,7 +808,7 @@ (match_operand:V64SI 1 "register_operand") (match_operand 2 "immediate_operand") (match_operand:SI 3 "gcn_alu_operand") - (match_operand:VEC_ALLREG_MODE 4 "register_operand")] + (match_operand:V_ALL 4 "register_operand")] "" { rtx addr = gcn_expand_scaled_offsets (DEFAULT_ADDR_SPACE, operands[0], @@ -842,7 +830,7 @@ [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V64DI 0 "") - (match_operand:VEC_ALLREG_MODE 1 "register_operand") + (match_operand:V_ALL 1 "register_operand") (match_operand 2 "immediate_operand") (match_operand 3 "immediate_operand")] UNSPEC_SCATTER))] @@ -855,7 +843,7 @@ [(plus:V64DI (match_operand:V64DI 0 "register_operand" "v") (vec_duplicate:V64DI (match_operand 1 "immediate_operand" "n"))) - (match_operand:VEC_ALLREG_MODE 2 "register_operand" "v") + (match_operand:V_ALL 2 "register_operand" "v") (match_operand 3 "immediate_operand" "n") (match_operand 4 "immediate_operand" "n")] UNSPEC_SCATTER))] @@ -893,7 +881,7 @@ [(plus:V64SI (match_operand:V64SI 0 "register_operand" "v") (vec_duplicate:V64SI (match_operand 1 "immediate_operand" "n"))) - (match_operand:VEC_ALLREG_MODE 2 "register_operand" "v") + (match_operand:V_ALL 2 "register_operand" "v") (match_operand 3 "immediate_operand" "n") (match_operand 4 "immediate_operand" "n")] UNSPEC_SCATTER))] @@ -915,14 +903,13 @@ [(plus:V64DI (plus:V64DI (vec_duplicate:V64DI - (match_operand:DI 0 "register_operand" "Sv")) + (match_operand:DI 0 "register_operand" "Sv")) (sign_extend:V64DI - (match_operand:V64SI 1 "register_operand" " v"))) - (vec_duplicate:V64DI (match_operand 2 "immediate_operand" - " n"))) - (match_operand:VEC_ALLREG_MODE 3 "register_operand" " v") - (match_operand 4 "immediate_operand" " n") - (match_operand 5 "immediate_operand" " n")] + (match_operand:V64SI 1 "register_operand" " v"))) + (vec_duplicate:V64DI (match_operand 2 "immediate_operand" " n"))) + (match_operand:V_ALL 3 "register_operand" " v") + (match_operand 4 "immediate_operand" " n") + (match_operand 5 "immediate_operand" " n")] UNSPEC_SCATTER))] "(AS_GLOBAL_P (INTVAL (operands[4])) && (((unsigned HOST_WIDE_INT)INTVAL(operands[2]) + 0x1000) < 0x2000))" @@ -951,11 +938,11 @@ ;; {{{ Permutations (define_insn "ds_bpermute" - [(set (match_operand:VEC_ALL1REG_MODE 0 "register_operand" "=v") - (unspec:VEC_ALL1REG_MODE - [(match_operand:VEC_ALL1REG_MODE 2 "register_operand" " v") - (match_operand:V64SI 1 "register_operand" " v") - (match_operand:DI 3 "gcn_exec_reg_operand" " e")] + [(set (match_operand:V_1REG 0 "register_operand" "=v") + (unspec:V_1REG + [(match_operand:V_1REG 2 "register_operand" " v") + (match_operand:V64SI 1 "register_operand" " v") + (match_operand:DI 3 "gcn_exec_reg_operand" " e")] UNSPEC_BPERMUTE))] "" "ds_bpermute_b32\t%0, %1, %2\;s_waitcnt\tlgkmcnt(0)" @@ -963,11 +950,11 @@ (set_attr "length" "12")]) (define_insn_and_split "ds_bpermute" - [(set (match_operand:VEC_2REG_MODE 0 "register_operand" "=&v") - (unspec:VEC_2REG_MODE - [(match_operand:VEC_2REG_MODE 2 "register_operand" " v0") - (match_operand:V64SI 1 "register_operand" " v") - (match_operand:DI 3 "gcn_exec_reg_operand" " e")] + [(set (match_operand:V_2REG 0 "register_operand" "=&v") + (unspec:V_2REG + [(match_operand:V_2REG 2 "register_operand" " v0") + (match_operand:V64SI 1 "register_operand" " v") + (match_operand:DI 3 "gcn_exec_reg_operand" " e")] UNSPEC_BPERMUTE))] "" "#" @@ -986,10 +973,10 @@ (set_attr "length" "24")]) (define_insn "@dpp_move" - [(set (match_operand:VEC_REG_MODE 0 "register_operand" "=v") - (unspec:VEC_REG_MODE - [(match_operand:VEC_REG_MODE 1 "register_operand" " v") - (match_operand:SI 2 "const_int_operand" " n")] + [(set (match_operand:V_noHI 0 "register_operand" "=v") + (unspec:V_noHI + [(match_operand:V_noHI 1 "register_operand" " v") + (match_operand:SI 2 "const_int_operand" " n")] UNSPEC_MOV_DPP_SHR))] "" { @@ -1003,10 +990,10 @@ ;; {{{ ALU special case: add/sub (define_insn "add3" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "= v") - (plus:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_MODE 1 "register_operand" "% v") - (match_operand:VEC_ALL1REG_INT_MODE 2 "gcn_alu_operand" "vSvB"))) + [(set (match_operand:V_INT_1REG 0 "register_operand" "= v") + (plus:V_INT_1REG + (match_operand:V_INT_1REG 1 "register_operand" "% v") + (match_operand:V_INT_1REG 2 "gcn_alu_operand" "vSvB"))) (clobber (reg:DI VCC_REG))] "" "v_add%^_u32\t%0, vcc, %2, %1" @@ -1014,11 +1001,11 @@ (set_attr "length" "8")]) (define_insn "add3_dup" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "= v") - (plus:VEC_ALL1REG_INT_MODE - (vec_duplicate:VEC_ALL1REG_INT_MODE - (match_operand: 2 "gcn_alu_operand" "SvB")) - (match_operand:VEC_ALL1REG_INT_MODE 1 "register_operand" " v"))) + [(set (match_operand:V_INT_1REG 0 "register_operand" "= v") + (plus:V_INT_1REG + (vec_duplicate:V_INT_1REG + (match_operand: 2 "gcn_alu_operand" "SvB")) + (match_operand:V_INT_1REG 1 "register_operand" " v"))) (clobber (reg:DI VCC_REG))] "" "v_add%^_u32\t%0, vcc, %2, %1" @@ -1093,10 +1080,10 @@ (set_attr "length" "4,8")]) (define_insn "sub3" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "= v, v") - (minus:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_alu_operand" "vSvB, v") - (match_operand:VEC_ALL1REG_INT_MODE 2 "gcn_alu_operand" " v,vSvB"))) + [(set (match_operand:V_INT_1REG 0 "register_operand" "= v, v") + (minus:V_INT_1REG + (match_operand:V_INT_1REG 1 "gcn_alu_operand" "vSvB, v") + (match_operand:V_INT_1REG 2 "gcn_alu_operand" " v,vSvB"))) (clobber (reg:DI VCC_REG))] "" "@ @@ -1649,21 +1636,21 @@ (set_attr "length" "8")]) (define_insn "mul3" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "= v") - (mult:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_alu_operand" "%vSvA") - (match_operand:VEC_ALL1REG_INT_MODE 2 "gcn_alu_operand" " vSvA")))] + [(set (match_operand:V_INT_1REG 0 "register_operand" "= v") + (mult:V_INT_1REG + (match_operand:V_INT_1REG 1 "gcn_alu_operand" "%vSvA") + (match_operand:V_INT_1REG 2 "gcn_alu_operand" " vSvA")))] "" "v_mul_lo_u32\t%0, %1, %2" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "mul3_dup" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "= v") - (mult:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_alu_operand" "%vSvA") - (vec_duplicate:VEC_ALL1REG_INT_MODE - (match_operand: 2 "gcn_alu_operand" " SvA"))))] + [(set (match_operand:V_INT_1REG 0 "register_operand" "= v") + (mult:V_INT_1REG + (match_operand:V_INT_1REG 1 "gcn_alu_operand" "%vSvA") + (vec_duplicate:V_INT_1REG + (match_operand: 2 "gcn_alu_operand" " SvA"))))] "" "v_mul_lo_u32\t%0, %1, %2" [(set_attr "type" "vop3a") @@ -1892,28 +1879,24 @@ ;; }}} ;; {{{ ALU generic case -(define_mode_iterator VEC_INT_MODE [V64SI V64DI]) - (define_code_iterator bitop [and ior xor]) (define_code_iterator shiftop [ashift lshiftrt ashiftrt]) (define_code_iterator minmaxop [smin smax umin umax]) (define_insn "2" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "gcn_valu_dst_operand" "= v") - (bitunop:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_valu_src0_operand" "vSvB")))] + [(set (match_operand:V_INT_1REG 0 "gcn_valu_dst_operand" "= v") + (bitunop:V_INT_1REG + (match_operand:V_INT_1REG 1 "gcn_valu_src0_operand" "vSvB")))] "" "v_0\t%0, %1" [(set_attr "type" "vop1") (set_attr "length" "8")]) (define_insn "3" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "gcn_valu_dst_operand" "= v,RD") - (bitop:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_valu_src0_operand" - "% v, 0") - (match_operand:VEC_ALL1REG_INT_MODE 2 "gcn_valu_src1com_operand" - "vSvB, v")))] + [(set (match_operand:V_INT_1REG 0 "gcn_valu_dst_operand" "= v,RD") + (bitop:V_INT_1REG + (match_operand:V_INT_1REG 1 "gcn_valu_src0_operand" "% v, 0") + (match_operand:V_INT_1REG 2 "gcn_valu_src1com_operand" "vSvB, v")))] "" "@ v_0\t%0, %2, %1 @@ -1986,11 +1969,11 @@ (set_attr "length" "16,8")]) (define_expand "3" - [(set (match_operand:VEC_SUBDWORD_MODE 0 "register_operand" "= v") - (shiftop:VEC_SUBDWORD_MODE - (match_operand:VEC_SUBDWORD_MODE 1 "gcn_alu_operand" " v") - (vec_duplicate:VEC_SUBDWORD_MODE - (match_operand:SI 2 "gcn_alu_operand" "SvB"))))] + [(set (match_operand:V_QIHI 0 "register_operand" "= v") + (shiftop:V_QIHI + (match_operand:V_QIHI 1 "gcn_alu_operand" " v") + (vec_duplicate:V_QIHI + (match_operand:SI 2 "gcn_alu_operand" "SvB"))))] "" { enum {ashift, lshiftrt, ashiftrt}; @@ -2018,10 +2001,10 @@ (set_attr "length" "8")]) (define_expand "v3" - [(set (match_operand:VEC_SUBDWORD_MODE 0 "register_operand" "=v") - (shiftop:VEC_SUBDWORD_MODE - (match_operand:VEC_SUBDWORD_MODE 1 "gcn_alu_operand" " v") - (match_operand:VEC_SUBDWORD_MODE 2 "gcn_alu_operand" "vB")))] + [(set (match_operand:V_QIHI 0 "register_operand" "=v") + (shiftop:V_QIHI + (match_operand:V_QIHI 1 "gcn_alu_operand" " v") + (match_operand:V_QIHI 2 "gcn_alu_operand" "vB")))] "" { enum {ashift, lshiftrt, ashiftrt}; @@ -2048,10 +2031,10 @@ (set_attr "length" "8")]) (define_expand "3" - [(set (match_operand:VEC_SUBDWORD_MODE 0 "gcn_valu_dst_operand") - (minmaxop:VEC_SUBDWORD_MODE - (match_operand:VEC_SUBDWORD_MODE 1 "gcn_valu_src0_operand") - (match_operand:VEC_SUBDWORD_MODE 2 "gcn_valu_src1com_operand")))] + [(set (match_operand:V_QIHI 0 "gcn_valu_dst_operand") + (minmaxop:V_QIHI + (match_operand:V_QIHI 1 "gcn_valu_src0_operand") + (match_operand:V_QIHI 2 "gcn_valu_src1com_operand")))] "" { enum {smin, umin, smax, umax}; @@ -2112,30 +2095,25 @@ ;; }}} ;; {{{ FP binops - generic -(define_mode_iterator VEC_FP_MODE [V64HF V64SF V64DF]) -(define_mode_iterator VEC_FP_1REG_MODE [V64HF V64SF]) -(define_mode_iterator FP_MODE [HF SF DF]) -(define_mode_iterator FP_1REG_MODE [HF SF]) - (define_code_iterator comm_fp [plus mult smin smax]) (define_code_iterator nocomm_fp [minus]) (define_code_iterator all_fp [plus mult minus smin smax]) (define_insn "3" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "= v") - (comm_fp:VEC_FP_MODE - (match_operand:VEC_FP_MODE 1 "gcn_alu_operand" "% v") - (match_operand:VEC_FP_MODE 2 "gcn_alu_operand" "vSvB")))] + [(set (match_operand:V_FP 0 "register_operand" "= v") + (comm_fp:V_FP + (match_operand:V_FP 1 "gcn_alu_operand" "% v") + (match_operand:V_FP 2 "gcn_alu_operand" "vSvB")))] "" "v_0\t%0, %2, %1" [(set_attr "type" "vop2") (set_attr "length" "8")]) (define_insn "3" - [(set (match_operand:FP_MODE 0 "gcn_valu_dst_operand" "= v, RL") - (comm_fp:FP_MODE - (match_operand:FP_MODE 1 "gcn_valu_src0_operand" "% v, 0") - (match_operand:FP_MODE 2 "gcn_valu_src1_operand" "vSvB,vSvB")))] + [(set (match_operand:FP 0 "gcn_valu_dst_operand" "= v, RL") + (comm_fp:FP + (match_operand:FP 1 "gcn_valu_src0_operand" "% v, 0") + (match_operand:FP 2 "gcn_valu_src1_operand" "vSvB,vSvB")))] "" "@ v_0\t%0, %2, %1 @@ -2144,10 +2122,10 @@ (set_attr "length" "8")]) (define_insn "3" - [(set (match_operand:VEC_FP_1REG_MODE 0 "register_operand" "= v, v") - (nocomm_fp:VEC_FP_1REG_MODE - (match_operand:VEC_FP_1REG_MODE 1 "gcn_alu_operand" "vSvB, v") - (match_operand:VEC_FP_1REG_MODE 2 "gcn_alu_operand" " v,vSvB")))] + [(set (match_operand:V_FP_1REG 0 "register_operand" "= v, v") + (nocomm_fp:V_FP_1REG + (match_operand:V_FP_1REG 1 "gcn_alu_operand" "vSvB, v") + (match_operand:V_FP_1REG 2 "gcn_alu_operand" " v,vSvB")))] "" "@ v_0\t%0, %1, %2 @@ -2156,10 +2134,10 @@ (set_attr "length" "8,8")]) (define_insn "3" - [(set (match_operand:FP_1REG_MODE 0 "register_operand" "= v, v") - (nocomm_fp:FP_1REG_MODE - (match_operand:FP_1REG_MODE 1 "gcn_alu_operand" "vSvB, v") - (match_operand:FP_1REG_MODE 2 "gcn_alu_operand" " v,vSvB")))] + [(set (match_operand:FP_1REG 0 "register_operand" "= v, v") + (nocomm_fp:FP_1REG + (match_operand:FP_1REG 1 "gcn_alu_operand" "vSvB, v") + (match_operand:FP_1REG 2 "gcn_alu_operand" " v,vSvB")))] "" "@ v_0\t%0, %1, %2 @@ -2171,44 +2149,44 @@ ;; {{{ FP unops (define_insn "abs2" - [(set (match_operand:FP_MODE 0 "register_operand" "=v") - (abs:FP_MODE (match_operand:FP_MODE 1 "register_operand" " v")))] + [(set (match_operand:FP 0 "register_operand" "=v") + (abs:FP (match_operand:FP 1 "register_operand" " v")))] "" "v_add%i0\t%0, 0, |%1|" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "abs2" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "=v") - (abs:VEC_FP_MODE - (match_operand:VEC_FP_MODE 1 "register_operand" " v")))] + [(set (match_operand:V_FP 0 "register_operand" "=v") + (abs:V_FP + (match_operand:V_FP 1 "register_operand" " v")))] "" "v_add%i0\t%0, 0, |%1|" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "neg2" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "=v") - (neg:VEC_FP_MODE - (match_operand:VEC_FP_MODE 1 "register_operand" " v")))] + [(set (match_operand:V_FP 0 "register_operand" "=v") + (neg:V_FP + (match_operand:V_FP 1 "register_operand" " v")))] "" "v_add%i0\t%0, 0, -%1" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "sqrt2" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "= v") - (sqrt:VEC_FP_MODE - (match_operand:VEC_FP_MODE 1 "gcn_alu_operand" "vSvB")))] + [(set (match_operand:V_FP 0 "register_operand" "= v") + (sqrt:V_FP + (match_operand:V_FP 1 "gcn_alu_operand" "vSvB")))] "flag_unsafe_math_optimizations" "v_sqrt%i0\t%0, %1" [(set_attr "type" "vop1") (set_attr "length" "8")]) (define_insn "sqrt2" - [(set (match_operand:FP_MODE 0 "register_operand" "= v") - (sqrt:FP_MODE - (match_operand:FP_MODE 1 "gcn_alu_operand" "vSvB")))] + [(set (match_operand:FP 0 "register_operand" "= v") + (sqrt:FP + (match_operand:FP 1 "gcn_alu_operand" "vSvB")))] "flag_unsafe_math_optimizations" "v_sqrt%i0\t%0, %1" [(set_attr "type" "vop1") @@ -2218,46 +2196,46 @@ ;; {{{ FP fused multiply and add (define_insn "fma4" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "= v, v") - (fma:VEC_FP_MODE - (match_operand:VEC_FP_MODE 1 "gcn_alu_operand" "% vA, vA") - (match_operand:VEC_FP_MODE 2 "gcn_alu_operand" " vA,vSvA") - (match_operand:VEC_FP_MODE 3 "gcn_alu_operand" "vSvA, vA")))] + [(set (match_operand:V_FP 0 "register_operand" "= v, v") + (fma:V_FP + (match_operand:V_FP 1 "gcn_alu_operand" "% vA, vA") + (match_operand:V_FP 2 "gcn_alu_operand" " vA,vSvA") + (match_operand:V_FP 3 "gcn_alu_operand" "vSvA, vA")))] "" "v_fma%i0\t%0, %1, %2, %3" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "fma4_negop2" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "= v, v, v") - (fma:VEC_FP_MODE - (match_operand:VEC_FP_MODE 1 "gcn_alu_operand" " vA, vA,vSvA") - (neg:VEC_FP_MODE - (match_operand:VEC_FP_MODE 2 "gcn_alu_operand" " vA,vSvA, vA")) - (match_operand:VEC_FP_MODE 3 "gcn_alu_operand" "vSvA, vA, vA")))] + [(set (match_operand:V_FP 0 "register_operand" "= v, v, v") + (fma:V_FP + (match_operand:V_FP 1 "gcn_alu_operand" " vA, vA,vSvA") + (neg:V_FP + (match_operand:V_FP 2 "gcn_alu_operand" " vA,vSvA, vA")) + (match_operand:V_FP 3 "gcn_alu_operand" "vSvA, vA, vA")))] "" "v_fma%i0\t%0, %1, -%2, %3" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "fma4" - [(set (match_operand:FP_MODE 0 "register_operand" "= v, v") - (fma:FP_MODE - (match_operand:FP_MODE 1 "gcn_alu_operand" "% vA, vA") - (match_operand:FP_MODE 2 "gcn_alu_operand" " vA,vSvA") - (match_operand:FP_MODE 3 "gcn_alu_operand" "vSvA, vA")))] + [(set (match_operand:FP 0 "register_operand" "= v, v") + (fma:FP + (match_operand:FP 1 "gcn_alu_operand" "% vA, vA") + (match_operand:FP 2 "gcn_alu_operand" " vA,vSvA") + (match_operand:FP 3 "gcn_alu_operand" "vSvA, vA")))] "" "v_fma%i0\t%0, %1, %2, %3" [(set_attr "type" "vop3a") (set_attr "length" "8")]) (define_insn "fma4_negop2" - [(set (match_operand:FP_MODE 0 "register_operand" "= v, v, v") - (fma:FP_MODE - (match_operand:FP_MODE 1 "gcn_alu_operand" " vA, vA,vSvA") - (neg:FP_MODE - (match_operand:FP_MODE 2 "gcn_alu_operand" " vA,vSvA, vA")) - (match_operand:FP_MODE 3 "gcn_alu_operand" "vSvA, vA, vA")))] + [(set (match_operand:FP 0 "register_operand" "= v, v, v") + (fma:FP + (match_operand:FP 1 "gcn_alu_operand" " vA, vA,vSvA") + (neg:FP + (match_operand:FP 2 "gcn_alu_operand" " vA,vSvA, vA")) + (match_operand:FP 3 "gcn_alu_operand" "vSvA, vA, vA")))] "" "v_fma%i0\t%0, %1, -%2, %3" [(set_attr "type" "vop3a") @@ -2267,20 +2245,20 @@ ;; {{{ FP division (define_insn "recip2" - [(set (match_operand:VEC_FP_MODE 0 "register_operand" "= v") - (div:VEC_FP_MODE - (vec_duplicate:VEC_FP_MODE (float: (const_int 1))) - (match_operand:VEC_FP_MODE 1 "gcn_alu_operand" "vSvB")))] + [(set (match_operand:V_FP 0 "register_operand" "= v") + (div:V_FP + (vec_duplicate:V_FP (float: (const_int 1))) + (match_operand:V_FP 1 "gcn_alu_operand" "vSvB")))] "" "v_rcp%i0\t%0, %1" [(set_attr "type" "vop1") (set_attr "length" "8")]) (define_insn "recip2" - [(set (match_operand:FP_MODE 0 "register_operand" "= v") - (div:FP_MODE - (float:FP_MODE (const_int 1)) - (match_operand:FP_MODE 1 "gcn_alu_operand" "vSvB")))] + [(set (match_operand:FP 0 "register_operand" "= v") + (div:FP + (float:FP (const_int 1)) + (match_operand:FP 1 "gcn_alu_operand" "vSvB")))] "" "v_rcp%i0\t%0, %1" [(set_attr "type" "vop1") @@ -2294,9 +2272,9 @@ ;; FIXME: This does not handle denormals, NaNs, division-by-zero etc. (define_expand "div3" - [(match_operand:VEC_FP_MODE 0 "gcn_valu_dst_operand") - (match_operand:VEC_FP_MODE 1 "gcn_valu_src0_operand") - (match_operand:VEC_FP_MODE 2 "gcn_valu_src0_operand")] + [(match_operand:V_FP 0 "gcn_valu_dst_operand") + (match_operand:V_FP 1 "gcn_valu_src0_operand") + (match_operand:V_FP 2 "gcn_valu_src0_operand")] "flag_reciprocal_math" { rtx two = gcn_vec_constant (mode, @@ -2326,9 +2304,9 @@ }) (define_expand "div3" - [(match_operand:FP_MODE 0 "gcn_valu_dst_operand") - (match_operand:FP_MODE 1 "gcn_valu_src0_operand") - (match_operand:FP_MODE 2 "gcn_valu_src0_operand")] + [(match_operand:FP 0 "gcn_valu_dst_operand") + (match_operand:FP 1 "gcn_valu_src0_operand") + (match_operand:FP 2 "gcn_valu_src0_operand")] "flag_reciprocal_math" { rtx two = const_double_from_real_value (dconst2, mode); @@ -2415,21 +2393,21 @@ (zero_extend "zero_extend") (truncate "trunc")]) -(define_insn "2" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "=v") - (zero_convert:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_ALT 1 "gcn_alu_operand" " v")))] +(define_insn "2" + [(set (match_operand:V_INT_1REG 0 "register_operand" "=v") + (zero_convert:V_INT_1REG + (match_operand:V_INT_1REG_ALT 1 "gcn_alu_operand" " v")))] "" - "v_mov_b32_sdwa\t%0, %1 dst_sel: dst_unused:UNUSED_PAD src0_sel:" + "v_mov_b32_sdwa\t%0, %1 dst_sel: dst_unused:UNUSED_PAD src0_sel:" [(set_attr "type" "vop_sdwa") (set_attr "length" "8")]) -(define_insn "extend2" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "=v") - (sign_extend:VEC_ALL1REG_INT_MODE - (match_operand:VEC_ALL1REG_INT_ALT 1 "gcn_alu_operand" " v")))] +(define_insn "extend2" + [(set (match_operand:V_INT_1REG 0 "register_operand" "=v") + (sign_extend:V_INT_1REG + (match_operand:V_INT_1REG_ALT 1 "gcn_alu_operand" " v")))] "" - "v_mov_b32_sdwa\t%0, sext(%1) src0_sel:" + "v_mov_b32_sdwa\t%0, sext(%1) src0_sel:" [(set_attr "type" "vop_sdwa") (set_attr "length" "8")]) @@ -2438,9 +2416,9 @@ ;; so there must be a few tricks here. (define_insn_and_split "truncv64di2" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "=v") - (truncate:VEC_ALL1REG_INT_MODE - (match_operand:V64DI 1 "gcn_alu_operand" " v")))] + [(set (match_operand:V_INT_1REG 0 "register_operand" "=v") + (truncate:V_INT_1REG + (match_operand:V64DI 1 "gcn_alu_operand" " v")))] "" "#" "reload_completed" @@ -2458,13 +2436,12 @@ (set_attr "length" "4")]) (define_insn_and_split "truncv64di2_exec" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "=v") - (vec_merge:VEC_ALL1REG_INT_MODE - (truncate:VEC_ALL1REG_INT_MODE - (match_operand:V64DI 1 "gcn_alu_operand" " v")) - (match_operand:VEC_ALL1REG_INT_MODE 2 "gcn_alu_or_unspec_operand" - "U0") - (match_operand:DI 3 "gcn_exec_operand" " e")))] + [(set (match_operand:V_INT_1REG 0 "register_operand" "=v") + (vec_merge:V_INT_1REG + (truncate:V_INT_1REG + (match_operand:V64DI 1 "gcn_alu_operand" " v")) + (match_operand:V_INT_1REG 2 "gcn_alu_or_unspec_operand" "U0") + (match_operand:DI 3 "gcn_exec_operand" " e")))] "" "#" "reload_completed" @@ -2484,9 +2461,9 @@ (set_attr "length" "4")]) (define_insn_and_split "v64di2" - [(set (match_operand:V64DI 0 "register_operand" "=v") + [(set (match_operand:V64DI 0 "register_operand" "=v") (any_extend:V64DI - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_alu_operand" " v")))] + (match_operand:V_INT_1REG 1 "gcn_alu_operand" " v")))] "" "#" "reload_completed" @@ -2509,12 +2486,12 @@ (set_attr "length" "12")]) (define_insn_and_split "v64di2_exec" - [(set (match_operand:V64DI 0 "register_operand" "=v") + [(set (match_operand:V64DI 0 "register_operand" "=v") (vec_merge:V64DI (any_extend:V64DI - (match_operand:VEC_ALL1REG_INT_MODE 1 "gcn_alu_operand" " v")) - (match_operand:V64DI 2 "gcn_alu_or_unspec_operand" "U0") - (match_operand:DI 3 "gcn_exec_operand" " e")))] + (match_operand:V_INT_1REG 1 "gcn_alu_operand" " v")) + (match_operand:V64DI 2 "gcn_alu_or_unspec_operand" "U0") + (match_operand:DI 3 "gcn_exec_operand" " e")))] "" "#" "reload_completed" @@ -2544,16 +2521,11 @@ ;; }}} ;; {{{ Vector comparison/merge -(define_mode_iterator VCMP_MODE [V64HI V64SI V64DI V64HF V64SF V64DF]) -(define_mode_iterator VCMP_MODE_INT [V64HI V64SI V64DI]) - (define_insn "vec_cmpdi" [(set (match_operand:DI 0 "register_operand" "=cV,cV, e, e,Sg,Sg") (match_operator:DI 1 "gcn_fp_compare_operator" - [(match_operand:VCMP_MODE 2 "gcn_alu_operand" - "vSv, B,vSv, B, v,vA") - (match_operand:VCMP_MODE 3 "gcn_vop3_operand" - " v, v, v, v,vA, v")])) + [(match_operand:V_noQI 2 "gcn_alu_operand" "vSv, B,vSv, B, v,vA") + (match_operand:V_noQI 3 "gcn_vop3_operand" " v, v, v, v,vA, v")])) (clobber (match_scratch:DI 4 "= X, X, cV,cV, X, X"))] "" "@ @@ -2569,8 +2541,8 @@ (define_expand "vec_cmpudi" [(match_operand:DI 0 "register_operand") (match_operator 1 "gcn_compare_operator" - [(match_operand:VCMP_MODE_INT 2 "gcn_alu_operand") - (match_operand:VCMP_MODE_INT 3 "gcn_vop3_operand")])] + [(match_operand:V_INT_noQI 2 "gcn_alu_operand") + (match_operand:V_INT_noQI 3 "gcn_vop3_operand")])] "" { /* Unsigned comparisons use the same patterns as signed comparisons, @@ -2602,10 +2574,8 @@ [(set (match_operand:DI 0 "register_operand" "=cV,cV, e, e,Sg,Sg") (and:DI (match_operator 1 "gcn_fp_compare_operator" - [(match_operand:VCMP_MODE 2 "gcn_alu_operand" - "vSv, B,vSv, B, v,vA") - (match_operand:VCMP_MODE 3 "gcn_vop3_operand" - " v, v, v, v,vA, v")]) + [(match_operand:V_noQI 2 "gcn_alu_operand" "vSv, B,vSv, B, v,vA") + (match_operand:V_noQI 3 "gcn_vop3_operand" " v, v, v, v,vA, v")]) (match_operand:DI 4 "gcn_exec_reg_operand" " e, e, e, e, e, e"))) (clobber (match_scratch:DI 5 "= X, X, cV,cV, X, X"))] "" @@ -2622,8 +2592,8 @@ (define_expand "vec_cmpudi_exec" [(match_operand:DI 0 "register_operand") (match_operator 1 "gcn_compare_operator" - [(match_operand:VCMP_MODE_INT 2 "gcn_alu_operand") - (match_operand:VCMP_MODE_INT 3 "gcn_vop3_operand")]) + [(match_operand:V_INT_noQI 2 "gcn_alu_operand") + (match_operand:V_INT_noQI 3 "gcn_vop3_operand")]) (match_operand:DI 4 "gcn_exec_reg_operand")] "" { @@ -2659,10 +2629,10 @@ (define_insn "vec_cmpdi_dup" [(set (match_operand:DI 0 "register_operand" "=cV,cV, e,e,Sg") (match_operator:DI 1 "gcn_fp_compare_operator" - [(vec_duplicate:VCMP_MODE + [(vec_duplicate:V_noQI (match_operand: 2 "gcn_alu_operand" " Sv, B,Sv,B, A")) - (match_operand:VCMP_MODE 3 "gcn_vop3_operand" " v, v, v,v, v")])) + (match_operand:V_noQI 3 "gcn_vop3_operand" " v, v, v,v, v")])) (clobber (match_scratch:DI 4 "= X,X,cV,cV, X"))] "" "@ @@ -2678,10 +2648,10 @@ [(set (match_operand:DI 0 "register_operand" "=cV,cV, e,e,Sg") (and:DI (match_operator 1 "gcn_fp_compare_operator" - [(vec_duplicate:VCMP_MODE + [(vec_duplicate:V_noQI (match_operand: 2 "gcn_alu_operand" " Sv, B,Sv,B, A")) - (match_operand:VCMP_MODE 3 "gcn_vop3_operand" " v, v, v,v, v")]) + (match_operand:V_noQI 3 "gcn_vop3_operand" " v, v, v,v, v")]) (match_operand:DI 4 "gcn_exec_reg_operand" " e, e, e,e, e"))) (clobber (match_scratch:DI 5 "= X,X,cV,cV, X"))] "" @@ -2696,81 +2666,81 @@ (define_expand "vcond_mask_di" [(parallel - [(set (match_operand:VEC_ALLREG_MODE 0 "register_operand" "") - (vec_merge:VEC_ALLREG_MODE - (match_operand:VEC_ALLREG_MODE 1 "gcn_vop3_operand" "") - (match_operand:VEC_ALLREG_MODE 2 "gcn_alu_operand" "") + [(set (match_operand:V_ALL 0 "register_operand" "") + (vec_merge:V_ALL + (match_operand:V_ALL 1 "gcn_vop3_operand" "") + (match_operand:V_ALL 2 "gcn_alu_operand" "") (match_operand:DI 3 "register_operand" ""))) (clobber (scratch:V64DI))])] "" "") -(define_expand "vcond" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") - (match_operand:VEC_ALLREG_MODE 1 "gcn_vop3_operand") - (match_operand:VEC_ALLREG_MODE 2 "gcn_alu_operand") +(define_expand "vcond" + [(match_operand:V_ALL 0 "register_operand") + (match_operand:V_ALL 1 "gcn_vop3_operand") + (match_operand:V_ALL 2 "gcn_alu_operand") (match_operator 3 "gcn_fp_compare_operator" - [(match_operand:VEC_ALLREG_ALT 4 "gcn_alu_operand") - (match_operand:VEC_ALLREG_ALT 5 "gcn_vop3_operand")])] + [(match_operand:V_ALL_ALT 4 "gcn_alu_operand") + (match_operand:V_ALL_ALT 5 "gcn_vop3_operand")])] "" { rtx tmp = gen_reg_rtx (DImode); - emit_insn (gen_vec_cmpdi + emit_insn (gen_vec_cmpdi (tmp, operands[3], operands[4], operands[5])); - emit_insn (gen_vcond_mask_di + emit_insn (gen_vcond_mask_di (operands[0], operands[1], operands[2], tmp)); DONE; }) -(define_expand "vcond_exec" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") - (match_operand:VEC_ALLREG_MODE 1 "gcn_vop3_operand") - (match_operand:VEC_ALLREG_MODE 2 "gcn_alu_operand") +(define_expand "vcond_exec" + [(match_operand:V_ALL 0 "register_operand") + (match_operand:V_ALL 1 "gcn_vop3_operand") + (match_operand:V_ALL 2 "gcn_alu_operand") (match_operator 3 "gcn_fp_compare_operator" - [(match_operand:VEC_ALLREG_ALT 4 "gcn_alu_operand") - (match_operand:VEC_ALLREG_ALT 5 "gcn_vop3_operand")]) + [(match_operand:V_ALL_ALT 4 "gcn_alu_operand") + (match_operand:V_ALL_ALT 5 "gcn_vop3_operand")]) (match_operand:DI 6 "gcn_exec_reg_operand" "e")] "" { rtx tmp = gen_reg_rtx (DImode); - emit_insn (gen_vec_cmpdi_exec + emit_insn (gen_vec_cmpdi_exec (tmp, operands[3], operands[4], operands[5], operands[6])); - emit_insn (gen_vcond_mask_di + emit_insn (gen_vcond_mask_di (operands[0], operands[1], operands[2], tmp)); DONE; }) -(define_expand "vcondu" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") - (match_operand:VEC_ALLREG_MODE 1 "gcn_vop3_operand") - (match_operand:VEC_ALLREG_MODE 2 "gcn_alu_operand") +(define_expand "vcondu" + [(match_operand:V_ALL 0 "register_operand") + (match_operand:V_ALL 1 "gcn_vop3_operand") + (match_operand:V_ALL 2 "gcn_alu_operand") (match_operator 3 "gcn_fp_compare_operator" - [(match_operand:VEC_ALLREG_INT_MODE 4 "gcn_alu_operand") - (match_operand:VEC_ALLREG_INT_MODE 5 "gcn_vop3_operand")])] + [(match_operand:V_INT 4 "gcn_alu_operand") + (match_operand:V_INT 5 "gcn_vop3_operand")])] "" { rtx tmp = gen_reg_rtx (DImode); - emit_insn (gen_vec_cmpudi + emit_insn (gen_vec_cmpudi (tmp, operands[3], operands[4], operands[5])); - emit_insn (gen_vcond_mask_di + emit_insn (gen_vcond_mask_di (operands[0], operands[1], operands[2], tmp)); DONE; }) -(define_expand "vcondu_exec" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") - (match_operand:VEC_ALLREG_MODE 1 "gcn_vop3_operand") - (match_operand:VEC_ALLREG_MODE 2 "gcn_alu_operand") +(define_expand "vcondu_exec" + [(match_operand:V_ALL 0 "register_operand") + (match_operand:V_ALL 1 "gcn_vop3_operand") + (match_operand:V_ALL 2 "gcn_alu_operand") (match_operator 3 "gcn_fp_compare_operator" - [(match_operand:VEC_ALLREG_INT_MODE 4 "gcn_alu_operand") - (match_operand:VEC_ALLREG_INT_MODE 5 "gcn_vop3_operand")]) + [(match_operand:V_INT 4 "gcn_alu_operand") + (match_operand:V_INT 5 "gcn_vop3_operand")]) (match_operand:DI 6 "gcn_exec_reg_operand" "e")] "" { rtx tmp = gen_reg_rtx (DImode); - emit_insn (gen_vec_cmpudi_exec + emit_insn (gen_vec_cmpudi_exec (tmp, operands[3], operands[4], operands[5], operands[6])); - emit_insn (gen_vcond_mask_di + emit_insn (gen_vcond_mask_di (operands[0], operands[1], operands[2], tmp)); DONE; }) @@ -2810,8 +2780,8 @@ }) (define_expand "maskloaddi" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") - (match_operand:VEC_ALLREG_MODE 1 "memory_operand") + [(match_operand:V_ALL 0 "register_operand") + (match_operand:V_ALL 1 "memory_operand") (match_operand 2 "")] "" { @@ -2830,8 +2800,8 @@ }) (define_expand "maskstoredi" - [(match_operand:VEC_ALLREG_MODE 0 "memory_operand") - (match_operand:VEC_ALLREG_MODE 1 "register_operand") + [(match_operand:V_ALL 0 "memory_operand") + (match_operand:V_ALL 1 "register_operand") (match_operand 2 "")] "" { @@ -2845,7 +2815,7 @@ }) (define_expand "mask_gather_loadv64si" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") + [(match_operand:V_ALL 0 "register_operand") (match_operand:DI 1 "register_operand") (match_operand:V64SI 2 "register_operand") (match_operand 3 "immediate_operand") @@ -2880,7 +2850,7 @@ (match_operand:V64SI 1 "register_operand") (match_operand 2 "immediate_operand") (match_operand:SI 3 "gcn_alu_operand") - (match_operand:VEC_ALLREG_MODE 4 "register_operand") + (match_operand:V_ALL 4 "register_operand") (match_operand:DI 5 "")] "" { @@ -2906,12 +2876,12 @@ (define_code_iterator cond_op [plus minus mult]) (define_expand "cond_" - [(match_operand:VEC_ALLREG_MODE 0 "register_operand") + [(match_operand:V_ALL 0 "register_operand") (match_operand:DI 1 "register_operand") - (cond_op:VEC_ALLREG_MODE - (match_operand:VEC_ALLREG_MODE 2 "gcn_alu_operand") - (match_operand:VEC_ALLREG_MODE 3 "gcn_alu_operand")) - (match_operand:VEC_ALLREG_MODE 4 "register_operand")] + (cond_op:V_ALL + (match_operand:V_ALL 2 "gcn_alu_operand") + (match_operand:V_ALL 3 "gcn_alu_operand")) + (match_operand:V_ALL 4 "register_operand")] "" { operands[1] = force_reg (DImode, operands[1]); @@ -2927,12 +2897,12 @@ (define_code_iterator cond_bitop [and ior xor]) (define_expand "cond_" - [(match_operand:VEC_ALLREG_INT_MODE 0 "register_operand") + [(match_operand:V_INT 0 "register_operand") (match_operand:DI 1 "register_operand") - (cond_bitop:VEC_ALLREG_INT_MODE - (match_operand:VEC_ALLREG_INT_MODE 2 "gcn_alu_operand") - (match_operand:VEC_ALLREG_INT_MODE 3 "gcn_alu_operand")) - (match_operand:VEC_ALLREG_INT_MODE 4 "register_operand")] + (cond_bitop:V_INT + (match_operand:V_INT 2 "gcn_alu_operand") + (match_operand:V_INT 3 "gcn_alu_operand")) + (match_operand:V_INT 4 "register_operand")] "" { operands[1] = force_reg (DImode, operands[1]); @@ -2988,7 +2958,7 @@ (define_expand "reduc__scal_" [(set (match_operand: 0 "register_operand") (unspec: - [(match_operand:VEC_ALLREG_MODE 1 "register_operand")] + [(match_operand:V_ALL 1 "register_operand")] REDUC_UNSPEC))] "" { @@ -3003,11 +2973,11 @@ (define_insn "*_dpp_shr_" - [(set (match_operand:VEC_ALL1REG_MODE 0 "register_operand" "=v") - (unspec:VEC_ALL1REG_MODE - [(match_operand:VEC_ALL1REG_MODE 1 "register_operand" "v") - (match_operand:VEC_ALL1REG_MODE 2 "register_operand" "v") - (match_operand:SI 3 "const_int_operand" "n")] + [(set (match_operand:V_1REG 0 "register_operand" "=v") + (unspec:V_1REG + [(match_operand:V_1REG 1 "register_operand" "v") + (match_operand:V_1REG 2 "register_operand" "v") + (match_operand:SI 3 "const_int_operand" "n")] REDUC_UNSPEC))] ; GCN3 requires a carry out, GCN5 not "!(TARGET_GCN3 && SCALAR_INT_MODE_P (mode) @@ -3049,11 +3019,11 @@ ; Special cases for addition. (define_insn "*plus_carry_dpp_shr_" - [(set (match_operand:VEC_ALL1REG_INT_MODE 0 "register_operand" "=v") - (unspec:VEC_ALL1REG_INT_MODE - [(match_operand:VEC_ALL1REG_INT_MODE 1 "register_operand" "v") - (match_operand:VEC_ALL1REG_INT_MODE 2 "register_operand" "v") - (match_operand:SI 3 "const_int_operand" "n")] + [(set (match_operand:V_INT_1REG 0 "register_operand" "=v") + (unspec:V_INT_1REG + [(match_operand:V_INT_1REG 1 "register_operand" "v") + (match_operand:V_INT_1REG 2 "register_operand" "v") + (match_operand:SI 3 "const_int_operand" "n")] UNSPEC_PLUS_CARRY_DPP_SHR)) (clobber (reg:DI VCC_REG))] "" @@ -3117,9 +3087,9 @@ ; Instructions to move a scalar value from lane 63 of a vector register. (define_insn "mov_from_lane63_" - [(set (match_operand: 0 "register_operand" "=Sg,v") + [(set (match_operand: 0 "register_operand" "=Sg,v") (unspec: - [(match_operand:VEC_ALL1REG_MODE 1 "register_operand" "v,v")] + [(match_operand:V_1REG 1 "register_operand" " v,v")] UNSPEC_MOV_FROM_LANE63))] "" "@ @@ -3130,9 +3100,9 @@ (set_attr "length" "8")]) (define_insn "mov_from_lane63_" - [(set (match_operand: 0 "register_operand" "=Sg,v") + [(set (match_operand: 0 "register_operand" "=Sg,v") (unspec: - [(match_operand:VEC_2REG_MODE 1 "register_operand" "v,v")] + [(match_operand:V_2REG 1 "register_operand" " v,v")] UNSPEC_MOV_FROM_LANE63))] "" "@ diff --git a/gcc/config/gcn/gcn.md b/gcc/config/gcn/gcn.md index d1a94cbe7b0..702ba55c11a 100644 --- a/gcc/config/gcn/gcn.md +++ b/gcc/config/gcn/gcn.md @@ -299,6 +299,8 @@ (define_mode_iterator SISF [SI SF]) (define_mode_iterator QIHI [QI HI]) (define_mode_iterator DIDF [DI DF]) +(define_mode_iterator FP [HF SF DF]) +(define_mode_iterator FP_1REG [HF SF]) ;; }}} ;; {{{ Attributes.