xref: /aosp_15_r20/external/llvm/utils/bisect (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker#!/usr/bin/env python
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerimport os
4*9880d681SAndroid Build Coastguard Workerimport sys
5*9880d681SAndroid Build Coastguard Workerimport argparse
6*9880d681SAndroid Build Coastguard Workerimport subprocess
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerparser = argparse.ArgumentParser()
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerparser.add_argument('--start', type=int, default=0)
11*9880d681SAndroid Build Coastguard Workerparser.add_argument('--end', type=int, default=(1 << 32))
12*9880d681SAndroid Build Coastguard Workerparser.add_argument('command', nargs='+')
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerargs = parser.parse_args()
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerstart = args.start
17*9880d681SAndroid Build Coastguard Workerend = args.end
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerprint("Bisect Starting!")
20*9880d681SAndroid Build Coastguard Workerprint("Start: %d" % start)
21*9880d681SAndroid Build Coastguard Workerprint("End: %d" % end)
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerlast = None
24*9880d681SAndroid Build Coastguard Workerwhile start != end and start != end-1:
25*9880d681SAndroid Build Coastguard Worker    count = start + (end - start)/2
26*9880d681SAndroid Build Coastguard Worker    print("Visiting Count: %d with (Start, End) = (%d,%d)" % (count, start, end))
27*9880d681SAndroid Build Coastguard Worker    cmd = [x % {'count':count} for x in args.command]
28*9880d681SAndroid Build Coastguard Worker    print cmd
29*9880d681SAndroid Build Coastguard Worker    result = subprocess.call(cmd)
30*9880d681SAndroid Build Coastguard Worker    if result == 0:
31*9880d681SAndroid Build Coastguard Worker        print("    PASSES! Setting start to count")
32*9880d681SAndroid Build Coastguard Worker        start = count
33*9880d681SAndroid Build Coastguard Worker    else:
34*9880d681SAndroid Build Coastguard Worker        print("    FAILS! Setting end to count")
35*9880d681SAndroid Build Coastguard Worker        end = count
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerprint("Last good count: %d" % start)
38