<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi all,<div class=""><br class=""></div><div class="">I am developing a LLVM backend for a custom architecture which will be used for demonstration purposes in an academic environment.</div><div class=""><br class=""></div><div class="">I have already achieved some major goals and the backend is already producing correct assembly code in most circumstances.</div><div class=""><br class=""></div><div class="">However, I have now an issue that I do not know how to solve. I want to implement an instruction that should be lowered as ‘custom' or as ‘libcall' depending on the operators. Particularly, I want that shift instructions (namely SRA, SHL and SRL) get lowered to ‘custom' code when the shift amount is a constant, but I want to call a function otherwise. So far, I have set the operation action to ‘custom’. In the LowerShifts function I determine whether the shift amount is a constant, and I generate custom code for that case. When the shift amount is not a constant, I return a target-specific ISD, which is lately processed as a Custom Inserter. </div><div class=""><br class=""></div><div class="">I want to replace the Custom Inserter by a call to a function (or libcall?), but I am lost at the way to implement that. I can think on several scenarios, but none of them seems to be easy or clear to me. Ideally, I would want to create the libcall directly form the the LowerShift custom code, but I do know if that is even possible. This leads to the following questions:</div><div class=""><br class=""></div><div class="">(1) Is there a way to convert the ‘custom’ legalisation to ‘libcall’, once I determine (In LowerShifts) that the shift amount was not a constant?</div><div class="">(2) Can I create function call node from my LowerShifts function?</div><div class="">(3) I have separate Shift instructions for constant and non constant shifts in MyTargetInstrInfo.td. Is there a way to get the shift instructions legalised as ‘custom’ or as ‘libcall’ depending on the case?</div><div class="">(4) In case I keep the Custom Inserter, can I emit code to call a function from that? If so, how?</div><div class="">(5) Any other suggestions to achieve the desired behaviour?</div><div class=""><br class=""></div><div class="">Any replies would be appreciated.</div><div class=""><br class=""></div><div class="">Thank you very much.</div><div class="">(Sorry for my English)</div><div class=""><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Joan Lluch<br class="">Puigsacalm, 7 <br class="">17458 - Fornells de la Selva<br class="">Girona<br class=""><br class="">Tel: 620 28 45 13</div></div></div>
</div>
<br class=""></div></body></html>