Correct assert w.r.t meaning of lvRegister
authorSteve MacLean, Qualcomm Datacenter Technologies, Inc <sdmaclea@qti.qualcomm.com>
Fri, 7 Apr 2017 12:51:18 +0000 (12:51 +0000)
committerSteve MacLean, Qualcomm Datacenter Technologies, Inc <sdmaclea@qti.qualcomm.com>
Fri, 7 Apr 2017 16:04:15 +0000 (16:04 +0000)
Per recomendation of Pat Gavlin in dotnet/coreclr#9898

Fixes dotnet/coreclr#9898

Commit migrated from https://github.com/dotnet/coreclr/commit/3ec6edf15485d2fb2b95ac277a3348e73106e9a7

src/coreclr/src/jit/compiler.hpp

index 0026947..d2ce07c 100644 (file)
@@ -2335,15 +2335,21 @@ inline
             // On amd64, every param has a stack location, except on Unix-like systems.
             assert(varDsc->lvIsParam);
 #endif // FEATURE_UNIX_AMD64_STRUCT_PASSING
-#elif defined(_TARGET_X86_) && !defined(LEGACY_BACKEND)
+#elif !defined(LEGACY_BACKEND)
+#if defined(_TARGET_X86_)
             // For !LEGACY_BACKEND on x86, a stack parameter that is enregistered will have a stack location.
             assert(varDsc->lvIsParam && !varDsc->lvIsRegArg);
-#else  // !(_TARGET_AMD64 || !(defined(_TARGET_X86_) && !defined(LEGACY_BACKEND)))
+#else
+            // For !LEGACY_BACKEND on other targets, a stack parameter that is enregistered or prespilled
+            // for profiling on ARM will have a stack location.
+            assert((varDsc->lvIsParam && !varDsc->lvIsRegArg) || isPrespilledArg);
+#endif
+#else  // !(_TARGET_AMD64 || defined(LEGACY_BACKEND))
             // Otherwise, we only have a valid stack location for:
             // A parameter that was passed on the stack, being homed into its register home,
             // or a prespilled argument on arm under profiler.
             assert((varDsc->lvIsParam && !varDsc->lvIsRegArg && varDsc->lvRegister) || isPrespilledArg);
-#endif // !(_TARGET_AMD64 || !(defined(_TARGET_X86_) && !defined(LEGACY_BACKEND)))
+#endif // !(_TARGET_AMD64 || defined(LEGACY_BACKEND))
         }
 
         FPbased = varDsc->lvFramePointerBased;