Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/artiq
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dc2c19f08f62
Choose a base ref
...
head repository: m-labs/artiq
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 60c214082cb7
Choose a head ref
  • 3 commits
  • 2 files changed
  • 1 contributor

Commits on Mar 29, 2016

  1. Copy the full SHA
    a948924 View commit details
  2. compiler: fix ARTIQ_DUMP_ELF.

    whitequark committed Mar 29, 2016
    Copy the full SHA
    f6b391b View commit details
  3. Copy the full SHA
    60c2140 View commit details
Showing with 18 additions and 6 deletions.
  1. +4 −2 artiq/compiler/targets.py
  2. +14 −4 artiq/compiler/transforms/llvm_ir_generator.py
6 changes: 4 additions & 2 deletions artiq/compiler/targets.py
Original file line number Diff line number Diff line change
@@ -46,12 +46,14 @@ def __exit__(self, exc_typ, exc_value, exc_trace):
def _dump(target, kind, suffix, content):
if target is not None:
print("====== {} DUMP ======".format(kind.upper()), file=sys.stderr)
content_bytes = bytes(content(), 'utf-8')
content_value = content()
if isinstance(content_value, str):
content_value = bytes(content_value, 'utf-8')
if target == "":
file = tempfile.NamedTemporaryFile(suffix=suffix, delete=False)
else:
file = open(target + suffix, "wb")
file.write(content_bytes)
file.write(content_value)
file.close()
print("{} dumped as {}".format(kind, file.name), file=sys.stderr)

18 changes: 14 additions & 4 deletions artiq/compiler/transforms/llvm_ir_generator.py
Original file line number Diff line number Diff line change
@@ -685,13 +685,17 @@ def llptr_to_var(self, llenv, env_ty, var_name, var_type=None):
inbounds=True)
llouterenv = self.llbuilder.load(llptr)
llouterenv.metadata['invariant.load'] = self.empty_metadata
llouterenv.metadata['nonnull'] = self.empty_metadata
return self.llptr_to_var(llouterenv, env_ty.params["$outer"], var_name)

def process_GetLocal(self, insn):
env = insn.environment()
llptr = self.llptr_to_var(self.map(env), env.type, insn.var_name)
llptr.name = "ptr.{}.{}".format(env.name, insn.var_name)
return self.llbuilder.load(llptr, name="val.{}.{}".format(env.name, insn.var_name))
llvalue = self.llbuilder.load(llptr, name="val.{}.{}".format(env.name, insn.var_name))
if isinstance(llvalue.type, ll.PointerType):
llvalue.metadata['nonnull'] = self.empty_metadata
return llvalue

def process_SetLocal(self, insn):
env = insn.environment()
@@ -810,9 +814,12 @@ def process_GetAttr(self, insn):
else:
llptr = self.llbuilder.gep(obj, [self.llindex(0), self.llindex(index)],
inbounds=True, name="ptr.{}".format(insn.name))
llval = self.llbuilder.load(llptr, name="val.{}".format(insn.name))
llval.metadata['invariant.load'] = self.empty_metadata
return llval
llvalue = self.llbuilder.load(llptr, name="val.{}".format(insn.name))
if types.is_instance(typ) and attr not in typ.constant_attributes:
llvalue.metadata['invariant.load'] = self.empty_metadata
if isinstance(llvalue.type, ll.PointerType):
llvalue.metadata['nonnull'] = self.empty_metadata
return llvalue

def process_SetAttr(self, insn):
typ, attr = insn.object().type, insn.attr
@@ -840,6 +847,8 @@ def process_GetElem(self, insn):
llelts = self.llbuilder.extract_value(self.map(insn.list()), 1)
llelt = self.llbuilder.gep(llelts, [self.map(insn.index())],
inbounds=True)
if isinstance(llelt.type, ll.PointerType):
llelt.metadata['nonnull'] = self.empty_metadata
return self.llbuilder.load(llelt)

def process_SetElem(self, insn):
@@ -1051,6 +1060,7 @@ def get_outer(llenv, env_ty):
inbounds=True)
llouterenv = self.llbuilder.load(llptr)
llouterenv.metadata['invariant.load'] = self.empty_metadata
llouterenv.metadata['nonnull'] = self.empty_metadata
return self.llptr_to_var(llouterenv, env_ty.params["$outer"], var_name)
else:
return llenv