Skip to content

Commit da7459a

Browse files
committed
LLVMCodeBuilder: Fix createNewValue()
1 parent 157bda5 commit da7459a

File tree

1 file changed

+7
-35
lines changed

1 file changed

+7
-35
lines changed

src/engine/internal/llvm/llvmcodebuilder.cpp

Lines changed: 7 additions & 35 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)
@@ -3157,10 +3131,8 @@ llvm::Value *LLVMCodeBuilder::createStringComparison(LLVMRegister *arg1, LLVMReg
31573131
if (caseSensitive)
31583132
result = arg1->constValue().toString() == arg2->constValue().toString();
31593133
else {
3160-
// TODO: Use a custom comparison function
3161-
std::string str1 = arg1->constValue().toString();
3162-
std::string str2 = arg2->constValue().toString();
3163-
result = strcasecmp(str1.c_str(), str2.c_str()) == 0;
3134+
StringPtr *str1 = value_toStringPtr(&arg1->constValue().data());
3135+
StringPtr *str2 = value_toStringPtr(&arg2->constValue().data());
31643136
result = string_compare_case_insensitive(str1, str2) == 0;
31653137
}
31663138

0 commit comments

Comments
 (0)