Die arithmetischen Operationen und ihre Abhängigkeiten voneinander stellen den Datenfluss eines Algorithmus dar. Datenabhängigkeiten entstehen dadurch, dass bestimmte Operationen zur Ausführung die Zwischenergebnisse vorangegangener Operationen benötigen. Aus den Datenabhängigkeiten ergibt sich somit eine Reihenfolge, in der die arithmetischen Operationen ausgeführt werden müssen.
Aus dem durch die Beschreibung in einer Hochsprache vorgegebenen Ablaufschema eines Algorithmus wird in der Algorithmensynthese zunächst ein so genannter Abhängigkeitsgraph extrahiert. In diesem Graphen sind alle Informationen über den Ablauf und die notwendigen arithmetischen Operationen enthalten. Der Graph enthält noch keine Informationen über den Zeitpunkt (Taktschritt), in dem eine Operation auszuführen ist. Es ist nur die extrahierte Reihenfolge der Operationen enthalten.
Während der Extraktion werden bereits Techniken zur Optimierung angewandt, um z. B. überflüssige Operationen im Algorithmus zu erkennen und zu entfernen. Hier kann auf bekannte Verfahren, die bei konventionellen Hochsprachenkompilern zur Anwendung kommen, zurückgegriffen werden. Ein typisches Beispiel für eine solche Optimierung ist das Zusammenführen von identischen Berechnungen und das Verändern der Reihenfolge von Anweisungen, um zum Beispiel ein Zwischenergebnis einer Berechnung mehrfach für folgende Berechnungen verwenden zu können. Dabei ist darauf zu achten, dass durch die Optimierungen das Ergebnis des Algorithmus nicht verändert wird.
Je nach Vorgabe des Entwicklers kann bereits zu diesem Zeitpunkt eine Anpassung der Algorithmusstruktur an die gewünschten Kriterien der resultierenden Schaltung vorgenommen werden. So kann zum Beispiel das Assoziativgesetz auf die arithmetischen Operationen angewendet werden, oder es können vorhandene Schleifen aufgelöst werden (loop unrolling).