[Mesa-dev] [PATCH 1/6] nir/algebraic: Do better error reporting of bad expressions
Jason Ekstrand
jason at jlekstrand.net
Tue Apr 26 04:39:19 UTC 2016
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.
Cc: Dylan Baker <baker.dylan.c at gmail.com>
---
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..3f770b6 100644
--- a/src/compiler/nir/nir_algebraic.py
+++ b/src/compiler/nir/nir_algebraic.py
@@ -24,11 +24,13 @@
# Authors:
# Jason Ekstrand (jason at 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:
+ raise RuntimeError("Error parsing transformations")
+
def render(self):
return _algebraic_pass_template.render(pass_name=self.pass_name,
xform_dict=self.xform_dict,
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list