Skip to content

Commit edb7423

Browse files
author
whitequark
committedJan 10, 2016
transforms.llvm_ir_generator: use getelementptr inbounds.
1 parent a2a00e8 commit edb7423

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed
 

Diff for: ‎artiq/compiler/transforms/llvm_ir_generator.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -616,18 +616,21 @@ def process_Alloc(self, insn):
616616
llalloc = self.llbuilder.alloca(self.llty_of_type(insn.type, bare=True))
617617
for index, operand in enumerate(insn.operands):
618618
lloperand = self.map(operand)
619-
llfieldptr = self.llbuilder.gep(llalloc, [self.llindex(0), self.llindex(index)])
619+
llfieldptr = self.llbuilder.gep(llalloc, [self.llindex(0), self.llindex(index)],
620+
inbounds=True)
620621
self.llbuilder.store(lloperand, llfieldptr)
621622
return llalloc
622623

623624
def llptr_to_var(self, llenv, env_ty, var_name, var_type=None):
624625
if var_name in env_ty.params and (var_type is None or
625626
env_ty.params[var_name] == var_type):
626627
var_index = list(env_ty.params.keys()).index(var_name)
627-
return self.llbuilder.gep(llenv, [self.llindex(0), self.llindex(var_index)])
628+
return self.llbuilder.gep(llenv, [self.llindex(0), self.llindex(var_index)],
629+
inbounds=True)
628630
else:
629631
outer_index = list(env_ty.params.keys()).index("$outer")
630-
llptr = self.llbuilder.gep(llenv, [self.llindex(0), self.llindex(outer_index)])
632+
llptr = self.llbuilder.gep(llenv, [self.llindex(0), self.llindex(outer_index)],
633+
inbounds=True)
631634
llouterenv = self.llbuilder.load(llptr)
632635
llouterenv.metadata['invariant.load'] = self.empty_metadata
633636
return self.llptr_to_var(llouterenv, env_ty.params["$outer"], var_name)
@@ -671,14 +674,14 @@ def process_GetAttr(self, insn):
671674
else:
672675
llptr = self.llbuilder.gep(self.map(insn.object()),
673676
[self.llindex(0), self.llindex(self.attr_index(insn))],
674-
name=insn.name)
677+
inbounds=True, name=insn.name)
675678
return self.llbuilder.load(llptr)
676679

677680
def process_SetAttr(self, insn):
678681
assert builtins.is_allocated(insn.object().type)
679682
llptr = self.llbuilder.gep(self.map(insn.object()),
680683
[self.llindex(0), self.llindex(self.attr_index(insn))],
681-
name=insn.name)
684+
inbounds=True, name=insn.name)
682685
return self.llbuilder.store(self.map(insn.value()), llptr)
683686

684687
def process_GetElem(self, insn):
@@ -876,7 +879,8 @@ def process_Builtin(self, insn):
876879
def get_outer(llenv, env_ty):
877880
if "$outer" in env_ty.params:
878881
outer_index = list(env_ty.params.keys()).index("$outer")
879-
llptr = self.llbuilder.gep(llenv, [self.llindex(0), self.llindex(outer_index)])
882+
llptr = self.llbuilder.gep(llenv, [self.llindex(0), self.llindex(outer_index)],
883+
inbounds=True)
880884
llouterenv = self.llbuilder.load(llptr)
881885
llouterenv.metadata['invariant.load'] = self.empty_metadata
882886
return self.llptr_to_var(llouterenv, env_ty.params["$outer"], var_name)
@@ -1258,7 +1262,8 @@ def process_LandingPad(self, insn):
12581262
cleanup=True)
12591263
llrawexn = self.llbuilder.extract_value(lllandingpad, 1)
12601264
llexn = self.llbuilder.bitcast(llrawexn, self.llty_of_type(insn.type))
1261-
llexnnameptr = self.llbuilder.gep(llexn, [self.llindex(0), self.llindex(0)])
1265+
llexnnameptr = self.llbuilder.gep(llexn, [self.llindex(0), self.llindex(0)],
1266+
inbounds=True)
12621267
llexnname = self.llbuilder.load(llexnnameptr)
12631268

12641269
for target, typ in insn.clauses():

0 commit comments

Comments
 (0)
Please sign in to comment.