From: Sanjay Patel Date: Sat, 26 Nov 2016 15:01:59 +0000 (+0000) Subject: add optional param to copy metadata when creating selects; NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=572676fe523e4ddff275e149f3813f52aa3b8ea3;p=llvm add optional param to copy metadata when creating selects; NFC There are other spots where we can use this; we're currently dropping metadata in some places, and there are proposed changes where we will want to propagate metadata. IRBuilder's CreateSelect() already has a parameter like this, so this change makes the regular 'Create' API line up with that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287976 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/IR/Instructions.h b/include/llvm/IR/Instructions.h index 0afbaccd8b5..b84a269138c 100644 --- a/include/llvm/IR/Instructions.h +++ b/include/llvm/IR/Instructions.h @@ -1904,9 +1904,14 @@ protected: public: static SelectInst *Create(Value *C, Value *S1, Value *S2, const Twine &NameStr = "", - Instruction *InsertBefore = nullptr) { - return new(3) SelectInst(C, S1, S2, NameStr, InsertBefore); + Instruction *InsertBefore = nullptr, + Instruction *MDFrom = nullptr) { + SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore); + if (MDFrom) + Sel->copyMetadata(*MDFrom); + return Sel; } + static SelectInst *Create(Value *C, Value *S1, Value *S2, const Twine &NameStr, BasicBlock *InsertAtEnd) { diff --git a/lib/Transforms/InstCombine/InstCombineSelect.cpp b/lib/Transforms/InstCombine/InstCombineSelect.cpp index 98b92970566..36644845352 100644 --- a/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -531,8 +531,7 @@ canonicalizeMinMaxWithConstant(SelectInst &Sel, ICmpInst &Cmp, std::swap(LHS, RHS); Value *NewCmp = Builder.CreateICmp(NewPred, LHS, RHS); - SelectInst *NewSel = SelectInst::Create(NewCmp, LHS, RHS); - NewSel->copyMetadata(Sel); + SelectInst *NewSel = SelectInst::Create(NewCmp, LHS, RHS, "", nullptr, &Sel); // We swapped the select operands, so swap the metadata too. NewSel->swapProfMetadata(); @@ -995,21 +994,18 @@ Instruction *InstCombiner::foldSelectExtConst(SelectInst &Sel) { // If one arm of the select is the extend of the condition, replace that arm // with the extension of the appropriate known bool value. if (Cond == X) { - SelectInst *NewSel; if (ExtInst == Sel.getTrueValue()) { // select X, (sext X), C --> select X, -1, C // select X, (zext X), C --> select X, 1, C Constant *One = ConstantInt::getTrue(SmallType); Constant *AllOnesOrOne = ConstantExpr::getCast(ExtOpcode, One, SelType); - NewSel = SelectInst::Create(Cond, AllOnesOrOne, C); + return SelectInst::Create(Cond, AllOnesOrOne, C, "", nullptr, &Sel); } else { // select X, C, (sext X) --> select X, C, 0 // select X, C, (zext X) --> select X, C, 0 Constant *Zero = ConstantInt::getNullValue(SelType); - NewSel = SelectInst::Create(Cond, C, Zero); + return SelectInst::Create(Cond, C, Zero, "", nullptr, &Sel); } - NewSel->copyMetadata(Sel); - return NewSel; } return nullptr;