From 442673076f1f4c48be21f76ac43f01bbb48814db Mon Sep 17 00:00:00 2001 From: whitequark Date: Wed, 24 Feb 2016 17:13:17 +0000 Subject: [PATCH] compiler: setting ARTIQ_DUMP_* dumps to a file instead of stderr. --- artiq/compiler/targets.py | 45 ++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/artiq/compiler/targets.py b/artiq/compiler/targets.py index 5ee8213ed..81416ca7f 100644 --- a/artiq/compiler/targets.py +++ b/artiq/compiler/targets.py @@ -43,6 +43,17 @@ class RunTool: for f in self.files: f.close() +def _dump(target, kind, suffix, content): + if target is not None: + print("====== {} DUMP ======".format(kind.upper()), file=sys.stderr) + if target == "": + file = tempfile.NamedTemporaryFile(suffix, delete=False) + else: + file = open(target + suffix, "wb") + file.write(content()) + file.close() + print("{} dumped as {}".format(kind, file.name), file=sys.stderr) + class Target: """ A description of the target environment where the binaries @@ -73,11 +84,9 @@ class Target: print("====== MODULE_SIGNATURE DUMP ======", file=sys.stderr) print(module, file=sys.stderr) - if os.getenv("ARTIQ_DUMP_IR"): - print("====== ARTIQ IR DUMP ======", file=sys.stderr) - type_printer = types.TypePrinter() - for function in module.artiq_ir: - print(function.as_entity(type_printer), file=sys.stderr) + type_printer = types.TypePrinter() + _dump(os.getenv("ARTIQ_DUMP_IR"), "ARTIQ IR", ".txt", + lambda: "\n".join(fn.as_entity(type_printer) for fn in module.artiq_ir)) llmod = module.build_llvm_ir(self) @@ -85,13 +94,11 @@ class Target: llparsedmod = llvm.parse_assembly(str(llmod)) llparsedmod.verify() except RuntimeError: - print("====== LLVM IR DUMP (PARSE FAILED) ======", file=sys.stderr) - print(str(llmod), file=sys.stderr) + _dump("", "LLVM IR (broken)", ".ll", lambda: str(llmod)) raise - if os.getenv("ARTIQ_DUMP_LLVM"): - print("====== LLVM IR DUMP ======", file=sys.stderr) - print(str(llparsedmod), file=sys.stderr) + _dump(os.getenv("ARTIQ_DUMP_UNOPT_LLVM"), "LLVM IR (generated)", "_unopt.ll", + lambda: str(llparsedmod)) llpassmgrbuilder = llvm.create_pass_manager_builder() llpassmgrbuilder.opt_level = 2 # -O2 @@ -102,18 +109,16 @@ class Target: llpassmgrbuilder.populate(llpassmgr) llpassmgr.run(llparsedmod) - if os.getenv("ARTIQ_DUMP_LLVM"): - print("====== LLVM IR DUMP (OPTIMIZED) ======", file=sys.stderr) - print(str(llparsedmod), file=sys.stderr) + _dump(os.getenv("ARTIQ_DUMP_LLVM"), "LLVM IR (optimized)", ".ll", + lambda: str(llparsedmod)) lltarget = llvm.Target.from_triple(self.triple) llmachine = lltarget.create_target_machine( features=",".join(["+{}".format(f) for f in self.features]), reloc="pic", codemodel="default") - if os.getenv("ARTIQ_DUMP_ASSEMBLY"): - print("====== ASSEMBLY DUMP ======", file=sys.stderr) - print(llmachine.emit_assembly(llparsedmod), file=sys.stderr) + _dump(os.getenv("ARTIQ_DUMP_ASM"), "Assembly", ".s", + lambda: llmachine.emit_assembly(llparsedmod)) return llmachine.emit_object(llparsedmod) @@ -127,12 +132,8 @@ class Target: as results: library = results["output"].read() - if os.getenv("ARTIQ_DUMP_ELF"): - shlib_temp = tempfile.NamedTemporaryFile(suffix=".so", delete=False) - shlib_temp.write(library) - shlib_temp.close() - print("====== SHARED LIBRARY DUMP ======", file=sys.stderr) - print("Shared library dumped as {}".format(shlib_temp.name), file=sys.stderr) + _dump(os.getenv("ARTIQ_DUMP_ELF"), "Shared library", ".so", + lambda: library) return library