blob: 4e97f9bfe39ffef9be418cef24fa7ddabe81d8d4 [file] [log] [blame]
Chris Lattnerbed31442007-05-28 01:07:47 +00001//===--- CodeGenFunction.cpp - Emit LLVM Code from ASTs for a Function ----===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner5b12ab82007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattnerbed31442007-05-28 01:07:47 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This coordinates the per-function state used while generating code.
11//
12//===----------------------------------------------------------------------===//
13
14#include "CodeGenFunction.h"
Peter Collingbournefa4d6032011-10-06 18:51:56 +000015#include "CGCUDARuntime.h"
John McCall5d865c322010-08-31 07:33:07 +000016#include "CGCXXABI.h"
Eli Friedman17630752008-05-22 01:40:10 +000017#include "CGDebugInfo.h"
Alexey Bataev9959db52014-05-06 10:08:46 +000018#include "CGOpenMPRuntime.h"
Chandler Carruth3a022472012-12-04 09:13:33 +000019#include "CodeGenModule.h"
Justin Bogneref512b92014-01-06 22:27:43 +000020#include "CodeGenPGO.h"
Peter Collingbourneb453cd62013-10-20 21:29:19 +000021#include "TargetInfo.h"
Daniel Dunbarad319a72008-08-11 05:00:27 +000022#include "clang/AST/ASTContext.h"
Daniel Dunbar6e8aa532008-08-11 05:35:13 +000023#include "clang/AST/Decl.h"
Anders Carlsson468fa632009-04-04 20:47:02 +000024#include "clang/AST/DeclCXX.h"
Mike Stumpbee78dd2009-12-04 23:26:17 +000025#include "clang/AST/StmtCXX.h"
Chandler Carruth3a022472012-12-04 09:13:33 +000026#include "clang/Basic/TargetInfo.h"
Mark Laceya8e7df32013-10-30 21:53:58 +000027#include "clang/CodeGen/CGFunctionInfo.h"
Chris Lattner3c77a352010-06-22 00:03:40 +000028#include "clang/Frontend/CodeGenOptions.h"
Chandler Carruthffd55512013-01-02 11:45:17 +000029#include "llvm/IR/DataLayout.h"
30#include "llvm/IR/Intrinsics.h"
31#include "llvm/IR/MDBuilder.h"
32#include "llvm/IR/Operator.h"
Chris Lattnerbed31442007-05-28 01:07:47 +000033using namespace clang;
34using namespace CodeGen;
35
Fariborz Jahanian63628032012-06-26 16:06:38 +000036CodeGenFunction::CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext)
David Blaikie92848de2013-08-26 20:33:21 +000037 : CodeGenTypeCache(cgm), CGM(cgm), Target(cgm.getTarget()),
Alexander Musman515ad8c2014-05-22 08:54:05 +000038 Builder(cgm.getModule().getContext(), llvm::ConstantFolder(),
David Blaikie8e90d222014-10-14 17:09:38 +000039 CGBuilderInserterTy(this)),
40 CurFn(nullptr), CapturedStmtInfo(nullptr),
Alexey Samsonov035462c2014-10-30 19:33:44 +000041 SanOpts(CGM.getLangOpts().Sanitize), IsSanitizerScope(false),
David Blaikie8e90d222014-10-14 17:09:38 +000042 CurFuncIsThunk(false), AutoreleaseResult(false), SawAsmBlock(false),
43 BlockInfo(nullptr), BlockPointer(nullptr),
Reid Kleckner19819442014-07-25 21:39:46 +000044 LambdaThisCaptureField(nullptr), NormalCleanupDest(nullptr),
45 NextCleanupDestIndex(1), FirstBlockInfo(nullptr), EHResumeBlock(nullptr),
46 ExceptionSlot(nullptr), EHSelectorSlot(nullptr),
47 DebugInfo(CGM.getModuleDebugInfo()), DisableDebugInfo(false),
48 DidCallStackSave(false), IndirectBranch(nullptr), PGO(cgm),
49 SwitchInsn(nullptr), SwitchWeights(nullptr), CaseRangeBlock(nullptr),
50 UnreachableBlock(nullptr), NumReturnExprs(0), NumSimpleReturnExprs(0),
51 CXXABIThisDecl(nullptr), CXXABIThisValue(nullptr), CXXThisValue(nullptr),
Craig Topper8a13c412014-05-21 05:09:00 +000052 CXXDefaultInitExprThis(nullptr), CXXStructorImplicitParamDecl(nullptr),
53 CXXStructorImplicitParamValue(nullptr), OutermostConditional(nullptr),
54 CurLexicalScope(nullptr), TerminateLandingPad(nullptr),
55 TerminateHandler(nullptr), TrapBB(nullptr) {
Fariborz Jahanian63628032012-06-26 16:06:38 +000056 if (!suppressNewContext)
57 CGM.getCXXABI().getMangleContext().startNewFunction();
Michael Ilseman7a167ee2012-12-04 00:36:06 +000058
59 llvm::FastMathFlags FMF;
60 if (CGM.getLangOpts().FastMath)
Benjamin Kramer7464efc2012-12-09 21:58:24 +000061 FMF.setUnsafeAlgebra();
Michael Ilseman7a167ee2012-12-04 00:36:06 +000062 if (CGM.getLangOpts().FiniteMathOnly) {
Benjamin Kramer7464efc2012-12-09 21:58:24 +000063 FMF.setNoNaNs();
64 FMF.setNoInfs();
Michael Ilseman7a167ee2012-12-04 00:36:06 +000065 }
Pekka Jaaskelainen37014502014-12-10 16:41:14 +000066 if (CGM.getCodeGenOpts().NoNaNsFPMath) {
67 FMF.setNoNaNs();
68 }
69 if (CGM.getCodeGenOpts().NoSignedZeros) {
70 FMF.setNoSignedZeros();
71 }
Michael Ilseman7a167ee2012-12-04 00:36:06 +000072 Builder.SetFastMathFlags(FMF);
Chris Lattner5696e7b2008-06-17 18:05:57 +000073}
Chris Lattnerd1af2d22007-05-29 23:17:50 +000074
John McCall08ef4662011-11-10 08:15:53 +000075CodeGenFunction::~CodeGenFunction() {
Richard Smith736a9472013-06-12 20:42:33 +000076 assert(LifetimeExtendedCleanupStack.empty() && "failed to emit a cleanup");
77
John McCall08ef4662011-11-10 08:15:53 +000078 // If there are any unclaimed block infos, go ahead and destroy them
79 // now. This can happen if IR-gen gets clever and skips evaluating
80 // something.
81 if (FirstBlockInfo)
82 destroyBlockInfos(FirstBlockInfo);
Alexey Bataev9959db52014-05-06 10:08:46 +000083
84 if (getLangOpts().OpenMP) {
85 CGM.getOpenMPRuntime().FunctionFinished(*this);
86 }
John McCall08ef4662011-11-10 08:15:53 +000087}
88
David Majnemer99281062014-09-18 22:05:54 +000089LValue CodeGenFunction::MakeNaturalAlignAddrLValue(llvm::Value *V, QualType T) {
90 CharUnits Alignment;
91 if (CGM.getCXXABI().isTypeInfoCalculable(T)) {
92 Alignment = getContext().getTypeAlignInChars(T);
93 unsigned MaxAlign = getContext().getLangOpts().MaxTypeAlign;
94 if (MaxAlign && Alignment.getQuantity() > MaxAlign &&
95 !getContext().isAlignmentRequired(T))
96 Alignment = CharUnits::fromQuantity(MaxAlign);
97 }
98 return LValue::MakeAddr(V, T, Alignment, getContext(), CGM.getTBAAInfo(T));
99}
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000100
Chris Lattnera5f58b02011-07-09 17:41:47 +0000101llvm::Type *CodeGenFunction::ConvertTypeForMem(QualType T) {
Daniel Dunbaree3da872009-02-03 23:03:55 +0000102 return CGM.getTypes().ConvertTypeForMem(T);
103}
104
Chris Lattnera5f58b02011-07-09 17:41:47 +0000105llvm::Type *CodeGenFunction::ConvertType(QualType T) {
Chris Lattnerf033c142007-06-22 19:05:19 +0000106 return CGM.getTypes().ConvertType(T);
Chris Lattner45bb9142007-06-09 02:28:57 +0000107}
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000108
John McCall47fb9502013-03-07 21:37:08 +0000109TypeEvaluationKind CodeGenFunction::getEvaluationKind(QualType type) {
110 type = type.getCanonicalType();
111 while (true) {
112 switch (type->getTypeClass()) {
John McCall745ae282011-05-15 02:34:36 +0000113#define TYPE(name, parent)
114#define ABSTRACT_TYPE(name, parent)
115#define NON_CANONICAL_TYPE(name, parent) case Type::name:
116#define DEPENDENT_TYPE(name, parent) case Type::name:
117#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(name, parent) case Type::name:
118#include "clang/AST/TypeNodes.def"
John McCall47fb9502013-03-07 21:37:08 +0000119 llvm_unreachable("non-canonical or dependent type in IR-generation");
John McCall745ae282011-05-15 02:34:36 +0000120
Richard Smith27d807c2013-04-30 13:56:41 +0000121 case Type::Auto:
122 llvm_unreachable("undeduced auto type in IR-generation");
123
John McCall47fb9502013-03-07 21:37:08 +0000124 // Various scalar types.
125 case Type::Builtin:
126 case Type::Pointer:
127 case Type::BlockPointer:
128 case Type::LValueReference:
129 case Type::RValueReference:
130 case Type::MemberPointer:
131 case Type::Vector:
132 case Type::ExtVector:
133 case Type::FunctionProto:
134 case Type::FunctionNoProto:
135 case Type::Enum:
136 case Type::ObjCObjectPointer:
137 return TEK_Scalar;
John McCall745ae282011-05-15 02:34:36 +0000138
John McCall47fb9502013-03-07 21:37:08 +0000139 // Complexes.
140 case Type::Complex:
141 return TEK_Complex;
Eli Friedman0dfb8892011-10-06 23:00:33 +0000142
John McCall47fb9502013-03-07 21:37:08 +0000143 // Arrays, records, and Objective-C objects.
144 case Type::ConstantArray:
145 case Type::IncompleteArray:
146 case Type::VariableArray:
147 case Type::Record:
148 case Type::ObjCObject:
149 case Type::ObjCInterface:
150 return TEK_Aggregate;
151
152 // We operate on atomic values according to their underlying type.
153 case Type::Atomic:
154 type = cast<AtomicType>(type)->getValueType();
155 continue;
156 }
157 llvm_unreachable("unknown type kind!");
John McCall745ae282011-05-15 02:34:36 +0000158 }
Chris Lattner54fb19e2007-06-22 22:02:34 +0000159}
160
David Blaikie357aafb2013-02-01 19:09:49 +0000161void CodeGenFunction::EmitReturnBlock() {
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000162 // For cleanliness, we try to avoid emitting the return block for
163 // simple cases.
164 llvm::BasicBlock *CurBB = Builder.GetInsertBlock();
165
166 if (CurBB) {
167 assert(!CurBB->getTerminator() && "Unexpected terminated block.");
168
Daniel Dunbarea3060a2009-07-19 08:24:34 +0000169 // We have a valid insert point, reuse it if it is empty or there are no
170 // explicit jumps to the return block.
John McCallad5d61e2010-07-23 21:56:41 +0000171 if (CurBB->empty() || ReturnBlock.getBlock()->use_empty()) {
172 ReturnBlock.getBlock()->replaceAllUsesWith(CurBB);
173 delete ReturnBlock.getBlock();
Daniel Dunbarea3060a2009-07-19 08:24:34 +0000174 } else
John McCallad5d61e2010-07-23 21:56:41 +0000175 EmitBlock(ReturnBlock.getBlock());
David Blaikie357aafb2013-02-01 19:09:49 +0000176 return;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000177 }
178
179 // Otherwise, if the return block is the target of a single direct
180 // branch then we can just put the code in that block instead. This
181 // cleans up functions which started with a unified return block.
John McCallad5d61e2010-07-23 21:56:41 +0000182 if (ReturnBlock.getBlock()->hasOneUse()) {
Mike Stump11289f42009-09-09 15:08:12 +0000183 llvm::BranchInst *BI =
Chandler Carruth4d01fff2014-03-09 03:16:50 +0000184 dyn_cast<llvm::BranchInst>(*ReturnBlock.getBlock()->user_begin());
John McCallbd309292010-07-06 01:34:17 +0000185 if (BI && BI->isUnconditional() &&
John McCallad5d61e2010-07-23 21:56:41 +0000186 BI->getSuccessor(0) == ReturnBlock.getBlock()) {
David Blaikie1d969f42013-02-23 19:20:56 +0000187 // Reset insertion point, including debug location, and delete the
188 // branch. This is really subtle and only works because the next change
189 // in location will hit the caching in CGDebugInfo::EmitLocation and not
190 // override this.
Eric Christopher65c5c912011-09-09 21:53:04 +0000191 Builder.SetCurrentDebugLocation(BI->getDebugLoc());
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000192 Builder.SetInsertPoint(BI->getParent());
193 BI->eraseFromParent();
John McCallad5d61e2010-07-23 21:56:41 +0000194 delete ReturnBlock.getBlock();
David Blaikie357aafb2013-02-01 19:09:49 +0000195 return;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000196 }
197 }
198
Mike Stump18bb9282009-05-16 07:57:57 +0000199 // FIXME: We are at an unreachable point, there is no reason to emit the block
200 // unless it has uses. However, we still need a place to put the debug
201 // region.end for now.
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000202
John McCallad5d61e2010-07-23 21:56:41 +0000203 EmitBlock(ReturnBlock.getBlock());
John McCallbd309292010-07-06 01:34:17 +0000204}
205
206static void EmitIfUsed(CodeGenFunction &CGF, llvm::BasicBlock *BB) {
207 if (!BB) return;
208 if (!BB->use_empty())
209 return CGF.CurFn->getBasicBlockList().push_back(BB);
210 delete BB;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000211}
212
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000213void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
Chris Lattnere73e4322007-07-16 21:28:45 +0000214 assert(BreakContinueStack.empty() &&
215 "mismatched push/pop in break/continue stack!");
Mike Stump11289f42009-09-09 15:08:12 +0000216
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000217 bool OnlySimpleReturnStmts = NumSimpleReturnExprs > 0
Adrian Prantl524ba1f2013-07-25 00:23:42 +0000218 && NumSimpleReturnExprs == NumReturnExprs
219 && ReturnBlock.getBlock()->use_empty();
220 // Usually the return expression is evaluated before the cleanup
221 // code. If the function contains only a simple return statement,
222 // such as a constant, the location before the cleanup code becomes
223 // the last useful breakpoint in the function, because the simple
224 // return expression will be evaluated after the cleanup code. To be
225 // safe, set the debug location for cleanup code to the location of
226 // the return statement. Otherwise the cleanup code should be at the
227 // end of the function's lexical scope.
228 //
229 // If there are multiple branches to the return block, the branch
230 // instructions will get the location of the return statements and
231 // all will be fine.
Adrian Prantl3be10542013-05-02 17:30:20 +0000232 if (CGDebugInfo *DI = getDebugInfo()) {
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000233 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000234 DI->EmitLocation(Builder, LastStopPoint);
Adrian Prantl3be10542013-05-02 17:30:20 +0000235 else
Adrian Prantle83b1302014-01-07 22:05:52 +0000236 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000237 }
David Blaikie357aafb2013-02-01 19:09:49 +0000238
John McCall31168b02011-06-15 23:02:42 +0000239 // Pop any cleanups that might have been associated with the
240 // parameters. Do this in whatever block we're currently in; it's
241 // important to do this before we enter the return block or return
242 // edges will be *really* confused.
Adrian Prantl3be10542013-05-02 17:30:20 +0000243 bool EmitRetDbgLoc = true;
244 if (EHStack.stable_begin() != PrologueCleanupDepth) {
Adrian Prantldc237b52013-05-16 00:41:26 +0000245 PopCleanupBlocks(PrologueCleanupDepth);
John McCall31168b02011-06-15 23:02:42 +0000246
Adrian Prantl3be10542013-05-02 17:30:20 +0000247 // Make sure the line table doesn't jump back into the body for
248 // the ret after it's been at EndLoc.
249 EmitRetDbgLoc = false;
250
251 if (CGDebugInfo *DI = getDebugInfo())
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000252 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000253 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000254 }
255
Mike Stump11289f42009-09-09 15:08:12 +0000256 // Emit function epilog (to return).
David Blaikie357aafb2013-02-01 19:09:49 +0000257 EmitReturnBlock();
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000258
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000259 if (ShouldInstrumentFunction())
260 EmitFunctionInstrumentation("__cyg_profile_func_exit");
Chris Lattner3c77a352010-06-22 00:03:40 +0000261
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000262 // Emit debug descriptor for function end.
Anders Carlsson63784f42009-02-13 08:11:52 +0000263 if (CGDebugInfo *DI = getDebugInfo()) {
Devang Patel0884a602010-07-22 22:29:16 +0000264 DI->EmitFunctionEnd(Builder);
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000265 }
266
Nick Lewycky2d84e842013-10-02 02:29:49 +0000267 EmitFunctionEpilog(*CurFnInfo, EmitRetDbgLoc, EndLoc);
Mike Stump1d849212009-12-07 23:38:24 +0000268 EmitEndEHSpec(CurCodeDecl);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000269
John McCallbd309292010-07-06 01:34:17 +0000270 assert(EHStack.empty() &&
271 "did not remove all scopes from cleanup stack!");
272
Chris Lattner6c4d2552009-10-28 23:59:40 +0000273 // If someone did an indirect goto, emit the indirect goto block at the end of
274 // the function.
275 if (IndirectBranch) {
276 EmitBlock(IndirectBranch->getParent());
277 Builder.ClearInsertionPoint();
278 }
Michael Ilseman686240a2012-12-04 00:29:55 +0000279
Chris Lattnerc48023b2007-12-02 06:32:24 +0000280 // Remove the AllocaInsertPt instruction, which is just a convenience for us.
Chris Lattner2739d2b2009-03-31 22:17:44 +0000281 llvm::Instruction *Ptr = AllocaInsertPt;
Craig Topper8a13c412014-05-21 05:09:00 +0000282 AllocaInsertPt = nullptr;
Chris Lattner2739d2b2009-03-31 22:17:44 +0000283 Ptr->eraseFromParent();
Michael Ilseman686240a2012-12-04 00:29:55 +0000284
Chris Lattner6c4d2552009-10-28 23:59:40 +0000285 // If someone took the address of a label but never did an indirect goto, we
286 // made a zero entry PHI node, which is illegal, zap it now.
287 if (IndirectBranch) {
288 llvm::PHINode *PN = cast<llvm::PHINode>(IndirectBranch->getAddress());
289 if (PN->getNumIncomingValues() == 0) {
290 PN->replaceAllUsesWith(llvm::UndefValue::get(PN->getType()));
291 PN->eraseFromParent();
292 }
293 }
John McCallbd309292010-07-06 01:34:17 +0000294
John McCall8e4c74b2011-08-11 02:22:43 +0000295 EmitIfUsed(*this, EHResumeBlock);
John McCallbd309292010-07-06 01:34:17 +0000296 EmitIfUsed(*this, TerminateLandingPad);
297 EmitIfUsed(*this, TerminateHandler);
298 EmitIfUsed(*this, UnreachableBlock);
John McCall09ae0322010-07-06 23:57:41 +0000299
300 if (CGM.getCodeGenOpts().EmitDeclMetadata)
301 EmitDeclMetadata();
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000302
303 for (SmallVectorImpl<std::pair<llvm::Instruction *, llvm::Value *> >::iterator
304 I = DeferredReplacements.begin(),
305 E = DeferredReplacements.end();
306 I != E; ++I) {
307 I->first->replaceAllUsesWith(I->second);
308 I->first->eraseFromParent();
309 }
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000310}
Chris Lattner308f4312007-05-29 23:50:05 +0000311
Chris Lattner3c77a352010-06-22 00:03:40 +0000312/// ShouldInstrumentFunction - Return true if the current function should be
313/// instrumented with __cyg_profile_func_* calls
314bool CodeGenFunction::ShouldInstrumentFunction() {
315 if (!CGM.getCodeGenOpts().InstrumentFunctions)
316 return false;
Ted Kremenekc249c412011-05-16 23:49:20 +0000317 if (!CurFuncDecl || CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>())
Chris Lattner3c77a352010-06-22 00:03:40 +0000318 return false;
319 return true;
320}
321
322/// EmitFunctionInstrumentation - Emit LLVM code to call the specified
323/// instrumentation function with the current function and the call site, if
324/// function instrumentation is enabled.
325void CodeGenFunction::EmitFunctionInstrumentation(const char *Fn) {
Chris Lattnerb48a2d52010-06-23 05:21:28 +0000326 // void __cyg_profile_func_{enter,exit} (void *this_fn, void *call_site);
Chris Lattnera5f58b02011-07-09 17:41:47 +0000327 llvm::PointerType *PointerTy = Int8PtrTy;
328 llvm::Type *ProfileFuncArgs[] = { PointerTy, PointerTy };
Chris Lattner2192fe52011-07-18 04:24:23 +0000329 llvm::FunctionType *FunctionTy =
Chris Lattnerece04092012-02-07 00:39:47 +0000330 llvm::FunctionType::get(VoidTy, ProfileFuncArgs, false);
Chris Lattner3c77a352010-06-22 00:03:40 +0000331
332 llvm::Constant *F = CGM.CreateRuntimeFunction(FunctionTy, Fn);
333 llvm::CallInst *CallSite = Builder.CreateCall(
Benjamin Kramer8d375ce2011-07-14 17:45:50 +0000334 CGM.getIntrinsic(llvm::Intrinsic::returnaddress),
Chris Lattner5e016ae2010-06-27 07:15:29 +0000335 llvm::ConstantInt::get(Int32Ty, 0),
Chris Lattner3c77a352010-06-22 00:03:40 +0000336 "callsite");
337
John McCall882987f2013-02-28 19:01:20 +0000338 llvm::Value *args[] = {
339 llvm::ConstantExpr::getBitCast(CurFn, PointerTy),
340 CallSite
341 };
342
343 EmitNounwindRuntimeCall(F, args);
Chris Lattner3c77a352010-06-22 00:03:40 +0000344}
345
Roman Divacky178e01602011-02-10 16:52:03 +0000346void CodeGenFunction::EmitMCountInstrumentation() {
Chris Lattnerece04092012-02-07 00:39:47 +0000347 llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
Roman Divacky178e01602011-02-10 16:52:03 +0000348
John McCallc8e01702013-04-16 22:48:15 +0000349 llvm::Constant *MCountFn =
350 CGM.CreateRuntimeFunction(FTy, getTarget().getMCountName());
John McCall882987f2013-02-28 19:01:20 +0000351 EmitNounwindRuntimeCall(MCountFn);
Roman Divacky178e01602011-02-10 16:52:03 +0000352}
353
Tanya Lattner7445ada2012-07-11 23:02:10 +0000354// OpenCL v1.2 s5.6.4.6 allows the compiler to store kernel argument
355// information in the program executable. The argument information stored
356// includes the argument name, its type, the address and access qualifiers used.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000357static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000358 CodeGenModule &CGM, llvm::LLVMContext &Context,
359 SmallVector<llvm::Metadata *, 5> &kernelMDArgs,
360 CGBuilderTy &Builder, ASTContext &ASTCtx) {
Guy Benyeifb36ede2013-03-24 13:58:12 +0000361 // Create MDNodes that represent the kernel arg metadata.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000362 // Each MDNode is a list in the form of "key", N number of values which is
363 // the same number of values as their are kernel arguments.
Michael Ilseman686240a2012-12-04 00:29:55 +0000364
Joey Gouly92a47442014-04-04 13:43:57 +0000365 const PrintingPolicy &Policy = ASTCtx.getPrintingPolicy();
366
Guy Benyeifb36ede2013-03-24 13:58:12 +0000367 // MDNode for the kernel argument address space qualifiers.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000368 SmallVector<llvm::Metadata *, 8> addressQuals;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000369 addressQuals.push_back(llvm::MDString::get(Context, "kernel_arg_addr_space"));
370
371 // MDNode for the kernel argument access qualifiers (images only).
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000372 SmallVector<llvm::Metadata *, 8> accessQuals;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000373 accessQuals.push_back(llvm::MDString::get(Context, "kernel_arg_access_qual"));
374
375 // MDNode for the kernel argument type names.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000376 SmallVector<llvm::Metadata *, 8> argTypeNames;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000377 argTypeNames.push_back(llvm::MDString::get(Context, "kernel_arg_type"));
378
Fraser Cormackdadc3712014-07-30 14:39:53 +0000379 // MDNode for the kernel argument base type names.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000380 SmallVector<llvm::Metadata *, 8> argBaseTypeNames;
Fraser Cormackdadc3712014-07-30 14:39:53 +0000381 argBaseTypeNames.push_back(
382 llvm::MDString::get(Context, "kernel_arg_base_type"));
383
Guy Benyeifb36ede2013-03-24 13:58:12 +0000384 // MDNode for the kernel argument type qualifiers.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000385 SmallVector<llvm::Metadata *, 8> argTypeQuals;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000386 argTypeQuals.push_back(llvm::MDString::get(Context, "kernel_arg_type_qual"));
387
Tanya Lattner7445ada2012-07-11 23:02:10 +0000388 // MDNode for the kernel argument names.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000389 SmallVector<llvm::Metadata *, 8> argNames;
Tanya Lattner7445ada2012-07-11 23:02:10 +0000390 argNames.push_back(llvm::MDString::get(Context, "kernel_arg_name"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000391
Tanya Lattner7445ada2012-07-11 23:02:10 +0000392 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i) {
393 const ParmVarDecl *parm = FD->getParamDecl(i);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000394 QualType ty = parm->getType();
395 std::string typeQuals;
396
397 if (ty->isPointerType()) {
398 QualType pointeeTy = ty->getPointeeType();
399
400 // Get address qualifier.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000401 addressQuals.push_back(llvm::ConstantAsMetadata::get(Builder.getInt32(
402 ASTCtx.getTargetAddressSpace(pointeeTy.getAddressSpace()))));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000403
404 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000405 std::string typeName =
406 pointeeTy.getUnqualifiedType().getAsString(Policy) + "*";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000407
408 // Turn "unsigned type" to "utype"
409 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000410 if (pointeeTy.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000411 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000412
413 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
414
Fraser Cormackdadc3712014-07-30 14:39:53 +0000415 std::string baseTypeName =
416 pointeeTy.getUnqualifiedType().getCanonicalType().getAsString(
417 Policy) +
418 "*";
419
420 // Turn "unsigned type" to "utype"
421 pos = baseTypeName.find("unsigned");
422 if (pos != std::string::npos)
423 baseTypeName.erase(pos+1, 8);
424
425 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
426
Guy Benyeifb36ede2013-03-24 13:58:12 +0000427 // Get argument type qualifiers:
428 if (ty.isRestrictQualified())
429 typeQuals = "restrict";
430 if (pointeeTy.isConstQualified() ||
431 (pointeeTy.getAddressSpace() == LangAS::opencl_constant))
Benjamin Krameref89ae02013-03-24 16:04:55 +0000432 typeQuals += typeQuals.empty() ? "const" : " const";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000433 if (pointeeTy.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000434 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000435 } else {
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000436 uint32_t AddrSpc = 0;
437 if (ty->isImageType())
438 AddrSpc =
439 CGM.getContext().getTargetAddressSpace(LangAS::opencl_global);
Bob Wilson95a27b02014-02-17 19:20:59 +0000440
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000441 addressQuals.push_back(
442 llvm::ConstantAsMetadata::get(Builder.getInt32(AddrSpc)));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000443
444 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000445 std::string typeName = ty.getUnqualifiedType().getAsString(Policy);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000446
447 // Turn "unsigned type" to "utype"
448 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000449 if (ty.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000450 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000451
452 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
453
Fraser Cormackdadc3712014-07-30 14:39:53 +0000454 std::string baseTypeName =
455 ty.getUnqualifiedType().getCanonicalType().getAsString(Policy);
456
457 // Turn "unsigned type" to "utype"
458 pos = baseTypeName.find("unsigned");
459 if (pos != std::string::npos)
460 baseTypeName.erase(pos+1, 8);
461
462 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
463
Guy Benyeifb36ede2013-03-24 13:58:12 +0000464 // Get argument type qualifiers:
465 if (ty.isConstQualified())
466 typeQuals = "const";
467 if (ty.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000468 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000469 }
Justin Bogner0f066062013-11-22 10:20:40 +0000470
Guy Benyeifb36ede2013-03-24 13:58:12 +0000471 argTypeQuals.push_back(llvm::MDString::get(Context, typeQuals));
472
473 // Get image access qualifier:
474 if (ty->isImageType()) {
Aaron Ballmanc4327992013-12-19 03:09:10 +0000475 const OpenCLImageAccessAttr *A = parm->getAttr<OpenCLImageAccessAttr>();
Aaron Ballman26891332014-01-14 17:41:53 +0000476 if (A && A->isWriteOnly())
Guy Benyeifb36ede2013-03-24 13:58:12 +0000477 accessQuals.push_back(llvm::MDString::get(Context, "write_only"));
478 else
479 accessQuals.push_back(llvm::MDString::get(Context, "read_only"));
Aaron Ballman26891332014-01-14 17:41:53 +0000480 // FIXME: what about read_write?
Guy Benyeifb36ede2013-03-24 13:58:12 +0000481 } else
482 accessQuals.push_back(llvm::MDString::get(Context, "none"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000483
Tanya Lattner7445ada2012-07-11 23:02:10 +0000484 // Get argument name.
485 argNames.push_back(llvm::MDString::get(Context, parm->getName()));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000486 }
Guy Benyeifb36ede2013-03-24 13:58:12 +0000487
488 kernelMDArgs.push_back(llvm::MDNode::get(Context, addressQuals));
489 kernelMDArgs.push_back(llvm::MDNode::get(Context, accessQuals));
490 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeNames));
Fraser Cormackdadc3712014-07-30 14:39:53 +0000491 kernelMDArgs.push_back(llvm::MDNode::get(Context, argBaseTypeNames));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000492 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeQuals));
Sameer Sahasrabuddhec6093fe2014-12-04 05:30:58 +0000493 if (CGM.getCodeGenOpts().EmitOpenCLArgMetadata)
494 kernelMDArgs.push_back(llvm::MDNode::get(Context, argNames));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000495}
496
Michael Ilseman686240a2012-12-04 00:29:55 +0000497void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000498 llvm::Function *Fn)
499{
500 if (!FD->hasAttr<OpenCLKernelAttr>())
501 return;
502
503 llvm::LLVMContext &Context = getLLVMContext();
504
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000505 SmallVector<llvm::Metadata *, 5> kernelMDArgs;
506 kernelMDArgs.push_back(llvm::ConstantAsMetadata::get(Fn));
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000507
Sameer Sahasrabuddhec6093fe2014-12-04 05:30:58 +0000508 GenOpenCLArgMetadata(FD, Fn, CGM, Context, kernelMDArgs, Builder,
509 getContext());
Michael Ilseman686240a2012-12-04 00:29:55 +0000510
Aaron Ballmanc4327992013-12-19 03:09:10 +0000511 if (const VecTypeHintAttr *A = FD->getAttr<VecTypeHintAttr>()) {
512 QualType hintQTy = A->getTypeHint();
Joey Goulyaba589c2013-03-08 09:42:32 +0000513 const ExtVectorType *hintEltQTy = hintQTy->getAs<ExtVectorType>();
514 bool isSignedInteger =
515 hintQTy->isSignedIntegerType() ||
516 (hintEltQTy && hintEltQTy->getElementType()->isSignedIntegerType());
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000517 llvm::Metadata *attrMDArgs[] = {
518 llvm::MDString::get(Context, "vec_type_hint"),
519 llvm::ConstantAsMetadata::get(llvm::UndefValue::get(
520 CGM.getTypes().ConvertType(A->getTypeHint()))),
521 llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
522 llvm::IntegerType::get(Context, 32),
523 llvm::APInt(32, (uint64_t)(isSignedInteger ? 1 : 0))))};
Joey Goulyaba589c2013-03-08 09:42:32 +0000524 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
525 }
526
Aaron Ballmanc4327992013-12-19 03:09:10 +0000527 if (const WorkGroupSizeHintAttr *A = FD->getAttr<WorkGroupSizeHintAttr>()) {
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000528 llvm::Metadata *attrMDArgs[] = {
529 llvm::MDString::get(Context, "work_group_size_hint"),
530 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getXDim())),
531 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getYDim())),
532 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getZDim()))};
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000533 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
534 }
535
Aaron Ballmanc4327992013-12-19 03:09:10 +0000536 if (const ReqdWorkGroupSizeAttr *A = FD->getAttr<ReqdWorkGroupSizeAttr>()) {
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000537 llvm::Metadata *attrMDArgs[] = {
538 llvm::MDString::get(Context, "reqd_work_group_size"),
539 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getXDim())),
540 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getYDim())),
541 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getZDim()))};
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000542 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
543 }
544
545 llvm::MDNode *kernelMDNode = llvm::MDNode::get(Context, kernelMDArgs);
546 llvm::NamedMDNode *OpenCLKernelMetadata =
547 CGM.getModule().getOrInsertNamedMetadata("opencl.kernels");
548 OpenCLKernelMetadata->addOperand(kernelMDNode);
549}
550
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000551/// Determine whether the function F ends with a return stmt.
552static bool endsWithReturn(const Decl* F) {
553 const Stmt *Body = nullptr;
554 if (auto *FD = dyn_cast_or_null<FunctionDecl>(F))
555 Body = FD->getBody();
556 else if (auto *OMD = dyn_cast_or_null<ObjCMethodDecl>(F))
557 Body = OMD->getBody();
558
559 if (auto *CS = dyn_cast_or_null<CompoundStmt>(Body)) {
560 auto LastStmt = CS->body_rbegin();
561 if (LastStmt != CS->body_rend())
562 return isa<ReturnStmt>(*LastStmt);
563 }
564 return false;
565}
566
John McCalldec348f72013-05-03 07:33:41 +0000567void CodeGenFunction::StartFunction(GlobalDecl GD,
568 QualType RetTy,
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000569 llvm::Function *Fn,
John McCalla738c252011-03-09 04:27:21 +0000570 const CGFunctionInfo &FnInfo,
Daniel Dunbar354d2782008-10-18 18:22:23 +0000571 const FunctionArgList &Args,
Adrian Prantl42d71b92014-04-10 23:21:53 +0000572 SourceLocation Loc,
Tilmann Scheller99cc30c2011-03-02 21:36:49 +0000573 SourceLocation StartLoc) {
David Blaikie8e6c36e2014-10-14 16:43:46 +0000574 assert(!CurFn &&
575 "Do not use a CodeGenFunction object for more than one function");
576
Anders Carlsson73fcc952009-09-11 00:07:24 +0000577 const Decl *D = GD.getDecl();
Michael Ilseman686240a2012-12-04 00:29:55 +0000578
Anders Carlssonf4478e92009-02-09 20:20:56 +0000579 DidCallStackSave = false;
John McCalldec348f72013-05-03 07:33:41 +0000580 CurCodeDecl = D;
Craig Topper8a13c412014-05-21 05:09:00 +0000581 CurFuncDecl = (D ? D->getNonClosureContext() : nullptr);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000582 FnRetTy = RetTy;
Daniel Dunbar9c426522008-07-29 23:18:29 +0000583 CurFn = Fn;
John McCalla738c252011-03-09 04:27:21 +0000584 CurFnInfo = &FnInfo;
Chris Lattner5696e7b2008-06-17 18:05:57 +0000585 assert(CurFn->isDeclaration() && "Function already has body?");
586
Alexey Samsonov1444bb92014-10-17 00:20:19 +0000587 if (CGM.isInSanitizerBlacklist(Fn, Loc))
Alexey Samsonov035462c2014-10-30 19:33:44 +0000588 SanOpts.clear();
Will Dietzf54319c2013-01-18 11:30:38 +0000589
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000590 // Pass inline keyword to optimizer if it appears explicitly on any
Roman Divackydd9bfb22014-01-15 19:07:16 +0000591 // declaration. Also, in the case of -fno-inline attach NoInline
David Majnemer19d7d542014-02-25 10:51:14 +0000592 // attribute to all function that are not marked AlwaysInline.
Roman Divackydd9bfb22014-01-15 19:07:16 +0000593 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
594 if (!CGM.getCodeGenOpts().NoInline) {
Aaron Ballman86c93902014-03-06 23:45:36 +0000595 for (auto RI : FD->redecls())
Chad Rosier883b2572012-03-14 23:32:11 +0000596 if (RI->isInlineSpecified()) {
Bill Wendling207f0532012-12-20 19:27:06 +0000597 Fn->addFnAttr(llvm::Attribute::InlineHint);
Chad Rosier883b2572012-03-14 23:32:11 +0000598 break;
599 }
David Majnemer67e541e1c2014-02-25 09:53:29 +0000600 } else if (!FD->hasAttr<AlwaysInlineAttr>())
Roman Divackydd9bfb22014-01-15 19:07:16 +0000601 Fn->addFnAttr(llvm::Attribute::NoInline);
602 }
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000603
Richard Smith9c6890a2012-11-01 22:30:59 +0000604 if (getLangOpts().OpenCL) {
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000605 // Add metadata for a kernel function.
606 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000607 EmitOpenCLKernelMetadata(FD, Fn);
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000608 }
609
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000610 // If we are checking function types, emit a function type signature as
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000611 // prologue data.
Alexey Samsonovedf99a92014-11-07 22:29:38 +0000612 if (getLangOpts().CPlusPlus && SanOpts.has(SanitizerKind::Function)) {
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000613 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000614 if (llvm::Constant *PrologueSig =
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000615 CGM.getTargetCodeGenInfo().getUBSanFunctionSignature(CGM)) {
616 llvm::Constant *FTRTTIConst =
617 CGM.GetAddrOfRTTIDescriptor(FD->getType(), /*ForEH=*/true);
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000618 llvm::Constant *PrologueStructElems[] = { PrologueSig, FTRTTIConst };
619 llvm::Constant *PrologueStructConst =
620 llvm::ConstantStruct::getAnon(PrologueStructElems, /*Packed=*/true);
621 Fn->setPrologueData(PrologueStructConst);
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000622 }
623 }
624 }
625
Daniel Dunbar75283ff2008-11-11 02:29:29 +0000626 llvm::BasicBlock *EntryBB = createBasicBlock("entry", CurFn);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000627
Chris Lattner5696e7b2008-06-17 18:05:57 +0000628 // Create a marker to make it easy to insert allocas into the entryblock
629 // later. Don't create this with the builder, because we don't want it
630 // folded.
Chris Lattner5e016ae2010-06-27 07:15:29 +0000631 llvm::Value *Undef = llvm::UndefValue::get(Int32Ty);
632 AllocaInsertPt = new llvm::BitCastInst(Undef, Int32Ty, "", EntryBB);
Chris Lattner47640222009-03-22 00:24:14 +0000633 if (Builder.isNamePreserving())
634 AllocaInsertPt->setName("allocapt");
Mike Stump11289f42009-09-09 15:08:12 +0000635
John McCallbd309292010-07-06 01:34:17 +0000636 ReturnBlock = getJumpDestInCurrentScope("return");
Mike Stump11289f42009-09-09 15:08:12 +0000637
Chris Lattner5696e7b2008-06-17 18:05:57 +0000638 Builder.SetInsertPoint(EntryBB);
Mike Stump11289f42009-09-09 15:08:12 +0000639
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000640 // Emit subprogram debug descriptor.
Anders Carlsson63784f42009-02-13 08:11:52 +0000641 if (CGDebugInfo *DI = getDebugInfo()) {
Jordan Rose5c382722013-03-08 21:51:21 +0000642 SmallVector<QualType, 16> ArgTypes;
Eric Christopher4b4beb22011-10-21 23:30:10 +0000643 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
644 i != e; ++i) {
Jordan Rose5c382722013-03-08 21:51:21 +0000645 ArgTypes.push_back((*i)->getType());
Eric Christopher4b4beb22011-10-21 23:30:10 +0000646 }
647
John McCalldb40c7f2010-12-14 08:05:40 +0000648 QualType FnType =
Jordan Rose5c382722013-03-08 21:51:21 +0000649 getContext().getFunctionType(RetTy, ArgTypes,
John McCalldb40c7f2010-12-14 08:05:40 +0000650 FunctionProtoType::ExtProtoInfo());
Adrian Prantl42d71b92014-04-10 23:21:53 +0000651 DI->EmitFunctionStart(GD, Loc, StartLoc, FnType, CurFn, Builder);
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000652 }
653
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000654 if (ShouldInstrumentFunction())
655 EmitFunctionInstrumentation("__cyg_profile_func_enter");
Chris Lattner3c77a352010-06-22 00:03:40 +0000656
Roman Divacky178e01602011-02-10 16:52:03 +0000657 if (CGM.getCodeGenOpts().InstrumentForProfiling)
658 EmitMCountInstrumentation();
659
Eli Friedman4b1942c2009-12-04 02:43:40 +0000660 if (RetTy->isVoidType()) {
661 // Void type; nothing to return.
Craig Topper8a13c412014-05-21 05:09:00 +0000662 ReturnValue = nullptr;
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000663
664 // Count the implicit return.
665 if (!endsWithReturn(D))
666 ++NumReturnExprs;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000667 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
John McCall47fb9502013-03-07 21:37:08 +0000668 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
Eli Friedman4b1942c2009-12-04 02:43:40 +0000669 // Indirect aggregate return; emit returned value directly into sret slot.
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000670 // This reduces code size, and affects correctness in C++.
Reid Kleckner37abaca2014-05-09 22:46:15 +0000671 auto AI = CurFn->arg_begin();
672 if (CurFnInfo->getReturnInfo().isSRetAfterThis())
673 ++AI;
674 ReturnValue = AI;
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000675 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
676 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
677 // Load the sret pointer from the argument struct and return into that.
678 unsigned Idx = CurFnInfo->getReturnInfo().getInAllocaFieldIndex();
679 llvm::Function::arg_iterator EI = CurFn->arg_end();
680 --EI;
681 llvm::Value *Addr = Builder.CreateStructGEP(EI, Idx);
682 ReturnValue = Builder.CreateLoad(Addr, "agg.result");
Eli Friedman4b1942c2009-12-04 02:43:40 +0000683 } else {
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000684 ReturnValue = CreateIRTemp(RetTy, "retval");
John McCall31168b02011-06-15 23:02:42 +0000685
686 // Tell the epilog emitter to autorelease the result. We do this
687 // now so that various specialized functions can suppress it
688 // during their IR-generation.
David Blaikiebbafb8a2012-03-11 07:00:24 +0000689 if (getLangOpts().ObjCAutoRefCount &&
John McCall31168b02011-06-15 23:02:42 +0000690 !CurFnInfo->isReturnsRetained() &&
691 RetTy->isObjCRetainableType())
692 AutoreleaseResult = true;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000693 }
694
Mike Stump1d849212009-12-07 23:38:24 +0000695 EmitStartEHSpec(CurCodeDecl);
John McCall31168b02011-06-15 23:02:42 +0000696
697 PrologueCleanupDepth = EHStack.stable_begin();
Daniel Dunbard931a872009-02-02 22:03:45 +0000698 EmitFunctionProlog(*CurFnInfo, CurFn, Args);
Mike Stump11289f42009-09-09 15:08:12 +0000699
Eli Friedman9fbeba02012-02-11 02:57:39 +0000700 if (D && isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) {
John McCall5d865c322010-08-31 07:33:07 +0000701 CGM.getCXXABI().EmitInstanceFunctionProlog(*this);
Eli Friedman9fbeba02012-02-11 02:57:39 +0000702 const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
703 if (MD->getParent()->isLambda() &&
704 MD->getOverloadedOperator() == OO_Call) {
705 // We're in a lambda; figure out the captures.
706 MD->getParent()->getCaptureFields(LambdaCaptureFields,
707 LambdaThisCaptureField);
708 if (LambdaThisCaptureField) {
709 // If this lambda captures this, load it.
John McCalldec348f72013-05-03 07:33:41 +0000710 LValue ThisLValue = EmitLValueForLambdaField(LambdaThisCaptureField);
Nick Lewycky2d84e842013-10-02 02:29:49 +0000711 CXXThisValue = EmitLoadOfLValue(ThisLValue,
712 SourceLocation()).getScalarVal();
Eli Friedman9fbeba02012-02-11 02:57:39 +0000713 }
Alexey Bataev39c81e22014-08-28 04:28:19 +0000714 for (auto *FD : MD->getParent()->fields()) {
715 if (FD->hasCapturedVLAType()) {
716 auto *ExprArg = EmitLoadOfLValue(EmitLValueForLambdaField(FD),
717 SourceLocation()).getScalarVal();
718 auto VAT = FD->getCapturedVLAType();
719 VLASizeMap[VAT->getSizeExpr()] = ExprArg;
720 }
721 }
Eli Friedman9fbeba02012-02-11 02:57:39 +0000722 } else {
723 // Not in a lambda; just use 'this' from the method.
724 // FIXME: Should we generate a new load for each use of 'this'? The
725 // fast register allocator would be happier...
726 CXXThisValue = CXXABIThisValue;
727 }
728 }
John McCall347132b2010-02-16 22:04:33 +0000729
Anders Carlssonc20879a2008-12-20 21:28:43 +0000730 // If any of the arguments have a variably modified type, make sure to
731 // emit the type size.
732 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
733 i != e; ++i) {
Eli Friedman1f576832012-11-14 22:09:59 +0000734 const VarDecl *VD = *i;
735
736 // Dig out the type as written from ParmVarDecls; it's unclear whether
737 // the standard (C99 6.9.1p10) requires this, but we're following the
738 // precedent set by gcc.
739 QualType Ty;
740 if (const ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(VD))
741 Ty = PVD->getOriginalType();
742 else
743 Ty = VD->getType();
Anders Carlssonc20879a2008-12-20 21:28:43 +0000744
745 if (Ty->isVariablyModifiedType())
John McCall23c29fe2011-06-24 21:55:10 +0000746 EmitVariablyModifiedType(Ty);
Anders Carlssonc20879a2008-12-20 21:28:43 +0000747 }
Eric Christopher7cdf9482011-10-13 21:45:18 +0000748 // Emit a location at the end of the prologue.
749 if (CGDebugInfo *DI = getDebugInfo())
750 DI->EmitLocation(Builder, StartLoc);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000751}
Eli Friedman3d421e12008-08-25 21:31:01 +0000752
Richard Smithb47c36f2013-11-05 09:12:18 +0000753void CodeGenFunction::EmitFunctionBody(FunctionArgList &Args,
754 const Stmt *Body) {
Justin Bogneref512b92014-01-06 22:27:43 +0000755 RegionCounter Cnt = getPGORegionCounter(Body);
756 Cnt.beginRegion(Builder);
Richard Smithb47c36f2013-11-05 09:12:18 +0000757 if (const CompoundStmt *S = dyn_cast<CompoundStmt>(Body))
David Blaikie0a21d0d2013-01-26 22:16:26 +0000758 EmitCompoundStmtWithoutScope(*S);
759 else
Richard Smithb47c36f2013-11-05 09:12:18 +0000760 EmitStmt(Body);
John McCall89b12b32010-02-18 03:17:58 +0000761}
762
Bob Wilsonbf854f02014-02-17 19:21:09 +0000763/// When instrumenting to collect profile data, the counts for some blocks
764/// such as switch cases need to not include the fall-through counts, so
765/// emit a branch around the instrumentation code. When not instrumenting,
766/// this just calls EmitBlock().
767void CodeGenFunction::EmitBlockWithFallThrough(llvm::BasicBlock *BB,
768 RegionCounter &Cnt) {
Craig Topper8a13c412014-05-21 05:09:00 +0000769 llvm::BasicBlock *SkipCountBB = nullptr;
Bob Wilsonbf854f02014-02-17 19:21:09 +0000770 if (HaveInsertPoint() && CGM.getCodeGenOpts().ProfileInstrGenerate) {
771 // When instrumenting for profiling, the fallthrough to certain
772 // statements needs to skip over the instrumentation code so that we
773 // get an accurate count.
774 SkipCountBB = createBasicBlock("skipcount");
775 EmitBranch(SkipCountBB);
776 }
777 EmitBlock(BB);
778 Cnt.beginRegion(Builder, /*AddIncomingFallThrough=*/true);
779 if (SkipCountBB)
780 EmitBlock(SkipCountBB);
781}
782
John McCall8601a752010-08-03 22:46:07 +0000783/// Tries to mark the given function nounwind based on the
784/// non-existence of any throwing calls within it. We believe this is
785/// lightweight enough to do at -O0.
786static void TryMarkNoThrow(llvm::Function *F) {
John McCall59966992010-08-11 22:38:33 +0000787 // LLVM treats 'nounwind' on a function as part of the type, so we
788 // can't do this on functions that can be overwritten.
789 if (F->mayBeOverridden()) return;
790
John McCall8601a752010-08-03 22:46:07 +0000791 for (llvm::Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
792 for (llvm::BasicBlock::iterator
793 BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
Bill Wendlingf0724e82011-09-19 20:31:14 +0000794 if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(&*BI)) {
John McCall8601a752010-08-03 22:46:07 +0000795 if (!Call->doesNotThrow())
796 return;
Bill Wendlingf0724e82011-09-19 20:31:14 +0000797 } else if (isa<llvm::ResumeInst>(&*BI)) {
798 return;
799 }
Bill Wendling73e465e2012-10-10 03:13:20 +0000800 F->setDoesNotThrow();
John McCall8601a752010-08-03 22:46:07 +0000801}
802
Richard Smithb47c36f2013-11-05 09:12:18 +0000803static void EmitSizedDeallocationFunction(CodeGenFunction &CGF,
804 const FunctionDecl *UnsizedDealloc) {
805 // This is a weak discardable definition of the sized deallocation function.
806 CGF.CurFn->setLinkage(llvm::Function::LinkOnceAnyLinkage);
807
808 // Call the unsized deallocation function and forward the first argument
809 // unchanged.
810 llvm::Constant *Unsized = CGF.CGM.GetAddrOfFunction(UnsizedDealloc);
811 CGF.Builder.CreateCall(Unsized, &*CGF.CurFn->arg_begin());
812}
813
John McCalla738c252011-03-09 04:27:21 +0000814void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn,
815 const CGFunctionInfo &FnInfo) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000816 const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
Michael Ilseman686240a2012-12-04 00:29:55 +0000817
Anders Carlsson63784f42009-02-13 08:11:52 +0000818 // Check if we should generate debug info for this function.
David Blaikie92848de2013-08-26 20:33:21 +0000819 if (FD->hasAttr<NoDebugAttr>())
Craig Topper8a13c412014-05-21 05:09:00 +0000820 DebugInfo = nullptr; // disable debug info indefinitely for this function
Mike Stump11289f42009-09-09 15:08:12 +0000821
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000822 FunctionArgList Args;
Alp Toker314cc812014-01-25 16:55:45 +0000823 QualType ResTy = FD->getReturnType();
Mike Stump11289f42009-09-09 15:08:12 +0000824
Mike Stumpbee78dd2009-12-04 23:26:17 +0000825 CurGD = GD;
Reid Kleckner89077a12013-12-17 19:46:40 +0000826 const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD);
827 if (MD && MD->isInstance()) {
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000828 if (CGM.getCXXABI().HasThisReturn(GD))
829 ResTy = MD->getThisType(getContext());
David Majnemer0c0b6d92014-10-31 20:09:12 +0000830 else if (CGM.getCXXABI().hasMostDerivedReturn(GD))
831 ResTy = CGM.getContext().VoidPtrTy;
Reid Kleckner89077a12013-12-17 19:46:40 +0000832 CGM.getCXXABI().buildThisParam(*this, Args);
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000833 }
Alexey Samsonov3551e312014-08-13 20:06:24 +0000834
835 Args.append(FD->param_begin(), FD->param_end());
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000836
Reid Kleckner89077a12013-12-17 19:46:40 +0000837 if (MD && (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)))
838 CGM.getCXXABI().addImplicitStructorParams(*this, ResTy, Args);
839
John McCall89b12b32010-02-18 03:17:58 +0000840 SourceRange BodyRange;
841 if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange();
Adrian Prantldc237b52013-05-16 00:41:26 +0000842 CurEHLocation = BodyRange.getEnd();
Anders Carlsson438cf922009-11-06 02:55:43 +0000843
Adrian Prantl42d71b92014-04-10 23:21:53 +0000844 // Use the location of the start of the function to determine where
845 // the function definition is located. By default use the location
846 // of the declaration as the location for the subprogram. A function
847 // may lack a declaration in the source code if it is created by code
848 // gen. (examples: _GLOBAL__I_a, __cxx_global_array_dtor, thunk).
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000849 SourceLocation Loc = FD->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000850
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000851 // If this is a function specialization then use the pattern body
852 // as the location for the function.
853 if (const FunctionDecl *SpecDecl = FD->getTemplateInstantiationPattern())
854 if (SpecDecl->hasBody(SpecDecl))
855 Loc = SpecDecl->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000856
John McCall89b12b32010-02-18 03:17:58 +0000857 // Emit the standard function prologue.
Adrian Prantl42d71b92014-04-10 23:21:53 +0000858 StartFunction(GD, ResTy, Fn, FnInfo, Args, Loc, BodyRange.getBegin());
Anders Carlsson438cf922009-11-06 02:55:43 +0000859
John McCall89b12b32010-02-18 03:17:58 +0000860 // Generate the body of the function.
Alex Lorenzee024992014-08-04 18:41:51 +0000861 PGO.checkGlobalDecl(GD);
Bob Wilsonda1ebed2014-03-06 04:55:41 +0000862 PGO.assignRegionCounters(GD.getDecl(), CurFn);
John McCallb81884d2010-02-19 09:25:03 +0000863 if (isa<CXXDestructorDecl>(FD))
864 EmitDestructorBody(Args);
865 else if (isa<CXXConstructorDecl>(FD))
866 EmitConstructorBody(Args);
Richard Smith9c6890a2012-11-01 22:30:59 +0000867 else if (getLangOpts().CUDA &&
Peter Collingbournefa4d6032011-10-06 18:51:56 +0000868 !CGM.getCodeGenOpts().CUDAIsDevice &&
869 FD->hasAttr<CUDAGlobalAttr>())
870 CGM.getCUDARuntime().EmitDeviceStubBody(*this, Args);
Eli Friedman5a6d5072012-02-16 01:37:33 +0000871 else if (isa<CXXConversionDecl>(FD) &&
Douglas Gregor355efbb2012-02-17 03:02:34 +0000872 cast<CXXConversionDecl>(FD)->isLambdaToBlockPointerConversion()) {
873 // The lambda conversion to block pointer is special; the semantics can't be
874 // expressed in the AST, so IRGen needs to special-case it.
875 EmitLambdaToBlockPointerBody(Args);
876 } else if (isa<CXXMethodDecl>(FD) &&
877 cast<CXXMethodDecl>(FD)->isLambdaStaticInvoker()) {
Faisal Vali2b391ab2013-09-26 19:54:12 +0000878 // The lambda static invoker function is special, because it forwards or
Douglas Gregor355efbb2012-02-17 03:02:34 +0000879 // clones the body of the function call operator (but is actually static).
880 EmitLambdaStaticInvokeFunction(cast<CXXMethodDecl>(FD));
Lang Hamesbf122742013-02-17 07:22:09 +0000881 } else if (FD->isDefaulted() && isa<CXXMethodDecl>(FD) &&
Nick Lewyckyb39be1f2013-09-10 05:14:39 +0000882 (cast<CXXMethodDecl>(FD)->isCopyAssignmentOperator() ||
883 cast<CXXMethodDecl>(FD)->isMoveAssignmentOperator())) {
Lang Hamesbf122742013-02-17 07:22:09 +0000884 // Implicit copy-assignment gets the same special treatment as implicit
885 // copy-constructors.
886 emitImplicitAssignmentOperatorBody(Args);
Richard Smithb47c36f2013-11-05 09:12:18 +0000887 } else if (Stmt *Body = FD->getBody()) {
888 EmitFunctionBody(Args, Body);
889 } else if (FunctionDecl *UnsizedDealloc =
890 FD->getCorrespondingUnsizedGlobalDeallocationFunction()) {
891 // Global sized deallocation functions get an implicit weak definition if
892 // they don't have an explicit definition.
893 EmitSizedDeallocationFunction(*this, UnsizedDealloc);
894 } else
895 llvm_unreachable("no definition for emitted function");
Anders Carlssonff8cce42010-02-07 19:45:40 +0000896
Richard Smith9f9e5822012-10-04 23:52:29 +0000897 // C++11 [stmt.return]p2:
898 // Flowing off the end of a function [...] results in undefined behavior in
899 // a value-returning function.
900 // C11 6.9.1p12:
901 // If the '}' that terminates a function is reached, and the value of the
902 // function call is used by the caller, the behavior is undefined.
Reid Kleckner9b3e3df2014-09-04 20:04:38 +0000903 if (getLangOpts().CPlusPlus && !FD->hasImplicitReturnZero() && !SawAsmBlock &&
Alp Toker314cc812014-01-25 16:55:45 +0000904 !FD->getReturnType()->isVoidType() && Builder.GetInsertBlock()) {
Alexey Samsonovedf99a92014-11-07 22:29:38 +0000905 if (SanOpts.has(SanitizerKind::Return)) {
Alexey Samsonov24cad992014-07-17 18:46:27 +0000906 SanitizerScope SanScope(this);
Alexey Samsonove396bfc2014-11-11 22:03:54 +0000907 llvm::Value *IsFalse = Builder.getFalse();
908 EmitCheck(std::make_pair(IsFalse, SanitizerKind::Return),
909 "missing_return", EmitCheckSourceLocation(FD->getLocation()),
910 None);
Alexey Samsonov24cad992014-07-17 18:46:27 +0000911 } else if (CGM.getCodeGenOpts().OptimizationLevel == 0)
Richard Smith6b4ebcc2012-10-15 00:23:07 +0000912 Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::trap));
Richard Smith9f9e5822012-10-04 23:52:29 +0000913 Builder.CreateUnreachable();
914 Builder.ClearInsertionPoint();
915 }
916
John McCall89b12b32010-02-18 03:17:58 +0000917 // Emit the standard function epilogue.
918 FinishFunction(BodyRange.getEnd());
John McCall8601a752010-08-03 22:46:07 +0000919
920 // If we haven't marked the function nothrow through other means, do
921 // a quick pass now to see if we can.
922 if (!CurFn->doesNotThrow())
923 TryMarkNoThrow(CurFn);
Chris Lattner5696e7b2008-06-17 18:05:57 +0000924}
925
Chris Lattner5b1964b2008-11-11 07:41:27 +0000926/// ContainsLabel - Return true if the statement contains a label in it. If
927/// this statement is not executed normally, it not containing a label means
928/// that we can just remove the code.
929bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) {
930 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000931 if (!S) return false;
Mike Stump11289f42009-09-09 15:08:12 +0000932
Chris Lattner5b1964b2008-11-11 07:41:27 +0000933 // If this is a label, we have to emit the code, consider something like:
934 // if (0) { ... foo: bar(); } goto foo;
Chris Lattner29911cc2011-02-28 00:18:40 +0000935 //
936 // TODO: If anyone cared, we could track __label__'s, since we know that you
937 // can't jump to one from outside their declared region.
Chris Lattner5b1964b2008-11-11 07:41:27 +0000938 if (isa<LabelStmt>(S))
939 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000940
Chris Lattner5b1964b2008-11-11 07:41:27 +0000941 // If this is a case/default statement, and we haven't seen a switch, we have
942 // to emit the code.
943 if (isa<SwitchCase>(S) && !IgnoreCaseStmts)
944 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000945
Chris Lattner5b1964b2008-11-11 07:41:27 +0000946 // If this is a switch statement, we want to ignore cases below it.
947 if (isa<SwitchStmt>(S))
948 IgnoreCaseStmts = true;
Mike Stump11289f42009-09-09 15:08:12 +0000949
Chris Lattner5b1964b2008-11-11 07:41:27 +0000950 // Scan subexpressions for verboten labels.
John McCall8322c3a2011-02-13 04:07:26 +0000951 for (Stmt::const_child_range I = S->children(); I; ++I)
Chris Lattner5b1964b2008-11-11 07:41:27 +0000952 if (ContainsLabel(*I, IgnoreCaseStmts))
953 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000954
Chris Lattner5b1964b2008-11-11 07:41:27 +0000955 return false;
956}
957
Chris Lattner29911cc2011-02-28 00:18:40 +0000958/// containsBreak - Return true if the statement contains a break out of it.
959/// If the statement (recursively) contains a switch or loop with a break
960/// inside of it, this is fine.
961bool CodeGenFunction::containsBreak(const Stmt *S) {
962 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000963 if (!S) return false;
Chris Lattner29911cc2011-02-28 00:18:40 +0000964
965 // If this is a switch or loop that defines its own break scope, then we can
966 // include it and anything inside of it.
967 if (isa<SwitchStmt>(S) || isa<WhileStmt>(S) || isa<DoStmt>(S) ||
968 isa<ForStmt>(S))
Chris Lattner30db8282011-02-28 00:42:31 +0000969 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000970
Chris Lattner30db8282011-02-28 00:42:31 +0000971 if (isa<BreakStmt>(S))
Chris Lattner29911cc2011-02-28 00:18:40 +0000972 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000973
Chris Lattner29911cc2011-02-28 00:18:40 +0000974 // Scan subexpressions for verboten breaks.
975 for (Stmt::const_child_range I = S->children(); I; ++I)
976 if (containsBreak(*I))
977 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000978
Chris Lattner29911cc2011-02-28 00:18:40 +0000979 return false;
980}
981
Chris Lattnercd439292008-11-12 08:04:58 +0000982
Chris Lattner41c6ab52011-02-27 23:02:32 +0000983/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
984/// to a constant, or if it does but contains a label, return false. If it
985/// constant folds return true and set the boolean result in Result.
986bool CodeGenFunction::ConstantFoldsToSimpleInteger(const Expr *Cond,
987 bool &ResultBool) {
Richard Trieuc320c742012-07-23 20:21:35 +0000988 llvm::APSInt ResultInt;
Chris Lattner29911cc2011-02-28 00:18:40 +0000989 if (!ConstantFoldsToSimpleInteger(Cond, ResultInt))
990 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000991
Chris Lattner29911cc2011-02-28 00:18:40 +0000992 ResultBool = ResultInt.getBoolValue();
993 return true;
994}
995
996/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
997/// to a constant, or if it does but contains a label, return false. If it
998/// constant folds return true and set the folded value.
999bool CodeGenFunction::
Richard Trieuc320c742012-07-23 20:21:35 +00001000ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &ResultInt) {
Daniel Dunbarf32443c2008-11-12 22:37:10 +00001001 // FIXME: Rename and handle conversion of other evaluatable things
1002 // to bool.
Richard Smith5fab0c92011-12-28 19:48:30 +00001003 llvm::APSInt Int;
1004 if (!Cond->EvaluateAsInt(Int, getContext()))
Chris Lattner41c6ab52011-02-27 23:02:32 +00001005 return false; // Not foldable, not integer or not fully evaluatable.
Richard Smith5fab0c92011-12-28 19:48:30 +00001006
Chris Lattnercd439292008-11-12 08:04:58 +00001007 if (CodeGenFunction::ContainsLabel(Cond))
Chris Lattner41c6ab52011-02-27 23:02:32 +00001008 return false; // Contains a label.
Richard Smith5fab0c92011-12-28 19:48:30 +00001009
1010 ResultInt = Int;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001011 return true;
Chris Lattnercd439292008-11-12 08:04:58 +00001012}
1013
1014
Chris Lattner29911cc2011-02-28 00:18:40 +00001015
Chris Lattnercd439292008-11-12 08:04:58 +00001016/// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if
1017/// statement) to the specified blocks. Based on the condition, this might try
1018/// to simplify the codegen of the conditional based on the branch.
1019///
1020void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
1021 llvm::BasicBlock *TrueBlock,
Justin Bogneref512b92014-01-06 22:27:43 +00001022 llvm::BasicBlock *FalseBlock,
1023 uint64_t TrueCount) {
Peter Collingbourne91147592011-04-15 00:35:48 +00001024 Cond = Cond->IgnoreParens();
Mike Stump11289f42009-09-09 15:08:12 +00001025
Chris Lattnercd439292008-11-12 08:04:58 +00001026 if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) {
Justin Bogneref512b92014-01-06 22:27:43 +00001027
Chris Lattnercd439292008-11-12 08:04:58 +00001028 // Handle X && Y in a condition.
John McCalle3027922010-08-25 11:45:40 +00001029 if (CondBOp->getOpcode() == BO_LAnd) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001030 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1031
Chris Lattnercd439292008-11-12 08:04:58 +00001032 // If we have "1 && X", simplify the code. "0 && X" would have constant
1033 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001034 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001035 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1036 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001037 // br(1 && X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001038 Cnt.beginRegion(Builder);
1039 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1040 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001041 }
Mike Stump11289f42009-09-09 15:08:12 +00001042
Chris Lattnercd439292008-11-12 08:04:58 +00001043 // If we have "X && 1", simplify the code to use an uncond branch.
1044 // "X && 0" would have been constant folded to 0.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001045 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1046 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001047 // br(X && 1) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001048 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1049 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001050 }
Mike Stump11289f42009-09-09 15:08:12 +00001051
Chris Lattnercd439292008-11-12 08:04:58 +00001052 // Emit the LHS as a conditional. If the LHS conditional is false, we
1053 // want to jump to the FalseBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001054 llvm::BasicBlock *LHSTrue = createBasicBlock("land.lhs.true");
Justin Bogneref512b92014-01-06 22:27:43 +00001055 // The counter tells us how often we evaluate RHS, and all of TrueCount
1056 // can be propagated to that branch.
1057 uint64_t RHSCount = Cnt.getCount();
John McCallce1de612011-01-26 04:00:11 +00001058
1059 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001060 EmitBranchOnBoolExpr(CondBOp->getLHS(), LHSTrue, FalseBlock, RHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001061 EmitBlock(LHSTrue);
Mike Stump11289f42009-09-09 15:08:12 +00001062
Anders Carlsson60ddba62010-01-24 00:20:05 +00001063 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001064 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001065 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001066 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, TrueCount);
John McCallce1de612011-01-26 04:00:11 +00001067 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001068
Chris Lattnercd439292008-11-12 08:04:58 +00001069 return;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001070 }
Michael Ilseman686240a2012-12-04 00:29:55 +00001071
Chris Lattner41c6ab52011-02-27 23:02:32 +00001072 if (CondBOp->getOpcode() == BO_LOr) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001073 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1074
Chris Lattnercd439292008-11-12 08:04:58 +00001075 // If we have "0 || X", simplify the code. "1 || X" would have constant
1076 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001077 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001078 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1079 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001080 // br(0 || X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001081 Cnt.beginRegion(Builder);
1082 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1083 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001084 }
Mike Stump11289f42009-09-09 15:08:12 +00001085
Chris Lattnercd439292008-11-12 08:04:58 +00001086 // If we have "X || 0", simplify the code to use an uncond branch.
1087 // "X || 1" would have been constant folded to 1.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001088 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1089 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001090 // br(X || 0) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001091 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1092 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001093 }
Mike Stump11289f42009-09-09 15:08:12 +00001094
Chris Lattnercd439292008-11-12 08:04:58 +00001095 // Emit the LHS as a conditional. If the LHS conditional is true, we
1096 // want to jump to the TrueBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001097 llvm::BasicBlock *LHSFalse = createBasicBlock("lor.lhs.false");
Justin Bogneref512b92014-01-06 22:27:43 +00001098 // We have the count for entry to the RHS and for the whole expression
1099 // being true, so we can divy up True count between the short circuit and
1100 // the RHS.
Justin Bognerbe614c72014-01-23 02:54:30 +00001101 uint64_t LHSCount = Cnt.getParentCount() - Cnt.getCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001102 uint64_t RHSCount = TrueCount - LHSCount;
John McCallce1de612011-01-26 04:00:11 +00001103
1104 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001105 EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, LHSFalse, LHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001106 EmitBlock(LHSFalse);
Mike Stump11289f42009-09-09 15:08:12 +00001107
Anders Carlsson60ddba62010-01-24 00:20:05 +00001108 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001109 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001110 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001111 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, RHSCount);
1112
John McCallce1de612011-01-26 04:00:11 +00001113 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001114
Chris Lattnercd439292008-11-12 08:04:58 +00001115 return;
1116 }
Chris Lattnerd9537732008-11-12 08:13:36 +00001117 }
Mike Stump11289f42009-09-09 15:08:12 +00001118
Chris Lattnerd9537732008-11-12 08:13:36 +00001119 if (const UnaryOperator *CondUOp = dyn_cast<UnaryOperator>(Cond)) {
1120 // br(!x, t, f) -> br(x, f, t)
Justin Bogneref512b92014-01-06 22:27:43 +00001121 if (CondUOp->getOpcode() == UO_LNot) {
1122 // Negate the count.
1123 uint64_t FalseCount = PGO.getCurrentRegionCount() - TrueCount;
1124 // Negate the condition and swap the destination blocks.
1125 return EmitBranchOnBoolExpr(CondUOp->getSubExpr(), FalseBlock, TrueBlock,
1126 FalseCount);
1127 }
Chris Lattnercd439292008-11-12 08:04:58 +00001128 }
Mike Stump11289f42009-09-09 15:08:12 +00001129
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001130 if (const ConditionalOperator *CondOp = dyn_cast<ConditionalOperator>(Cond)) {
Eli Friedman248f8982012-02-14 03:54:45 +00001131 // br(c ? x : y, t, f) -> br(c, br(x, t, f), br(y, t, f))
1132 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1133 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001134
Justin Bogneref512b92014-01-06 22:27:43 +00001135 RegionCounter Cnt = getPGORegionCounter(CondOp);
Eli Friedman248f8982012-02-14 03:54:45 +00001136 ConditionalEvaluation cond(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001137 EmitBranchOnBoolExpr(CondOp->getCond(), LHSBlock, RHSBlock, Cnt.getCount());
1138
1139 // When computing PGO branch weights, we only know the overall count for
1140 // the true block. This code is essentially doing tail duplication of the
1141 // naive code-gen, introducing new edges for which counts are not
1142 // available. Divide the counts proportionally between the LHS and RHS of
1143 // the conditional operator.
1144 uint64_t LHSScaledTrueCount = 0;
1145 if (TrueCount) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001146 double LHSRatio = Cnt.getCount() / (double) Cnt.getParentCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001147 LHSScaledTrueCount = TrueCount * LHSRatio;
1148 }
John McCallce1de612011-01-26 04:00:11 +00001149
Eli Friedman248f8982012-02-14 03:54:45 +00001150 cond.begin(*this);
1151 EmitBlock(LHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001152 Cnt.beginRegion(Builder);
1153 EmitBranchOnBoolExpr(CondOp->getLHS(), TrueBlock, FalseBlock,
1154 LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001155 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001156
Eli Friedman248f8982012-02-14 03:54:45 +00001157 cond.begin(*this);
1158 EmitBlock(RHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001159 EmitBranchOnBoolExpr(CondOp->getRHS(), TrueBlock, FalseBlock,
1160 TrueCount - LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001161 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001162
Eli Friedman248f8982012-02-14 03:54:45 +00001163 return;
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001164 }
1165
Richard Smithea852322013-05-07 21:53:22 +00001166 if (const CXXThrowExpr *Throw = dyn_cast<CXXThrowExpr>(Cond)) {
1167 // Conditional operator handling can give us a throw expression as a
1168 // condition for a case like:
1169 // br(c ? throw x : y, t, f) -> br(c, br(throw x, t, f), br(y, t, f)
1170 // Fold this to:
1171 // br(c, throw x, br(y, t, f))
1172 EmitCXXThrowExpr(Throw, /*KeepInsertionPoint*/false);
1173 return;
1174 }
1175
Justin Bogneref512b92014-01-06 22:27:43 +00001176 // Create branch weights based on the number of times we get here and the
1177 // number of times the condition should be true.
Bob Wilsonbf854f02014-02-17 19:21:09 +00001178 uint64_t CurrentCount = std::max(PGO.getCurrentRegionCount(), TrueCount);
Justin Bogneref512b92014-01-06 22:27:43 +00001179 llvm::MDNode *Weights = PGO.createBranchWeights(TrueCount,
1180 CurrentCount - TrueCount);
1181
Chris Lattnercd439292008-11-12 08:04:58 +00001182 // Emit the code with the fully general case.
1183 llvm::Value *CondV = EvaluateExprAsBool(Cond);
Justin Bogneref512b92014-01-06 22:27:43 +00001184 Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
Chris Lattnercd439292008-11-12 08:04:58 +00001185}
1186
Daniel Dunbara7c8cf62008-08-16 00:56:44 +00001187/// ErrorUnsupported - Print out an error that codegen doesn't support the
Chris Lattnerfc944342007-12-02 01:43:38 +00001188/// specified stmt yet.
David Blaikie4a9ec7b2013-08-19 21:02:26 +00001189void CodeGenFunction::ErrorUnsupported(const Stmt *S, const char *Type) {
1190 CGM.ErrorUnsupported(S, Type);
Chris Lattnerfc944342007-12-02 01:43:38 +00001191}
1192
John McCall2725aa12011-02-01 21:35:06 +00001193/// emitNonZeroVLAInit - Emit the "zero" initialization of a
1194/// variable-length array whose elements have a non-zero bit-pattern.
1195///
James Dennettbe302452012-06-15 22:10:14 +00001196/// \param baseType the inner-most element type of the array
John McCall2725aa12011-02-01 21:35:06 +00001197/// \param src - a char* pointing to the bit-pattern for a single
1198/// base element of the array
1199/// \param sizeInChars - the total size of the VLA, in chars
John McCall2725aa12011-02-01 21:35:06 +00001200static void emitNonZeroVLAInit(CodeGenFunction &CGF, QualType baseType,
Michael Ilseman686240a2012-12-04 00:29:55 +00001201 llvm::Value *dest, llvm::Value *src,
John McCall2725aa12011-02-01 21:35:06 +00001202 llvm::Value *sizeInChars) {
1203 std::pair<CharUnits,CharUnits> baseSizeAndAlign
1204 = CGF.getContext().getTypeInfoInChars(baseType);
1205
1206 CGBuilderTy &Builder = CGF.Builder;
1207
1208 llvm::Value *baseSizeInChars
1209 = llvm::ConstantInt::get(CGF.IntPtrTy, baseSizeAndAlign.first.getQuantity());
1210
Chris Lattner2192fe52011-07-18 04:24:23 +00001211 llvm::Type *i8p = Builder.getInt8PtrTy();
John McCall2725aa12011-02-01 21:35:06 +00001212
1213 llvm::Value *begin = Builder.CreateBitCast(dest, i8p, "vla.begin");
1214 llvm::Value *end = Builder.CreateInBoundsGEP(dest, sizeInChars, "vla.end");
1215
1216 llvm::BasicBlock *originBB = CGF.Builder.GetInsertBlock();
1217 llvm::BasicBlock *loopBB = CGF.createBasicBlock("vla-init.loop");
1218 llvm::BasicBlock *contBB = CGF.createBasicBlock("vla-init.cont");
1219
1220 // Make a loop over the VLA. C99 guarantees that the VLA element
1221 // count must be nonzero.
1222 CGF.EmitBlock(loopBB);
1223
Jay Foad20c0f022011-03-30 11:28:58 +00001224 llvm::PHINode *cur = Builder.CreatePHI(i8p, 2, "vla.cur");
John McCall2725aa12011-02-01 21:35:06 +00001225 cur->addIncoming(begin, originBB);
1226
1227 // memcpy the individual element bit-pattern.
1228 Builder.CreateMemCpy(cur, src, baseSizeInChars,
1229 baseSizeAndAlign.second.getQuantity(),
1230 /*volatile*/ false);
1231
1232 // Go to the next element.
1233 llvm::Value *next = Builder.CreateConstInBoundsGEP1_32(cur, 1, "vla.next");
1234
1235 // Leave if that's the end of the VLA.
1236 llvm::Value *done = Builder.CreateICmpEQ(next, end, "vla-init.isdone");
1237 Builder.CreateCondBr(done, contBB, loopBB);
1238 cur->addIncoming(next, loopBB);
1239
1240 CGF.EmitBlock(contBB);
Michael Ilseman686240a2012-12-04 00:29:55 +00001241}
John McCall2725aa12011-02-01 21:35:06 +00001242
Anders Carlssonc0964b62010-05-22 17:35:42 +00001243void
1244CodeGenFunction::EmitNullInitialization(llvm::Value *DestPtr, QualType Ty) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001245 // Ignore empty classes in C++.
Richard Smith9c6890a2012-11-01 22:30:59 +00001246 if (getLangOpts().CPlusPlus) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001247 if (const RecordType *RT = Ty->getAs<RecordType>()) {
1248 if (cast<CXXRecordDecl>(RT->getDecl())->isEmpty())
1249 return;
1250 }
1251 }
John McCall7cd1d972010-08-07 08:21:30 +00001252
1253 // Cast the dest ptr to the appropriate i8 pointer type.
1254 unsigned DestAS =
1255 cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
Chris Lattner2192fe52011-07-18 04:24:23 +00001256 llvm::Type *BP = Builder.getInt8PtrTy(DestAS);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001257 if (DestPtr->getType() != BP)
Benjamin Kramer76399eb2011-09-27 21:06:10 +00001258 DestPtr = Builder.CreateBitCast(DestPtr, BP);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001259
1260 // Get size and alignment info for this aggregate.
Michael Ilseman686240a2012-12-04 00:29:55 +00001261 std::pair<CharUnits, CharUnits> TypeInfo =
Ken Dyckc5c416f2011-04-22 17:51:05 +00001262 getContext().getTypeInfoInChars(Ty);
1263 CharUnits Size = TypeInfo.first;
1264 CharUnits Align = TypeInfo.second;
Anders Carlsson2e744e82008-08-30 19:51:14 +00001265
John McCalla08ffd22011-01-14 10:37:58 +00001266 llvm::Value *SizeVal;
John McCall2725aa12011-02-01 21:35:06 +00001267 const VariableArrayType *vla;
Mike Stump11289f42009-09-09 15:08:12 +00001268
John McCalla08ffd22011-01-14 10:37:58 +00001269 // Don't bother emitting a zero-byte memset.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001270 if (Size.isZero()) {
John McCalla08ffd22011-01-14 10:37:58 +00001271 // But note that getTypeInfo returns 0 for a VLA.
1272 if (const VariableArrayType *vlaType =
1273 dyn_cast_or_null<VariableArrayType>(
1274 getContext().getAsArrayType(Ty))) {
John McCall23c29fe2011-06-24 21:55:10 +00001275 QualType eltType;
1276 llvm::Value *numElts;
Benjamin Kramer867ea1d2014-03-02 13:01:17 +00001277 std::tie(numElts, eltType) = getVLASize(vlaType);
John McCall23c29fe2011-06-24 21:55:10 +00001278
1279 SizeVal = numElts;
1280 CharUnits eltSize = getContext().getTypeSizeInChars(eltType);
1281 if (!eltSize.isOne())
1282 SizeVal = Builder.CreateNUWMul(SizeVal, CGM.getSize(eltSize));
John McCall2725aa12011-02-01 21:35:06 +00001283 vla = vlaType;
John McCalla08ffd22011-01-14 10:37:58 +00001284 } else {
1285 return;
1286 }
1287 } else {
John McCall23c29fe2011-06-24 21:55:10 +00001288 SizeVal = CGM.getSize(Size);
Craig Topper8a13c412014-05-21 05:09:00 +00001289 vla = nullptr;
John McCalla08ffd22011-01-14 10:37:58 +00001290 }
John McCall7cd1d972010-08-07 08:21:30 +00001291
1292 // If the type contains a pointer to data member we can't memset it to zero.
1293 // Instead, create a null constant and copy it to the destination.
John McCall2725aa12011-02-01 21:35:06 +00001294 // TODO: there are other patterns besides zero that we can usefully memset,
1295 // like -1, which happens to be the pattern used by member-pointers.
John McCall614dbdc2010-08-22 21:01:12 +00001296 if (!CGM.getTypes().isZeroInitializable(Ty)) {
John McCall2725aa12011-02-01 21:35:06 +00001297 // For a VLA, emit a single element, then splat that over the VLA.
1298 if (vla) Ty = getContext().getBaseElementType(vla);
John McCalla08ffd22011-01-14 10:37:58 +00001299
John McCall7cd1d972010-08-07 08:21:30 +00001300 llvm::Constant *NullConstant = CGM.EmitNullConstant(Ty);
1301
Michael Ilseman686240a2012-12-04 00:29:55 +00001302 llvm::GlobalVariable *NullVariable =
John McCall7cd1d972010-08-07 08:21:30 +00001303 new llvm::GlobalVariable(CGM.getModule(), NullConstant->getType(),
Michael Ilseman686240a2012-12-04 00:29:55 +00001304 /*isConstant=*/true,
John McCall7cd1d972010-08-07 08:21:30 +00001305 llvm::GlobalVariable::PrivateLinkage,
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001306 NullConstant, Twine());
John McCall7cd1d972010-08-07 08:21:30 +00001307 llvm::Value *SrcPtr =
1308 Builder.CreateBitCast(NullVariable, Builder.getInt8PtrTy());
1309
John McCall2725aa12011-02-01 21:35:06 +00001310 if (vla) return emitNonZeroVLAInit(*this, Ty, DestPtr, SrcPtr, SizeVal);
1311
John McCall7cd1d972010-08-07 08:21:30 +00001312 // Get and call the appropriate llvm.memcpy overload.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001313 Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align.getQuantity(), false);
John McCall7cd1d972010-08-07 08:21:30 +00001314 return;
Michael Ilseman686240a2012-12-04 00:29:55 +00001315 }
1316
John McCall7cd1d972010-08-07 08:21:30 +00001317 // Otherwise, just memset the whole thing to zero. This is legal
1318 // because in LLVM, all default initializers (other than the ones we just
1319 // handled above) are guaranteed to have a bit pattern of all zeros.
Michael Ilseman686240a2012-12-04 00:29:55 +00001320 Builder.CreateMemSet(DestPtr, Builder.getInt8(0), SizeVal,
Ken Dyckc5c416f2011-04-22 17:51:05 +00001321 Align.getQuantity(), false);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001322}
1323
Chris Lattnerc8e630e2011-02-17 07:39:24 +00001324llvm::BlockAddress *CodeGenFunction::GetAddrOfLabel(const LabelDecl *L) {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001325 // Make sure that there is a block for the indirect goto.
Craig Topper8a13c412014-05-21 05:09:00 +00001326 if (!IndirectBranch)
Chris Lattner6c4d2552009-10-28 23:59:40 +00001327 GetIndirectGotoBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001328
John McCallad5d61e2010-07-23 21:56:41 +00001329 llvm::BasicBlock *BB = getJumpDestForLabel(L).getBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001330
Chris Lattner6c4d2552009-10-28 23:59:40 +00001331 // Make sure the indirect branch includes all of the address-taken blocks.
1332 IndirectBranch->addDestination(BB);
1333 return llvm::BlockAddress::get(CurFn, BB);
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001334}
1335
1336llvm::BasicBlock *CodeGenFunction::GetIndirectGotoBlock() {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001337 // If we already made the indirect branch for indirect goto, return its block.
1338 if (IndirectBranch) return IndirectBranch->getParent();
Michael Ilseman686240a2012-12-04 00:29:55 +00001339
Chris Lattner6c4d2552009-10-28 23:59:40 +00001340 CGBuilderTy TmpBuilder(createBasicBlock("indirectgoto"));
Michael Ilseman686240a2012-12-04 00:29:55 +00001341
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001342 // Create the PHI node that indirect gotos will add entries to.
Jay Foad20c0f022011-03-30 11:28:58 +00001343 llvm::Value *DestVal = TmpBuilder.CreatePHI(Int8PtrTy, 0,
1344 "indirect.goto.dest");
Michael Ilseman686240a2012-12-04 00:29:55 +00001345
Chris Lattner6c4d2552009-10-28 23:59:40 +00001346 // Create the indirect branch instruction.
1347 IndirectBranch = TmpBuilder.CreateIndirectBr(DestVal);
1348 return IndirectBranch->getParent();
Daniel Dunbar88402ce2008-08-04 16:51:22 +00001349}
Anders Carlsson13abd7e2008-11-04 05:30:00 +00001350
John McCall82fe67b2011-07-09 01:37:26 +00001351/// Computes the length of an array in elements, as well as the base
1352/// element type and a properly-typed first element pointer.
1353llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType,
1354 QualType &baseType,
1355 llvm::Value *&addr) {
1356 const ArrayType *arrayType = origArrayType;
1357
1358 // If it's a VLA, we have to load the stored size. Note that
1359 // this is the size of the VLA in bytes, not its size in elements.
Craig Topper8a13c412014-05-21 05:09:00 +00001360 llvm::Value *numVLAElements = nullptr;
John McCall82fe67b2011-07-09 01:37:26 +00001361 if (isa<VariableArrayType>(arrayType)) {
1362 numVLAElements = getVLASize(cast<VariableArrayType>(arrayType)).first;
1363
1364 // Walk into all VLAs. This doesn't require changes to addr,
1365 // which has type T* where T is the first non-VLA element type.
1366 do {
1367 QualType elementType = arrayType->getElementType();
1368 arrayType = getContext().getAsArrayType(elementType);
1369
1370 // If we only have VLA components, 'addr' requires no adjustment.
1371 if (!arrayType) {
1372 baseType = elementType;
1373 return numVLAElements;
1374 }
1375 } while (isa<VariableArrayType>(arrayType));
1376
1377 // We get out here only if we find a constant array type
1378 // inside the VLA.
1379 }
1380
1381 // We have some number of constant-length arrays, so addr should
1382 // have LLVM type [M x [N x [...]]]*. Build a GEP that walks
1383 // down to the first element of addr.
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001384 SmallVector<llvm::Value*, 8> gepIndices;
John McCall82fe67b2011-07-09 01:37:26 +00001385
1386 // GEP down to the array type.
1387 llvm::ConstantInt *zero = Builder.getInt32(0);
1388 gepIndices.push_back(zero);
1389
John McCall82fe67b2011-07-09 01:37:26 +00001390 uint64_t countFromCLAs = 1;
Richard Smithf3c37e82012-04-22 05:51:36 +00001391 QualType eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001392
Chris Lattner2192fe52011-07-18 04:24:23 +00001393 llvm::ArrayType *llvmArrayType =
Richard Smithf3c37e82012-04-22 05:51:36 +00001394 dyn_cast<llvm::ArrayType>(
John McCall82fe67b2011-07-09 01:37:26 +00001395 cast<llvm::PointerType>(addr->getType())->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001396 while (llvmArrayType) {
John McCall82fe67b2011-07-09 01:37:26 +00001397 assert(isa<ConstantArrayType>(arrayType));
1398 assert(cast<ConstantArrayType>(arrayType)->getSize().getZExtValue()
1399 == llvmArrayType->getNumElements());
1400
1401 gepIndices.push_back(zero);
1402 countFromCLAs *= llvmArrayType->getNumElements();
Richard Smithf3c37e82012-04-22 05:51:36 +00001403 eltType = arrayType->getElementType();
John McCall82fe67b2011-07-09 01:37:26 +00001404
1405 llvmArrayType =
1406 dyn_cast<llvm::ArrayType>(llvmArrayType->getElementType());
John McCall82fe67b2011-07-09 01:37:26 +00001407 arrayType = getContext().getAsArrayType(arrayType->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001408 assert((!llvmArrayType || arrayType) &&
1409 "LLVM and Clang types are out-of-synch");
John McCall82fe67b2011-07-09 01:37:26 +00001410 }
1411
Richard Smithf3c37e82012-04-22 05:51:36 +00001412 if (arrayType) {
1413 // From this point onwards, the Clang array type has been emitted
1414 // as some other type (probably a packed struct). Compute the array
1415 // size, and just emit the 'begin' expression as a bitcast.
1416 while (arrayType) {
1417 countFromCLAs *=
1418 cast<ConstantArrayType>(arrayType)->getSize().getZExtValue();
1419 eltType = arrayType->getElementType();
1420 arrayType = getContext().getAsArrayType(eltType);
1421 }
John McCall82fe67b2011-07-09 01:37:26 +00001422
Micah Villmowea2fea22012-10-25 15:39:14 +00001423 unsigned AddressSpace = addr->getType()->getPointerAddressSpace();
Richard Smithf3c37e82012-04-22 05:51:36 +00001424 llvm::Type *BaseType = ConvertType(eltType)->getPointerTo(AddressSpace);
1425 addr = Builder.CreateBitCast(addr, BaseType, "array.begin");
1426 } else {
1427 // Create the actual GEP.
1428 addr = Builder.CreateInBoundsGEP(addr, gepIndices, "array.begin");
1429 }
1430
1431 baseType = eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001432
1433 llvm::Value *numElements
1434 = llvm::ConstantInt::get(SizeTy, countFromCLAs);
1435
1436 // If we had any VLA dimensions, factor them in.
1437 if (numVLAElements)
1438 numElements = Builder.CreateNUWMul(numVLAElements, numElements);
1439
1440 return numElements;
1441}
1442
John McCall23c29fe2011-06-24 21:55:10 +00001443std::pair<llvm::Value*, QualType>
1444CodeGenFunction::getVLASize(QualType type) {
1445 const VariableArrayType *vla = getContext().getAsVariableArrayType(type);
1446 assert(vla && "type was not a variable array type!");
1447 return getVLASize(vla);
Anders Carlssone388a5b2008-12-20 20:27:15 +00001448}
Anders Carlssonccbe9202008-12-12 07:19:02 +00001449
John McCall23c29fe2011-06-24 21:55:10 +00001450std::pair<llvm::Value*, QualType>
1451CodeGenFunction::getVLASize(const VariableArrayType *type) {
1452 // The number of elements so far; always size_t.
Craig Topper8a13c412014-05-21 05:09:00 +00001453 llvm::Value *numElements = nullptr;
John McCall23c29fe2011-06-24 21:55:10 +00001454
1455 QualType elementType;
1456 do {
1457 elementType = type->getElementType();
1458 llvm::Value *vlaSize = VLASizeMap[type->getSizeExpr()];
1459 assert(vlaSize && "no size for VLA!");
1460 assert(vlaSize->getType() == SizeTy);
1461
1462 if (!numElements) {
1463 numElements = vlaSize;
1464 } else {
1465 // It's undefined behavior if this wraps around, so mark it that way.
Alexey Samsonovcb3f8122014-03-20 10:48:29 +00001466 // FIXME: Teach -fsanitize=undefined to trap this.
John McCall23c29fe2011-06-24 21:55:10 +00001467 numElements = Builder.CreateNUWMul(numElements, vlaSize);
1468 }
1469 } while ((type = getContext().getAsVariableArrayType(elementType)));
1470
1471 return std::pair<llvm::Value*,QualType>(numElements, elementType);
1472}
1473
1474void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
1475 assert(type->isVariablyModifiedType() &&
Anders Carlsson8a01b792008-12-20 20:46:34 +00001476 "Must pass variably modified type to EmitVLASizes!");
Mike Stump11289f42009-09-09 15:08:12 +00001477
Daniel Dunbarb6adc432009-07-19 06:58:07 +00001478 EnsureInsertPoint();
Mike Stump11289f42009-09-09 15:08:12 +00001479
John McCall23c29fe2011-06-24 21:55:10 +00001480 // We're going to walk down into the type and look for VLA
1481 // expressions.
John McCall23c29fe2011-06-24 21:55:10 +00001482 do {
1483 assert(type->isVariablyModifiedType());
Mike Stump11289f42009-09-09 15:08:12 +00001484
John McCall23c29fe2011-06-24 21:55:10 +00001485 const Type *ty = type.getTypePtr();
1486 switch (ty->getTypeClass()) {
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001487
John McCall23c29fe2011-06-24 21:55:10 +00001488#define TYPE(Class, Base)
1489#define ABSTRACT_TYPE(Class, Base)
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001490#define NON_CANONICAL_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001491#define DEPENDENT_TYPE(Class, Base) case Type::Class:
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001492#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001493#include "clang/AST/TypeNodes.def"
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001494 llvm_unreachable("unexpected dependent type!");
Mike Stump11289f42009-09-09 15:08:12 +00001495
John McCall23c29fe2011-06-24 21:55:10 +00001496 // These types are never variably-modified.
1497 case Type::Builtin:
1498 case Type::Complex:
1499 case Type::Vector:
1500 case Type::ExtVector:
1501 case Type::Record:
1502 case Type::Enum:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001503 case Type::Elaborated:
1504 case Type::TemplateSpecialization:
John McCall23c29fe2011-06-24 21:55:10 +00001505 case Type::ObjCObject:
1506 case Type::ObjCInterface:
1507 case Type::ObjCObjectPointer:
1508 llvm_unreachable("type class is never variably-modified!");
Mike Stump11289f42009-09-09 15:08:12 +00001509
Reid Kleckner0503a872013-12-05 01:23:43 +00001510 case Type::Adjusted:
1511 type = cast<AdjustedType>(ty)->getAdjustedType();
1512 break;
1513
Reid Kleckner8a365022013-06-24 17:51:48 +00001514 case Type::Decayed:
1515 type = cast<DecayedType>(ty)->getPointeeType();
1516 break;
1517
John McCall23c29fe2011-06-24 21:55:10 +00001518 case Type::Pointer:
1519 type = cast<PointerType>(ty)->getPointeeType();
1520 break;
Mike Stump11289f42009-09-09 15:08:12 +00001521
John McCall23c29fe2011-06-24 21:55:10 +00001522 case Type::BlockPointer:
1523 type = cast<BlockPointerType>(ty)->getPointeeType();
1524 break;
1525
1526 case Type::LValueReference:
1527 case Type::RValueReference:
1528 type = cast<ReferenceType>(ty)->getPointeeType();
1529 break;
1530
1531 case Type::MemberPointer:
1532 type = cast<MemberPointerType>(ty)->getPointeeType();
1533 break;
1534
1535 case Type::ConstantArray:
1536 case Type::IncompleteArray:
1537 // Losing element qualification here is fine.
1538 type = cast<ArrayType>(ty)->getElementType();
1539 break;
1540
1541 case Type::VariableArray: {
1542 // Losing element qualification here is fine.
1543 const VariableArrayType *vat = cast<VariableArrayType>(ty);
1544
1545 // Unknown size indication requires no size computation.
1546 // Otherwise, evaluate and record it.
1547 if (const Expr *size = vat->getSizeExpr()) {
1548 // It's possible that we might have emitted this already,
1549 // e.g. with a typedef and a pointer to it.
1550 llvm::Value *&entry = VLASizeMap[size];
1551 if (!entry) {
Richard Smith481652b2012-10-10 01:11:12 +00001552 llvm::Value *Size = EmitScalarExpr(size);
1553
1554 // C11 6.7.6.2p5:
1555 // If the size is an expression that is not an integer constant
1556 // expression [...] each time it is evaluated it shall have a value
1557 // greater than zero.
Alexey Samsonovedf99a92014-11-07 22:29:38 +00001558 if (SanOpts.has(SanitizerKind::VLABound) &&
Richard Smithb1b0ab42012-11-05 22:21:05 +00001559 size->getType()->isSignedIntegerType()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +00001560 SanitizerScope SanScope(this);
Richard Smith481652b2012-10-10 01:11:12 +00001561 llvm::Value *Zero = llvm::Constant::getNullValue(Size->getType());
1562 llvm::Constant *StaticArgs[] = {
1563 EmitCheckSourceLocation(size->getLocStart()),
1564 EmitCheckTypeDescriptor(size->getType())
1565 };
Alexey Samsonove396bfc2014-11-11 22:03:54 +00001566 EmitCheck(std::make_pair(Builder.CreateICmpSGT(Size, Zero),
1567 SanitizerKind::VLABound),
1568 "vla_bound_not_positive", StaticArgs, Size);
Richard Smith481652b2012-10-10 01:11:12 +00001569 }
1570
John McCall23c29fe2011-06-24 21:55:10 +00001571 // Always zexting here would be wrong if it weren't
1572 // undefined behavior to have a negative bound.
Richard Smith8772bd82012-10-10 01:12:11 +00001573 entry = Builder.CreateIntCast(Size, SizeTy, /*signed*/ false);
John McCall23c29fe2011-06-24 21:55:10 +00001574 }
1575 }
1576 type = vat->getElementType();
1577 break;
Anders Carlsson8a01b792008-12-20 20:46:34 +00001578 }
Mike Stump11289f42009-09-09 15:08:12 +00001579
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001580 case Type::FunctionProto:
John McCall23c29fe2011-06-24 21:55:10 +00001581 case Type::FunctionNoProto:
Alp Toker314cc812014-01-25 16:55:45 +00001582 type = cast<FunctionType>(ty)->getReturnType();
John McCall23c29fe2011-06-24 21:55:10 +00001583 break;
Eli Friedman0dfb8892011-10-06 23:00:33 +00001584
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001585 case Type::Paren:
1586 case Type::TypeOf:
1587 case Type::UnaryTransform:
1588 case Type::Attributed:
1589 case Type::SubstTemplateTypeParm:
David Blaikie66ed89d2013-07-13 21:08:08 +00001590 case Type::PackExpansion:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001591 // Keep walking after single level desugaring.
1592 type = type.getSingleStepDesugaredType(getContext());
1593 break;
1594
1595 case Type::Typedef:
1596 case Type::Decltype:
1597 case Type::Auto:
1598 // Stop walking: nothing to do.
1599 return;
1600
1601 case Type::TypeOfExpr:
1602 // Stop walking: emit typeof expression.
1603 EmitIgnoredExpr(cast<TypeOfExprType>(ty)->getUnderlyingExpr());
1604 return;
1605
Eli Friedman0dfb8892011-10-06 23:00:33 +00001606 case Type::Atomic:
1607 type = cast<AtomicType>(ty)->getValueType();
1608 break;
John McCall23c29fe2011-06-24 21:55:10 +00001609 }
1610 } while (type->isVariablyModifiedType());
Anders Carlssonccbe9202008-12-12 07:19:02 +00001611}
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001612
1613llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) {
Dan Gohmane9e32dc2010-10-29 22:47:07 +00001614 if (getContext().getBuiltinVaListType()->isArrayType())
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001615 return EmitScalarExpr(E);
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001616 return EmitLValue(E).getAddress();
1617}
Anders Carlsson15cb75a2009-02-07 22:53:43 +00001618
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001619void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
1620 llvm::Constant *Init) {
Devang Pateldc866e12010-08-10 17:53:33 +00001621 assert (Init && "Invalid DeclRefExpr initializer!");
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001622 if (CGDebugInfo *Dbg = getDebugInfo())
1623 if (CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
1624 Dbg->EmitGlobalVariable(E->getDecl(), Init);
Devang Patele03edfd2010-08-10 07:24:25 +00001625}
John McCallc07a0c72011-02-17 10:25:35 +00001626
1627CodeGenFunction::PeepholeProtection
1628CodeGenFunction::protectFromPeepholes(RValue rvalue) {
1629 // At the moment, the only aggressive peephole we do in IR gen
1630 // is trunc(zext) folding, but if we add more, we can easily
1631 // extend this protection.
1632
1633 if (!rvalue.isScalar()) return PeepholeProtection();
1634 llvm::Value *value = rvalue.getScalarVal();
1635 if (!isa<llvm::ZExtInst>(value)) return PeepholeProtection();
1636
1637 // Just make an extra bitcast.
1638 assert(HaveInsertPoint());
1639 llvm::Instruction *inst = new llvm::BitCastInst(value, value->getType(), "",
1640 Builder.GetInsertBlock());
1641
1642 PeepholeProtection protection;
1643 protection.Inst = inst;
1644 return protection;
1645}
1646
1647void CodeGenFunction::unprotectFromPeepholes(PeepholeProtection protection) {
1648 if (!protection.Inst) return;
1649
1650 // In theory, we could try to duplicate the peepholes now, but whatever.
1651 protection.Inst->eraseFromParent();
1652}
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001653
1654llvm::Value *CodeGenFunction::EmitAnnotationCall(llvm::Value *AnnotationFn,
1655 llvm::Value *AnnotatedVal,
Dmitri Gribenkof8579502013-01-12 19:30:44 +00001656 StringRef AnnotationStr,
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001657 SourceLocation Location) {
1658 llvm::Value *Args[4] = {
1659 AnnotatedVal,
1660 Builder.CreateBitCast(CGM.EmitAnnotationString(AnnotationStr), Int8PtrTy),
1661 Builder.CreateBitCast(CGM.EmitAnnotationUnit(Location), Int8PtrTy),
1662 CGM.EmitAnnotationLineNo(Location)
1663 };
1664 return Builder.CreateCall(AnnotationFn, Args);
1665}
1666
1667void CodeGenFunction::EmitVarAnnotations(const VarDecl *D, llvm::Value *V) {
1668 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1669 // FIXME We create a new bitcast for every annotation because that's what
1670 // llvm-gcc was doing.
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001671 for (const auto *I : D->specific_attrs<AnnotateAttr>())
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001672 EmitAnnotationCall(CGM.getIntrinsic(llvm::Intrinsic::var_annotation),
1673 Builder.CreateBitCast(V, CGM.Int8PtrTy, V->getName()),
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001674 I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001675}
1676
1677llvm::Value *CodeGenFunction::EmitFieldAnnotations(const FieldDecl *D,
1678 llvm::Value *V) {
1679 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1680 llvm::Type *VTy = V->getType();
1681 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::ptr_annotation,
1682 CGM.Int8PtrTy);
1683
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001684 for (const auto *I : D->specific_attrs<AnnotateAttr>()) {
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001685 // FIXME Always emit the cast inst so we can differentiate between
1686 // annotation on the first field of a struct and annotation on the struct
1687 // itself.
1688 if (VTy != CGM.Int8PtrTy)
1689 V = Builder.Insert(new llvm::BitCastInst(V, CGM.Int8PtrTy));
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001690 V = EmitAnnotationCall(F, V, I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001691 V = Builder.CreateBitCast(V, VTy);
1692 }
1693
1694 return V;
1695}
Ben Langmuir3b4c30b2013-05-09 19:17:11 +00001696
1697CodeGenFunction::CGCapturedStmtInfo::~CGCapturedStmtInfo() { }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001698
Alexey Samsonov24cad992014-07-17 18:46:27 +00001699CodeGenFunction::SanitizerScope::SanitizerScope(CodeGenFunction *CGF)
1700 : CGF(CGF) {
1701 assert(!CGF->IsSanitizerScope);
1702 CGF->IsSanitizerScope = true;
1703}
1704
1705CodeGenFunction::SanitizerScope::~SanitizerScope() {
1706 CGF->IsSanitizerScope = false;
1707}
1708
Alexander Musman515ad8c2014-05-22 08:54:05 +00001709void CodeGenFunction::InsertHelper(llvm::Instruction *I,
1710 const llvm::Twine &Name,
1711 llvm::BasicBlock *BB,
1712 llvm::BasicBlock::iterator InsertPt) const {
1713 LoopStack.InsertHelper(I);
Kostya Serebryany4ee69042014-08-26 02:29:59 +00001714 if (IsSanitizerScope)
1715 CGM.getSanitizerMetadata()->disableSanitizerForInstruction(I);
Alexander Musman515ad8c2014-05-22 08:54:05 +00001716}
1717
1718template <bool PreserveNames>
1719void CGBuilderInserter<PreserveNames>::InsertHelper(
1720 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1721 llvm::BasicBlock::iterator InsertPt) const {
1722 llvm::IRBuilderDefaultInserter<PreserveNames>::InsertHelper(I, Name, BB,
1723 InsertPt);
1724 if (CGF)
1725 CGF->InsertHelper(I, Name, BB, InsertPt);
1726}
1727
1728#ifdef NDEBUG
1729#define PreserveNames false
1730#else
1731#define PreserveNames true
1732#endif
1733template void CGBuilderInserter<PreserveNames>::InsertHelper(
1734 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1735 llvm::BasicBlock::iterator InsertPt) const;
1736#undef PreserveNames