Bài giảng chương 10 trình bày những nội dung cơ bản như: Mã trung gian, phân tích dòng dữ liệu, phân tích dòng dữ liệu (Data Flow Analyst) – DFA, loại bỏ dư thừa, tối ưu vòng lặp. . | CHÖÔNG 10 TOÁI ÖU MAÕ . Giôùi thieäu - Tieâu chuaån chuyeån maõ toát - Toå chöùc cuûa trình bieân dòch toái öu front end Boä toái öu maõ Phaân tích doøng ñieàu khieån Phaân tích doøng döõ lieäu Boä sinh maõ Chuyeån ñoåi Hình . Toå chöùc cuûa boä toái öu maõ Maõ trung gian Thí duï . Chuyeån ñoåi sang maõ trung gian ba ñòa chæ cho ñoaïn chöông trình trong ngoân ngöõ Pascal for i := n – 1 down to 1 do for j:= 1 to i do if A [j] > A [j + 1] then begin temp := A [j]; A [j] := A [j + 1]; A [j + 1] := temp; end; Giaû söû moãi oâ nhôù laø 4 byte. Ñòa chæ neàn cuûa daõy A vaäy ñòa chæ phaàn töû thöù j cuûa daõy A laø: addr(A[j]) = addr(A) + (j – 1) * 4. (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) i=n-1 ij i i goto (29) t1 = j - 1 t 2 = 4 * t1 t3 = A [t2] t4 = j + 1 t5 = t4 - 1 t 6 = 4 * t5 t7 = A [t6] ij t3 L if (c) goto (11) n := n + 1 m := m + 2 goto (5) write n BB1 BB2 BB3 BB4 . Phaân tích doøng döõ lieäu Caùc caáu truùc ñieàu khieån nhö if, while, for gaây ra söï reõ nhaùnh cuûa chöông trình. Xaùc ñònh ñöôïc söï reõ nhaùnh seõ xaùc ñònh ñöôïc söï thay ñoåi trò cuûa bieán trong chöông trình, töø ñoù söû duïng caùc bieán naøy trong quaù trình toái öu hoùa. . Muïc ñích Xaùc ñònh caáu truùc ñieàu khieån cuûa chöông trình laø: - moâ taû caùc con ñöôøng thöïc hieän chöông trình - xaùc ñònh caùc voøng laëp . Ñoà thò doøng ñieàu khieån (Control Flow Graphs) Ñònh nghóa: Ñoà thò doøng ñieàu khieån (CFG) cuûa moät chöông trình laø moät ñoà thò coù höôùng, ñöôïc kyù hieäu G = (N, E) maø trong ñoù N laø caùc khoái cô baûn, E laø taäp caïnh theå hieän cho doøng ñieàu khieån giöõa caùc khoái cô .