Skip to content

Commit

Permalink
Ensure we don't reuse temps when calling fgMorphArgs on LIR nodes (#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
tannergooding authored and directhex committed Jul 26, 2024
1 parent ff08208 commit 5ce7d3f
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/coreclr/jit/morph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3288,8 +3288,8 @@ void Compiler::fgMakeOutgoingStructArgCopy(GenTreeCall* call, CallArg* arg)
bool found = false;

// Attempt to find a local we have already used for an outgoing struct and reuse it.
// We do not reuse within a statement.
if (!opts.MinOpts())
// We do not reuse within a statement and we don't reuse if we're in LIR
if (!opts.MinOpts() && (fgOrder == FGOrderTree))
{
found = ForEachHbvBitSet(*fgAvailableOutgoingArgTemps, [&](indexType lclNum) {
LclVarDsc* varDsc = lvaGetDesc((unsigned)lclNum);
Expand Down
45 changes: 45 additions & 0 deletions src/tests/JIT/Regression/JitBlue/Runtime_105468/Runtime_105468.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Generated by Fuzzlyn v1.7 on 2024-07-25 11:40:55
// Run on X64 Windows
// Seed: 418121815423725559-vectort,vector128,vector256,x86aes,x86avx,x86avx2,x86bmi1,x86bmi1x64,x86bmi2,x86bmi2x64,x86fma,x86lzcnt,x86lzcntx64,x86pclmulqdq,x86popcnt,x86popcntx64,x86sse,x86ssex64,x86sse2,x86sse2x64,x86sse3,x86sse41,x86sse41x64,x86sse42,x86sse42x64,x86ssse3,x86x86base
// Reduced from 72.7 KiB to 1.0 KiB in 00:01:55
// Debug: Outputs <0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>
// Release: Outputs <1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1>
using System;
using System.Runtime.CompilerServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
using Xunit;

[module: SkipLocalsInit]

public struct S3
{
public byte F0;
}

public class Runtime_105468
{
public static S3 s_3;

[Fact]
public static void TestEntryPoint()
{
if (Avx2.IsSupported)
{
var vr15 = (ushort)0;
var vr16 = Vector256.CreateScalar(vr15);
var vr17 = Vector256.Create<ushort>(1);
var vr18 = (ushort)0;
var vr19 = Vector256.CreateScalar(vr18);
var vr20 = s_3.F0;
var vr21 = Avx2.AlignRight(vr17, vr19, vr20);
M6(vr16, vr21);
}
}

[MethodImpl(MethodImplOptions.NoInlining)]
private static void M6(Vector256<ushort> arg1, Vector256<ushort> arg3)
{
Assert.Equal(Vector256<ushort>.Zero, arg1);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildProjectName).cs" />
</ItemGroup>
</Project>

0 comments on commit 5ce7d3f

Please sign in to comment.