xref: /llvm-project/clang/lib/CIR/CodeGen/CIRGenBuilder.h (revision 8ae8a905855ca1b07a72059d8225ab1f9cae65dc)
1ffb19f40SDavid Olsen //===----------------------------------------------------------------------===//
2ffb19f40SDavid Olsen //
3ffb19f40SDavid Olsen // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ffb19f40SDavid Olsen // See https://llvm.org/LICENSE.txt for license information.
5ffb19f40SDavid Olsen // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ffb19f40SDavid Olsen //
7ffb19f40SDavid Olsen //===----------------------------------------------------------------------===//
8ffb19f40SDavid Olsen 
9ffb19f40SDavid Olsen #ifndef LLVM_CLANG_LIB_CIR_CODEGEN_CIRGENBUILDER_H
10ffb19f40SDavid Olsen #define LLVM_CLANG_LIB_CIR_CODEGEN_CIRGENBUILDER_H
11ffb19f40SDavid Olsen 
12ffb19f40SDavid Olsen #include "CIRGenTypeCache.h"
13ffb19f40SDavid Olsen 
14ffb19f40SDavid Olsen #include "clang/CIR/Dialect/Builder/CIRBaseBuilder.h"
15ffb19f40SDavid Olsen 
16ffb19f40SDavid Olsen namespace clang::CIRGen {
17ffb19f40SDavid Olsen 
18ffb19f40SDavid Olsen class CIRGenBuilderTy : public cir::CIRBaseBuilderTy {
19ffb19f40SDavid Olsen   const CIRGenTypeCache &typeCache;
20ffb19f40SDavid Olsen 
21ffb19f40SDavid Olsen public:
22ffb19f40SDavid Olsen   CIRGenBuilderTy(mlir::MLIRContext &mlirContext, const CIRGenTypeCache &tc)
23ffb19f40SDavid Olsen       : CIRBaseBuilderTy(mlirContext), typeCache(tc) {}
24*8ae8a905SDavid Olsen 
25*8ae8a905SDavid Olsen   cir::LongDoubleType getLongDoubleTy(const llvm::fltSemantics &format) const {
26*8ae8a905SDavid Olsen     if (&format == &llvm::APFloat::IEEEdouble())
27*8ae8a905SDavid Olsen       return cir::LongDoubleType::get(getContext(), typeCache.DoubleTy);
28*8ae8a905SDavid Olsen     if (&format == &llvm::APFloat::x87DoubleExtended())
29*8ae8a905SDavid Olsen       return cir::LongDoubleType::get(getContext(), typeCache.FP80Ty);
30*8ae8a905SDavid Olsen     if (&format == &llvm::APFloat::IEEEquad())
31*8ae8a905SDavid Olsen       return cir::LongDoubleType::get(getContext(), typeCache.FP128Ty);
32*8ae8a905SDavid Olsen     if (&format == &llvm::APFloat::PPCDoubleDouble())
33*8ae8a905SDavid Olsen       llvm_unreachable("NYI: PPC double-double format for long double");
34*8ae8a905SDavid Olsen     llvm_unreachable("Unsupported format for long double");
35*8ae8a905SDavid Olsen   }
36ffb19f40SDavid Olsen };
37ffb19f40SDavid Olsen 
38ffb19f40SDavid Olsen } // namespace clang::CIRGen
39ffb19f40SDavid Olsen 
40ffb19f40SDavid Olsen #endif
41