apazos added inline comments.
================ Comment at: llvm/lib/Target/RISCV/RISCVFrameLowering.cpp:631 + MachineBasicBlock::iterator NewMI = + BuildMI(MBB, MI, DL, TII.get(RISCV::PseudoCALL)) + .add(MI->getOperand(0)); ---------------- apazos wrote: > Where are we making sure the PseudoCALL result in a0 is alive through the > riscv_restore call? I did not find any other target that transforms a tail call back into a regular call. The issue with doing this is that we don't have info about the return value of the original call. If anyone knows how to do it, please give me some pointers. I tried to fix this problem by adding implicit operands to the riscv_restore tail call that are all the possible return value registers: BuildMI(MBB, MI, DL, TII.get(RISCV::PseudoTAIL)) .addExternalSymbol(RestoreLibCall, RISCVII::MO_CALL) -.setMIFlag(MachineInstr::FrameDestroy); + .setMIFlag(MachineInstr::FrameDestroy) + .addReg(RISCV::X10, RegState::Implicit) + .addReg(RISCV::X11, RegState::Implicit) + .addReg(RISCV::F10_F, RegState::Implicit) + .addReg(RISCV::F11_F, RegState::Implicit) With this change, some perennial tests now pass. But there are still failures to be analyzed in SPEC. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D62686/new/ https://reviews.llvm.org/D62686 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits