From 9b10c40ebbeb7af3894ada51f2eac7825ed0ba54 Mon Sep 17 00:00:00 2001 From: asantagata Date: Wed, 10 Sep 2025 16:36:18 -0400 Subject: [PATCH 1/2] print-annotated version of tapasya's suggestion --- src/c/weaver/weave/perfflow_weave_common.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/c/weaver/weave/perfflow_weave_common.cpp b/src/c/weaver/weave/perfflow_weave_common.cpp index 398aa648..c27618dc 100644 --- a/src/c/weaver/weave/perfflow_weave_common.cpp +++ b/src/c/weaver/weave/perfflow_weave_common.cpp @@ -153,7 +153,18 @@ bool weave_ns::WeaveCommon::insertAfter(Module &m, Function &f, StringRef &a, for (BasicBlock &bb : f) { Instruction *inst = bb.getTerminator(); - if (isa(inst) || isa(inst)) + bool exitFlag = false; + printf("outside\n"); + if (auto *callInst = dyn_cast(inst)) { + printf("inside first if\n"); + if (auto *callee = callInst->getCalledFunction()) { + printf("inside second if, %s\n", callee->getName().str().c_str()); + if (callee->getName() == "exit" || callee->getName() == "abort" || callee->getName() == "pthread_exit") { + exitFlag = true; + } + } + } + if (isa(inst) || isa(inst) || exitFlag) { IRBuilder<> builder(inst); Value *v1 = builder.CreateGlobalStringPtr(m.getName(), "str"); From 9c4e694221b131a9a941c417a5a09661341ca40c Mon Sep 17 00:00:00 2001 From: asantagata Date: Fri, 12 Sep 2025 12:30:48 -0700 Subject: [PATCH 2/2] fix for 156 using prevNode --- src/c/weaver/weave/perfflow_weave_common.cpp | 22 +++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/c/weaver/weave/perfflow_weave_common.cpp b/src/c/weaver/weave/perfflow_weave_common.cpp index c27618dc..4e638300 100644 --- a/src/c/weaver/weave/perfflow_weave_common.cpp +++ b/src/c/weaver/weave/perfflow_weave_common.cpp @@ -153,19 +153,21 @@ bool weave_ns::WeaveCommon::insertAfter(Module &m, Function &f, StringRef &a, for (BasicBlock &bb : f) { Instruction *inst = bb.getTerminator(); - bool exitFlag = false; - printf("outside\n"); - if (auto *callInst = dyn_cast(inst)) { - printf("inside first if\n"); - if (auto *callee = callInst->getCalledFunction()) { - printf("inside second if, %s\n", callee->getName().str().c_str()); - if (callee->getName() == "exit" || callee->getName() == "abort" || callee->getName() == "pthread_exit") { - exitFlag = true; + bool valid = false; + if (isa(inst) || isa(inst)) + { + valid = true; + } else if (isa(inst)) { + if (auto *call = dyn_cast(inst->getPrevNode())) { + Function *callee = call->getCalledFunction(); + if (callee && callee->getName() == "pthread_exit" || callee->getName() == "exit" || callee->getName() == "abort") { + inst = inst->getPrevNode(); + valid = true; } } } - if (isa(inst) || isa(inst) || exitFlag) - { + + if (valid) { IRBuilder<> builder(inst); Value *v1 = builder.CreateGlobalStringPtr(m.getName(), "str"); Value *v2 = builder.CreateGlobalStringPtr(f.getName(), "str");