-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[AMDGPU][test] fix the error case in update_mc_test_check script #112731
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,6 @@ | ||
// RUN: not llvm-mc -triple=amdgcn -show-encoding %s 2>&1 | FileCheck --check-prefixes=CHECK %s | ||
// RUN: not llvm-mc -triple=amdgcn -show-encoding %s 2>&1 | FileCheck --check-prefixes=CHECKA %s | ||
// RUN: not llvm-mc -triple=amdgcn %s 2>&1 | FileCheck --check-prefixes=CHECKB %s | ||
|
||
v_bfrev_b32 v5, v299 | ||
|
||
v_bfrev_b32 v5, v1 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,11 @@ | ||
// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py | ||
// RUN: not llvm-mc -triple=amdgcn -show-encoding %s 2>&1 | FileCheck --check-prefixes=CHECK %s | ||
// RUN: not llvm-mc -triple=amdgcn -show-encoding %s 2>&1 | FileCheck --check-prefixes=CHECKA %s | ||
// RUN: not llvm-mc -triple=amdgcn %s 2>&1 | FileCheck --check-prefixes=CHECKB %s | ||
|
||
v_bfrev_b32 v5, v299 | ||
// CHECK: :[[@LINE-1]]:17: error: register index is out of range | ||
// CHECKA: :[[@LINE-1]]:17: error: register index is out of range | ||
// CHECKB: :[[@LINE-2]]:17: error: register index is out of range | ||
|
||
v_bfrev_b32 v5, v1 | ||
// CHECKA: v_bfrev_b32_e32 v5, v1 ; encoding: [0x01,0x71,0x0a,0x7e] | ||
// CHECKB: v_bfrev_b32_e32 v5, v1 |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,15 +16,14 @@ | |
|
||
mc_LIKE_TOOLS = [ | ||
"llvm-mc", | ||
"not llvm-mc", | ||
] | ||
ERROR_RE = re.compile(r":\d+: (warning|error): .*") | ||
ERROR_CHECK_RE = re.compile(r"# COM: .*") | ||
OUTPUT_SKIPPED_RE = re.compile(r"(.text)") | ||
COMMENT = {"asm": "//", "dasm": "#"} | ||
|
||
|
||
def invoke_tool(exe, cmd_args, testline, verbose=False): | ||
def invoke_tool(exe, check_rc, cmd_args, testline, verbose=False): | ||
if isinstance(cmd_args, list): | ||
args = [applySubstitutions(a, substitutions) for a in cmd_args] | ||
else: | ||
|
@@ -33,7 +32,15 @@ def invoke_tool(exe, cmd_args, testline, verbose=False): | |
cmd = 'echo "' + testline + '" | ' + exe + " " + args | ||
if verbose: | ||
print("Command: ", cmd) | ||
out = subprocess.check_output(cmd, shell=True) | ||
|
||
out = subprocess.run( | ||
cmd, | ||
shell=True, | ||
check=check_rc, | ||
stdout=subprocess.PIPE, | ||
stderr=subprocess.DEVNULL, | ||
).stdout | ||
|
||
# Fix line endings to unix CR style. | ||
return out.decode().replace("\r\n", "\n") | ||
|
||
|
@@ -102,8 +109,16 @@ def getStdCheckLine(prefix, output, mc_mode): | |
return o | ||
|
||
|
||
def getErrCheckLine(prefix, output, mc_mode): | ||
return COMMENT[mc_mode] + " " + prefix + ": " + ":[[@LINE-1]]" + output + "\n" | ||
def getErrCheckLine(prefix, output, mc_mode, line_offset=1): | ||
return ( | ||
COMMENT[mc_mode] | ||
+ " " | ||
+ prefix | ||
+ ": " | ||
+ ":[[@LINE-{}]]".format(line_offset) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Aren't we allowed to use f-strings in these scripts? I see
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think surely we can use f string. It seems the trend is to switch to f string? I will keep that in mind. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I agree an f-string would make this easier to read. |
||
+ output | ||
+ "\n" | ||
) | ||
|
||
|
||
def main(): | ||
|
@@ -174,11 +189,19 @@ def main(): | |
assert len(commands) >= 2 | ||
mc_cmd = " | ".join(commands[:-1]) | ||
filecheck_cmd = commands[-1] | ||
mc_tool = mc_cmd.split(" ")[0] | ||
|
||
# special handling for negating exit status | ||
if mc_tool == "not": | ||
mc_tool = mc_tool + " " + mc_cmd.split(" ")[1] | ||
# if not is used in runline, disable rc check, since | ||
# the command might or might not | ||
# return non-zero code on a single line run | ||
check_rc = True | ||
mc_cmd_args = mc_cmd.strip().split() | ||
if mc_cmd_args[0] == "not": | ||
check_rc = False | ||
mc_tool = mc_cmd_args[1] | ||
mc_cmd = mc_cmd[len(mc_cmd_args[0]) :].strip() | ||
else: | ||
mc_tool = mc_cmd_args[0] | ||
|
||
triple_in_cmd = None | ||
m = common.TRIPLE_ARG_RE.search(mc_cmd) | ||
|
@@ -211,6 +234,7 @@ def main(): | |
( | ||
check_prefixes, | ||
mc_tool, | ||
check_rc, | ||
mc_cmd_args, | ||
triple_in_cmd, | ||
march_in_cmd, | ||
|
@@ -231,6 +255,7 @@ def main(): | |
for ( | ||
prefixes, | ||
mc_tool, | ||
check_rc, | ||
mc_args, | ||
triple_in_cmd, | ||
march_in_cmd, | ||
|
@@ -249,6 +274,7 @@ def main(): | |
# get output for each testline | ||
out = invoke_tool( | ||
ti.args.llvm_mc_binary or mc_tool, | ||
check_rc, | ||
mc_args, | ||
line, | ||
verbose=ti.args.verbose, | ||
|
@@ -305,6 +331,9 @@ def main(): | |
# each run_id can only be used once | ||
gen_prefix = "" | ||
used_runid = set() | ||
|
||
# line number diff between generated prefix and testline | ||
line_offset = 1 | ||
for prefix, tup in p_dict_sorted.items(): | ||
o, run_ids = tup | ||
|
||
|
@@ -321,9 +350,13 @@ def main(): | |
used_prefixes.add(prefix) | ||
|
||
if hasErr(o): | ||
gen_prefix += getErrCheckLine(prefix, o, mc_mode) | ||
newline = getErrCheckLine(prefix, o, mc_mode, line_offset) | ||
else: | ||
gen_prefix += getStdCheckLine(prefix, o, mc_mode) | ||
newline = getStdCheckLine(prefix, o, mc_mode) | ||
|
||
if newline: | ||
gen_prefix += newline | ||
line_offset += 1 | ||
|
||
generated_prefixes[input_line] = gen_prefix.rstrip("\n") | ||
|
||
|
Uh oh!
There was an error while loading. Please reload this page.