Compare commits
	
		
			15 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | cf2907d1d9 | ||
|   | 65c74a1883 | ||
|   | 73e16bd797 | ||
|   | 388103da3f | ||
|   | 9146caf849 | ||
|   | 0079b4f0e0 | ||
|   | 2ab71cf95d | ||
|   | 13861282b4 | ||
|   | 623818d49e | ||
|   | 841dbe1070 | ||
|   | 9dca6c2f67 | ||
|   | 801831a2b5 | ||
|   | f818f3847a | ||
|   | e40e6b7893 | ||
|   | 2cdcace84b | 
							
								
								
									
										12
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.241.1/containers/ubuntu/.devcontainer/base.Dockerfile | ||||||
|  | 
 | ||||||
|  | # [Choice] Ubuntu version (use ubuntu-22.04 or ubuntu-18.04 on local arm64/Apple Silicon): ubuntu-22.04, ubuntu-20.04, ubuntu-18.04 | ||||||
|  | ARG VARIANT="jammy" | ||||||
|  | FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT} | ||||||
|  | 
 | ||||||
|  | # [Optional] Uncomment this section to install additional OS packages. | ||||||
|  | RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||||||
|  |      && apt-get -y install --no-install-recommends \ | ||||||
|  |      llvm llvm-dev clang lldb gcc gdb cmake make ninja-build | ||||||
|  | 
 | ||||||
|  | ENV LLVM_DIR=/usr/lib/llvm-14 | ||||||
							
								
								
									
										33
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: | ||||||
|  | // https://github.com/microsoft/vscode-dev-containers/tree/v0.241.1/containers/ubuntu | ||||||
|  | { | ||||||
|  | 	"name": "Ubuntu", | ||||||
|  | 	"build": { | ||||||
|  | 		"dockerfile": "Dockerfile", | ||||||
|  | 		// Update 'VARIANT' to pick an Ubuntu version: jammy / ubuntu-22.04, focal / ubuntu-20.04, bionic /ubuntu-18.04 | ||||||
|  | 		// Use ubuntu-22.04 or ubuntu-18.04 on local arm64/Apple Silicon. | ||||||
|  | 		"args": { "VARIANT": "ubuntu-22.04" } | ||||||
|  | 	}, | ||||||
|  | 	"extensions": ["llvm-vs-code-extensions.vscode-clangd", | ||||||
|  | 		"matepek.vscode-catch2-test-adapter", | ||||||
|  | 		"twxs.cmake", | ||||||
|  | 		"vadimcn.vscode-lldb", | ||||||
|  | 		"xaver.clang-format", | ||||||
|  | 		"yzhang.markdown-all-in-one", | ||||||
|  | 		"shd101wyy.markdown-preview-enhanced", | ||||||
|  | 		"streetsidesoftware.code-spell-checker" | ||||||
|  | 		], | ||||||
|  | 
 | ||||||
|  | 	// Use 'forwardPorts' to make a list of ports inside the container available locally. | ||||||
|  | 	// "forwardPorts": [], | ||||||
|  | 
 | ||||||
|  | 	// Use 'postCreateCommand' to run commands after the container is created. | ||||||
|  | 	// "postCreateCommand": "uname -a", | ||||||
|  | 
 | ||||||
|  | 	// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. | ||||||
|  | 	"remoteUser": "vscode", | ||||||
|  | 	"features": { | ||||||
|  | 		"git": "latest", | ||||||
|  | 		"fish": "latest" | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | kind: pipeline | ||||||
|  | type: docker | ||||||
|  | name: llvmta-build | ||||||
|  | steps: | ||||||
|  | - name: Build | ||||||
|  |   image: ls12-nvm-oma1:5000/cppdev | ||||||
|  |   commands: | ||||||
|  |   - mkdir build | ||||||
|  |   - cd build | ||||||
|  |   - cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DLT_LLVM_INSTALL_DIR=/usr .. | ||||||
|  |   - ninja -j 2 | ||||||
							
								
								
									
										79
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										79
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -4,21 +4,6 @@ | |||||||
|   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||||
|   "version": "0.2.0", |   "version": "0.2.0", | ||||||
|   "configurations": [ |   "configurations": [ | ||||||
|   // { |  | ||||||
|   //     "type": "lldb", |  | ||||||
|   //     "request": "launch", |  | ||||||
|   //     "name": "LLDB Unrolling", |  | ||||||
|   //     "program": "/usr/bin/opt", |  | ||||||
|   //     "args": [ |  | ||||||
|   //       "-load-pass-plugin", |  | ||||||
|   //       "${workspaceFolder}/build/libCacheAnalysisPass.so", |  | ||||||
|   //       "-passes=lru-misses", |  | ||||||
|   //       "${workspaceFolder}/test/cnt.ll", |  | ||||||
|   //       "-o", |  | ||||||
|   //       "/dev/null" |  | ||||||
|   //     ], |  | ||||||
|   //     "cwd": "${workspaceFolder}" |  | ||||||
|   //   }, |  | ||||||
|     { |     { | ||||||
|       "type": "lldb", |       "type": "lldb", | ||||||
|       "request": "launch", |       "request": "launch", | ||||||
| @ -26,7 +11,7 @@ | |||||||
|       "program": "/usr/bin/opt", |       "program": "/usr/bin/opt", | ||||||
|       "args": [ |       "args": [ | ||||||
|         "-load-pass-plugin", |         "-load-pass-plugin", | ||||||
|         "${workspaceFolder}/build/libCacheAnalysisPass.so", |         "${workspaceFolder}/build/lib/libCacheAnalysisPass.so", | ||||||
|         "-passes=lru-misses", |         "-passes=lru-misses", | ||||||
|         "${workspaceFolder}/test/fft1.ll", |         "${workspaceFolder}/test/fft1.ll", | ||||||
|         "-o", |         "-o", | ||||||
| @ -34,36 +19,36 @@ | |||||||
|       ], |       ], | ||||||
|       "cwd": "${workspaceFolder}" |       "cwd": "${workspaceFolder}" | ||||||
|     }, |     }, | ||||||
|     { |     // { | ||||||
|       "name": "gdb fft1", |     //   "name": "gdb fft1", | ||||||
|       "type": "cppdbg",//Only Usable with C/C++ extension installed from Microsoft. |     //   "type": "cppdbg",//Only Usable with C/C++ extension installed from Microsoft. | ||||||
|       "request": "launch", |     //   "request": "launch", | ||||||
|       "program": "/usr/bin/opt", |     //   "program": "/usr/bin/opt", | ||||||
|       "args": [ |     //   "args": [ | ||||||
|         "-load-pass-plugin", |     //     "-load-pass-plugin", | ||||||
|         "${fileDirname}/../build/libCacheAnalysisPass.so", |     //     "${fileDirname}/../build/lib/libCacheAnalysisPass.so", | ||||||
|         "-passes='lru-misses'", |     //     "-passes='lru-misses'", | ||||||
|         "${fileDirname}/../test/fft1.ll", |     //     "${fileDirname}/../test/fft1.ll", | ||||||
|         "-o", |     //     "-o", | ||||||
|         "/dev/null" |     //     "/dev/null" | ||||||
|       ], |     //   ], | ||||||
|       "stopAtEntry": false, |     //   "stopAtEntry": false, | ||||||
|       "cwd": "${fileDirname}", |     //   "cwd": "${fileDirname}", | ||||||
|       "environment": [], |     //   "environment": [], | ||||||
|       "externalConsole": false, |     //   "externalConsole": false, | ||||||
|       "MIMode": "gdb", |     //   "MIMode": "gdb", | ||||||
|       "setupCommands": [ |     //   "setupCommands": [ | ||||||
|         { |     //     { | ||||||
|           "description": "Enable pretty-printing for gdb", |     //       "description": "Enable pretty-printing for gdb", | ||||||
|           "text": "-enable-pretty-printing", |     //       "text": "-enable-pretty-printing", | ||||||
|           "ignoreFailures": true |     //       "ignoreFailures": true | ||||||
|         }, |     //     }, | ||||||
|         { |     //     { | ||||||
|           "description": "Set Disassembly Flavor to Intel", |     //       "description": "Set Disassembly Flavor to Intel", | ||||||
|           "text": "-gdb-set disassembly-flavor intel", |     //       "text": "-gdb-set disassembly-flavor intel", | ||||||
|           "ignoreFailures": true |     //       "ignoreFailures": true | ||||||
|         } |     //     } | ||||||
|       ] |     //   ] | ||||||
|     } |     // } | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
							
								
								
									
										8
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -3,10 +3,16 @@ | |||||||
|   // for the documentation about the tasks.json format |   // for the documentation about the tasks.json format | ||||||
|   "version": "2.0.0", |   "version": "2.0.0", | ||||||
|   "tasks": [ |   "tasks": [ | ||||||
|  |     { | ||||||
|  |       "label": "config", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "rm -r build ; rm complile_commands.json ; mkdir build ; cd build ; cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DLT_LLVM_INSTALL_DIR=$LLVM_DIR ..", | ||||||
|  |       "group": "build" | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|       "label": "build", |       "label": "build", | ||||||
|       "type": "shell", |       "type": "shell", | ||||||
|       "command": "./helper.sh all", |       "command": " cd build ; ninja ", | ||||||
|       "group": "build" |       "group": "build" | ||||||
|     }, |     }, | ||||||
|   ] |   ] | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ include(FetchContent) | |||||||
| FetchContent_Declare( | FetchContent_Declare( | ||||||
|   googletest |   googletest | ||||||
|   URL  |   URL  | ||||||
|   URL https://github.com/google/googletest/archive/05CC6081FCBD0071053DE78238E136B3.zip |   URL https://github.com/google/googletest/archive/refs/heads/main.zip | ||||||
| ) | ) | ||||||
| # For Windows: Prevent overriding the parent project's compiler/linker settings | # For Windows: Prevent overriding the parent project's compiler/linker settings | ||||||
| set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) | set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) | ||||||
| @ -59,10 +59,10 @@ endif() | |||||||
| # `find_package(llvm)`. So there's no need to add it here. | # `find_package(llvm)`. So there's no need to add it here. | ||||||
| list(APPEND CMAKE_PREFIX_PATH "${LT_LLVM_INSTALL_DIR}/lib/cmake/llvm/") | list(APPEND CMAKE_PREFIX_PATH "${LT_LLVM_INSTALL_DIR}/lib/cmake/llvm/") | ||||||
| 
 | 
 | ||||||
| find_package(LLVM 13.0.0 REQUIRED CONFIG) | find_package(LLVM 14.0.0 REQUIRED CONFIG) | ||||||
| 
 | 
 | ||||||
| # Another sanity check | # Another sanity check | ||||||
| if(NOT "13" VERSION_EQUAL "${LLVM_VERSION_MAJOR}") | if(NOT "14" VERSION_EQUAL "${LLVM_VERSION_MAJOR}") | ||||||
|   message(FATAL_ERROR "Found LLVM ${LLVM_VERSION_MAJOR}, but need LLVM 13") |   message(FATAL_ERROR "Found LLVM ${LLVM_VERSION_MAJOR}, but need LLVM 13") | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										147
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								README.md
									
									
									
									
									
								
							| @ -1,5 +1,7 @@ | |||||||
| # RTSA-lab01-CacheAnalysis | # RTSA-lab01-CacheAnalysis | ||||||
| 
 | 
 | ||||||
|  | [](http://129.217.34.203/nils.hoelscher/RTSA-lab01-CacheAnalysis) | ||||||
|  | 
 | ||||||
| In this lab session you will learn how to implement a LRU cache in abstract representation. | In this lab session you will learn how to implement a LRU cache in abstract representation. | ||||||
| 
 | 
 | ||||||
| ## Exercise | ## Exercise | ||||||
| @ -24,17 +26,74 @@ I am more than happy helping you install Linux on your machine. | |||||||
| 
 | 
 | ||||||
| ## Setups | ## Setups | ||||||
| 
 | 
 | ||||||
| The easiest Way is to use the VM Image (pw:rtsa) provided here: | ### VS Code Docker dev container (recommended setup) | ||||||
| 
 | 
 | ||||||
| <https://tu-dortmund.sciebo.de/s/JbvtbtEADx92eEG/authenticate> | 1.) install docker and VS Code on your Distribution. Please keep in mind Dev containers are only supported by the native version of VS Code from Microsoft! | ||||||
| 
 | 
 | ||||||
| On this VM you can simply open VS Code from the desktop and start coding. | <https://docs.docker.com/get-docker/> | ||||||
| 
 | 
 | ||||||
| Following are native setups and some other unrecommended Setups are at the end of this Readme. | <https://code.visualstudio.com/> | ||||||
| 
 | 
 | ||||||
| Also read the VS Code setup, which might be interesting independent from your chosen Setup. | For this setup you cannot use the OSS version of VS code or the version from Snap, as the remote development extensions will not work. | ||||||
| 
 | 
 | ||||||
| ### Mac Setup | 2.) I recommend you install the following extensions in vs code | ||||||
|  | 
 | ||||||
|  | clangd, | ||||||
|  | Clang-Format, | ||||||
|  | CodeLLDB, | ||||||
|  | Docker and | ||||||
|  | Remote Development (Microsoft VS Code only!) | ||||||
|  | 
 | ||||||
|  | For a general C/C++ setup of VS Code (I consider good) see: | ||||||
|  | <https://ahemery.dev/2020/08/24/c-cpp-vscode/> | ||||||
|  | 
 | ||||||
|  | 3.) The project comes with a pre configured dev container and should prompt you to use it after opening the project. With this you have a running setup. If not please continue reading the manual points. | ||||||
|  | 
 | ||||||
|  | 3.manual.) Use the helper script to build and run a Container. | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | ./helper.sh docker | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | This will build a docker image and run a Docker container with the current directory mounted. | ||||||
|  | 
 | ||||||
|  | The Docker container can later be started from the Docker VS Code extension. | ||||||
|  | 
 | ||||||
|  | 4.manual) Attach VS Code to the container, in the Docker Tab, and start developing | ||||||
|  | 
 | ||||||
|  | ### VS Code native setup | ||||||
|  | 
 | ||||||
|  | This is my personally preferred IDE setup for C/C++ and by no means needed to accomplish this exercise. | ||||||
|  | 
 | ||||||
|  | 1.) Install VS Code on your Distribution or get it from Microsoft. | ||||||
|  | 
 | ||||||
|  | <https://code.visualstudio.com/> | ||||||
|  | 
 | ||||||
|  | 2.) I recommend you install the following extensions in vs code | ||||||
|  | 
 | ||||||
|  | clangd, | ||||||
|  | Clang-Format, | ||||||
|  | CodeLLDB, | ||||||
|  | C++ TestMate, | ||||||
|  | Docker and | ||||||
|  | Remote Development (Microsoft VS Code only!) | ||||||
|  | 
 | ||||||
|  | For a general C/C++ setup of VS Code (I consider good) see: | ||||||
|  | <https://ahemery.dev/2020/08/24/c-cpp-vscode/> | ||||||
|  | 
 | ||||||
|  | Most parts can be skipped, as they are already integrated in this Repo. | ||||||
|  | 
 | ||||||
|  | 3.a.) Set the LLVM_DIR variable to your LLVM(14) installation. | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | export LLVM_DIR=<path/to/your/llvm/installation> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 3.b.) You can auto config and build by hitting Ctr+Shift+B from the IDE or use the helper script. | ||||||
|  | 
 | ||||||
|  | 4.) Pressing F5 will start a debug session, make sure to set halting points. | ||||||
|  | 
 | ||||||
|  | ### Mac setup | ||||||
| 
 | 
 | ||||||
| I recommend using docker and VS Code for setup. | I recommend using docker and VS Code for setup. | ||||||
| Also check out the recommended extensions in the Docker section. | Also check out the recommended extensions in the Docker section. | ||||||
| @ -47,7 +106,7 @@ For Mac (tested on M1 Mac mini) you can also use: | |||||||
| 
 | 
 | ||||||
| But you will need brew installed and also have to use the poolhelper script instead of the normal helper script. | But you will need brew installed and also have to use the poolhelper script instead of the normal helper script. | ||||||
| 
 | 
 | ||||||
| ### Setup on a Pool PC | ### Setup on a pool PC | ||||||
| 
 | 
 | ||||||
| At first get an IRB account from the following link and log in: | At first get an IRB account from the following link and log in: | ||||||
| 
 | 
 | ||||||
| @ -75,66 +134,7 @@ Now you have a llvm13 source build. | |||||||
| 
 | 
 | ||||||
| Remember to use the poolhelper.sh instead of the helper.sh. | Remember to use the poolhelper.sh instead of the helper.sh. | ||||||
| 
 | 
 | ||||||
| ### VS Code Setup |  | ||||||
| 
 | 
 | ||||||
| This is my personally preferred IDE setup for C/C++ and by no means needed to accomplish this exercise. |  | ||||||
| 
 |  | ||||||
| 1.) Install VS Code on your Distribution or get it from Microsoft. |  | ||||||
| 
 |  | ||||||
| <https://code.visualstudio.com/> |  | ||||||
| 
 |  | ||||||
| 2.) I recommend you install the following extensions in vs code |  | ||||||
| 
 |  | ||||||
| clangd, |  | ||||||
| Clang-Format, |  | ||||||
| CodeLLDB, |  | ||||||
| C++ TestMate, |  | ||||||
| Docker and |  | ||||||
| Remote Development |  | ||||||
| 
 |  | ||||||
| For a general C/C++ setup of VS Code (I consider good) see: |  | ||||||
| <https://ahemery.dev/2020/08/24/c-cpp-vscode/> |  | ||||||
| 
 |  | ||||||
| Most parts can be skipped, as they are already integrated in this Repo. |  | ||||||
| 
 |  | ||||||
| 3.) You can auto build by hitting Strg+Shift+B from the IDE. |  | ||||||
| 
 |  | ||||||
| 4.) Pressing F5 will start a debug session, make sure to set halting points. |  | ||||||
| 
 |  | ||||||
| ### Setting up Docker |  | ||||||
| 
 |  | ||||||
| 1.) install docker and VS Code on your Distribution. |  | ||||||
| 
 |  | ||||||
| <https://docs.docker.com/get-docker/> |  | ||||||
| 
 |  | ||||||
| <https://code.visualstudio.com/> |  | ||||||
| 
 |  | ||||||
| For this setup you cannot use the OSS version of VS code or the version from Snap, as the remote development extensions will not work. |  | ||||||
| 
 |  | ||||||
| 2.) I recommend you install the following extensions in vs code |  | ||||||
| 
 |  | ||||||
| clangd, |  | ||||||
| Clang-Format, |  | ||||||
| CodeLLDB, |  | ||||||
| Docker and |  | ||||||
| Remote Development |  | ||||||
| 
 |  | ||||||
| For a general C/C++ setup of VS Code (I consider good) see: |  | ||||||
| <https://ahemery.dev/2020/08/24/c-cpp-vscode/> |  | ||||||
| 
 |  | ||||||
| Most of the setup can be skipped |  | ||||||
| 
 |  | ||||||
| 3.) Use the helper script to build and run a Container |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| ./helper.sh docker |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| This will build a docker image and run a Docker container with the current directory mounted. |  | ||||||
| 
 |  | ||||||
| The Docker container can later be started from the Docker VS Code extension. |  | ||||||
| 
 |  | ||||||
| 4.) Attach VS Code to the container, in the Docker Tab, and start developing |  | ||||||
| 
 | 
 | ||||||
| ## Debugging | ## Debugging | ||||||
| 
 | 
 | ||||||
| @ -154,15 +154,22 @@ Helpful to understand what the program does but not very so much for the actual | |||||||
| 
 | 
 | ||||||
| ## UnitTest | ## UnitTest | ||||||
| 
 | 
 | ||||||
| The best way to see what your function does is to use the UnitTest.cpp. | The best way to see what your function does is to use the [UnitTest.cpp](https://git.cs.tu-dortmund.de/nils.hoelscher/RTSA-lab01-CacheAnalysis/src/branch/master/UnitTest/UnitTest.cpp). | ||||||
| With "C++ TestMate" install you can simply run or debug the test from the side panel in VS Code (Flask Icon). | With "C++ TestMate" install you can simply run or debug the test from the side panel in VS Code (Flask Icon). | ||||||
| The "C++ TestMate" is not installed in the VM as I just added this feature now. | The "C++ TestMate" is not installed in the VM as I just added this feature now. | ||||||
| Please feel free to add more test cases to your liking in UnitTest.cpp. | Please feel free to add more test cases to your liking in [UnitTest.cpp](https://git.cs.tu-dortmund.de/nils.hoelscher/RTSA-lab01-CacheAnalysis/src/branch/master/UnitTest/UnitTest.cpp). | ||||||
| ## Use the Helper script | 
 | ||||||
|  |   | ||||||
|  | ## Configuring and building  | ||||||
|  | 
 | ||||||
|  | The easiest way is to use the VS Code tasks in this project. | ||||||
|  | By using CTR+Shift+B you can config and then build the project. | ||||||
|  | 
 | ||||||
|  | ### Use the helper script | ||||||
| 
 | 
 | ||||||
| Again if you work on a Pool PC use poolhelper.sh insted of the helper.sh script. | Again if you work on a Pool PC use poolhelper.sh insted of the helper.sh script. | ||||||
| 
 | 
 | ||||||
| ### Initial Setup | ### Initial setup | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| ./helper.sh all | ./helper.sh all | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ void fillSet(AbstractState &In, unsigned int Set) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Joined Set should remain the same
 | // Joined Set should remain the same
 | ||||||
| TEST(UnitTest, MustJoinSameStates) { | TEST(MustJoinTests, MustJoinSameStates) { | ||||||
|   AbstractCache AC; |   AbstractCache AC; | ||||||
|   AC.addEmptyNode(0); |   AC.addEmptyNode(0); | ||||||
|   fillSet(AC.Nodes[0], 0); |   fillSet(AC.Nodes[0], 0); | ||||||
| @ -37,7 +37,7 @@ void counterFillSet(AbstractState &In, unsigned int Set) { | |||||||
| //   Age[1]: 1
 | //   Age[1]: 1
 | ||||||
| //   Age[2]: 2
 | //   Age[2]: 2
 | ||||||
| //   Age[3]: 0 3
 | //   Age[3]: 0 3
 | ||||||
| TEST(UnitTest, MustJoinDifferentStates) { | TEST(MustJoinTests, MustJoinDifferentStates) { | ||||||
|   AbstractCache AC; |   AbstractCache AC; | ||||||
|   AC.addEmptyNode(0); |   AC.addEmptyNode(0); | ||||||
|   counterFillSet(AC.Nodes[0], 0); |   counterFillSet(AC.Nodes[0], 0); | ||||||
| @ -76,12 +76,12 @@ TEST(UnitTest, MustJoinDifferentStates) { | |||||||
| 
 | 
 | ||||||
| void fillSetHighNumbers(AbstractState &In, unsigned int Set) { | void fillSetHighNumbers(AbstractState &In, unsigned int Set) { | ||||||
|   for (int I = 0; I < 4; I++) { |   for (int I = 0; I < 4; I++) { | ||||||
|     In.Sets[Set].Associativity[I].Blocks.push_front(10+I); |     In.Sets[Set].Associativity[I].Blocks.push_front(10 + I); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // resulting state should be empty
 | // resulting state should be empty
 | ||||||
| TEST(UnitTest, MustJoinDisjunctStates) { | TEST(MustJoinTests, MustJoinDisjunctStates) { | ||||||
|   AbstractCache AC; |   AbstractCache AC; | ||||||
|   AC.addEmptyNode(0); |   AC.addEmptyNode(0); | ||||||
|   fillSetHighNumbers(AC.Nodes[0], 0); |   fillSetHighNumbers(AC.Nodes[0], 0); | ||||||
| @ -98,4 +98,77 @@ TEST(UnitTest, MustJoinDisjunctStates) { | |||||||
|     uint Age = B.first; |     uint Age = B.first; | ||||||
|     EXPECT_TRUE(AC.Nodes[0].Sets[0].Associativity[Age].Blocks.empty()); |     EXPECT_TRUE(AC.Nodes[0].Sets[0].Associativity[Age].Blocks.empty()); | ||||||
|   } |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(MustJoinTests, MustJoinDisjunctStatesAllSets) { | ||||||
|  |   AbstractCache AC; | ||||||
|  |   AC.addEmptyNode(0); | ||||||
|  |   AC.addEmptyNode(1); | ||||||
|  |   for (int I = 0; I < 16; I++) { | ||||||
|  |     fillSetHighNumbers(AC.Nodes[0], I); | ||||||
|  |     fillSet(AC.Nodes[1], I); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   std::cout << "==Before:==\n"; | ||||||
|  |   AC.Nodes[0].dump(); | ||||||
|  |   AC.Nodes[1].dump(); | ||||||
|  | 
 | ||||||
|  |   AC.Nodes[0].mustJoin(AC.Nodes[1]); | ||||||
|  |   std::cout << "\n==After:==\n"; | ||||||
|  |   AC.Nodes[0].dump(); | ||||||
|  |   for (auto Set : AC.Nodes[0].Sets) { | ||||||
|  |     for (auto B : Set.second.Associativity) { | ||||||
|  |       EXPECT_TRUE(B.second.Blocks.empty()); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(MustJoinTests, MustJoinDifferentStatesAllSets) { | ||||||
|  |   AbstractCache AC; | ||||||
|  |   AC.addEmptyNode(0); | ||||||
|  |   AC.addEmptyNode(1); | ||||||
|  |   for (int I = 0; I < 16; I++) { | ||||||
|  |     if (I % 2) | ||||||
|  |       counterFillSet(AC.Nodes[0], I); | ||||||
|  |     fillSet(AC.Nodes[1], I); | ||||||
|  |   } | ||||||
|  |   std::cout << "==Before:==\n"; | ||||||
|  |   AC.Nodes[0].dump(); | ||||||
|  |   AC.Nodes[1].dump(); | ||||||
|  | 
 | ||||||
|  |   AC.Nodes[0].mustJoin(AC.Nodes[1]); | ||||||
|  | 
 | ||||||
|  |   AC.Nodes[1].mustJoin(AC.Nodes[0]); | ||||||
|  |   std::cout << "\n==After:==\n"; | ||||||
|  |   AC.Nodes[1].dump(); | ||||||
|  |   for (auto Set : AC.Nodes[1].Sets) { | ||||||
|  |     for (auto B : Set.second.Associativity) { | ||||||
|  |       uint SetNr = Set.first; | ||||||
|  |       uint Age = B.first; | ||||||
|  |       if (SetNr % 2) { | ||||||
|  |         switch (Age) { | ||||||
|  |         case 0: | ||||||
|  |           EXPECT_TRUE(B.second.Blocks.empty()); | ||||||
|  |           break; | ||||||
|  |         case 1: | ||||||
|  |           EXPECT_EQ(B.second.Blocks.front(), 1); | ||||||
|  |           break; | ||||||
|  |         case 2: | ||||||
|  |           EXPECT_EQ(B.second.Blocks.front(), 2); | ||||||
|  |           break; | ||||||
|  |         case 3: | ||||||
|  |           // this test is not very exact the Set 0 with age 3 should contain
 | ||||||
|  |           // (0,3) in arbitrary order
 | ||||||
|  |           EXPECT_EQ(B.second.Blocks.size(), 2); | ||||||
|  |           break; | ||||||
|  |         default: | ||||||
|  |           // should never be reached!
 | ||||||
|  |           EXPECT_TRUE(false); | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         EXPECT_TRUE(B.second.Blocks.empty()); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   EXPECT_TRUE(AC.Nodes[1] == AC.Nodes[0]); | ||||||
| } | } | ||||||
							
								
								
									
										12
									
								
								helper.sh
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								helper.sh
									
									
									
									
									
								
							| @ -11,7 +11,7 @@ config () { | |||||||
|   mkdir build |   mkdir build | ||||||
|   cd build |   cd build | ||||||
|   echo "==== Configuring cmake ====" |   echo "==== Configuring cmake ====" | ||||||
|   cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DLT_LLVM_INSTALL_DIR=/usr .. |   cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DLT_LLVM_INSTALL_DIR=$LLVM_DIR .. | ||||||
|   cd .. |   cd .. | ||||||
|   cp build/compile_commands.json compile_commands.json |   cp build/compile_commands.json compile_commands.json | ||||||
|   echo "==== Done! ====" |   echo "==== Done! ====" | ||||||
| @ -27,12 +27,16 @@ compile () { | |||||||
| 
 | 
 | ||||||
| run () { | run () { | ||||||
|   echo "==== Running $1 ====" |   echo "==== Running $1 ====" | ||||||
|   opt -load-pass-plugin build/libCacheAnalysisPass.so \ |   opt -load-pass-plugin build/lib/libCacheAnalysisPass.so \ | ||||||
|     -passes='lru-misses(function(loop-unroll-and-jam))' \ |     -passes='lru-misses(function(loop-unroll-and-jam))' \ | ||||||
|     test/$1.ll -o /dev/null |     test/$1.ll -o /dev/null | ||||||
|   #llvm-dis < out.bc > out.ll |   #llvm-dis < out.bc > out.ll | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | test () { | ||||||
|  |   ./build/bin/UnitTest --gtest_brief=1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| allBenchs=( "adpcm" | allBenchs=( "adpcm" | ||||||
|   "bs" |   "bs" | ||||||
|   "bsort100" |   "bsort100" | ||||||
| @ -103,6 +107,9 @@ case $1 in | |||||||
|       echo "==== Please provide name of the test as second argument! ====" |       echo "==== Please provide name of the test as second argument! ====" | ||||||
|     fi |     fi | ||||||
|     ;; |     ;; | ||||||
|  |   t | test) | ||||||
|  |     test | ||||||
|  |     ;; | ||||||
|   ra | runall) |   ra | runall) | ||||||
|     runall |     runall | ||||||
|     ;; |     ;; | ||||||
| @ -157,6 +164,7 @@ case $1 in | |||||||
|     echo "  r | run [name]          Run pass on test/[name] from the test folder" |     echo "  r | run [name]          Run pass on test/[name] from the test folder" | ||||||
|     echo "  cr [name]               Compile and run pass on test/[name] from the test folder" |     echo "  cr [name]               Compile and run pass on test/[name] from the test folder" | ||||||
|     echo "  ra | runall              Run pass on all tests from the test folder" |     echo "  ra | runall              Run pass on all tests from the test folder" | ||||||
|  |     echo "  t | test                 Execute Unit tests, only test that Fail are printed." | ||||||
|     exit |     exit | ||||||
|   ;; |   ;; | ||||||
| esac | esac | ||||||
|  | |||||||
| @ -36,13 +36,17 @@ run () { | |||||||
|   #llvm-dis < out.bc > out.ll |   #llvm-dis < out.bc > out.ll | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | test () { | ||||||
|  |   ./build/bin/UnitTest --gtest_brief=1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| buildllvm() { | buildllvm() { | ||||||
|   mkdir llvm |   mkdir llvm | ||||||
|   cd llvm |   cd llvm | ||||||
|   wget https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-13.0.1.src.tar.xz |   wget https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-13.0.1.src.tar.xz | ||||||
|   tar -xf llvm-13.0.1.src.tar.xz |   tar -xf llvm-13.0.1.src.tar.xz | ||||||
|   rm llvm-13.0.1.src.tar.xz |   rm llvm-13.0.1.src.tar.xz | ||||||
|   cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_TARGETS_TO_BUILD=host llvm-13.0.1.src/ |   cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_INCLUDE_TESTS=FALSE -DLLVM_TARGETS_TO_BUILD=host llvm-13.0.1.src/ | ||||||
|   make -j 4 |   make -j 4 | ||||||
|   export LLVM_DIR=$(pwd) >> ~/.zshrc |   export LLVM_DIR=$(pwd) >> ~/.zshrc | ||||||
|   export LLVM_DIR=$(pwd) >> ~/.bashrc |   export LLVM_DIR=$(pwd) >> ~/.bashrc | ||||||
| @ -137,6 +141,9 @@ case $1 in | |||||||
|       echo "==== Please provide name of the test as second argument! ====" |       echo "==== Please provide name of the test as second argument! ====" | ||||||
|     fi |     fi | ||||||
|     ;; |     ;; | ||||||
|  |   t | test) | ||||||
|  |     test | ||||||
|  |     ;; | ||||||
|   ra | runall) |   ra | runall) | ||||||
|     runall |     runall | ||||||
|     ;; |     ;; | ||||||
| @ -194,6 +201,7 @@ case $1 in | |||||||
|     echo "  r | run [name]          Run pass on test/[name] from the test folder" |     echo "  r | run [name]          Run pass on test/[name] from the test folder" | ||||||
|     echo "  cr [name]               Compile and run pass on test/[name] from the test folder" |     echo "  cr [name]               Compile and run pass on test/[name] from the test folder" | ||||||
|     echo "  ra | runall              Run pass on all tests from the test folder" |     echo "  ra | runall              Run pass on all tests from the test folder" | ||||||
|  |     echo "  t | test                 Execute Unit tests, only test that Fail are printed." | ||||||
|     exit |     exit | ||||||
|   ;; |   ;; | ||||||
| esac | esac | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user