1
0
Fork 0
mirror of https://github.com/Ryujinx/Ryujinx.git synced 2024-11-30 19:12:06 +00:00

Fix Node Uses/Assignments (#1376)

* Fix Node Uses/Assignments

* Bump PPTC Version Number

Co-authored-by: jduncanator <1518948+jduncanator@users.noreply.github.com>
This commit is contained in:
Ficture Seven 2020-07-13 14:20:07 +04:00 committed by GitHub
parent b5127131c5
commit 30d4f752f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 31 deletions

View file

@ -10,25 +10,12 @@ namespace ARMeilleure.IntermediateRepresentation
public Operand Destination public Operand Destination
{ {
get get => _destinations.Count != 0 ? GetDestination(0) : null;
{ set => SetDestination(value);
return _destinations.Count != 0 ? GetDestination(0) : null;
}
set
{
if (value != null)
{
SetDestination(value);
}
else
{
_destinations.Clear();
}
}
} }
private List<Operand> _destinations; private readonly List<Operand> _destinations;
private List<Operand> _sources; private readonly List<Operand> _sources;
private bool _clearedDest; private bool _clearedDest;
public int DestinationsCount => _destinations.Count; public int DestinationsCount => _destinations.Count;
@ -123,13 +110,14 @@ namespace ARMeilleure.IntermediateRepresentation
private void RemoveOldDestinations() private void RemoveOldDestinations()
{ {
if (_destinations != null && !_clearedDest) if (!_clearedDest)
{ {
for (int index = 0; index < _destinations.Count; index++) for (int index = 0; index < _destinations.Count; index++)
{ {
RemoveAssignment(_destinations[index]); RemoveAssignment(_destinations[index]);
} }
} }
_clearedDest = false; _clearedDest = false;
} }
@ -137,13 +125,18 @@ namespace ARMeilleure.IntermediateRepresentation
{ {
RemoveOldDestinations(); RemoveOldDestinations();
Resize(_destinations, 1); if (destination == null)
_destinations[0] = destination;
if (destination.Kind == OperandKind.LocalVariable)
{ {
destination.Assignments.Add(this); _destinations.Clear();
_clearedDest = true;
}
else
{
Resize(_destinations, 1);
_destinations[0] = destination;
AddAssignment(destination);
} }
} }
@ -175,13 +168,17 @@ namespace ARMeilleure.IntermediateRepresentation
{ {
RemoveOldSources(); RemoveOldSources();
Resize(_sources, 1); if (source == null)
_sources[0] = source;
if (source.Kind == OperandKind.LocalVariable)
{ {
source.Uses.Add(this); _sources.Clear();
}
else
{
Resize(_sources, 1);
_sources[0] = source;
AddUse(source);
} }
} }

View file

@ -20,7 +20,7 @@ namespace ARMeilleure.Translation.PTC
{ {
private const string HeaderMagic = "PTChd"; private const string HeaderMagic = "PTChd";
private const int InternalVersion = 7; //! To be incremented manually for each change to the ARMeilleure project. private const int InternalVersion = 8; //! To be incremented manually for each change to the ARMeilleure project.
private const string BaseDir = "Ryujinx"; private const string BaseDir = "Ryujinx";