A new approach to the problem of register allocation in high-level synthesis is presented. The algorithm employs a bottom-up transformational approach-sets of mutually exclusive variables in conditional branches are transformed into an "equivalent" set of nonmutually exclusive variables. The transformational approach is extended to the case of data-flow graphs with loops. A new register allocation algorithm is then used to produce an allocation for the nonmutually exclusive variables. From such an allocation, a corresponding allocation for the original set of mutually exclusive variables is derived. Our approach is particularly effective when there is a large number of nested conditional branches and loops in a data-flow graph.