[Bitcode] Fix constexpr autoupgrade for arrays and structs

While vectors use insertelement, structs and arrays should use
insertvalue.
This commit is contained in:
Nikita Popov
2022-09-07 12:46:32 +02:00
parent 973fec78e9
commit d452d5e2de
3 changed files with 27 additions and 2 deletions

View File

@@ -1577,8 +1577,6 @@ Expected<Value *> BitcodeReader::materializeValue(unsigned StartValID,
I->setIsExact();
} else {
switch (BC->Opcode) {
case BitcodeConstant::ConstantStructOpcode:
case BitcodeConstant::ConstantArrayOpcode:
case BitcodeConstant::ConstantVectorOpcode: {
Type *IdxTy = Type::getInt32Ty(BC->getContext());
Value *V = PoisonValue::get(BC->getType());
@@ -1590,6 +1588,15 @@ Expected<Value *> BitcodeReader::materializeValue(unsigned StartValID,
I = cast<Instruction>(V);
break;
}
case BitcodeConstant::ConstantStructOpcode:
case BitcodeConstant::ConstantArrayOpcode: {
Value *V = PoisonValue::get(BC->getType());
for (auto Pair : enumerate(Ops))
V = InsertValueInst::Create(V, Pair.value(), Pair.index(),
"constexpr.ins", InsertBB);
I = cast<Instruction>(V);
break;
}
case Instruction::ICmp:
case Instruction::FCmp:
I = CmpInst::Create((Instruction::OtherOps)BC->Opcode,