Call proper function based on parameter's dynamic type

Even based on a dynamic type? So when do we get dynamic dispatch through witness table vs a devirtualized call?

For example, in this case: Operator overloading with generics - #4 by scanon

Can Scalar.gemm(m1, m2) be inlined?