Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c0546cb

Browse files
committed
Merge branch 'main' into vectorizepow
2 parents 3efe176 + 027e2a8 commit c0546cb

File tree

139 files changed

+8416
-5900
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

139 files changed

+8416
-5900
lines changed

.config/dotnet-tools.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
]
1616
},
1717
"microsoft.dotnet.xharness.cli": {
18-
"version": "9.0.0-prerelease.24073.1",
18+
"version": "9.0.0-prerelease.24077.1",
1919
"commands": [
2020
"xharness"
2121
]

.github/CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
/src/mono/dlls @thaystg @lambdageek
6363

6464
/src/native/public/mono @marek-safar @lambdageek
65+
/src/native/external/libunwind @janvorli @AaronRobinsonMSFT @dotnet/dotnet-diag
66+
/src/native/external/libunwind_extras @janvorli @AaronRobinsonMSFT @dotnet/dotnet-diag
6567

6668
/src/libraries/sendtohelix-browser.targets @akoeplinger
6769
/src/libraries/sendtohelix-wasm.targets @akoeplinger

docs/area-owners.md

Lines changed: 29 additions & 31 deletions
Large diffs are not rendered by default.

eng/Version.Details.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,9 @@
9999
<Sha>687be2a32a302aaade82380c0eaafa5af85fb4da</Sha>
100100
<SourceBuild RepoName="emsdk" ManagedOnly="true" />
101101
</Dependency>
102-
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24072.5">
102+
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24075.1">
103103
<Uri>https://github.com/dotnet/source-build-reference-packages</Uri>
104-
<Sha>2249c9a81ec9b6cd86791c21e6e69fbc07099788</Sha>
104+
<Sha>e659f328bf255d3e17e81296117c3aed1d461f2f</Sha>
105105
<SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" />
106106
</Dependency>
107107
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24076.1">
@@ -321,17 +321,17 @@
321321
<Uri>https://github.com/dotnet/runtime</Uri>
322322
<Sha>205ef031e0fe5152dede0bd9f99d0f6f9e7f1e45</Sha>
323323
</Dependency>
324-
<Dependency Name="Microsoft.DotNet.XHarness.TestRunners.Common" Version="9.0.0-prerelease.24073.1">
324+
<Dependency Name="Microsoft.DotNet.XHarness.TestRunners.Common" Version="9.0.0-prerelease.24077.1">
325325
<Uri>https://github.com/dotnet/xharness</Uri>
326-
<Sha>a7dfc0c3c4bc2eef6ba70576cdede18464ca7ff6</Sha>
326+
<Sha>f49b5c0db06528a9580686a5b63b0e5b4aba566b</Sha>
327327
</Dependency>
328-
<Dependency Name="Microsoft.DotNet.XHarness.TestRunners.Xunit" Version="9.0.0-prerelease.24073.1">
328+
<Dependency Name="Microsoft.DotNet.XHarness.TestRunners.Xunit" Version="9.0.0-prerelease.24077.1">
329329
<Uri>https://github.com/dotnet/xharness</Uri>
330-
<Sha>a7dfc0c3c4bc2eef6ba70576cdede18464ca7ff6</Sha>
330+
<Sha>f49b5c0db06528a9580686a5b63b0e5b4aba566b</Sha>
331331
</Dependency>
332-
<Dependency Name="Microsoft.DotNet.XHarness.CLI" Version="9.0.0-prerelease.24073.1">
332+
<Dependency Name="Microsoft.DotNet.XHarness.CLI" Version="9.0.0-prerelease.24077.1">
333333
<Uri>https://github.com/dotnet/xharness</Uri>
334-
<Sha>a7dfc0c3c4bc2eef6ba70576cdede18464ca7ff6</Sha>
334+
<Sha>f49b5c0db06528a9580686a5b63b0e5b4aba566b</Sha>
335335
</Dependency>
336336
<Dependency Name="Microsoft.DotNet.PackageTesting" Version="9.0.0-beta.24076.5">
337337
<Uri>https://github.com/dotnet/arcade</Uri>

eng/Versions.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,9 @@
184184
<!-- Testing -->
185185
<MicrosoftNETCoreCoreDisToolsVersion>1.4.0</MicrosoftNETCoreCoreDisToolsVersion>
186186
<MicrosoftNETTestSdkVersion>17.4.0-preview-20220707-01</MicrosoftNETTestSdkVersion>
187-
<MicrosoftDotNetXHarnessTestRunnersCommonVersion>9.0.0-prerelease.24073.1</MicrosoftDotNetXHarnessTestRunnersCommonVersion>
188-
<MicrosoftDotNetXHarnessTestRunnersXunitVersion>9.0.0-prerelease.24073.1</MicrosoftDotNetXHarnessTestRunnersXunitVersion>
189-
<MicrosoftDotNetXHarnessCLIVersion>9.0.0-prerelease.24073.1</MicrosoftDotNetXHarnessCLIVersion>
187+
<MicrosoftDotNetXHarnessTestRunnersCommonVersion>9.0.0-prerelease.24077.1</MicrosoftDotNetXHarnessTestRunnersCommonVersion>
188+
<MicrosoftDotNetXHarnessTestRunnersXunitVersion>9.0.0-prerelease.24077.1</MicrosoftDotNetXHarnessTestRunnersXunitVersion>
189+
<MicrosoftDotNetXHarnessCLIVersion>9.0.0-prerelease.24077.1</MicrosoftDotNetXHarnessCLIVersion>
190190
<MicrosoftDotNetHotReloadUtilsGeneratorBuildToolVersion>9.0.0-alpha.0.24072.1</MicrosoftDotNetHotReloadUtilsGeneratorBuildToolVersion>
191191
<NUnitVersion>3.12.0</NUnitVersion>
192192
<NUnit3TestAdapterVersion>4.5.0</NUnit3TestAdapterVersion>

src/coreclr/jit/block.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -301,18 +301,20 @@ bool BasicBlock::CanRemoveJumpToNext(Compiler* compiler) const
301301
}
302302

303303
//------------------------------------------------------------------------
304-
// CanRemoveJumpToFalseTarget: determine if jump to false target can be omitted
304+
// CanRemoveJumpToTarget: determine if jump to target can be omitted
305305
//
306306
// Arguments:
307+
// target - true/false target of the BBJ_COND block
307308
// compiler - current compiler instance
308309
//
309310
// Returns:
310-
// true if block is a BBJ_COND that can fall into its false target
311+
// true if block is a BBJ_COND that can fall into target
311312
//
312-
bool BasicBlock::CanRemoveJumpToFalseTarget(Compiler* compiler) const
313+
bool BasicBlock::CanRemoveJumpToTarget(BasicBlock* target, Compiler* compiler) const
313314
{
314315
assert(KindIs(BBJ_COND));
315-
return NextIs(bbFalseTarget) && !hasAlign() && !compiler->fgInDifferentRegions(this, bbFalseTarget);
316+
assert(TrueTargetIs(target) || FalseTargetIs(target));
317+
return NextIs(target) && !compiler->fgInDifferentRegions(this, target);
316318
}
317319

318320
//------------------------------------------------------------------------
@@ -511,7 +513,6 @@ void BasicBlock::dspFlags() const
511513
{BBF_NO_CSE_IN, "no-cse"},
512514
{BBF_CAN_ADD_PRED, "add-pred"},
513515
{BBF_RETLESS_CALL, "retless"},
514-
{BBF_LOOP_PREHEADER, "preheader"},
515516
{BBF_COLD, "cold"},
516517
{BBF_KEEP_BBJ_ALWAYS, "KEEP"},
517518
{BBF_CLONED_FINALLY_BEGIN, "cfb"},
@@ -521,7 +522,6 @@ void BasicBlock::dspFlags() const
521522
{BBF_HAS_MDARRAYREF, "mdarr"},
522523
{BBF_NEEDS_GCPOLL, "gcpoll"},
523524
{BBF_NONE_QUIRK, "q"},
524-
{BBF_OLD_LOOP_HEADER_QUIRK, "loopheader"},
525525
};
526526

527527
bool first = true;
@@ -857,8 +857,7 @@ void BasicBlock::CopyTarget(Compiler* compiler, const BasicBlock* from)
857857
SetEhf(new (compiler, CMK_BasicBlock) BBehfDesc(compiler, from->GetEhfTargets()));
858858
break;
859859
case BBJ_COND:
860-
// TODO-NoFallThrough: Copy false target, too?
861-
SetCond(from->GetTrueTarget(), Next());
860+
SetCond(from->GetTrueTarget(), from->GetFalseTarget());
862861
break;
863862
case BBJ_ALWAYS:
864863
SetKindAndTarget(from->GetKind(), from->GetTarget());
@@ -899,8 +898,7 @@ void BasicBlock::TransferTarget(BasicBlock* from)
899898
from->bbEhfTargets = nullptr; // Make sure nobody uses the descriptor after this.
900899
break;
901900
case BBJ_COND:
902-
// TODO-NoFallThrough: Copy false target, too?
903-
SetCond(from->GetTrueTarget(), Next());
901+
SetCond(from->GetTrueTarget(), from->GetFalseTarget());
904902
break;
905903
case BBJ_ALWAYS:
906904
SetKindAndTarget(from->GetKind(), from->GetTarget());
@@ -1185,7 +1183,7 @@ unsigned BasicBlock::NumSucc() const
11851183
return 1;
11861184

11871185
case BBJ_COND:
1188-
if (bbTarget == bbNext)
1186+
if (bbTrueTarget == bbFalseTarget)
11891187
{
11901188
return 1;
11911189
}
@@ -1310,7 +1308,7 @@ unsigned BasicBlock::NumSucc(Compiler* comp)
13101308
return 1;
13111309

13121310
case BBJ_COND:
1313-
if (bbTarget == bbNext)
1311+
if (bbTrueTarget == bbFalseTarget)
13141312
{
13151313
return 1;
13161314
}

src/coreclr/jit/block.h

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -406,44 +406,38 @@ enum BasicBlockFlags : unsigned __int64
406406

407407
BBF_RETLESS_CALL = MAKE_BBFLAG(24), // BBJ_CALLFINALLY that will never return (and therefore, won't need a paired
408408
// BBJ_CALLFINALLYRET); see isBBCallFinallyPair().
409-
BBF_LOOP_PREHEADER = MAKE_BBFLAG(25), // BB is a loop preheader block
410-
BBF_COLD = MAKE_BBFLAG(26), // BB is cold
411-
BBF_PROF_WEIGHT = MAKE_BBFLAG(27), // BB weight is computed from profile data
412-
BBF_KEEP_BBJ_ALWAYS = MAKE_BBFLAG(28), // A special BBJ_ALWAYS block, used by EH code generation. Keep the jump kind
409+
BBF_COLD = MAKE_BBFLAG(25), // BB is cold
410+
BBF_PROF_WEIGHT = MAKE_BBFLAG(26), // BB weight is computed from profile data
411+
BBF_KEEP_BBJ_ALWAYS = MAKE_BBFLAG(27), // A special BBJ_ALWAYS block, used by EH code generation. Keep the jump kind
413412
// as BBJ_ALWAYS. Used on x86 for the final step block out of a finally.
414-
BBF_HAS_CALL = MAKE_BBFLAG(29), // BB contains a call
415-
BBF_DOMINATED_BY_EXCEPTIONAL_ENTRY = MAKE_BBFLAG(30), // Block is dominated by exceptional entry.
416-
BBF_BACKWARD_JUMP = MAKE_BBFLAG(31), // BB is surrounded by a backward jump/switch arc
417-
BBF_BACKWARD_JUMP_SOURCE = MAKE_BBFLAG(32), // Block is a source of a backward jump
418-
BBF_BACKWARD_JUMP_TARGET = MAKE_BBFLAG(33), // Block is a target of a backward jump
419-
BBF_PATCHPOINT = MAKE_BBFLAG(34), // Block is a patchpoint
420-
BBF_PARTIAL_COMPILATION_PATCHPOINT = MAKE_BBFLAG(35), // Block is a partial compilation patchpoint
421-
BBF_HAS_HISTOGRAM_PROFILE = MAKE_BBFLAG(36), // BB contains a call needing a histogram profile
422-
BBF_TAILCALL_SUCCESSOR = MAKE_BBFLAG(37), // BB has pred that has potential tail call
423-
BBF_RECURSIVE_TAILCALL = MAKE_BBFLAG(38), // Block has recursive tailcall that may turn into a loop
424-
BBF_NO_CSE_IN = MAKE_BBFLAG(39), // Block should kill off any incoming CSE
425-
BBF_CAN_ADD_PRED = MAKE_BBFLAG(40), // Ok to add pred edge to this block, even when "safe" edge creation disabled
426-
BBF_NONE_QUIRK = MAKE_BBFLAG(41), // Block was created as a BBJ_ALWAYS to the next block,
413+
BBF_HAS_CALL = MAKE_BBFLAG(28), // BB contains a call
414+
BBF_DOMINATED_BY_EXCEPTIONAL_ENTRY = MAKE_BBFLAG(29), // Block is dominated by exceptional entry.
415+
BBF_BACKWARD_JUMP = MAKE_BBFLAG(30), // BB is surrounded by a backward jump/switch arc
416+
BBF_BACKWARD_JUMP_SOURCE = MAKE_BBFLAG(31), // Block is a source of a backward jump
417+
BBF_BACKWARD_JUMP_TARGET = MAKE_BBFLAG(32), // Block is a target of a backward jump
418+
BBF_PATCHPOINT = MAKE_BBFLAG(33), // Block is a patchpoint
419+
BBF_PARTIAL_COMPILATION_PATCHPOINT = MAKE_BBFLAG(34), // Block is a partial compilation patchpoint
420+
BBF_HAS_HISTOGRAM_PROFILE = MAKE_BBFLAG(35), // BB contains a call needing a histogram profile
421+
BBF_TAILCALL_SUCCESSOR = MAKE_BBFLAG(36), // BB has pred that has potential tail call
422+
BBF_RECURSIVE_TAILCALL = MAKE_BBFLAG(37), // Block has recursive tailcall that may turn into a loop
423+
BBF_NO_CSE_IN = MAKE_BBFLAG(38), // Block should kill off any incoming CSE
424+
BBF_CAN_ADD_PRED = MAKE_BBFLAG(39), // Ok to add pred edge to this block, even when "safe" edge creation disabled
425+
BBF_NONE_QUIRK = MAKE_BBFLAG(40), // Block was created as a BBJ_ALWAYS to the next block,
427426
// and should be treated as if it falls through.
428427
// This is just to reduce diffs from removing BBJ_NONE.
429428
// (TODO: Remove this quirk after refactoring Compiler::fgFindInsertPoint)
430-
BBF_OLD_LOOP_HEADER_QUIRK = MAKE_BBFLAG(42), // Block was the header ('entry') of a loop recognized by old loop finding
431-
BBF_HAS_VALUE_PROFILE = MAKE_BBFLAG(43), // Block has a node that needs a value probing
429+
BBF_HAS_VALUE_PROFILE = MAKE_BBFLAG(41), // Block has a node that needs a value probing
432430

433431
// The following are sets of flags.
434432

435-
// Flags that relate blocks to loop structure.
436-
437-
BBF_LOOP_FLAGS = BBF_LOOP_PREHEADER | BBF_LOOP_HEAD | BBF_LOOP_ALIGN,
438-
439433
// Flags to update when two blocks are compacted
440434

441435
BBF_COMPACT_UPD = BBF_GC_SAFE_POINT | BBF_NEEDS_GCPOLL | BBF_HAS_JMP | BBF_HAS_IDX_LEN | BBF_HAS_MD_IDX_LEN | BBF_BACKWARD_JUMP | \
442-
BBF_HAS_NEWOBJ | BBF_HAS_NULLCHECK | BBF_HAS_MDARRAYREF | BBF_LOOP_PREHEADER | BBF_OLD_LOOP_HEADER_QUIRK,
436+
BBF_HAS_NEWOBJ | BBF_HAS_NULLCHECK | BBF_HAS_MDARRAYREF,
443437

444438
// Flags a block should not have had before it is split.
445439

446-
BBF_SPLIT_NONEXIST = BBF_LOOP_HEAD | BBF_RETLESS_CALL | BBF_LOOP_PREHEADER | BBF_COLD,
440+
BBF_SPLIT_NONEXIST = BBF_LOOP_HEAD | BBF_RETLESS_CALL | BBF_COLD,
447441

448442
// Flags lost by the top block when a block is split.
449443
// Note, this is a conservative guess.
@@ -616,7 +610,7 @@ struct BasicBlock : private LIR::Range
616610

617611
bool CanRemoveJumpToNext(Compiler* compiler) const;
618612

619-
bool CanRemoveJumpToFalseTarget(Compiler* compiler) const;
613+
bool CanRemoveJumpToTarget(BasicBlock* target, Compiler* compiler) const;
620614

621615
unsigned GetTargetOffs() const
622616
{
@@ -669,19 +663,13 @@ struct BasicBlock : private LIR::Range
669663
{
670664
assert(KindIs(BBJ_COND));
671665
assert(bbTrueTarget != nullptr);
672-
assert(target != nullptr);
673666
return (bbTrueTarget == target);
674667
}
675668

676669
BasicBlock* GetFalseTarget() const
677670
{
678671
assert(KindIs(BBJ_COND));
679-
680-
// So long as bbFalseTarget tracks bbNext in SetNext(), it is possible for bbFalseTarget to be null
681-
// if this block is unlinked from the block list.
682-
// So check bbNext before triggering the assert if bbFalseTarget is null.
683-
// TODO-NoFallThrough: Remove IsLast() check once bbFalseTarget isn't hard-coded to bbNext
684-
assert((bbFalseTarget != nullptr) || IsLast());
672+
assert(bbFalseTarget != nullptr);
685673
return bbFalseTarget;
686674
}
687675

@@ -696,15 +684,12 @@ struct BasicBlock : private LIR::Range
696684
{
697685
assert(KindIs(BBJ_COND));
698686
assert(bbFalseTarget != nullptr);
699-
assert(target != nullptr);
700687
return (bbFalseTarget == target);
701688
}
702689

703690
void SetCond(BasicBlock* trueTarget, BasicBlock* falseTarget)
704691
{
705692
assert(trueTarget != nullptr);
706-
// TODO-NoFallThrough: Allow falseTarget to diverge from bbNext
707-
assert(falseTarget == bbNext);
708693
bbKind = BBJ_COND;
709694
bbTrueTarget = trueTarget;
710695
bbFalseTarget = falseTarget;

src/coreclr/jit/codegenarm.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,6 +1317,13 @@ void CodeGen::genCodeForJTrue(GenTreeOp* jtrue)
13171317
regNumber reg = genConsumeReg(op);
13181318
inst_RV_RV(INS_tst, reg, reg, genActualType(op));
13191319
inst_JMP(EJ_ne, compiler->compCurBB->GetTrueTarget());
1320+
1321+
// If we cannot fall into the false target, emit a jump to it
1322+
BasicBlock* falseTarget = compiler->compCurBB->GetFalseTarget();
1323+
if (!compiler->compCurBB->CanRemoveJumpToTarget(falseTarget, compiler))
1324+
{
1325+
inst_JMP(EJ_jmp, falseTarget);
1326+
}
13201327
}
13211328

13221329
//------------------------------------------------------------------------

src/coreclr/jit/codegenarm64.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4708,6 +4708,13 @@ void CodeGen::genCodeForJTrue(GenTreeOp* jtrue)
47084708
GenTree* op = jtrue->gtGetOp1();
47094709
regNumber reg = genConsumeReg(op);
47104710
GetEmitter()->emitIns_J_R(INS_cbnz, emitActualTypeSize(op), compiler->compCurBB->GetTrueTarget(), reg);
4711+
4712+
// If we cannot fall into the false target, emit a jump to it
4713+
BasicBlock* falseTarget = compiler->compCurBB->GetFalseTarget();
4714+
if (!compiler->compCurBB->CanRemoveJumpToTarget(falseTarget, compiler))
4715+
{
4716+
inst_JMP(EJ_jmp, falseTarget);
4717+
}
47114718
}
47124719

47134720
//------------------------------------------------------------------------
@@ -4935,6 +4942,13 @@ void CodeGen::genCodeForJumpCompare(GenTreeOpCC* tree)
49354942

49364943
GetEmitter()->emitIns_J_R(ins, attr, compiler->compCurBB->GetTrueTarget(), reg);
49374944
}
4945+
4946+
// If we cannot fall into the false target, emit a jump to it
4947+
BasicBlock* falseTarget = compiler->compCurBB->GetFalseTarget();
4948+
if (!compiler->compCurBB->CanRemoveJumpToTarget(falseTarget, compiler))
4949+
{
4950+
inst_JMP(EJ_jmp, falseTarget);
4951+
}
49384952
}
49394953

49404954
//---------------------------------------------------------------------

src/coreclr/jit/codegencommon.cpp

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2828
#endif
2929

3030
#include "patchpointinfo.h"
31+
#include "optcse.h" // for cse metrics
3132

3233
/*****************************************************************************/
3334

@@ -395,7 +396,7 @@ void CodeGen::genMarkLabelsForCodegen()
395396
block->GetTrueTarget()->SetFlags(BBF_HAS_LABEL);
396397

397398
// If we need a jump to the false target, give it a label
398-
if (!block->CanRemoveJumpToFalseTarget(compiler))
399+
if (!block->CanRemoveJumpToTarget(block->GetFalseTarget(), compiler))
399400
{
400401
JITDUMP(" " FMT_BB " : branch target\n", block->GetFalseTarget()->bbNum);
401402
block->GetFalseTarget()->SetFlags(BBF_HAS_LABEL);
@@ -2024,16 +2025,36 @@ void CodeGen::genEmitMachineCode()
20242025
}
20252026

20262027
#ifdef DEBUG
2027-
if (compiler->opts.disAsm || verbose)
2028+
const bool dspMetrics = compiler->opts.dspMetrics;
2029+
const bool dspSummary = compiler->opts.disAsm || verbose;
2030+
const bool dspMetricsOnly = dspMetrics && !dspSummary;
2031+
2032+
if (dspSummary || dspMetrics)
20282033
{
2029-
printf("\n; Total bytes of code %d, prolog size %d, PerfScore %.2f, instruction count %d, allocated bytes for "
2034+
if (!dspMetricsOnly)
2035+
{
2036+
printf("\n");
2037+
}
2038+
2039+
printf("Total bytes of code %d, prolog size %d, PerfScore %.2f, instruction count %d, allocated bytes for "
20302040
"code %d",
20312041
codeSize, prologSize, compiler->info.compPerfScore, instrCount,
20322042
GetEmitter()->emitTotalHotCodeSize + GetEmitter()->emitTotalColdCodeSize);
20332043

2034-
if (JitConfig.JitMetrics() > 0)
2044+
if (dspMetrics)
20352045
{
2036-
printf(", num cse %d", compiler->optCSEcount);
2046+
printf(", num cse %d num cand %d", compiler->optCSEcount, compiler->optCSECandidateCount);
2047+
2048+
CSE_HeuristicCommon* const cseHeuristic = compiler->optGetCSEheuristic();
2049+
if (cseHeuristic != nullptr)
2050+
{
2051+
cseHeuristic->DumpMetrics();
2052+
}
2053+
2054+
if (compiler->info.compMethodSuperPMIIndex >= 0)
2055+
{
2056+
printf(" spmi index %d", compiler->info.compMethodSuperPMIIndex);
2057+
}
20372058
}
20382059

20392060
#if TRACK_LSRA_STATS
@@ -2046,7 +2067,10 @@ void CodeGen::genEmitMachineCode()
20462067
printf(" (MethodHash=%08x) for method %s (%s)\n", compiler->info.compMethodHash(), compiler->info.compFullName,
20472068
compiler->compGetTieringName(true));
20482069

2049-
printf("; ============================================================\n\n");
2070+
if (!dspMetricsOnly)
2071+
{
2072+
printf("; ============================================================\n\n");
2073+
}
20502074
printf(""); // in our logic this causes a flush
20512075
}
20522076

0 commit comments

Comments
 (0)