8. A memory for use in a computer system, said memory comprising: means for generating, using a first compiler front end, a first flow graph for a first source program, said first source program being compiled using said first compiler front end which performs syntactic and semantic processing of a first programming language, said first flow graph comprising tuples, each tuple representing a single expression in said first source program, said first flow graph being a representation of said first source program in an intermediate language; means for determining using said compiler front end an effect indicator for each tuple which can have an effect on another tuple and which is included in said first flow graph, said effect indicator representing an effect said each tuple has on said another tuple and being associated with said each tuple; means for determining, by said compiler front end a dependency indicator for each tuple which can have a dependency on another tuple and which is included in said first flow graph, said dependency indicator representing a dependence of said each tuple has on said another tuple and being associated with said each tuple; means for optimizing, coupled to said first and second determining means, said first flow graph by a compiler back end calling one or more predetermine routines in said compiler front end, said predetemined routines using effect and dependency information from said effect determining means and said dependency determining means to provide return information to said compiler back end wherein said compiler back end uses said return information to determine whether an optimization is valid for one of said tuples comprising said flow graph.
8. A memory for use in a computer system, said memory comprising: means for generating, using a first compiler front end, a first flow graph for a first source program, said first source program being compiled using said first compiler front end which performs syntactic and semantic processing of a first programming language, said first flow graph comprising tuples, each tuple representing a single expression in said first source program, said first flow graph being a representation of said first source program in an intermediate language; means for determining using said compiler front end an effect indicator for each tuple which can have an effect on another tuple and which is included in said first flow graph, said effect indicator representing an effect said each tuple has on said another tuple and being associated with said each tuple; means for determining, by said compiler front end a dependency indicator for each tuple which can have a dependency on another tuple and which is included in said first flow graph, said dependency indicator representing a dependence of said each tuple has on said another tuple and being associated with said each tuple; means for optimizing, coupled to said first and second determining means, said first flow graph by a compiler back end calling one or more predetermine routines in said compiler front end, said predetemined routines using effect and dependency information from said effect determining means and said dependency determining means to provide return information to said compiler back end wherein said compiler back end uses said return information to determine whether an optimization is valid for one of said tuples comprising said flow graph. 9. The memory of claim 8 wherein said compiler back end is a common compiler back end used with a plurality of compiler front ends, the memory further comprising: means for generating, using a second compiler front end, a second flow graph for a second source program, said second source program being compiled using said second compiler front end which performs syntactic and semantic processing of a second programming language, said second flow graph comprising tuples and being a representation of said second source program in an intermediate language, each tuple in said second flow graph representing a single expression in said second source program; means for determining, using said second compiler front end, an effect indicator for each tuple which can have an effect on another tuple and which is included in said second flow graph, said effect indicator representing an effect said each tuple has on said another tuple and being associated with said each tuple; means for determining, using said second compiler front end, a dependency indicator for each tuple which can have a dependency on another tuple and which is included in said second flow graph, said dependency indicator representing a dependency of said each tuple on said another tuple and being associated with said each tuple; and means for optimizing, coupled to said first and second determining means, said second flow graph by said common compiler back end calling one or more predetermined routines in said second compiler front end to determine whether an optimization is valid for one of said tuples that comprises said second flow graph, said second compiler front end using effect and dependency information from said effect determining means and said dependency determining means that use said second compiler front end.