blob: bfd56052cf004489ff2079f21f72245dc37edc5a [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# 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.
"""
from __future__ import print_function
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)