[llvm-dev] RFC: Pass for lowering "non-linear" arithmetics of illegal types
Paweł Bylica via llvm-dev
llvm-dev at lists.llvm.org
Mon Oct 5 15:09:48 PDT 2015
This is my idea I had some time ago, when I realized that LLVM did not
support legalization of some arithmetic instructions like mul i256. I have
implemented very simple and limited version of that in my project. Is it
something LLVM users would appreciate?
1. The pass transforms IR and is meant to be run before CodeGen (after
2. The pass replaces instructions mul, udiv, urem, sdiv, srem that are
know to be not supported by target's type legalization with a call to a
function that implements given arithmetic operation.
3. The pass also injects these functions to the module with a weak
4. The pass requires a function generator (interface implementation) for
mul and udivrem algorithms for integer types of sizes being powers of 2
(i.e. i128, i256, ...). Replacements for other instructions are created
using these 2 algorithms.
5. A default implementation of the generator is provided.
6. A user is able to provide its own implementation of the generator
with algorithms better suitable for user's cases and/or for other than
default instructions (e.g. sdiv i256, urem i199).
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev