1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00
llvm-mirror/utils/bisect
Jinsong Ji 1bcb6d2dd5 [Utils][NFC] Copy bisect usage documents from commit msg into script.
Copy the message into script, so that new users won't need to dig into
commit messages to figure out how to use.

The message are copied directly from Michael's commit message in
https://reviews.llvm.org/rL214610.

llvm-svn: 369054
2019-08-15 22:07:59 +00:00

50 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python
#
# The way you use this is you create a script that takes in as its first
# argument a count. The script passes into LLVM the count via a command
# line flag that disables a pass after LLVM has run after the pass has
# run for count number of times. Then the script invokes a test of some
# sort and indicates whether LLVM successfully compiled the test via the
# scripts exit status. Then you invoke bisect as follows:
#
# bisect --start=<start_num> --end=<end_num> ./script.sh "%(count)s"
#
# And bisect will continually call ./script.sh with various counts using
# the exit status to determine success and failure.
#
import os
import sys
import argparse
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('--start', type=int, default=0)
parser.add_argument('--end', type=int, default=(1 << 32))
parser.add_argument('command', nargs='+')
args = parser.parse_args()
start = args.start
end = args.end
print("Bisect 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 Count: %d with (Start, End) = (%d,%d)" % (count, start, end))
cmd = [x % {'count':count} for x in args.command]
print cmd
result = subprocess.call(cmd)
if result == 0:
print(" PASSES! Setting start to count")
start = count
else:
print(" FAILS! Setting end to count")
end = count
print("Last good count: %d" % start)