Age | Commit message (Collapse) | Author | Files | Lines |
|
result.
|
|
Implement `st.lclFld` decomposition and fix #6778.
|
|
To make it more clear where there are formatting errors, have format.py
print what commands the user needs to run to fix the formatting errors in
their PR.
|
|
The problem that was blocking both of these issues was an issue in
liveness when analyzing `st.lclFld` nodes that store to an unpromoted
long-typed local variable or any long-typed field. The latter case--a
`st.lclFld` node that targets a long-typed field--is easy to handle.
Such stores are decomposed from:
```
/--* t0 int
+--* t1 int
t2 = * gt_long long
/--* t2
* st.lclFld long V00
```
To:
```
/--* t0
* st.lclFld int V00 [+0]
/--* t1
* st.lclFld int V00 [+4]
```
The two `st.lclFld` nodes that this transformation generates are marked
with `GTF_VAR_USEASG` to indicate that they are partial (rather than
complete) defs. This is necessary in order to correctly calculate
liveness.
Before this change, stores to unpromoted long-typed local variables
were also decomposed in the above fashion. These local vars can arise in
a number of situations:
- vars that are used to store multi-reg args or return values
- vars that represent long-typed fields of promoted struct-typed vars
- long-typed vars that are marked as unenregisterable before decomp
Unfortunately, the decomposition given above differs in its liveness
semantics when compared to the original IR: in the original IR, the
`st.lclVar` is considered a plain def of its destination, while in
the decomposed IR, each `st.lclFld` is considered both a partial def
and a use of its destination. This difference--namely, that in the
first case the destination is not used at the def and in the second
case it is--causes problems for any analysis that needs to take into
account whether or not a variable is used at a def (e.g. dead store
removal, live-in sets, etc.). In order to retain the original
semantics without complicating the IR, stores to unpromoted, long-typed
local variables are not decomposed. These stores are instead handled
during code generation.
|
|
Reformat jit source base and turn on formatting jobs for PR
|
|
The change to move to the newer version of the CLI for coreclr causes
something to look for a config.json file in the current directory (rather
than the directory where the build.sh script resides), forcing build.sh to
be run from the base coreclr dir (you can't run it from any other
location), so changing directories to the jitutils bin directory would
cause the build to fail, failing the jit-format run. This change fixes the
format.py script to build the full path to the jit-format executable and
then run it from the coreclr directory, rather than changing to the utils
bin dir and running jit-format from there.
|
|
Fix for StackOverflow in SsaBuilder::TopologicalSort.
|
|
SsaBuilder::TopologicalSort allocated an array of bools on the stack.
In one of internal cases the array had 126,758 elements, which caused a
StackOverflow. This change switches SsaBuilder::TopologicalSort from
stack-allocated array of bools to BitVec.
TopologicalSortHelper used to be recursive. It was changed to use an iterative
algorithm in a previous change. I'm inlining TopologicalSortHelper into
TopologicalSort now.
I verified no measurable negative throughput impact from this change
and no asm diffs in SuperPMI.
|
|
|
|
|
|
|
|
|
|
|
|
Declare static field `finalizerCompletedOnce` volatile -- this test has a
side-effect-free busy-loop which checks that static variable for a change it
expects a finalizer to make to it; this static field must be volatile to
ensure the jit doesn't hoist the load from the loop.
Call GC.KeepAlive on the objects constructed in the various allocation
loops in this test, to make sure that the entire allocation isn't
optimized away.
|
|
beta-24514-00, respectively
|
|
X86: Fix inline assertion
|
|
beta-24513-00, respectively (#7006)
|
|
Inline assertion occurred since we didn't bail out the inline fail case
early.
During the test, I got another assertion about debug flag where #7173 is
filed with x86 legacy back-end.
With x86 ryujit back-end, there is an infinite loop from #7038.
Fixes #6844
|
|
Add issue comments to excluded tests
|
|
|
|
|
|
Upgrade xunit runner to 2.2.0-beta2-build3300
|
|
|
|
Fix IMGREL32 static field addr value-num blindspot
|
|
Create coreclr perf jobs for Linux.
Addressed all the comments, and verified coreclr perf run for Linux with latest coreclr/corefx bits passed:
http://dotnet-ci2.cloudapp.net/job/smile21prc_coreclr/job/coreclr-perf/job/perf_Linux/28/consoleFull
|
|
|
|
Add a trailing slash to the base output path.
|
|
JIT/Methodical/tailcall_v4/smallFrame/smallFrame.sh contains
"tail.call, pop, ret" pattern. The pattern is not allowed in ECMA and
is only supported on x64 for compatibility. (issue #7036)
Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
|
|
[Script] Prevent build output contamination while building test overlay
|
|
Enable Arm32 Test Build
|
|
According to issue #6217, following three tests fails
, because FEATURE_FASTTAILCALL is not supported in ARM.
JIT/Directed/tailcall/tailcall/tailcall.sh
JIT/Methodical/tailcall_v4/hijacking/hijacking.sh
JIT/Regression/JitBlue/devdiv_902271/DevDiv_902271/DevDiv_902271.sh
Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
|
|
While building test overlay, all files in `$mscorlibDir/bin` are
copyed to `$mscorlibDir` where usually `$coreclrBinDir`.
It contaminates build output. This commit prevent it by moving
copy commend to function `create_core_overlay`.
|
|
|
|
Upgrade xunit from 2.1.0 to 2.2.0-beta2-build3300.
Restore xunit.runner.msbuild during normal test build.
Remove unused reference to xunit 2.1.0.
Replace "2.1.0" with "$(XunitPackageVersion)" for direct path to files.
Upgrade xunit used by GCPerfTestFramework and fix helix path.
Upgrade Microsoft.DotNet.xunit.performance and Microsoft.DotNet.xunit.performance.metrics to 1.0.0-alpha-build0040.
Upgrade XunitPerformanceDependency packages to 1.0.0-alpha-build0040.
Include scripts project.json in validation, update them.
Don't use helix.targets in generated xunit wrappers.
Copy TestTFM defaulting logic from CoreFX dir.props. Tweak default wrapper TFM per platform, and use real RID instead of relying on fallthrough.
|
|
Fix format.py
|
|
In format.py, we were downloading bootstrap.sh/cmd to the current working
directory, but assuming that it was in coreclr/bootstrap, which is
incorrect. This change downloads it directly to coreclr/bootstrap, so that
we download and run to the same location.
This change also modifies where we install the newer version of dotnetcli
needed for jitutils to the coreclr/dotnetcli-jitutils directory. This
change is necessary because build.cmd->run.cmd->init-tools.cmd removes the
Tools directory, including our dotnetcli directory, so we don't want our
version of the cli to be trashed.
We also clean up our work at the end of the script by removing the
created jitutils and dotnetcli directories, and the bootstrap script.
Finally, this change adds some comments to tell the user what it's doing.
|
|
Pass /p:Platform to msbuild in runtest.cmd.
|
|
Stop groveling for project.json files when building every test.
|
|
Otherwise, the tests will use the ambient setting of the Platform
variable, which might not match the architecture specified on the
command line. This results in the wrong build of the tests running
against the correct runtime, which e.g. causes failures in tests
with native components.
|
|
[Linux/ARM/Script] Add some features help for arm target test
|
|
This information is only needed by build.proj. Do not compute it in dir.props,
which is included by every test project.
|
|
When `fgMorphField` lowers a static field reference for which
`eeGetRelocTypeHint` returns `IMAGE_REL_BASED_REL32`, it creates an
`IntCon`, flagged with `GFT_ICON_STATIC_HDL` and marked with the static
field in its `gtFieldSeq` field, to represent the field's address (as
opposed to the normal case where it generates a `ClsVar`). This change
updates the `IsFieldAddr` helper used by value-numbering/loop-hoisting to
recognize such constants as the appropriate field address, which then
allows the disambiguation/tracking of accesses to these fields to kick in
as it does for `ClsVar` nodes.
Also update test GC/Scenarios/FinalizeTimeout to mark a bool volatile that
otherwise can get hoisted (the test aims to observe finalization from a
side-effect-free busy-loop by communicating through this bool).
Fixes #6900.
|
|
Aggregate arguments to calls (i.e. arguments that are made up
of multiple, independent values such as those to be passed in
multiple registers) are represented by GT_LIST nodes that are
not distiguishable from normal GT_LIST nodes without the extra
context of the call. GT_LIST nodes, however, are disallowed in
LIR ranges. The intersection of these two design choices causes
problems for code that operates on LIR but wants to observe
aggregate arguments as a whole (rather than piecewise). In the
case of #6893, this caused lowering to attempt to insert a
PUTARG_STK node after the GT_LIST node that represented the
aggregate argument that was being forced to the stack, which
caused an assertion in the LIR utilities to fail (the GT_LIST
node was passed as the insertion point to `LIR::Range::InsertAfter`,
which requires that the insertion point be a part of the given
range).
Conceptually, the fix is simple: the nodes that represent
aggregate arguments must be allowed to be part of LIR ranges.
The implementation, however, is complicated somewhat by the
need to distinguish the nodes used for aggregate arguments from
normal GT_LIST nodes. These changes implement a short-term
fix that distiguished these nodes by adding a node-specific flag,
`GTF_LIST_AGGREGATE`, to indicate that a GT_LIST node is in fact
an aggregate argument. In the long term, a more palatable
implementation would be the introduction of a new node and operator
type to represent aggregate arguments, but this is likely to
require broader changes to the compiler.
|
|
Clean up test issues files
|
|
Re-enable some tests that pass. Rearrange x86_legacy_backend_issues.targets
to more closely resemble issues.targets so it is easier to see the
difference.
|
|
Fixed AllTestProjects.sln
|
|
* Add `--build-overlay-only` option to help building test package for arm target.
You can use this option on host after cross building, to make a
test package that will run on target device.
* Make `setup-runtime-dependencies.sh` called on `x64` architecture only.
Because dependent packages are not supported on other architectures now.
* Add `testsUnsupportedOnARM32.txt` file for list up test exclusions.
* minor style fix.
|
|
beta-24430-00, respectively
|
|
This change reformats the issues files, and sorts the excluded tests
by name, so it is possible to easily compare the baseline issues.targets
file against the x86_jit32_issues.targets and x86_legacy_backend_issues.targets
files.
|
|
Move TailcallVerifyWithPrefix test to "baseline x86" exclusion section
|