Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
halo
art
Commits
f801a6a6
Commit
f801a6a6
authored
10 years ago
by
Nicolas Geoffray
Committed by
Android (Google) Code Review
10 years ago
Browse files
Options
Download
Plain Diff
Merge "Do not replace a live phi with a dead phi." into mnc-dev
parents
ed6193a7
fecc4659
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
74 additions
and
1 deletion
+74
-1
compiler/optimizing/ssa_builder.cc
compiler/optimizing/ssa_builder.cc
+7
-1
test/520-equivalent-phi/expected.txt
test/520-equivalent-phi/expected.txt
+0
-0
test/520-equivalent-phi/info.txt
test/520-equivalent-phi/info.txt
+2
-0
test/520-equivalent-phi/smali/Equivalent.smali
test/520-equivalent-phi/smali/Equivalent.smali
+35
-0
test/520-equivalent-phi/src/Main.java
test/520-equivalent-phi/src/Main.java
+30
-0
No files found.
compiler/optimizing/ssa_builder.cc
View file @
f801a6a6
...
...
@@ -213,7 +213,13 @@ void SsaBuilder::EquivalentPhisCleanup() {
HPhi
*
phi
=
it
.
Current
()
->
AsPhi
();
HPhi
*
next
=
phi
->
GetNextEquivalentPhiWithSameType
();
if
(
next
!=
nullptr
)
{
phi
->
ReplaceWith
(
next
);
// Make sure we do not replace a live phi with a dead phi. A live phi has been
// handled by the type propagation phase, unlike a dead phi.
if
(
next
->
IsLive
())
{
phi
->
ReplaceWith
(
next
);
}
else
{
next
->
ReplaceWith
(
phi
);
}
DCHECK
(
next
->
GetNextEquivalentPhiWithSameType
()
==
nullptr
)
<<
"More then one phi equivalent with type "
<<
phi
->
GetType
()
<<
" found for phi"
<<
phi
->
GetId
();
...
...
This diff is collapsed.
Click to expand it.
test/520-equivalent-phi/expected.txt
0 → 100644
View file @
f801a6a6
This diff is collapsed.
Click to expand it.
test/520-equivalent-phi/info.txt
0 → 100644
View file @
f801a6a6
Regression test for the SSA building of the optimizing
compiler. See comment in smali file.
This diff is collapsed.
Click to expand it.
test/520-equivalent-phi/smali/Equivalent.smali
0 → 100644
View file @
f801a6a6
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
.class public LEquivalent;
.super Ljava/lang/Object;
.method public static method([I)V
.registers 3
const/4 v0, 0
if-eq p0, v0, :first_if
move-object v0, p0
:first_if
if-eqz v0, :second_if
# Having this move-object used to confuse the type propagation
# phase of the optimizing compiler: the phase propagates types
# based on uses, but a move-object disappears after SSA, leaving
# the compiler with a reference equivalent that has no use. So
# we would consider the phi equivalent reference of v0, as dead,
# even though it is the one that has the correct type.
move-object v1, v0
:second_if
return-void
.end method
This diff is collapsed.
Click to expand it.
test/520-equivalent-phi/src/Main.java
0 → 100644
View file @
f801a6a6
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import
java.lang.reflect.Method
;
public
class
Main
{
// Workaround for b/18051191.
class
Inner
{}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Class
<?>
c
=
Class
.
forName
(
"Equivalent"
);
Method
m
=
c
.
getMethod
(
"method"
,
int
[].
class
);
int
[]
array
=
new
int
[
7
];
Object
[]
arguments
=
{
array
};
m
.
invoke
(
null
,
arguments
);
}
}
This diff is collapsed.
Click to expand it.
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