Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
dd9ff577
Commit
dd9ff577
authored
Oct 23, 2018
by
Paul
Browse files
Formatting
parent
299b33d1
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
21 additions
and
24 deletions
+21
-24
src/common_subexpression_elimination.cpp
src/common_subexpression_elimination.cpp
+3
-6
src/include/migraph/instruction.hpp
src/include/migraph/instruction.hpp
+1
-1
src/instruction.cpp
src/instruction.cpp
+2
-2
test/common_subexpression_elimination_test.cpp
test/common_subexpression_elimination_test.cpp
+15
-15
No files found.
src/common_subexpression_elimination.cpp
View file @
dd9ff577
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
namespace
migraph
{
namespace
migraph
{
template
<
class
Range
>
template
<
class
Range
>
void
cse_range
(
program
&
p
,
Range
&&
r
)
void
cse_range
(
program
&
p
,
Range
&&
r
)
{
{
std
::
unordered_multimap
<
std
::
string
,
instruction_ref
>
instructions
;
std
::
unordered_multimap
<
std
::
string
,
instruction_ref
>
instructions
;
...
@@ -18,7 +18,7 @@ void cse_range(program& p, Range&& r)
...
@@ -18,7 +18,7 @@ void cse_range(program& p, Range&& r)
continue
;
continue
;
// Find instruction with the same name
// Find instruction with the same name
auto
found_instructions
=
range
(
instructions
.
equal_range
(
ins
->
name
()));
auto
found_instructions
=
range
(
instructions
.
equal_range
(
ins
->
name
()));
for
(
auto
pp
:
found_instructions
)
for
(
auto
pp
:
found_instructions
)
{
{
auto
eq
=
pp
.
second
;
auto
eq
=
pp
.
second
;
if
(
*
eq
!=
*
ins
)
if
(
*
eq
!=
*
ins
)
...
@@ -30,9 +30,6 @@ void cse_range(program& p, Range&& r)
...
@@ -30,9 +30,6 @@ void cse_range(program& p, Range&& r)
}
}
}
}
void
common_subexpression_elimination
::
apply
(
program
&
p
)
const
void
common_subexpression_elimination
::
apply
(
program
&
p
)
const
{
cse_range
(
p
,
iterator_for
(
p
));
}
{
cse_range
(
p
,
iterator_for
(
p
));
}
}
// namespace migraph
}
// namespace migraph
src/include/migraph/instruction.hpp
View file @
dd9ff577
...
@@ -44,7 +44,7 @@ struct instruction
...
@@ -44,7 +44,7 @@ struct instruction
const
std
::
vector
<
instruction_ref
>&
outputs
()
const
;
const
std
::
vector
<
instruction_ref
>&
outputs
()
const
;
friend
bool
operator
==
(
const
instruction
&
x
,
const
instruction
&
y
);
friend
bool
operator
==
(
const
instruction
&
x
,
const
instruction
&
y
);
friend
bool
operator
!=
(
const
instruction
&
x
,
const
instruction
&
y
);
friend
bool
operator
!=
(
const
instruction
&
x
,
const
instruction
&
y
);
friend
bool
operator
==
(
instruction_ref
ref
,
const
instruction
&
i
);
friend
bool
operator
==
(
instruction_ref
ref
,
const
instruction
&
i
);
...
...
src/instruction.cpp
View file @
dd9ff577
...
@@ -96,13 +96,13 @@ const std::vector<instruction_ref>& instruction::outputs() const { return output
...
@@ -96,13 +96,13 @@ const std::vector<instruction_ref>& instruction::outputs() const { return output
bool
operator
==
(
const
instruction
&
x
,
const
instruction
&
y
)
bool
operator
==
(
const
instruction
&
x
,
const
instruction
&
y
)
{
{
if
(
not
(
x
.
result
==
y
.
result
and
x
.
op
==
y
.
op
and
x
.
arguments
==
y
.
arguments
))
if
(
not
(
x
.
result
==
y
.
result
and
x
.
op
==
y
.
op
and
x
.
arguments
==
y
.
arguments
))
return
false
;
return
false
;
if
(
x
.
name
()
==
"@literal"
)
if
(
x
.
name
()
==
"@literal"
)
return
x
.
lit
==
y
.
lit
;
return
x
.
lit
==
y
.
lit
;
return
true
;
return
true
;
}
}
bool
operator
!=
(
const
instruction
&
x
,
const
instruction
&
y
)
{
return
!
(
x
==
y
);
}
bool
operator
!=
(
const
instruction
&
x
,
const
instruction
&
y
)
{
return
!
(
x
==
y
);
}
bool
operator
==
(
instruction_ref
ref
,
const
instruction
&
i
)
{
return
i
==
ref
;
}
bool
operator
==
(
instruction_ref
ref
,
const
instruction
&
i
)
{
return
i
==
ref
;
}
...
...
test/common_subexpression_elimination_test.cpp
View file @
dd9ff577
...
@@ -18,8 +18,8 @@ void cse_test1()
...
@@ -18,8 +18,8 @@ void cse_test1()
{
{
migraph
::
program
p1
;
migraph
::
program
p1
;
{
{
auto
one
=
p1
.
add_literal
(
1
);
auto
one
=
p1
.
add_literal
(
1
);
auto
two
=
p1
.
add_literal
(
2
);
auto
two
=
p1
.
add_literal
(
2
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
...
@@ -29,8 +29,8 @@ void cse_test1()
...
@@ -29,8 +29,8 @@ void cse_test1()
migraph
::
program
p2
;
migraph
::
program
p2
;
{
{
auto
one
=
p2
.
add_literal
(
1
);
auto
one
=
p2
.
add_literal
(
1
);
auto
two
=
p2
.
add_literal
(
2
);
auto
two
=
p2
.
add_literal
(
2
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum1
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum1
);
p2
.
add_instruction
(
pass_op
{},
sum3
);
p2
.
add_instruction
(
pass_op
{},
sum3
);
...
@@ -42,8 +42,8 @@ void cse_test2()
...
@@ -42,8 +42,8 @@ void cse_test2()
{
{
migraph
::
program
p1
;
migraph
::
program
p1
;
{
{
auto
one
=
p1
.
add_literal
(
1
);
auto
one
=
p1
.
add_literal
(
1
);
auto
two
=
p1
.
add_literal
(
2
);
auto
two
=
p1
.
add_literal
(
2
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
...
@@ -53,8 +53,8 @@ void cse_test2()
...
@@ -53,8 +53,8 @@ void cse_test2()
migraph
::
program
p2
;
migraph
::
program
p2
;
{
{
auto
one
=
p2
.
add_literal
(
1
);
auto
one
=
p2
.
add_literal
(
1
);
auto
two
=
p2
.
add_literal
(
2
);
auto
two
=
p2
.
add_literal
(
2
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum2
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum2
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
...
@@ -67,8 +67,8 @@ void cse_test3()
...
@@ -67,8 +67,8 @@ void cse_test3()
{
{
migraph
::
program
p1
;
migraph
::
program
p1
;
{
{
auto
one
=
p1
.
add_literal
(
1
);
auto
one
=
p1
.
add_literal
(
1
);
auto
two
=
p1
.
add_literal
(
1
);
auto
two
=
p1
.
add_literal
(
1
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum2
);
...
@@ -78,7 +78,7 @@ void cse_test3()
...
@@ -78,7 +78,7 @@ void cse_test3()
migraph
::
program
p2
;
migraph
::
program
p2
;
{
{
auto
one
=
p2
.
add_literal
(
1
);
auto
one
=
p2
.
add_literal
(
1
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
one
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
one
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum1
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
sum1
);
p2
.
add_instruction
(
pass_op
{},
sum3
);
p2
.
add_instruction
(
pass_op
{},
sum3
);
...
@@ -90,8 +90,8 @@ void cse_test4()
...
@@ -90,8 +90,8 @@ void cse_test4()
{
{
migraph
::
program
p1
;
migraph
::
program
p1
;
{
{
auto
one
=
p1
.
add_literal
(
1
);
auto
one
=
p1
.
add_literal
(
1
);
auto
two
=
p1
.
add_literal
(
1
);
auto
two
=
p1
.
add_literal
(
1
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum1
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
two
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum2
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
two
,
one
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
one
);
auto
sum3
=
p1
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
one
);
...
@@ -103,7 +103,7 @@ void cse_test4()
...
@@ -103,7 +103,7 @@ void cse_test4()
migraph
::
program
p2
;
migraph
::
program
p2
;
{
{
auto
one
=
p2
.
add_literal
(
1
);
auto
one
=
p2
.
add_literal
(
1
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
one
);
auto
sum1
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
one
,
one
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
one
);
auto
sum3
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum1
,
one
);
auto
sum5
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum3
,
sum3
);
auto
sum5
=
p2
.
add_instruction
(
migraph
::
op
::
add
{},
sum3
,
sum3
);
...
@@ -112,7 +112,7 @@ void cse_test4()
...
@@ -112,7 +112,7 @@ void cse_test4()
EXPECT
(
p1
==
p2
);
EXPECT
(
p1
==
p2
);
}
}
int
main
()
int
main
()
{
{
cse_test1
();
cse_test1
();
cse_test2
();
cse_test2
();
...
...
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