Hi All,
I am currently attempting to insert a label immediately after a call to a certain function that returns a value.
For example:
callq function
mylabel:
movl %eax, %r14d
My first attempt was similar to the following file
http://www.llvm.org/doxygen/SelectionDAGBuilder_8cpp_source.html,
function: lowerInvokable.
Where I use a similar mechanism to Exception handling.
However, this seems to work when the return value is stored into a stack. Otherwise, I would get the following code
callq function
movl %eax, %r14d
mylabel:
Which is not what I desired.
My next attempt was to modify the function that lowers the function call inst.
I inserted a eh_label node in between the callseq_end node and CopyFromReg node
However, I am getting an error message of the following just before the Greedy Register Allocator pass.
Bad machine code: Using an undefined physical register
instruction: %75:gr32 = COPY
operand 1: killed %eax
I was wondering if this is because the information passed from callseq_end to eh_label to CopyFromReg did not propagate properly.
If so, I was wondering whether I need a custom SDNode for this or if I should add the label once the code representation becomes machine IR.
Previously I try to add the label once the code representation becomes machine IR.
However, I seem to have an issue in getting the Function object from the machine inst that represents the function call.
The reason why I need the Function object is so that I can query whether the function that is being called has a certain attribute or not.
Thank you.
Best regards,
Chrisma