LLVM change r256203 (git hash 56afa6e6) added the
IncrementalLinkerCompatible flag to createMCObjectStreamer. Update our
usage to pass the conservative value, true.
LLVM has streamlined the representation for funclet-style EH somewhat, by
pulling the dispatch aspect of catchpad out into a separate catchswitch
instruction, and by explicitly annotating EH pads and calls/invokes with
operands indicating their enclosing EH pad, obviating the need for
endpads.
Update LLILC to generate catchswitch, emit the enclosing pad linkage, and
stop generating endpads.
Also update finally cloning accordingly.
This change adds CoreDisTools -- a library containing
LLVM disassembly tools for CoreClr to LLILC repo.
Currently, the library supports instruction-wise
disassembly API required for implementing GcStress.
It also provides API for PrettyPrinting the
disassembled instructions.
coredistools.h -- the export/import header
coredistools.cpp -- the implementation as a wrapper around
LLVM disassemblers to suite the required API.
This change also adds code to package the library into a
NuGet package.
Started in on reclassifying the #970 errors. Some tests now pass, some pass with EH, others now have more specific issues to track why they fail. Still a bunch more to work through as well. Added two new #970 cases for tests that fail in the lab (with CHK) that I can't repro currently.
Also excluded a few varargs tests, so that for the tests that do run, LLILC does not skip any methods, and normalized all the varargs exclusions to reference dotnet/microsoft#1440.
A new batch of tests is about to be added to CoreClr.
This change adds exclusions for those that fail on
LLILC even though they pass on RyuJit.
Tests that fail without EH enabled for LLILC but that
pass with EH enabled are given issue #13.
The remainder are given issue #970 for later
triage.
We are seeing timeouts in the lab that seem likely to be caused by asserts raising error dialogs. Set COMPLUS_NoGuiOnAssert in our test environment and use this within LLILC to tell LLVM to generate a stack trace on assert, and tell the CRT we want all assert output to go to stderr instead.
Closes#584.
Add exclusions corresponding to tests added to
coreclr on core PR #2220.
Tests that did not fail when LLILC EH was enabled
were put into the corresponding section of the
exclusion file.
We were seeing two different entry point addresses for some methods.
LLILC will insert an explicit null check for calls in the cases that require one, so always request the "any" entry point for a method. Otherwise we need to potentially) keep track of the two entry point addresses for each function, and make sure the right one is used at each call site.
This closes#957 and should also fix#951.
Closes#191.
Add the `tail` modifier to calls that satisfy correctness checks for tail calls (either explicit or implicit). This will enable LLVM to perform "sibling" call optimizations during lowering.
Do a very simplistic tracking of address-taken locals and args to screen out implicit tail call candidates. Do likewise with localloc. Both these need to be detected during the reader's first pass, so add suitable asserts.
Also start tracking unsafe locals, since they (and localloc) will inspire stack security protection checking (aka /GS) and will inhibit tail calls. We still don't actually do the checks (see #353).
Add logic to the ABI classifier so we can detect if we're introducing on-stack references for call lowerings and avoid tail calling in those cases too. This can also be made smarter (eg we might be able to copy-prop and use the values passed by the caller).
Have the jit options determine if the jit is optimizing and use the option setting in the code rather than checking the flags.
Remove existing NYI for explicit tail calls.
Verified by hand that the excluded tail call tests all now pass and seem to get most of the tail call cases the tests intended, so unexcluded them. Most "normal" bring up tests will create around 150 tail call sites so I think the new codegen gets pretty well tested.
Also verified all this works with EH enabled and GC enabled.
The issue in CoreFX that lead to us needing to run tests in code page 65001 is long since fixed. So remove the chcp from our test scripts and docs.
Closes#12.
JIT\Methodical\structs\systemvbringup\structinregs is a new test that
fails with LLILC. Exclude it under issue 927 since it's testing similar
functionality as the test already excluded for that.