Skip to content

Commit a06b40b

Browse files
committed
Support mixed types in select instruction
1 parent 31dbd17 commit a06b40b

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

src/engine/internal/llvm/instructions/control.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,12 @@ LLVMInstruction *Control::buildSelect(LLVMInstruction *ins)
7979
llvm::Value *trueValue;
8080
llvm::Value *falseValue;
8181

82-
if (type == Compiler::StaticType::Unknown) {
83-
trueValue = m_utils.createValue(arg2.second);
84-
falseValue = m_utils.createValue(arg3.second);
85-
} else {
82+
if (m_utils.isSingleType(type)) {
8683
trueValue = m_utils.castValue(arg2.second, type);
8784
falseValue = m_utils.castValue(arg3.second, type);
85+
} else {
86+
trueValue = m_utils.createValue(arg2.second);
87+
falseValue = m_utils.createValue(arg3.second);
8888
}
8989

9090
ins->functionReturnReg->value = m_builder.CreateSelect(cond, trueValue, falseValue);

src/engine/internal/llvm/llvmcodebuilder.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -399,10 +399,7 @@ CompilerValue *LLVMCodeBuilder::createStringConcat(CompilerValue *string1, Compi
399399
CompilerValue *LLVMCodeBuilder::createSelect(CompilerValue *cond, CompilerValue *trueValue, CompilerValue *falseValue, Compiler::StaticType valueType)
400400
{
401401
LLVMRegister *ret = createOp(LLVMInstruction::Type::Select, valueType, { Compiler::StaticType::Bool, valueType, valueType }, { cond, trueValue, falseValue });
402-
403-
if (valueType == Compiler::StaticType::Unknown)
404-
ret->isRawValue = false;
405-
402+
ret->isRawValue = m_utils.isSingleType(valueType);
406403
return ret;
407404
}
408405

test/llvm/llvmcodebuilder_test.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,10 @@ TEST_F(LLVMCodeBuilderTest, Select)
761761
v = builder->createSelect(v, builder->addConstValue("abc"), builder->addConstValue(true), Compiler::StaticType::Unknown);
762762
builder->addFunctionCall("test_print_string", Compiler::StaticType::Void, { Compiler::StaticType::String }, { v });
763763

764+
v = builder->addConstValue(true);
765+
v = builder->createSelect(v, builder->addConstValue("abc"), builder->addConstValue(true), Compiler::StaticType::String | Compiler::StaticType::Bool);
766+
builder->addFunctionCall("test_print_string", Compiler::StaticType::Void, { Compiler::StaticType::String }, { v });
767+
764768
static const std::string expected =
765769
"5.8\n"
766770
"-17.42\n"
@@ -773,7 +777,8 @@ TEST_F(LLVMCodeBuilderTest, Select)
773777
"1\n"
774778
"0\n"
775779
"test\n"
776-
"true\n";
780+
"true\n"
781+
"abc\n";
777782

778783
auto code = builder->build();
779784
Script script(&sprite, nullptr, nullptr);

0 commit comments

Comments
 (0)