From 2d0b1b5542de55d6502f38b73575681cb337583a Mon Sep 17 00:00:00 2001 From: Erik Pilkington Date: Tue, 12 Feb 2019 21:55:38 +0000 Subject: [PATCH] Fix auto-upgrade for the new parameter to llvm.objectsize r352664 added a 'dynamic' parameter to objectsize, but the AutoUpgrade changes were incomplete. Also, fix an off-by-one error I made in the upgrade logic that is now no longer unreachable. Differential revision: https://reviews.llvm.org/D58071 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353884 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/IR/AutoUpgrade.cpp | 4 ++-- test/Bitcode/objectsize-upgrade-7.0.ll | 12 ++++++++++++ test/Bitcode/objectsize-upgrade-7.0.ll.bc | Bin 0 -> 984 bytes 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 test/Bitcode/objectsize-upgrade-7.0.ll create mode 100644 test/Bitcode/objectsize-upgrade-7.0.ll.bc diff --git a/lib/IR/AutoUpgrade.cpp b/lib/IR/AutoUpgrade.cpp index fbbb5240017..8ebe55a1ea3 100644 --- a/lib/IR/AutoUpgrade.cpp +++ b/lib/IR/AutoUpgrade.cpp @@ -743,7 +743,7 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) { // address space. if (Name.startswith("objectsize.")) { Type *Tys[2] = { F->getReturnType(), F->arg_begin()->getType() }; - if (F->arg_size() == 2 || + if (F->arg_size() == 2 || F->arg_size() == 3 || F->getName() != Intrinsic::getName(Intrinsic::objectsize, Tys)) { rename(F); NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::objectsize, @@ -3461,7 +3461,7 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { ? Builder.getFalse() : CI->getArgOperand(2); Value *Dynamic = - CI->getNumArgOperands() < 3 ? Builder.getFalse() : CI->getArgOperand(3); + CI->getNumArgOperands() < 4 ? Builder.getFalse() : CI->getArgOperand(3); NewCall = Builder.CreateCall( NewFn, {CI->getArgOperand(0), CI->getArgOperand(1), NullIsUnknownSize, Dynamic}); break; diff --git a/test/Bitcode/objectsize-upgrade-7.0.ll b/test/Bitcode/objectsize-upgrade-7.0.ll new file mode 100644 index 00000000000..a7e6d497676 --- /dev/null +++ b/test/Bitcode/objectsize-upgrade-7.0.ll @@ -0,0 +1,12 @@ +; RUN: llvm-dis < %s.bc | FileCheck %s + +; Bitcode compatibility test for 'dynamic' parameter to llvm.objectsize. + +define void @callit(i8* %ptr) { + %sz = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr, i1 false, i1 true) + ; CHECK: %sz = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr, i1 false, i1 true, i1 false) + ret void +} + +declare i64 @llvm.objectsize.i64.p0i8(i8*, i1, i1) +; CHECK: declare i64 @llvm.objectsize.i64.p0i8(i8*, i1, i1, i1) diff --git a/test/Bitcode/objectsize-upgrade-7.0.ll.bc b/test/Bitcode/objectsize-upgrade-7.0.ll.bc new file mode 100644 index 0000000000000000000000000000000000000000..115c69dfb9da87f8ccb69d5115060a96b5c55950 GIT binary patch literal 984 zcmX|APiWg_6#pE_mKJ-TmBui8m4swx!-vij&br!@U2Ll@4GqPiJ9MxzJ556zvQBY~ zK55D*G zetPeH@81`b)?23?0GI&)<2GSvWU5O>lAm+lb4#vYBghMYSNTzBZ>?Ou{O!lm&^ikI zKRMm5T@xO8q37$C!k2qU``Vd7e3;DB^)@}}FojD}K&_Qyd14_)%vEM>U10y6g3t1B z*cM|qH<*W2dQvbSnJFh5Sa?ecm$7goSI)@9Es|KcsL3+1C}Y{2CUcsrF#r#A*cR+J z1^a#v_Tq4usxvK~-sPFiBs(cAi4PQUM+$y}g&rs&6%!jhM>av+nj+3jX=%jsnyhPb zg2;M_?B8Y-c0R9tKx(s2EnU$TDuq*rJ$SeW|5}F!0ye%?r8`x+am1TRdYh-~1!g;G z`9+t4TT-xc#P8Pv%Tl0(iOaP&(WTFe;$uu)tJ!``Y4TMqEi0KRBA3uIPA#*lxgK7z z9|HRyaoEw}e#GA9-~p`md0L zHlHJMm9f!hy4~miJI!t<>8Cu?+F(90u|~o?(@R?3y{!ZqHE~S}qlP@+40R;2gw$I3 z`+iiZHjnZliA67wt`y$ir{KXld=iI$3Z9KeQMS{5Ww*_=Osp~Ddua4lB(42vFX|Vu zcvY@QVN~{-6x^v5yYvs$m!C$Badvs;I1lg>1%L(l5RK4XMO;D6!NRLb2sKKt8T*;! zj(2kqkDfxNM{i`p15Tq);IR;(n2;%jN(7957&@;Dp(_*S;)g I8rA^(3t;&(SpWb4 literal 0 HcmV?d00001 -- 2.11.0