[LLVMdev] arithmetical operands signedness
baldrick at free.fr
Mon Sep 5 08:48:05 PDT 2011
> my target handles operands of multiplying instructions differently based on
since the result of a multiply doesn't depend on the signedness, I find it
strange that your target differentiates between them. What I'm saying is
that if you have (say) two i32 numbers a and b and you do a signed multiply:
c = a *s b
and an unsigned multiply
d = a *u b
then c and d are the same number (exactly the same bits set).
> I wonder then how I would do instruction selection based on the operands signs?
> The mul instruction sets a nsw for signed,
No it doesn't. nsw doesn't mean signed, it means that if the multiplication
would overflow as a signed multiplication then the result is undefined which
is completely different.
but when i try unsigned ops, there is
> no wrap flag at all. I'm not sure this is enough information to work with, or?
No information is needed, see above.
More information about the llvm-dev