Skip to content

Commit c0e5697

Browse files
committed
LLVMBuildUtils: Move register type loading to a separate method
1 parent 27b7a03 commit c0e5697

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

src/engine/internal/llvm/llvmbuildutils.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -732,21 +732,8 @@ void LLVMBuildUtils::createValueStore(
732732
assert(destIsIntVar->getType()->isPointerTy());
733733
assert(destIntVar->getType()->isPointerTy());
734734

735-
auto it = std::find_if(TYPE_MAP.begin(), TYPE_MAP.end(), [targetType](const std::pair<ValueType, Compiler::StaticType> &pair) { return pair.second == targetType; });
736-
const ValueType mappedType = it == TYPE_MAP.cend() ? ValueType::Number : it->first; // unknown type can be ignored
737-
assert(!(reg->isRawValue && it == TYPE_MAP.cend()));
738-
739735
// Handle multiple type cases with runtime switch
740-
llvm::Value *loadedTargetType = nullptr;
741-
742-
if (reg->isRawValue)
743-
loadedTargetType = m_builder.getInt32(static_cast<uint32_t>(mappedType));
744-
else {
745-
assert(!reg->isConst());
746-
llvm::Value *targetTypePtr = getValueTypePtr(reg);
747-
loadedTargetType = m_builder.CreateLoad(m_builder.getInt32Ty(), targetTypePtr);
748-
}
749-
736+
llvm::Value *loadedTargetType = loadRegisterType(reg, targetType);
750737
llvm::Value *loadedDestType = m_builder.CreateLoad(m_builder.getInt32Ty(), destTypePtr);
751738

752739
llvm::BasicBlock *mergeBlock = llvm::BasicBlock::Create(m_llvmCtx, "merge", m_function);
@@ -1414,6 +1401,17 @@ void LLVMBuildUtils::createListMap()
14141401
}
14151402
}
14161403

1404+
llvm::Value *LLVMBuildUtils::loadRegisterType(LLVMRegister *reg, Compiler::StaticType type)
1405+
{
1406+
if (reg->isRawValue)
1407+
return m_builder.getInt32(static_cast<uint32_t>(mapType(type)));
1408+
else {
1409+
assert(!reg->isConst());
1410+
llvm::Value *typePtr = getValueTypePtr(reg);
1411+
return m_builder.CreateLoad(m_builder.getInt32Ty(), typePtr);
1412+
}
1413+
}
1414+
14171415
llvm::Value *LLVMBuildUtils::castRawValue(LLVMRegister *reg, Compiler::StaticType targetType, NumberType targetNumType)
14181416
{
14191417
if (reg->type() == targetType) {

src/engine/internal/llvm/llvmbuildutils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ class LLVMBuildUtils
123123
void createVariableMap();
124124
void createListMap();
125125

126+
llvm::Value *loadRegisterType(LLVMRegister *reg, Compiler::StaticType type);
127+
126128
llvm::Value *castRawValue(LLVMRegister *reg, Compiler::StaticType targetType, NumberType targetNumType);
127129
llvm::Constant *castConstValue(const Value &value, Compiler::StaticType targetType, NumberType targetNumType);
128130

0 commit comments

Comments
 (0)