[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