[vm,compiler] Do not treat unrelated DynamicInvocation flag as InstanceInvocation.FlagInvariant

StreamingFlowGraphBuilder::BuildMethodInvocation handles both
DynamicInvocation and InstanceInvocation nodes.

BuildMethodInvocation has been reading flags field and testing
kInstanceInvocationFlagInvariant bit without checking if node is
InstanceInvocation, so it has been handling an unrelated
DynamicInvocation flag (FlagImplicitCall) as FlagInvariant.

TEST=ci

Change-Id: I1e2ecbb0023bfdb393fc24c29cc8263e05198277
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407081
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 4f5bf18..1a227cf 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -2817,7 +2817,10 @@
 
   // read flags.
   const uint8_t flags = ReadFlags();
-  const bool is_invariant = (flags & kInstanceInvocationFlagInvariant) != 0;
+  bool is_invariant = false;
+  if (!is_dynamic) {
+    is_invariant = (flags & kInstanceInvocationFlagInvariant) != 0;
+  }
 
   const TokenPosition position = ReadPosition();  // read position.
   if (p != nullptr) *p = position;