Mercurial > hg > CbC > CbC_llvm
diff utils/bisect-skip-count @ 121:803732b1fca8
LLVM 5.0
author | kono |
---|---|
date | Fri, 27 Oct 2017 17:07:41 +0900 |
parents | |
children | c2174574ed3a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utils/bisect-skip-count Fri Oct 27 17:07:41 2017 +0900 @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# This script is used to bisect skip and count arguments for --debug-counter. +# It is similar to bisect, except it understands how to increase skip and decrease count +import os +import sys +import argparse +# This is for timeout support. Use the recommended way of import. +# We do timeouts because when doing, execution testing, we have a habit +# of finding variants that infinite loop +if os.name == 'posix' and sys.version_info[0] < 3: + import subprocess32 as subprocess +else: + import subprocess +parser = argparse.ArgumentParser() + +parser.add_argument('--skipstart', type=int, default=0) +parser.add_argument('--skipend', type=int, default=(1 << 32)) +parser.add_argument('--countstart', type=int, default=0) +parser.add_argument('--countend', type=int, default=(1 << 32)) +parser.add_argument('--timeout', type=int, default=None) +# Use shell support if you need to use complex shell expressions in your command +parser.add_argument('--shell', type=bool, default=False) +parser.add_argument('command', nargs='+') + +args = parser.parse_args() + +start = args.skipstart +end = args.skipend + +print("Bisect of Skip starting!") +print("Start: %d" % start) +print("End: %d" % end) + +last = None +while start != end and start != end-1: + count = start + (end - start)/2 + print("Visiting Skip: %d with (Start, End) = (%d,%d)" % (count, start, end)) + cmd = [x % {'skip':count, 'count':-1} for x in args.command] + print cmd + try: + result = subprocess.call(cmd, shell=args.shell, timeout=args.timeout) + if result == 0: + print(" PASSES! Setting end to count") + end = count + else: + print(" FAILS! Setting start to count") + start = count + except: + print(" TIMEOUT, setting end to count") + end = count +firstcount = start +print("Last good skip: %d" % start) +start = args.countstart +end = args.countend +print("Bisect of Count starting!") +print("Start: %d" % start) +print("End: %d" % end) +while start != end and start != end-1: + count = start + (end - start)/2 + print("Visiting Count: %d with (Start, End) = (%d,%d)" % (count, start, end)) + cmd = [x % {'count':count, 'skip':firstcount } for x in args.command] + print cmd + try: + result = subprocess.call(cmd, shell=args.shell, timeout=args.timeout) + if result == 0: + print(" PASSES! Setting start to count") + start = count + else: + print(" FAILS! Setting end to count") + end = count + except: + print(" TIMEOUT, setting start to count") + start = count + +print("Last good count: %d" % start)