diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index a8b5f96..e09532dc 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5471,9 +5471,6 @@ Error BitcodeReader::parseFunctionBody(Function *F) { if (IsFP && Record.size() > OpNum+1) FMF = getDecodedFastMathFlags(Record[++OpNum]); - if (OpNum+1 != Record.size()) - return error("Invalid record"); - if (IsFP) { if (!CmpInst::isFPPredicate(PredVal)) return error("Invalid fcmp predicate"); @@ -5482,8 +5479,14 @@ Error BitcodeReader::parseFunctionBody(Function *F) { if (!CmpInst::isIntPredicate(PredVal)) return error("Invalid icmp predicate"); I = new ICmpInst(PredVal, LHS, RHS); + if (Record.size() > OpNum + 1 && + (Record[++OpNum] & (1 << bitc::ICMP_SAME_SIGN))) + cast<ICmpInst>(I)->setSameSign(); } + if (OpNum + 1 != Record.size()) + return error("Invalid record"); + ResTypeID = getVirtualTypeID(I->getType()->getScalarType()); if (LHS->getType()->isVectorTy()) ResTypeID = getVirtualTypeID(I->getType(), ResTypeID); |