diff options
| author | Nikita Popov <npopov@redhat.com> | 2022-09-07 12:46:32 +0200 |
|---|---|---|
| committer | Nikita Popov <npopov@redhat.com> | 2022-09-07 12:47:21 +0200 |
| commit | d452d5e2de70a180e5af26dbda40cfb8b2506590 (patch) | |
| tree | 8cda25df64463f7ddd78d10a4e7a57d233ccfb71 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
| parent | 973fec78e935404fb5906a9abcd2f7848f17da62 (diff) | |
[Bitcode] Fix constexpr autoupgrade for arrays and structs
While vectors use insertelement, structs and arrays should use
insertvalue.
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
| -rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 321f2b0d6420..049fc0f2f0e8 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -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, |
