There was nothing wrong with perspective projection matrix. There was small issue in clipping algorithm. z-near should be zero because I was using vulkan's canonical view volume.
An other issue was that P2.x > P2.w & P2.x < -P2.w
wasn't impossible because viewing frustum is inverted when z < 0. So I just needed to clip from near plane first and the from other planes.