clang 22.0.0git
CGBuiltin.h
Go to the documentation of this file.
1//===------ CGBuiltin.h - Emit LLVM Code for builtins ---------------------===//
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#ifndef LLVM_CLANG_LIB_CODEGEN_CGBUILTIN_H
10#define LLVM_CLANG_LIB_CODEGEN_CGBUILTIN_H
11
12#include "CodeGenFunction.h"
13
14// Many of MSVC builtins are on x64, ARM and AArch64; to avoid repeating code,
15// we handle them here.
58
59// Emit a simple intrinsic that has N scalar arguments and a return type
60// matching the argument type. It is assumed that only the first argument is
61// overloaded.
62template <unsigned N>
64 const clang::CallExpr *E,
65 unsigned IntrinsicID,
66 llvm::StringRef Name = "") {
67 static_assert(N, "expect non-empty argument");
69 for (unsigned I = 0; I < N; ++I)
70 Args.push_back(CGF.EmitScalarExpr(E->getArg(I)));
71 llvm::Function *F = CGF.CGM.getIntrinsic(IntrinsicID, Args[0]->getType());
72 return CGF.Builder.CreateCall(F, Args, Name);
73}
74
76 const clang::CallExpr *E,
77 unsigned IntrinsicID,
78 unsigned ConstrainedIntrinsicID);
79
80llvm::Value *EmitToInt(clang::CodeGen::CodeGenFunction &CGF, llvm::Value *V,
81 clang::QualType T, llvm::IntegerType *IntType);
82
83llvm::Value *EmitFromInt(clang::CodeGen::CodeGenFunction &CGF, llvm::Value *V,
84 clang::QualType T, llvm::Type *ResultType);
85
87 const clang::CallExpr *E);
88
90 llvm::AtomicRMWInst::BinOp Kind,
91 const clang::CallExpr *E,
92 llvm::AtomicOrdering Ordering =
93 llvm::AtomicOrdering::SequentiallyConsistent);
94
96 const llvm::Intrinsic::ID IntrinsicID,
97 llvm::Value *X,
98 llvm::Value *Y,
99 llvm::Value *&Carry);
100
102 const clang::CallExpr *E,
103 bool ReturnBool);
104
105#endif
#define V(N, I)
llvm::Value * emitBuiltinWithOneOverloadedType(clang::CodeGen::CodeGenFunction &CGF, const clang::CallExpr *E, unsigned IntrinsicID, llvm::StringRef Name="")
Definition CGBuiltin.h:63
clang::CodeGen::Address CheckAtomicAlignment(clang::CodeGen::CodeGenFunction &CGF, const clang::CallExpr *E)
llvm::Value * EmitToInt(clang::CodeGen::CodeGenFunction &CGF, llvm::Value *V, clang::QualType T, llvm::IntegerType *IntType)
Emit the conversions required to turn the given value into an integer of the given size.
llvm::Value * MakeBinaryAtomicValue(clang::CodeGen::CodeGenFunction &CGF, llvm::AtomicRMWInst::BinOp Kind, const clang::CallExpr *E, llvm::AtomicOrdering Ordering=llvm::AtomicOrdering::SequentiallyConsistent)
llvm::Value * EmitOverflowIntrinsic(clang::CodeGen::CodeGenFunction &CGF, const llvm::Intrinsic::ID IntrinsicID, llvm::Value *X, llvm::Value *Y, llvm::Value *&Carry)
llvm::Value * EmitFromInt(clang::CodeGen::CodeGenFunction &CGF, llvm::Value *V, clang::QualType T, llvm::Type *ResultType)
llvm::Value * emitUnaryMaybeConstrainedFPBuiltin(clang::CodeGen::CodeGenFunction &CGF, const clang::CallExpr *E, unsigned IntrinsicID, unsigned ConstrainedIntrinsicID)
llvm::Value * MakeAtomicCmpXchgValue(clang::CodeGen::CodeGenFunction &CGF, const clang::CallExpr *E, bool ReturnBool)
Utility to insert an atomic cmpxchg instruction.
TokenType getType() const
Returns the token's type, e.g.
#define X(type, name)
Definition Value.h:97
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
Definition Expr.h:2879
Expr * getArg(unsigned Arg)
getArg - Return the specified argument.
Definition Expr.h:3083
Like RawAddress, an abstract representation of an aligned address, but the pointer contained in this ...
Definition Address.h:128
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code...
llvm::Value * EmitScalarExpr(const Expr *E, bool IgnoreResultAssign=false)
EmitScalarExpr - Emit the computation of the specified expression of LLVM scalar type,...
llvm::Function * getIntrinsic(unsigned IID, ArrayRef< llvm::Type * > Tys={})
A (possibly-)qualified type.
Definition TypeBase.h:937