forked from M-Labs/artiq
compiler: Extract maximum alignment from target data layout
In particular, i64/double are actually supposed to be aligned to their size on RISC-V (at least according to the ELF psABI), though it is unclear to me whether this actually caused any issues.
This commit is contained in:
parent
a83f330d74
commit
23a4db494f
|
@ -177,6 +177,15 @@ class LLVMIRGenerator:
|
|||
self.empty_metadata = self.llmodule.add_metadata([])
|
||||
self.quote_fail_msg = None
|
||||
|
||||
# Maximum alignment required according to the target platform ABI. As this is
|
||||
# not directly exposed by LLVM, just take the maximum across all the "big"
|
||||
# elementary types we use. (Vector types, should we ever support them, are
|
||||
# likely contenders for even larger alignment requirements.)
|
||||
self.max_target_alignment = max(map(
|
||||
lambda t: self.abi_layout_info.get_size_align(t)[1],
|
||||
[lli64, lldouble, llptr]
|
||||
))
|
||||
|
||||
def add_pred(self, pred, block):
|
||||
if block not in self.llpred_map:
|
||||
self.llpred_map[block] = set()
|
||||
|
@ -1529,7 +1538,7 @@ class LLVMIRGenerator:
|
|||
|
||||
self.llbuilder.position_at_end(llalloc)
|
||||
llalloca = self.llbuilder.alloca(lli8, llsize, name="rpc.alloc")
|
||||
llalloca.align = 4 # maximum alignment required by OR1K ABI
|
||||
llalloca.align = self.max_target_alignment
|
||||
llphi.add_incoming(llalloca, llalloc)
|
||||
self.llbuilder.branch(llhead)
|
||||
|
||||
|
|
Loading…
Reference in New Issue