Tobias Klausmann
2017-Nov-17 16:21 UTC
[Nouveau] [PATCH v2] nouveau/compiler: Allow to omit line numbers when printing instructions
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
Pierre Moreau
2017-Nov-20 22:15 UTC
[Nouveau] [PATCH v2] nouveau/compiler: Allow to omit line numbers when printing instructions
The “Program” class keeps a pointer to the “nv50_ir_prog_info” structure, so you could just use that in the “Program::print()” function, rather than passing the flag as an argument to “print”. Pierre On 2017-11-17 — 17:21, Tobias Klausmann wrote:> 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 > > _______________________________________________ > Nouveau mailing list > Nouveau at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/nouveau-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20171120/f866199d/attachment.sig>
Tobias Klausmann
2017-Nov-24 15:55 UTC
[Nouveau] [PATCH v3] nouveau/compiler: Allow to omit line numbers when printing instructions
This comes in handy when checking "NV50_PROG_DEBUG=1" outputs with
diff!
V2:
- Use environmental variable (Karol Herbst)
V3:
- Use the already populated nv50_ir_prog_info to forward information to the
print pass (Pierre Moreau)
Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
---
src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h | 1 +
src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp | 12 +++++++++---
src/gallium/drivers/nouveau/nouveau_compiler.c | 2 ++
src/gallium/drivers/nouveau/nv50/nv50_program.c | 2 ++
src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 2 ++
5 files changed, 16 insertions(+), 3 deletions(-)
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..eb7e9057b5 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;
}
@@ -777,7 +783,7 @@ Function::print()
void
Program::print()
{
- PrintPass pass;
+ PrintPass pass(driver->omitLineNum);
init_colours();
pass.run(this, true, false);
}
diff --git a/src/gallium/drivers/nouveau/nouveau_compiler.c
b/src/gallium/drivers/nouveau/nouveau_compiler.c
index 3151a6f420..1214cf3565 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) {
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
Seemingly Similar Threads
- [PATCH v2] nouveau/compiler: Allow to omit line numbers when printing instructions
- [RFC PATCH] nouveau/compiler: Allow to omit line numbers when printing instructions
- [RFC PATCH] nouveau/compiler: Allow to omit line numbers when printing instructions
- [PATCH v3] nouveau/compiler: Allow to omit line numbers when printing instructions
- [PATCH] nouveau: add a nouveau_compiler binary to compile TGSI into shader ISA