blob: 377dcf390d8468f1880e620761cf9693676702b1 [file] [edit]
# For manual usage, not as a part of lit tests. Used for generating fence.ll
from string import Template
from itertools import product
fence_func = Template(
"""
define void @fence_${ordering}_${ptx_scope}() {
fence syncscope(\"${llvm_scope}\") ${ordering}
ret void
}
"""
)
run_statement = Template(
"""; RUN: llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} | FileCheck %s --check-prefix=SM${sm}
; RUN: %if ptxas-sm_${sm} && ptxas-isa-${ptxfp} %{ llc < %s -march=nvptx64 -mcpu=sm_${sm} -mattr=+ptx${ptx} | %ptxas-verify -arch=sm_${sm} %}"""
)
# (sm, ptx)
TESTS = [(30, 50), (70, 60), (90, 87)]
LLVM_SCOPES = ["singlethread", "", "block", "cluster", "device"]
SCOPE_LLVM_TO_PTX = {
"singlethread": "thread",
"": "sys",
"block": "cta",
"cluster": "cluster",
"device": "gpu",
}
ORDERINGS = ["acquire", "release", "acq_rel", "seq_cst"]
if __name__ == "__main__":
with open("fence.ll", "w") as fp:
for sm, ptx in TESTS:
print(run_statement.substitute(sm=sm, ptx=ptx, ptxfp=ptx / 10.0), file=fp)
print(
"; NOTE: Please do not modify this file manually- instead modify fence.py",
file=fp,
)
for ordering, llvm_scope in product(ORDERINGS, LLVM_SCOPES):
print(
fence_func.substitute(
llvm_scope=llvm_scope,
ptx_scope=SCOPE_LLVM_TO_PTX[llvm_scope],
ordering=ordering,
),
file=fp,
)