CompilerSysY/scripts/analyzer.py
2023-05-06 18:54:00 +08:00

47 lines
1.5 KiB
Python

import os
import subprocess
from pretty_print import Print_C
class Analyzer:
def __init__(self, scheme, emit_llvm_ir, testcases) -> None:
self.scheme = scheme
self.emit_llvm_ir = emit_llvm_ir
self.testcases = testcases
self.asm_template = f"build/test_results/{{testcase}}/asm/{scheme}.s"
self.perf_template = f"build/test_results/{{testcase}}/analyze/perf/{scheme}.txt"
self.llvm_mca_template = f"build/test_results/{{testcase}}/analyze/llvm_mca/{scheme}.txt"
for testcase in testcases:
self.__generate_path(testcase)
def __generate_path(self, testcase):
llvm_mca_path = f"build/test_results/{testcase}/analyze/llvm_mca/"
perf_path = f"build/test_results/{testcase}/analyze/perf/"
if not os.path.exists(llvm_mca_path):
os.makedirs(llvm_mca_path)
if not os.path.exists(perf_path):
os.makedirs(perf_path)
def run_perf(self): # TODO
pass
def run_llvm_mca(self, testcase):
asm = self.asm_template.format(testcase=testcase)
llvm_mca = self.llvm_mca_template.format(testcase=testcase)
llvm_mca_file = open(llvm_mca, "w+")
subprocess.run(f"llvm-mca -mtriple=armv7 -mcpu=cortex-a72 -timeline {asm}".split(), stdout=llvm_mca_file, bufsize=1)
llvm_mca_file.close()
def analyze(self):
for testcase in self.testcases:
Print_C.print_subheader(f"[Analyzing {self.scheme} | {testcase}]")
# self.run_llvm_mca(testcase=testcase)
# self.run_perf()