languagel, are used to search databases. database queries consist of predicatescontaining relational and boolean operators. they can be interpreted or -piled into mands to search a database for records satisfying that predicate.piled simulationsimulation is a general technique used in many scientific and engineering disci-plines to understand a phenomenon or to validate a design. inputs to a simula-tor usually include the description of the design and specific input parametersfor that particular simulation run. simulations can be very expensive. we typi-cally need to simulate many sible design alternatives on many different inputsets, and each experiment may take days to plete on a high-performancemachine. instead of writing a simulator that interprets the design, it is fasterto pile the design to produce machine code that simulates that particulardesign natively. piled simulation can run orders of magnitude faster thanan interpreter-based approach. piled simulation is used in many state-of-the-art tools that simulate designs written in verilog or vhdl.1.5.5 software productivity toolsprograms are arguably the most plicated engineering artifacts ever pro-duced; they consist of many many details, every one of which must be correctbefore the program will work pletely. as a result, errors are rampant inprograms; errors may crash a system, produce wrong results, render a systemvulnerable to security attacks, or even lead to catastrophic failures in criticalsystems. testing is the primary technique for locating errors in programs. an interesting and promising plementary approach is to use data-flowanalysis to locate errors statically (that is, before the program is run). data-flow analysis can find errors along all the sible execution paths, and notjust those exercised by the input data sets, as in the case of program testing.many of the data-flow-analysis techniques, originally developed for pileroptimizations, can be used to create tools that assist programmers in theirsoftware engineering tasks. the problem of fin all programerrors is undecidable. a data-flow anal-ysis may be designed to warn the programmers of all sible statements witha particular category of errors. but if most of these warnings are false alarms,users will not use the tool. thus, practical error detectors are often neithersound nor plete. that is, they may not find all the errors in the program,and not all errors reported are guaranteed to be real errors. noheless, var-ious static analyses have been developed and shown to be effective in finerrors, such as dereferencing null or freed pointers, in real programs. the factthat error detectors may be unsound makes them significantly different frompiler optimizations. optimizers must be conservative and cannot alter thesemantics of the program under any circumstances. ……