fdb0f07887
We were previously incorrectly changing: sub r0, 0, r1 cmp r2, r0 b.cond <addr> to: cmn r2, r1 b.cond <addr> for all conditions. This is incorrect for conditions involving the C (carry) and V (overflow) flags, and in particular in the case where r1 = INT_MIN. The optimization is still safe to perform for Equal and NotEqual since they do not depend on the C and V flags. BUG= Review-Url: https://codereview.chromium.org/2318043002 Cr-Commit-Position: refs/heads/master@{#39246}
19 lines
490 B
JavaScript
19 lines
490 B
JavaScript
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --allow-natives-syntax --turbo
|
|
|
|
function CompareNegate(a,b) {
|
|
a = a|0;
|
|
b = b|0;
|
|
var sub = 0 - b;
|
|
return a < (sub|0);
|
|
}
|
|
|
|
var x = CompareNegate(1,0x80000000);
|
|
%OptimizeFunctionOnNextCall(CompareNegate);
|
|
CompareNegate(1,0x80000000);
|
|
assertOptimized(CompareNegate);
|
|
assertEquals(x, CompareNegate(1,0x80000000));
|