A compiler system for optimizing a program for multi-processor system execution, comprising: an interface component configured to load from a storage component program code of a program to be executed by one or more processors (P1 to Pn) of a multi-processor system, and further configured to provide one or more optimized program codes (111-1 to 111-n)to the storage component wherein each optimized program code is configured for execution by one or more processors (P1 to Pn); a static analysis component configured to generate from the program code a control flow graph (300, 400, 500) representing all paths that can be traversed through the execution of the respective program, and configured to determine data dependencies (321, 421, 422, 521, 522, 523, 524) within the program code, and configured to determine all basic blocks of the control flow graph providing potential insertion positions along paths where communication statements can be inserted to enable data flow between different processors at runtime; an evaluation function component configured to evaluate each potential insertion position with regards to its impact on program execution on the multi-processor system at runtime by using a predefined execution evaluation function using weighting metrics for the evaluation of the basic blocks wherein each weight represents a runtime execution probability for the respective basic block; and a code modification component configured to obtain the one or more optimized program codes (111-1 to 111-n) by inserting coupled send and receive communication statements, in each path of the control flow graph where communication statements can be inserted to enable data flow between different processors at runtime, at one or more insertion positions wherein each insertion position has an evaluation value which indicates optimal runtime execution for the program when executed on the multi-processor system. an interface component configured to load from a storage component program code of a program to be executed by one or more processors (P1 to Pn) of a multi-processor system, and further configured to provide one or more optimized program codes (111-1 to 111-n)to the storage component wherein each optimized program code is configured for execution by one or more processors (P1 to Pn); a static analysis component configured to generate from the program code a control flow graph (300, 400, 500) representing all paths that can be traversed through the execution of the respective program, and configured to determine data dependencies (321, 421, 422, 521, 522, 523, 524) within the program code, and configured to determine all basic blocks of the control flow graph providing potential insertion positions along paths where communication statements can be inserted to enable data flow between different processors at runtime; an evaluation function component configured to evaluate each potential insertion position with regards to its impact on program execution on the multi-processor system at runtime by using a predefined execution evaluation function using weighting metrics for the evaluation of the basic blocks wherein each weight represents a runtime execution probability for the respective basic block; and a code modification component configured to obtain the one or more optimized program codes (111-1 to 111-n) by inserting coupled send and receive communication statements, in each path of the control flow graph where communication statements can be inserted to enable data flow between different processors at runtime, at one or more insertion positions wherein each insertion position has an evaluation value which indicates optimal runtime execution for the program when executed on the multi-processor system.