Compare commits
No commits in common. "master" and "UnitTest" have entirely different histories.
|
@ -1,12 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,33 +0,0 @@
|
||||||
// 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
11
.drone.yml
|
@ -1,11 +0,0 @@
|
||||||
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
|
|
|
@ -4,6 +4,21 @@
|
||||||
// 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",
|
||||||
|
@ -11,7 +26,7 @@
|
||||||
"program": "/usr/bin/opt",
|
"program": "/usr/bin/opt",
|
||||||
"args": [
|
"args": [
|
||||||
"-load-pass-plugin",
|
"-load-pass-plugin",
|
||||||
"${workspaceFolder}/build/lib/libCacheAnalysisPass.so",
|
"${workspaceFolder}/build/libCacheAnalysisPass.so",
|
||||||
"-passes=lru-misses",
|
"-passes=lru-misses",
|
||||||
"${workspaceFolder}/test/fft1.ll",
|
"${workspaceFolder}/test/fft1.ll",
|
||||||
"-o",
|
"-o",
|
||||||
|
@ -19,36 +34,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/lib/libCacheAnalysisPass.so",
|
"${fileDirname}/../build/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
|
||||||
// }
|
}
|
||||||
// ]
|
]
|
||||||
// }
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -3,16 +3,10 @@
|
||||||
// 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": " cd build ; ninja ",
|
"command": "./helper.sh all",
|
||||||
"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/refs/heads/main.zip
|
URL https://github.com/google/googletest/archive/05CC6081FCBD0071053DE78238E136B3.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 14.0.0 REQUIRED CONFIG)
|
find_package(LLVM 13.0.0 REQUIRED CONFIG)
|
||||||
|
|
||||||
# Another sanity check
|
# Another sanity check
|
||||||
if(NOT "14" VERSION_EQUAL "${LLVM_VERSION_MAJOR}")
|
if(NOT "13" 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,7 +1,5 @@
|
||||||
# RTSA-lab01-CacheAnalysis
|
# RTSA-lab01-CacheAnalysis
|
||||||
|
|
||||||
[![Build Status](http://129.217.34.203/api/badges/nils.hoelscher/RTSA-lab01-CacheAnalysis/status.svg)](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
|
||||||
|
@ -26,74 +24,17 @@ I am more than happy helping you install Linux on your machine.
|
||||||
|
|
||||||
## Setups
|
## Setups
|
||||||
|
|
||||||
### VS Code Docker dev container (recommended setup)
|
The easiest Way is to use the VM Image (pw:rtsa) provided here:
|
||||||
|
|
||||||
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!
|
<https://tu-dortmund.sciebo.de/s/JbvtbtEADx92eEG/authenticate>
|
||||||
|
|
||||||
<https://docs.docker.com/get-docker/>
|
On this VM you can simply open VS Code from the desktop and start coding.
|
||||||
|
|
||||||
<https://code.visualstudio.com/>
|
Following are native setups and some other unrecommended Setups are at the end of this Readme.
|
||||||
|
|
||||||
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.
|
Also read the VS Code setup, which might be interesting independent from your chosen Setup.
|
||||||
|
|
||||||
2.) I recommend you install the following extensions in vs code
|
### Mac Setup
|
||||||
|
|
||||||
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.
|
||||||
|
@ -106,7 +47,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:
|
||||||
|
|
||||||
|
@ -134,7 +75,66 @@ 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,22 +154,15 @@ 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](https://git.cs.tu-dortmund.de/nils.hoelscher/RTSA-lab01-CacheAnalysis/src/branch/master/UnitTest/UnitTest.cpp).
|
The best way to see what your function does is to use the 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](https://git.cs.tu-dortmund.de/nils.hoelscher/RTSA-lab01-CacheAnalysis/src/branch/master/UnitTest/UnitTest.cpp).
|
Please feel free to add more test cases to your liking in 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(MustJoinTests, MustJoinSameStates) {
|
TEST(UnitTest, 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(MustJoinTests, MustJoinDifferentStates) {
|
TEST(UnitTest, 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(MustJoinTests, 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(MustJoinTests, MustJoinDisjunctStates) {
|
TEST(UnitTest, MustJoinDisjunctStates) {
|
||||||
AbstractCache AC;
|
AbstractCache AC;
|
||||||
AC.addEmptyNode(0);
|
AC.addEmptyNode(0);
|
||||||
fillSetHighNumbers(AC.Nodes[0], 0);
|
fillSetHighNumbers(AC.Nodes[0], 0);
|
||||||
|
@ -98,77 +98,4 @@ TEST(MustJoinTests, 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=$LLVM_DIR ..
|
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DLT_LLVM_INSTALL_DIR=/usr ..
|
||||||
cd ..
|
cd ..
|
||||||
cp build/compile_commands.json compile_commands.json
|
cp build/compile_commands.json compile_commands.json
|
||||||
echo "==== Done! ===="
|
echo "==== Done! ===="
|
||||||
|
@ -27,16 +27,12 @@ compile () {
|
||||||
|
|
||||||
run () {
|
run () {
|
||||||
echo "==== Running $1 ===="
|
echo "==== Running $1 ===="
|
||||||
opt -load-pass-plugin build/lib/libCacheAnalysisPass.so \
|
opt -load-pass-plugin build/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"
|
||||||
|
@ -107,9 +103,6 @@ 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
|
||||||
;;
|
;;
|
||||||
|
@ -164,7 +157,6 @@ 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,17 +36,13 @@ 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_INCLUDE_TESTS=FALSE -DLLVM_TARGETS_TO_BUILD=host llvm-13.0.1.src/
|
cmake -DCMAKE_BUILD_TYPE=MinSizeRel -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
|
||||||
|
@ -141,9 +137,6 @@ 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
|
||||||
;;
|
;;
|
||||||
|
@ -201,7 +194,6 @@ 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…
Reference in New Issue