<div dir="ltr">Hello,<div><br></div><div>I am working on a project where I need to insert some logic before each machine basic block.</div><div>In particular, it involves setting some global variables and calling a function. I'm able to add the instructions and verify they get added, but when the compiled program runs, it stops with a segfault.</div><div><br></div><div>For brevity, I'm not sharing the whole code here but basically I have a X86 MachineFunctionPass added to addPreEmitPass2 stage which simply inserts a push rcx immediately followed by pop rcx before each basic block (only the relevant logic portions are included):</div><div><br></div><div>/* Inserts push rcx followed by pop rcx before each MachineBasicBlock */</div><div>void VirtualTimeManager::__insertVtlLogic(MachineFunction &MF,<br>    MachineBasicBlock* origMBB) {<br>    const llvm::TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();</div><div>    auto MMI = &MF.getMMI();<br>    llvm::Module &M = const_cast<Module &>(*MMI->getModule());<br>    if (origMBB->empty() || !origMBB->isLegalToHoistInto())<br>         return;<br></div><div>    llvm::BuildMI(*origMBB, origMBB->begin(), DebugLoc(),</div>        TII.get(X86::POP64r)).addReg(X86::RCX);<div>    /* SOME ADDITIONAL LOGIC COMMENTED OUT */</div><div>    llvm::BuildMI(*origMBB, origMBB->begin(), DebugLoc(),<br>        TII.get(X86::PUSH64r)).addReg(X86::RCX);<br><div>}</div><div>bool VirtualTimeManager::runOnMachineFunction(MachineFunction &MF) {</div><div>         for (auto &MBB : MF) {<br>               MachineBasicBlock* origMBB = &MBB; <br>                __insertVtlLogic(MF, origMBB);           <br>        }<br></div><div>       return true;</div><div>}</div></div><div><br></div><div>When I compile and run a program (e.g from SPEC-2006 benchmark (sjeng)), using this pass, the program segfaults. I don't understand how simply adding a push, followed by pop is affecting the program execution. Could anyone please offer some insights. It would be greatly appreciated. I'm new to LLVM and struggling to understand what is causing this issue.</div><div><br></div><div>Thanks,</div><div>Vignesh </div></div>