#Llvm Analyse and Transform Pass
Ce projet utilise Clang et LLVM pour analyser et transformer le code source C ++.
Clang est un frontal à LLVM, il compile C ++ dans IR. La représentation intermédiaire est beaucoup plus simple que C ++, ce qui facilite l'analyse et la transformation.
LLVM possède une variété de bibliothèques qui peuvent être utilisées pour analyser et transformer l'IR. Les instructions pour une analyse ou une transformation sont appelées un passage.
Demo vidéo des passes
Done See BelowDone See BelowLLVM et Clang sont nécessaires pour compiler et appliquer les passes. CMake est nécessaire pour construire LLVM et Clang.
Clang est utilisé pour compiler C ++ à ByteCode LLVM est utilisé pour implémenter une analyse que le passage StaticCount est en train de passer par chaque instruction dans le byetecode et imprime de quel type il s'agit. Il utilise également LLVM pour garder une trace des statistiques certian qu'elle imprime à la fin de l'analyse.
Avant de suivre ce guide, vous auriez dû télécharger et construire LLVM.
Ce projet et ce guide ont été réalisés à l'aide de macOS.
Afin d'appliquer une réussite à un code C, il existe un certain nombre d'étapes qui doivent être collées, elles sont les suivantes.
<LLVM_Source_Directory>/lib/Transforms .StaticCount du référentiel cloné dans le répertoire répertorié ci-dessus.Transforms il devrait y avoir un certain nombre de répertoires et un seul fichier CMakeLists.txt .CMakeLists.txt et ajoutez la ligne add_subdirectory(StaticCount) .<LLVM_Build_Directory> et exécutez cmake --build . Cela construira tout le LLVM, y compris la passe que nous venons d'ajouter.HeapTimeTestProgram à l'intérieur du référentiel cloné.clang -O0 -emit-llvm -c main.cpp -o bctest.bc Ceci utilise Clang pour compiler notre fichier C ++ jusqu'à ByteCode avec lequel LLVM peut fonctionner.opt -load <LLVM_Build_Directory>/lib/llvmstaticcount.dylib -StaticCount -stats< bctest.bc > /dev/null Les instructions imprimées sont le résultat de l'analyse statique en utilisant LLVM.
Remarque - Ce n'est pas la sortie complète de la passe. Il le réduit pour que les commandes ci-dessus soient visibles.
Inquiéter? Veuillez me contacter.
Clang est utilisé pour compiler C ++ à ByteCode LLVM est utilisé pour implémenter une analyse que le pass DynCount passe par chaque bloc de base dans le byetecode et ajoute un appel à une bibliothèque d'exécution. Les fonctions de la bibliothèque ne sont que des instructions de sortie pour cette étape importante.
Tout d'abord, le pass est compilé comme le premier, ensuite nous compilons le programme de test en bytecode. Après cela, la bibliothèque d'exécution est compilée en bytecode. Ces deux fichiers bytecode sont ensuite liés dans un seul fichier bytecode à l'aide de LLVM. Après cela, la passe est appliquée, contrairement à la première passe, il n'y aura pas de sortie à ce stade. Comme il s'agit d'un laissez-passer dynamique, nous obtiendrons les résultats lors de l'exécution. Enfin, nous exécutons le programme et obtenons notre résultat, il y aura des instructions de sortie à chaque occureur de plusieurs types de blocs de base différents.
Avant de suivre ce guide, vous auriez dû télécharger et construire LLVM.
Ce projet et ce guide ont été réalisés à l'aide de macOS.
Afin d'appliquer une réussite au code C, il existe un certain nombre d'étapes qui doivent être collées, elles sont les suivantes.
<LLVM_Source_Directory>/lib/Transforms .DynCount de dossier du référentiel cloné dans le répertoire répertorié ci-dessus.Transforms il devrait y avoir un certain nombre de répertoires et un seul fichier CMakeLists.txt .CMakeLists.txt et ajouter la ligne add_subdirectory(DynCount) .<LLVM_Build_Directory> et exécutez cmake --build . Cela construira tout le LLVM, y compris la passe que nous venons d'ajouter.SmallTestProgram à l'intérieur du référentiel cloné.clang -O0 -emit-llvm -c smallProgram.c -o sp.bc Ceci utilise Clang pour compiler notre fichier C jusqu'à ByteCode avec lequel LLVM peut fonctionner.clang -O0 -emit-llvm -c print -o p.bc Ceci utilise Clang pour compiler notre bibliothèque d'exécution jusqu'à ByteCode qui peut être lié au programme que nous avons compilé ci-dessus.llvm-link p.bc sp.bc -S -o smallprogramandprint.bc Ceci relie notre programme à analyser et notre bibliothèque d'exécution.opt -load <LLVM_Build_Directory>/lib/llvmDynCount.dylib -DynCount <smallprogramandprint.bc> instrumentedprogram.bc Cela applique le passage au programme, en modifiant le bytecode avec des appels à la bibliothèque d'exécution que nous y sommes liés.lli instrumentedprogram.bc Cela exécute le programme instrumenté afin que nous puissions voir le résultat du passage. 
Remarque - Ce n'est pas la sortie complète de la passe. Il le réduit pour que les commandes ci-dessus soient visibles.
Inquiéter? Veuillez me contacter.