Another solution is to add the instrumentation earlier, and use expand_call.
Thanks for your hints. Is that means doing intrumentation at the "RTL
expand" level? However, I have tried the following method, add a
defined_expand in ia64.md, the template used in define_expand is the
same as the one which will emit a ld instruction, just like this one:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; expand the ld operation with check code if user turns on
;; fld-checking
(define_expand "gift_load_symptr_low"
[(set (match_operand:DI 0 "register_operand" "=r")
(lo_sum:DI (match_operand:DI 1 "register_operand" "r")
(match_operand 2 "got_symbolic_operand" "s")))]
""
{
if(flag_ld_checking)
{
printf("gift_load_symptr_low emits checking function call\n");
emit_library_call(gen_rtx_SYMBOL_REF(Pmode,
\"gift_check_bitmap\"), 0, VOIDmode, 0);
emit_insn (gen_rtx_SET (VOIDmode,
operands[0],
gen_rtx_LO_SUM (DImode,
operands[1],
operands[2])));
}
DONE;
})
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BUT, when I use the newly builded compiler to compile my program,
nothing matched to expand such ld instruction ...