-
Notifications
You must be signed in to change notification settings - Fork 802
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve debugging of retail and inline code by not erasing locals and debug points intra-assembly #11717
Merged
Merged
Improve debugging of retail and inline code by not erasing locals and debug points intra-assembly #11717
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
214ae88
improve debugging of retail code by not erasing locals and debug poin…
0c5298a
fix ranges for optimized code
7715b44
fix baselines and range for immediate application of inline function
ccdc6d6
add manual debug stepping tests and fix test baselines
a8e1af3
update baselines
8202729
prevent multiple top-level values with the same name
b5039a3
update baselines, add optimized version of codegen test
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
|
||
neg117.fs(79,18,79,59): ilxgen error FS0041: No overloads match for method 'Transform'. | ||
neg117.fs(74,51,74,121): ilxgen error FS0041: No overloads match for method 'Transform'. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This change in error location is acceptable. This is a late last-minute check from IlxGen based on inline code which now reports a different range. The error should really be reported during type checking, or the code generation succeed. |
||
|
||
Known return type: ('a -> Neg117.TargetA.M1 Microsoft.FSharp.Core.[]) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,17 @@ | ||
REM == %1 --> assembly | ||
|
||
ildasm /TEXT /LINENUM /NOBAR "%~nx1" >"%~n1.il" | ||
IF NOT ERRORLEVEL 0 exit 1 | ||
IF %ERRORLEVEL% NEQ 0 exit /b 1 | ||
|
||
echo %~dp0..\..\..\testenv\bin\ILComparer.exe "%~n1.il.bsl" "%~n1.il" | ||
%~dp0..\..\..\testenv\bin\ILComparer.exe "%~n1.il.bsl" "%~n1.il" | ||
|
||
IF %ERRORLEVEL% EQU 0 exit /b 0 | ||
|
||
if /i "%TEST_UPDATE_BSL%" == "1" ( | ||
echo copy /y "%~n1.il" "%~n1.il.bsl" | ||
copy /y "%~n1.il" "%~n1.il.bsl" | ||
) | ||
|
||
exit /b %ERRORLEVEL% | ||
exit /b 1 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What was the remarkExpr doing before?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"mark" is an old name for "range" so "remarkExpr" means "re-range expression" meaning replacing the ranges with one specific range. We use the same routine to make some other changes too (locals to compiler generated), and it is always run for inline code.
In the above line, we were needlessly and incorrectly calling "remarkExpr" even when doing simple reduction on applying generic functions (e.g. when optimizing
let id x = x in id 3
- hereid
is generic and the optimizer decides to inline it). We shouldn't be remarking the body ofid
here. For example considerThe debug points for the
printfn
shouldn't disappear in Release code just becauseid
gets inlined (that's assuming it does actually get inlined)