From 64ad6ead1f5839dc6920295d00ec8b16ea118f4a Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Tue, 4 Apr 2023 09:00:37 -0700 Subject: [PATCH] [IR] Remove uses of the oddly named ConstantFP::getZeroValueForNegation in integer code. Confusingly ConstantFP's getZeroValueForNegation intentionally handles non-FP constants. It calls getNullValue in Constant. Nearly all uses in tree are for integers rather than FP. Maybe due to replacing FSub -0.0, X idiom with an FNeg instructions a few years ago. This patch replaces all the integer uses in tree with ConstantInt::get(0, Ty). The one remaining use is in clang with a FIXME that it should use fneg. I'll fix that next and then delete ConstantFP::getZeroValueForNegation. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D147492 --- llvm/lib/IR/Constants.cpp | 3 +-- llvm/lib/IR/Instructions.cpp | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp index a4b00d9..9e26d6c 100644 --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -2601,8 +2601,7 @@ Constant *ConstantExpr::getShuffleVector(Constant *V1, Constant *V2, Constant *ConstantExpr::getNeg(Constant *C, bool HasNUW, bool HasNSW) { assert(C->getType()->isIntOrIntVectorTy() && "Cannot NEG a nonintegral value!"); - return getSub(ConstantFP::getZeroValueForNegation(C->getType()), - C, HasNUW, HasNSW); + return getSub(ConstantInt::get(C->getType(), 0), C, HasNUW, HasNSW); } Constant *ConstantExpr::getNot(Constant *C) { diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index a1cc580..96301ad 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -3073,42 +3073,42 @@ BinaryOperator *BinaryOperator::Create(BinaryOps Op, Value *S1, Value *S2, BinaryOperator *BinaryOperator::CreateNeg(Value *Op, const Twine &Name, Instruction *InsertBefore) { - Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); + Value *Zero = ConstantInt::get(Op->getType(), 0); return new BinaryOperator(Instruction::Sub, - zero, Op, + Zero, Op, Op->getType(), Name, InsertBefore); } BinaryOperator *BinaryOperator::CreateNeg(Value *Op, const Twine &Name, BasicBlock *InsertAtEnd) { - Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); + Value *Zero = ConstantInt::get(Op->getType(), 0); return new BinaryOperator(Instruction::Sub, - zero, Op, + Zero, Op, Op->getType(), Name, InsertAtEnd); } BinaryOperator *BinaryOperator::CreateNSWNeg(Value *Op, const Twine &Name, Instruction *InsertBefore) { - Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); - return BinaryOperator::CreateNSWSub(zero, Op, Name, InsertBefore); + Value *Zero = ConstantInt::get(Op->getType(), 0); + return BinaryOperator::CreateNSWSub(Zero, Op, Name, InsertBefore); } BinaryOperator *BinaryOperator::CreateNSWNeg(Value *Op, const Twine &Name, BasicBlock *InsertAtEnd) { - Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); - return BinaryOperator::CreateNSWSub(zero, Op, Name, InsertAtEnd); + Value *Zero = ConstantInt::get(Op->getType(), 0); + return BinaryOperator::CreateNSWSub(Zero, Op, Name, InsertAtEnd); } BinaryOperator *BinaryOperator::CreateNUWNeg(Value *Op, const Twine &Name, Instruction *InsertBefore) { - Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); - return BinaryOperator::CreateNUWSub(zero, Op, Name, InsertBefore); + Value *Zero = ConstantInt::get(Op->getType(), 0); + return BinaryOperator::CreateNUWSub(Zero, Op, Name, InsertBefore); } BinaryOperator *BinaryOperator::CreateNUWNeg(Value *Op, const Twine &Name, BasicBlock *InsertAtEnd) { - Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); - return BinaryOperator::CreateNUWSub(zero, Op, Name, InsertAtEnd); + Value *Zero = ConstantInt::get(Op->getType(), 0); + return BinaryOperator::CreateNUWSub(Zero, Op, Name, InsertAtEnd); } BinaryOperator *BinaryOperator::CreateNot(Value *Op, const Twine &Name, -- 2.7.4