brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 3fb7fab Raw
110 lines · cpp
1//===-- LowLevelIntrinsics.cpp --------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/10//11//===----------------------------------------------------------------------===//12//13// Low level intrinsic functions.14//15// These include LLVM intrinsic calls and standard C library calls.16// Target-specific calls, such as OS functions, should be factored in other17// file(s).18//19//===----------------------------------------------------------------------===//20 21#include "flang/Optimizer/Builder/LowLevelIntrinsics.h"22#include "flang/Optimizer/Builder/FIRBuilder.h"23 24mlir::func::FuncOp fir::factory::getRealloc(fir::FirOpBuilder &builder) {25  auto ptrTy = builder.getRefType(builder.getIntegerType(8));26  llvm::SmallVector<mlir::Type> args = {ptrTy, builder.getI64Type()};27  auto reallocTy = mlir::FunctionType::get(builder.getContext(), args, {ptrTy});28  return builder.createFunction(builder.getUnknownLoc(), "realloc", reallocTy);29}30 31mlir::func::FuncOp32fir::factory::getLlvmGetRounding(fir::FirOpBuilder &builder) {33  auto int32Ty = builder.getIntegerType(32);34  auto funcTy = mlir::FunctionType::get(builder.getContext(), {}, {int32Ty});35  return builder.createFunction(builder.getUnknownLoc(), "llvm.get.rounding",36                                funcTy);37}38 39mlir::func::FuncOp40fir::factory::getLlvmSetRounding(fir::FirOpBuilder &builder) {41  auto int32Ty = builder.getIntegerType(32);42  auto funcTy = mlir::FunctionType::get(builder.getContext(), {int32Ty}, {});43  return builder.createFunction(builder.getUnknownLoc(), "llvm.set.rounding",44                                funcTy);45}46 47mlir::func::FuncOp48fir::factory::getLlvmInitTrampoline(fir::FirOpBuilder &builder) {49  auto ptrTy = builder.getRefType(builder.getIntegerType(8));50  auto funcTy =51      mlir::FunctionType::get(builder.getContext(), {ptrTy, ptrTy, ptrTy}, {});52  return builder.createFunction(builder.getUnknownLoc(), "llvm.init.trampoline",53                                funcTy);54}55 56mlir::func::FuncOp57fir::factory::getLlvmAdjustTrampoline(fir::FirOpBuilder &builder) {58  auto ptrTy = builder.getRefType(builder.getIntegerType(8));59  auto funcTy = mlir::FunctionType::get(builder.getContext(), {ptrTy}, {ptrTy});60  return builder.createFunction(builder.getUnknownLoc(),61                                "llvm.adjust.trampoline", funcTy);62}63 64mlir::func::FuncOp fir::factory::getFeclearexcept(fir::FirOpBuilder &builder) {65  auto int32Ty = builder.getIntegerType(32);66  auto funcTy =67      mlir::FunctionType::get(builder.getContext(), {int32Ty}, {int32Ty});68  return builder.createFunction(builder.getUnknownLoc(), "feclearexcept",69                                funcTy);70}71 72mlir::func::FuncOp73fir::factory::getFedisableexcept(fir::FirOpBuilder &builder) {74  auto int32Ty = builder.getIntegerType(32);75  auto funcTy =76      mlir::FunctionType::get(builder.getContext(), {int32Ty}, {int32Ty});77  return builder.createFunction(builder.getUnknownLoc(), "fedisableexcept",78                                funcTy);79}80 81mlir::func::FuncOp fir::factory::getFeenableexcept(fir::FirOpBuilder &builder) {82  auto int32Ty = builder.getIntegerType(32);83  auto funcTy =84      mlir::FunctionType::get(builder.getContext(), {int32Ty}, {int32Ty});85  return builder.createFunction(builder.getUnknownLoc(), "feenableexcept",86                                funcTy);87}88 89mlir::func::FuncOp fir::factory::getFegetexcept(fir::FirOpBuilder &builder) {90  auto int32Ty = builder.getIntegerType(32);91  auto funcTy = mlir::FunctionType::get(builder.getContext(), {}, {int32Ty});92  return builder.createFunction(builder.getUnknownLoc(), "fegetexcept", funcTy);93}94 95mlir::func::FuncOp fir::factory::getFeraiseexcept(fir::FirOpBuilder &builder) {96  auto int32Ty = builder.getIntegerType(32);97  auto funcTy =98      mlir::FunctionType::get(builder.getContext(), {int32Ty}, {int32Ty});99  return builder.createFunction(builder.getUnknownLoc(), "feraiseexcept",100                                funcTy);101}102 103mlir::func::FuncOp fir::factory::getFetestexcept(fir::FirOpBuilder &builder) {104  auto int32Ty = builder.getIntegerType(32);105  auto funcTy =106      mlir::FunctionType::get(builder.getContext(), {int32Ty}, {int32Ty});107  return builder.createFunction(builder.getUnknownLoc(), "fetestexcept",108                                funcTy);109}110