| """ |
| Script to assemble a text IR file and run FileCheck on the output with the |
| provided arguments. The first 2 arguments are the paths to the llvm-as and |
| FileCheck binaries, followed by arguments to be passed to FileCheck. The last |
| argument is the text IR file to disassemble. |
| |
| Usage: |
| python llvm-as-and-filecheck.py |
| <path to llvm-as> <path to FileCheck> |
| [arguments passed to FileCheck] <path to text IR file> |
| |
| """ |
| import sys |
| import os |
| import subprocess |
| |
| llvm_as = sys.argv[1] |
| filecheck = sys.argv[2] |
| filecheck_args = [ |
| filecheck |
| ] |
| |
| filecheck_args.extend(sys.argv[3:-1]) |
| ir_file = sys.argv[-1] |
| bitcode_file = ir_file + ".bc" |
| |
| # Verify the IR actually parses since FileCheck is too dumb to know. |
| assemble = subprocess.Popen([llvm_as, "-o", bitcode_file, ir_file]) |
| assemble.communicate() |
| |
| if assemble.returncode != 0: |
| print("stderr:") |
| print(assemble.stderr) |
| print("stdout:") |
| print(assemble.stdout) |
| sys.exit(0) |
| |
| filecheck_args.append("--input-file") |
| filecheck_args.append(ir_file) |
| |
| check = subprocess.Popen(filecheck_args) |
| check.communicate() |
| sys.exit(check.returncode) |