Jiri Vesely spoiled Jurgen Melzer's 33rd birthday as he booked his place in a first ATP Tour semi-final.