From 984fefdd81f310baa4d0a2562e71adeb8cd80bce Mon Sep 17 00:00:00 2001 From: Filipe Cabecinhas Date: Mon, 31 Aug 2015 18:00:30 +0000 Subject: [BitcodeReader] Ensure we can read constant vector selects with an i1 condition Summary: Constant vectors weren't allowed to have an i1 condition in the BitcodeReader. Make sure we have the same restrictions that are documented, not more. Reviewers: nlewycky, rafael, kschimpf Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D12440 llvm-svn: 246459 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Bitcode') diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index c767b6c5c17..b9604af3bc8 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2475,11 +2475,12 @@ std::error_code BitcodeReader::parseConstants() { Type *SelectorTy = Type::getInt1Ty(Context); - // If CurTy is a vector of length n, then Record[0] must be a - // vector. Otherwise, it must be a single bit. + // The selector might be an i1 or an + // Get the type from the ValueList before getting a forward ref. if (VectorType *VTy = dyn_cast(CurTy)) - SelectorTy = VectorType::get(Type::getInt1Ty(Context), - VTy->getNumElements()); + if (Value *V = ValueList[Record[0]]) + if (SelectorTy != V->getType()) + SelectorTy = VectorType::get(SelectorTy, VTy->getNumElements()); V = ConstantExpr::getSelect(ValueList.getConstantFwdRef(Record[0], SelectorTy), -- cgit v1.2.3