From 1c2cd780f3550b80c1295dcdae9765ad7d9efe85 Mon Sep 17 00:00:00 2001 From: EgorBo Date: Tue, 12 Aug 2025 14:24:10 +0200 Subject: [PATCH 1/2] Fix assert in IsKnownConstant --- src/coreclr/jit/importercalls.cpp | 4 ++-- src/coreclr/jit/morph.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/coreclr/jit/importercalls.cpp b/src/coreclr/jit/importercalls.cpp index 4214b08958748d..a4e2e454b96616 100644 --- a/src/coreclr/jit/importercalls.cpp +++ b/src/coreclr/jit/importercalls.cpp @@ -3642,14 +3642,14 @@ GenTree* Compiler::impIntrinsic(CORINFO_CLASS_HANDLE clsHnd, if (op1->OperIsConst() || gtIsTypeof(op1)) { // op1 is a known constant, replace with 'true'. - retNode = gtNewIconNode(1); + retNode = gtNewTrue(); JITDUMP("\nExpanding RuntimeHelpers.IsKnownConstant to true early\n"); // We can also consider FTN_ADDR here } else if (opts.OptimizationDisabled()) { // It doesn't make sense to carry it as GT_INTRINSIC till Morph in Tier0 - retNode = gtNewIconNode(0); + retNode = gtNewFalse(); JITDUMP("\nExpanding RuntimeHelpers.IsKnownConstant to false early\n"); } else diff --git a/src/coreclr/jit/morph.cpp b/src/coreclr/jit/morph.cpp index db5443b8b26796..89193351156a42 100644 --- a/src/coreclr/jit/morph.cpp +++ b/src/coreclr/jit/morph.cpp @@ -8419,14 +8419,14 @@ GenTree* Compiler::fgMorphSmpOp(GenTree* tree, MorphAddrContext* mac, bool* optA // We're lucky to catch a constant here while importer was not JITDUMP("true\n"); DEBUG_DESTROY_NODE(tree, op1); - tree = gtNewIconNode(1); + tree = gtNewTrue(); } else { JITDUMP("false\n"); - tree = gtWrapWithSideEffects(gtNewIconNode(0), op1, GTF_ALL_EFFECT); + tree = gtWrapWithSideEffects(gtNewFalse(), op1, GTF_ALL_EFFECT); } - tree->SetMorphed(this); + tree->SetMorphed(this, /*doChildren*/ true); return tree; } break; From 0c818c3a874e3b4a3e0112cf3214a86c7a5db81e Mon Sep 17 00:00:00 2001 From: EgorBo Date: Tue, 12 Aug 2025 14:32:18 +0200 Subject: [PATCH 2/2] better impl --- src/coreclr/jit/morph.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/coreclr/jit/morph.cpp b/src/coreclr/jit/morph.cpp index 89193351156a42..a4f09b64f6213a 100644 --- a/src/coreclr/jit/morph.cpp +++ b/src/coreclr/jit/morph.cpp @@ -8424,9 +8424,11 @@ GenTree* Compiler::fgMorphSmpOp(GenTree* tree, MorphAddrContext* mac, bool* optA else { JITDUMP("false\n"); - tree = gtWrapWithSideEffects(gtNewFalse(), op1, GTF_ALL_EFFECT); + tree = gtNewFalse(); + tree->SetMorphed(this); + tree = gtWrapWithSideEffects(tree, op1, GTF_ALL_EFFECT); } - tree->SetMorphed(this, /*doChildren*/ true); + tree->SetMorphed(this); return tree; } break;