From 9efb07f261b2cd673c0a5abf2ed2546ad288ab48 Mon Sep 17 00:00:00 2001 From: elhewaty Date: Tue, 15 Oct 2024 12:11:25 +0300 Subject: [IR] Add `samesign` flag to icmp instruction (#111419) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inspired by https://discourse.llvm.org/t/rfc-signedness-independent-icmps/81423 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') 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(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); -- cgit v1.1