Yes, you are right. The example shows how trace scheduling works (which is correct), but the intention is then to generate VLIW instructions from that which is not possible because of the dependency on x4 as you remarked (unless the VLIW execution engines would provide forwarding which is however against the philosophy to keep the processor as simple as possible).
Since there is also a declaration of a local variable x6, it seems that I forgot to rename one of the x4 to x6.