@@ -2926,37 +2926,11 @@ llvm::Value *LLVMCodeBuilder::createNewValue(LLVMRegister *reg)
29262926{
29272927 // Same as createValue(), but creates a copy of the contents
29282928 // NOTE: It is the caller's responsibility to free the value.
2929- if (reg->isConst ())
2930- return createValue (reg);
2931- else if (reg->isRawValue ) {
2932- if (reg->type () == Compiler::StaticType::String) {
2933- llvm::Value *value = castRawValue (reg, reg->type ());
2934- llvm::Value *ret = addAlloca (m_valueDataType);
2935-
2936- // Allocate string
2937- llvm::Value *result = m_builder.CreateCall (resolve_string_pool_new (), m_builder.getInt1 (false )); // false: do not free after thread is dead
2938- // NOTE: Do not free later
2939-
2940- // Copy string
2941- m_builder.CreateCall (resolve_string_assign (), { result, value });
2942-
2943- // Store string pointer
2944- llvm::Value *valueField = m_builder.CreateStructGEP (m_valueDataType, ret, 0 );
2945- m_builder.CreateStore (value, valueField);
2946-
2947- // Store type
2948- llvm::Value *typeField = m_builder.CreateStructGEP (m_valueDataType, ret, 1 );
2949- m_builder.CreateStore (m_builder.getInt32 (static_cast <uint32_t >(ValueType::String)), typeField);
2950-
2951- return ret;
2952- } else
2953- return createValue (reg);
2954- } else {
2955- llvm::Value *ret = addAlloca (m_valueDataType);
2956- m_builder.CreateCall (resolve_value_init (), { ret });
2957- m_builder.CreateCall (resolve_value_assign_copy (), { ret, reg->value });
2958- return ret;
2959- }
2929+ llvm::Value *value = createValue (reg);
2930+ llvm::Value *ret = addAlloca (m_valueDataType);
2931+ m_builder.CreateCall (resolve_value_init (), { ret });
2932+ m_builder.CreateCall (resolve_value_assign_copy (), { ret, value });
2933+ return ret;
29602934}
29612935
29622936llvm::Value *LLVMCodeBuilder::createComparison (LLVMRegister *arg1, LLVMRegister *arg2, Comparison type)
0 commit comments