The type arg is passed after vararg cookie and before regular args.
Modify ReaderBse::rdrCall to handle type args.
Add placeholders for future handling of vararg cookie.
Change the type of type arg to be nativeint.
Change the SomeBool ? 1 : 0 pattern to (int)SomeBool.
We compile 3 more methods in HelloWorld and 315 more methods in all tests.
Closes#280.
Note only floating point cases make it through as intrinsics. Also make sure we honor the alignment requests of the read-only data sections. Abs uses a 16-byte aligned constant mask.
Closes#329.
This commit changes ccFormat so that:
1) Formatting all files is the default.
(previous behavior with --formatall switch)
- Running clang-format.exe on all source files is stable now, and does not
report spurious diffs.
- Therefore, we don't need a dependency on clang-format-diff.py any more.
- clang-format-diff.py was rather unstable wrt showing the generated diffs
2) When not automatically fixing formatting errors, show the generated diffs,
if any, by default.
3) clang-tidy is not run by default until Microsoft/clang-tools-extra#4
is fixed.
4) Arguments are validated to avoid crashing when used with a bad switch.
Powershell text processing is super slow. It costed about 1000 sec
to perform verbose LLVM IR dump normalization. A script written in
Python reduced it to 100 sec, handling the same pattern. Perl script
is even faster. But considering maintainability and reducing the
number of external tools, we decide to choose Python script.
Credit should go to Joe Tremoulet who provided the python filter. There
is further potential here above ApplyFilterAll level by dividing the files
based on the first letter of their base names and using Start-Job facility.
Check this version in first so that people can get the benefit of
speed-up early.
When we have newly passing methods jitted by the new jit, we should call
out how many new methods we jit. This change updates LLILCEnv to count
the number of newly successfully jitted methods, and outputs the number
for the developer. We output the number of newly jitted methods when
there are no new failing methods and when there are newly failed methods
so the developer has all the information about their change.
GenIR::callRuntimeHandleHelper needs to insert a conditional helper call:
x = NullCheckArg;
if (NullCheckArg == nullptr) {
x = callhelper(Arg1, Arg2);
}
return x;
To implement that I generalized genConditionalThrow into
genConditionalHelperCall. This complicated stack maintenance code since
ContinueBlock has edges from the old block and the block containing the call
instruction. To deal with that I added PropagatesOperandStack field to
FlowGraphNodeInfo and set it to falso for all such call blocks. These blocks
have no msil and don't need to use or propagate operand stacks.
Remove unused parameters from maintainOperandStack.
Factor createPhiNode that works for inserting PHI into blocks that may or may
not have terminators.
Add isConstantNull helper.
The number of successfully compiled methods didn't change.
As of now, only release version of CoreCLR Runtime NuGet package is
available. BuildTest and RunTest cannot be run with debug build option
yet.
Added code to give out warning message for developer when it is used.
Also documented this on GitHub wiki page here:
https://github.com/dotnet/llilc/wiki/Dev-Env-and-Test-Harness
This is a major change to runtest and checkdiff.
First, it is changed to user pre-created baseline. Instead of
huge LLVM IR baseline stored in GitHub that caused issues.
Second, summary comparison is introduced. With one line
per method, the runtest and checkdiff process is much more
swift with summary only than previous approach. No dump
runtest is also provided. Verbose dump functionality is still
there. A normalization speed improvement is expected after
this change.
Third, LLVM IR dump level is introduced into LLILCJit.
Right now it read env var directly. It will be updated
when CLR Config is supported in LLILCJit.
A GitHub wiki page is created to illustrate the usage.
https://github.com/dotnet/llilc/wiki/Dev-Env-and-Test-Harness
Below are Typical use cases:
Developer Usage
1.Update your master to latest master
2.Build your baseline JIT: BuildAll or Build
3.Create a summary baseline: RunTest -Jit baseline-jit -Result SummaryBase -Dump Summary
4.Create a verbose baseline: RunTest -Jit baseline-jit -Result VerboseBase -Dump Verbose
5.Create your own branch
6.Do the new development or fix issues
7.Build your new JIT: Build
8.RunTest -Jit new-jit
If failed with overall pass/failure and no dump, back to step 6 for fixing.
9.RunTest -Jit new-jit -Result SummaryDiff -Dump Summary
10.CheckDiff -Base SummaryBase -Diff SummaryDiff -Summary -UseDiffTool
If failed with summary, find out which method is a new failure, back to step 6 for fixing.
11.RunTest -Jit new-jit -Result VerboseDiff -Dump Verbose
12.CheckDiff -Base VerboseBase -Diff VerboseDiff -UseDiffTool
If any LLVM IR diff is not benign, back to step 6 for fixing.
13.Ready for a pull request.
Lab PR Usage
RunTest
Lab PR usage is most simplified version. It only checks for overall pass/fail and does not keep any result.
Lab Nightly Usage
1.RunTest -Jit last-known-good-jit -Result SummaryBase -Dump Summary
or a summary result of running last-know-good-jit is kept in SummaryBase
2.RunTest -Jit latest-jit -Result SummaryDiff -Dump Summary
3.CheckDiff -Base SummaryBase -Diff SummaryDiff -Summary
4.If CheckDiff result is zero, mark latest-jit as last-known-good-jit. Result SummaryDiff could be kept as SummaryBase.
5.If CheckDiff result is not zero, send out failure notice to branch owner. Branch owner should analyze the case and bring relevant developer for fixing.
Implement the family of stelem instructions.
Test pass rate goes up from
129 tests, 34982 methods, 25451 good, 9531 bad (72% good)
to
129 tests, 36144 methods, 28195 good, 7949 bad (78% good)
Closes#188.
Adds an architcture document and block diagrams for both the JIT and AOT architecture. I've added
some beginning thoughts on the arch but would like some review/comment from owners in the particular areas.
Such calls have a special calling convention that requires the stub
address in a target-specific register.
Issue #267 tracks adding support for calls that require VSD.
Format all was incompatible with Python 3 because proc.communicate()
returns bytes. This change fixes formatall so that we are compatible
with python 3. This change also makes the join call in formatall
compatible with Python 3 and prints a new line at the end of diffs for
diff reability.
This change also fixes a formatting error that was checked in in
reader.h
The output of proc.communicate is byte for Python 3. Modify the
comparison of output to decode the bytes and modify the write statement
to also call decode.