summaryrefslogtreecommitdiff
path: root/utils/TableGen/CodeGenSchedule.cpp
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@bec.de>2012-10-24 22:03:59 +0000
committerJoerg Sonnenberger <joerg@bec.de>2012-10-24 22:03:59 +0000
commit2c6d71388fb1b68ce6fdbb88642a95a24b27b2a7 (patch)
tree804a11ce287bcb12b3493eecdd67e6c94bcdd116 /utils/TableGen/CodeGenSchedule.cpp
parentaacb68806f4cb05b0b8102a188726e5b13f2a759 (diff)
downloadllvm-2c6d71388fb1b68ce6fdbb88642a95a24b27b2a7.tar.gz
llvm-2c6d71388fb1b68ce6fdbb88642a95a24b27b2a7.tar.bz2
llvm-2c6d71388fb1b68ce6fdbb88642a95a24b27b2a7.tar.xz
Don't use stack unwinding to provide the location information for
SetTheory, but pass down the location explicitly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166629 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenSchedule.cpp')
-rw-r--r--utils/TableGen/CodeGenSchedule.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/utils/TableGen/CodeGenSchedule.cpp b/utils/TableGen/CodeGenSchedule.cpp
index fc101eec61..1cca3e3f85 100644
--- a/utils/TableGen/CodeGenSchedule.cpp
+++ b/utils/TableGen/CodeGenSchedule.cpp
@@ -38,8 +38,9 @@ static void dumpIdxVec(const SmallVectorImpl<unsigned> &V) {
// (instrs a, b, ...) Evaluate and union all arguments. Identical to AddOp.
struct InstrsOp : public SetTheory::Operator {
- void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet &Elts) {
- ST.evaluate(Expr->arg_begin(), Expr->arg_end(), Elts);
+ void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet &Elts,
+ ArrayRef<SMLoc> Loc) {
+ ST.evaluate(Expr->arg_begin(), Expr->arg_end(), Elts, Loc);
}
};
@@ -55,13 +56,15 @@ struct InstRegexOp : public SetTheory::Operator {
const CodeGenTarget &Target;
InstRegexOp(const CodeGenTarget &t): Target(t) {}
- void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet &Elts) {
+ void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet &Elts,
+ ArrayRef<SMLoc> Loc) {
SmallVector<Regex*, 4> RegexList;
for (DagInit::const_arg_iterator
AI = Expr->arg_begin(), AE = Expr->arg_end(); AI != AE; ++AI) {
StringInit *SI = dyn_cast<StringInit>(*AI);
if (!SI)
- throw "instregex requires pattern string: " + Expr->getAsString();
+ throw TGError(Loc, "instregex requires pattern string: "
+ + Expr->getAsString());
std::string pat = SI->getValue();
// Implement a python-style prefix match.
if (pat[0] != '^') {