From e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 26 Mar 2010 11:00:07 -0700 Subject: [PATCH] IR print visitor: Print out something for the operator. --- ir.h | 2 +- ir_print_visitor.cpp | 57 ++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/ir.h b/ir.h index e6cdf29..c52efe6 100644 --- a/ir.h +++ b/ir.h @@ -217,7 +217,7 @@ public: ir_rvalue *condition; }; - +/* Update ir_print_visitor.cpp when updating this list. */ enum ir_expression_operation { ir_unop_bit_not, ir_unop_logic_not, diff --git a/ir_print_visitor.cpp b/ir_print_visitor.cpp index 6d0f797..f055e8f 100644 --- a/ir_print_visitor.cpp +++ b/ir_print_visitor.cpp @@ -86,22 +86,53 @@ void ir_print_visitor::visit(ir_function *ir) void ir_print_visitor::visit(ir_expression *ir) { - printf("(expression "); + static const char *const operators[] = { + "~", + "!", + "-", + "abs", + "rcp", + "rsq", + "exp", + "log", + "f2i", + "i2f", + "u2f", + "trunc", + "ceil", + "floor", + "+", + "-", + "*", + "/", + "%", + "<", + ">", + "<=", + ">=", + "==", + "!=", + "<<", + ">>", + "&", + "^", + "|", + "&&", + "^^", + "||", + "!", + "dot", + "min", + "max", + }; - const char *str; - char buf[256]; + printf("(expression "); - switch (ir->operation) { - case ir_unop_f2i: str = "f2i"; break; - case ir_unop_i2f: str = "i2f"; break; - case ir_unop_u2f: str = "u2f"; break; - default: - snprintf(buf, sizeof(buf), "operator %u", ir->operation); - str = buf; - break; - } + assert((unsigned int)ir->operation < + sizeof(operators) / sizeof(operators[0])); - printf("(%s) (", str); + printf("%s", operators[ir->operation]); + printf("("); if (ir->operands[0]) ir->operands[0]->accept(this); printf(") "); -- 2.7.4