From: Nikita Popov Date: Fri, 1 Jul 2022 12:54:10 +0000 (+0200) Subject: [IRBuilder] Move CreateNeg() to fold API X-Git-Tag: upstream/15.0.7~2880 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21933b2f7f02cbbf67703d50da660ffc8119f84a;p=platform%2Fupstream%2Fllvm.git [IRBuilder] Move CreateNeg() to fold API Remove the CreateNeg() method from IRBuilderFolder and base it on CreateSub(0, V) instead, which will call FoldNoWrapBinaryOp(). May not be NFC if InstSimplifyFolder is used. --- diff --git a/llvm/include/llvm/Analysis/InstSimplifyFolder.h b/llvm/include/llvm/Analysis/InstSimplifyFolder.h index 53fd06c..d4ea7d7 100644 --- a/llvm/include/llvm/Analysis/InstSimplifyFolder.h +++ b/llvm/include/llvm/Analysis/InstSimplifyFolder.h @@ -111,10 +111,6 @@ public: // Unary Operators //===--------------------------------------------------------------------===// - Value *CreateNeg(Constant *C, bool HasNUW = false, - bool HasNSW = false) const override { - return ConstFolder.CreateNeg(C, HasNUW, HasNSW); - } Value *CreateFNeg(Constant *C) const override { return ConstFolder.CreateFNeg(C); } diff --git a/llvm/include/llvm/Analysis/TargetFolder.h b/llvm/include/llvm/Analysis/TargetFolder.h index 1d9b103..3a7218b 100644 --- a/llvm/include/llvm/Analysis/TargetFolder.h +++ b/llvm/include/llvm/Analysis/TargetFolder.h @@ -168,10 +168,6 @@ public: // Unary Operators //===--------------------------------------------------------------------===// - Constant *CreateNeg(Constant *C, - bool HasNUW = false, bool HasNSW = false) const override { - return Fold(ConstantExpr::getNeg(C, HasNUW, HasNSW)); - } Constant *CreateFNeg(Constant *C) const override { return Fold(ConstantExpr::getFNeg(C)); } diff --git a/llvm/include/llvm/IR/ConstantFolder.h b/llvm/include/llvm/IR/ConstantFolder.h index 320e784..5e7ddb9 100644 --- a/llvm/include/llvm/IR/ConstantFolder.h +++ b/llvm/include/llvm/IR/ConstantFolder.h @@ -158,11 +158,6 @@ public: // Unary Operators //===--------------------------------------------------------------------===// - Constant *CreateNeg(Constant *C, - bool HasNUW = false, bool HasNSW = false) const override { - return ConstantExpr::getNeg(C, HasNUW, HasNSW); - } - Constant *CreateFNeg(Constant *C) const override { return ConstantExpr::getFNeg(C); } diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 885da3c..d8f0893 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -1572,14 +1572,10 @@ public: Optional Rounding = None, Optional Except = None); - Value *CreateNeg(Value *V, const Twine &Name = "", - bool HasNUW = false, bool HasNSW = false) { - if (auto *VC = dyn_cast(V)) - return Insert(Folder.CreateNeg(VC, HasNUW, HasNSW), Name); - BinaryOperator *BO = Insert(BinaryOperator::CreateNeg(V), Name); - if (HasNUW) BO->setHasNoUnsignedWrap(); - if (HasNSW) BO->setHasNoSignedWrap(); - return BO; + Value *CreateNeg(Value *V, const Twine &Name = "", bool HasNUW = false, + bool HasNSW = false) { + return CreateSub(Constant::getNullValue(V->getType()), V, Name, HasNUW, + HasNSW); } Value *CreateNSWNeg(Value *V, const Twine &Name = "") { diff --git a/llvm/include/llvm/IR/IRBuilderFolder.h b/llvm/include/llvm/IR/IRBuilderFolder.h index 258e0d8..9505f1e 100644 --- a/llvm/include/llvm/IR/IRBuilderFolder.h +++ b/llvm/include/llvm/IR/IRBuilderFolder.h @@ -71,8 +71,6 @@ public: // Unary Operators //===--------------------------------------------------------------------===// - virtual Value *CreateNeg(Constant *C, - bool HasNUW = false, bool HasNSW = false) const = 0; virtual Value *CreateFNeg(Constant *C) const = 0; virtual Value *CreateUnOp(Instruction::UnaryOps Opc, Constant *C) const = 0; diff --git a/llvm/include/llvm/IR/NoFolder.h b/llvm/include/llvm/IR/NoFolder.h index cf6d9cb..4e9f772 100644 --- a/llvm/include/llvm/IR/NoFolder.h +++ b/llvm/include/llvm/IR/NoFolder.h @@ -106,15 +106,6 @@ public: // Unary Operators //===--------------------------------------------------------------------===// - Instruction *CreateNeg(Constant *C, - bool HasNUW = false, - bool HasNSW = false) const override { - BinaryOperator *BO = BinaryOperator::CreateNeg(C); - if (HasNUW) BO->setHasNoUnsignedWrap(); - if (HasNSW) BO->setHasNoSignedWrap(); - return BO; - } - Instruction *CreateFNeg(Constant *C) const override { return UnaryOperator::CreateFNeg(C); }