From b78868459fda4de0417e52e1d46388ca75a4e74d Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Thu, 26 Mar 2020 20:58:51 +0000 Subject: [PATCH] amdgcn: Swap mov_exec operands Every other *_exec insn has the exec operand last. This being the other way around is a cause of bugs, and prevents use in macro templates. 2020-04-23 Andrew Stubbs gcc/ * config/gcn/gcn-valu.md (mov_exec): Swap the numbers on operands 2 and 3. (mov_exec): Likewise. (trunc2_exec): Swap parameters to gen_mov_exec. (2_exec): Likewise. --- gcc/ChangeLog | 8 ++++++++ gcc/config/gcn/gcn-valu.md | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e8d397a3713..5f27a8a08ae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2020-04-23 Andrew Stubbs + + * config/gcn/gcn-valu.md (mov_exec): Swap the numbers on operands + 2 and 3. + (mov_exec): Likewise. + (trunc2_exec): Swap parameters to gen_mov_exec. + (2_exec): Likewise. + 2019-04-23 Eric Botcazou PR tree-optimization/94717 diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md index 24843a0b43e..0422e153cf3 100644 --- a/gcc/config/gcn/gcn-valu.md +++ b/gcc/config/gcn/gcn-valu.md @@ -232,16 +232,16 @@ [(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" + (match_operand:V_1REG 2 "gcn_alu_or_unspec_operand" "U0,U0,vA,vA,U0,U0") - (match_operand:DI 2 "register_operand" " e, e,cV,Sv, e, e"))) + (match_operand:DI 3 "register_operand" " e, e,cV,Sv, e, e"))) (clobber (match_scratch: 4 "=X, X, X, X,&v,&v"))] "!MEM_P (operands[0]) || REG_P (operands[1])" "@ v_mov_b32\t%0, %1 v_mov_b32\t%0, %1 - v_cndmask_b32\t%0, %3, %1, vcc - v_cndmask_b32\t%0, %3, %1, %2 + v_cndmask_b32\t%0, %2, %1, vcc + v_cndmask_b32\t%0, %2, %1, %3 # #" [(set_attr "type" "vop1,vop1,vop2,vop3a,*,*") @@ -283,9 +283,9 @@ [(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" + (match_operand:V_2REG 2 "gcn_alu_or_unspec_operand" " U0,vDA0,vDA0,U0,U0") - (match_operand:DI 2 "register_operand" " e, cV, Sv, e, e"))) + (match_operand:DI 3 "register_operand" " e, cV, Sv, e, e"))) (clobber (match_scratch: 4 "= X, X, X,&v,&v"))] "!MEM_P (operands[0]) || REG_P (operands[1])" { @@ -295,11 +295,11 @@ case 0: return "v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1"; case 1: - return "v_cndmask_b32\t%L0, %L3, %L1, vcc\;" - "v_cndmask_b32\t%H0, %H3, %H1, vcc"; + return "v_cndmask_b32\t%L0, %L2, %L1, vcc\;" + "v_cndmask_b32\t%H0, %H2, %H1, vcc"; case 2: - return "v_cndmask_b32\t%L0, %L3, %L1, %2\;" - "v_cndmask_b32\t%H0, %H3, %H1, %2"; + return "v_cndmask_b32\t%L0, %L2, %L1, %3\;" + "v_cndmask_b32\t%H0, %H2, %H1, %3"; } else switch (which_alternative) @@ -307,11 +307,11 @@ case 0: return "v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1"; case 1: - return "v_cndmask_b32\t%H0, %H3, %H1, vcc\;" - "v_cndmask_b32\t%L0, %L3, %L1, vcc"; + return "v_cndmask_b32\t%H0, %H2, %H1, vcc\;" + "v_cndmask_b32\t%L0, %L2, %L1, vcc"; case 2: - return "v_cndmask_b32\t%H0, %H3, %H1, %2\;" - "v_cndmask_b32\t%L0, %L3, %L1, %2"; + return "v_cndmask_b32\t%H0, %H2, %H1, %3\;" + "v_cndmask_b32\t%L0, %L2, %L1, %3"; } return "#"; @@ -2487,7 +2487,7 @@ if (mode != mode) emit_insn (gen_trunc2_exec (out, inlo, merge, exec)); else - emit_insn (gen_mov_exec (out, inlo, exec, merge)); + emit_insn (gen_mov_exec (out, inlo, merge, exec)); } [(set_attr "type" "vop2") (set_attr "length" "4")]) @@ -2539,7 +2539,7 @@ if (mode != mode) emit_insn (gen_2_exec (outlo, in, mergelo, exec)); else - emit_insn (gen_mov_exec (outlo, in, exec, mergelo)); + emit_insn (gen_mov_exec (outlo, in, mergelo, exec)); if ('' == 's') emit_insn (gen_ashr3_exec (outhi, outlo, GEN_INT (31), mergehi, exec)); -- 2.30.2