Update `maintainOperandStacks` and new block processing in `msilToIR` to
accomodate this. Some EH-related blocks will have only exception dispatch
point blocks as predecessors.
- Remove unused __cdecl attributes where necessary
- Change a zero-sized array to a one-sized array; 0-sized arrays are not
standard C++
- Give names to two anonymous structs in ntimage.h
The LLVM plan is actually that filter invocations must be included in the
possible side-effects of calls that may throw exceptions. That plan
should work for LLILC as well.
Documented reader.h's flow graph interface. Trimmed out some of the options that we'll never use, as well as a couple of useless helpers. Fix some typos.
Check for the case that the current block is a point block for point
CurrInstrOffset; in that case, using NextInstrOffset for the split would
extend the block's range, so preserve the smaller end offset.
If we're splitting a block that we've already marked as not propagating
stack (i.e. a point block), preserve that annotation on the newly-created
tail block (since it represents the same flow point as exit from the
original block). The bit is left set on the original block (which becomes
the head); it's up to the caller to know why it's splitting the block here
and whether stack is propagated at this split point.
We were using the same calculation at all callsites, so just remove the
parameter and do the calculation in the method itself; this simplifies
adding new callsites.
Also remove the ReaderBase parameter, since it's always the same as the
instance pointer.
On *Nix platforms, a `wchar_t` is actually a UTF-32 codepoint; on Windows,
it is a UTF-16 codepoint. Thus, when the CLR headers say `wchar_t`, what
they actually mean is `char16_t`. Fix the JIT options code to deal in
UTF-16 strings on all platforms.
- The PAL definitions we need from CoreCLR moved out of libcoreclr and
into libcoreclrpal. Update CMakeLists accordingly.
- The JIT options sources were inconsistent with the rest of the code
w.r.t. the use of the `this` pointer and were missing copyright
headers.
* Fix broken fragment identifiers.
* Use relative links when possible.
* Remove unused {#mainpage} from index.md
* Use consistent formatting for subheaders; e.g.
Use:
## Subheader
Instead of:
Subheader
----------
The JIT options change in https://github.com/dotnet/llilc/pull/412 prepends
COMPlus_ to DumpLLVMIR environment flag. Changes were made in Powershell
script but not in Python script. Update the python script accordingly. Also
update all COMPLus_ flags with consistent upper/lower cases.
Makes use of the new CLR/EE interface to extract environment variables.
Initial support only covers COMPLUS_AltJit and COMPLUS_DUMPLLVMIR.
* Adds Options container in the JITContext. This is used to interface
with CoreCLR and hold any state. Currently implements the AltJit
detection as well as DumpLevel(COMPlus_DUMPLLVMIR) and OptLevel.
* Includes basic method set support that will be used to implement
matching of methods.
* Adds simple utility functions to do cross platform UTF16 to UTF8
conversions. This is based on the facilities supplied by LLVM.
* Fix testing scripts to prepend 'COMPlus_' on the DUMPLLVMIR variable.
83 GC related test cases were just added to CoreCLR repository.
12 of them cannot run with LLILC at this point. Exclude them for now.
Exclusion is added in both powershell script and python script.
Passed verification with llilc_test.
Also added newline at the end of exclusion file.
This is necessary to compute PHI types before processing their blocks.
ECMA-335 guarantees empty operand stacks on MSIL offset back edges.
Update the reader document.
Remove tail block if it's unreached.
This fixes all current verification errors in Roslyn build.
This script runs CoreCLR test with specified LLILC JIT and pre-built
CoreCLR runtime. If verbose level is specified, either summary or
verbose, a result will be created in default location or a place
that is specified. In verbose case, the result will be normalized
with filter.
It is required to run this script from tests directory in a CoreCLR
repository.
To exclude undesired test cases, please edit exclusion file.
usage: llilc_runtest.py [-h] [-a {x86,x64}] [-b {debug,release}]
[-d {summary,verbose}] [-r RESULT_PATH] -j JIT_PATH -c
CORECLR_RUNTIME_PATH
optional arguments:
-h, --help show this help message and exit
-a {x86,x64}, --arch {x86,x64}
the target architure
-b {debug,release}, --build {debug,release}
release or debug build of CoreCLR run-time used
-d {summary,verbose}, --dump-level {summary,verbose}
the dump level: summary, or verbose
-r RESULT_PATH, --result-path RESULT_PATH
the path to runtest result output directory
-j JIT_PATH, --jit-path JIT_PATH
full path to jit .dll
-c CORECLR_RUNTIME_PATH, --coreclr-runtime-path CORECLR_RUNTIME_PATH
full path to CoreCLR run-time binary directory
This script assumes developer handles the work environment by themselves
and CoreCLR test has been built.
llilc_checkpass will follow.
This script is LLILC wrapper of underlying CoreCLR runtest which is
now still Windows only and about to get cross-platform. When that happens,
the implementation of this script will be updated accordingly. But the
command line interface is intended to remain the same.
Precise GC using statepoints cannot handle aggregates that contain
managed pointers yet. (Issue #33)
So, this change adds a check to the reader-postpass, which scans the
generated IR if it contains values of managed-aggregate type.
If so, the compilation fails gracefully by throwing a NYI exception.
This check in ReaderIr.cpp is based on the assertion checks in
RewriteStatepointsForGC.cpp.
[Issue #32]