Bài giảng môn học Trình biên dịch - Chương 10: Tối ưu mã

20 20 0
Bài giảng môn học Trình biên dịch - Chương 10: Tối ưu mã

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Ñ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 d[r]

(1)

CHƯƠNG 10 TỐI ƯU MÃ

10.1 Giới thiệu

- Tiêu chuẩn chuyển mã tốt

- Tổ chức trình biên dịch tối ưu

Hình 10.1 Tổ chức tối ưu mã

front end Bộ tối ưu mã Bộ sinh mã

Chuyển đổi Phân tích

dịng liệu Phân tích dịng

(2)

Mã trung gian

Thí dụ 10.1 Chuyển đổi sang mã trung gian ba địa cho đoạn chương trình ngơn ngữ Pascal

for i := n – down to do for j:= to i do

if A [j] > A [j + 1] then begin

temp := A [j];

A [j] := A [j + 1]; A [j + 1] := temp; end;

(3)

(1) i = n -

(2) ij i < goto (31) (3) j =

(4) if j > i goto (29) (5) t1 = j -

(6) t2 = * t1 (7) t3 = A [t2] (8) t4 = j + (9) t5 = t4 - (10) t6 = * t5 (11) t7 = A [t6]

(12) ij t3 < t7 goto (27) (13) t8 = j -

(14) t9 = * t8

(15) temp = A [t9]

(16) t10 = j + (17) t11 = t10 - (18) t12 = * t11 (19) t13 = A [t12] (20) t4 = j - (21) t15 = * t14 (22) A [t5] = t13 (23) t16 = j + (24) t17 = t16 - (25) t18 = * t17 (26) A [t18] = temp (27) j = j +

(4)

* Khối bản

Thí dụ 10.2 Đoạn mã trung gian sau xác định khối (1) read L

(2) n := (3) k := (4) m :=

(5) k := k + m (6) c := k > L

(7) if (c) goto (11) (8) n := n +

(9) m := m + (10) goto (5) (11) write n

BB2

(5)

10.2 Phân tích dịng liệu

Các cấu trúc điều khiển if, while, for gây rẽ nhánh

chương trình Xác định rẽ nhánh xác định thay đổi trị biến chương trình, từ sử dụng biến q trình tối ưu hóa

10.2.1 Mục đích

Xác định cấu trúc điều khiển chương trình là: - mô tả đường thực chương trình

- xác định vòng lặp

10.2.2 Đồ thị dịng điều khiển (Control Flow Graphs)

Định nghóa:

(6)

Thí dụ 10.3 Đoạn mã trung gian (gồm khối bản) thí dụ 10.2 biểu diễn thành đồ thị dòng liệu

BB1 BB2

BB3 BB4

Hình 10.2 Đồ thị dịng điều khiển

10.2.3 Successor, predcessor khối bản

(7)

* Successor b, ký hiệu succ (b) tập khối n, mà đạt đến từ b cạnh succ (b) = {n ∈ N | (b, n) ∈ E}

như thí dụ 10.3: succ (BB1) = {BB2};

succ (BB2) = {BB3, BB4}, succ (BB3) = {BB2} * Predcessor b, ký hiệu pred (b) tập khối m, mà đạt đến b cạnh pred (b) = {m ∈ N | (m, b) ∈ E}

như thí dụ 10.3: pred (BB2) = {BB1 , BB3}

pred (BB3) = {BB2}, pred (BB4) = {BB2}

ƒ Entry G: nút predcessor ƒ Exit G: nút successor

(8)

Đồ thị dòng điều khiển thí dụ 10.3 thêm nút Entry, Exit Entry

Exit BB1

BB2

BB3 BB4

(9)

Thí dụ minh họa nút rẽ nhánh vaø hợp BB1

BB5

BB6 BB7

BB8 BB9 BB10 BB2 BB3 BB4 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15)

i :=

if(I>n) goto (15) t :=

j :=

if(j>n) goto (13) tmp := te + ts

if(tmp < 0) goto (10) t1 := t1 + ts

(10)

BB1

BB5

BB6 BB7

BB8 BB9 BB10

BB2 BB3 BB4 BB1

BB5

BB6 BB7

BB8 BB9 BB10

BB2 BB3 BB4

Hình 10.4 Các nút rẽ nhánh hợp

join node

(11)

10.2.4 Chi phoái (dominater)

ƒ Định nghĩa dominater: nút n G chi phối nút n’ , ký hiệu n dom n’ (hay n Ỉ n’ ), đường từ nút Entry G đến n’ phải qua n Với định nghĩa nút n chi phối Nút điểm vào vòng lặp chi phối nút vịng lặp

BB1 Ỉ BB1 ; BB1 Ỉ BB2 ; BB1 Ỉ BB3 ; BB1 Ỉ BB4 BB2 Æ BB2 ; BB2 Æ BB3 ; BB2 Æ BB4 BB3 Ỉ BB3 BB4 Ỉ BB4

Entry

Exit BB1

BB2

(12)

ƒ properdominate

N proper dominate n’ , ký hiệu n Ỉ

p n’ , n Ỉ n’ n ≠ n’

thí dụ BB1 Ỉ p BB2 ; BB1 Ỉ p BB3 ; BB1 Ỉ p BB4 ; BB2 Ỉ

p BB3 ; BB2 Ỉ p BB4

ƒ direct dominate

Nút n gọi direct dominate n’ , ký hiệu n Ỉ

d n’ , n Ỉ p n’

và không tồn n” ∈ N mà n Ỉ p n”

BB1 Ỉ d BB2 ; BB2 Ỉ d BB3 ; BB2 Ỉ d BB4

ƒ cây dominate (dominate tree); ký hiệu viết tắt DT, mà nút gốc Entry; nút thuộc G cạnh quan hệ direct dominator

(13)

Entry BB1 BB2

BB3 BB4

(14)

Giải thuật 2.2: tìm dominator Nhập: đồ thị dịng điều khiển G

Xuất: tập dominator nút thuộc G Giải thuật:

DOM (Entry) = Entry

DOM (ν) = N ∀ ν ∈ N - {Entry, Exit} change = true

while (change) {change = false for each ν ∈ N - {Entry, Exit} {

old DOM = DOM (ν)’

(15)

if (DOM (ν) = old DOM) change = true }

}

10.2.5 Direct dominator

Direct dominator cuûa nút n.

Giải thuật tìm direct dominator nút: - Khởi động tập proper dominator nút n

- Loại bỏ nút mà proper dominator nút khác tập

Giải thuật 10.3 Tìm direct dominator Nhập: đồ thị dịng G

(16)

Giải thuật:

for với nút n ∈ N - {Entry} do DOMd (n) = DOM (n) - {n}

for với nút n ∈ N - {Entry} do

for với nút s ∈ DOMd (n) - {s} do if t ∈ DOMd (s) then

DOMd (n) = DOMd (n) - {t}; Ở thí dụ hình 10.1, ta có:

(17)

10.2.6 Post – dominator

Định nghóa:

Cho đồ thị dịng điều khiển G = (N, E) n, n’ ∈ N

- Nút n gọi post – dominator nút n’, ký hiệu n Ỉ n’ đường từ n đến nút Exit chứa n’

Ở thí dụ hình 10.3, ta có post – dominator:

1 ← 1; ← 2; ← 3; ← 4; ← 2; ← 3; ← 4; ← 3; ←

- Nút n gọi direct post – dominator nút n’, ký hiệu n ← n’, n ← pn’ không tồn n” ∈ N mà n ← pn” ← pn’

(18)

Thí dụ post – dominator G laø dominator G-1 Entry

Exit BB1

BB2

BB3 BB4

G1 G-1

Entry

Exit BB1

BB2

(19)

10.2.7 Vòng lặp

Các yếu tố xác định vịng lặp tự nhiên:

- Một vòng lặp phải có điểm vào đơn, gọi header

- Điểm vào header dominate tất nút lại vòng lặp

- Phải có cách lặp, nghóa phải có cạnh quay header

Giải thuật 10.3 Tìm vòng lặp

Nhập: đồ thị dịng G cạnh t Ỉ h

Xuất: vòng lặp bao gồm tất nút vòng lặp tự nhiên t Ỉ h

Phương pháp:

- Tìm dominator nút CFG - Xác định cạnh vẽ

(20)

- Để tìm cạnh vẽ: thực duyệt CFG theo chiều sâu trước Một cạnh lùi e = (t, h) ∈ E cạnh lùi h Ỉ t Một cạnh lùi cạnh vẽ vịng lặp cách sử dụng điều khiển có cấu trúc

Giải thuật: stack s = empty set loop = {h}

insert – on – stack (t); /* stack s* while S is not empty beg

m = pop (s);

for each pred (m) do

insert – on – stack (p); end insert – on – stack (a) begin

Ngày đăng: 09/03/2021, 04:05

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan