[Mesa-dev] [PATCH 1/3] i965/fs: Add some minimal backend-IR dumping.
Kenneth Graunke
kenneth at whitecape.org
Tue Nov 27 19:02:37 PST 2012
On 11/27/2012 12:12 AM, Eric Anholt wrote:
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 89 ++++++++++++++++++++++++++++++++++
> src/mesa/drivers/dri/i965/brw_fs.h | 3 ++
> 2 files changed, 92 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 2f88d92..5fd0e7b 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1935,6 +1935,95 @@ fs_visitor::remove_duplicate_mrf_writes()
> return progress;
> }
>
> +void
> +fs_visitor::dump_instruction(fs_inst *inst)
> +{
> + if (inst->opcode < ARRAY_SIZE(opcode_descs) &&
> + opcode_descs[inst->opcode].name) {
> + printf("%s", opcode_descs[inst->opcode].name);
> + } else {
> + printf("op%d", inst->opcode);
> + }
> + if (inst->saturate)
> + printf(".sat");
> + printf(" ");
> +
> + switch (inst->dst.file) {
> + case GRF:
> + printf("vgrf%d", inst->dst.reg);
> + if (inst->dst.reg_offset)
> + printf("+%d", inst->dst.reg_offset);
> + break;
> + case MRF:
> + printf("m%d", inst->dst.reg);
> + break;
> + case BAD_FILE:
> + printf("(null)");
> + break;
> + case UNIFORM:
> + printf("***u%d***", inst->dst.reg);
> + break;
> + default:
> + printf("???");
> + break;
> + }
> + printf(", ");
> +
> + for (int i = 0; i < 3; i++) {
> + if (inst->src[i].negate)
> + printf("-");
> + if (inst->src[i].abs)
> + printf("|");
> + switch (inst->src[i].file) {
> + case GRF:
> + printf("vgrf%d", inst->src[i].reg);
> + if (inst->src[i].reg_offset)
> + printf("+%d", inst->src[i].reg_offset);
> + break;
> + case MRF:
> + printf("***m%d***", inst->src[i].reg);
> + break;
Ah, I see...***___*** means that it's invalid. Nice touch.
> + case UNIFORM:
> + printf("u%d", inst->src[i].reg);
> + if (inst->src[i].reg_offset)
> + printf(".%d", inst->src[i].reg_offset);
> + break;
> + case BAD_FILE:
> + printf("(null)");
> + break;
> + default:
> + printf("???");
> + break;
> + }
> + if (inst->src[i].abs)
> + printf("|");
> +
> + if (i < 3)
> + printf(", ");
> + }
> +
> + printf(" ");
> +
> + if (inst->force_uncompressed)
> + printf("1sthalf ");
> +
> + if (inst->force_sechalf)
> + printf("2ndhalf ");
> +
> + printf("\n");
> +}
> +
> +void
> +fs_visitor::dump_instructions()
> +{
> + int ip = 0;
> + foreach_list_safe(node, &this->instructions) {
I would just use foreach_list here, since dumping instructions doesn't
modify the list.
Otherwise it looks fine.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> + fs_inst *inst = (fs_inst *)node;
> + printf("%d: ", ip++);
> + dump_instruction(inst);
> + }
> +}
> +
> /**
> * Possibly returns an instruction that set up @param reg.
> *
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
> index 389643e..538de73 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -389,6 +389,9 @@ public:
> void setup_builtin_uniform_values(ir_variable *ir);
> int implied_mrf_writes(fs_inst *inst);
>
> + void dump_instructions();
> + void dump_instruction(fs_inst *inst);
> +
> const struct gl_fragment_program *fp;
> struct brw_wm_compile *c;
>
>
More information about the mesa-dev
mailing list