Hi Lehua, thanks, just tiny non-functional nits.
> - rtx ops[] = {operands[0], quarter}; > - icode = code_for_pred_trunc (<V_QUAD_TRUNC>mode); > - riscv_vector::emit_vlmax_insn (icode, riscv_vector::RVV_UNOP, ops); > + rtx half = gen_reg_rtx (<V_QUAD_TRUNC>mode); Not really a half anymore now? :) > +#include <stdint.h> > + > +#define DEF_LOOP(OLD_TYPE, NEW_TYPE) > \ > + void __attribute__ ((noipa)) > \ > + test_##OLD_TYPE##_2_##NEW_TYPE (NEW_TYPE *__restrict r, > \ > + OLD_TYPE *__restrict a, \ > + NEW_TYPE *__restrict b, \ > + OLD_TYPE *__restrict pred, int n) \ > + { > \ > + for (int i = 0; i < n; ++i) > \ > + { > \ > + NEW_TYPE bi = b[i]; \ Is this necessary for recognizing a different pattern? > +/* wider-width Integer Type => Integer Type */ Isn't it the other way around or am I just confused? > +/* narrower-width Integer Type => Integer Type */ > +#define TEST_ALL_X2X_NARROWER(T) > \ > + T (uint16_t, uint8_t) > \ Same here. Regards Robin