[Nouveau] [RFC PATCH] nouveau/compiler: Allow to omit line numbers when printing instructions
Tobias Klausmann
tobias.johannes.klausmann at mni.thm.de
Tue Nov 14 15:01:05 UTC 2017
This comes in handy when checking "NV50_PROG_DEBUG=1" outputs with diff!
Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
---
src/gallium/drivers/nouveau/codegen/nv50_ir.cpp | 6 +++---
src/gallium/drivers/nouveau/codegen/nv50_ir.h | 2 +-
src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h | 1 +
src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp | 12 ++++++++----
src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp | 2 +-
src/gallium/drivers/nouveau/nouveau_compiler.c | 8 ++++++--
src/gallium/drivers/nouveau/nv50/nv50_program.c | 1 +
src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 1 +
8 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
index e9363101bf..4bf6c73837 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
@@ -1249,7 +1249,7 @@ nv50_ir_generate_code(struct nv50_ir_prog_info *info)
if (ret < 0)
goto out;
if (prog->dbgFlags & NV50_IR_DEBUG_VERBOSE)
- prog->print();
+ prog->print(info->omitLineNum);
targ->parseDriverInfo(info);
prog->getTarget()->runLegalizePass(prog, nv50_ir::CG_STAGE_PRE_SSA);
@@ -1257,13 +1257,13 @@ nv50_ir_generate_code(struct nv50_ir_prog_info *info)
prog->convertToSSA();
if (prog->dbgFlags & NV50_IR_DEBUG_VERBOSE)
- prog->print();
+ prog->print(info->omitLineNum);
prog->optimizeSSA(info->optLevel);
prog->getTarget()->runLegalizePass(prog, nv50_ir::CG_STAGE_SSA);
if (prog->dbgFlags & NV50_IR_DEBUG_BASIC)
- prog->print();
+ prog->print(info->omitLineNum);
if (!prog->registerAllocation()) {
ret = -4;
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
index f2ce16d882..a3c7fd2f94 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
@@ -1249,7 +1249,7 @@ public:
Program(Type type, Target *targ);
~Program();
- void print();
+ void print(bool omitLineNum);
Type getType() const { return progType; }
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h
index ffd53c9cd3..604a22ba89 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h
@@ -82,6 +82,7 @@ struct nv50_ir_prog_info
uint8_t optLevel; /* optimization level (0 to 3) */
uint8_t dbgFlags;
+ bool omitLineNum;
struct {
int16_t maxGPR; /* may be -1 if none used */
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
index f5253b3745..a42fb44940 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
@@ -689,7 +689,7 @@ void Instruction::print() const
class PrintPass : public Pass
{
public:
- PrintPass() : serial(0) { }
+ PrintPass(bool omitLineNum = false) : serial(0), omit_serial(omitLineNum) { }
virtual bool visit(Function *);
virtual bool visit(BasicBlock *);
@@ -697,6 +697,7 @@ public:
private:
int serial;
+ bool omit_serial;
};
bool
@@ -760,7 +761,10 @@ PrintPass::visit(BasicBlock *bb)
bool
PrintPass::visit(Instruction *insn)
{
- INFO("%3i: ", serial++);
+ if (omit_serial)
+ INFO(" ");
+ else
+ INFO("%3i: ", serial++);
insn->print();
return true;
}
@@ -773,9 +777,9 @@ Function::print()
}
void
-Program::print()
+Program::print(bool omitLineNum)
{
- PrintPass pass;
+ PrintPass pass(omitLineNum);
init_colours();
pass.run(this, true, false);
}
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
index 298e7c6ef9..96ad70d28a 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
@@ -371,7 +371,7 @@ Program::emitBinary(struct nv50_ir_prog_info *info)
emit->prepareEmission(this);
if (dbgFlags & NV50_IR_DEBUG_BASIC)
- this->print();
+ this->print(info->omitLineNum);
if (!binSize) {
code = NULL;
diff --git a/src/gallium/drivers/nouveau/nouveau_compiler.c b/src/gallium/drivers/nouveau/nouveau_compiler.c
index 3151a6f420..ed68031383 100644
--- a/src/gallium/drivers/nouveau/nouveau_compiler.c
+++ b/src/gallium/drivers/nouveau/nouveau_compiler.c
@@ -103,7 +103,7 @@ dummy_assign_slots(struct nv50_ir_prog_info *info)
static int
nouveau_codegen(int chipset, int type, struct tgsi_token tokens[],
- unsigned *size, unsigned **code) {
+ unsigned *size, unsigned **code, bool omitLineNum) {
struct nv50_ir_prog_info info = {0};
int ret;
@@ -122,6 +122,7 @@ nouveau_codegen(int chipset, int type, struct tgsi_token tokens[],
info.optLevel = debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
info.dbgFlags = debug_get_num_option("NV50_PROG_DEBUG", 0);
+ info.omitLineNum = omitLineNum;
ret = nv50_ir_generate_code(&info);
if (ret) {
@@ -143,10 +144,13 @@ main(int argc, char *argv[])
FILE *f;
char text[65536] = {0};
unsigned size = 0, *code = NULL;
+ bool omitLineNum = false;
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-a"))
chipset = strtol(argv[++i], NULL, 16);
+ if (!strcmp(argv[i], "-o"))
+ omitLineNum = strtol(argv[++i], NULL, 10) ? true : false;
else
filename = argv[i];
}
@@ -203,7 +207,7 @@ main(int argc, char *argv[])
}
if (chipset >= 0x50) {
- i = nouveau_codegen(chipset, type, tokens, &size, &code);
+ i = nouveau_codegen(chipset, type, tokens, &size, &code, omitLineNum);
} else if (chipset >= 0x30) {
i = nv30_codegen(chipset, type, tokens, &size, &code);
} else {
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_program.c b/src/gallium/drivers/nouveau/nv50/nv50_program.c
index 6e943a3d94..b7b76eb0fc 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_program.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_program.c
@@ -370,6 +370,7 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
#else
info->optLevel = 3;
#endif
+ info->omitLineNum = false;
ret = nv50_ir_generate_code(info);
if (ret) {
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
index c95a96c717..d460620b83 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
@@ -578,6 +578,7 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset,
#else
info->optLevel = 3;
#endif
+ info->omitLineNum = false;
info->bin.smemSize = prog->cp.smem_size;
info->io.genUserClip = prog->vp.num_ucps;
--
2.15.0
More information about the Nouveau
mailing list