https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117353
--- Comment #7 from Vineet Gupta <vineetg at gcc dot gnu.org> --- (In reply to Jeffrey A. Law from comment #6) > So my approach would be to note the insn number, then set a conditional > breakpoint in make_insn_raw (after it initializes INSN_UID in the new > insn). The condition would be insn->u2.insn_uid == <insn number> or > something close to that. Nice: I've been using the uid conditional breakpoints forever but bt out of make_insn_raw () is a nice trick to know. > That gives us a handle on precisely where it's created, then walk up the > frames into the RISC-V code. As Robin noted, could easily be a missed > can_create_pseudos_p test. Yeah, as Robin said it is the const vect and reload move .... lra_constraints curr_insn_transform lra_emit_move emit_move_insn gen_movv8qi riscv_vector::legitimize_move (rtx dest, rtx *srcp) if (CONST_VECTOR_P(src)) riscv_vector::expand_const_vector <--- expand_simple_binop expand_binop expand_binop_directly emit_insn make_insn_raw In expand_const_vector() it seems we need to explicitly handle lra_in_progress for this case, which seems non trivial to me personally. However I have a different question about these vector shifts lacking a vsetvl veneer due to being post/during reload. For the ones pre-existing before reload, the splitter in autovec.md does the trick. ;; ------------------------------------------------------------------------- ;; ---- [INT] Binary shifts by scalar. ;; ------------------------------------------------------------------------- ;; Includes: ;; - vsll.vx/vsra.vx/vsrl.vx ;; - vsll.vi/vsra.vi/vsrl.vi ;; ------------------------------------------------------------------------- (define_insn_and_split "<optab><mode>3" [(set (match_operand:V_VLSI 0 "register_operand" "=vr") (any_shift:V_VLSI (match_operand:V_VLSI 1 "register_operand" " vr") (match_operand:<VEL> 2 "vector_scalar_shift_operand" " rK")))] "TARGET_VECTOR && can_create_pseudo_p ()" "#" "&& 1" [(const_int 0)] { operands[2] = gen_lowpart (Pmode, operands[2]); riscv_vector::emit_vlmax_insn (code_for_pred_scalar (<CODE>, <MODE>mode), riscv_vector::BINARY_OP, operands); DONE; } I wonder if we can instead enhance it to use emit_vlmax_insn_lra() type constructs if lra_in_progress ?