[llvm-dev] How to implement lowerReturn for poring GlobalISel to RISCV?

Leslie Zhai via llvm-dev llvm-dev at lists.llvm.org
Wed Dec 20 21:03:54 PST 2017


Hi LLVM developers,

Thank Daniel Sanders, Aditya Nandakumar and Justin Bogner's Tutorial[1]: 
Head First into GlobalISel about how to port, and Aditya took BPF target 
as a simple instance:


bool BPFCallLowering::lowerReturn(MachineIRBuilder &MIRBuilder,
                                   const Value *Val, unsigned VReg) const {
   assert(!Val == !VReg && "Return value without a vreg");
   MIRBuilder.buildInstr(BPF::RET);
   return true;
}


But how to implement it for RISCV target? 
https://github.com/xiangzhai/llvm/commit/c49146edbbf655e97727e22e4a87a020fb8da6e5

Because there are separate trap return instructions[2] per privilege 
level: MRET, SRET, and URET. MRET is always provided, while SRET must be 
provided if supervisor mode is supported. URET is only provided if 
user-mode traps are supported. and David added RISCV privileged 
instructionsit[3], then merged into upstream, it might be more complex 
than ARM[4] please give me some hint, thanks a lot!

[1] http://llvm.org/devmtg/2017-10/#tutorial2

[2] 
https://github.com/riscv/riscv-isa-manual/blob/master/src/machine.tex#L539

[3] https://reviews.llvm.org/D40383

[4] 
https://github.com/llvm-mirror/llvm/blob/master/lib/Target/ARM/ARMCallLowering.cpp#L280

-- 
Regards,
Leslie Zhai - https://reviews.llvm.org/p/xiangzhai/





More information about the llvm-dev mailing list