> Since the parameter vl of XTheadVector does not support immediate numbers, we > need > to put it in the register in advance. That generates the initial code > correctly. > > PR 116593 > > gcc/ChangeLog: > > * config/riscv/riscv-vector-builtins.cc > (function_expander::add_input_operand): > Put immediate for vl to GPR for XTheadVector.
Generally both patches look reasonable to me and the change is less invasive than going via spec_restriction. How was this tested? The Rivos CI has already picked it up but please still always specify. Thanks. > + /* Since the parameter vl of XTheadVector does not support > + immediate numbers, we need to put it in the register > + in advance. */ > + if (TARGET_XTHEADVECTOR > + && CONST_INT_P (x) > + && base->apply_vl_p () > + && argno == (unsigned) (call_expr_nargs (exp) - 1) > + && x != CONST0_RTX (GET_MODE (x))) > + { > + x = force_reg (word_mode, x); > + add_input_operand (TYPE_MODE (TREE_TYPE (arg)), x); > + } > + else > + add_input_operand (TYPE_MODE (TREE_TYPE (arg)), x); > } To me it feels as if this would better fit one level higher rather than checking ARGNO and apply_vl_p here. Is that somehow too cumbersome? > +# GCC testsuite that uses the `dg.exp' driver. > + > +# Test the front-end for C++. > +# We don't need to test back-end code-gen in RV32 system for C++ > +# Because it is already tested in C. > +# Exit immediately if this isn't a RISC-V target. > +if ![istarget riscv*-*-*] then { > + return > +} Might want to adjust those comments slightly ;) -- Regards Robin