Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Commit

Permalink
Fix spill check for struct lclVars
Browse files Browse the repository at this point in the history
With the 1st class struct changes, the `SPILL_APPEND` check for the case of an assignment to a lclVar needs to handle block ops as well as lclVar lhs.

Fix #23545
  • Loading branch information
CarolEidt committed Apr 1, 2019
1 parent cc23e89 commit 07dcc8b
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 7 deletions.
19 changes: 15 additions & 4 deletions src/jit/importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10624,11 +10624,22 @@ void Compiler::impImportBlockCode(BasicBlock* block)
SPILL_APPEND:

// We need to call impSpillLclRefs() for a struct type lclVar.
// This is done for non-block assignments in the handling of stloc.
if ((op1->OperGet() == GT_ASG) && varTypeIsStruct(op1->gtOp.gtOp1) &&
(op1->gtOp.gtOp1->gtOper == GT_LCL_VAR))
if ((op1->OperGet() == GT_ASG) && varTypeIsStruct(op1->gtGetOp1()))
{
impSpillLclRefs(op1->gtOp.gtOp1->AsLclVarCommon()->gtLclNum);
GenTree* lhs = op1->gtGetOp1();
GenTreeLclVarCommon* lclVar = nullptr;
if (lhs->gtOper == GT_LCL_VAR)
{
lclVar = lhs->AsLclVarCommon();
}
else if (lhs->OperIsBlk())
{
lclVar = lhs->AsBlk()->Addr()->IsLocalAddrExpr();
}
if (lclVar != nullptr)
{
impSpillLclRefs(lclVar->gtLclNum);
}
}

/* Append 'op1' to the list of statements */
Expand Down
3 changes: 0 additions & 3 deletions tests/issues.targets
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,6 @@
<ExcludeList Include="$(XunitTestBinBase)/tracing/keyword/TwoKeywords/TwoKeywords/*">
<Issue>23224, often fails with timeout in release</Issue>
</ExcludeList>
<ExcludeList Include="$(XunitTestBinBase)/JIT/Methodical/flowgraph/dev10_bug679955/volatileLocal1/*">
<Issue>23545</Issue>
</ExcludeList>
</ItemGroup>

<!-- All Unix targets -->
Expand Down
53 changes: 53 additions & 0 deletions tests/src/JIT/Regression/JitBlue/GitHub_23545/GitHub_23545.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System;
using System.Collections.Generic;

namespace GitHub_23545
{
using System;
using System.Collections.Generic;

public struct TestStruct
{
public int value1;

public override string ToString()
{
return this.value1.ToString();
}
}

class Test
{
public static Dictionary<TestStruct, TestStruct> StructKeyValue
{
get
{
return new Dictionary<TestStruct, TestStruct>()
{
{
new TestStruct(){value1 = 12}, new TestStruct(){value1 = 15}
}
};
}
}

static int Main()
{
int value = 0;
foreach (var e in StructKeyValue)
{
value += e.Key.value1 + e.Value.value1;
Console.WriteLine(e.Key.ToString() + " " + e.Value.ToString());
}
if (value != 27)
{
return -1;
}
return 100;
}
}
}
17 changes: 17 additions & 0 deletions tests/src/JIT/Regression/JitBlue/GitHub_23545/GitHub_23545.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<AssemblyName>$(MSBuildProjectName)</AssemblyName>
<OutputType>Exe</OutputType>
<DebugType></DebugType>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildProjectName).cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
</Project>

0 comments on commit 07dcc8b

Please sign in to comment.