Anda di halaman 1dari 10

Kelompok 5

Faizal Anwar Fauzi


Abi Yazidhal B
Segi Jembar P

Wildan

8.5 Optimasi Dasar Blok

Kita sering dapat memperoleh peningkatan substansial dalam waktu


berjalan kode hanya dengan melakukan optimasi lokal dalam setiap blok
dasar dengan sendirinya. lebih optimisasi global menyeluruh, yang melihat
bagaimana arus informasi di antara dasar blok dari sebuah program, yang
tercakup dalam bab-bab selanjutnya, dimulai dengan Bab 9. Ini adalah
subjek yang kompleks, dengan banyak teknik yang berbeda untuk
dipertimbangkan.

8.5.1 DAG Representasi Dasar Blok

Banyak teknik yang penting untuk optimasi lokal mulai dengan mengubah
dasar blok menjadi DAG (diarahkan grafik asiklik).

DAG representasi dari sebuah blok dasar memungkinkan kita melakukan


beberapa codeimproving transformasi pada kode diwakili oleh blok.

8.5.2 Menemukan Lokal Umum


subexpressions

Subexpressions umum dapat dideteksi dengan melihat, sebagai simpul M baru


sekitar yang akan ditambahkan, apakah ada node N yang ada dengan anakanak yang sama, di urutan yang sama, dan dengan operator yang sama.

Contoh : sebuah DAG untuk Blok


a=b+c
b=a-d

c=b+c
d=ad

Ketika kita membangun node untuk laporan ketiga c = b


+ c, kita tahu bahwa penggunaan b di b + c mengacu
pada simpul berlabel -, karena itu adalah definisi terbaru
dari b. Dengan demikian, kita tidak membingungkan
nilai dihitung pada laporan satu dan tiga.
DAG untuk basis blok

8.5.3 Dead Kode Eliminasi

Operasi pada DAG yang sesuai dengan mati-kode eliminasi dapat


diimplementasikan sebagai berikut. Kami menghapus dari DAG setiap
root (simpul tanpa nenek moyang) yang tidak memiliki variabel hidup
terpasang.

Jika variabel x didefinisikan dua kali, atau jika ditugaskan sekali dan
awal Nilai xq juga digunakan, maka kita harus memastikan bahwa kita
tidak mengubah nilai x sampai kita telah membuat semua penggunaan
node yang nilainya x sebelumnya dipegang.

8.5.4 Penggunaan Aljabar Identitas

Identitas aljabar merupakan kelas penting dari optimasi pada dasar blok. Sebagai
contoh, kita mungkin berlaku identitas aritmatika, seperti :

x+0=0+xx

x-0=x

xxl = lxx = x

x/1 = x

untuk menghilangkan perhitungan dari blok dasar.

Kelas lain dari optimasi aljabar meliputi pengurangan lokal dalam kekuatan, yaitu,
mengganti operator yang lebih mahal dengan yang lebih murah seperti dalam:
EXPENSIVE

CHEAPER

x2

xxx

2xx

x+x

x/2

x x 0.5

8.5.5 Representasi Referensi Array

Pada pandangan pertama, mungkin tampak bahwa petunjuk array


pengindeksan dapat diperlakukan seperti operator lain. Pertimbangkan
misalnya urutan tiga alamat laporan:
x = a[ i]
a[j]=y
z = a[ i]

Jika kita berpikir dari [i] sebagai sebuah operasi yang melibatkan dan saya,
mirip dengan + i, maka itu mungkin muncul seolah-olah dua kegunaan dari [i]
adalah subexpression umum. di Kalau begitu, kita mungkin tergoda untuk
"mengoptimalkan" dengan mengganti instruksi ketiga z = a [i] dengan
sederhana z = x. Namun, karena j bisa sama i, tengah Pernyataan mungkin
sebenarnya mengubah nilai dari [i]; dengan demikian, tidak sah untuk
membuat perubahan ini.

8.5.6 Pointer Tugas dan Prosedur


Panggilan

Ketika kita menetapkan secara tidak langsung melalui pointer, seperti dalam
tugas
x = *p
*q = y

kita tidak tahu apa p atau q arahkan ke. Akibatnya, x = * p adalah penggunaan
setiap variabel apapun, dan * q = y adalah tugas mungkin untuk setiap
variabel. sebagai Akibatnya, operator = * harus mengambil semua node yang
saat ini terkait dengan pengidentifikasi sebagai argumen, yang relevan untuk
mati-kode eliminasi. lebih penting, * = operator membunuh semua node lain
sejauh ini dibangun di DAG. Ada pointer global yang menganalisis salah satu
bisa melakukan yang mungkin membatasi set variabel pointer bisa referensi di
suatu tempat tertentu dalam kode.

8.5.7 Pemasangan kembali Dasar Blok


Dari DAG

Setelah kita melakukan optimasi apapun yang mungkin saat membangun DAG
atau dengan memanipulasi DAG sekali dibangun, kita dapat menyusun kembali
tiga alamat kode untuk blok dasar dari mana kita membangun DAG. Untuk
setiap node yang memiliki satu atau lebih variabel terikat, kita membangun
tiga alamat Pernyataan yang menghitung nilai salah satu variabel.

ketika penataan kode, ada pernyataan dapat menyeberangi panggilan


prosedur atau tugas melalui pointer, dan penggunaan array yang sama dapat
saling silang hanya jika keduanya akses array, tetapi tidak tugas untuk elemen
array.

Anda mungkin juga menyukai