aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool/test/cmd_script.py
blob: b0475c708952f835adc07d72449373f34cfc80c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Command script without compiler support for pass level bisection.

This script generates a pseudo log which a workable compiler should print out.
It assumes that -opt-bisect-limit and -print-debug-counter are supported by the
compiler.
"""


import os
import sys

from binary_search_tool.test import common


def Main(argv):
    if not os.path.exists("./is_setup"):
        return 1

    if len(argv) != 3:
        return 1

    limit_flags = os.environ["LIMIT_FLAGS"]
    opt_bisect_exist = False
    debug_counter_exist = False

    for option in limit_flags.split():
        if "-opt-bisect-limit" in option:
            opt_bisect_limit = int(option.split("=")[-1])
            opt_bisect_exist = True
        if "-debug-counter=" in option:
            debug_counter = int(option.split("=")[-1])
            debug_counter_exist = True

    if not opt_bisect_exist:
        return 1

    # Manually set total number and bad number
    total_pass = 10
    total_transform = 20
    bad_pass = int(argv[1])
    bad_transform = int(argv[2])

    if opt_bisect_limit == -1:
        opt_bisect_limit = total_pass

    for i in range(1, total_pass + 1):
        bisect_str = (
            "BISECT: %srunning pass (%d) Combine redundant "
            "instructions on function (f1)"
            % ("NOT " if i > opt_bisect_limit else "", i)
        )
        print(bisect_str, file=sys.stderr)

    if debug_counter_exist:
        print("Counters and values:", file=sys.stderr)
        print(
            "instcombine-visit : {%d, 0, %d}"
            % (total_transform, debug_counter),
            file=sys.stderr,
        )

    if opt_bisect_limit > bad_pass or (
        debug_counter_exist and debug_counter > bad_transform
    ):
        common.WriteWorkingSet([1])
    else:
        common.WriteWorkingSet([0])

    return 0


if __name__ == "__main__":
    retval = Main(sys.argv)
    sys.exit(retval)