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-exception
6 //
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 other
17 // file(s).
18 //
19 //===----------------------------------------------------------------------===//
20 
21 #include "flang/Optimizer/Builder/LowLevelIntrinsics.h"
22 #include "flang/Optimizer/Builder/FIRBuilder.h"
23 
24 mlir::FuncOp fir::factory::getLlvmStackSave(fir::FirOpBuilder &builder) {
25   auto ptrTy = builder.getRefType(builder.getIntegerType(8));
26   auto funcTy =
27       mlir::FunctionType::get(builder.getContext(), llvm::None, {ptrTy});
28   return builder.addNamedFunction(builder.getUnknownLoc(), "llvm.stacksave",
29                                   funcTy);
30 }
31 
32 mlir::FuncOp fir::factory::getLlvmStackRestore(fir::FirOpBuilder &builder) {
33   auto ptrTy = builder.getRefType(builder.getIntegerType(8));
34   auto funcTy =
35       mlir::FunctionType::get(builder.getContext(), {ptrTy}, llvm::None);
36   return builder.addNamedFunction(builder.getUnknownLoc(), "llvm.stackrestore",
37                                   funcTy);
38 }
39