Skip to content

Commit 077bb7b

Browse files
committed
LLVMCodeBuilder: Rewrite createInitialValueStore()
1 parent ebef1af commit 077bb7b

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

src/dev/engine/internal/llvm/llvmcodebuilder.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -523,14 +523,14 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
523523
// If there's enough space, use the allocated memory
524524
m_builder.SetInsertPoint(ifBlock);
525525
llvm::Value *itemPtr = getListItem(listPtr, size, func);
526-
createInitialValueStore(arg.second, itemPtr, type);
526+
createReusedValueStore(arg.second, itemPtr, type);
527527
m_builder.CreateStore(m_builder.CreateAdd(size, m_builder.getInt64(1)), listPtr.sizePtr);
528528
m_builder.CreateBr(nextBlock);
529529

530530
// Otherwise call appendEmpty()
531531
m_builder.SetInsertPoint(elseBlock);
532532
itemPtr = m_builder.CreateCall(resolve_list_append_empty(), listPtr.ptr);
533-
createInitialValueStore(arg.second, itemPtr, type);
533+
createReusedValueStore(arg.second, itemPtr, type);
534534
m_builder.CreateStore(m_builder.getInt1(true), listPtr.dataPtrDirty);
535535
m_builder.CreateBr(nextBlock);
536536

@@ -555,8 +555,8 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
555555
// Insert
556556
llvm::Value *index = m_builder.CreateFPToUI(castValue(indexArg.second, indexArg.first), m_builder.getInt64Ty());
557557
llvm::Value *itemPtr = m_builder.CreateCall(resolve_list_insert_empty(), { listPtr.ptr, index });
558-
createInitialValueStore(valueArg.second, itemPtr, type);
559558
// TODO: Implement list type prediction
559+
createReusedValueStore(valueArg.second, itemPtr, type);
560560
break;
561561
}
562562

@@ -1727,25 +1727,20 @@ void LLVMCodeBuilder::createValueStore(LLVMRegisterPtr reg, llvm::Value *targetP
17271727
}
17281728
}
17291729

1730-
void LLVMCodeBuilder::createInitialValueStore(LLVMRegisterPtr reg, llvm::Value *targetPtr, Compiler::StaticType sourceType)
1730+
void LLVMCodeBuilder::createReusedValueStore(LLVMRegisterPtr reg, llvm::Value *targetPtr, Compiler::StaticType sourceType)
17311731
{
17321732
llvm::Value *converted = nullptr;
17331733

17341734
if (sourceType != Compiler::StaticType::Unknown)
17351735
converted = castValue(reg, sourceType);
17361736

1737-
auto it = std::find_if(TYPE_MAP.begin(), TYPE_MAP.end(), [sourceType](const std::pair<ValueType, Compiler::StaticType> &pair) { return pair.second == sourceType; });
1738-
const ValueType mappedType = it == TYPE_MAP.cend() ? ValueType::Number : it->first; // unknown type can be ignored
1739-
1740-
llvm::Value *valuePtr = m_builder.CreateStructGEP(m_valueDataType, targetPtr, 0);
1741-
llvm::Value *typePtr = m_builder.CreateStructGEP(m_valueDataType, targetPtr, 1);
1742-
m_builder.CreateStore(m_builder.getInt32(static_cast<uint32_t>(mappedType)), typePtr);
1743-
17441737
switch (sourceType) {
17451738
case Compiler::StaticType::Number:
1739+
m_builder.CreateCall(resolve_value_assign_double(), { targetPtr, converted });
1740+
break;
1741+
17461742
case Compiler::StaticType::Bool:
1747-
// Write number/bool directly
1748-
m_builder.CreateStore(converted, valuePtr);
1743+
m_builder.CreateCall(resolve_value_assign_bool(), { targetPtr, converted });
17491744
break;
17501745

17511746
case Compiler::StaticType::String:

src/dev/engine/internal/llvm/llvmcodebuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class LLVMCodeBuilder : public ICodeBuilder
121121
LLVMInstruction &createOp(LLVMInstruction::Type type, Compiler::StaticType retType, const std::vector<Compiler::StaticType> &argTypes, size_t argCount);
122122

123123
void createValueStore(LLVMRegisterPtr reg, llvm::Value *targetPtr, Compiler::StaticType sourceType, Compiler::StaticType targetType);
124-
void createInitialValueStore(LLVMRegisterPtr reg, llvm::Value *targetPtr, Compiler::StaticType sourceType);
124+
void createReusedValueStore(LLVMRegisterPtr reg, llvm::Value *targetPtr, Compiler::StaticType sourceType);
125125
void createValueCopy(llvm::Value *source, llvm::Value *target);
126126
void copyStructField(llvm::Value *source, llvm::Value *target, int index, llvm::StructType *structType, llvm::Type *fieldType);
127127
llvm::Value *getListItem(const LLVMListPtr &listPtr, llvm::Value *index, llvm::Function *func);

0 commit comments

Comments
 (0)