Skip to content

Commit

Permalink
Disallow promotion of HVA structs when their fields of TYP_SIMD8 were…
Browse files Browse the repository at this point in the history
… promoted as plain structs (#54694)
  • Loading branch information
echesakov authored Jun 25, 2021
1 parent 881e902 commit e129e32
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/coreclr/jit/lclvars.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1946,9 +1946,11 @@ bool Compiler::StructPromotionHelper::CanPromoteStructVar(unsigned lclNum)
var_types fieldType = structPromotionInfo.fields[i].fldType;
// Non-HFA structs are always passed in general purpose registers.
// If there are any floating point fields, don't promote for now.
// Likewise, since HVA structs are passed in SIMD registers
// promotion of non FP or SIMD type fields is disallowed.
// TODO-1stClassStructs: add support in Lowering and prolog generation
// to enable promoting these types.
if (varDsc->lvIsParam && !varDsc->lvIsHfa() && varTypeUsesFloatReg(fieldType))
if (varDsc->lvIsParam && (varDsc->lvIsHfa() != varTypeUsesFloatReg(fieldType)))
{
canPromote = false;
}
Expand Down
34 changes: 34 additions & 0 deletions src/tests/JIT/Regression/JitBlue/Runtime_54647/Runtime_54647.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Runtime.CompilerServices;
using System.Runtime.Intrinsics;

namespace Runtime_54647
{
struct Vector64x2
{
Vector64<int> _fld1;
Vector64<int> _fld2;
}

class Program
{
static int Main(string[] args)
{
var val1 = new Vector64x2();
var val2 = new Vector64x2();

Copy(ref val1, val2);

return 100;
}

[MethodImpl(MethodImplOptions.NoInlining)]
static void Copy(ref Vector64x2 dst, Vector64x2 src)
{
dst = src;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<DebugType>None</DebugType>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildProjectName).cs" />
</ItemGroup>
</Project>

0 comments on commit e129e32

Please sign in to comment.