clang 22.0.0git
CGExprAgg.cpp File Reference
#include "CGCXXABI.h"
#include "CGDebugInfo.h"
#include "CGHLSLRuntime.h"
#include "CGObjCRuntime.h"
#include "CGRecordLayout.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "ConstantEmitter.h"
#include "EHScopeStack.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/StmtVisitor.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"

Go to the source code of this file.

Namespaces

namespace  llvm
 Diagnostic wrappers for TextAPI types for error reporting.

Enumerations

enum  CompareKind { CK_Less , CK_Greater , CK_Equal }

Functions

static bool isTrivialFiller (Expr *E)
 Determine if E is a trivial array filler, that is, one that is equivalent to zero-initialization.
static void EmitHLSLAggregateSplatCast (CodeGenFunction &CGF, Address DestVal, QualType DestTy, llvm::Value *SrcVal, QualType SrcTy, SourceLocation Loc)
static void EmitHLSLScalarFlatCast (CodeGenFunction &CGF, Address DestVal, QualType DestTy, llvm::Value *SrcVal, QualType SrcTy, SourceLocation Loc)
static void EmitHLSLElementwiseCast (CodeGenFunction &CGF, Address DestVal, QualType DestTy, Address SrcVal, QualType SrcTy, SourceLocation Loc)
static ExprfindPeephole (Expr *op, CastKind kind, const ASTContext &ctx)
 Attempt to look through various unimportant expressions to find a cast of the given kind.
static llvm::ValueEmitCompare (CGBuilderTy &Builder, CodeGenFunction &CGF, const BinaryOperator *E, llvm::Value *LHS, llvm::Value *RHS, CompareKind Kind, const char *NameSuffix="")
static bool isBlockVarRef (const Expr *E)
 Is the value of the given expression possibly a reference to or into a __block variable?
static bool castPreservesZero (const CastExpr *CE)
 Determine whether the given cast kind is known to always convert values with all zero bits in their value representation to values with all zero bits in their value representation.
static bool isSimpleZero (const Expr *E, CodeGenFunction &CGF)
 isSimpleZero - If emitting this value will obviously just cause a store of zero to memory, return true.
static CharUnits GetNumNonZeroBytesInInit (const Expr *E, CodeGenFunction &CGF)
 GetNumNonZeroBytesInInit - Get an approximate count of the number of non-zero bytes that will be stored when outputting the initializer for the specified initializer expression.
static void CheckAggExprForMemSetUse (AggValueSlot &Slot, const Expr *E, CodeGenFunction &CGF)
 CheckAggExprForMemSetUse - If the initializer is large and has a lot of zeros in it, emit a memset and avoid storing the individual zeros.

Variables

cl::opt< boolllvm::EnableSingleByteCoverage

Enumeration Type Documentation

◆ CompareKind

Enumerator
CK_Less 
CK_Greater 
CK_Equal 

Definition at line 1115 of file CGExprAgg.cpp.

Function Documentation

◆ castPreservesZero()

bool castPreservesZero ( const CastExpr * CE)
static

Determine whether the given cast kind is known to always convert values with all zero bits in their value representation to values with all zero bits in their value representation.

Definition at line 1553 of file CGExprAgg.cpp.

References clang::CastExpr::getCastKind().

Referenced by isSimpleZero().

◆ CheckAggExprForMemSetUse()

◆ EmitCompare()

◆ EmitHLSLAggregateSplatCast()

◆ EmitHLSLElementwiseCast()

◆ EmitHLSLScalarFlatCast()

◆ findPeephole()

Expr * findPeephole ( Expr * op,
CastKind kind,
const ASTContext & ctx )
static

Attempt to look through various unimportant expressions to find a cast of the given kind.

Definition at line 824 of file CGExprAgg.cpp.

References clang::Expr::IgnoreParenNoopCasts().

◆ GetNumNonZeroBytesInInit()

◆ isBlockVarRef()

bool isBlockVarRef ( const Expr * E)
static

Is the value of the given expression possibly a reference to or into a __block variable?

Definition at line 1266 of file CGExprAgg.cpp.

References clang::cast(), clang::Expr::IgnoreParens(), and isBlockVarRef().

Referenced by isBlockVarRef().

◆ isSimpleZero()

bool isSimpleZero ( const Expr * E,
CodeGenFunction & CGF )
static

isSimpleZero - If emitting this value will obviously just cause a store of zero to memory, return true.

This can return false if uncertain, so it just handles simple cases.

Definition at line 1652 of file CGExprAgg.cpp.

References castPreservesZero(), clang::CodeGen::CodeGenFunction::getContext(), clang::Expr::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::Expr::HasSideEffects(), clang::Expr::IgnoreParens(), clang::isa(), clang::CodeGen::CodeGenTypes::isPointerZeroInitializable(), and clang::CodeGen::CodeGenTypes::isZeroInitializable().

Referenced by GetNumNonZeroBytesInInit().

◆ isTrivialFiller()

bool isTrivialFiller ( Expr * E)
static

Determine if E is a trivial array filler, that is, one that is equivalent to zero-initialization.

Definition at line 470 of file CGExprAgg.cpp.

References clang::isa(), and isTrivialFiller().