[llvm-dev] Instruction selection phase
Craig Topper via llvm-dev
llvm-dev at lists.llvm.org
Thu Mar 26 18:57:15 PDT 2020
This transform is done by visitSDIV in DAGCombiner.cpp. Its using a trick
to optimize division by constant. The basic idea is to replace it by a
multiply by constant and a shift right with a few extra instructions needed
to handle signedness correctly. Since division is usually a slow operation
turning it into multiplies, shifts, adds, etc. are usually a better option.
I believe you can disable this behavior by returning true in an override of
TargetLowering::isIntDivCheap in your target.
On Thu, Mar 26, 2020 at 6:26 PM Miguel Iñigo J. Mañalac via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hello LLVM-Dev,
> Attached are:
> · The DAG after being built
> · The DAG before the legalization phase
> The DAG illustrated performs a signed division for type i32. As can be
> seen, the SDIV node was converted to a series of other nodes (which
> includes a MULHS node). In the target lowering class of our target, the
> SDIV has an operation action of custom. Does anybody know where in between
> the SelectionDAGBuilder and the Legalization phases the SDIV node got
> converted? I need the SDIV node to stay as an SDIV node until legalization
> phase (where it will be lowered into a library call). How can this behavior
> be accomplished? Does the converted series of nodes still perform the
> expected operation?
> Thank you very much in advance for your help!
> Miguel Inigo J. Manalac (1852)
> ENGLISH: This e-mail is intended for the person(s) to which it is
> addressed. If you have received it by mistake, please notify the sender and
> delete the received email. In addition, our company shall not assume any
> responsibility even if it causes any inconvenience, such as loss of mail,
> inconsistencies, delays, etc., due to the inclusion of computer viruses.
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev