C-to-gates synthesis is attractive as a way of allowing software developers to implement their computations on FPGAs for co-processing as well as to hardware engineers to help improve productivity. However, a typical C-to-gates synthesis systems places many restrictions on the subset of C which can be effectively synthesized into hardware. In particular, it is almost impossible to write idiomatic C code using malloc/free and dynamic data structures and have it automatically synthesized into gates. We present the preliminary results of a project that uses recent advances in shape analysis to help us automatically transform some C programs that make use of dynamic memory to represent lists and trees into representations that have the dynamic memory accesses transformed into accesses into a statically allocated collection of heaps. We are only able to perform this transformation when we can statically determine a bound on the amount of dynamic memory used which we are able to do for an interesting collection of examples including a Huffman encoder, a priority encoder, and a network packet processor. The final result of our synthesis flow is a VHDL circuit description which can be further synthesized into an implementation of a circuit that executes on an FPGA.