Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
463ca389
Commit
463ca389
authored
Oct 04, 2018
by
Paul
Browse files
Rename matcher namespace
parent
72b91bf6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
60 additions
and
60 deletions
+60
-60
src/include/migraph/matcher.hpp
src/include/migraph/matcher.hpp
+5
-5
test/matcher.cpp
test/matcher.cpp
+55
-55
No files found.
src/include/migraph/matcher.hpp
View file @
463ca389
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
namespace
migraph
{
namespace
migraph
{
namespace
match
ers
{
namespace
match
{
struct
matcher_context
struct
matcher_context
{
{
...
@@ -172,7 +172,7 @@ basic_matcher<predicate_matcher<P>> make_basic_pred_matcher(P p)
...
@@ -172,7 +172,7 @@ basic_matcher<predicate_matcher<P>> make_basic_pred_matcher(P p)
{ \
{ \
instruction_ref match(__VA_ARGS__) const; \
instruction_ref match(__VA_ARGS__) const; \
}; \
}; \
const constexpr auto name = migraph::match
ers
::basic_matcher<name##_m>{{}}; \
const constexpr auto name = migraph::match::basic_matcher<name##_m>{{}}; \
inline instruction_ref name##_m::match(__VA_ARGS__) const
inline instruction_ref name##_m::match(__VA_ARGS__) const
/// This macro takes care of the boilerplate for defining a predicate matcher
/// This macro takes care of the boilerplate for defining a predicate matcher
...
@@ -181,7 +181,7 @@ basic_matcher<predicate_matcher<P>> make_basic_pred_matcher(P p)
...
@@ -181,7 +181,7 @@ basic_matcher<predicate_matcher<P>> make_basic_pred_matcher(P p)
{ \
{ \
bool operator()(__VA_ARGS__) const; \
bool operator()(__VA_ARGS__) const; \
}; \
}; \
const constexpr auto name = migraph::match
ers
::basic_matcher<predicate_matcher<name##_m>>{{}}; \
const constexpr auto name = migraph::match::basic_matcher<predicate_matcher<name##_m>>{{}}; \
inline bool name##_m::operator()(__VA_ARGS__) const
inline bool name##_m::operator()(__VA_ARGS__) const
struct
matcher_result
struct
matcher_result
...
@@ -294,7 +294,7 @@ struct args_impl_ints
...
@@ -294,7 +294,7 @@ struct args_impl_ints
template
<
std
::
size_t
...
Ns
,
class
...
Ms
>
template
<
std
::
size_t
...
Ns
,
class
...
Ms
>
auto
args_impl
(
args_impl_ints
<
Ns
...
>
,
Ms
...
ms
)
auto
args_impl
(
args_impl_ints
<
Ns
...
>
,
Ms
...
ms
)
{
{
return
match
ers
::
all_of
(
nargs
(
sizeof
...(
Ns
)),
arg
(
Ns
)(
ms
)...);
return
match
::
all_of
(
nargs
(
sizeof
...(
Ns
)),
arg
(
Ns
)(
ms
)...);
}
}
template
<
class
...
Ms
>
template
<
class
...
Ms
>
...
@@ -306,7 +306,7 @@ auto args(Ms... ms)
...
@@ -306,7 +306,7 @@ auto args(Ms... ms)
});
});
}
}
}
// namespace match
ers
}
// namespace match
}
// namespace migraph
}
// namespace migraph
...
...
test/matcher.cpp
View file @
463ca389
...
@@ -3,15 +3,15 @@
...
@@ -3,15 +3,15 @@
#include <test.hpp>
#include <test.hpp>
#include <basic_ops.hpp>
#include <basic_ops.hpp>
namespace
match
ers
=
migraph
::
match
ers
;
namespace
match
=
migraph
::
match
;
template
<
class
M
>
template
<
class
M
>
migraph
::
match
ers
::
matcher_result
find_match
(
migraph
::
program
&
p
,
M
&&
m
)
migraph
::
match
::
matcher_result
find_match
(
migraph
::
program
&
p
,
M
&&
m
)
{
{
migraph
::
match
ers
::
matcher_result
result
;
migraph
::
match
::
matcher_result
result
;
for
(
auto
ins
:
migraph
::
iterator_for
(
p
))
for
(
auto
ins
:
migraph
::
iterator_for
(
p
))
{
{
result
=
migraph
::
match
ers
::
match_instruction
(
p
,
ins
,
m
);
result
=
migraph
::
match
::
match_instruction
(
p
,
ins
,
m
);
if
(
result
.
result
!=
p
.
end
())
if
(
result
.
result
!=
p
.
end
())
return
result
;
return
result
;
}
}
...
@@ -22,7 +22,7 @@ void match1()
...
@@ -22,7 +22,7 @@ void match1()
{
{
migraph
::
program
p
;
migraph
::
program
p
;
auto
l
=
p
.
add_literal
(
1
);
auto
l
=
p
.
add_literal
(
1
);
auto
m
=
match
ers
::
standard_shape
();
auto
m
=
match
::
standard_shape
();
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
l
});
EXPECT
(
bool
{
r
.
result
==
l
});
}
}
...
@@ -34,7 +34,7 @@ void match_name1()
...
@@ -34,7 +34,7 @@ void match_name1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
);
auto
m
=
match
::
name
(
"sum"
);
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -46,7 +46,7 @@ void match_name2()
...
@@ -46,7 +46,7 @@ void match_name2()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"min"
);
auto
m
=
match
::
name
(
"min"
);
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -58,7 +58,7 @@ void match_name3()
...
@@ -58,7 +58,7 @@ void match_name3()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
standard_shape
());
auto
m
=
match
::
name
(
"sum"
)(
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -70,8 +70,8 @@ void match_arg1()
...
@@ -70,8 +70,8 @@ void match_arg1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"@literal"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
arg
(
0
)(
match
::
name
(
"@literal"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -84,7 +84,7 @@ void match_arg2()
...
@@ -84,7 +84,7 @@ void match_arg2()
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"sum"
)),
match
ers
::
standard_shape
());
match
::
name
(
"sum"
)(
match
::
arg
(
0
)(
match
::
name
(
"sum"
)),
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -96,8 +96,8 @@ void match_arg3()
...
@@ -96,8 +96,8 @@ void match_arg3()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"@literal"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
arg
(
1
)(
match
::
name
(
"@literal"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -110,7 +110,7 @@ void match_arg4()
...
@@ -110,7 +110,7 @@ void match_arg4()
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
auto
m
=
match
ers
::
name
(
"pass"
)(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"sum"
)),
match
ers
::
standard_shape
());
match
::
name
(
"pass"
)(
match
::
arg
(
0
)(
match
::
name
(
"sum"
)),
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
pass
});
EXPECT
(
bool
{
r
.
result
==
pass
});
}
}
...
@@ -123,7 +123,7 @@ void match_arg5()
...
@@ -123,7 +123,7 @@ void match_arg5()
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
auto
m
=
match
ers
::
name
(
"pass"
)(
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"sum"
)),
match
ers
::
standard_shape
());
match
::
name
(
"pass"
)(
match
::
arg
(
1
)(
match
::
name
(
"sum"
)),
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -135,7 +135,7 @@ void match_arg6()
...
@@ -135,7 +135,7 @@ void match_arg6()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"@literal"
)));
auto
m
=
match
::
name
(
"sum"
)(
match
::
arg
(
0
)(
match
::
name
(
"@literal"
)));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -147,8 +147,8 @@ void match_arg7()
...
@@ -147,8 +147,8 @@ void match_arg7()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"@literal"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
arg
(
0
)(
match
::
name
(
"@literal"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"@literal"
)));
match
::
arg
(
1
)(
match
::
name
(
"@literal"
)));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -160,9 +160,9 @@ void match_args1()
...
@@ -160,9 +160,9 @@ void match_args1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
auto
m
=
match
::
name
(
"sum"
)(
match
ers
::
args
(
match
ers
::
name
(
"@literal"
),
match
ers
::
name
(
"@literal"
)),
match
::
args
(
match
::
name
(
"@literal"
),
match
::
name
(
"@literal"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -175,8 +175,8 @@ void match_args2()
...
@@ -175,8 +175,8 @@ void match_args2()
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
args
(
match
ers
::
name
(
"@literal"
),
match
ers
::
name
(
"sum"
)),
match
::
name
(
"sum"
)(
match
::
args
(
match
::
name
(
"@literal"
),
match
::
name
(
"sum"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -188,8 +188,8 @@ void match_args3()
...
@@ -188,8 +188,8 @@ void match_args3()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
args
(
match
ers
::
name
(
"@literal"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
args
(
match
::
name
(
"@literal"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -203,8 +203,8 @@ void match_args4()
...
@@ -203,8 +203,8 @@ void match_args4()
auto
sum2
=
p
.
add_instruction
(
sum_op
{},
sum1
,
two
);
auto
sum2
=
p
.
add_instruction
(
sum_op
{},
sum1
,
two
);
p
.
add_instruction
(
pass_op
{},
sum2
);
p
.
add_instruction
(
pass_op
{},
sum2
);
auto
m
=
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
args
(
match
ers
::
name
(
"sum"
),
match
ers
::
name
(
"@literal"
)),
match
::
name
(
"sum"
)(
match
::
args
(
match
::
name
(
"sum"
),
match
::
name
(
"@literal"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum2
});
EXPECT
(
bool
{
r
.
result
==
sum2
});
}
}
...
@@ -217,8 +217,8 @@ void match_args5()
...
@@ -217,8 +217,8 @@ void match_args5()
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
args
(
match
ers
::
name
(
"sum"
),
match
ers
::
name
(
"@literal"
)),
match
::
name
(
"sum"
)(
match
::
args
(
match
::
name
(
"sum"
),
match
::
name
(
"@literal"
)),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -231,7 +231,7 @@ void match_args6()
...
@@ -231,7 +231,7 @@ void match_args6()
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
auto
m
=
match
ers
::
name
(
"pass"
)(
match
ers
::
args
(
match
ers
::
name
(
"sum"
)),
match
ers
::
standard_shape
());
match
::
name
(
"pass"
)(
match
::
args
(
match
::
name
(
"sum"
)),
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
pass
});
EXPECT
(
bool
{
r
.
result
==
pass
});
}
}
...
@@ -243,9 +243,9 @@ void match_args7()
...
@@ -243,9 +243,9 @@ void match_args7()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"pass"
)(
match
ers
::
args
(
match
ers
::
name
(
"sum"
)(
match
ers
::
args
(
auto
m
=
match
::
name
(
"pass"
)(
match
::
args
(
match
::
name
(
"sum"
)(
match
::
args
(
match
ers
::
name
(
"@literal"
),
match
ers
::
name
(
"@literal"
)))),
match
::
name
(
"@literal"
),
match
::
name
(
"@literal"
)))),
match
ers
::
standard_shape
());
match
::
standard_shape
());
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
pass
});
EXPECT
(
bool
{
r
.
result
==
pass
});
}
}
...
@@ -257,8 +257,8 @@ void match_all_of1()
...
@@ -257,8 +257,8 @@ void match_all_of1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
all_of
(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"@literal"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
all_of
(
match
::
arg
(
0
)(
match
::
name
(
"@literal"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"@literal"
))));
match
::
arg
(
1
)(
match
::
name
(
"@literal"
))));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -270,8 +270,8 @@ void match_all_of2()
...
@@ -270,8 +270,8 @@ void match_all_of2()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
all_of
(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"sum"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
all_of
(
match
::
arg
(
0
)(
match
::
name
(
"sum"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"@literal"
))));
match
::
arg
(
1
)(
match
::
name
(
"@literal"
))));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -283,8 +283,8 @@ void match_any_of1()
...
@@ -283,8 +283,8 @@ void match_any_of1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
any_of
(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"sum"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
any_of
(
match
::
arg
(
0
)(
match
::
name
(
"sum"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"@literal"
))));
match
::
arg
(
1
)(
match
::
name
(
"@literal"
))));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -296,8 +296,8 @@ void match_any_of2()
...
@@ -296,8 +296,8 @@ void match_any_of2()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
any_of
(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"sum"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
any_of
(
match
::
arg
(
0
)(
match
::
name
(
"sum"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"sum"
))));
match
::
arg
(
1
)(
match
::
name
(
"sum"
))));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -309,8 +309,8 @@ void match_none_of1()
...
@@ -309,8 +309,8 @@ void match_none_of1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
none_of
(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"sum"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
none_of
(
match
::
arg
(
0
)(
match
::
name
(
"sum"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"sum"
))));
match
::
arg
(
1
)(
match
::
name
(
"sum"
))));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
sum
});
EXPECT
(
bool
{
r
.
result
==
sum
});
}
}
...
@@ -322,8 +322,8 @@ void match_none_of2()
...
@@ -322,8 +322,8 @@ void match_none_of2()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"sum"
)(
match
ers
::
none_of
(
match
ers
::
arg
(
0
)(
match
ers
::
name
(
"@literal"
)),
auto
m
=
match
::
name
(
"sum"
)(
match
::
none_of
(
match
::
arg
(
0
)(
match
::
name
(
"@literal"
)),
match
ers
::
arg
(
1
)(
match
ers
::
name
(
"@literal"
))));
match
::
arg
(
1
)(
match
::
name
(
"@literal"
))));
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
EXPECT
(
bool
{
r
.
result
==
p
.
end
()});
}
}
...
@@ -335,12 +335,12 @@ void match_bind1()
...
@@ -335,12 +335,12 @@ void match_bind1()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
pass
=
p
.
add_instruction
(
pass_op
{},
sum
);
auto
m
=
match
ers
::
name
(
"pass"
)(
auto
m
=
match
::
name
(
"pass"
)(
match
ers
::
args
(
match
::
args
(
match
ers
::
name
(
"sum"
)(
match
ers
::
args
(
match
ers
::
name
(
"@literal"
).
bind
(
"one"
),
match
::
name
(
"sum"
)(
match
::
args
(
match
::
name
(
"@literal"
).
bind
(
"one"
),
match
ers
::
name
(
"@literal"
).
bind
(
"two"
)))
match
::
name
(
"@literal"
).
bind
(
"two"
)))
.
bind
(
"sum"
)),
.
bind
(
"sum"
)),
match
ers
::
standard_shape
())
match
::
standard_shape
())
.
bind
(
"pass"
);
.
bind
(
"pass"
);
auto
r
=
find_match
(
p
,
m
);
auto
r
=
find_match
(
p
,
m
);
EXPECT
(
bool
{
r
.
instructions
.
at
(
"one"
)
==
one
});
EXPECT
(
bool
{
r
.
instructions
.
at
(
"one"
)
==
one
});
...
@@ -353,9 +353,9 @@ void match_bind1()
...
@@ -353,9 +353,9 @@ void match_bind1()
struct
match_find_sum
struct
match_find_sum
{
{
migraph
::
instruction_ref
ins
;
migraph
::
instruction_ref
ins
;
auto
matcher
()
const
{
return
match
ers
::
name
(
"sum"
);
}
auto
matcher
()
const
{
return
match
::
name
(
"sum"
);
}
void
apply
(
migraph
::
program
&
,
match
ers
::
matcher_result
r
)
const
void
apply
(
migraph
::
program
&
,
match
::
matcher_result
r
)
const
{
{
EXPECT
(
bool
{
r
.
result
==
ins
});
EXPECT
(
bool
{
r
.
result
==
ins
});
}
}
...
@@ -364,9 +364,9 @@ struct match_find_sum
...
@@ -364,9 +364,9 @@ struct match_find_sum
struct
match_find_literal
struct
match_find_literal
{
{
migraph
::
instruction_ref
ins
;
migraph
::
instruction_ref
ins
;
auto
matcher
()
const
{
return
match
ers
::
name
(
"@literal"
);
}
auto
matcher
()
const
{
return
match
::
name
(
"@literal"
);
}
void
apply
(
migraph
::
program
&
,
match
ers
::
matcher_result
r
)
const
void
apply
(
migraph
::
program
&
,
match
::
matcher_result
r
)
const
{
{
EXPECT
(
bool
{
r
.
result
!=
ins
});
EXPECT
(
bool
{
r
.
result
!=
ins
});
EXPECT
(
r
.
result
->
name
()
==
"@literal"
);
EXPECT
(
r
.
result
->
name
()
==
"@literal"
);
...
@@ -380,7 +380,7 @@ void match_finder()
...
@@ -380,7 +380,7 @@ void match_finder()
auto
two
=
p
.
add_literal
(
2
);
auto
two
=
p
.
add_literal
(
2
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
auto
sum
=
p
.
add_instruction
(
sum_op
{},
one
,
two
);
p
.
add_instruction
(
pass_op
{},
sum
);
p
.
add_instruction
(
pass_op
{},
sum
);
match
ers
::
find_matches
(
p
,
match_find_sum
{
sum
},
match_find_literal
{
sum
});
match
::
find_matches
(
p
,
match_find_sum
{
sum
},
match_find_literal
{
sum
});
}
}
int
main
()
int
main
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment