blob: 826171a46e2394048ecf58185e0f41639bd640b6 [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 Blaikie66e41972015-01-14 07:38:27 +0000161llvm::DebugLoc 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 Blaikie66e41972015-01-14 07:38:27 +0000176 return llvm::DebugLoc();
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 Blaikie66e41972015-01-14 07:38:27 +0000187 // Record/return the DebugLoc of the simple 'return' expression to be used
188 // later by the actual 'ret' instruction.
189 llvm::DebugLoc Loc = BI->getDebugLoc();
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000190 Builder.SetInsertPoint(BI->getParent());
191 BI->eraseFromParent();
John McCallad5d61e2010-07-23 21:56:41 +0000192 delete ReturnBlock.getBlock();
David Blaikie66e41972015-01-14 07:38:27 +0000193 return Loc;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000194 }
195 }
196
Mike Stump18bb9282009-05-16 07:57:57 +0000197 // FIXME: We are at an unreachable point, there is no reason to emit the block
198 // unless it has uses. However, we still need a place to put the debug
199 // region.end for now.
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000200
John McCallad5d61e2010-07-23 21:56:41 +0000201 EmitBlock(ReturnBlock.getBlock());
David Blaikie66e41972015-01-14 07:38:27 +0000202 return llvm::DebugLoc();
John McCallbd309292010-07-06 01:34:17 +0000203}
204
205static void EmitIfUsed(CodeGenFunction &CGF, llvm::BasicBlock *BB) {
206 if (!BB) return;
207 if (!BB->use_empty())
208 return CGF.CurFn->getBasicBlockList().push_back(BB);
209 delete BB;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000210}
211
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000212void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
Chris Lattnere73e4322007-07-16 21:28:45 +0000213 assert(BreakContinueStack.empty() &&
214 "mismatched push/pop in break/continue stack!");
Mike Stump11289f42009-09-09 15:08:12 +0000215
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000216 bool OnlySimpleReturnStmts = NumSimpleReturnExprs > 0
Adrian Prantl524ba1f2013-07-25 00:23:42 +0000217 && NumSimpleReturnExprs == NumReturnExprs
218 && ReturnBlock.getBlock()->use_empty();
219 // Usually the return expression is evaluated before the cleanup
220 // code. If the function contains only a simple return statement,
221 // such as a constant, the location before the cleanup code becomes
222 // the last useful breakpoint in the function, because the simple
223 // return expression will be evaluated after the cleanup code. To be
224 // safe, set the debug location for cleanup code to the location of
225 // the return statement. Otherwise the cleanup code should be at the
226 // end of the function's lexical scope.
227 //
228 // If there are multiple branches to the return block, the branch
229 // instructions will get the location of the return statements and
230 // all will be fine.
Adrian Prantl3be10542013-05-02 17:30:20 +0000231 if (CGDebugInfo *DI = getDebugInfo()) {
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000232 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000233 DI->EmitLocation(Builder, LastStopPoint);
Adrian Prantl3be10542013-05-02 17:30:20 +0000234 else
Adrian Prantle83b1302014-01-07 22:05:52 +0000235 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000236 }
David Blaikie357aafb2013-02-01 19:09:49 +0000237
John McCall31168b02011-06-15 23:02:42 +0000238 // Pop any cleanups that might have been associated with the
239 // parameters. Do this in whatever block we're currently in; it's
240 // important to do this before we enter the return block or return
241 // edges will be *really* confused.
Adrian Prantl3be10542013-05-02 17:30:20 +0000242 bool EmitRetDbgLoc = true;
243 if (EHStack.stable_begin() != PrologueCleanupDepth) {
Adrian Prantldc237b52013-05-16 00:41:26 +0000244 PopCleanupBlocks(PrologueCleanupDepth);
John McCall31168b02011-06-15 23:02:42 +0000245
Adrian Prantl3be10542013-05-02 17:30:20 +0000246 // Make sure the line table doesn't jump back into the body for
247 // the ret after it's been at EndLoc.
248 EmitRetDbgLoc = false;
249
250 if (CGDebugInfo *DI = getDebugInfo())
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000251 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000252 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000253 }
254
Mike Stump11289f42009-09-09 15:08:12 +0000255 // Emit function epilog (to return).
David Blaikie66e41972015-01-14 07:38:27 +0000256 llvm::DebugLoc Loc = EmitReturnBlock();
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000257
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000258 if (ShouldInstrumentFunction())
259 EmitFunctionInstrumentation("__cyg_profile_func_exit");
Chris Lattner3c77a352010-06-22 00:03:40 +0000260
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000261 // Emit debug descriptor for function end.
David Blaikie66e41972015-01-14 07:38:27 +0000262 if (CGDebugInfo *DI = getDebugInfo())
Devang Patel0884a602010-07-22 22:29:16 +0000263 DI->EmitFunctionEnd(Builder);
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000264
David Blaikie66e41972015-01-14 07:38:27 +0000265 // Reset the debug location to that of the simple 'return' expression, if any
266 // rather than that of the end of the function's scope '}'.
267 ApplyDebugLocation AL(*this, Loc);
Nick Lewycky2d84e842013-10-02 02:29:49 +0000268 EmitFunctionEpilog(*CurFnInfo, EmitRetDbgLoc, EndLoc);
Mike Stump1d849212009-12-07 23:38:24 +0000269 EmitEndEHSpec(CurCodeDecl);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000270
John McCallbd309292010-07-06 01:34:17 +0000271 assert(EHStack.empty() &&
272 "did not remove all scopes from cleanup stack!");
273
Chris Lattner6c4d2552009-10-28 23:59:40 +0000274 // If someone did an indirect goto, emit the indirect goto block at the end of
275 // the function.
276 if (IndirectBranch) {
277 EmitBlock(IndirectBranch->getParent());
278 Builder.ClearInsertionPoint();
279 }
Michael Ilseman686240a2012-12-04 00:29:55 +0000280
Chris Lattnerc48023b2007-12-02 06:32:24 +0000281 // Remove the AllocaInsertPt instruction, which is just a convenience for us.
Chris Lattner2739d2b2009-03-31 22:17:44 +0000282 llvm::Instruction *Ptr = AllocaInsertPt;
Craig Topper8a13c412014-05-21 05:09:00 +0000283 AllocaInsertPt = nullptr;
Chris Lattner2739d2b2009-03-31 22:17:44 +0000284 Ptr->eraseFromParent();
Michael Ilseman686240a2012-12-04 00:29:55 +0000285
Chris Lattner6c4d2552009-10-28 23:59:40 +0000286 // If someone took the address of a label but never did an indirect goto, we
287 // made a zero entry PHI node, which is illegal, zap it now.
288 if (IndirectBranch) {
289 llvm::PHINode *PN = cast<llvm::PHINode>(IndirectBranch->getAddress());
290 if (PN->getNumIncomingValues() == 0) {
291 PN->replaceAllUsesWith(llvm::UndefValue::get(PN->getType()));
292 PN->eraseFromParent();
293 }
294 }
John McCallbd309292010-07-06 01:34:17 +0000295
John McCall8e4c74b2011-08-11 02:22:43 +0000296 EmitIfUsed(*this, EHResumeBlock);
John McCallbd309292010-07-06 01:34:17 +0000297 EmitIfUsed(*this, TerminateLandingPad);
298 EmitIfUsed(*this, TerminateHandler);
299 EmitIfUsed(*this, UnreachableBlock);
John McCall09ae0322010-07-06 23:57:41 +0000300
301 if (CGM.getCodeGenOpts().EmitDeclMetadata)
302 EmitDeclMetadata();
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000303
304 for (SmallVectorImpl<std::pair<llvm::Instruction *, llvm::Value *> >::iterator
305 I = DeferredReplacements.begin(),
306 E = DeferredReplacements.end();
307 I != E; ++I) {
308 I->first->replaceAllUsesWith(I->second);
309 I->first->eraseFromParent();
310 }
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000311}
Chris Lattner308f4312007-05-29 23:50:05 +0000312
Chris Lattner3c77a352010-06-22 00:03:40 +0000313/// ShouldInstrumentFunction - Return true if the current function should be
314/// instrumented with __cyg_profile_func_* calls
315bool CodeGenFunction::ShouldInstrumentFunction() {
316 if (!CGM.getCodeGenOpts().InstrumentFunctions)
317 return false;
Ted Kremenekc249c412011-05-16 23:49:20 +0000318 if (!CurFuncDecl || CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>())
Chris Lattner3c77a352010-06-22 00:03:40 +0000319 return false;
320 return true;
321}
322
323/// EmitFunctionInstrumentation - Emit LLVM code to call the specified
324/// instrumentation function with the current function and the call site, if
325/// function instrumentation is enabled.
326void CodeGenFunction::EmitFunctionInstrumentation(const char *Fn) {
Chris Lattnerb48a2d52010-06-23 05:21:28 +0000327 // void __cyg_profile_func_{enter,exit} (void *this_fn, void *call_site);
Chris Lattnera5f58b02011-07-09 17:41:47 +0000328 llvm::PointerType *PointerTy = Int8PtrTy;
329 llvm::Type *ProfileFuncArgs[] = { PointerTy, PointerTy };
Chris Lattner2192fe52011-07-18 04:24:23 +0000330 llvm::FunctionType *FunctionTy =
Chris Lattnerece04092012-02-07 00:39:47 +0000331 llvm::FunctionType::get(VoidTy, ProfileFuncArgs, false);
Chris Lattner3c77a352010-06-22 00:03:40 +0000332
333 llvm::Constant *F = CGM.CreateRuntimeFunction(FunctionTy, Fn);
334 llvm::CallInst *CallSite = Builder.CreateCall(
Benjamin Kramer8d375ce2011-07-14 17:45:50 +0000335 CGM.getIntrinsic(llvm::Intrinsic::returnaddress),
Chris Lattner5e016ae2010-06-27 07:15:29 +0000336 llvm::ConstantInt::get(Int32Ty, 0),
Chris Lattner3c77a352010-06-22 00:03:40 +0000337 "callsite");
338
John McCall882987f2013-02-28 19:01:20 +0000339 llvm::Value *args[] = {
340 llvm::ConstantExpr::getBitCast(CurFn, PointerTy),
341 CallSite
342 };
343
344 EmitNounwindRuntimeCall(F, args);
Chris Lattner3c77a352010-06-22 00:03:40 +0000345}
346
Roman Divacky178e01602011-02-10 16:52:03 +0000347void CodeGenFunction::EmitMCountInstrumentation() {
Chris Lattnerece04092012-02-07 00:39:47 +0000348 llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
Roman Divacky178e01602011-02-10 16:52:03 +0000349
John McCallc8e01702013-04-16 22:48:15 +0000350 llvm::Constant *MCountFn =
351 CGM.CreateRuntimeFunction(FTy, getTarget().getMCountName());
John McCall882987f2013-02-28 19:01:20 +0000352 EmitNounwindRuntimeCall(MCountFn);
Roman Divacky178e01602011-02-10 16:52:03 +0000353}
354
Tanya Lattner7445ada2012-07-11 23:02:10 +0000355// OpenCL v1.2 s5.6.4.6 allows the compiler to store kernel argument
356// information in the program executable. The argument information stored
357// includes the argument name, its type, the address and access qualifiers used.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000358static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000359 CodeGenModule &CGM, llvm::LLVMContext &Context,
360 SmallVector<llvm::Metadata *, 5> &kernelMDArgs,
361 CGBuilderTy &Builder, ASTContext &ASTCtx) {
Guy Benyeifb36ede2013-03-24 13:58:12 +0000362 // Create MDNodes that represent the kernel arg metadata.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000363 // Each MDNode is a list in the form of "key", N number of values which is
364 // the same number of values as their are kernel arguments.
Michael Ilseman686240a2012-12-04 00:29:55 +0000365
Joey Gouly92a47442014-04-04 13:43:57 +0000366 const PrintingPolicy &Policy = ASTCtx.getPrintingPolicy();
367
Guy Benyeifb36ede2013-03-24 13:58:12 +0000368 // MDNode for the kernel argument address space qualifiers.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000369 SmallVector<llvm::Metadata *, 8> addressQuals;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000370 addressQuals.push_back(llvm::MDString::get(Context, "kernel_arg_addr_space"));
371
372 // MDNode for the kernel argument access qualifiers (images only).
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000373 SmallVector<llvm::Metadata *, 8> accessQuals;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000374 accessQuals.push_back(llvm::MDString::get(Context, "kernel_arg_access_qual"));
375
376 // MDNode for the kernel argument type names.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000377 SmallVector<llvm::Metadata *, 8> argTypeNames;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000378 argTypeNames.push_back(llvm::MDString::get(Context, "kernel_arg_type"));
379
Fraser Cormackdadc3712014-07-30 14:39:53 +0000380 // MDNode for the kernel argument base type names.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000381 SmallVector<llvm::Metadata *, 8> argBaseTypeNames;
Fraser Cormackdadc3712014-07-30 14:39:53 +0000382 argBaseTypeNames.push_back(
383 llvm::MDString::get(Context, "kernel_arg_base_type"));
384
Guy Benyeifb36ede2013-03-24 13:58:12 +0000385 // MDNode for the kernel argument type qualifiers.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000386 SmallVector<llvm::Metadata *, 8> argTypeQuals;
Guy Benyeifb36ede2013-03-24 13:58:12 +0000387 argTypeQuals.push_back(llvm::MDString::get(Context, "kernel_arg_type_qual"));
388
Tanya Lattner7445ada2012-07-11 23:02:10 +0000389 // MDNode for the kernel argument names.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000390 SmallVector<llvm::Metadata *, 8> argNames;
Tanya Lattner7445ada2012-07-11 23:02:10 +0000391 argNames.push_back(llvm::MDString::get(Context, "kernel_arg_name"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000392
Tanya Lattner7445ada2012-07-11 23:02:10 +0000393 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i) {
394 const ParmVarDecl *parm = FD->getParamDecl(i);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000395 QualType ty = parm->getType();
396 std::string typeQuals;
397
398 if (ty->isPointerType()) {
399 QualType pointeeTy = ty->getPointeeType();
400
401 // Get address qualifier.
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000402 addressQuals.push_back(llvm::ConstantAsMetadata::get(Builder.getInt32(
403 ASTCtx.getTargetAddressSpace(pointeeTy.getAddressSpace()))));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000404
405 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000406 std::string typeName =
407 pointeeTy.getUnqualifiedType().getAsString(Policy) + "*";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000408
409 // Turn "unsigned type" to "utype"
410 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000411 if (pointeeTy.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000412 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000413
414 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
415
Fraser Cormackdadc3712014-07-30 14:39:53 +0000416 std::string baseTypeName =
417 pointeeTy.getUnqualifiedType().getCanonicalType().getAsString(
418 Policy) +
419 "*";
420
421 // Turn "unsigned type" to "utype"
422 pos = baseTypeName.find("unsigned");
423 if (pos != std::string::npos)
424 baseTypeName.erase(pos+1, 8);
425
426 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
427
Guy Benyeifb36ede2013-03-24 13:58:12 +0000428 // Get argument type qualifiers:
429 if (ty.isRestrictQualified())
430 typeQuals = "restrict";
431 if (pointeeTy.isConstQualified() ||
432 (pointeeTy.getAddressSpace() == LangAS::opencl_constant))
Benjamin Krameref89ae02013-03-24 16:04:55 +0000433 typeQuals += typeQuals.empty() ? "const" : " const";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000434 if (pointeeTy.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000435 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000436 } else {
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000437 uint32_t AddrSpc = 0;
438 if (ty->isImageType())
439 AddrSpc =
440 CGM.getContext().getTargetAddressSpace(LangAS::opencl_global);
Bob Wilson95a27b02014-02-17 19:20:59 +0000441
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000442 addressQuals.push_back(
443 llvm::ConstantAsMetadata::get(Builder.getInt32(AddrSpc)));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000444
445 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000446 std::string typeName = ty.getUnqualifiedType().getAsString(Policy);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000447
448 // Turn "unsigned type" to "utype"
449 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000450 if (ty.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000451 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000452
453 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
454
Fraser Cormackdadc3712014-07-30 14:39:53 +0000455 std::string baseTypeName =
456 ty.getUnqualifiedType().getCanonicalType().getAsString(Policy);
457
458 // Turn "unsigned type" to "utype"
459 pos = baseTypeName.find("unsigned");
460 if (pos != std::string::npos)
461 baseTypeName.erase(pos+1, 8);
462
463 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
464
Guy Benyeifb36ede2013-03-24 13:58:12 +0000465 // Get argument type qualifiers:
466 if (ty.isConstQualified())
467 typeQuals = "const";
468 if (ty.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000469 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000470 }
Justin Bogner0f066062013-11-22 10:20:40 +0000471
Guy Benyeifb36ede2013-03-24 13:58:12 +0000472 argTypeQuals.push_back(llvm::MDString::get(Context, typeQuals));
473
474 // Get image access qualifier:
475 if (ty->isImageType()) {
Aaron Ballmanc4327992013-12-19 03:09:10 +0000476 const OpenCLImageAccessAttr *A = parm->getAttr<OpenCLImageAccessAttr>();
Aaron Ballman26891332014-01-14 17:41:53 +0000477 if (A && A->isWriteOnly())
Guy Benyeifb36ede2013-03-24 13:58:12 +0000478 accessQuals.push_back(llvm::MDString::get(Context, "write_only"));
479 else
480 accessQuals.push_back(llvm::MDString::get(Context, "read_only"));
Aaron Ballman26891332014-01-14 17:41:53 +0000481 // FIXME: what about read_write?
Guy Benyeifb36ede2013-03-24 13:58:12 +0000482 } else
483 accessQuals.push_back(llvm::MDString::get(Context, "none"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000484
Tanya Lattner7445ada2012-07-11 23:02:10 +0000485 // Get argument name.
486 argNames.push_back(llvm::MDString::get(Context, parm->getName()));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000487 }
Guy Benyeifb36ede2013-03-24 13:58:12 +0000488
489 kernelMDArgs.push_back(llvm::MDNode::get(Context, addressQuals));
490 kernelMDArgs.push_back(llvm::MDNode::get(Context, accessQuals));
491 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeNames));
Fraser Cormackdadc3712014-07-30 14:39:53 +0000492 kernelMDArgs.push_back(llvm::MDNode::get(Context, argBaseTypeNames));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000493 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeQuals));
Sameer Sahasrabuddhec6093fe2014-12-04 05:30:58 +0000494 if (CGM.getCodeGenOpts().EmitOpenCLArgMetadata)
495 kernelMDArgs.push_back(llvm::MDNode::get(Context, argNames));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000496}
497
Michael Ilseman686240a2012-12-04 00:29:55 +0000498void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000499 llvm::Function *Fn)
500{
501 if (!FD->hasAttr<OpenCLKernelAttr>())
502 return;
503
504 llvm::LLVMContext &Context = getLLVMContext();
505
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000506 SmallVector<llvm::Metadata *, 5> kernelMDArgs;
507 kernelMDArgs.push_back(llvm::ConstantAsMetadata::get(Fn));
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000508
Sameer Sahasrabuddhec6093fe2014-12-04 05:30:58 +0000509 GenOpenCLArgMetadata(FD, Fn, CGM, Context, kernelMDArgs, Builder,
510 getContext());
Michael Ilseman686240a2012-12-04 00:29:55 +0000511
Aaron Ballmanc4327992013-12-19 03:09:10 +0000512 if (const VecTypeHintAttr *A = FD->getAttr<VecTypeHintAttr>()) {
513 QualType hintQTy = A->getTypeHint();
Joey Goulyaba589c2013-03-08 09:42:32 +0000514 const ExtVectorType *hintEltQTy = hintQTy->getAs<ExtVectorType>();
515 bool isSignedInteger =
516 hintQTy->isSignedIntegerType() ||
517 (hintEltQTy && hintEltQTy->getElementType()->isSignedIntegerType());
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000518 llvm::Metadata *attrMDArgs[] = {
519 llvm::MDString::get(Context, "vec_type_hint"),
520 llvm::ConstantAsMetadata::get(llvm::UndefValue::get(
521 CGM.getTypes().ConvertType(A->getTypeHint()))),
522 llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
523 llvm::IntegerType::get(Context, 32),
524 llvm::APInt(32, (uint64_t)(isSignedInteger ? 1 : 0))))};
Joey Goulyaba589c2013-03-08 09:42:32 +0000525 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
526 }
527
Aaron Ballmanc4327992013-12-19 03:09:10 +0000528 if (const WorkGroupSizeHintAttr *A = FD->getAttr<WorkGroupSizeHintAttr>()) {
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000529 llvm::Metadata *attrMDArgs[] = {
530 llvm::MDString::get(Context, "work_group_size_hint"),
531 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getXDim())),
532 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getYDim())),
533 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getZDim()))};
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000534 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
535 }
536
Aaron Ballmanc4327992013-12-19 03:09:10 +0000537 if (const ReqdWorkGroupSizeAttr *A = FD->getAttr<ReqdWorkGroupSizeAttr>()) {
Duncan P. N. Exon Smithfb494912014-12-09 18:39:32 +0000538 llvm::Metadata *attrMDArgs[] = {
539 llvm::MDString::get(Context, "reqd_work_group_size"),
540 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getXDim())),
541 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getYDim())),
542 llvm::ConstantAsMetadata::get(Builder.getInt32(A->getZDim()))};
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000543 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
544 }
545
546 llvm::MDNode *kernelMDNode = llvm::MDNode::get(Context, kernelMDArgs);
547 llvm::NamedMDNode *OpenCLKernelMetadata =
548 CGM.getModule().getOrInsertNamedMetadata("opencl.kernels");
549 OpenCLKernelMetadata->addOperand(kernelMDNode);
550}
551
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000552/// Determine whether the function F ends with a return stmt.
553static bool endsWithReturn(const Decl* F) {
554 const Stmt *Body = nullptr;
555 if (auto *FD = dyn_cast_or_null<FunctionDecl>(F))
556 Body = FD->getBody();
557 else if (auto *OMD = dyn_cast_or_null<ObjCMethodDecl>(F))
558 Body = OMD->getBody();
559
560 if (auto *CS = dyn_cast_or_null<CompoundStmt>(Body)) {
561 auto LastStmt = CS->body_rbegin();
562 if (LastStmt != CS->body_rend())
563 return isa<ReturnStmt>(*LastStmt);
564 }
565 return false;
566}
567
John McCalldec348f72013-05-03 07:33:41 +0000568void CodeGenFunction::StartFunction(GlobalDecl GD,
569 QualType RetTy,
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000570 llvm::Function *Fn,
John McCalla738c252011-03-09 04:27:21 +0000571 const CGFunctionInfo &FnInfo,
Daniel Dunbar354d2782008-10-18 18:22:23 +0000572 const FunctionArgList &Args,
Adrian Prantl42d71b92014-04-10 23:21:53 +0000573 SourceLocation Loc,
Tilmann Scheller99cc30c2011-03-02 21:36:49 +0000574 SourceLocation StartLoc) {
David Blaikie8e6c36e2014-10-14 16:43:46 +0000575 assert(!CurFn &&
576 "Do not use a CodeGenFunction object for more than one function");
577
Anders Carlsson73fcc952009-09-11 00:07:24 +0000578 const Decl *D = GD.getDecl();
Michael Ilseman686240a2012-12-04 00:29:55 +0000579
Anders Carlssonf4478e92009-02-09 20:20:56 +0000580 DidCallStackSave = false;
John McCalldec348f72013-05-03 07:33:41 +0000581 CurCodeDecl = D;
Craig Topper8a13c412014-05-21 05:09:00 +0000582 CurFuncDecl = (D ? D->getNonClosureContext() : nullptr);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000583 FnRetTy = RetTy;
Daniel Dunbar9c426522008-07-29 23:18:29 +0000584 CurFn = Fn;
John McCalla738c252011-03-09 04:27:21 +0000585 CurFnInfo = &FnInfo;
Chris Lattner5696e7b2008-06-17 18:05:57 +0000586 assert(CurFn->isDeclaration() && "Function already has body?");
587
Alexey Samsonov1444bb92014-10-17 00:20:19 +0000588 if (CGM.isInSanitizerBlacklist(Fn, Loc))
Alexey Samsonov035462c2014-10-30 19:33:44 +0000589 SanOpts.clear();
Will Dietzf54319c2013-01-18 11:30:38 +0000590
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000591 // Pass inline keyword to optimizer if it appears explicitly on any
Roman Divackydd9bfb22014-01-15 19:07:16 +0000592 // declaration. Also, in the case of -fno-inline attach NoInline
David Majnemer19d7d542014-02-25 10:51:14 +0000593 // attribute to all function that are not marked AlwaysInline.
Roman Divackydd9bfb22014-01-15 19:07:16 +0000594 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
595 if (!CGM.getCodeGenOpts().NoInline) {
Aaron Ballman86c93902014-03-06 23:45:36 +0000596 for (auto RI : FD->redecls())
Chad Rosier883b2572012-03-14 23:32:11 +0000597 if (RI->isInlineSpecified()) {
Bill Wendling207f0532012-12-20 19:27:06 +0000598 Fn->addFnAttr(llvm::Attribute::InlineHint);
Chad Rosier883b2572012-03-14 23:32:11 +0000599 break;
600 }
David Majnemer67e541e1c2014-02-25 09:53:29 +0000601 } else if (!FD->hasAttr<AlwaysInlineAttr>())
Roman Divackydd9bfb22014-01-15 19:07:16 +0000602 Fn->addFnAttr(llvm::Attribute::NoInline);
603 }
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000604
Richard Smith9c6890a2012-11-01 22:30:59 +0000605 if (getLangOpts().OpenCL) {
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000606 // Add metadata for a kernel function.
607 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000608 EmitOpenCLKernelMetadata(FD, Fn);
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000609 }
610
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000611 // If we are checking function types, emit a function type signature as
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000612 // prologue data.
Alexey Samsonovedf99a92014-11-07 22:29:38 +0000613 if (getLangOpts().CPlusPlus && SanOpts.has(SanitizerKind::Function)) {
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000614 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000615 if (llvm::Constant *PrologueSig =
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000616 CGM.getTargetCodeGenInfo().getUBSanFunctionSignature(CGM)) {
617 llvm::Constant *FTRTTIConst =
618 CGM.GetAddrOfRTTIDescriptor(FD->getType(), /*ForEH=*/true);
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000619 llvm::Constant *PrologueStructElems[] = { PrologueSig, FTRTTIConst };
620 llvm::Constant *PrologueStructConst =
621 llvm::ConstantStruct::getAnon(PrologueStructElems, /*Packed=*/true);
622 Fn->setPrologueData(PrologueStructConst);
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000623 }
624 }
625 }
626
Daniel Dunbar75283ff2008-11-11 02:29:29 +0000627 llvm::BasicBlock *EntryBB = createBasicBlock("entry", CurFn);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000628
Chris Lattner5696e7b2008-06-17 18:05:57 +0000629 // Create a marker to make it easy to insert allocas into the entryblock
630 // later. Don't create this with the builder, because we don't want it
631 // folded.
Chris Lattner5e016ae2010-06-27 07:15:29 +0000632 llvm::Value *Undef = llvm::UndefValue::get(Int32Ty);
633 AllocaInsertPt = new llvm::BitCastInst(Undef, Int32Ty, "", EntryBB);
Chris Lattner47640222009-03-22 00:24:14 +0000634 if (Builder.isNamePreserving())
635 AllocaInsertPt->setName("allocapt");
Mike Stump11289f42009-09-09 15:08:12 +0000636
John McCallbd309292010-07-06 01:34:17 +0000637 ReturnBlock = getJumpDestInCurrentScope("return");
Mike Stump11289f42009-09-09 15:08:12 +0000638
Chris Lattner5696e7b2008-06-17 18:05:57 +0000639 Builder.SetInsertPoint(EntryBB);
Mike Stump11289f42009-09-09 15:08:12 +0000640
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000641 // Emit subprogram debug descriptor.
Anders Carlsson63784f42009-02-13 08:11:52 +0000642 if (CGDebugInfo *DI = getDebugInfo()) {
Jordan Rose5c382722013-03-08 21:51:21 +0000643 SmallVector<QualType, 16> ArgTypes;
Eric Christopher4b4beb22011-10-21 23:30:10 +0000644 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
645 i != e; ++i) {
Jordan Rose5c382722013-03-08 21:51:21 +0000646 ArgTypes.push_back((*i)->getType());
Eric Christopher4b4beb22011-10-21 23:30:10 +0000647 }
648
John McCalldb40c7f2010-12-14 08:05:40 +0000649 QualType FnType =
Jordan Rose5c382722013-03-08 21:51:21 +0000650 getContext().getFunctionType(RetTy, ArgTypes,
John McCalldb40c7f2010-12-14 08:05:40 +0000651 FunctionProtoType::ExtProtoInfo());
Adrian Prantl42d71b92014-04-10 23:21:53 +0000652 DI->EmitFunctionStart(GD, Loc, StartLoc, FnType, CurFn, Builder);
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000653 }
654
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000655 if (ShouldInstrumentFunction())
656 EmitFunctionInstrumentation("__cyg_profile_func_enter");
Chris Lattner3c77a352010-06-22 00:03:40 +0000657
Roman Divacky178e01602011-02-10 16:52:03 +0000658 if (CGM.getCodeGenOpts().InstrumentForProfiling)
659 EmitMCountInstrumentation();
660
Eli Friedman4b1942c2009-12-04 02:43:40 +0000661 if (RetTy->isVoidType()) {
662 // Void type; nothing to return.
Craig Topper8a13c412014-05-21 05:09:00 +0000663 ReturnValue = nullptr;
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000664
665 // Count the implicit return.
666 if (!endsWithReturn(D))
667 ++NumReturnExprs;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000668 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
John McCall47fb9502013-03-07 21:37:08 +0000669 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
Eli Friedman4b1942c2009-12-04 02:43:40 +0000670 // Indirect aggregate return; emit returned value directly into sret slot.
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000671 // This reduces code size, and affects correctness in C++.
Reid Kleckner37abaca2014-05-09 22:46:15 +0000672 auto AI = CurFn->arg_begin();
673 if (CurFnInfo->getReturnInfo().isSRetAfterThis())
674 ++AI;
675 ReturnValue = AI;
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000676 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
677 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
678 // Load the sret pointer from the argument struct and return into that.
679 unsigned Idx = CurFnInfo->getReturnInfo().getInAllocaFieldIndex();
680 llvm::Function::arg_iterator EI = CurFn->arg_end();
681 --EI;
682 llvm::Value *Addr = Builder.CreateStructGEP(EI, Idx);
683 ReturnValue = Builder.CreateLoad(Addr, "agg.result");
Eli Friedman4b1942c2009-12-04 02:43:40 +0000684 } else {
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000685 ReturnValue = CreateIRTemp(RetTy, "retval");
John McCall31168b02011-06-15 23:02:42 +0000686
687 // Tell the epilog emitter to autorelease the result. We do this
688 // now so that various specialized functions can suppress it
689 // during their IR-generation.
David Blaikiebbafb8a2012-03-11 07:00:24 +0000690 if (getLangOpts().ObjCAutoRefCount &&
John McCall31168b02011-06-15 23:02:42 +0000691 !CurFnInfo->isReturnsRetained() &&
692 RetTy->isObjCRetainableType())
693 AutoreleaseResult = true;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000694 }
695
Mike Stump1d849212009-12-07 23:38:24 +0000696 EmitStartEHSpec(CurCodeDecl);
John McCall31168b02011-06-15 23:02:42 +0000697
698 PrologueCleanupDepth = EHStack.stable_begin();
Daniel Dunbard931a872009-02-02 22:03:45 +0000699 EmitFunctionProlog(*CurFnInfo, CurFn, Args);
Mike Stump11289f42009-09-09 15:08:12 +0000700
Eli Friedman9fbeba02012-02-11 02:57:39 +0000701 if (D && isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) {
John McCall5d865c322010-08-31 07:33:07 +0000702 CGM.getCXXABI().EmitInstanceFunctionProlog(*this);
Eli Friedman9fbeba02012-02-11 02:57:39 +0000703 const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
704 if (MD->getParent()->isLambda() &&
705 MD->getOverloadedOperator() == OO_Call) {
706 // We're in a lambda; figure out the captures.
707 MD->getParent()->getCaptureFields(LambdaCaptureFields,
708 LambdaThisCaptureField);
709 if (LambdaThisCaptureField) {
710 // If this lambda captures this, load it.
John McCalldec348f72013-05-03 07:33:41 +0000711 LValue ThisLValue = EmitLValueForLambdaField(LambdaThisCaptureField);
Nick Lewycky2d84e842013-10-02 02:29:49 +0000712 CXXThisValue = EmitLoadOfLValue(ThisLValue,
713 SourceLocation()).getScalarVal();
Eli Friedman9fbeba02012-02-11 02:57:39 +0000714 }
Alexey Bataev39c81e22014-08-28 04:28:19 +0000715 for (auto *FD : MD->getParent()->fields()) {
716 if (FD->hasCapturedVLAType()) {
717 auto *ExprArg = EmitLoadOfLValue(EmitLValueForLambdaField(FD),
718 SourceLocation()).getScalarVal();
719 auto VAT = FD->getCapturedVLAType();
720 VLASizeMap[VAT->getSizeExpr()] = ExprArg;
721 }
722 }
Eli Friedman9fbeba02012-02-11 02:57:39 +0000723 } else {
724 // Not in a lambda; just use 'this' from the method.
725 // FIXME: Should we generate a new load for each use of 'this'? The
726 // fast register allocator would be happier...
727 CXXThisValue = CXXABIThisValue;
728 }
729 }
John McCall347132b2010-02-16 22:04:33 +0000730
Anders Carlssonc20879a2008-12-20 21:28:43 +0000731 // If any of the arguments have a variably modified type, make sure to
732 // emit the type size.
733 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
734 i != e; ++i) {
Eli Friedman1f576832012-11-14 22:09:59 +0000735 const VarDecl *VD = *i;
736
737 // Dig out the type as written from ParmVarDecls; it's unclear whether
738 // the standard (C99 6.9.1p10) requires this, but we're following the
739 // precedent set by gcc.
740 QualType Ty;
741 if (const ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(VD))
742 Ty = PVD->getOriginalType();
743 else
744 Ty = VD->getType();
Anders Carlssonc20879a2008-12-20 21:28:43 +0000745
746 if (Ty->isVariablyModifiedType())
John McCall23c29fe2011-06-24 21:55:10 +0000747 EmitVariablyModifiedType(Ty);
Anders Carlssonc20879a2008-12-20 21:28:43 +0000748 }
Eric Christopher7cdf9482011-10-13 21:45:18 +0000749 // Emit a location at the end of the prologue.
750 if (CGDebugInfo *DI = getDebugInfo())
751 DI->EmitLocation(Builder, StartLoc);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000752}
Eli Friedman3d421e12008-08-25 21:31:01 +0000753
Richard Smithb47c36f2013-11-05 09:12:18 +0000754void CodeGenFunction::EmitFunctionBody(FunctionArgList &Args,
755 const Stmt *Body) {
Justin Bogneref512b92014-01-06 22:27:43 +0000756 RegionCounter Cnt = getPGORegionCounter(Body);
757 Cnt.beginRegion(Builder);
Richard Smithb47c36f2013-11-05 09:12:18 +0000758 if (const CompoundStmt *S = dyn_cast<CompoundStmt>(Body))
David Blaikie0a21d0d2013-01-26 22:16:26 +0000759 EmitCompoundStmtWithoutScope(*S);
760 else
Richard Smithb47c36f2013-11-05 09:12:18 +0000761 EmitStmt(Body);
John McCall89b12b32010-02-18 03:17:58 +0000762}
763
Bob Wilsonbf854f02014-02-17 19:21:09 +0000764/// When instrumenting to collect profile data, the counts for some blocks
765/// such as switch cases need to not include the fall-through counts, so
766/// emit a branch around the instrumentation code. When not instrumenting,
767/// this just calls EmitBlock().
768void CodeGenFunction::EmitBlockWithFallThrough(llvm::BasicBlock *BB,
769 RegionCounter &Cnt) {
Craig Topper8a13c412014-05-21 05:09:00 +0000770 llvm::BasicBlock *SkipCountBB = nullptr;
Bob Wilsonbf854f02014-02-17 19:21:09 +0000771 if (HaveInsertPoint() && CGM.getCodeGenOpts().ProfileInstrGenerate) {
772 // When instrumenting for profiling, the fallthrough to certain
773 // statements needs to skip over the instrumentation code so that we
774 // get an accurate count.
775 SkipCountBB = createBasicBlock("skipcount");
776 EmitBranch(SkipCountBB);
777 }
778 EmitBlock(BB);
779 Cnt.beginRegion(Builder, /*AddIncomingFallThrough=*/true);
780 if (SkipCountBB)
781 EmitBlock(SkipCountBB);
782}
783
John McCall8601a752010-08-03 22:46:07 +0000784/// Tries to mark the given function nounwind based on the
785/// non-existence of any throwing calls within it. We believe this is
786/// lightweight enough to do at -O0.
787static void TryMarkNoThrow(llvm::Function *F) {
John McCall59966992010-08-11 22:38:33 +0000788 // LLVM treats 'nounwind' on a function as part of the type, so we
789 // can't do this on functions that can be overwritten.
790 if (F->mayBeOverridden()) return;
791
John McCall8601a752010-08-03 22:46:07 +0000792 for (llvm::Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
793 for (llvm::BasicBlock::iterator
794 BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
Bill Wendlingf0724e82011-09-19 20:31:14 +0000795 if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(&*BI)) {
John McCall8601a752010-08-03 22:46:07 +0000796 if (!Call->doesNotThrow())
797 return;
Bill Wendlingf0724e82011-09-19 20:31:14 +0000798 } else if (isa<llvm::ResumeInst>(&*BI)) {
799 return;
800 }
Bill Wendling73e465e2012-10-10 03:13:20 +0000801 F->setDoesNotThrow();
John McCall8601a752010-08-03 22:46:07 +0000802}
803
Richard Smithb47c36f2013-11-05 09:12:18 +0000804static void EmitSizedDeallocationFunction(CodeGenFunction &CGF,
805 const FunctionDecl *UnsizedDealloc) {
806 // This is a weak discardable definition of the sized deallocation function.
807 CGF.CurFn->setLinkage(llvm::Function::LinkOnceAnyLinkage);
808
809 // Call the unsized deallocation function and forward the first argument
810 // unchanged.
811 llvm::Constant *Unsized = CGF.CGM.GetAddrOfFunction(UnsizedDealloc);
812 CGF.Builder.CreateCall(Unsized, &*CGF.CurFn->arg_begin());
813}
814
John McCalla738c252011-03-09 04:27:21 +0000815void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn,
816 const CGFunctionInfo &FnInfo) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000817 const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
Michael Ilseman686240a2012-12-04 00:29:55 +0000818
Anders Carlsson63784f42009-02-13 08:11:52 +0000819 // Check if we should generate debug info for this function.
David Blaikie92848de2013-08-26 20:33:21 +0000820 if (FD->hasAttr<NoDebugAttr>())
Craig Topper8a13c412014-05-21 05:09:00 +0000821 DebugInfo = nullptr; // disable debug info indefinitely for this function
Mike Stump11289f42009-09-09 15:08:12 +0000822
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000823 FunctionArgList Args;
Alp Toker314cc812014-01-25 16:55:45 +0000824 QualType ResTy = FD->getReturnType();
Mike Stump11289f42009-09-09 15:08:12 +0000825
Mike Stumpbee78dd2009-12-04 23:26:17 +0000826 CurGD = GD;
Reid Kleckner89077a12013-12-17 19:46:40 +0000827 const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD);
828 if (MD && MD->isInstance()) {
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000829 if (CGM.getCXXABI().HasThisReturn(GD))
830 ResTy = MD->getThisType(getContext());
David Majnemer0c0b6d92014-10-31 20:09:12 +0000831 else if (CGM.getCXXABI().hasMostDerivedReturn(GD))
832 ResTy = CGM.getContext().VoidPtrTy;
Reid Kleckner89077a12013-12-17 19:46:40 +0000833 CGM.getCXXABI().buildThisParam(*this, Args);
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000834 }
Alexey Samsonov3551e312014-08-13 20:06:24 +0000835
836 Args.append(FD->param_begin(), FD->param_end());
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000837
Reid Kleckner89077a12013-12-17 19:46:40 +0000838 if (MD && (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)))
839 CGM.getCXXABI().addImplicitStructorParams(*this, ResTy, Args);
840
John McCall89b12b32010-02-18 03:17:58 +0000841 SourceRange BodyRange;
842 if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange();
Adrian Prantldc237b52013-05-16 00:41:26 +0000843 CurEHLocation = BodyRange.getEnd();
Anders Carlsson438cf922009-11-06 02:55:43 +0000844
Adrian Prantl42d71b92014-04-10 23:21:53 +0000845 // Use the location of the start of the function to determine where
846 // the function definition is located. By default use the location
847 // of the declaration as the location for the subprogram. A function
848 // may lack a declaration in the source code if it is created by code
849 // gen. (examples: _GLOBAL__I_a, __cxx_global_array_dtor, thunk).
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000850 SourceLocation Loc = FD->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000851
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000852 // If this is a function specialization then use the pattern body
853 // as the location for the function.
854 if (const FunctionDecl *SpecDecl = FD->getTemplateInstantiationPattern())
855 if (SpecDecl->hasBody(SpecDecl))
856 Loc = SpecDecl->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000857
John McCall89b12b32010-02-18 03:17:58 +0000858 // Emit the standard function prologue.
Adrian Prantl42d71b92014-04-10 23:21:53 +0000859 StartFunction(GD, ResTy, Fn, FnInfo, Args, Loc, BodyRange.getBegin());
Anders Carlsson438cf922009-11-06 02:55:43 +0000860
John McCall89b12b32010-02-18 03:17:58 +0000861 // Generate the body of the function.
Alex Lorenzee024992014-08-04 18:41:51 +0000862 PGO.checkGlobalDecl(GD);
Bob Wilsonda1ebed2014-03-06 04:55:41 +0000863 PGO.assignRegionCounters(GD.getDecl(), CurFn);
John McCallb81884d2010-02-19 09:25:03 +0000864 if (isa<CXXDestructorDecl>(FD))
865 EmitDestructorBody(Args);
866 else if (isa<CXXConstructorDecl>(FD))
867 EmitConstructorBody(Args);
Richard Smith9c6890a2012-11-01 22:30:59 +0000868 else if (getLangOpts().CUDA &&
Peter Collingbournefa4d6032011-10-06 18:51:56 +0000869 !CGM.getCodeGenOpts().CUDAIsDevice &&
870 FD->hasAttr<CUDAGlobalAttr>())
871 CGM.getCUDARuntime().EmitDeviceStubBody(*this, Args);
Eli Friedman5a6d5072012-02-16 01:37:33 +0000872 else if (isa<CXXConversionDecl>(FD) &&
Douglas Gregor355efbb2012-02-17 03:02:34 +0000873 cast<CXXConversionDecl>(FD)->isLambdaToBlockPointerConversion()) {
874 // The lambda conversion to block pointer is special; the semantics can't be
875 // expressed in the AST, so IRGen needs to special-case it.
876 EmitLambdaToBlockPointerBody(Args);
877 } else if (isa<CXXMethodDecl>(FD) &&
878 cast<CXXMethodDecl>(FD)->isLambdaStaticInvoker()) {
Faisal Vali2b391ab2013-09-26 19:54:12 +0000879 // The lambda static invoker function is special, because it forwards or
Douglas Gregor355efbb2012-02-17 03:02:34 +0000880 // clones the body of the function call operator (but is actually static).
881 EmitLambdaStaticInvokeFunction(cast<CXXMethodDecl>(FD));
Lang Hamesbf122742013-02-17 07:22:09 +0000882 } else if (FD->isDefaulted() && isa<CXXMethodDecl>(FD) &&
Nick Lewyckyb39be1f2013-09-10 05:14:39 +0000883 (cast<CXXMethodDecl>(FD)->isCopyAssignmentOperator() ||
884 cast<CXXMethodDecl>(FD)->isMoveAssignmentOperator())) {
Lang Hamesbf122742013-02-17 07:22:09 +0000885 // Implicit copy-assignment gets the same special treatment as implicit
886 // copy-constructors.
887 emitImplicitAssignmentOperatorBody(Args);
Richard Smithb47c36f2013-11-05 09:12:18 +0000888 } else if (Stmt *Body = FD->getBody()) {
889 EmitFunctionBody(Args, Body);
890 } else if (FunctionDecl *UnsizedDealloc =
891 FD->getCorrespondingUnsizedGlobalDeallocationFunction()) {
892 // Global sized deallocation functions get an implicit weak definition if
893 // they don't have an explicit definition.
894 EmitSizedDeallocationFunction(*this, UnsizedDealloc);
895 } else
896 llvm_unreachable("no definition for emitted function");
Anders Carlssonff8cce42010-02-07 19:45:40 +0000897
Richard Smith9f9e5822012-10-04 23:52:29 +0000898 // C++11 [stmt.return]p2:
899 // Flowing off the end of a function [...] results in undefined behavior in
900 // a value-returning function.
901 // C11 6.9.1p12:
902 // If the '}' that terminates a function is reached, and the value of the
903 // function call is used by the caller, the behavior is undefined.
Reid Kleckner9b3e3df2014-09-04 20:04:38 +0000904 if (getLangOpts().CPlusPlus && !FD->hasImplicitReturnZero() && !SawAsmBlock &&
Alp Toker314cc812014-01-25 16:55:45 +0000905 !FD->getReturnType()->isVoidType() && Builder.GetInsertBlock()) {
Alexey Samsonovedf99a92014-11-07 22:29:38 +0000906 if (SanOpts.has(SanitizerKind::Return)) {
Alexey Samsonov24cad992014-07-17 18:46:27 +0000907 SanitizerScope SanScope(this);
Alexey Samsonove396bfc2014-11-11 22:03:54 +0000908 llvm::Value *IsFalse = Builder.getFalse();
909 EmitCheck(std::make_pair(IsFalse, SanitizerKind::Return),
910 "missing_return", EmitCheckSourceLocation(FD->getLocation()),
911 None);
Alexey Samsonov24cad992014-07-17 18:46:27 +0000912 } else if (CGM.getCodeGenOpts().OptimizationLevel == 0)
Richard Smith6b4ebcc2012-10-15 00:23:07 +0000913 Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::trap));
Richard Smith9f9e5822012-10-04 23:52:29 +0000914 Builder.CreateUnreachable();
915 Builder.ClearInsertionPoint();
916 }
917
John McCall89b12b32010-02-18 03:17:58 +0000918 // Emit the standard function epilogue.
919 FinishFunction(BodyRange.getEnd());
John McCall8601a752010-08-03 22:46:07 +0000920
921 // If we haven't marked the function nothrow through other means, do
922 // a quick pass now to see if we can.
923 if (!CurFn->doesNotThrow())
924 TryMarkNoThrow(CurFn);
Chris Lattner5696e7b2008-06-17 18:05:57 +0000925}
926
Chris Lattner5b1964b2008-11-11 07:41:27 +0000927/// ContainsLabel - Return true if the statement contains a label in it. If
928/// this statement is not executed normally, it not containing a label means
929/// that we can just remove the code.
930bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) {
931 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000932 if (!S) return false;
Mike Stump11289f42009-09-09 15:08:12 +0000933
Chris Lattner5b1964b2008-11-11 07:41:27 +0000934 // If this is a label, we have to emit the code, consider something like:
935 // if (0) { ... foo: bar(); } goto foo;
Chris Lattner29911cc2011-02-28 00:18:40 +0000936 //
937 // TODO: If anyone cared, we could track __label__'s, since we know that you
938 // can't jump to one from outside their declared region.
Chris Lattner5b1964b2008-11-11 07:41:27 +0000939 if (isa<LabelStmt>(S))
940 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000941
Chris Lattner5b1964b2008-11-11 07:41:27 +0000942 // If this is a case/default statement, and we haven't seen a switch, we have
943 // to emit the code.
944 if (isa<SwitchCase>(S) && !IgnoreCaseStmts)
945 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000946
Chris Lattner5b1964b2008-11-11 07:41:27 +0000947 // If this is a switch statement, we want to ignore cases below it.
948 if (isa<SwitchStmt>(S))
949 IgnoreCaseStmts = true;
Mike Stump11289f42009-09-09 15:08:12 +0000950
Chris Lattner5b1964b2008-11-11 07:41:27 +0000951 // Scan subexpressions for verboten labels.
John McCall8322c3a2011-02-13 04:07:26 +0000952 for (Stmt::const_child_range I = S->children(); I; ++I)
Chris Lattner5b1964b2008-11-11 07:41:27 +0000953 if (ContainsLabel(*I, IgnoreCaseStmts))
954 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000955
Chris Lattner5b1964b2008-11-11 07:41:27 +0000956 return false;
957}
958
Chris Lattner29911cc2011-02-28 00:18:40 +0000959/// containsBreak - Return true if the statement contains a break out of it.
960/// If the statement (recursively) contains a switch or loop with a break
961/// inside of it, this is fine.
962bool CodeGenFunction::containsBreak(const Stmt *S) {
963 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000964 if (!S) return false;
Chris Lattner29911cc2011-02-28 00:18:40 +0000965
966 // If this is a switch or loop that defines its own break scope, then we can
967 // include it and anything inside of it.
968 if (isa<SwitchStmt>(S) || isa<WhileStmt>(S) || isa<DoStmt>(S) ||
969 isa<ForStmt>(S))
Chris Lattner30db8282011-02-28 00:42:31 +0000970 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000971
Chris Lattner30db8282011-02-28 00:42:31 +0000972 if (isa<BreakStmt>(S))
Chris Lattner29911cc2011-02-28 00:18:40 +0000973 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000974
Chris Lattner29911cc2011-02-28 00:18:40 +0000975 // Scan subexpressions for verboten breaks.
976 for (Stmt::const_child_range I = S->children(); I; ++I)
977 if (containsBreak(*I))
978 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000979
Chris Lattner29911cc2011-02-28 00:18:40 +0000980 return false;
981}
982
Chris Lattnercd439292008-11-12 08:04:58 +0000983
Chris Lattner41c6ab52011-02-27 23:02:32 +0000984/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
985/// to a constant, or if it does but contains a label, return false. If it
986/// constant folds return true and set the boolean result in Result.
987bool CodeGenFunction::ConstantFoldsToSimpleInteger(const Expr *Cond,
988 bool &ResultBool) {
Richard Trieuc320c742012-07-23 20:21:35 +0000989 llvm::APSInt ResultInt;
Chris Lattner29911cc2011-02-28 00:18:40 +0000990 if (!ConstantFoldsToSimpleInteger(Cond, ResultInt))
991 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000992
Chris Lattner29911cc2011-02-28 00:18:40 +0000993 ResultBool = ResultInt.getBoolValue();
994 return true;
995}
996
997/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
998/// to a constant, or if it does but contains a label, return false. If it
999/// constant folds return true and set the folded value.
1000bool CodeGenFunction::
Richard Trieuc320c742012-07-23 20:21:35 +00001001ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &ResultInt) {
Daniel Dunbarf32443c2008-11-12 22:37:10 +00001002 // FIXME: Rename and handle conversion of other evaluatable things
1003 // to bool.
Richard Smith5fab0c92011-12-28 19:48:30 +00001004 llvm::APSInt Int;
1005 if (!Cond->EvaluateAsInt(Int, getContext()))
Chris Lattner41c6ab52011-02-27 23:02:32 +00001006 return false; // Not foldable, not integer or not fully evaluatable.
Richard Smith5fab0c92011-12-28 19:48:30 +00001007
Chris Lattnercd439292008-11-12 08:04:58 +00001008 if (CodeGenFunction::ContainsLabel(Cond))
Chris Lattner41c6ab52011-02-27 23:02:32 +00001009 return false; // Contains a label.
Richard Smith5fab0c92011-12-28 19:48:30 +00001010
1011 ResultInt = Int;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001012 return true;
Chris Lattnercd439292008-11-12 08:04:58 +00001013}
1014
1015
Chris Lattner29911cc2011-02-28 00:18:40 +00001016
Chris Lattnercd439292008-11-12 08:04:58 +00001017/// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if
1018/// statement) to the specified blocks. Based on the condition, this might try
1019/// to simplify the codegen of the conditional based on the branch.
1020///
1021void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
1022 llvm::BasicBlock *TrueBlock,
Justin Bogneref512b92014-01-06 22:27:43 +00001023 llvm::BasicBlock *FalseBlock,
1024 uint64_t TrueCount) {
Peter Collingbourne91147592011-04-15 00:35:48 +00001025 Cond = Cond->IgnoreParens();
Mike Stump11289f42009-09-09 15:08:12 +00001026
Chris Lattnercd439292008-11-12 08:04:58 +00001027 if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) {
Justin Bogneref512b92014-01-06 22:27:43 +00001028
Chris Lattnercd439292008-11-12 08:04:58 +00001029 // Handle X && Y in a condition.
John McCalle3027922010-08-25 11:45:40 +00001030 if (CondBOp->getOpcode() == BO_LAnd) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001031 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1032
Chris Lattnercd439292008-11-12 08:04:58 +00001033 // If we have "1 && X", simplify the code. "0 && X" would have constant
1034 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001035 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001036 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1037 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001038 // br(1 && X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001039 Cnt.beginRegion(Builder);
1040 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1041 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001042 }
Mike Stump11289f42009-09-09 15:08:12 +00001043
Chris Lattnercd439292008-11-12 08:04:58 +00001044 // If we have "X && 1", simplify the code to use an uncond branch.
1045 // "X && 0" would have been constant folded to 0.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001046 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1047 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001048 // br(X && 1) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001049 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1050 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001051 }
Mike Stump11289f42009-09-09 15:08:12 +00001052
Chris Lattnercd439292008-11-12 08:04:58 +00001053 // Emit the LHS as a conditional. If the LHS conditional is false, we
1054 // want to jump to the FalseBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001055 llvm::BasicBlock *LHSTrue = createBasicBlock("land.lhs.true");
Justin Bogneref512b92014-01-06 22:27:43 +00001056 // The counter tells us how often we evaluate RHS, and all of TrueCount
1057 // can be propagated to that branch.
1058 uint64_t RHSCount = Cnt.getCount();
John McCallce1de612011-01-26 04:00:11 +00001059
1060 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001061 EmitBranchOnBoolExpr(CondBOp->getLHS(), LHSTrue, FalseBlock, RHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001062 EmitBlock(LHSTrue);
Mike Stump11289f42009-09-09 15:08:12 +00001063
Anders Carlsson60ddba62010-01-24 00:20:05 +00001064 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001065 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001066 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001067 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, TrueCount);
John McCallce1de612011-01-26 04:00:11 +00001068 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001069
Chris Lattnercd439292008-11-12 08:04:58 +00001070 return;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001071 }
Michael Ilseman686240a2012-12-04 00:29:55 +00001072
Chris Lattner41c6ab52011-02-27 23:02:32 +00001073 if (CondBOp->getOpcode() == BO_LOr) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001074 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1075
Chris Lattnercd439292008-11-12 08:04:58 +00001076 // If we have "0 || X", simplify the code. "1 || X" would have constant
1077 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001078 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001079 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1080 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001081 // br(0 || X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001082 Cnt.beginRegion(Builder);
1083 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1084 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001085 }
Mike Stump11289f42009-09-09 15:08:12 +00001086
Chris Lattnercd439292008-11-12 08:04:58 +00001087 // If we have "X || 0", simplify the code to use an uncond branch.
1088 // "X || 1" would have been constant folded to 1.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001089 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1090 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001091 // br(X || 0) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001092 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1093 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001094 }
Mike Stump11289f42009-09-09 15:08:12 +00001095
Chris Lattnercd439292008-11-12 08:04:58 +00001096 // Emit the LHS as a conditional. If the LHS conditional is true, we
1097 // want to jump to the TrueBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001098 llvm::BasicBlock *LHSFalse = createBasicBlock("lor.lhs.false");
Justin Bogneref512b92014-01-06 22:27:43 +00001099 // We have the count for entry to the RHS and for the whole expression
1100 // being true, so we can divy up True count between the short circuit and
1101 // the RHS.
Justin Bognerbe614c72014-01-23 02:54:30 +00001102 uint64_t LHSCount = Cnt.getParentCount() - Cnt.getCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001103 uint64_t RHSCount = TrueCount - LHSCount;
John McCallce1de612011-01-26 04:00:11 +00001104
1105 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001106 EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, LHSFalse, LHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001107 EmitBlock(LHSFalse);
Mike Stump11289f42009-09-09 15:08:12 +00001108
Anders Carlsson60ddba62010-01-24 00:20:05 +00001109 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001110 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001111 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001112 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, RHSCount);
1113
John McCallce1de612011-01-26 04:00:11 +00001114 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001115
Chris Lattnercd439292008-11-12 08:04:58 +00001116 return;
1117 }
Chris Lattnerd9537732008-11-12 08:13:36 +00001118 }
Mike Stump11289f42009-09-09 15:08:12 +00001119
Chris Lattnerd9537732008-11-12 08:13:36 +00001120 if (const UnaryOperator *CondUOp = dyn_cast<UnaryOperator>(Cond)) {
1121 // br(!x, t, f) -> br(x, f, t)
Justin Bogneref512b92014-01-06 22:27:43 +00001122 if (CondUOp->getOpcode() == UO_LNot) {
1123 // Negate the count.
1124 uint64_t FalseCount = PGO.getCurrentRegionCount() - TrueCount;
1125 // Negate the condition and swap the destination blocks.
1126 return EmitBranchOnBoolExpr(CondUOp->getSubExpr(), FalseBlock, TrueBlock,
1127 FalseCount);
1128 }
Chris Lattnercd439292008-11-12 08:04:58 +00001129 }
Mike Stump11289f42009-09-09 15:08:12 +00001130
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001131 if (const ConditionalOperator *CondOp = dyn_cast<ConditionalOperator>(Cond)) {
Eli Friedman248f8982012-02-14 03:54:45 +00001132 // br(c ? x : y, t, f) -> br(c, br(x, t, f), br(y, t, f))
1133 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1134 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001135
Justin Bogneref512b92014-01-06 22:27:43 +00001136 RegionCounter Cnt = getPGORegionCounter(CondOp);
Eli Friedman248f8982012-02-14 03:54:45 +00001137 ConditionalEvaluation cond(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001138 EmitBranchOnBoolExpr(CondOp->getCond(), LHSBlock, RHSBlock, Cnt.getCount());
1139
1140 // When computing PGO branch weights, we only know the overall count for
1141 // the true block. This code is essentially doing tail duplication of the
1142 // naive code-gen, introducing new edges for which counts are not
1143 // available. Divide the counts proportionally between the LHS and RHS of
1144 // the conditional operator.
1145 uint64_t LHSScaledTrueCount = 0;
1146 if (TrueCount) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001147 double LHSRatio = Cnt.getCount() / (double) Cnt.getParentCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001148 LHSScaledTrueCount = TrueCount * LHSRatio;
1149 }
John McCallce1de612011-01-26 04:00:11 +00001150
Eli Friedman248f8982012-02-14 03:54:45 +00001151 cond.begin(*this);
1152 EmitBlock(LHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001153 Cnt.beginRegion(Builder);
1154 EmitBranchOnBoolExpr(CondOp->getLHS(), TrueBlock, FalseBlock,
1155 LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001156 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001157
Eli Friedman248f8982012-02-14 03:54:45 +00001158 cond.begin(*this);
1159 EmitBlock(RHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001160 EmitBranchOnBoolExpr(CondOp->getRHS(), TrueBlock, FalseBlock,
1161 TrueCount - LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001162 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001163
Eli Friedman248f8982012-02-14 03:54:45 +00001164 return;
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001165 }
1166
Richard Smithea852322013-05-07 21:53:22 +00001167 if (const CXXThrowExpr *Throw = dyn_cast<CXXThrowExpr>(Cond)) {
1168 // Conditional operator handling can give us a throw expression as a
1169 // condition for a case like:
1170 // br(c ? throw x : y, t, f) -> br(c, br(throw x, t, f), br(y, t, f)
1171 // Fold this to:
1172 // br(c, throw x, br(y, t, f))
1173 EmitCXXThrowExpr(Throw, /*KeepInsertionPoint*/false);
1174 return;
1175 }
1176
Justin Bogneref512b92014-01-06 22:27:43 +00001177 // Create branch weights based on the number of times we get here and the
1178 // number of times the condition should be true.
Bob Wilsonbf854f02014-02-17 19:21:09 +00001179 uint64_t CurrentCount = std::max(PGO.getCurrentRegionCount(), TrueCount);
Justin Bogneref512b92014-01-06 22:27:43 +00001180 llvm::MDNode *Weights = PGO.createBranchWeights(TrueCount,
1181 CurrentCount - TrueCount);
1182
Chris Lattnercd439292008-11-12 08:04:58 +00001183 // Emit the code with the fully general case.
1184 llvm::Value *CondV = EvaluateExprAsBool(Cond);
Justin Bogneref512b92014-01-06 22:27:43 +00001185 Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
Chris Lattnercd439292008-11-12 08:04:58 +00001186}
1187
Daniel Dunbara7c8cf62008-08-16 00:56:44 +00001188/// ErrorUnsupported - Print out an error that codegen doesn't support the
Chris Lattnerfc944342007-12-02 01:43:38 +00001189/// specified stmt yet.
David Blaikie4a9ec7b2013-08-19 21:02:26 +00001190void CodeGenFunction::ErrorUnsupported(const Stmt *S, const char *Type) {
1191 CGM.ErrorUnsupported(S, Type);
Chris Lattnerfc944342007-12-02 01:43:38 +00001192}
1193
John McCall2725aa12011-02-01 21:35:06 +00001194/// emitNonZeroVLAInit - Emit the "zero" initialization of a
1195/// variable-length array whose elements have a non-zero bit-pattern.
1196///
James Dennettbe302452012-06-15 22:10:14 +00001197/// \param baseType the inner-most element type of the array
John McCall2725aa12011-02-01 21:35:06 +00001198/// \param src - a char* pointing to the bit-pattern for a single
1199/// base element of the array
1200/// \param sizeInChars - the total size of the VLA, in chars
John McCall2725aa12011-02-01 21:35:06 +00001201static void emitNonZeroVLAInit(CodeGenFunction &CGF, QualType baseType,
Michael Ilseman686240a2012-12-04 00:29:55 +00001202 llvm::Value *dest, llvm::Value *src,
John McCall2725aa12011-02-01 21:35:06 +00001203 llvm::Value *sizeInChars) {
1204 std::pair<CharUnits,CharUnits> baseSizeAndAlign
1205 = CGF.getContext().getTypeInfoInChars(baseType);
1206
1207 CGBuilderTy &Builder = CGF.Builder;
1208
1209 llvm::Value *baseSizeInChars
1210 = llvm::ConstantInt::get(CGF.IntPtrTy, baseSizeAndAlign.first.getQuantity());
1211
Chris Lattner2192fe52011-07-18 04:24:23 +00001212 llvm::Type *i8p = Builder.getInt8PtrTy();
John McCall2725aa12011-02-01 21:35:06 +00001213
1214 llvm::Value *begin = Builder.CreateBitCast(dest, i8p, "vla.begin");
1215 llvm::Value *end = Builder.CreateInBoundsGEP(dest, sizeInChars, "vla.end");
1216
1217 llvm::BasicBlock *originBB = CGF.Builder.GetInsertBlock();
1218 llvm::BasicBlock *loopBB = CGF.createBasicBlock("vla-init.loop");
1219 llvm::BasicBlock *contBB = CGF.createBasicBlock("vla-init.cont");
1220
1221 // Make a loop over the VLA. C99 guarantees that the VLA element
1222 // count must be nonzero.
1223 CGF.EmitBlock(loopBB);
1224
Jay Foad20c0f022011-03-30 11:28:58 +00001225 llvm::PHINode *cur = Builder.CreatePHI(i8p, 2, "vla.cur");
John McCall2725aa12011-02-01 21:35:06 +00001226 cur->addIncoming(begin, originBB);
1227
1228 // memcpy the individual element bit-pattern.
1229 Builder.CreateMemCpy(cur, src, baseSizeInChars,
1230 baseSizeAndAlign.second.getQuantity(),
1231 /*volatile*/ false);
1232
1233 // Go to the next element.
1234 llvm::Value *next = Builder.CreateConstInBoundsGEP1_32(cur, 1, "vla.next");
1235
1236 // Leave if that's the end of the VLA.
1237 llvm::Value *done = Builder.CreateICmpEQ(next, end, "vla-init.isdone");
1238 Builder.CreateCondBr(done, contBB, loopBB);
1239 cur->addIncoming(next, loopBB);
1240
1241 CGF.EmitBlock(contBB);
Michael Ilseman686240a2012-12-04 00:29:55 +00001242}
John McCall2725aa12011-02-01 21:35:06 +00001243
Anders Carlssonc0964b62010-05-22 17:35:42 +00001244void
1245CodeGenFunction::EmitNullInitialization(llvm::Value *DestPtr, QualType Ty) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001246 // Ignore empty classes in C++.
Richard Smith9c6890a2012-11-01 22:30:59 +00001247 if (getLangOpts().CPlusPlus) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001248 if (const RecordType *RT = Ty->getAs<RecordType>()) {
1249 if (cast<CXXRecordDecl>(RT->getDecl())->isEmpty())
1250 return;
1251 }
1252 }
John McCall7cd1d972010-08-07 08:21:30 +00001253
1254 // Cast the dest ptr to the appropriate i8 pointer type.
1255 unsigned DestAS =
1256 cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
Chris Lattner2192fe52011-07-18 04:24:23 +00001257 llvm::Type *BP = Builder.getInt8PtrTy(DestAS);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001258 if (DestPtr->getType() != BP)
Benjamin Kramer76399eb2011-09-27 21:06:10 +00001259 DestPtr = Builder.CreateBitCast(DestPtr, BP);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001260
1261 // Get size and alignment info for this aggregate.
Michael Ilseman686240a2012-12-04 00:29:55 +00001262 std::pair<CharUnits, CharUnits> TypeInfo =
Ken Dyckc5c416f2011-04-22 17:51:05 +00001263 getContext().getTypeInfoInChars(Ty);
1264 CharUnits Size = TypeInfo.first;
1265 CharUnits Align = TypeInfo.second;
Anders Carlsson2e744e82008-08-30 19:51:14 +00001266
John McCalla08ffd22011-01-14 10:37:58 +00001267 llvm::Value *SizeVal;
John McCall2725aa12011-02-01 21:35:06 +00001268 const VariableArrayType *vla;
Mike Stump11289f42009-09-09 15:08:12 +00001269
John McCalla08ffd22011-01-14 10:37:58 +00001270 // Don't bother emitting a zero-byte memset.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001271 if (Size.isZero()) {
John McCalla08ffd22011-01-14 10:37:58 +00001272 // But note that getTypeInfo returns 0 for a VLA.
1273 if (const VariableArrayType *vlaType =
1274 dyn_cast_or_null<VariableArrayType>(
1275 getContext().getAsArrayType(Ty))) {
John McCall23c29fe2011-06-24 21:55:10 +00001276 QualType eltType;
1277 llvm::Value *numElts;
Benjamin Kramer867ea1d2014-03-02 13:01:17 +00001278 std::tie(numElts, eltType) = getVLASize(vlaType);
John McCall23c29fe2011-06-24 21:55:10 +00001279
1280 SizeVal = numElts;
1281 CharUnits eltSize = getContext().getTypeSizeInChars(eltType);
1282 if (!eltSize.isOne())
1283 SizeVal = Builder.CreateNUWMul(SizeVal, CGM.getSize(eltSize));
John McCall2725aa12011-02-01 21:35:06 +00001284 vla = vlaType;
John McCalla08ffd22011-01-14 10:37:58 +00001285 } else {
1286 return;
1287 }
1288 } else {
John McCall23c29fe2011-06-24 21:55:10 +00001289 SizeVal = CGM.getSize(Size);
Craig Topper8a13c412014-05-21 05:09:00 +00001290 vla = nullptr;
John McCalla08ffd22011-01-14 10:37:58 +00001291 }
John McCall7cd1d972010-08-07 08:21:30 +00001292
1293 // If the type contains a pointer to data member we can't memset it to zero.
1294 // Instead, create a null constant and copy it to the destination.
John McCall2725aa12011-02-01 21:35:06 +00001295 // TODO: there are other patterns besides zero that we can usefully memset,
1296 // like -1, which happens to be the pattern used by member-pointers.
John McCall614dbdc2010-08-22 21:01:12 +00001297 if (!CGM.getTypes().isZeroInitializable(Ty)) {
John McCall2725aa12011-02-01 21:35:06 +00001298 // For a VLA, emit a single element, then splat that over the VLA.
1299 if (vla) Ty = getContext().getBaseElementType(vla);
John McCalla08ffd22011-01-14 10:37:58 +00001300
John McCall7cd1d972010-08-07 08:21:30 +00001301 llvm::Constant *NullConstant = CGM.EmitNullConstant(Ty);
1302
Michael Ilseman686240a2012-12-04 00:29:55 +00001303 llvm::GlobalVariable *NullVariable =
John McCall7cd1d972010-08-07 08:21:30 +00001304 new llvm::GlobalVariable(CGM.getModule(), NullConstant->getType(),
Michael Ilseman686240a2012-12-04 00:29:55 +00001305 /*isConstant=*/true,
John McCall7cd1d972010-08-07 08:21:30 +00001306 llvm::GlobalVariable::PrivateLinkage,
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001307 NullConstant, Twine());
John McCall7cd1d972010-08-07 08:21:30 +00001308 llvm::Value *SrcPtr =
1309 Builder.CreateBitCast(NullVariable, Builder.getInt8PtrTy());
1310
John McCall2725aa12011-02-01 21:35:06 +00001311 if (vla) return emitNonZeroVLAInit(*this, Ty, DestPtr, SrcPtr, SizeVal);
1312
John McCall7cd1d972010-08-07 08:21:30 +00001313 // Get and call the appropriate llvm.memcpy overload.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001314 Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align.getQuantity(), false);
John McCall7cd1d972010-08-07 08:21:30 +00001315 return;
Michael Ilseman686240a2012-12-04 00:29:55 +00001316 }
1317
John McCall7cd1d972010-08-07 08:21:30 +00001318 // Otherwise, just memset the whole thing to zero. This is legal
1319 // because in LLVM, all default initializers (other than the ones we just
1320 // handled above) are guaranteed to have a bit pattern of all zeros.
Michael Ilseman686240a2012-12-04 00:29:55 +00001321 Builder.CreateMemSet(DestPtr, Builder.getInt8(0), SizeVal,
Ken Dyckc5c416f2011-04-22 17:51:05 +00001322 Align.getQuantity(), false);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001323}
1324
Chris Lattnerc8e630e2011-02-17 07:39:24 +00001325llvm::BlockAddress *CodeGenFunction::GetAddrOfLabel(const LabelDecl *L) {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001326 // Make sure that there is a block for the indirect goto.
Craig Topper8a13c412014-05-21 05:09:00 +00001327 if (!IndirectBranch)
Chris Lattner6c4d2552009-10-28 23:59:40 +00001328 GetIndirectGotoBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001329
John McCallad5d61e2010-07-23 21:56:41 +00001330 llvm::BasicBlock *BB = getJumpDestForLabel(L).getBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001331
Chris Lattner6c4d2552009-10-28 23:59:40 +00001332 // Make sure the indirect branch includes all of the address-taken blocks.
1333 IndirectBranch->addDestination(BB);
1334 return llvm::BlockAddress::get(CurFn, BB);
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001335}
1336
1337llvm::BasicBlock *CodeGenFunction::GetIndirectGotoBlock() {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001338 // If we already made the indirect branch for indirect goto, return its block.
1339 if (IndirectBranch) return IndirectBranch->getParent();
Michael Ilseman686240a2012-12-04 00:29:55 +00001340
Chris Lattner6c4d2552009-10-28 23:59:40 +00001341 CGBuilderTy TmpBuilder(createBasicBlock("indirectgoto"));
Michael Ilseman686240a2012-12-04 00:29:55 +00001342
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001343 // Create the PHI node that indirect gotos will add entries to.
Jay Foad20c0f022011-03-30 11:28:58 +00001344 llvm::Value *DestVal = TmpBuilder.CreatePHI(Int8PtrTy, 0,
1345 "indirect.goto.dest");
Michael Ilseman686240a2012-12-04 00:29:55 +00001346
Chris Lattner6c4d2552009-10-28 23:59:40 +00001347 // Create the indirect branch instruction.
1348 IndirectBranch = TmpBuilder.CreateIndirectBr(DestVal);
1349 return IndirectBranch->getParent();
Daniel Dunbar88402ce2008-08-04 16:51:22 +00001350}
Anders Carlsson13abd7e2008-11-04 05:30:00 +00001351
John McCall82fe67b2011-07-09 01:37:26 +00001352/// Computes the length of an array in elements, as well as the base
1353/// element type and a properly-typed first element pointer.
1354llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType,
1355 QualType &baseType,
1356 llvm::Value *&addr) {
1357 const ArrayType *arrayType = origArrayType;
1358
1359 // If it's a VLA, we have to load the stored size. Note that
1360 // this is the size of the VLA in bytes, not its size in elements.
Craig Topper8a13c412014-05-21 05:09:00 +00001361 llvm::Value *numVLAElements = nullptr;
John McCall82fe67b2011-07-09 01:37:26 +00001362 if (isa<VariableArrayType>(arrayType)) {
1363 numVLAElements = getVLASize(cast<VariableArrayType>(arrayType)).first;
1364
1365 // Walk into all VLAs. This doesn't require changes to addr,
1366 // which has type T* where T is the first non-VLA element type.
1367 do {
1368 QualType elementType = arrayType->getElementType();
1369 arrayType = getContext().getAsArrayType(elementType);
1370
1371 // If we only have VLA components, 'addr' requires no adjustment.
1372 if (!arrayType) {
1373 baseType = elementType;
1374 return numVLAElements;
1375 }
1376 } while (isa<VariableArrayType>(arrayType));
1377
1378 // We get out here only if we find a constant array type
1379 // inside the VLA.
1380 }
1381
1382 // We have some number of constant-length arrays, so addr should
1383 // have LLVM type [M x [N x [...]]]*. Build a GEP that walks
1384 // down to the first element of addr.
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001385 SmallVector<llvm::Value*, 8> gepIndices;
John McCall82fe67b2011-07-09 01:37:26 +00001386
1387 // GEP down to the array type.
1388 llvm::ConstantInt *zero = Builder.getInt32(0);
1389 gepIndices.push_back(zero);
1390
John McCall82fe67b2011-07-09 01:37:26 +00001391 uint64_t countFromCLAs = 1;
Richard Smithf3c37e82012-04-22 05:51:36 +00001392 QualType eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001393
Chris Lattner2192fe52011-07-18 04:24:23 +00001394 llvm::ArrayType *llvmArrayType =
Richard Smithf3c37e82012-04-22 05:51:36 +00001395 dyn_cast<llvm::ArrayType>(
John McCall82fe67b2011-07-09 01:37:26 +00001396 cast<llvm::PointerType>(addr->getType())->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001397 while (llvmArrayType) {
John McCall82fe67b2011-07-09 01:37:26 +00001398 assert(isa<ConstantArrayType>(arrayType));
1399 assert(cast<ConstantArrayType>(arrayType)->getSize().getZExtValue()
1400 == llvmArrayType->getNumElements());
1401
1402 gepIndices.push_back(zero);
1403 countFromCLAs *= llvmArrayType->getNumElements();
Richard Smithf3c37e82012-04-22 05:51:36 +00001404 eltType = arrayType->getElementType();
John McCall82fe67b2011-07-09 01:37:26 +00001405
1406 llvmArrayType =
1407 dyn_cast<llvm::ArrayType>(llvmArrayType->getElementType());
John McCall82fe67b2011-07-09 01:37:26 +00001408 arrayType = getContext().getAsArrayType(arrayType->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001409 assert((!llvmArrayType || arrayType) &&
1410 "LLVM and Clang types are out-of-synch");
John McCall82fe67b2011-07-09 01:37:26 +00001411 }
1412
Richard Smithf3c37e82012-04-22 05:51:36 +00001413 if (arrayType) {
1414 // From this point onwards, the Clang array type has been emitted
1415 // as some other type (probably a packed struct). Compute the array
1416 // size, and just emit the 'begin' expression as a bitcast.
1417 while (arrayType) {
1418 countFromCLAs *=
1419 cast<ConstantArrayType>(arrayType)->getSize().getZExtValue();
1420 eltType = arrayType->getElementType();
1421 arrayType = getContext().getAsArrayType(eltType);
1422 }
John McCall82fe67b2011-07-09 01:37:26 +00001423
Micah Villmowea2fea22012-10-25 15:39:14 +00001424 unsigned AddressSpace = addr->getType()->getPointerAddressSpace();
Richard Smithf3c37e82012-04-22 05:51:36 +00001425 llvm::Type *BaseType = ConvertType(eltType)->getPointerTo(AddressSpace);
1426 addr = Builder.CreateBitCast(addr, BaseType, "array.begin");
1427 } else {
1428 // Create the actual GEP.
1429 addr = Builder.CreateInBoundsGEP(addr, gepIndices, "array.begin");
1430 }
1431
1432 baseType = eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001433
1434 llvm::Value *numElements
1435 = llvm::ConstantInt::get(SizeTy, countFromCLAs);
1436
1437 // If we had any VLA dimensions, factor them in.
1438 if (numVLAElements)
1439 numElements = Builder.CreateNUWMul(numVLAElements, numElements);
1440
1441 return numElements;
1442}
1443
John McCall23c29fe2011-06-24 21:55:10 +00001444std::pair<llvm::Value*, QualType>
1445CodeGenFunction::getVLASize(QualType type) {
1446 const VariableArrayType *vla = getContext().getAsVariableArrayType(type);
1447 assert(vla && "type was not a variable array type!");
1448 return getVLASize(vla);
Anders Carlssone388a5b2008-12-20 20:27:15 +00001449}
Anders Carlssonccbe9202008-12-12 07:19:02 +00001450
John McCall23c29fe2011-06-24 21:55:10 +00001451std::pair<llvm::Value*, QualType>
1452CodeGenFunction::getVLASize(const VariableArrayType *type) {
1453 // The number of elements so far; always size_t.
Craig Topper8a13c412014-05-21 05:09:00 +00001454 llvm::Value *numElements = nullptr;
John McCall23c29fe2011-06-24 21:55:10 +00001455
1456 QualType elementType;
1457 do {
1458 elementType = type->getElementType();
1459 llvm::Value *vlaSize = VLASizeMap[type->getSizeExpr()];
1460 assert(vlaSize && "no size for VLA!");
1461 assert(vlaSize->getType() == SizeTy);
1462
1463 if (!numElements) {
1464 numElements = vlaSize;
1465 } else {
1466 // It's undefined behavior if this wraps around, so mark it that way.
Alexey Samsonovcb3f8122014-03-20 10:48:29 +00001467 // FIXME: Teach -fsanitize=undefined to trap this.
John McCall23c29fe2011-06-24 21:55:10 +00001468 numElements = Builder.CreateNUWMul(numElements, vlaSize);
1469 }
1470 } while ((type = getContext().getAsVariableArrayType(elementType)));
1471
1472 return std::pair<llvm::Value*,QualType>(numElements, elementType);
1473}
1474
1475void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
1476 assert(type->isVariablyModifiedType() &&
Anders Carlsson8a01b792008-12-20 20:46:34 +00001477 "Must pass variably modified type to EmitVLASizes!");
Mike Stump11289f42009-09-09 15:08:12 +00001478
Daniel Dunbarb6adc432009-07-19 06:58:07 +00001479 EnsureInsertPoint();
Mike Stump11289f42009-09-09 15:08:12 +00001480
John McCall23c29fe2011-06-24 21:55:10 +00001481 // We're going to walk down into the type and look for VLA
1482 // expressions.
John McCall23c29fe2011-06-24 21:55:10 +00001483 do {
1484 assert(type->isVariablyModifiedType());
Mike Stump11289f42009-09-09 15:08:12 +00001485
John McCall23c29fe2011-06-24 21:55:10 +00001486 const Type *ty = type.getTypePtr();
1487 switch (ty->getTypeClass()) {
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001488
John McCall23c29fe2011-06-24 21:55:10 +00001489#define TYPE(Class, Base)
1490#define ABSTRACT_TYPE(Class, Base)
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001491#define NON_CANONICAL_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001492#define DEPENDENT_TYPE(Class, Base) case Type::Class:
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001493#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001494#include "clang/AST/TypeNodes.def"
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001495 llvm_unreachable("unexpected dependent type!");
Mike Stump11289f42009-09-09 15:08:12 +00001496
John McCall23c29fe2011-06-24 21:55:10 +00001497 // These types are never variably-modified.
1498 case Type::Builtin:
1499 case Type::Complex:
1500 case Type::Vector:
1501 case Type::ExtVector:
1502 case Type::Record:
1503 case Type::Enum:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001504 case Type::Elaborated:
1505 case Type::TemplateSpecialization:
John McCall23c29fe2011-06-24 21:55:10 +00001506 case Type::ObjCObject:
1507 case Type::ObjCInterface:
1508 case Type::ObjCObjectPointer:
1509 llvm_unreachable("type class is never variably-modified!");
Mike Stump11289f42009-09-09 15:08:12 +00001510
Reid Kleckner0503a872013-12-05 01:23:43 +00001511 case Type::Adjusted:
1512 type = cast<AdjustedType>(ty)->getAdjustedType();
1513 break;
1514
Reid Kleckner8a365022013-06-24 17:51:48 +00001515 case Type::Decayed:
1516 type = cast<DecayedType>(ty)->getPointeeType();
1517 break;
1518
John McCall23c29fe2011-06-24 21:55:10 +00001519 case Type::Pointer:
1520 type = cast<PointerType>(ty)->getPointeeType();
1521 break;
Mike Stump11289f42009-09-09 15:08:12 +00001522
John McCall23c29fe2011-06-24 21:55:10 +00001523 case Type::BlockPointer:
1524 type = cast<BlockPointerType>(ty)->getPointeeType();
1525 break;
1526
1527 case Type::LValueReference:
1528 case Type::RValueReference:
1529 type = cast<ReferenceType>(ty)->getPointeeType();
1530 break;
1531
1532 case Type::MemberPointer:
1533 type = cast<MemberPointerType>(ty)->getPointeeType();
1534 break;
1535
1536 case Type::ConstantArray:
1537 case Type::IncompleteArray:
1538 // Losing element qualification here is fine.
1539 type = cast<ArrayType>(ty)->getElementType();
1540 break;
1541
1542 case Type::VariableArray: {
1543 // Losing element qualification here is fine.
1544 const VariableArrayType *vat = cast<VariableArrayType>(ty);
1545
1546 // Unknown size indication requires no size computation.
1547 // Otherwise, evaluate and record it.
1548 if (const Expr *size = vat->getSizeExpr()) {
1549 // It's possible that we might have emitted this already,
1550 // e.g. with a typedef and a pointer to it.
1551 llvm::Value *&entry = VLASizeMap[size];
1552 if (!entry) {
Richard Smith481652b2012-10-10 01:11:12 +00001553 llvm::Value *Size = EmitScalarExpr(size);
1554
1555 // C11 6.7.6.2p5:
1556 // If the size is an expression that is not an integer constant
1557 // expression [...] each time it is evaluated it shall have a value
1558 // greater than zero.
Alexey Samsonovedf99a92014-11-07 22:29:38 +00001559 if (SanOpts.has(SanitizerKind::VLABound) &&
Richard Smithb1b0ab42012-11-05 22:21:05 +00001560 size->getType()->isSignedIntegerType()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +00001561 SanitizerScope SanScope(this);
Richard Smith481652b2012-10-10 01:11:12 +00001562 llvm::Value *Zero = llvm::Constant::getNullValue(Size->getType());
1563 llvm::Constant *StaticArgs[] = {
1564 EmitCheckSourceLocation(size->getLocStart()),
1565 EmitCheckTypeDescriptor(size->getType())
1566 };
Alexey Samsonove396bfc2014-11-11 22:03:54 +00001567 EmitCheck(std::make_pair(Builder.CreateICmpSGT(Size, Zero),
1568 SanitizerKind::VLABound),
1569 "vla_bound_not_positive", StaticArgs, Size);
Richard Smith481652b2012-10-10 01:11:12 +00001570 }
1571
John McCall23c29fe2011-06-24 21:55:10 +00001572 // Always zexting here would be wrong if it weren't
1573 // undefined behavior to have a negative bound.
Richard Smith8772bd82012-10-10 01:12:11 +00001574 entry = Builder.CreateIntCast(Size, SizeTy, /*signed*/ false);
John McCall23c29fe2011-06-24 21:55:10 +00001575 }
1576 }
1577 type = vat->getElementType();
1578 break;
Anders Carlsson8a01b792008-12-20 20:46:34 +00001579 }
Mike Stump11289f42009-09-09 15:08:12 +00001580
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001581 case Type::FunctionProto:
John McCall23c29fe2011-06-24 21:55:10 +00001582 case Type::FunctionNoProto:
Alp Toker314cc812014-01-25 16:55:45 +00001583 type = cast<FunctionType>(ty)->getReturnType();
John McCall23c29fe2011-06-24 21:55:10 +00001584 break;
Eli Friedman0dfb8892011-10-06 23:00:33 +00001585
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001586 case Type::Paren:
1587 case Type::TypeOf:
1588 case Type::UnaryTransform:
1589 case Type::Attributed:
1590 case Type::SubstTemplateTypeParm:
David Blaikie66ed89d2013-07-13 21:08:08 +00001591 case Type::PackExpansion:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001592 // Keep walking after single level desugaring.
1593 type = type.getSingleStepDesugaredType(getContext());
1594 break;
1595
1596 case Type::Typedef:
1597 case Type::Decltype:
1598 case Type::Auto:
1599 // Stop walking: nothing to do.
1600 return;
1601
1602 case Type::TypeOfExpr:
1603 // Stop walking: emit typeof expression.
1604 EmitIgnoredExpr(cast<TypeOfExprType>(ty)->getUnderlyingExpr());
1605 return;
1606
Eli Friedman0dfb8892011-10-06 23:00:33 +00001607 case Type::Atomic:
1608 type = cast<AtomicType>(ty)->getValueType();
1609 break;
John McCall23c29fe2011-06-24 21:55:10 +00001610 }
1611 } while (type->isVariablyModifiedType());
Anders Carlssonccbe9202008-12-12 07:19:02 +00001612}
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001613
1614llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) {
Dan Gohmane9e32dc2010-10-29 22:47:07 +00001615 if (getContext().getBuiltinVaListType()->isArrayType())
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001616 return EmitScalarExpr(E);
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001617 return EmitLValue(E).getAddress();
1618}
Anders Carlsson15cb75a2009-02-07 22:53:43 +00001619
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001620void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
1621 llvm::Constant *Init) {
Devang Pateldc866e12010-08-10 17:53:33 +00001622 assert (Init && "Invalid DeclRefExpr initializer!");
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001623 if (CGDebugInfo *Dbg = getDebugInfo())
1624 if (CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
1625 Dbg->EmitGlobalVariable(E->getDecl(), Init);
Devang Patele03edfd2010-08-10 07:24:25 +00001626}
John McCallc07a0c72011-02-17 10:25:35 +00001627
1628CodeGenFunction::PeepholeProtection
1629CodeGenFunction::protectFromPeepholes(RValue rvalue) {
1630 // At the moment, the only aggressive peephole we do in IR gen
1631 // is trunc(zext) folding, but if we add more, we can easily
1632 // extend this protection.
1633
1634 if (!rvalue.isScalar()) return PeepholeProtection();
1635 llvm::Value *value = rvalue.getScalarVal();
1636 if (!isa<llvm::ZExtInst>(value)) return PeepholeProtection();
1637
1638 // Just make an extra bitcast.
1639 assert(HaveInsertPoint());
1640 llvm::Instruction *inst = new llvm::BitCastInst(value, value->getType(), "",
1641 Builder.GetInsertBlock());
1642
1643 PeepholeProtection protection;
1644 protection.Inst = inst;
1645 return protection;
1646}
1647
1648void CodeGenFunction::unprotectFromPeepholes(PeepholeProtection protection) {
1649 if (!protection.Inst) return;
1650
1651 // In theory, we could try to duplicate the peepholes now, but whatever.
1652 protection.Inst->eraseFromParent();
1653}
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001654
1655llvm::Value *CodeGenFunction::EmitAnnotationCall(llvm::Value *AnnotationFn,
1656 llvm::Value *AnnotatedVal,
Dmitri Gribenkof8579502013-01-12 19:30:44 +00001657 StringRef AnnotationStr,
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001658 SourceLocation Location) {
1659 llvm::Value *Args[4] = {
1660 AnnotatedVal,
1661 Builder.CreateBitCast(CGM.EmitAnnotationString(AnnotationStr), Int8PtrTy),
1662 Builder.CreateBitCast(CGM.EmitAnnotationUnit(Location), Int8PtrTy),
1663 CGM.EmitAnnotationLineNo(Location)
1664 };
1665 return Builder.CreateCall(AnnotationFn, Args);
1666}
1667
1668void CodeGenFunction::EmitVarAnnotations(const VarDecl *D, llvm::Value *V) {
1669 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1670 // FIXME We create a new bitcast for every annotation because that's what
1671 // llvm-gcc was doing.
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001672 for (const auto *I : D->specific_attrs<AnnotateAttr>())
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001673 EmitAnnotationCall(CGM.getIntrinsic(llvm::Intrinsic::var_annotation),
1674 Builder.CreateBitCast(V, CGM.Int8PtrTy, V->getName()),
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001675 I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001676}
1677
1678llvm::Value *CodeGenFunction::EmitFieldAnnotations(const FieldDecl *D,
1679 llvm::Value *V) {
1680 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1681 llvm::Type *VTy = V->getType();
1682 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::ptr_annotation,
1683 CGM.Int8PtrTy);
1684
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001685 for (const auto *I : D->specific_attrs<AnnotateAttr>()) {
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001686 // FIXME Always emit the cast inst so we can differentiate between
1687 // annotation on the first field of a struct and annotation on the struct
1688 // itself.
1689 if (VTy != CGM.Int8PtrTy)
1690 V = Builder.Insert(new llvm::BitCastInst(V, CGM.Int8PtrTy));
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001691 V = EmitAnnotationCall(F, V, I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001692 V = Builder.CreateBitCast(V, VTy);
1693 }
1694
1695 return V;
1696}
Ben Langmuir3b4c30b2013-05-09 19:17:11 +00001697
1698CodeGenFunction::CGCapturedStmtInfo::~CGCapturedStmtInfo() { }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001699
Alexey Samsonov24cad992014-07-17 18:46:27 +00001700CodeGenFunction::SanitizerScope::SanitizerScope(CodeGenFunction *CGF)
1701 : CGF(CGF) {
1702 assert(!CGF->IsSanitizerScope);
1703 CGF->IsSanitizerScope = true;
1704}
1705
1706CodeGenFunction::SanitizerScope::~SanitizerScope() {
1707 CGF->IsSanitizerScope = false;
1708}
1709
Alexander Musman515ad8c2014-05-22 08:54:05 +00001710void CodeGenFunction::InsertHelper(llvm::Instruction *I,
1711 const llvm::Twine &Name,
1712 llvm::BasicBlock *BB,
1713 llvm::BasicBlock::iterator InsertPt) const {
1714 LoopStack.InsertHelper(I);
Kostya Serebryany4ee69042014-08-26 02:29:59 +00001715 if (IsSanitizerScope)
1716 CGM.getSanitizerMetadata()->disableSanitizerForInstruction(I);
Alexander Musman515ad8c2014-05-22 08:54:05 +00001717}
1718
1719template <bool PreserveNames>
1720void CGBuilderInserter<PreserveNames>::InsertHelper(
1721 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1722 llvm::BasicBlock::iterator InsertPt) const {
1723 llvm::IRBuilderDefaultInserter<PreserveNames>::InsertHelper(I, Name, BB,
1724 InsertPt);
1725 if (CGF)
1726 CGF->InsertHelper(I, Name, BB, InsertPt);
1727}
1728
1729#ifdef NDEBUG
1730#define PreserveNames false
1731#else
1732#define PreserveNames true
1733#endif
1734template void CGBuilderInserter<PreserveNames>::InsertHelper(
1735 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1736 llvm::BasicBlock::iterator InsertPt) const;
1737#undef PreserveNames