From b7237000e85848d3b498eff3bf1ca9425236359c Mon Sep 17 00:00:00 2001 From: Pavel Durov Date: Thu, 8 Feb 2024 19:40:50 +0000 Subject: [PATCH] Outline indirect calls in swt --- tests/c/unroll_safe_implies_noinline.c | 2 ++ yktracec/src/jitmodbuilder.cc | 10 ++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/c/unroll_safe_implies_noinline.c b/tests/c/unroll_safe_implies_noinline.c index dd493e8d4..0c76a8fde 100644 --- a/tests/c/unroll_safe_implies_noinline.c +++ b/tests/c/unroll_safe_implies_noinline.c @@ -1,3 +1,5 @@ +// # YKFIXME: outline indirect calls in swt. +// ignore-if: test "$YKB_TRACER" == "swt" // Run-time: // env-var: YKD_SERIALISE_COMPILATION=1 // env-var: YKD_PRINT_IR=aot diff --git a/yktracec/src/jitmodbuilder.cc b/yktracec/src/jitmodbuilder.cc index 8d076e4fc..e44a74082 100644 --- a/yktracec/src/jitmodbuilder.cc +++ b/yktracec/src/jitmodbuilder.cc @@ -1246,12 +1246,10 @@ class JITModBuilder { assert(Idx + 1 < InpTrace.Length()); TraceLoc MaybeNextIB = InpTrace[Idx + 1]; if (const IRBlock *NextIB = MaybeNextIB.getMappedBlock()) { - auto isNextBlockNotEntry = NextIB->BBIdx > 0; - if (IsSWTrace && CI->isIndirectCall() && isNextBlockNotEntry) { - // With software tracing we don't get unmappable blocks when - // an indirect call target is unmappable. But we can check - // instead if the next block is an entry block. If it's not, - // the call target is unmappable and can't be inlined. + if (IsSWTrace) { + // YKFIXME: outline indirect calls in swt. + // Peeking ahead in swt might give us a mappable entry block, + // however we don't know if there was an umappable call in between. CF = nullptr; } else { CF = AOTMod->getFunction(NextIB->FuncName);