What it wants to do is say that even if a local isn't used as a simple primitive but is predicted to be a simple primitive, then it should be unboxed. But what the logic currently does is asks for a local to be unboxed even if it's not predicted to have a type that is a candidate for unboxing; i.e. it accomplishes nothing. More likely it should walk all locals up-front and if they have a "simple primitive" prediction and alwaysUnboxSimplePrimitives() is true, then mark them as being profitable.