Status : Install clang en cours. Pb au link de clang pour l'instant. À essayer : - compiler la dernière release, pas la branche trunk du SVN (7.0.0) - écrire un script qui fait toute la compil d'un coup à partir de rien et log dans un fichier (... | tee log.txt). - désinstaller le clang/llvm de la distrib. à activer : Checkout Extra Clang Tools make VERBOSE=1 pour avoir les détails. Biblio : * Google scholar => voir si une source est dispo. * Sci-Hub : ajouter .sci-hub.tw à la fin du nom dans l'URL. http://sci-hub.tw/http://www.computer.org/csdl/proceedings/mcsoc/2017/3441/00/3441a052-abs.html ============= À connaître ============= /!\ liveness => printf de tout le monde à la fin. ============= À tester ============= --inline, --unroll-loops Loop hoisting. ============= Exemple ============= /*Source code from Laure Gonnord*/ // pour le x86 // clang -emit-llvm main.c -c // llc -march=x86 main.bc -O3 // pour le cfg //clang -emit-llvm main.c -c // opt -mem2reg main.bc -o main2.bc // opt -view-cfg main2.bc #include #include unsigned myrandom(); int main(int argc, char** argv){ int y; int x = myrandom(); switch(x){ case 0: y=42; break; case 1: y=12; break; case 2: y=1515; break; case 4: y=-3; break; case 5: y=55; break; case 6: y=111; break; default: y=77; } printf("%d,%d\n",x,y); return 0; } ========================================= Cahier des charges pour le 15 décembre. ========================================= * Projet orienté recherche => objectifs de qualité modestes, mais : le projet doit être réutilisable par de futur stagiaires/... « Let p12 = o1(o2(p)), and p21 = o2(o1(p)) if distance(p12, p21) = 0, then o1 and o2 are said to commute on p. If there is a distance between p12 and p21, then the passes are said to interact on p. » * lire le chapitre de la thèse de Maroua Maalej : argu pour dire que l'évaluation d'un optimisation de compil c'est pas simple. https://tel.archives-ouvertes.fr/tel-01626398v2 https://tel.archives-ouvertes.fr/tel-01661376 À faire : - Infrastructure pour lancer o1(o2(p)) et o2(o1(p)) - sur "beaucoup" de programmes. en utilisant l'infra de tests LLVM - des gros => idéalement des vrais programmes. Voir la base de tests de LLVM + SPEC - des petits => cf. base de tests LLVM .... utiliser ceux de maroua (pointeurs -> opti) - notion de distance(p12, p21) - temps d'exécution => cf. benchmarks : http://llvm.org/docs/TestSuiteGuide.html Regarder valgrind --tool=callgrind / kcachegrind ? - mémoire ? - taille de l'exécutable ? - Quelques statistiques, voire visualisation (a priori pas pour le pom) ? - soit a1 une analyse a2 une autre je veux caractériser a1 >>> a2 en capacité d'optim o(a1)(p) versus o(a2)(p) ?? - soit a1 une analyse, chercher les o tq o(a1) transforme au max le code.