#!/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)