[llvm-dev] multiprecision add/sub
Bagel via llvm-dev
llvm-dev at lists.llvm.org
Thu Feb 16 09:15:22 PST 2017
I was suggesting #1. I don't care about clang.
Am I supposed to file a bug against every backend?
On 02/15/2017 09:44 PM, Chandler Carruth wrote:
> I feel like there are two things being conflated here:
>
> 1) Does LLVM need new *LLVM* intrinsics to model this. The add-with-overflow
> intrinsics seem likely fine for as-is, don't require memory, but we don't lower
> the code to use adc for some reason. That seems like an LLVM bug that should be
> fixed in the x86 backend. If optimizing the LLVM intrinsics is hard, then maybe
> we need better ones, but that's likely about the (somewhat ridiculous) dance we
> have to do to "sum" the overflow flags rather than anything to do with memory.
>
> 2) Does Clang need new *C* builtins to avoid needing the carry-in / carry-out
> being in memory? I don't have a strong opinion about this. But the example in
> the original email gets optimized to have no unnecessary memory accesses
> already: https://godbolt.org/g/GFij97
>
> #1 seems like the most interesting problem to solve. File a bug?
>
> On Wed, Feb 15, 2017 at 4:24 PM Brian Smith via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Stephen Canon via llvm-dev <llvm-dev at lists.llvm.org
> <mailto:llvm-dev at lists.llvm.org>> wrote:
> >
> > Why do you think this requires new intrinsics instead of teaching the
> optimizer what to do with the existing intrinsics?
>
> IMO, as a multiprecision math library maker, the "teaching the
> optimizer what to do with the existing intrinsics" approach is much
> better as long as it can be made to work. If one is careful, MSVC does
> optimize its intrinsics into ADC instructions in a reasonable way, so
> I think it is probably doable.
>
> (Below, all math is multiprecision.)
>
> There are actually a few different operations besides pure addition
> and subtraction, e.g. `a - (b >> 1)` instead of just `a - b`. Also
> consider that we sometimes want "a - b" to be side-channel free and
> other times we'd rather "a - b" to be as fast as possible and
> optimized for the case where carries are unlikely to propagate (far).
> That's already three different operations, just for subtraction.
>
> Cheers,
> Brian
> --
> https://briansmith.org/
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
More information about the llvm-dev
mailing list