From e17192110a6bdd992c4eb410d40201cb8ebc871d Mon Sep 17 00:00:00 2001 From: Sergey Andreenko Date: Wed, 14 Nov 2018 13:46:44 -0800 Subject: [PATCH] Fix arm64 PUTARG_STK(contained OBJ(contained LCL_FLD_ADDR)). (dotnet/coreclr#20995) * add a repro test * Fix the issue. Do not mark `GT_OBJ` as containned for arm64. We already do the same in `NewPutArg`. Commit migrated from https://github.com/dotnet/coreclr/commit/73d2906ebfcfe0ae7df2c580f2d74837b1d43496 --- src/coreclr/src/jit/lower.cpp | 6 +-- .../JitBlue/DevDiv_718151/DevDiv_718151.cs | 44 ++++++++++++++++++++++ .../JitBlue/DevDiv_718151/DevDiv_718151.csproj | 34 +++++++++++++++++ 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.cs create mode 100644 src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.csproj diff --git a/src/coreclr/src/jit/lower.cpp b/src/coreclr/src/jit/lower.cpp index f125eaa..9e4db12 100644 --- a/src/coreclr/src/jit/lower.cpp +++ b/src/coreclr/src/jit/lower.cpp @@ -336,15 +336,15 @@ GenTree* Lowering::LowerNode(GenTree* node) break; #endif -#ifndef _TARGET_ARM_ - // TODO-ARM-CQ: We should contain this as long as the offset fits. +#ifndef _TARGET_ARMARCH_ + // TODO-ARMARCH-CQ: We should contain this as long as the offset fits. case GT_OBJ: if (node->AsObj()->Addr()->OperIsLocalAddr()) { node->AsObj()->Addr()->SetContained(); } break; -#endif // !_TARGET_ARM_ +#endif // !_TARGET_ARMARCH_ default: break; diff --git a/src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.cs b/src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.cs new file mode 100644 index 0000000..1b737a5 --- /dev/null +++ b/src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.cs @@ -0,0 +1,44 @@ +// 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. + +// The test originally showed unsupported PUTARG_STK(OBJ(LCL_FLD_ADDR)) when both OBJ and LCL_FLD_ADDR were contained. +// codegenarmarch `genPutArgStk` did not expect that. + +using System; +using System.Runtime.CompilerServices; + +struct Struct16bytes +{ + public int a; + public int b; + public int c; + public int d; +} + +struct StructWithStructField +{ + public bool a; + public Struct16bytes structField; +} + +class DevDiv_714266 +{ + [MethodImpl(MethodImplOptions.NoInlining)] + int foo(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, Struct16bytes s) + { + Console.WriteLine(s.a); + return s.a; + } + + + static int Main() + { + StructWithStructField s = new StructWithStructField(); + s.structField.a = 100; + + DevDiv_714266 test = new DevDiv_714266(); + return test.foo(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, s.structField); + } + +} diff --git a/src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.csproj b/src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.csproj new file mode 100644 index 0000000..95aba99 --- /dev/null +++ b/src/coreclr/tests/src/JIT/Regression/JitBlue/DevDiv_718151/DevDiv_718151.csproj @@ -0,0 +1,34 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + + + + + + + False + + + + + True + + + + + + + + + + -- 2.7.4