Automatic parallelization of large and complex program regions requires the compiler to reason about complex semantic information. This paper describes a hierarchical reasoning system implemented within the Panorama parallelizing compiler. This reasoning system intelligently and efficiently extracts useful semantic information in the form of first-order predicates from program statements. It uses a hierarchical structure to represent the predicates, which enables fast determination of their truth in common cases. A hierarchical value graph facilitates rule-based, demand-driven retrieval of useful predicates.