mirror of https://github.com/m-labs/artiq.git
Commit missing parts of 1d8b0d46
.
This commit is contained in:
parent
1038f1321f
commit
3ed852e077
|
@ -1317,19 +1317,20 @@ class LLVMIRGenerator:
|
||||||
return llresult
|
return llresult
|
||||||
|
|
||||||
def process_Invoke(self, insn):
|
def process_Invoke(self, insn):
|
||||||
|
functiontyp = insn.target_function().type
|
||||||
llnormalblock = self.map(insn.normal_target())
|
llnormalblock = self.map(insn.normal_target())
|
||||||
llunwindblock = self.map(insn.exception_target())
|
llunwindblock = self.map(insn.exception_target())
|
||||||
if types.is_rpc_function(insn.target_function().type):
|
if types.is_rpc_function(functiontyp):
|
||||||
return self._build_rpc(insn.target_function().loc,
|
return self._build_rpc(insn.target_function().loc,
|
||||||
insn.target_function().type,
|
functiontyp,
|
||||||
insn.arguments(),
|
insn.arguments(),
|
||||||
llnormalblock, llunwindblock)
|
llnormalblock, llunwindblock)
|
||||||
elif types.is_c_function(insn.target_function().type):
|
elif types.is_c_function(functiontyp):
|
||||||
llfun, llargs = self._prepare_ffi_call(insn)
|
llfun, llargs = self._prepare_ffi_call(insn)
|
||||||
else:
|
else:
|
||||||
llfun, llargs = self._prepare_closure_call(insn)
|
llfun, llargs = self._prepare_closure_call(insn)
|
||||||
|
|
||||||
if self.has_sret(insn.target_function().type):
|
if self.has_sret(functiontyp):
|
||||||
llstackptr = self.llbuilder.call(self.llbuiltin("llvm.stacksave"), [])
|
llstackptr = self.llbuilder.call(self.llbuiltin("llvm.stacksave"), [])
|
||||||
|
|
||||||
llresultslot = self.llbuilder.alloca(llfun.type.pointee.args[0].pointee)
|
llresultslot = self.llbuilder.alloca(llfun.type.pointee.args[0].pointee)
|
||||||
|
@ -1342,6 +1343,10 @@ class LLVMIRGenerator:
|
||||||
llcall = self.llbuilder.invoke(llfun, llargs, llnormalblock, llunwindblock,
|
llcall = self.llbuilder.invoke(llfun, llargs, llnormalblock, llunwindblock,
|
||||||
name=insn.name)
|
name=insn.name)
|
||||||
|
|
||||||
|
# See the comment in process_Call.
|
||||||
|
if types.is_c_function(functiontyp) and 'nowrite' in functiontyp.flags:
|
||||||
|
llcall.metadata['tbaa'] = self.tbaa_nowrite_call
|
||||||
|
|
||||||
if insn.is_cold:
|
if insn.is_cold:
|
||||||
llcall.cconv = 'coldcc'
|
llcall.cconv = 'coldcc'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue