From e177c5a00da34ba61b762e2b32bd96e33b0c10b4 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 26 Nov 2019 17:35:10 -0500 Subject: [InstSimplify] fold copysign with same args to the arg This is correct for any value including NaN/inf. We don't have this fold directly in the backend either, but x86 manages to get it after converting things to bitops. --- llvm/lib/Analysis/InstructionSimplify.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'llvm/lib/Analysis/InstructionSimplify.cpp') diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index d997acb365c..7942cb09e84 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -5086,6 +5086,11 @@ static Value *simplifyBinaryIntrinsic(Function *F, Value *Op0, Value *Op1, return Op0; } break; + case Intrinsic::copysign: + // copysign X, X --> X + if (Op0 == Op1) + return Op0; + break; case Intrinsic::maxnum: case Intrinsic::minnum: case Intrinsic::maximum: -- cgit v1.2.3