#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The ChromiumOS 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)
