  One form of type checking used in gradually typed language is transient type
checking: whenever an object 'flows' through code with a type annotation, the
object is dynamically checked to ensure it has the methods required by the
annotation. Just-in-time compilation and optimisation in virtual machines can
eliminate much of the overhead of run-time transient type checks. Unfortunately
this optimisation is not uniform: some type checks will significantly decrease,
or even increase, a program's performance.
  In this paper, we refine the so called "Takikawa" protocol, and use it to
identify which type annotations have the greatest effects on performance. In
particular, we show how graphing the performance of such benchmarks when
varying which type annotations are present in the source code can be used to
discern potential patterns in performance. We demonstrate our approach by
testing the Moth virtual machine: for many of the benchmarks where Moth's
transient type checking impacts performance, we have been able to identify one
or two specific type annotations that are the likely cause. Without these type
annotations, the performance impact of transient type checking becomes
negligible.
  Using our technique programmers can optimise programs by removing expensive
type checks, and VM engineers can identify new opportunities for compiler
optimisation.
