parent
fb21f16fe6
commit
8ee1803538
@ -4191,6 +4191,16 @@ def CIR_CosOp : CIR_UnaryFPToFPBuiltinOp<"cos", "CosOp"> {
|
||||
}];
|
||||
}
|
||||
|
||||
def CIR_ExpOp : CIR_UnaryFPToFPBuiltinOp<"exp", "ExpOp"> {
|
||||
let summary = "Computes the floating-point base-e exponential value";
|
||||
let description = [{
|
||||
`cir.exp` computes the exponential of a floating-point operand and returns
|
||||
a result of the same type.
|
||||
|
||||
Floating-point exceptions are ignored, and it does not set `errno`.
|
||||
}];
|
||||
}
|
||||
|
||||
def CIR_FAbsOp : CIR_UnaryFPToFPBuiltinOp<"fabs", "FAbsOp"> {
|
||||
let summary = "Computes the floating-point absolute value";
|
||||
let description = [{
|
||||
|
||||
@ -222,6 +222,17 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID,
|
||||
assert(!cir::MissingFeatures::fastMathFlags());
|
||||
return emitUnaryMaybeConstrainedFPBuiltin<cir::CeilOp>(*this, *e);
|
||||
|
||||
case Builtin::BIexp:
|
||||
case Builtin::BIexpf:
|
||||
case Builtin::BIexpl:
|
||||
case Builtin::BI__builtin_exp:
|
||||
case Builtin::BI__builtin_expf:
|
||||
case Builtin::BI__builtin_expf16:
|
||||
case Builtin::BI__builtin_expl:
|
||||
case Builtin::BI__builtin_expf128:
|
||||
assert(!cir::MissingFeatures::fastMathFlags());
|
||||
return emitUnaryMaybeConstrainedFPBuiltin<cir::ExpOp>(*this, *e);
|
||||
|
||||
case Builtin::BIfabs:
|
||||
case Builtin::BIfabsf:
|
||||
case Builtin::BIfabsl:
|
||||
|
||||
@ -194,6 +194,14 @@ mlir::LogicalResult CIRToLLVMCosOpLowering::matchAndRewrite(
|
||||
return mlir::success();
|
||||
}
|
||||
|
||||
mlir::LogicalResult CIRToLLVMExpOpLowering::matchAndRewrite(
|
||||
cir::ExpOp op, OpAdaptor adaptor,
|
||||
mlir::ConversionPatternRewriter &rewriter) const {
|
||||
mlir::Type resTy = typeConverter->convertType(op.getType());
|
||||
rewriter.replaceOpWithNewOp<mlir::LLVM::ExpOp>(op, resTy, adaptor.getSrc());
|
||||
return mlir::success();
|
||||
}
|
||||
|
||||
static mlir::Value getLLVMIntCast(mlir::ConversionPatternRewriter &rewriter,
|
||||
mlir::Value llvmSrc, mlir::Type llvmDstIntTy,
|
||||
bool isUnsigned, uint64_t cirSrcWidth,
|
||||
|
||||
@ -25,3 +25,24 @@ float ceil(float f) {
|
||||
// LLVM: %{{.*}} = call float @llvm.ceil.f32(float %{{.*}})
|
||||
// OGCG: %{{.*}} = call float @llvm.ceil.f32(float %{{.*}})
|
||||
}
|
||||
|
||||
float expf(float f) {
|
||||
return __builtin_expf(f);
|
||||
// CIR: %{{.*}} = cir.exp {{.*}} : !cir.float
|
||||
// LLVM: %{{.*}} = call float @llvm.exp.f32(float %{{.*}})
|
||||
// OGCG: %{{.*}} = call float @llvm.exp.f32(float %{{.*}})
|
||||
}
|
||||
|
||||
double exp(double f) {
|
||||
return __builtin_exp(f);
|
||||
// CIR: %{{.*}} = cir.exp {{.*}} : !cir.double
|
||||
// LLVM: %{{.*}} = call double @llvm.exp.f64(double %{{.*}})
|
||||
// OGCG: %{{.*}} = call double @llvm.exp.f64(double %{{.*}})
|
||||
}
|
||||
|
||||
long double expl(long double f) {
|
||||
return __builtin_expl(f);
|
||||
// CIR: %{{.*}} = cir.exp {{.*}} : !cir.long_double<!cir.f128>
|
||||
// LLVM: %{{.*}} = call fp128 @llvm.exp.f128(fp128 %{{.*}})
|
||||
// OGCG: %{{.*}} = call fp128 @llvm.exp.f128(fp128 %{{.*}})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user