xref: /llvm-project/llvm/test/tools/llvm-reduce/Inputs/llvm-as-and-filecheck.py (revision 11ad5401187761e7b4a4315b38125188037b60e8)
1*11ad5401SMatt Arsenault"""
2*11ad5401SMatt ArsenaultScript to assemble a text IR file and run FileCheck on the output with the
3*11ad5401SMatt Arsenaultprovided arguments. The first 2 arguments are the paths to the llvm-as and
4*11ad5401SMatt ArsenaultFileCheck binaries, followed by arguments to be passed to FileCheck. The last
5*11ad5401SMatt Arsenaultargument is the text IR file to disassemble.
6*11ad5401SMatt Arsenault
7*11ad5401SMatt ArsenaultUsage:
8*11ad5401SMatt Arsenault    python llvm-as-and-filecheck.py
9*11ad5401SMatt Arsenault      <path to llvm-as> <path to FileCheck>
10*11ad5401SMatt Arsenault      [arguments passed to FileCheck] <path to text IR file>
11*11ad5401SMatt Arsenault
12*11ad5401SMatt Arsenault"""
13*11ad5401SMatt Arsenaultimport sys
14*11ad5401SMatt Arsenaultimport os
15*11ad5401SMatt Arsenaultimport subprocess
16*11ad5401SMatt Arsenault
17*11ad5401SMatt Arsenaultllvm_as = sys.argv[1]
18*11ad5401SMatt Arsenaultfilecheck = sys.argv[2]
19*11ad5401SMatt Arsenaultfilecheck_args = [
20*11ad5401SMatt Arsenault    filecheck
21*11ad5401SMatt Arsenault]
22*11ad5401SMatt Arsenault
23*11ad5401SMatt Arsenaultfilecheck_args.extend(sys.argv[3:-1])
24*11ad5401SMatt Arsenaultir_file = sys.argv[-1]
25*11ad5401SMatt Arsenaultbitcode_file = ir_file + ".bc"
26*11ad5401SMatt Arsenault
27*11ad5401SMatt Arsenault# Verify the IR actually parses since FileCheck is too dumb to know.
28*11ad5401SMatt Arsenaultassemble = subprocess.Popen([llvm_as, "-o", bitcode_file, ir_file])
29*11ad5401SMatt Arsenaultassemble.communicate()
30*11ad5401SMatt Arsenault
31*11ad5401SMatt Arsenaultif assemble.returncode != 0:
32*11ad5401SMatt Arsenault    print("stderr:")
33*11ad5401SMatt Arsenault    print(assemble.stderr)
34*11ad5401SMatt Arsenault    print("stdout:")
35*11ad5401SMatt Arsenault    print(assemble.stdout)
36*11ad5401SMatt Arsenault    sys.exit(0)
37*11ad5401SMatt Arsenault
38*11ad5401SMatt Arsenaultfilecheck_args.append("--input-file")
39*11ad5401SMatt Arsenaultfilecheck_args.append(ir_file)
40*11ad5401SMatt Arsenault
41*11ad5401SMatt Arsenaultcheck = subprocess.Popen(filecheck_args)
42*11ad5401SMatt Arsenaultcheck.communicate()
43*11ad5401SMatt Arsenaultsys.exit(check.returncode)
44