@@ -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+
14171415llvm::Value *LLVMBuildUtils::castRawValue (LLVMRegister *reg, Compiler::StaticType targetType, NumberType targetNumType)
14181416{
14191417 if (reg->type () == targetType) {
0 commit comments