Thank you @Jeff Law <jeffreya...@gmail.com> for the comments and >>I suspect there's something goofy in the indentation in the block above. like clang-format ,does gcc have a code formatter we can use ?
Thank you again ~U On Mon, Jun 30, 2025 at 12:33 AM Jeff Law <jeffreya...@gmail.com> wrote: > > > On 6/13/25 9:01 AM, Umesh Kalappa wrote: > > Addressed the most of comments and tried to refactor the > riscv_expand_conditional_move() to some extent. > > > > No regressions are found for "runtest --tool gcc > --target_board='riscv-sim/-mabi=lp64d/-mtune=mips-p8700/-O2 ' riscv.exp" > > > > *config/riscv/riscv-cores.def(RISCV_CORE):Updated the supported > march. > > *config/riscv/riscv-ext-mips.def(DEFINE_RISCV_EXT): > > New file added for mips conditional mov extension. > > *config/riscv/riscv-ext.def: Likewise. > > *config/riscv/t-riscv:Generates riscv-ext.opt > > *config/riscv/riscv-ext.opt: Generated file. > > *config/riscv/riscv.cc(riscv_expand_conditional_move):Updated for > mips cmov > > and outlined some code that handle arch cond move. > > *config/riscv/riscv.md(mov<mode>cc):updated expand for MIPS CCMOV. > > *config/riscv/mips-insn.md:New file for mips-p8700 ccmov insn. > > *testsuite/gcc.target/riscv/mipscondmov.c:Test file for mips.ccmov > insn. > > *gcc/doc/riscv-ext.texi:Updated for mips cmov. > > --- > > gcc/config/riscv/mips-insn.md | 37 ++++++ > > gcc/config/riscv/riscv-cores.def | 3 +- > > gcc/config/riscv/riscv-ext-mips.def | 35 +++++ > > gcc/config/riscv/riscv-ext.def | 1 + > > gcc/config/riscv/riscv-ext.opt | 4 + > > gcc/config/riscv/riscv.cc | 131 ++++++++++++------- > > gcc/config/riscv/riscv.md | 3 +- > > gcc/config/riscv/t-riscv | 3 +- > > gcc/doc/riscv-ext.texi | 4 + > > gcc/testsuite/gcc.target/riscv/mipscondmov.c | 30 +++++ > > 10 files changed, 202 insertions(+), 49 deletions(-) > > create mode 100644 gcc/config/riscv/mips-insn.md > > create mode 100644 gcc/config/riscv/riscv-ext-mips.def > > create mode 100644 gcc/testsuite/gcc.target/riscv/mipscondmov.c > > > > > + > > +(define_insn "*mov<GPR:mode><X:mode>cc_bitmanip" > > + [(set (match_operand:GPR 0 "register_operand" "=r") > > + (if_then_else:GPR > > + (match_operator 5 "equality_operator" > > + [(match_operand:X 1 "register_operand" "r") > > + (match_operand:X 2 "const_0_operand" "J")]) > > + (match_operand:GPR 3 "reg_or_0_operand" "rJ") > > + (match_operand:GPR 4 "reg_or_0_operand" "rJ")))] > > + "TARGET_XMIPSCMOV" > Not something you need to fix to move forward, but more something to > keep in mind. > > For the kind of cases in this pattern it may be better to use a code > iterator rather than a match_operator. You can use iterators much like > you could other RTL codes. We already have "any_eq" defined for the > RISC-V port. > > And you can trivially get the actual code via a code_attr construct if > you need to. > > > > > > > + > > +/* Emit target specific conditional move like TARGET_XMIPSCMOV etc*/ > > +bool > > +riscv_target_conditional_move (rtx dest, rtx op0, rtx op1, rtx_code > code, > > + rtx cons, rtx alt) > > +{ > > + machine_mode dst_mode = GET_MODE (dest); > > + rtx target; > > + > > + /* force the operands to the register*/ > > + cons = force_reg (dst_mode, cons); > > + alt = force_reg (dst_mode, alt); > > + > > + if (TARGET_XMIPSCMOV) > > + { > > + if (code == EQ || code == NE) > > + { > > + op0 = riscv_zero_if_equal (op0, op1); > > + op1 = const0_rtx; > > + } > > + else > > + { > > + target = gen_reg_rtx (GET_MODE (op0)); > > + riscv_emit_int_order_test(code, 0, target, op0, op1); > > + op0 = target; > > + op1 = const0_rtx; > > + code = NE; > > + } > I suspect there's something goofy in the indentation in the block above. > Each indention level is 2 spaces and when you get 8 spaces of > indention you should use a tab. > > Space before the open paren in the call to riscv_emit_int_order_test. > > > > @@ -5454,34 +5520,22 @@ riscv_expand_conditional_move (rtx dest, rtx op, > rtx cons, rtx alt) > > @@ -5500,9 +5554,9 @@ riscv_expand_conditional_move (rtx dest, rtx op, > rtx cons, rtx alt) > > if (code == LE || code == LEU || code == GE || code == GEU) > > invert_ptr = &invert; > > > > - /* Emit an SCC-like instruction into a temporary so that we can > > - use an EQ/NE comparison. We can support both FP and integer > > - conditional moves. */ > > + /* Emit an SCC-like instruction into a temporary so that we can > > + use an EQ/NE comparison. We can support both FP and integer > > + conditional moves. */ > > if (INTEGRAL_MODE_P (mode0)) > > riscv_expand_int_scc (tmp, code, op0, op1, invert_ptr); > > else if (FLOAT_MODE_P (mode0) > Not sure why you changed the indentation here. I just checked the > current version of this code on the trunk and the indentation seems > correct there. > > We don't mind indentation/whitespace fixes, but be sure you're actually > fixing something rather than making gratutious changes. > > > > > > @@ -5558,15 +5599,15 @@ riscv_expand_conditional_move (rtx dest, rtx op, > rtx cons, rtx alt) > > else if (cons == CONST0_RTX (dst_mode) > > && ((REG_P (alt) || SUBREG_P (alt)) > > || (CONST_INT_P (alt) && alt != CONST0_RTX (dst_mode)))) > > - { > > - riscv_emit_int_compare (&code, &op0, &op1, true); > > - rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1); > > - alt = force_reg (dst_mode, alt); > > - emit_insn (gen_rtx_SET (dest, > > - gen_rtx_IF_THEN_ELSE (dst_mode, cond, > > - cons, alt))); > > - return true; > > - } > > + { > > + riscv_emit_int_compare (&code, &op0, &op1, true); > > + rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1); > > + alt = force_reg (dst_mode, alt); > > + emit_insn (gen_rtx_SET (dest, > > + gen_rtx_IF_THEN_ELSE (dst_mode, cond, > > + cons, alt))); > > + return true; > > + } > Again, not sure why you're changing the indentation here. > > Generally the implementation looks good. You just need to eliminate the > gratutious changes and fix the indentation/whitespace in your new code. > I think it's basically ready to go with those fixes. > > Jeff >