Erlang has also had a gradual type system (and a fairly interesting one at that[0]) for a long time: http://learnyousomeerlang.com/dialyzer
AFAIK there's no optimisation based on that, just typechecking.
[0] it's interesting in that where most typecheckers restrict language semantics as they require a form of correctness proof, dialyzer is optimistic and only errors out if types are clearly inconsistent
Perl5 also has optional types since 15 years, just the implementations (checkers and optimizers) were broken in the last big refactoring around 5.10, and there's no interest in enabling it again. The optimizing perl5 compiler B::CC honors optional types (besides doing type inference for core types, IV, NV and PV) and gets a typical 2-5x speedup. http://act.yapc.eu/ye2013/talk/4637
BTW: This is a very old article, and was posted here some months ago already.