RESOLVED FIXED Bug 183996
[ESNext][BigInt] Implement support for "/" operation
https://bugs.webkit.org/show_bug.cgi?id=183996
Summary [ESNext][BigInt] Implement support for "/" operation
Caio Lima
Reported 2018-03-25 11:40:22 PDT
...
Attachments
Patch (34.56 KB, patch)
2018-03-25 12:36 PDT, Caio Lima
no flags
Patch (34.62 KB, patch)
2018-04-09 19:42 PDT, Caio Lima
no flags
Patch (37.62 KB, patch)
2018-04-17 19:46 PDT, Caio Lima
no flags
Patch (33.68 KB, patch)
2018-04-27 09:15 PDT, Caio Lima
no flags
Patch (42.82 KB, patch)
2018-05-03 08:59 PDT, Caio Lima
no flags
Patch (41.87 KB, patch)
2018-05-03 19:48 PDT, Caio Lima
no flags
Patch (41.87 KB, patch)
2018-05-04 16:26 PDT, Caio Lima
no flags
Patch (41.86 KB, patch)
2018-05-10 20:21 PDT, Caio Lima
no flags
Patch (34.85 KB, patch)
2018-05-13 10:31 PDT, Caio Lima
ysuzuki: review+
Patch (34.34 KB, patch)
2018-05-15 08:51 PDT, Caio Lima
no flags
Patch for landing (37.91 KB, patch)
2018-05-15 19:47 PDT, Caio Lima
no flags
Archive of layout-test-results from webkit-cq-02 for mac-sierra (1.22 MB, application/zip)
2018-05-15 23:59 PDT, WebKit Commit Bot
no flags
Patch for landing (37.91 KB, patch)
2018-05-16 19:05 PDT, Caio Lima
no flags
Caio Lima
Comment 1 2018-03-25 12:36:18 PDT
EWS Watchlist
Comment 2 2018-03-25 12:39:31 PDT
Attachment 336498 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:738: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:740: Multi line control clauses should use braces. [whitespace/braces] [4] Total errors found: 2 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 3 2018-04-08 04:58:15 PDT
Ping Review
Caio Lima
Comment 4 2018-04-09 19:42:13 PDT
EWS Watchlist
Comment 5 2018-04-09 19:44:49 PDT
Attachment 337576 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:738: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:740: Multi line control clauses should use braces. [whitespace/braces] [4] Total errors found: 2 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
EWS Watchlist
Comment 6 2018-04-09 21:02:44 PDT
Comment on attachment 337576 [details] Patch Attachment 337576 [details] did not pass jsc-ews (mac): Output: http://webkit-queues.webkit.org/results/7262699 New failing tests: stress/ftl-put-by-id-setter-exception-interesting-live-state.js.dfg-eager-no-cjit-validate
Caio Lima
Comment 7 2018-04-10 15:25:07 PDT
Ping Review. The failures aren't related with my patch.
Caio Lima
Comment 8 2018-04-17 19:46:26 PDT
EWS Watchlist
Comment 9 2018-04-17 19:48:37 PDT
Attachment 338187 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:738: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:740: Multi line control clauses should use braces. [whitespace/braces] [4] Total errors found: 2 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 10 2018-04-19 17:32:58 PDT
Ping Review
Caio Lima
Comment 11 2018-04-27 09:15:51 PDT
EWS Watchlist
Comment 12 2018-04-27 09:17:54 PDT
Attachment 338995 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:800: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] Total errors found: 1 in 14 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 13 2018-04-27 15:24:12 PDT
Could anyone review this?
Robin Morisset
Comment 14 2018-04-30 09:43:56 PDT
Comment on attachment 338995 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=338995&action=review I am not an official Webkit reviewer, but I have tried to read through your patch and have a few comments and questions. > Source/JavaScriptCore/runtime/JSBigInt.cpp:298 > + quotient->setSign(x->sign() != y->sign()); Is there a reason not to use resultSign here? > Source/JavaScriptCore/runtime/JSBigInt.cpp:302 > +JSBigInt* JSBigInt::copy(ExecState& state, JSBigInt* x) This function seems very similar to the end of JSBigInt::rightTrim, except for using memcpy instead of std::copy. Is there a reason for using one instead of the other? > Source/JavaScriptCore/runtime/JSBigInt.cpp:304 > + ASSERT(!x->isZero()); Is there a good reason not to support zero? This function seems general enough that it may be used in the future with zero, and it does not seem like it would be hard to support. > Source/JavaScriptCore/runtime/JSBigInt.cpp:598 > + return diff; I would like for an ASSERT around here that x and y have non-zero digits in their high-order digits. So that this function would for example not return an anomalous result if it were called in {divide} above on {result} before {rightTrim} were called. > Source/JavaScriptCore/runtime/JSBigInt.cpp:741 > + // Caller will right-trim. What is the reasoning behind this choice? I would tend to minimize the amount of code in which BigInts are non-trimmed. > Source/JavaScriptCore/runtime/JSBigInt.cpp:761 > +JSBigInt::Digit JSBigInt::inplaceAdd(JSBigInt* summand, unsigned startIndex) I would like something (either a comment, or even better a change in the function name) that indicates that this is an absoluteInplaceAdd: it completely ignores the bit sign. > Source/JavaScriptCore/runtime/JSBigInt.cpp:779 > +JSBigInt::Digit JSBigInt::inplaceSub(JSBigInt* subtrahend, unsigned startIndex) Ditto. > Source/JavaScriptCore/runtime/JSBigInt.cpp:797 > + ASSERT(shift >= 0); shift being unsigned, I don't see how that assertion can be false. > Source/JavaScriptCore/runtime/JSBigInt.cpp:800 > + ASSERT(digit(0) & (((static_cast<Digit>(1) << shift) - 1) == 0)); This assertion is a bit hard to read with the binary '&' and non-trivial arithmetic. Is it equivalent to the following two assertions: ASSERT(digit(0) & 1); ASSERT((static_cast<Digit>(1) << shift) == 1); ? I don't really understand why it is what it is. > Source/JavaScriptCore/runtime/JSBigInt.cpp:816 > +// {shift} must be less than digitBits, {x} must be non-zero. I think I would add an ASSERT(!x->isZero()); and remove this line of comment. > Source/JavaScriptCore/runtime/JSBigInt.cpp:817 > +JSBigInt* JSBigInt::specialLeftShift(ExecState& state, JSBigInt* x, unsigned shift, SpecialLeftShiftMode mode) This function does not copy the bit sign, so same point as for inplaceAdd and inplaceSub above. > JSTests/bigIntTests.yaml:127 > +- path: stress/big-int-div-to-primitive-precedence.js This file, big-int-div-to-primitive and big-int-div-wrapped value seem to test the same thing to me. Could they be combined in a single file, with the duplicates removed?
Caio Lima
Comment 15 2018-05-03 08:59:30 PDT
EWS Watchlist
Comment 16 2018-05-03 09:01:02 PDT
Attachment 339410 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:737: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] Total errors found: 1 in 16 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 17 2018-05-03 19:36:18 PDT
Thank you very much for the review! (In reply to Robin Morisset from comment #14) > Comment on attachment 338995 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=338995&action=review > > I am not an official Webkit reviewer, but I have tried to read through your > patch and have a few comments and questions. > > > Source/JavaScriptCore/runtime/JSBigInt.cpp:298 > > + quotient->setSign(x->sign() != y->sign()); > > Is there a reason not to use resultSign here? No. Changed it. > > Source/JavaScriptCore/runtime/JSBigInt.cpp:302 > > +JSBigInt* JSBigInt::copy(ExecState& state, JSBigInt* x) > > This function seems very similar to the end of JSBigInt::rightTrim, except > for using memcpy instead of std::copy. > Is there a reason for using one instead of the other? I will use std::copy to keep consistency. > > Source/JavaScriptCore/runtime/JSBigInt.cpp:304 > > + ASSERT(!x->isZero()); > > Is there a good reason not to support zero? This function seems general > enough that it may be used in the future with zero, and it does not seem > like it would be hard to support. I don't see use cases where we should copy zero BigInt now, since we can simply use JSBigInt::createZero instead. If it starts to be painful considering zero while copying, we can support that in future patches. > > Source/JavaScriptCore/runtime/JSBigInt.cpp:598 > > + return diff; > > I would like for an ASSERT around here that x and y have non-zero digits in > their high-order digits. So that this function would for example not return > an anomalous result if it were called in {divide} above on {result} before > {rightTrim} were called. It is a good idea. > > Source/JavaScriptCore/runtime/JSBigInt.cpp:741 > > + // Caller will right-trim. > > What is the reasoning behind this choice? I would tend to minimize the > amount of code in which BigInts are non-trimmed. It is the decision of original authors of this implementation. I'm not 100% sure, but I think this decision was taken because of absoluteDivSmall doesn't trim the quotient as well. > > Source/JavaScriptCore/runtime/JSBigInt.cpp:761 > > +JSBigInt::Digit JSBigInt::inplaceAdd(JSBigInt* summand, unsigned startIndex) > > I would like something (either a comment, or even better a change in the > function name) that indicates that this is an absoluteInplaceAdd: it > completely ignores the bit sign. Done. > > Source/JavaScriptCore/runtime/JSBigInt.cpp:800 > > + ASSERT(digit(0) & (((static_cast<Digit>(1) << shift) - 1) == 0)); > > This assertion is a bit hard to read with the binary '&' and non-trivial > arithmetic. Is it equivalent to the following two assertions: > ASSERT(digit(0) & 1); > ASSERT((static_cast<Digit>(1) << shift) == 1); > ? I don't really understand why it is what it is. This assert is verifying if all "shift bits" of digit(0) are 0. If "shift == 3" we would have "(digit(0) & 111) == 0". If we turn this into your 2 assertions, the ASSERT((static_cast<Digit>(1) << shift) == 1) is only true when "shift == 0". > > JSTests/bigIntTests.yaml:127 > > +- path: stress/big-int-div-to-primitive-precedence.js > > This file, big-int-div-to-primitive and big-int-div-wrapped value seem to > test the same thing to me. Could they be combined in a single file, with the > duplicates removed? ok.
Caio Lima
Comment 18 2018-05-03 19:48:49 PDT
EWS Watchlist
Comment 19 2018-05-03 19:51:25 PDT
Attachment 339510 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:740: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Robin Morisset
Comment 20 2018-05-04 04:56:41 PDT
Thank you for having addressed my comments. There is only one point where I disagree: > > > Source/JavaScriptCore/runtime/JSBigInt.cpp:800 > > > + ASSERT(digit(0) & (((static_cast<Digit>(1) << shift) - 1) == 0)); > > > > This assertion is a bit hard to read with the binary '&' and non-trivial > > arithmetic. Is it equivalent to the following two assertions: > > ASSERT(digit(0) & 1); > > ASSERT((static_cast<Digit>(1) << shift) == 1); > > ? I don't really understand why it is what it is. > > This assert is verifying if all "shift bits" of digit(0) are 0. If "shift == > 3" we would have "(digit(0) & 111) == 0". If we turn this into your 2 > assertions, the ASSERT((static_cast<Digit>(1) << shift) == 1) is only true > when "shift == 0". It seems like the parenthesis are wrong then. In the case where shift==3, the current assertion seems to be ASSERT(digit(0) & (111 == 0)), not ASSERT((digit(0) & 111) == 0)
Caio Lima
Comment 21 2018-05-04 16:11:00 PDT
(In reply to Robin Morisset from comment #20) > Thank you for having addressed my comments. There is only one point where I > disagree: > > > > > Source/JavaScriptCore/runtime/JSBigInt.cpp:800 > > > > + ASSERT(digit(0) & (((static_cast<Digit>(1) << shift) - 1) == 0)); > > > > > > This assertion is a bit hard to read with the binary '&' and non-trivial > > > arithmetic. Is it equivalent to the following two assertions: > > > ASSERT(digit(0) & 1); > > > ASSERT((static_cast<Digit>(1) << shift) == 1); > > > ? I don't really understand why it is what it is. > > > > This assert is verifying if all "shift bits" of digit(0) are 0. If "shift == > > 3" we would have "(digit(0) & 111) == 0". If we turn this into your 2 > > assertions, the ASSERT((static_cast<Digit>(1) << shift) == 1) is only true > > when "shift == 0". > > It seems like the parenthesis are wrong then. In the case where shift==3, > the current assertion seems to be ASSERT(digit(0) & (111 == 0)), not > ASSERT((digit(0) & 111) == 0) Oops. You are Right. I'm going to fix it.
Caio Lima
Comment 22 2018-05-04 16:26:38 PDT
EWS Watchlist
Comment 23 2018-05-04 16:29:24 PDT
Attachment 339608 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:740: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 24 2018-05-08 04:51:50 PDT
Ping review.
Caio Lima
Comment 25 2018-05-10 20:21:02 PDT
EWS Watchlist
Comment 26 2018-05-10 20:22:47 PDT
Attachment 340161 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/runtime/JSBigInt.cpp:726: Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. [readability/comparison_to_zero] [5] Total errors found: 1 in 15 files If any of these errors are false positives, please file a bug against check-webkit-style.
Yusuke Suzuki
Comment 27 2018-05-13 07:24:50 PDT
Comment on attachment 340161 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=340161&action=review > Source/JavaScriptCore/runtime/JSBigInt.cpp:516 > +int JSBigInt::absoluteCompare(JSBigInt* x, JSBigInt* y) Let's make this function `inline`. > Source/JavaScriptCore/runtime/JSBigInt.cpp:522 > + if (x->length()) > + ASSERT(x->digit(0)); > + > + if (y->length()) > + ASSERT(y->digit(0)); Make them `ASSERT(!x->length() || x->digit(0))` and `ASSERT(!y->length() || y->digit(0))`. > Source/JavaScriptCore/runtime/JSBigInt.cpp:-482 > - int length = x->length(); What "small" means in absoluteDivSmall? DigitDivisor would be better. So, absoluteDivWithDigitDivisor. > Source/JavaScriptCore/runtime/JSBigInt.cpp:579 > +void JSBigInt::absoluteDivLarge(ExecState& state, JSBigInt* dividend, JSBigInt* divisor, JSBigInt** quotient, JSBigInt** remainder) Ditto, please name it more descriptive one. I'm not sure what "absolute" means here. And what "large" means? `absoluteDivWithBigIntDivisor`?. > Source/JavaScriptCore/runtime/JSBigInt.cpp:680 > +bool JSBigInt::productGreaterThan(Digit factor1, Digit factor2, Digit high, Digit low) Make this function `inline` since it is very small helper function. > Source/JavaScriptCore/runtime/JSBigInt.cpp:742 > +JSBigInt* JSBigInt::absoluteSpecialLeftShift(ExecState& state, JSBigInt* x, unsigned shift, SpecialLeftShiftMode mode) What "Special" means? Please name it more descriptive one. > Source/JavaScriptCore/runtime/JSBigInt.cpp:1093 > +JSBigInt::Digit JSBigInt::digit(unsigned n) Keep `inline`. > Source/JavaScriptCore/runtime/JSBigInt.cpp:1099 > +void JSBigInt::setDigit(unsigned n, Digit value) Keep `inline`.
Yusuke Suzuki
Comment 28 2018-05-13 07:27:18 PDT
Comment on attachment 340161 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=340161&action=review >> Source/JavaScriptCore/runtime/JSBigInt.cpp:579 >> +void JSBigInt::absoluteDivLarge(ExecState& state, JSBigInt* dividend, JSBigInt* divisor, JSBigInt** quotient, JSBigInt** remainder) > > Ditto, please name it more descriptive one. I'm not sure what "absolute" means here. > And what "large" means? `absoluteDivWithBigIntDivisor`?. Ah, I understand what "absolute" means. I think "absoluteDivWithBigIntDivisor" is better.
Caio Lima
Comment 29 2018-05-13 10:18:25 PDT
Comment on attachment 340161 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=340161&action=review Thank you for the review! >> Source/JavaScriptCore/runtime/JSBigInt.cpp:-482 >> - int length = x->length(); > > What "small" means in absoluteDivSmall? DigitDivisor would be better. So, absoluteDivWithDigitDivisor. Done. >>> Source/JavaScriptCore/runtime/JSBigInt.cpp:579 >>> +void JSBigInt::absoluteDivLarge(ExecState& state, JSBigInt* dividend, JSBigInt* divisor, JSBigInt** quotient, JSBigInt** remainder) >> >> Ditto, please name it more descriptive one. I'm not sure what "absolute" means here. >> And what "large" means? `absoluteDivWithBigIntDivisor`?. > > Ah, I understand what "absolute" means. I think "absoluteDivWithBigIntDivisor" is better. Large means BigInt divisor. Absolute means that we are not taking the sign in consideration, so we consider everything as positive.
Caio Lima
Comment 30 2018-05-13 10:31:23 PDT
Yusuke Suzuki
Comment 31 2018-05-14 23:15:51 PDT
Comment on attachment 340267 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=340267&action=review r=me > Source/JavaScriptCore/runtime/JSBigInt.cpp:295 > + return resultSign == x->sign() ? x : unaryMinus(state, x); Pass VM& instead. > Source/JavaScriptCore/runtime/JSBigInt.cpp:298 > + absoluteDivWithDigitDivisor(state, x, divisor, &quotient, remainder); Pass VM& instead. > Source/JavaScriptCore/runtime/JSBigInt.cpp:300 > + absoluteDivWithBigIntDivisor(state, x, y, &quotient, nullptr); Pass VM& instead. > Source/JavaScriptCore/runtime/JSBigInt.cpp:306 > +JSBigInt* JSBigInt::copy(ExecState& state, JSBigInt* x) Use VM& parameter instead of ExecState&. > Source/JavaScriptCore/runtime/JSBigInt.cpp:317 > +JSBigInt* JSBigInt::unaryMinus(ExecState& state, JSBigInt* x) Use VM& parameter instead of ExecState&. > Source/JavaScriptCore/runtime/JSBigInt.cpp:579 > +inline int JSBigInt::absoluteCompare(JSBigInt* x, JSBigInt* y) Use ComparisonResult for the resulted value. > Source/JavaScriptCore/runtime/JSBigInt.cpp:605 > +void JSBigInt::absoluteDivWithDigitDivisor(ExecState& state, JSBigInt* x, Digit divisor, JSBigInt** quotient, Digit& remainder) Use VM& parameter instead of ExecState&. > Source/JavaScriptCore/runtime/JSBigInt.cpp:639 > +void JSBigInt::absoluteDivWithBigIntDivisor(ExecState& state, JSBigInt* dividend, JSBigInt* divisor, JSBigInt** quotient, JSBigInt** remainder) Use VM& parameter instead of `ExecState&`. > Source/JavaScriptCore/runtime/JSBigInt.cpp:670 > + divisor = absoluteLeftShiftAlwaysCopy(state, divisor, shift, SameSizeResult); Pass VM& instead of ExecState&. > Source/JavaScriptCore/runtime/JSBigInt.cpp:674 > + JSBigInt* u = absoluteLeftShiftAlwaysCopy(state, dividend, shift, AlwaysAddOneDigit); Pass VM& instead of ExecState&. > Source/JavaScriptCore/runtime/JSBigInt.cpp:802 > +JSBigInt* JSBigInt::absoluteLeftShiftAlwaysCopy(ExecState& state, JSBigInt* x, unsigned shift, LeftShiftMode mode) Use `VM&` parameter instead since this function does not require `ExecState*`. > Source/JavaScriptCore/runtime/JSBigInt.h:97 > + static JSBigInt* divide(ExecState&, JSBigInt* x, JSBigInt* y); Should take ExecState* to align to the other functions (multiply). In JSC, using ExecState* is more common. > Source/JavaScriptCore/runtime/JSBigInt.h:102 > enum ComparisonResult { Use enum class. > Source/JavaScriptCore/runtime/JSBigInt.h:133 > + enum LeftShiftMode { > + SameSizeResult, > + AlwaysAddOneDigit > + }; Use enum class.
Caio Lima
Comment 32 2018-05-15 08:51:30 PDT
Created attachment 340413 [details] Patch Let's see the bots.
Caio Lima
Comment 33 2018-05-15 19:47:29 PDT
Created attachment 340463 [details] Patch for landing
Caio Lima
Comment 34 2018-05-15 19:49:28 PDT
Thank you for the review!!
WebKit Commit Bot
Comment 35 2018-05-15 23:59:32 PDT
Comment on attachment 340463 [details] Patch for landing Rejecting attachment 340463 [details] from commit-queue. Number of test failures exceeded the failure limit. Full output: http://webkit-queues.webkit.org/results/7695691
WebKit Commit Bot
Comment 36 2018-05-15 23:59:33 PDT
Created attachment 340471 [details] Archive of layout-test-results from webkit-cq-02 for mac-sierra The attached test failures were seen while running run-webkit-tests on the commit-queue. Bot: webkit-cq-02 Port: mac-sierra Platform: Mac OS X 10.12.6
WebKit Commit Bot
Comment 37 2018-05-16 07:26:36 PDT
Comment on attachment 340463 [details] Patch for landing Clearing flags on attachment: 340463 Committed r231845: <https://trac.webkit.org/changeset/231845>
WebKit Commit Bot
Comment 38 2018-05-16 07:26:38 PDT
All reviewed patches have been landed. Closing bug.
Radar WebKit Bug Importer
Comment 39 2018-05-16 07:27:23 PDT
WebKit Commit Bot
Comment 40 2018-05-16 16:35:56 PDT
Re-opened since this is blocked by bug 185702
Caio Lima
Comment 41 2018-05-16 19:05:16 PDT
Created attachment 340550 [details] Patch for landing
WebKit Commit Bot
Comment 42 2018-05-16 21:27:34 PDT
Comment on attachment 340550 [details] Patch for landing Clearing flags on attachment: 340550 Committed r231886: <https://trac.webkit.org/changeset/231886>
WebKit Commit Bot
Comment 43 2018-05-16 21:27:36 PDT
All reviewed patches have been landed. Closing bug.
Yusuke Suzuki
Comment 44 2018-05-31 18:52:13 PDT
Remember ArithDiv can return number only. We need to add ValueDiv too in DFG.
Note You need to log in before you can comment on or make changes to this bug.