This (in both cases) is a trivially unsafe transformation though (if
applied without any range analysis), since you can have:

X = MaxFloat64
C1 = 2
C2 = 4

(X*C1)/C2 = (MaxFloat64 * 2) / 4 = Infinity / 4 = Infinity
X*(C1/C2) = MaxFloat64 * (2 / 4) = MaxFloat64 * 0.5 = whatever half of
MaxFloat64 is

On Wed, 13 Sept 2023, 10:57 'Marja Hölttä' via v8-dev, <
v8-dev@googlegroups.com> wrote:

> > > ```(X * C1) / C2 —> X / (C2 / C1)```
> > You probably meant "X * (C2 / C1)" instead of "X / (C2 / C1)".
>
> Nah they probably meant just that. (X * 2) / 10 is X / (10 / 2) aka X / 5,
> not X * (10 / 2) aka X * 5.
>
> It would be the same as X * (C1 / C2)  though, that's another possible
> simplification (if things don't overflow and so on).
>
>
>
> On Wed, Sep 13, 2023 at 9:43 AM 'dmerc...@google.com' via v8-dev <
> v8-dev@googlegroups.com> wrote:
>
>> Hi,
>>
>> In general, LLVM and ahead-of-time compilers have all the time in the
>> world to optimize a function, while Turbofan tries to save every
>> millisecond it can (it's not quite true: LLVM also tries to compile
>> somewhat quickly, but it's orders of magnitude slower that Turbofan). As a
>> result, Turbofan does fewer optimizations than LLVM, in particular when
>> they have non-linear cost. That being said, Turbofan is not set in stone,
>> and we are always happy to add new optimizations, provided that their cost
>> can be justified by the improvements in generated code.
>>
>> > ```(A&B)|(A&C) —> A&(B|C)```
>> Optimizations such as this one are fairly cheap and straight-forward to
>> implement. I'm guessing that the reason for their absence is that we didn't
>> think about them or didn't see a specific case where they would improve the
>> generated code. Feel free to submit patch to add them to
>> Turboshaft's MachineOptimizationReducer (
>> https://source.chromium.org/chromium/chromium/src/+/main:v8/src/compiler/turboshaft/machine-optimization-reducer.h
>> ).
>>
>> > ```(X * C1) / C2 —> X / (C2 / C1)```
>> You probably meant "X * (C2 / C1)" instead of "X / (C2 / C1)". Such
>> mistakes are a good argument against implementing such optimizations unless
>> we see a clear use-case: if they are wrong but almost never used, then they
>> might cause random crashes (or security issues) that would be very hard to
>> debug.
>> Additionally, this simplification could be invalid depending on
>> multiplication overflow, integer division and floating point
>> approximations, which once again could easily introduce subtle bugs.
>>
>> > ```A+B --> A|B``` provided that A and B have no overlapping bits set.
>> This one as well, I'm not sure we'd really want. First, it's probably
>> rare that we know for a fact that 2 values don't have overlapping bits. And
>> second, on most architectures that we support, an addition and a bitwise or
>> have the same latency and throughput.
>>
>> Best,
>> Darius
>>
>>
>> On Wednesday, September 13, 2023 at 6:51:18 AM UTC+2 doit_man wrote:
>>
>>> Hi v8 developers,
>>>
>>> I’m curious about the specific optimizations that TurboFan currently not
>>> support.
>>>
>>> Other ahead-of-time (AOT) compilers perform a wide range of
>>> optimizations, while TurboFan comparatively has fewer.
>>>
>>>
>>> For instance, the LLVM compiler employs optimization rules such as
>>> ```A+B --> A|B``` provided that A and B have no overlapping bits set.
>>>
>>> Similarly, ```(A&B)|(A&C) —> A&(B|C)``` and ```(X * C1) / C2 —> X / (C2
>>> / C1)``` are examples of optimizations present in LLVM but absent in
>>> TurboFan.
>>>
>>> I think these kinds of rules could enhance TurboFan’s optimization
>>> capabilities.
>>>
>>> I’m interested in understanding whether this absence is due to
>>> TurboFan’s current state of implementation, inherent limitations of a
>>> just-in-time (JIT) compiler, or if there are other factors at play.
>>>
>>>
>>> Thanks.
>>>
>> --
>> --
>> v8-dev mailing list
>> v8-dev@googlegroups.com
>> http://groups.google.com/group/v8-dev
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "v8-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to v8-dev+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/v8-dev/9fcd075d-14b8-41f5-a793-7ddee3f4e322n%40googlegroups.com
>> <https://groups.google.com/d/msgid/v8-dev/9fcd075d-14b8-41f5-a793-7ddee3f4e322n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> --
>
> Google Germany GmbH
>
> Erika-Mann-Straße 33
>
> 80636 München
>
>
> Geschäftsführer: Paul Manicle, Liana Sebastian.
>
> Registergericht und -nummer: Hamburg, HRB 86891
>
> Sitz der Gesellschaft: Hamburg
>
>
> Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten
> haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter,
> löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen,
> dass die E-Mail an die falsche Person gesendet wurde.
>
>
>
> This e-mail is confidential. If you received this communication by
> mistake, please don't forward it to anyone else, please erase all copies
> and attachments, and please let me know that it has gone to the wrong
> person.
>
> --
> --
> v8-dev mailing list
> v8-dev@googlegroups.com
> http://groups.google.com/group/v8-dev
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-dev+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-dev/CAED6dUCqPdxtE%2BGhbHfOvs5xeSauVZ5R9EXeutOOiZ%2BP4NdMqg%40mail.gmail.com
> <https://groups.google.com/d/msgid/v8-dev/CAED6dUCqPdxtE%2BGhbHfOvs5xeSauVZ5R9EXeutOOiZ%2BP4NdMqg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-dev/CAGRskv8rDgCvkE4w%3DaF3r4tW6ga9hKdsLsQvswhUzd1suJZFFA%40mail.gmail.com.

Reply via email to