On 06/05/2018 09:14 AM, DeepaBallari via gcc wrote:
> Hello,I'm a newbie to GCC.Have done some changes to .md file(specifically
> peephole.md) and the changes are not taking place.How to debug the .md file ?
> Thanks!
>
Hi.
.md files are transformed using gen* tools into C files. There's small example
(from insn-recog.c):
131239 static rtx_insn *
131240 peephole2_3 (rtx x1 ATTRIBUTE_UNUSED,
131241 rtx_insn *insn ATTRIBUTE_UNUSED,
131242 int *pmatch_len_ ATTRIBUTE_UNUSED)
131243 {
131244 rtx * const operands ATTRIBUTE_UNUSED = &recog_data.operand[0];
131245 rtx x2, x3, x4, x5, x6, x7, x8;
131246 rtx_insn *res ATTRIBUTE_UNUSED;
131247 x2 = PATTERN (peep2_next_insn (1));
131248 if (GET_CODE (x2) != SET)
131249 return NULL;
131250 x3 = XEXP (x2, 1);
131251 if (GET_CODE (x3) != SUBREG
131252 || maybe_ne (SUBREG_BYTE (x3), 0)
131253 || GET_MODE (x3) != E_SImode)
131254 return NULL;
131255 x4 = XEXP (x2, 0);
131256 if (GET_CODE (x4) != ZERO_EXTRACT
131257 || GET_MODE (x4) != E_SImode)
131258 return NULL;
131259 x5 = XEXP (x4, 1);
131260 if (x5 != const_int_rtx[MAX_SAVED_CONST_INT + 8])
131261 return NULL;
131262 x6 = XEXP (x4, 2);
131263 if (x6 != const_int_rtx[MAX_SAVED_CONST_INT + 8])
131264 return NULL;
131265 x7 = XEXP (x4, 0);
131266 operands[2] = x7;
131267 if (!ext_register_operand (operands[2], E_VOIDmode))
131268 return NULL;
131269 x8 = XEXP (x3, 0);
131270 if (!rtx_equal_p (x8, operands[0])
131271 || !
131272 #line 3125 "../../gcc/config/i386/i386.md"
131273 (TARGET_64BIT
131274 && peep2_reg_dead_p (2, operands[0])))
131275 return NULL;
131276 *pmatch_len_ = 1;
131277 return gen_peephole2_5 (insn, operands);
131278 }
As you can see, there are '#line' directives. These should be debugable in GDB:
$ break i386.md:3125.
Alternative approach is to put gcc_unreachable into a peephole and then you
should
be able to debug that. Note that I would recommend to automatically load
./gcc/gdbhooks.py file.
Martin