Skip to content

Commit

Permalink
Revert "Revert "Revert "Update for LLVM 3.9."""
Browse files Browse the repository at this point in the history
This reverts commit 0d76880.
whitequark committed Nov 8, 2016
1 parent a8fd697 commit 7b81ed1
Showing 3 changed files with 26 additions and 19 deletions.
5 changes: 4 additions & 1 deletion artiq/compiler/targets.py
Original file line number Diff line number Diff line change
@@ -86,11 +86,14 @@ def target_machine(self):
llmachine = lltarget.create_target_machine(
features=",".join(["+{}".format(f) for f in self.features]),
reloc="pic", codemodel="default")
llmachine.set_asm_verbosity(True)
llmachine.set_verbose(True)
return llmachine

def optimize(self, llmodule):
llmachine = self.target_machine()
llpassmgr = llvm.create_module_pass_manager()
llmachine.target_data.add_pass(llpassmgr)
llmachine.add_analysis_passes(llpassmgr)

# Register our alias analysis passes.
llpassmgr.add_basic_alias_analysis_pass()
38 changes: 21 additions & 17 deletions artiq/compiler/transforms/llvm_ir_generator.py
Original file line number Diff line number Diff line change
@@ -37,16 +37,9 @@ def memoized(self, *args):
class DebugInfoEmitter:
def __init__(self, llmodule):
self.llmodule = llmodule
self.llcompileunit = None
self.llsubprograms = []
self.cache = {}

llident = self.llmodule.add_named_metadata('llvm.ident')
llident.add(self.emit_metadata(["ARTIQ"]))

llflags = self.llmodule.add_named_metadata('llvm.module.flags')
llflags.add(self.emit_metadata([2, "Debug Info Version", 3]))
llflags.add(self.emit_metadata([2, "Dwarf Version", 4]))

def emit_metadata(self, operands):
def map_operand(operand):
if operand is None:
@@ -74,13 +67,14 @@ def emit_file(self, source_buffer):
})

@memoize
def emit_compile_unit(self, source_buffer):
def emit_compile_unit(self, source_buffer, llsubprograms):
return self.emit_debug_info("DICompileUnit", {
"language": ll.DIToken("DW_LANG_Python"),
"file": self.emit_file(source_buffer),
"producer": "ARTIQ",
"runtimeVersion": 0,
"emissionKind": 2, # full=1, lines only=2
"subprograms": self.emit_metadata(llsubprograms)
}, is_distinct=True)

@memoize
@@ -92,26 +86,21 @@ def emit_subroutine_type(self, typ):
@memoize
def emit_subprogram(self, func, llfunc):
source_buffer = func.loc.source_buffer

if self.llcompileunit is None:
self.llcompileunit = self.emit_compile_unit(source_buffer)
llcompileunits = self.llmodule.add_named_metadata('llvm.dbg.cu')
llcompileunits.add(self.llcompileunit)

display_name = "{}{}".format(func.name, types.TypePrinter().name(func.type))
return self.emit_debug_info("DISubprogram", {
llsubprogram = self.emit_debug_info("DISubprogram", {
"name": func.name,
"linkageName": llfunc.name,
"type": self.emit_subroutine_type(func.type),
"file": self.emit_file(source_buffer),
"line": func.loc.line(),
"unit": self.llcompileunit,
"scope": self.emit_file(source_buffer),
"scopeLine": func.loc.line(),
"isLocal": func.is_internal,
"isDefinition": True,
"variables": self.emit_metadata([])
}, is_distinct=True)
self.llsubprograms.append(llsubprogram)
return llsubprogram

@memoize
def emit_loc(self, loc, scope):
@@ -121,6 +110,18 @@ def emit_loc(self, loc, scope):
"scope": scope
})

def finalize(self, source_buffer):
llident = self.llmodule.add_named_metadata('llvm.ident')
llident.add(self.emit_metadata(["ARTIQ"]))

llflags = self.llmodule.add_named_metadata('llvm.module.flags')
llflags.add(self.emit_metadata([2, "Debug Info Version", 3]))
llflags.add(self.emit_metadata([2, "Dwarf Version", 4]))

llcompile_units = self.llmodule.add_named_metadata('llvm.dbg.cu')
llcompile_units.add(self.emit_compile_unit(source_buffer, tuple(self.llsubprograms)))


class LLVMIRGenerator:
def __init__(self, engine, module_name, target, embedding_map):
self.engine = engine
@@ -409,6 +410,9 @@ def process(self, functions, attribute_writeback):
for func in functions:
self.process_function(func)

if any(functions):
self.debug_info_emitter.finalize(functions[0].loc.source_buffer)

if attribute_writeback and self.embedding_map is not None:
self.emit_attribute_writeback()

2 changes: 1 addition & 1 deletion conda/artiq/meta.yaml
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ requirements:
- binutils-or1k-linux
run:
- python >=3.5.2
- llvmlite-artiq 0.11.0.dev py35_25
- llvmlite-artiq 0.10.0.dev py35_24
- lit
- outputcheck
- scipy

0 comments on commit 7b81ed1

Please sign in to comment.