[Nouveau] [PATCH v2] nouveau/compiler: Allow to omit line numbers when printing instructions

Tobias Klausmann tobias.johannes.klausmann at mni.thm.de
Fri Nov 17 16:21:51 UTC 2017


This comes in handy when checking "NV50_PROG_DEBUG=1" outputs with diff!

V2:
 - Use environmental variable (Karol Herbst)

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  | 14 ++++++++++----
 src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp |  2 +-
 src/gallium/drivers/nouveau/nouveau_compiler.c         |  3 +++
 src/gallium/drivers/nouveau/nv50/nv50_program.c        |  2 ++
 src/gallium/drivers/nouveau/nvc0/nvc0_program.c        |  2 ++
 8 files changed, 23 insertions(+), 9 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 9145801b62..d6fe928af4 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
@@ -691,7 +691,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 *);
@@ -699,6 +699,7 @@ public:
 
 private:
    int serial;
+   bool omit_serial;
 };
 
 bool
@@ -762,7 +763,12 @@ PrintPass::visit(BasicBlock *bb)
 bool
 PrintPass::visit(Instruction *insn)
 {
-   INFO("%3i: ", serial++);
+   if (omit_serial) {
+      INFO("     ");
+      serial++;
+   }
+   else
+      INFO("%3i: ", serial++);
    insn->print();
    return true;
 }
@@ -775,9 +781,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..20a4966433 100644
--- a/src/gallium/drivers/nouveau/nouveau_compiler.c
+++ b/src/gallium/drivers/nouveau/nouveau_compiler.c
@@ -122,6 +122,8 @@ 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 =
+         debug_get_num_option("NV50_PROG_DEBUG_OMIT_LINENUM", 0) ? true : false;
 
    ret = nv50_ir_generate_code(&info);
    if (ret) {
@@ -143,6 +145,7 @@ 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"))
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_program.c b/src/gallium/drivers/nouveau/nv50/nv50_program.c
index 6e943a3d94..fb5c9ed777 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_program.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_program.c
@@ -367,6 +367,8 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
 #ifdef DEBUG
    info->optLevel = debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
    info->dbgFlags = debug_get_num_option("NV50_PROG_DEBUG", 0);
+   info->omitLineNum =
+         debug_get_num_option("NV50_PROG_DEBUG_OMIT_LINENUM", 0) ? true : false;
 #else
    info->optLevel = 3;
 #endif
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
index c95a96c717..8dced66437 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
@@ -575,6 +575,8 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset,
    info->target = debug_get_num_option("NV50_PROG_CHIPSET", chipset);
    info->optLevel = debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
    info->dbgFlags = debug_get_num_option("NV50_PROG_DEBUG", 0);
+   info->omitLineNum =
+         debug_get_num_option("NV50_PROG_DEBUG_OMIT_LINENUM", 0) ? true : false;
 #else
    info->optLevel = 3;
 #endif
-- 
2.15.0



More information about the Nouveau mailing list