Revert "[vm] Recognize int.trailingZeroBitCount/oneBitCount as graph-inlinable"
This reverts commit0bef837817. Reason for revert: simarm, xarm bot failures https://github.com/dart-lang/sdk/issues/63436 Original change's description: > [vm] Recognize int.trailingZeroBitCount/oneBitCount as graph-inlinable > > Stacks on top of the int.{trailingZeroBitCount,oneBitCount} API CL > (commit754239b077). Both getters route through OTHER_RECOGNIZED_LIST > when a hardware fast path is available; otherwise the newly added > Dart bodies inline at call sites via vm:prefer-inline. The C++ > natives are removed. > > Backend codegen > --------------- > ARM64: NEON CNT + UADDLV (popcount); RBIT + CLZ (ctz). > ARM: NEON CNT + VPADDL chain (popcount); RBIT + CLZ on the > register pair (ctz). > x64: popcntq when TargetCPUFeatures::popcnt_supported(); > LoadImmediate(64) + rep_bsfq for ctz (decodes as tzcnt > on BMI1+, preserves dest on zero otherwise). > RISC-V 64: cpop / ctz when RV_baseline includes Zbb. > > Per-arch availability is encapsulated in > UnaryInt64OpInstr::IsSupported(Token::Kind). > > Apple M-series ARM64, AOT (us/iter, lower is better): > cardinality.swar 371 > cardinality.accelerated 154 (2.4x) > forEachSetBit.swar 19031 > forEachSetBit.accelerated 4988 (3.8x) > select.swar 199 > select.accelerated 77 (2.6x) > complementCardinality.swar 399 > complementCardinality.accel 152 (2.6x) > > Work towards https://github.com/dart-lang/sdk/issues/6486 (popcount > and ctz intrinsification). > > Work towards https://github.com/dart-lang/sdk/issues/1053 (efficient > BitSet implementation). > > Fixes https://github.com/dart-lang/sdk/issues/52673 > Fixes https://github.com/dart-lang/sdk/issues/38346 > Issue https://github.com/dart-lang/sdk/issues/10212 > Issue https://github.com/dart-lang/sdk/issues/5798 > TEST=tests/corelib/int_bit_count_test > > Cq-Include-Trybots: luci.dart.try:vm-aot-linux-release-simarm_x64-try,vm-aot-linux-debug-simarm_x64-try,dart-sdk-linux-riscv64-try > Change-Id: I9c2c4225fd63d54e190398a0fb6649366317dd17 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/504221 > Commit-Queue: Slava Egorov <vegorov@google.com> > Reviewed-by: Slava Egorov <vegorov@google.com> > Reviewed-by: Martin Kustermann <kustermann@google.com> > Auto-Submit: Modestas Valauskas <valauskasmodestas@gmail.com> Cq-Include-Trybots: luci.dart.try:vm-aot-linux-release-simarm_x64-try,vm-aot-linux-debug-simarm_x64-try,dart-sdk-linux-riscv64-try No-Presubmit: true No-Tree-Checks: true No-Try: true Change-Id: I4eaca9e25a919ba494f2e7e9819f1ea7d5a13078 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/505941 Auto-Submit: Alexander Aprelev <aam@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Slava Egorov <vegorov@google.com> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
This commit is contained in:
committed by
dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
ca15e2cdd9
commit
8765d80177
@@ -163,24 +163,13 @@ abstract final class _IntegerImplementation implements int {
|
||||
@pragma("vm:external-name", "Integer_equalToInteger")
|
||||
external bool _equalToInteger(int other);
|
||||
|
||||
@pragma("vm:recognized", "other")
|
||||
@pragma("vm:prefer-inline")
|
||||
@pragma("vm:exact-result-type", "dart:core#_Smi")
|
||||
int get trailingZeroBitCount {
|
||||
final int v = this;
|
||||
return ((v - 1) & ~v).oneBitCount;
|
||||
}
|
||||
@pragma("vm:external-name", "Integer_trailingZeroBitCount")
|
||||
external int get trailingZeroBitCount;
|
||||
|
||||
@pragma("vm:recognized", "other")
|
||||
@pragma("vm:prefer-inline")
|
||||
@pragma("vm:exact-result-type", "dart:core#_Smi")
|
||||
int get oneBitCount {
|
||||
int v = this;
|
||||
v = v - ((v >>> 1) & 0x5555555555555555);
|
||||
v = (v & 0x3333333333333333) + ((v >>> 2) & 0x3333333333333333);
|
||||
v = (v + (v >>> 4)) & 0x0F0F0F0F0F0F0F0F;
|
||||
return ((v * 0x0101010101010101) >>> 56);
|
||||
}
|
||||
@pragma("vm:external-name", "Integer_oneBitCount")
|
||||
external int get oneBitCount;
|
||||
|
||||
int abs() {
|
||||
return this < 0 ? -this : this;
|
||||
|
||||
Reference in New Issue
Block a user