Files
TheRock/rocm-libraries/shared/rocroller/scripts/remove_unused_macros.py
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

78 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
import argparse
import re
import utils
macro_definition = re.compile(r"^\s*\.macro\s+(\w+)\s+.*$")
macro_end = re.compile(r".endm(acro)?.*\n+")
set_definition = re.compile(r"^\s*\.set\s+(\w+),.*$")
set_end = re.compile(r"\n")
"""
This script removes unused macros from a kernel file.
"""
def is_macro_used(my_lines, macro_name):
macro_usage = re.compile(r"^\s*" + macro_name + r"\s+.*$")
counter = 0
for my_line in my_lines:
macro = macro_usage.match(my_line)
if macro:
counter += 1
return counter > 0
def is_id_used(my_lines, id_name):
id_usage = re.compile(r"^.*" + id_name + r".*$")
counter = 0
for my_line in my_lines:
id_match = id_usage.match(my_line)
if id_match:
counter += 1
return counter > 1
def removeUnusedMacros(full_text):
result = full_text
# Repeat until there is no change.
# This allows us to remove macors that are only used in macros that are removed.
while True:
prev_result = result
cleaned_lines = utils.clean_lines(result.split("\n"), False)
for line in cleaned_lines:
macro = macro_definition.match(line)
if macro and not is_macro_used(cleaned_lines, macro.group(1)):
result = utils.remove_all_between_regex(
result, re.compile(re.escape(line)), macro_end
)
var_set = set_definition.match(line)
if var_set and not is_id_used(cleaned_lines, var_set.group(1)):
result = utils.remove_all_between_regex(
result, re.compile(re.escape(line)), set_end
)
if result == prev_result:
break
return result
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Removes unused macros from a kernel file."
)
parser.add_argument("input_file", type=str, help="File with AMD GPU machine code")
args = parser.parse_args()
with open(args.input_file) as f:
full_text = f.read()
print(removeUnusedMacros(full_text))