From 96bee8dcab478309090c8776d858c7080f851a81 Mon Sep 17 00:00:00 2001 From: Bruce Forstall Date: Wed, 21 Feb 2024 09:54:24 -0800 Subject: [PATCH] Fix handle dumping for AOT scenarios (#98728) Revert #97573 to previous behavior (not dumping handle strings) for NativeAOT and R2R compiles; those require more work to find the handle to use. --- src/coreclr/jit/assertionprop.cpp | 19 +++++++++++++++++-- src/coreclr/jit/gentree.cpp | 27 ++++++++++++++++++++++++--- src/coreclr/jit/valuenum.cpp | 27 +++++++++++++++------------ 3 files changed, 56 insertions(+), 17 deletions(-) diff --git a/src/coreclr/jit/assertionprop.cpp b/src/coreclr/jit/assertionprop.cpp index c965a19f26106c..ba25a60af8edb1 100644 --- a/src/coreclr/jit/assertionprop.cpp +++ b/src/coreclr/jit/assertionprop.cpp @@ -857,12 +857,27 @@ void Compiler::optPrintAssertion(AssertionDsc* curAssertion, AssertionIndex asse if (curAssertion->op1.kind == O1K_EXACT_TYPE) { ssize_t iconVal = curAssertion->op2.u1.iconVal; - printf("Exact Type MT(0x%p %s)", dspPtr(iconVal), eeGetClassName((CORINFO_CLASS_HANDLE)iconVal)); + if (IsTargetAbi(CORINFO_NATIVEAOT_ABI) || opts.IsReadyToRun()) + { + printf("Exact Type MT(0x%p)", dspPtr(iconVal)); + } + else + { + printf("Exact Type MT(0x%p %s)", dspPtr(iconVal), + eeGetClassName((CORINFO_CLASS_HANDLE)iconVal)); + } } else if (curAssertion->op1.kind == O1K_SUBTYPE) { ssize_t iconVal = curAssertion->op2.u1.iconVal; - printf("MT(0x%p %s)", dspPtr(iconVal), eeGetClassName((CORINFO_CLASS_HANDLE)iconVal)); + if (IsTargetAbi(CORINFO_NATIVEAOT_ABI) || opts.IsReadyToRun()) + { + printf("MT(0x%p)", dspPtr(iconVal)); + } + else + { + printf("MT(0x%p %s)", dspPtr(iconVal), eeGetClassName((CORINFO_CLASS_HANDLE)iconVal)); + } assert(curAssertion->op2.HasIconFlag()); } else if ((curAssertion->op1.kind == O1K_BOUND_OPER_BND) || diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index 5b6ae796f05536..298fd1074a4f1a 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -12172,13 +12172,34 @@ void Compiler::gtDispConst(GenTree* tree) printf(" scope"); break; case GTF_ICON_CLASS_HDL: - printf(" class %s", eeGetClassName((CORINFO_CLASS_HANDLE)iconVal)); + if (IsTargetAbi(CORINFO_NATIVEAOT_ABI) || opts.IsReadyToRun()) + { + printf(" class"); + } + else + { + printf(" class %s", eeGetClassName((CORINFO_CLASS_HANDLE)iconVal)); + } break; case GTF_ICON_METHOD_HDL: - printf(" method %s", eeGetMethodFullName((CORINFO_METHOD_HANDLE)iconVal)); + if (IsTargetAbi(CORINFO_NATIVEAOT_ABI) || opts.IsReadyToRun()) + { + printf(" method"); + } + else + { + printf(" method %s", eeGetMethodFullName((CORINFO_METHOD_HANDLE)iconVal)); + } break; case GTF_ICON_FIELD_HDL: - printf(" field %s", eeGetFieldName((CORINFO_FIELD_HANDLE)iconVal, true)); + if (IsTargetAbi(CORINFO_NATIVEAOT_ABI) || opts.IsReadyToRun()) + { + printf(" field"); + } + else + { + printf(" field %s", eeGetFieldName((CORINFO_FIELD_HANDLE)iconVal, true)); + } break; case GTF_ICON_STATIC_HDL: printf(" static"); diff --git a/src/coreclr/jit/valuenum.cpp b/src/coreclr/jit/valuenum.cpp index 011c4d6fa3fa0f..cf4954762cebdb 100644 --- a/src/coreclr/jit/valuenum.cpp +++ b/src/coreclr/jit/valuenum.cpp @@ -9082,19 +9082,22 @@ void ValueNumStore::vnDump(Compiler* comp, ValueNum vn, bool isPtr) ssize_t val = ConstantValue(vn); const GenTreeFlags handleFlags = GetHandleFlags(vn); printf("Hnd const: 0x%p %s", dspPtr(val), GenTree::gtGetHandleKindString(handleFlags)); - switch (handleFlags & GTF_ICON_HDL_MASK) + if (!comp->IsTargetAbi(CORINFO_NATIVEAOT_ABI) && !comp->opts.IsReadyToRun()) { - case GTF_ICON_CLASS_HDL: - printf(" %s", comp->eeGetClassName((CORINFO_CLASS_HANDLE)val)); - break; - case GTF_ICON_METHOD_HDL: - printf(" %s", comp->eeGetMethodFullName((CORINFO_METHOD_HANDLE)val)); - break; - case GTF_ICON_FIELD_HDL: - printf(" %s", comp->eeGetFieldName((CORINFO_FIELD_HANDLE)val, true)); - break; - default: - break; + switch (handleFlags & GTF_ICON_HDL_MASK) + { + case GTF_ICON_CLASS_HDL: + printf(" %s", comp->eeGetClassName((CORINFO_CLASS_HANDLE)val)); + break; + case GTF_ICON_METHOD_HDL: + printf(" %s", comp->eeGetMethodFullName((CORINFO_METHOD_HANDLE)val)); + break; + case GTF_ICON_FIELD_HDL: + printf(" %s", comp->eeGetFieldName((CORINFO_FIELD_HANDLE)val, true)); + break; + default: + break; + } } } else if (IsVNConstant(vn))