xref: /llvm-project/llvm/test/tools/llvm-reduce/Inputs/llvm-dis-and-filecheck.py (revision 363d99db49a1ded7d31c7253d203f737d269ad86)
128d95a26SFlorian Hahn"""
228d95a26SFlorian HahnScript to disassembles a bitcode file and run FileCheck on the output with the
328d95a26SFlorian Hahnprovided arguments. The first 2 arguments are the paths to the llvm-dis and
428d95a26SFlorian HahnFileCheck binaries, followed by arguments to be passed to FileCheck. The last
528d95a26SFlorian Hahnargument is the bitcode file to disassemble.
628d95a26SFlorian Hahn
728d95a26SFlorian HahnUsage:
828d95a26SFlorian Hahn    python llvm-dis-and-filecheck.py
928d95a26SFlorian Hahn      <path to llvm-dis> <path to FileCheck>
1028d95a26SFlorian Hahn      [arguments passed to FileCheck] <path to bitcode file>
1128d95a26SFlorian Hahn
1228d95a26SFlorian Hahn"""
1328d95a26SFlorian Hahn
1428d95a26SFlorian Hahn
1528d95a26SFlorian Hahnimport sys
166b3956e1SMatthew Vossimport os
1728d95a26SFlorian Hahnimport subprocess
1828d95a26SFlorian Hahn
1928d95a26SFlorian Hahnllvm_dis = sys.argv[1]
2028d95a26SFlorian Hahnfilecheck = sys.argv[2]
21b71edfaaSTobias Hietafilecheck_args = [
22b71edfaaSTobias Hieta    filecheck,
23b71edfaaSTobias Hieta]
2428d95a26SFlorian Hahnfilecheck_args.extend(sys.argv[3:-1])
2528d95a26SFlorian Hahnbitcode_file = sys.argv[-1]
266b3956e1SMatthew Vossir_file = bitcode_file + ".ll"
2728d95a26SFlorian Hahn
28*363d99dbSMatt Arsenaultdisassemble = subprocess.Popen([llvm_dis, "--preserve-ll-uselistorder", "-o", ir_file, bitcode_file])
296b3956e1SMatthew Vossif os.path.exists(ir_file + ".0"):
306b3956e1SMatthew Voss    ir_file = ir_file + ".0"
316b3956e1SMatthew Voss
326b3956e1SMatthew Vossdisassemble.communicate()
336b3956e1SMatthew Voss
346b3956e1SMatthew Vossif disassemble.returncode != 0:
356b3956e1SMatthew Voss    print("stderr:")
366b3956e1SMatthew Voss    print(disassemble.stderr)
376b3956e1SMatthew Voss    print("stdout:")
386b3956e1SMatthew Voss    print(disassemble.stdout)
396b3956e1SMatthew Voss    sys.exit(1)
406b3956e1SMatthew Voss
416b3956e1SMatthew Vosscheck = None
426b3956e1SMatthew Vosswith open(ir_file, "r") as ir:
436b3956e1SMatthew Voss    check = subprocess.Popen(filecheck_args, stdin=ir, stdout=sys.stdout)
4428d95a26SFlorian Hahncheck.communicate()
4528d95a26SFlorian Hahnsys.exit(check.returncode)
46