From 736ee0bef7ec71370185395aeba443e12b6d3813 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 25 Apr 2016 11:36:08 -0700 Subject: [PATCH] nir/algebraic: Do better error reporting of bad expressions Previously, if an exception was encountered anywhere, nir_algebraic would just die in a fire with no indication whatsoever as to where the actual bug is. This commit makes it print out the particular search-and-replace expression that is causing problems along with the exception. Also, it will now report all of the errors it finds and then exit at the end like a standard C compiler would do. Reviewed-by: Dylan Baker Reviewed-by: Iago Toral Quiroga --- src/compiler/nir/nir_algebraic.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py index 7697171..921d32b 100644 --- a/src/compiler/nir/nir_algebraic.py +++ b/src/compiler/nir/nir_algebraic.py @@ -24,11 +24,13 @@ # Authors: # Jason Ekstrand (jason@jlekstrand.net) +from __future__ import print_function import itertools import struct import sys import mako.template import re +import traceback # Represents a set of variables, each with a unique id class VarSet(object): @@ -311,15 +313,28 @@ class AlgebraicPass(object): self.xform_dict = {} self.pass_name = pass_name + error = False + for xform in transforms: if not isinstance(xform, SearchAndReplace): - xform = SearchAndReplace(xform) + try: + xform = SearchAndReplace(xform) + except: + print("Failed to parse transformation:", file=sys.stderr) + print(" " + str(xform), file=sys.stderr) + traceback.print_exc(file=sys.stderr) + print('', file=sys.stderr) + error = True + continue if xform.search.opcode not in self.xform_dict: self.xform_dict[xform.search.opcode] = [] self.xform_dict[xform.search.opcode].append(xform) + if error: + sys.exit(1) + def render(self): return _algebraic_pass_template.render(pass_name=self.pass_name, xform_dict=self.xform_dict, -- 2.7.4