Как раз то, что не выполняется dir>1 — это не удивительно — обычная оптимизация кода. Компилятор увидел, что присваивается либо 0, либо 1 и ни одно из этих значений не больше 1, а значит проверку можно просто выкинуть. Можно пометить переменную как volatile для отмены оптимизаций.