diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index 5af186130dcdc..b1df6796f4eb9 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -1186,17 +1186,16 @@ bool TargetPassConfig::addISelPasses() { } addPass(createYkSplitBlocksAfterCallsPass()); } + // `YkModuleClone` needs to run before `YkBasicBlockTracerPass` and + // `YkInsertStackMaps` because they both skip cloned functions. + if (YkModuleClone) { + addPass(createYkModuleClonePass()); + } if (YkInsertStackMaps) { addPass(createYkStackmapsPass()); } - // YkModuleClonePass must run before YkBasicBlockTracerPass because - // YkBasicBlockTracerPass skips processing cloned functions based on - // function name prefix set by YkModuleClonePass. - if (YkModuleClone) { - addPass(createYkModuleClonePass()); - } if (YkBasicBlockTracer) { addPass(createYkBasicBlockTracerPass()); } diff --git a/llvm/lib/Transforms/Yk/StackMaps.cpp b/llvm/lib/Transforms/Yk/StackMaps.cpp index 621ba66ab31e2..4a51f022d21b5 100644 --- a/llvm/lib/Transforms/Yk/StackMaps.cpp +++ b/llvm/lib/Transforms/Yk/StackMaps.cpp @@ -7,6 +7,7 @@ // stop-gap interpreter. #include "llvm/Transforms/Yk/Stackmaps.h" +#include "llvm/Transforms/Yk/ModuleClone.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" @@ -51,6 +52,9 @@ class YkStackmaps : public ModulePass { for (Function &F : M) { if (F.empty()) // skip declarations. continue; + if (F.getName().startswith(YK_CLONE_PREFIX)) // skip cloned functions + continue; + LivenessAnalysis LA(&F); for (BasicBlock &BB : F) { for (Instruction &I : BB) {