mirror of
https://github.com/intel/llvm.git
synced 2026-01-19 01:15:50 +08:00
Minor fixes for ARM/iOS targets:
- On iOS, we select the "apcs-gnu" ABI to match what libraries expect. - Literals are now allocated at their preferred alignment, eliminating many alignment crashes. llvm-svn: 158236
This commit is contained in:
@@ -1551,6 +1551,12 @@ IRForTarget::MaterializeInternalVariable (GlobalVariable *global_variable)
|
||||
llvm::Type *initializer_type = initializer->getType();
|
||||
|
||||
size_t size = m_target_data->getTypeAllocSize(initializer_type);
|
||||
size_t align = m_target_data->getPrefTypeAlignment(initializer_type);
|
||||
|
||||
const size_t mask = (align - 1);
|
||||
uint64_t aligned_offset = (offset + mask) & ~mask;
|
||||
m_data_allocator->GetStream().PutNHex8(aligned_offset - offset, 0);
|
||||
offset = aligned_offset;
|
||||
|
||||
lldb_private::DataBufferHeap data(size, '\0');
|
||||
|
||||
@@ -2060,6 +2066,7 @@ IRForTarget::ReplaceStaticLiterals (llvm::BasicBlock &basic_block)
|
||||
llvm::Instruction *inst = *user_iter;
|
||||
|
||||
ConstantFP *operand_constant_fp = dyn_cast<ConstantFP>(operand_val);
|
||||
Type *operand_type = operand_constant_fp->getType();
|
||||
|
||||
if (operand_constant_fp)
|
||||
{
|
||||
@@ -2105,6 +2112,13 @@ IRForTarget::ReplaceStaticLiterals (llvm::BasicBlock &basic_block)
|
||||
|
||||
uint64_t offset = m_data_allocator->GetStream().GetSize();
|
||||
|
||||
size_t align = m_target_data->getPrefTypeAlignment(operand_type);
|
||||
|
||||
const size_t mask = (align - 1);
|
||||
uint64_t aligned_offset = (offset + mask) & ~mask;
|
||||
m_data_allocator->GetStream().PutNHex8(aligned_offset - offset, 0);
|
||||
offset = aligned_offset;
|
||||
|
||||
m_data_allocator->GetStream().Write(data.GetBytes(), operand_data_size);
|
||||
|
||||
llvm::Type *fp_ptr_ty = operand_constant_fp->getType()->getPointerTo();
|
||||
|
||||
Reference in New Issue
Block a user