A Dag-Based Approach To Modeling Bottlenecks On Modern Microarchitectures