diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -541,6 +541,12 @@ return CGF.Builder.CreateCall(F, Src0); } +static Value *emitUnaryBuiltin(CodeGenFunction &CGF, const CallExpr *E, + unsigned IntrinsicID, llvm::StringRef Name) { + llvm::Value *Src0 = CGF.EmitScalarExpr(E->getArg(0)); + return CGF.Builder.CreateUnaryIntrinsic(IntrinsicID, Src0, nullptr, Name); +} + // Emit an intrinsic that has 2 operands of the same type as its result. static Value *emitBinaryBuiltin(CodeGenFunction &CGF, const CallExpr *E, @@ -3130,6 +3136,7 @@ else Result = Builder.CreateUnaryIntrinsic(llvm::Intrinsic::fabs, Op0, nullptr, "elt.abs"); + return RValue::get(Result); } @@ -3185,11 +3192,11 @@ } return llvm::Intrinsic::vector_reduce_fmax; }; - Value *Op0 = EmitScalarExpr(E->getArg(0)); - Value *Result = Builder.CreateUnaryIntrinsic( - GetIntrinsicID(E->getArg(0)->getType(), Op0->getType()), Op0, nullptr, - "rdx.min"); - return RValue::get(Result); + return RValue::get(emitUnaryBuiltin( + *this, E, + GetIntrinsicID(E->getArg(0)->getType(), + EmitScalarExpr(E->getArg(0))->getType()), + "rdx.min")); } case Builtin::BI__builtin_reduce_min: {