[vm/aot] Support optimization of bitwise not.
Improves performance of MD5 by 3X on ARM32.
Cq-Include-Trybots: luci.dart.try:vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-mac-release-simarm64-try, vm-kernel-precomp-win-release-x64-try
Change-Id: I235fece1d6adfb15ce8c3beed6ffb6ee3e753de7
Reviewed-on: https://dart-review.googlesource.com/c/88709
Commit-Queue: Samir Jindel <sjindel@google.com>
Auto-Submit: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index e919c17..1e6a8b3 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -550,14 +550,13 @@
return false;
}
- // Issue http://dartbug.com/35180 for adding support for Token::kBIT_NOT
- // here.
#ifndef TARGET_ARCH_DBC
- if (op_kind == Token::kNEGATE) {
- left_value = PrepareStaticOpInput(left_value, kMintCid, instr);
- replacement =
- new (Z) UnaryInt64OpInstr(Token::kNEGATE, left_value, DeoptId::kNone,
- Instruction::kNotSpeculative);
+ if (FlowGraphCompiler::SupportsUnboxedInt64()) {
+ if (op_kind == Token::kNEGATE || op_kind == Token::kBIT_NOT) {
+ left_value = PrepareStaticOpInput(left_value, kMintCid, instr);
+ replacement = new (Z) UnaryInt64OpInstr(
+ op_kind, left_value, DeoptId::kNone, Instruction::kNotSpeculative);
+ }
}
#endif
}