Skip to content

Commit f56e550

Browse files
committed
LLVMCodeBuilder: Fix createNewValue()
1 parent eb5ee36 commit f56e550

File tree

1 file changed

+5
-31
lines changed

1 file changed

+5
-31
lines changed

src/engine/internal/llvm/llvmcodebuilder.cpp

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

29622936
llvm::Value *LLVMCodeBuilder::createComparison(LLVMRegister *arg1, LLVMRegister *arg2, Comparison type)

0 commit comments

Comments
 (0)