The compiler encodes the dependence information of an ALU operation into the instruction.
The hardware scheduler does not check for inter ALU ops data hazards in order to select a warp instruction or to put a warp to sleep. The compiler tells the scheduling hardware whether a warp can be considered for issue, or when the active mask can be updated to say the warp is ready again.
GCN doesn't do this. A given wavefront cannot issue another instruction for itself until after the current instruction is done. For most SIMD ops, there is a 4-cycle wavefront where the SIMD scheduler physically cannot pick another instruction before the current one is finished.