Quantum computers have the potential to solve certain computational problems, for example, factoring composite numbers, more efficiently than modern computers. They are also indispensable in several emergent nanotechnology applications, such as secure optical communication, in which modern computer cannot natively operate on quantum data. Despite convincing laboratory demonstrations of quantum information processing, it remains difficult to scale because it relies on inherently noisy components. Adequate use of quantum error correction and fault tolerance theoretically should enable much better scaling, but the sheer complexity of the techniques involved limits what is achievable today. The feasibility of quantum computation will increasingly depend on software tools, especially compilers, that translate quantum algorithms into low-level, technology-specific instructions and circuits with added fault tolerance and sufficient parallelism. Our goal is to improve the reliability of quantum computation through the use of software tools and fault-tolerant circuitry.