[cpl] [Tema 2] Diferente IR intre arhitectura x86_64 si arm

Alexandru Elisei alexandru.elisei at gmail.com
Sat Jan 20 19:08:34 EET 2018


Salut,

Am implementat pasul de optimizare de eliminare a codului mort.

In cadrul pasului de optimizare am ales sa nu aplic aceasta optimizare
blocului "entry". Pe x86_64 identific blocul curent dupa nume
(Block.getName() == "entry") si pe local (masina virtuala x86_64) imi
trec toate testele. Cand incarc arhiva doar cu acest pas de optimizare
primesc la fiecare test erori cu urmatoarele mesaje:

- "Entry block to function must not have predecessors!"

- "Function '___' does not contain an entry block!"

- "Instruction does not dominate all uses!"

Am modificat pasul de optimizare ca testul pentru blocul entry sa nu
verifice numele blocului, ci indexul blocului pe care il analizeaza
(blocul "entry" va fi primul bloc din functie). Cu aceasta modificare
imi trec testele si local si pe vmchecker.

Din cele de mai sus deduc ca IR-ul generat pe arm este diferit de cel
de pe x86_64. Aveam impresia ca una dintre caracteristicile
reprezentarii intermediare este faptul ca este machine independent,
m-am inselat eu?

Versiune opt:

$ opt --version
LLVM (http://llvm.org/):
  LLVM version 3.8.0
  DEBUG build with assertions.
  Built Dec 11 2017 (10:53:24).
  Default target: x86_64-unknown-linux-gnu
  Host CPU: skylake

Numai bine,
Alexandru Elisei


More information about the cpl mailing list