#include "CGDebugInfo.h"
#include "CGOpenMPRuntime.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "TargetInfo.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Expr.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/PrettyStackTrace.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/Assumptions.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/Support/SaveAndRestore.h"
#include <optional>
#include "clang/AST/StmtNodes.inc"
Go to the source code of this file.
namespace llvm Diagnostic wrappers for TextAPI types for error reporting.CollectStatementsForCase - Given the body of a 'switch' statement and a constant value that is being switched on, see if we can dead code eliminate the body of the switch to a simple series of statements to emit.
Basically, on a switch (5) we want to find these statements: case 5: printf(...); <– ++i; <– break;
and add them to the ResultStmts vector. If it is unsafe to do this transformation (for example, one of the elided statements contains a label that might be jumped to), return CSFC_Failure. If we handled it and 'S' should include statements after it (e.g. the printf() line is a substmt of the case) then return CSFC_FallThrough. If we handled it and found a break statement, then return CSFC_Success.
If Case is non-null, then we are looking for the specified case, checking that nothing we jump over contains labels. If Case is null, then we found the case and are looking for the break.
If the recursive walk actually finds our Case, then we set FoundCase to true.
Enumerator CSFC_Failure CSFC_FallThrough CSFC_SuccessDefinition at line 1926 of file CGStmt.cpp.
◆ AddVariableConstraints() static std::string AddVariableConstraints ( const std::string & Constraint, const Expr & AsmExpr, const TargetInfo & Target, CodeGenModule & CGM, const AsmStmt & Stmt, const bool EarlyClobber, std::string * GCCReg =nullptr
) static ◆ CollectStatementsForCase() ◆ EmitAsmStores()
Definition at line 2595 of file CGStmt.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::EmitStoreThroughLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::CodeGenModule::getDiags(), clang::Expr::getExprLoc(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::ASTContext::getIntTypeForBitwidth(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::CodeGen::CodeGenFunction::getTargetHooks(), clang::ASTContext::getTypeSize(), clang::QualType::isNull(), clang::CodeGen::TargetCodeGenInfo::isScalarizableAsmOperand(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), clang::DiagnosticsEngine::Report(), and clang::CodeGen::Address::withElementType().
◆ EmitHipStdParUnsupportedAsm() ◆ FindCaseStatementsForValue() ◆ getAsmSrcLocInfo()getAsmSrcLocInfo - Return the !srcloc metadata node to attach to an inline asm call instruction.
The !srcloc MDNode contains a list of constant integers which are the source locations of the start of each line in the asm.
Definition at line 2506 of file CGStmt.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::StringLiteral::getBeginLoc(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::StringLiteral::getLocationOfByte(), clang::SourceLocation::getRawEncoding(), clang::ASTContext::getSourceManager(), clang::StringLiteral::getString(), clang::CodeGen::CodeGenFunction::getTarget(), clang::CodeGen::CodeGenTypeCache::Int64Ty, and SM.
Referenced by UpdateAsmCallInst().
◆ getConvergenceToken() static llvm::ConvergenceControlInst * getConvergenceToken ( llvm::BasicBlock * BB ) staticDefinition at line 3282 of file CGStmt.cpp.
◆ getLikelihoodWeights() ◆ hasEmptyLoopBody()template<typename LoopStmt >
static bool hasEmptyLoopBody ( const LoopStmt & S ) staticDefinition at line 1040 of file CGStmt.cpp.
◆ isSwiftAsyncCallee() ◆ SimplifyConstraint() ◆ UpdateAsmCallInst() static void UpdateAsmCallInst ( llvm::CallBase & Result, bool HasSideEffect, bool HasUnwindClobber, bool ReadOnly, bool ReadNone, bool NoMerge, bool NoConvergent, const AsmStmt & S, const std::vector< llvm::Type * > & ResultRegTypes, const std::vector< llvm::Type * > & ArgElemTypes, CodeGenFunction & CGF, std::vector< llvm::Value * > & RegResults ) staticRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4