blob: 02cca4bf21da7e51fad1be70bb728cabc6967407 [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 }
66 Builder.SetFastMathFlags(FMF);
Chris Lattner5696e7b2008-06-17 18:05:57 +000067}
Chris Lattnerd1af2d22007-05-29 23:17:50 +000068
John McCall08ef4662011-11-10 08:15:53 +000069CodeGenFunction::~CodeGenFunction() {
Richard Smith736a9472013-06-12 20:42:33 +000070 assert(LifetimeExtendedCleanupStack.empty() && "failed to emit a cleanup");
71
John McCall08ef4662011-11-10 08:15:53 +000072 // If there are any unclaimed block infos, go ahead and destroy them
73 // now. This can happen if IR-gen gets clever and skips evaluating
74 // something.
75 if (FirstBlockInfo)
76 destroyBlockInfos(FirstBlockInfo);
Alexey Bataev9959db52014-05-06 10:08:46 +000077
78 if (getLangOpts().OpenMP) {
79 CGM.getOpenMPRuntime().FunctionFinished(*this);
80 }
John McCall08ef4662011-11-10 08:15:53 +000081}
82
David Majnemer99281062014-09-18 22:05:54 +000083LValue CodeGenFunction::MakeNaturalAlignAddrLValue(llvm::Value *V, QualType T) {
84 CharUnits Alignment;
85 if (CGM.getCXXABI().isTypeInfoCalculable(T)) {
86 Alignment = getContext().getTypeAlignInChars(T);
87 unsigned MaxAlign = getContext().getLangOpts().MaxTypeAlign;
88 if (MaxAlign && Alignment.getQuantity() > MaxAlign &&
89 !getContext().isAlignmentRequired(T))
90 Alignment = CharUnits::fromQuantity(MaxAlign);
91 }
92 return LValue::MakeAddr(V, T, Alignment, getContext(), CGM.getTBAAInfo(T));
93}
Chris Lattnerd1af2d22007-05-29 23:17:50 +000094
Chris Lattnera5f58b02011-07-09 17:41:47 +000095llvm::Type *CodeGenFunction::ConvertTypeForMem(QualType T) {
Daniel Dunbaree3da872009-02-03 23:03:55 +000096 return CGM.getTypes().ConvertTypeForMem(T);
97}
98
Chris Lattnera5f58b02011-07-09 17:41:47 +000099llvm::Type *CodeGenFunction::ConvertType(QualType T) {
Chris Lattnerf033c142007-06-22 19:05:19 +0000100 return CGM.getTypes().ConvertType(T);
Chris Lattner45bb9142007-06-09 02:28:57 +0000101}
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000102
John McCall47fb9502013-03-07 21:37:08 +0000103TypeEvaluationKind CodeGenFunction::getEvaluationKind(QualType type) {
104 type = type.getCanonicalType();
105 while (true) {
106 switch (type->getTypeClass()) {
John McCall745ae282011-05-15 02:34:36 +0000107#define TYPE(name, parent)
108#define ABSTRACT_TYPE(name, parent)
109#define NON_CANONICAL_TYPE(name, parent) case Type::name:
110#define DEPENDENT_TYPE(name, parent) case Type::name:
111#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(name, parent) case Type::name:
112#include "clang/AST/TypeNodes.def"
John McCall47fb9502013-03-07 21:37:08 +0000113 llvm_unreachable("non-canonical or dependent type in IR-generation");
John McCall745ae282011-05-15 02:34:36 +0000114
Richard Smith27d807c2013-04-30 13:56:41 +0000115 case Type::Auto:
116 llvm_unreachable("undeduced auto type in IR-generation");
117
John McCall47fb9502013-03-07 21:37:08 +0000118 // Various scalar types.
119 case Type::Builtin:
120 case Type::Pointer:
121 case Type::BlockPointer:
122 case Type::LValueReference:
123 case Type::RValueReference:
124 case Type::MemberPointer:
125 case Type::Vector:
126 case Type::ExtVector:
127 case Type::FunctionProto:
128 case Type::FunctionNoProto:
129 case Type::Enum:
130 case Type::ObjCObjectPointer:
131 return TEK_Scalar;
John McCall745ae282011-05-15 02:34:36 +0000132
John McCall47fb9502013-03-07 21:37:08 +0000133 // Complexes.
134 case Type::Complex:
135 return TEK_Complex;
Eli Friedman0dfb8892011-10-06 23:00:33 +0000136
John McCall47fb9502013-03-07 21:37:08 +0000137 // Arrays, records, and Objective-C objects.
138 case Type::ConstantArray:
139 case Type::IncompleteArray:
140 case Type::VariableArray:
141 case Type::Record:
142 case Type::ObjCObject:
143 case Type::ObjCInterface:
144 return TEK_Aggregate;
145
146 // We operate on atomic values according to their underlying type.
147 case Type::Atomic:
148 type = cast<AtomicType>(type)->getValueType();
149 continue;
150 }
151 llvm_unreachable("unknown type kind!");
John McCall745ae282011-05-15 02:34:36 +0000152 }
Chris Lattner54fb19e2007-06-22 22:02:34 +0000153}
154
David Blaikie357aafb2013-02-01 19:09:49 +0000155void CodeGenFunction::EmitReturnBlock() {
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000156 // For cleanliness, we try to avoid emitting the return block for
157 // simple cases.
158 llvm::BasicBlock *CurBB = Builder.GetInsertBlock();
159
160 if (CurBB) {
161 assert(!CurBB->getTerminator() && "Unexpected terminated block.");
162
Daniel Dunbarea3060a2009-07-19 08:24:34 +0000163 // We have a valid insert point, reuse it if it is empty or there are no
164 // explicit jumps to the return block.
John McCallad5d61e2010-07-23 21:56:41 +0000165 if (CurBB->empty() || ReturnBlock.getBlock()->use_empty()) {
166 ReturnBlock.getBlock()->replaceAllUsesWith(CurBB);
167 delete ReturnBlock.getBlock();
Daniel Dunbarea3060a2009-07-19 08:24:34 +0000168 } else
John McCallad5d61e2010-07-23 21:56:41 +0000169 EmitBlock(ReturnBlock.getBlock());
David Blaikie357aafb2013-02-01 19:09:49 +0000170 return;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000171 }
172
173 // Otherwise, if the return block is the target of a single direct
174 // branch then we can just put the code in that block instead. This
175 // cleans up functions which started with a unified return block.
John McCallad5d61e2010-07-23 21:56:41 +0000176 if (ReturnBlock.getBlock()->hasOneUse()) {
Mike Stump11289f42009-09-09 15:08:12 +0000177 llvm::BranchInst *BI =
Chandler Carruth4d01fff2014-03-09 03:16:50 +0000178 dyn_cast<llvm::BranchInst>(*ReturnBlock.getBlock()->user_begin());
John McCallbd309292010-07-06 01:34:17 +0000179 if (BI && BI->isUnconditional() &&
John McCallad5d61e2010-07-23 21:56:41 +0000180 BI->getSuccessor(0) == ReturnBlock.getBlock()) {
David Blaikie1d969f42013-02-23 19:20:56 +0000181 // Reset insertion point, including debug location, and delete the
182 // branch. This is really subtle and only works because the next change
183 // in location will hit the caching in CGDebugInfo::EmitLocation and not
184 // override this.
Eric Christopher65c5c912011-09-09 21:53:04 +0000185 Builder.SetCurrentDebugLocation(BI->getDebugLoc());
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000186 Builder.SetInsertPoint(BI->getParent());
187 BI->eraseFromParent();
John McCallad5d61e2010-07-23 21:56:41 +0000188 delete ReturnBlock.getBlock();
David Blaikie357aafb2013-02-01 19:09:49 +0000189 return;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000190 }
191 }
192
Mike Stump18bb9282009-05-16 07:57:57 +0000193 // FIXME: We are at an unreachable point, there is no reason to emit the block
194 // unless it has uses. However, we still need a place to put the debug
195 // region.end for now.
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000196
John McCallad5d61e2010-07-23 21:56:41 +0000197 EmitBlock(ReturnBlock.getBlock());
John McCallbd309292010-07-06 01:34:17 +0000198}
199
200static void EmitIfUsed(CodeGenFunction &CGF, llvm::BasicBlock *BB) {
201 if (!BB) return;
202 if (!BB->use_empty())
203 return CGF.CurFn->getBasicBlockList().push_back(BB);
204 delete BB;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000205}
206
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000207void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
Chris Lattnere73e4322007-07-16 21:28:45 +0000208 assert(BreakContinueStack.empty() &&
209 "mismatched push/pop in break/continue stack!");
Mike Stump11289f42009-09-09 15:08:12 +0000210
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000211 bool OnlySimpleReturnStmts = NumSimpleReturnExprs > 0
Adrian Prantl524ba1f2013-07-25 00:23:42 +0000212 && NumSimpleReturnExprs == NumReturnExprs
213 && ReturnBlock.getBlock()->use_empty();
214 // Usually the return expression is evaluated before the cleanup
215 // code. If the function contains only a simple return statement,
216 // such as a constant, the location before the cleanup code becomes
217 // the last useful breakpoint in the function, because the simple
218 // return expression will be evaluated after the cleanup code. To be
219 // safe, set the debug location for cleanup code to the location of
220 // the return statement. Otherwise the cleanup code should be at the
221 // end of the function's lexical scope.
222 //
223 // If there are multiple branches to the return block, the branch
224 // instructions will get the location of the return statements and
225 // all will be fine.
Adrian Prantl3be10542013-05-02 17:30:20 +0000226 if (CGDebugInfo *DI = getDebugInfo()) {
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000227 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000228 DI->EmitLocation(Builder, LastStopPoint);
Adrian Prantl3be10542013-05-02 17:30:20 +0000229 else
Adrian Prantle83b1302014-01-07 22:05:52 +0000230 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000231 }
David Blaikie357aafb2013-02-01 19:09:49 +0000232
John McCall31168b02011-06-15 23:02:42 +0000233 // Pop any cleanups that might have been associated with the
234 // parameters. Do this in whatever block we're currently in; it's
235 // important to do this before we enter the return block or return
236 // edges will be *really* confused.
Adrian Prantl3be10542013-05-02 17:30:20 +0000237 bool EmitRetDbgLoc = true;
238 if (EHStack.stable_begin() != PrologueCleanupDepth) {
Adrian Prantldc237b52013-05-16 00:41:26 +0000239 PopCleanupBlocks(PrologueCleanupDepth);
John McCall31168b02011-06-15 23:02:42 +0000240
Adrian Prantl3be10542013-05-02 17:30:20 +0000241 // Make sure the line table doesn't jump back into the body for
242 // the ret after it's been at EndLoc.
243 EmitRetDbgLoc = false;
244
245 if (CGDebugInfo *DI = getDebugInfo())
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000246 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000247 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000248 }
249
Mike Stump11289f42009-09-09 15:08:12 +0000250 // Emit function epilog (to return).
David Blaikie357aafb2013-02-01 19:09:49 +0000251 EmitReturnBlock();
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000252
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000253 if (ShouldInstrumentFunction())
254 EmitFunctionInstrumentation("__cyg_profile_func_exit");
Chris Lattner3c77a352010-06-22 00:03:40 +0000255
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000256 // Emit debug descriptor for function end.
Anders Carlsson63784f42009-02-13 08:11:52 +0000257 if (CGDebugInfo *DI = getDebugInfo()) {
Devang Patel0884a602010-07-22 22:29:16 +0000258 DI->EmitFunctionEnd(Builder);
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000259 }
260
Nick Lewycky2d84e842013-10-02 02:29:49 +0000261 EmitFunctionEpilog(*CurFnInfo, EmitRetDbgLoc, EndLoc);
Mike Stump1d849212009-12-07 23:38:24 +0000262 EmitEndEHSpec(CurCodeDecl);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000263
John McCallbd309292010-07-06 01:34:17 +0000264 assert(EHStack.empty() &&
265 "did not remove all scopes from cleanup stack!");
266
Chris Lattner6c4d2552009-10-28 23:59:40 +0000267 // If someone did an indirect goto, emit the indirect goto block at the end of
268 // the function.
269 if (IndirectBranch) {
270 EmitBlock(IndirectBranch->getParent());
271 Builder.ClearInsertionPoint();
272 }
Michael Ilseman686240a2012-12-04 00:29:55 +0000273
Chris Lattnerc48023b2007-12-02 06:32:24 +0000274 // Remove the AllocaInsertPt instruction, which is just a convenience for us.
Chris Lattner2739d2b2009-03-31 22:17:44 +0000275 llvm::Instruction *Ptr = AllocaInsertPt;
Craig Topper8a13c412014-05-21 05:09:00 +0000276 AllocaInsertPt = nullptr;
Chris Lattner2739d2b2009-03-31 22:17:44 +0000277 Ptr->eraseFromParent();
Michael Ilseman686240a2012-12-04 00:29:55 +0000278
Chris Lattner6c4d2552009-10-28 23:59:40 +0000279 // If someone took the address of a label but never did an indirect goto, we
280 // made a zero entry PHI node, which is illegal, zap it now.
281 if (IndirectBranch) {
282 llvm::PHINode *PN = cast<llvm::PHINode>(IndirectBranch->getAddress());
283 if (PN->getNumIncomingValues() == 0) {
284 PN->replaceAllUsesWith(llvm::UndefValue::get(PN->getType()));
285 PN->eraseFromParent();
286 }
287 }
John McCallbd309292010-07-06 01:34:17 +0000288
John McCall8e4c74b2011-08-11 02:22:43 +0000289 EmitIfUsed(*this, EHResumeBlock);
John McCallbd309292010-07-06 01:34:17 +0000290 EmitIfUsed(*this, TerminateLandingPad);
291 EmitIfUsed(*this, TerminateHandler);
292 EmitIfUsed(*this, UnreachableBlock);
John McCall09ae0322010-07-06 23:57:41 +0000293
294 if (CGM.getCodeGenOpts().EmitDeclMetadata)
295 EmitDeclMetadata();
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000296
297 for (SmallVectorImpl<std::pair<llvm::Instruction *, llvm::Value *> >::iterator
298 I = DeferredReplacements.begin(),
299 E = DeferredReplacements.end();
300 I != E; ++I) {
301 I->first->replaceAllUsesWith(I->second);
302 I->first->eraseFromParent();
303 }
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000304}
Chris Lattner308f4312007-05-29 23:50:05 +0000305
Chris Lattner3c77a352010-06-22 00:03:40 +0000306/// ShouldInstrumentFunction - Return true if the current function should be
307/// instrumented with __cyg_profile_func_* calls
308bool CodeGenFunction::ShouldInstrumentFunction() {
309 if (!CGM.getCodeGenOpts().InstrumentFunctions)
310 return false;
Ted Kremenekc249c412011-05-16 23:49:20 +0000311 if (!CurFuncDecl || CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>())
Chris Lattner3c77a352010-06-22 00:03:40 +0000312 return false;
313 return true;
314}
315
316/// EmitFunctionInstrumentation - Emit LLVM code to call the specified
317/// instrumentation function with the current function and the call site, if
318/// function instrumentation is enabled.
319void CodeGenFunction::EmitFunctionInstrumentation(const char *Fn) {
Chris Lattnerb48a2d52010-06-23 05:21:28 +0000320 // void __cyg_profile_func_{enter,exit} (void *this_fn, void *call_site);
Chris Lattnera5f58b02011-07-09 17:41:47 +0000321 llvm::PointerType *PointerTy = Int8PtrTy;
322 llvm::Type *ProfileFuncArgs[] = { PointerTy, PointerTy };
Chris Lattner2192fe52011-07-18 04:24:23 +0000323 llvm::FunctionType *FunctionTy =
Chris Lattnerece04092012-02-07 00:39:47 +0000324 llvm::FunctionType::get(VoidTy, ProfileFuncArgs, false);
Chris Lattner3c77a352010-06-22 00:03:40 +0000325
326 llvm::Constant *F = CGM.CreateRuntimeFunction(FunctionTy, Fn);
327 llvm::CallInst *CallSite = Builder.CreateCall(
Benjamin Kramer8d375ce2011-07-14 17:45:50 +0000328 CGM.getIntrinsic(llvm::Intrinsic::returnaddress),
Chris Lattner5e016ae2010-06-27 07:15:29 +0000329 llvm::ConstantInt::get(Int32Ty, 0),
Chris Lattner3c77a352010-06-22 00:03:40 +0000330 "callsite");
331
John McCall882987f2013-02-28 19:01:20 +0000332 llvm::Value *args[] = {
333 llvm::ConstantExpr::getBitCast(CurFn, PointerTy),
334 CallSite
335 };
336
337 EmitNounwindRuntimeCall(F, args);
Chris Lattner3c77a352010-06-22 00:03:40 +0000338}
339
Roman Divacky178e01602011-02-10 16:52:03 +0000340void CodeGenFunction::EmitMCountInstrumentation() {
Chris Lattnerece04092012-02-07 00:39:47 +0000341 llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
Roman Divacky178e01602011-02-10 16:52:03 +0000342
John McCallc8e01702013-04-16 22:48:15 +0000343 llvm::Constant *MCountFn =
344 CGM.CreateRuntimeFunction(FTy, getTarget().getMCountName());
John McCall882987f2013-02-28 19:01:20 +0000345 EmitNounwindRuntimeCall(MCountFn);
Roman Divacky178e01602011-02-10 16:52:03 +0000346}
347
Tanya Lattner7445ada2012-07-11 23:02:10 +0000348// OpenCL v1.2 s5.6.4.6 allows the compiler to store kernel argument
349// information in the program executable. The argument information stored
350// includes the argument name, its type, the address and access qualifiers used.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000351static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
352 CodeGenModule &CGM,llvm::LLVMContext &Context,
Guy Benyeifb36ede2013-03-24 13:58:12 +0000353 SmallVector <llvm::Value*, 5> &kernelMDArgs,
354 CGBuilderTy& Builder, ASTContext &ASTCtx) {
355 // Create MDNodes that represent the kernel arg metadata.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000356 // Each MDNode is a list in the form of "key", N number of values which is
357 // the same number of values as their are kernel arguments.
Michael Ilseman686240a2012-12-04 00:29:55 +0000358
Joey Gouly92a47442014-04-04 13:43:57 +0000359 const PrintingPolicy &Policy = ASTCtx.getPrintingPolicy();
360
Guy Benyeifb36ede2013-03-24 13:58:12 +0000361 // MDNode for the kernel argument address space qualifiers.
362 SmallVector<llvm::Value*, 8> addressQuals;
363 addressQuals.push_back(llvm::MDString::get(Context, "kernel_arg_addr_space"));
364
365 // MDNode for the kernel argument access qualifiers (images only).
366 SmallVector<llvm::Value*, 8> accessQuals;
367 accessQuals.push_back(llvm::MDString::get(Context, "kernel_arg_access_qual"));
368
369 // MDNode for the kernel argument type names.
370 SmallVector<llvm::Value*, 8> argTypeNames;
371 argTypeNames.push_back(llvm::MDString::get(Context, "kernel_arg_type"));
372
Fraser Cormackdadc3712014-07-30 14:39:53 +0000373 // MDNode for the kernel argument base type names.
374 SmallVector<llvm::Value*, 8> argBaseTypeNames;
375 argBaseTypeNames.push_back(
376 llvm::MDString::get(Context, "kernel_arg_base_type"));
377
Guy Benyeifb36ede2013-03-24 13:58:12 +0000378 // MDNode for the kernel argument type qualifiers.
379 SmallVector<llvm::Value*, 8> argTypeQuals;
380 argTypeQuals.push_back(llvm::MDString::get(Context, "kernel_arg_type_qual"));
381
Tanya Lattner7445ada2012-07-11 23:02:10 +0000382 // MDNode for the kernel argument names.
383 SmallVector<llvm::Value*, 8> argNames;
384 argNames.push_back(llvm::MDString::get(Context, "kernel_arg_name"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000385
Tanya Lattner7445ada2012-07-11 23:02:10 +0000386 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i) {
387 const ParmVarDecl *parm = FD->getParamDecl(i);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000388 QualType ty = parm->getType();
389 std::string typeQuals;
390
391 if (ty->isPointerType()) {
392 QualType pointeeTy = ty->getPointeeType();
393
394 // Get address qualifier.
395 addressQuals.push_back(Builder.getInt32(ASTCtx.getTargetAddressSpace(
396 pointeeTy.getAddressSpace())));
397
398 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000399 std::string typeName =
400 pointeeTy.getUnqualifiedType().getAsString(Policy) + "*";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000401
402 // Turn "unsigned type" to "utype"
403 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000404 if (pointeeTy.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000405 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000406
407 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
408
Fraser Cormackdadc3712014-07-30 14:39:53 +0000409 std::string baseTypeName =
410 pointeeTy.getUnqualifiedType().getCanonicalType().getAsString(
411 Policy) +
412 "*";
413
414 // Turn "unsigned type" to "utype"
415 pos = baseTypeName.find("unsigned");
416 if (pos != std::string::npos)
417 baseTypeName.erase(pos+1, 8);
418
419 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
420
Guy Benyeifb36ede2013-03-24 13:58:12 +0000421 // Get argument type qualifiers:
422 if (ty.isRestrictQualified())
423 typeQuals = "restrict";
424 if (pointeeTy.isConstQualified() ||
425 (pointeeTy.getAddressSpace() == LangAS::opencl_constant))
Benjamin Krameref89ae02013-03-24 16:04:55 +0000426 typeQuals += typeQuals.empty() ? "const" : " const";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000427 if (pointeeTy.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000428 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000429 } else {
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000430 uint32_t AddrSpc = 0;
431 if (ty->isImageType())
432 AddrSpc =
433 CGM.getContext().getTargetAddressSpace(LangAS::opencl_global);
Bob Wilson95a27b02014-02-17 19:20:59 +0000434
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000435 addressQuals.push_back(Builder.getInt32(AddrSpc));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000436
437 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000438 std::string typeName = ty.getUnqualifiedType().getAsString(Policy);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000439
440 // Turn "unsigned type" to "utype"
441 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000442 if (ty.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000443 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000444
445 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
446
Fraser Cormackdadc3712014-07-30 14:39:53 +0000447 std::string baseTypeName =
448 ty.getUnqualifiedType().getCanonicalType().getAsString(Policy);
449
450 // Turn "unsigned type" to "utype"
451 pos = baseTypeName.find("unsigned");
452 if (pos != std::string::npos)
453 baseTypeName.erase(pos+1, 8);
454
455 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
456
Guy Benyeifb36ede2013-03-24 13:58:12 +0000457 // Get argument type qualifiers:
458 if (ty.isConstQualified())
459 typeQuals = "const";
460 if (ty.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000461 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000462 }
Justin Bogner0f066062013-11-22 10:20:40 +0000463
Guy Benyeifb36ede2013-03-24 13:58:12 +0000464 argTypeQuals.push_back(llvm::MDString::get(Context, typeQuals));
465
466 // Get image access qualifier:
467 if (ty->isImageType()) {
Aaron Ballmanc4327992013-12-19 03:09:10 +0000468 const OpenCLImageAccessAttr *A = parm->getAttr<OpenCLImageAccessAttr>();
Aaron Ballman26891332014-01-14 17:41:53 +0000469 if (A && A->isWriteOnly())
Guy Benyeifb36ede2013-03-24 13:58:12 +0000470 accessQuals.push_back(llvm::MDString::get(Context, "write_only"));
471 else
472 accessQuals.push_back(llvm::MDString::get(Context, "read_only"));
Aaron Ballman26891332014-01-14 17:41:53 +0000473 // FIXME: what about read_write?
Guy Benyeifb36ede2013-03-24 13:58:12 +0000474 } else
475 accessQuals.push_back(llvm::MDString::get(Context, "none"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000476
Tanya Lattner7445ada2012-07-11 23:02:10 +0000477 // Get argument name.
478 argNames.push_back(llvm::MDString::get(Context, parm->getName()));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000479 }
Guy Benyeifb36ede2013-03-24 13:58:12 +0000480
481 kernelMDArgs.push_back(llvm::MDNode::get(Context, addressQuals));
482 kernelMDArgs.push_back(llvm::MDNode::get(Context, accessQuals));
483 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeNames));
Fraser Cormackdadc3712014-07-30 14:39:53 +0000484 kernelMDArgs.push_back(llvm::MDNode::get(Context, argBaseTypeNames));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000485 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeQuals));
Sameer Sahasrabuddhec6093fe2014-12-04 05:30:58 +0000486 if (CGM.getCodeGenOpts().EmitOpenCLArgMetadata)
487 kernelMDArgs.push_back(llvm::MDNode::get(Context, argNames));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000488}
489
Michael Ilseman686240a2012-12-04 00:29:55 +0000490void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000491 llvm::Function *Fn)
492{
493 if (!FD->hasAttr<OpenCLKernelAttr>())
494 return;
495
496 llvm::LLVMContext &Context = getLLVMContext();
497
Dmitri Gribenkof8579502013-01-12 19:30:44 +0000498 SmallVector <llvm::Value*, 5> kernelMDArgs;
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000499 kernelMDArgs.push_back(Fn);
500
Sameer Sahasrabuddhec6093fe2014-12-04 05:30:58 +0000501 GenOpenCLArgMetadata(FD, Fn, CGM, Context, kernelMDArgs, Builder,
502 getContext());
Michael Ilseman686240a2012-12-04 00:29:55 +0000503
Aaron Ballmanc4327992013-12-19 03:09:10 +0000504 if (const VecTypeHintAttr *A = FD->getAttr<VecTypeHintAttr>()) {
505 QualType hintQTy = A->getTypeHint();
Joey Goulyaba589c2013-03-08 09:42:32 +0000506 const ExtVectorType *hintEltQTy = hintQTy->getAs<ExtVectorType>();
507 bool isSignedInteger =
508 hintQTy->isSignedIntegerType() ||
509 (hintEltQTy && hintEltQTy->getElementType()->isSignedIntegerType());
510 llvm::Value *attrMDArgs[] = {
511 llvm::MDString::get(Context, "vec_type_hint"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000512 llvm::UndefValue::get(CGM.getTypes().ConvertType(A->getTypeHint())),
Joey Goulyaba589c2013-03-08 09:42:32 +0000513 llvm::ConstantInt::get(
514 llvm::IntegerType::get(Context, 32),
515 llvm::APInt(32, (uint64_t)(isSignedInteger ? 1 : 0)))
516 };
517 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
518 }
519
Aaron Ballmanc4327992013-12-19 03:09:10 +0000520 if (const WorkGroupSizeHintAttr *A = FD->getAttr<WorkGroupSizeHintAttr>()) {
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000521 llvm::Value *attrMDArgs[] = {
522 llvm::MDString::get(Context, "work_group_size_hint"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000523 Builder.getInt32(A->getXDim()),
524 Builder.getInt32(A->getYDim()),
525 Builder.getInt32(A->getZDim())
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000526 };
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000527 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
528 }
529
Aaron Ballmanc4327992013-12-19 03:09:10 +0000530 if (const ReqdWorkGroupSizeAttr *A = FD->getAttr<ReqdWorkGroupSizeAttr>()) {
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000531 llvm::Value *attrMDArgs[] = {
532 llvm::MDString::get(Context, "reqd_work_group_size"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000533 Builder.getInt32(A->getXDim()),
534 Builder.getInt32(A->getYDim()),
535 Builder.getInt32(A->getZDim())
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000536 };
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000537 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
538 }
539
540 llvm::MDNode *kernelMDNode = llvm::MDNode::get(Context, kernelMDArgs);
541 llvm::NamedMDNode *OpenCLKernelMetadata =
542 CGM.getModule().getOrInsertNamedMetadata("opencl.kernels");
543 OpenCLKernelMetadata->addOperand(kernelMDNode);
544}
545
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000546/// Determine whether the function F ends with a return stmt.
547static bool endsWithReturn(const Decl* F) {
548 const Stmt *Body = nullptr;
549 if (auto *FD = dyn_cast_or_null<FunctionDecl>(F))
550 Body = FD->getBody();
551 else if (auto *OMD = dyn_cast_or_null<ObjCMethodDecl>(F))
552 Body = OMD->getBody();
553
554 if (auto *CS = dyn_cast_or_null<CompoundStmt>(Body)) {
555 auto LastStmt = CS->body_rbegin();
556 if (LastStmt != CS->body_rend())
557 return isa<ReturnStmt>(*LastStmt);
558 }
559 return false;
560}
561
John McCalldec348f72013-05-03 07:33:41 +0000562void CodeGenFunction::StartFunction(GlobalDecl GD,
563 QualType RetTy,
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000564 llvm::Function *Fn,
John McCalla738c252011-03-09 04:27:21 +0000565 const CGFunctionInfo &FnInfo,
Daniel Dunbar354d2782008-10-18 18:22:23 +0000566 const FunctionArgList &Args,
Adrian Prantl42d71b92014-04-10 23:21:53 +0000567 SourceLocation Loc,
Tilmann Scheller99cc30c2011-03-02 21:36:49 +0000568 SourceLocation StartLoc) {
David Blaikie8e6c36e2014-10-14 16:43:46 +0000569 assert(!CurFn &&
570 "Do not use a CodeGenFunction object for more than one function");
571
Anders Carlsson73fcc952009-09-11 00:07:24 +0000572 const Decl *D = GD.getDecl();
Michael Ilseman686240a2012-12-04 00:29:55 +0000573
Anders Carlssonf4478e92009-02-09 20:20:56 +0000574 DidCallStackSave = false;
John McCalldec348f72013-05-03 07:33:41 +0000575 CurCodeDecl = D;
Craig Topper8a13c412014-05-21 05:09:00 +0000576 CurFuncDecl = (D ? D->getNonClosureContext() : nullptr);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000577 FnRetTy = RetTy;
Daniel Dunbar9c426522008-07-29 23:18:29 +0000578 CurFn = Fn;
John McCalla738c252011-03-09 04:27:21 +0000579 CurFnInfo = &FnInfo;
Chris Lattner5696e7b2008-06-17 18:05:57 +0000580 assert(CurFn->isDeclaration() && "Function already has body?");
581
Alexey Samsonov1444bb92014-10-17 00:20:19 +0000582 if (CGM.isInSanitizerBlacklist(Fn, Loc))
Alexey Samsonov035462c2014-10-30 19:33:44 +0000583 SanOpts.clear();
Will Dietzf54319c2013-01-18 11:30:38 +0000584
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000585 // Pass inline keyword to optimizer if it appears explicitly on any
Roman Divackydd9bfb22014-01-15 19:07:16 +0000586 // declaration. Also, in the case of -fno-inline attach NoInline
David Majnemer19d7d542014-02-25 10:51:14 +0000587 // attribute to all function that are not marked AlwaysInline.
Roman Divackydd9bfb22014-01-15 19:07:16 +0000588 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
589 if (!CGM.getCodeGenOpts().NoInline) {
Aaron Ballman86c93902014-03-06 23:45:36 +0000590 for (auto RI : FD->redecls())
Chad Rosier883b2572012-03-14 23:32:11 +0000591 if (RI->isInlineSpecified()) {
Bill Wendling207f0532012-12-20 19:27:06 +0000592 Fn->addFnAttr(llvm::Attribute::InlineHint);
Chad Rosier883b2572012-03-14 23:32:11 +0000593 break;
594 }
David Majnemer67e541e1c2014-02-25 09:53:29 +0000595 } else if (!FD->hasAttr<AlwaysInlineAttr>())
Roman Divackydd9bfb22014-01-15 19:07:16 +0000596 Fn->addFnAttr(llvm::Attribute::NoInline);
597 }
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000598
Richard Smith9c6890a2012-11-01 22:30:59 +0000599 if (getLangOpts().OpenCL) {
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000600 // Add metadata for a kernel function.
601 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000602 EmitOpenCLKernelMetadata(FD, Fn);
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000603 }
604
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000605 // If we are checking function types, emit a function type signature as
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000606 // prologue data.
Alexey Samsonovedf99a92014-11-07 22:29:38 +0000607 if (getLangOpts().CPlusPlus && SanOpts.has(SanitizerKind::Function)) {
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000608 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000609 if (llvm::Constant *PrologueSig =
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000610 CGM.getTargetCodeGenInfo().getUBSanFunctionSignature(CGM)) {
611 llvm::Constant *FTRTTIConst =
612 CGM.GetAddrOfRTTIDescriptor(FD->getType(), /*ForEH=*/true);
Peter Collingbourne1a0a9a32014-12-03 02:08:51 +0000613 llvm::Constant *PrologueStructElems[] = { PrologueSig, FTRTTIConst };
614 llvm::Constant *PrologueStructConst =
615 llvm::ConstantStruct::getAnon(PrologueStructElems, /*Packed=*/true);
616 Fn->setPrologueData(PrologueStructConst);
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000617 }
618 }
619 }
620
Daniel Dunbar75283ff2008-11-11 02:29:29 +0000621 llvm::BasicBlock *EntryBB = createBasicBlock("entry", CurFn);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000622
Chris Lattner5696e7b2008-06-17 18:05:57 +0000623 // Create a marker to make it easy to insert allocas into the entryblock
624 // later. Don't create this with the builder, because we don't want it
625 // folded.
Chris Lattner5e016ae2010-06-27 07:15:29 +0000626 llvm::Value *Undef = llvm::UndefValue::get(Int32Ty);
627 AllocaInsertPt = new llvm::BitCastInst(Undef, Int32Ty, "", EntryBB);
Chris Lattner47640222009-03-22 00:24:14 +0000628 if (Builder.isNamePreserving())
629 AllocaInsertPt->setName("allocapt");
Mike Stump11289f42009-09-09 15:08:12 +0000630
John McCallbd309292010-07-06 01:34:17 +0000631 ReturnBlock = getJumpDestInCurrentScope("return");
Mike Stump11289f42009-09-09 15:08:12 +0000632
Chris Lattner5696e7b2008-06-17 18:05:57 +0000633 Builder.SetInsertPoint(EntryBB);
Mike Stump11289f42009-09-09 15:08:12 +0000634
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000635 // Emit subprogram debug descriptor.
Anders Carlsson63784f42009-02-13 08:11:52 +0000636 if (CGDebugInfo *DI = getDebugInfo()) {
Jordan Rose5c382722013-03-08 21:51:21 +0000637 SmallVector<QualType, 16> ArgTypes;
Eric Christopher4b4beb22011-10-21 23:30:10 +0000638 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
639 i != e; ++i) {
Jordan Rose5c382722013-03-08 21:51:21 +0000640 ArgTypes.push_back((*i)->getType());
Eric Christopher4b4beb22011-10-21 23:30:10 +0000641 }
642
John McCalldb40c7f2010-12-14 08:05:40 +0000643 QualType FnType =
Jordan Rose5c382722013-03-08 21:51:21 +0000644 getContext().getFunctionType(RetTy, ArgTypes,
John McCalldb40c7f2010-12-14 08:05:40 +0000645 FunctionProtoType::ExtProtoInfo());
Adrian Prantl42d71b92014-04-10 23:21:53 +0000646 DI->EmitFunctionStart(GD, Loc, StartLoc, FnType, CurFn, Builder);
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000647 }
648
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000649 if (ShouldInstrumentFunction())
650 EmitFunctionInstrumentation("__cyg_profile_func_enter");
Chris Lattner3c77a352010-06-22 00:03:40 +0000651
Roman Divacky178e01602011-02-10 16:52:03 +0000652 if (CGM.getCodeGenOpts().InstrumentForProfiling)
653 EmitMCountInstrumentation();
654
Eli Friedman4b1942c2009-12-04 02:43:40 +0000655 if (RetTy->isVoidType()) {
656 // Void type; nothing to return.
Craig Topper8a13c412014-05-21 05:09:00 +0000657 ReturnValue = nullptr;
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000658
659 // Count the implicit return.
660 if (!endsWithReturn(D))
661 ++NumReturnExprs;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000662 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
John McCall47fb9502013-03-07 21:37:08 +0000663 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
Eli Friedman4b1942c2009-12-04 02:43:40 +0000664 // Indirect aggregate return; emit returned value directly into sret slot.
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000665 // This reduces code size, and affects correctness in C++.
Reid Kleckner37abaca2014-05-09 22:46:15 +0000666 auto AI = CurFn->arg_begin();
667 if (CurFnInfo->getReturnInfo().isSRetAfterThis())
668 ++AI;
669 ReturnValue = AI;
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000670 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
671 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
672 // Load the sret pointer from the argument struct and return into that.
673 unsigned Idx = CurFnInfo->getReturnInfo().getInAllocaFieldIndex();
674 llvm::Function::arg_iterator EI = CurFn->arg_end();
675 --EI;
676 llvm::Value *Addr = Builder.CreateStructGEP(EI, Idx);
677 ReturnValue = Builder.CreateLoad(Addr, "agg.result");
Eli Friedman4b1942c2009-12-04 02:43:40 +0000678 } else {
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000679 ReturnValue = CreateIRTemp(RetTy, "retval");
John McCall31168b02011-06-15 23:02:42 +0000680
681 // Tell the epilog emitter to autorelease the result. We do this
682 // now so that various specialized functions can suppress it
683 // during their IR-generation.
David Blaikiebbafb8a2012-03-11 07:00:24 +0000684 if (getLangOpts().ObjCAutoRefCount &&
John McCall31168b02011-06-15 23:02:42 +0000685 !CurFnInfo->isReturnsRetained() &&
686 RetTy->isObjCRetainableType())
687 AutoreleaseResult = true;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000688 }
689
Mike Stump1d849212009-12-07 23:38:24 +0000690 EmitStartEHSpec(CurCodeDecl);
John McCall31168b02011-06-15 23:02:42 +0000691
692 PrologueCleanupDepth = EHStack.stable_begin();
Daniel Dunbard931a872009-02-02 22:03:45 +0000693 EmitFunctionProlog(*CurFnInfo, CurFn, Args);
Mike Stump11289f42009-09-09 15:08:12 +0000694
Eli Friedman9fbeba02012-02-11 02:57:39 +0000695 if (D && isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) {
John McCall5d865c322010-08-31 07:33:07 +0000696 CGM.getCXXABI().EmitInstanceFunctionProlog(*this);
Eli Friedman9fbeba02012-02-11 02:57:39 +0000697 const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
698 if (MD->getParent()->isLambda() &&
699 MD->getOverloadedOperator() == OO_Call) {
700 // We're in a lambda; figure out the captures.
701 MD->getParent()->getCaptureFields(LambdaCaptureFields,
702 LambdaThisCaptureField);
703 if (LambdaThisCaptureField) {
704 // If this lambda captures this, load it.
John McCalldec348f72013-05-03 07:33:41 +0000705 LValue ThisLValue = EmitLValueForLambdaField(LambdaThisCaptureField);
Nick Lewycky2d84e842013-10-02 02:29:49 +0000706 CXXThisValue = EmitLoadOfLValue(ThisLValue,
707 SourceLocation()).getScalarVal();
Eli Friedman9fbeba02012-02-11 02:57:39 +0000708 }
Alexey Bataev39c81e22014-08-28 04:28:19 +0000709 for (auto *FD : MD->getParent()->fields()) {
710 if (FD->hasCapturedVLAType()) {
711 auto *ExprArg = EmitLoadOfLValue(EmitLValueForLambdaField(FD),
712 SourceLocation()).getScalarVal();
713 auto VAT = FD->getCapturedVLAType();
714 VLASizeMap[VAT->getSizeExpr()] = ExprArg;
715 }
716 }
Eli Friedman9fbeba02012-02-11 02:57:39 +0000717 } else {
718 // Not in a lambda; just use 'this' from the method.
719 // FIXME: Should we generate a new load for each use of 'this'? The
720 // fast register allocator would be happier...
721 CXXThisValue = CXXABIThisValue;
722 }
723 }
John McCall347132b2010-02-16 22:04:33 +0000724
Anders Carlssonc20879a2008-12-20 21:28:43 +0000725 // If any of the arguments have a variably modified type, make sure to
726 // emit the type size.
727 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
728 i != e; ++i) {
Eli Friedman1f576832012-11-14 22:09:59 +0000729 const VarDecl *VD = *i;
730
731 // Dig out the type as written from ParmVarDecls; it's unclear whether
732 // the standard (C99 6.9.1p10) requires this, but we're following the
733 // precedent set by gcc.
734 QualType Ty;
735 if (const ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(VD))
736 Ty = PVD->getOriginalType();
737 else
738 Ty = VD->getType();
Anders Carlssonc20879a2008-12-20 21:28:43 +0000739
740 if (Ty->isVariablyModifiedType())
John McCall23c29fe2011-06-24 21:55:10 +0000741 EmitVariablyModifiedType(Ty);
Anders Carlssonc20879a2008-12-20 21:28:43 +0000742 }
Eric Christopher7cdf9482011-10-13 21:45:18 +0000743 // Emit a location at the end of the prologue.
744 if (CGDebugInfo *DI = getDebugInfo())
745 DI->EmitLocation(Builder, StartLoc);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000746}
Eli Friedman3d421e12008-08-25 21:31:01 +0000747
Richard Smithb47c36f2013-11-05 09:12:18 +0000748void CodeGenFunction::EmitFunctionBody(FunctionArgList &Args,
749 const Stmt *Body) {
Justin Bogneref512b92014-01-06 22:27:43 +0000750 RegionCounter Cnt = getPGORegionCounter(Body);
751 Cnt.beginRegion(Builder);
Richard Smithb47c36f2013-11-05 09:12:18 +0000752 if (const CompoundStmt *S = dyn_cast<CompoundStmt>(Body))
David Blaikie0a21d0d2013-01-26 22:16:26 +0000753 EmitCompoundStmtWithoutScope(*S);
754 else
Richard Smithb47c36f2013-11-05 09:12:18 +0000755 EmitStmt(Body);
John McCall89b12b32010-02-18 03:17:58 +0000756}
757
Bob Wilsonbf854f02014-02-17 19:21:09 +0000758/// When instrumenting to collect profile data, the counts for some blocks
759/// such as switch cases need to not include the fall-through counts, so
760/// emit a branch around the instrumentation code. When not instrumenting,
761/// this just calls EmitBlock().
762void CodeGenFunction::EmitBlockWithFallThrough(llvm::BasicBlock *BB,
763 RegionCounter &Cnt) {
Craig Topper8a13c412014-05-21 05:09:00 +0000764 llvm::BasicBlock *SkipCountBB = nullptr;
Bob Wilsonbf854f02014-02-17 19:21:09 +0000765 if (HaveInsertPoint() && CGM.getCodeGenOpts().ProfileInstrGenerate) {
766 // When instrumenting for profiling, the fallthrough to certain
767 // statements needs to skip over the instrumentation code so that we
768 // get an accurate count.
769 SkipCountBB = createBasicBlock("skipcount");
770 EmitBranch(SkipCountBB);
771 }
772 EmitBlock(BB);
773 Cnt.beginRegion(Builder, /*AddIncomingFallThrough=*/true);
774 if (SkipCountBB)
775 EmitBlock(SkipCountBB);
776}
777
John McCall8601a752010-08-03 22:46:07 +0000778/// Tries to mark the given function nounwind based on the
779/// non-existence of any throwing calls within it. We believe this is
780/// lightweight enough to do at -O0.
781static void TryMarkNoThrow(llvm::Function *F) {
John McCall59966992010-08-11 22:38:33 +0000782 // LLVM treats 'nounwind' on a function as part of the type, so we
783 // can't do this on functions that can be overwritten.
784 if (F->mayBeOverridden()) return;
785
John McCall8601a752010-08-03 22:46:07 +0000786 for (llvm::Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
787 for (llvm::BasicBlock::iterator
788 BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
Bill Wendlingf0724e82011-09-19 20:31:14 +0000789 if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(&*BI)) {
John McCall8601a752010-08-03 22:46:07 +0000790 if (!Call->doesNotThrow())
791 return;
Bill Wendlingf0724e82011-09-19 20:31:14 +0000792 } else if (isa<llvm::ResumeInst>(&*BI)) {
793 return;
794 }
Bill Wendling73e465e2012-10-10 03:13:20 +0000795 F->setDoesNotThrow();
John McCall8601a752010-08-03 22:46:07 +0000796}
797
Richard Smithb47c36f2013-11-05 09:12:18 +0000798static void EmitSizedDeallocationFunction(CodeGenFunction &CGF,
799 const FunctionDecl *UnsizedDealloc) {
800 // This is a weak discardable definition of the sized deallocation function.
801 CGF.CurFn->setLinkage(llvm::Function::LinkOnceAnyLinkage);
802
803 // Call the unsized deallocation function and forward the first argument
804 // unchanged.
805 llvm::Constant *Unsized = CGF.CGM.GetAddrOfFunction(UnsizedDealloc);
806 CGF.Builder.CreateCall(Unsized, &*CGF.CurFn->arg_begin());
807}
808
John McCalla738c252011-03-09 04:27:21 +0000809void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn,
810 const CGFunctionInfo &FnInfo) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000811 const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
Michael Ilseman686240a2012-12-04 00:29:55 +0000812
Anders Carlsson63784f42009-02-13 08:11:52 +0000813 // Check if we should generate debug info for this function.
David Blaikie92848de2013-08-26 20:33:21 +0000814 if (FD->hasAttr<NoDebugAttr>())
Craig Topper8a13c412014-05-21 05:09:00 +0000815 DebugInfo = nullptr; // disable debug info indefinitely for this function
Mike Stump11289f42009-09-09 15:08:12 +0000816
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000817 FunctionArgList Args;
Alp Toker314cc812014-01-25 16:55:45 +0000818 QualType ResTy = FD->getReturnType();
Mike Stump11289f42009-09-09 15:08:12 +0000819
Mike Stumpbee78dd2009-12-04 23:26:17 +0000820 CurGD = GD;
Reid Kleckner89077a12013-12-17 19:46:40 +0000821 const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD);
822 if (MD && MD->isInstance()) {
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000823 if (CGM.getCXXABI().HasThisReturn(GD))
824 ResTy = MD->getThisType(getContext());
David Majnemer0c0b6d92014-10-31 20:09:12 +0000825 else if (CGM.getCXXABI().hasMostDerivedReturn(GD))
826 ResTy = CGM.getContext().VoidPtrTy;
Reid Kleckner89077a12013-12-17 19:46:40 +0000827 CGM.getCXXABI().buildThisParam(*this, Args);
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000828 }
Alexey Samsonov3551e312014-08-13 20:06:24 +0000829
830 Args.append(FD->param_begin(), FD->param_end());
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000831
Reid Kleckner89077a12013-12-17 19:46:40 +0000832 if (MD && (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)))
833 CGM.getCXXABI().addImplicitStructorParams(*this, ResTy, Args);
834
John McCall89b12b32010-02-18 03:17:58 +0000835 SourceRange BodyRange;
836 if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange();
Adrian Prantldc237b52013-05-16 00:41:26 +0000837 CurEHLocation = BodyRange.getEnd();
Anders Carlsson438cf922009-11-06 02:55:43 +0000838
Adrian Prantl42d71b92014-04-10 23:21:53 +0000839 // Use the location of the start of the function to determine where
840 // the function definition is located. By default use the location
841 // of the declaration as the location for the subprogram. A function
842 // may lack a declaration in the source code if it is created by code
843 // gen. (examples: _GLOBAL__I_a, __cxx_global_array_dtor, thunk).
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000844 SourceLocation Loc = FD->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000845
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000846 // If this is a function specialization then use the pattern body
847 // as the location for the function.
848 if (const FunctionDecl *SpecDecl = FD->getTemplateInstantiationPattern())
849 if (SpecDecl->hasBody(SpecDecl))
850 Loc = SpecDecl->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000851
John McCall89b12b32010-02-18 03:17:58 +0000852 // Emit the standard function prologue.
Adrian Prantl42d71b92014-04-10 23:21:53 +0000853 StartFunction(GD, ResTy, Fn, FnInfo, Args, Loc, BodyRange.getBegin());
Anders Carlsson438cf922009-11-06 02:55:43 +0000854
John McCall89b12b32010-02-18 03:17:58 +0000855 // Generate the body of the function.
Alex Lorenzee024992014-08-04 18:41:51 +0000856 PGO.checkGlobalDecl(GD);
Bob Wilsonda1ebed2014-03-06 04:55:41 +0000857 PGO.assignRegionCounters(GD.getDecl(), CurFn);
John McCallb81884d2010-02-19 09:25:03 +0000858 if (isa<CXXDestructorDecl>(FD))
859 EmitDestructorBody(Args);
860 else if (isa<CXXConstructorDecl>(FD))
861 EmitConstructorBody(Args);
Richard Smith9c6890a2012-11-01 22:30:59 +0000862 else if (getLangOpts().CUDA &&
Peter Collingbournefa4d6032011-10-06 18:51:56 +0000863 !CGM.getCodeGenOpts().CUDAIsDevice &&
864 FD->hasAttr<CUDAGlobalAttr>())
865 CGM.getCUDARuntime().EmitDeviceStubBody(*this, Args);
Eli Friedman5a6d5072012-02-16 01:37:33 +0000866 else if (isa<CXXConversionDecl>(FD) &&
Douglas Gregor355efbb2012-02-17 03:02:34 +0000867 cast<CXXConversionDecl>(FD)->isLambdaToBlockPointerConversion()) {
868 // The lambda conversion to block pointer is special; the semantics can't be
869 // expressed in the AST, so IRGen needs to special-case it.
870 EmitLambdaToBlockPointerBody(Args);
871 } else if (isa<CXXMethodDecl>(FD) &&
872 cast<CXXMethodDecl>(FD)->isLambdaStaticInvoker()) {
Faisal Vali2b391ab2013-09-26 19:54:12 +0000873 // The lambda static invoker function is special, because it forwards or
Douglas Gregor355efbb2012-02-17 03:02:34 +0000874 // clones the body of the function call operator (but is actually static).
875 EmitLambdaStaticInvokeFunction(cast<CXXMethodDecl>(FD));
Lang Hamesbf122742013-02-17 07:22:09 +0000876 } else if (FD->isDefaulted() && isa<CXXMethodDecl>(FD) &&
Nick Lewyckyb39be1f2013-09-10 05:14:39 +0000877 (cast<CXXMethodDecl>(FD)->isCopyAssignmentOperator() ||
878 cast<CXXMethodDecl>(FD)->isMoveAssignmentOperator())) {
Lang Hamesbf122742013-02-17 07:22:09 +0000879 // Implicit copy-assignment gets the same special treatment as implicit
880 // copy-constructors.
881 emitImplicitAssignmentOperatorBody(Args);
Richard Smithb47c36f2013-11-05 09:12:18 +0000882 } else if (Stmt *Body = FD->getBody()) {
883 EmitFunctionBody(Args, Body);
884 } else if (FunctionDecl *UnsizedDealloc =
885 FD->getCorrespondingUnsizedGlobalDeallocationFunction()) {
886 // Global sized deallocation functions get an implicit weak definition if
887 // they don't have an explicit definition.
888 EmitSizedDeallocationFunction(*this, UnsizedDealloc);
889 } else
890 llvm_unreachable("no definition for emitted function");
Anders Carlssonff8cce42010-02-07 19:45:40 +0000891
Richard Smith9f9e5822012-10-04 23:52:29 +0000892 // C++11 [stmt.return]p2:
893 // Flowing off the end of a function [...] results in undefined behavior in
894 // a value-returning function.
895 // C11 6.9.1p12:
896 // If the '}' that terminates a function is reached, and the value of the
897 // function call is used by the caller, the behavior is undefined.
Reid Kleckner9b3e3df2014-09-04 20:04:38 +0000898 if (getLangOpts().CPlusPlus && !FD->hasImplicitReturnZero() && !SawAsmBlock &&
Alp Toker314cc812014-01-25 16:55:45 +0000899 !FD->getReturnType()->isVoidType() && Builder.GetInsertBlock()) {
Alexey Samsonovedf99a92014-11-07 22:29:38 +0000900 if (SanOpts.has(SanitizerKind::Return)) {
Alexey Samsonov24cad992014-07-17 18:46:27 +0000901 SanitizerScope SanScope(this);
Alexey Samsonove396bfc2014-11-11 22:03:54 +0000902 llvm::Value *IsFalse = Builder.getFalse();
903 EmitCheck(std::make_pair(IsFalse, SanitizerKind::Return),
904 "missing_return", EmitCheckSourceLocation(FD->getLocation()),
905 None);
Alexey Samsonov24cad992014-07-17 18:46:27 +0000906 } else if (CGM.getCodeGenOpts().OptimizationLevel == 0)
Richard Smith6b4ebcc2012-10-15 00:23:07 +0000907 Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::trap));
Richard Smith9f9e5822012-10-04 23:52:29 +0000908 Builder.CreateUnreachable();
909 Builder.ClearInsertionPoint();
910 }
911
John McCall89b12b32010-02-18 03:17:58 +0000912 // Emit the standard function epilogue.
913 FinishFunction(BodyRange.getEnd());
John McCall8601a752010-08-03 22:46:07 +0000914
915 // If we haven't marked the function nothrow through other means, do
916 // a quick pass now to see if we can.
917 if (!CurFn->doesNotThrow())
918 TryMarkNoThrow(CurFn);
Justin Bogneref512b92014-01-06 22:27:43 +0000919
Duncan P. N. Exon Smith2fe531c2014-03-17 21:18:30 +0000920 PGO.emitInstrumentationData();
Justin Bogneref512b92014-01-06 22:27:43 +0000921 PGO.destroyRegionCounters();
Chris Lattner5696e7b2008-06-17 18:05:57 +0000922}
923
Chris Lattner5b1964b2008-11-11 07:41:27 +0000924/// ContainsLabel - Return true if the statement contains a label in it. If
925/// this statement is not executed normally, it not containing a label means
926/// that we can just remove the code.
927bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) {
928 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000929 if (!S) return false;
Mike Stump11289f42009-09-09 15:08:12 +0000930
Chris Lattner5b1964b2008-11-11 07:41:27 +0000931 // If this is a label, we have to emit the code, consider something like:
932 // if (0) { ... foo: bar(); } goto foo;
Chris Lattner29911cc2011-02-28 00:18:40 +0000933 //
934 // TODO: If anyone cared, we could track __label__'s, since we know that you
935 // can't jump to one from outside their declared region.
Chris Lattner5b1964b2008-11-11 07:41:27 +0000936 if (isa<LabelStmt>(S))
937 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000938
Chris Lattner5b1964b2008-11-11 07:41:27 +0000939 // If this is a case/default statement, and we haven't seen a switch, we have
940 // to emit the code.
941 if (isa<SwitchCase>(S) && !IgnoreCaseStmts)
942 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000943
Chris Lattner5b1964b2008-11-11 07:41:27 +0000944 // If this is a switch statement, we want to ignore cases below it.
945 if (isa<SwitchStmt>(S))
946 IgnoreCaseStmts = true;
Mike Stump11289f42009-09-09 15:08:12 +0000947
Chris Lattner5b1964b2008-11-11 07:41:27 +0000948 // Scan subexpressions for verboten labels.
John McCall8322c3a2011-02-13 04:07:26 +0000949 for (Stmt::const_child_range I = S->children(); I; ++I)
Chris Lattner5b1964b2008-11-11 07:41:27 +0000950 if (ContainsLabel(*I, IgnoreCaseStmts))
951 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000952
Chris Lattner5b1964b2008-11-11 07:41:27 +0000953 return false;
954}
955
Chris Lattner29911cc2011-02-28 00:18:40 +0000956/// containsBreak - Return true if the statement contains a break out of it.
957/// If the statement (recursively) contains a switch or loop with a break
958/// inside of it, this is fine.
959bool CodeGenFunction::containsBreak(const Stmt *S) {
960 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000961 if (!S) return false;
Chris Lattner29911cc2011-02-28 00:18:40 +0000962
963 // If this is a switch or loop that defines its own break scope, then we can
964 // include it and anything inside of it.
965 if (isa<SwitchStmt>(S) || isa<WhileStmt>(S) || isa<DoStmt>(S) ||
966 isa<ForStmt>(S))
Chris Lattner30db8282011-02-28 00:42:31 +0000967 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000968
Chris Lattner30db8282011-02-28 00:42:31 +0000969 if (isa<BreakStmt>(S))
Chris Lattner29911cc2011-02-28 00:18:40 +0000970 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000971
Chris Lattner29911cc2011-02-28 00:18:40 +0000972 // Scan subexpressions for verboten breaks.
973 for (Stmt::const_child_range I = S->children(); I; ++I)
974 if (containsBreak(*I))
975 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000976
Chris Lattner29911cc2011-02-28 00:18:40 +0000977 return false;
978}
979
Chris Lattnercd439292008-11-12 08:04:58 +0000980
Chris Lattner41c6ab52011-02-27 23:02:32 +0000981/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
982/// to a constant, or if it does but contains a label, return false. If it
983/// constant folds return true and set the boolean result in Result.
984bool CodeGenFunction::ConstantFoldsToSimpleInteger(const Expr *Cond,
985 bool &ResultBool) {
Richard Trieuc320c742012-07-23 20:21:35 +0000986 llvm::APSInt ResultInt;
Chris Lattner29911cc2011-02-28 00:18:40 +0000987 if (!ConstantFoldsToSimpleInteger(Cond, ResultInt))
988 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000989
Chris Lattner29911cc2011-02-28 00:18:40 +0000990 ResultBool = ResultInt.getBoolValue();
991 return true;
992}
993
994/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
995/// to a constant, or if it does but contains a label, return false. If it
996/// constant folds return true and set the folded value.
997bool CodeGenFunction::
Richard Trieuc320c742012-07-23 20:21:35 +0000998ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &ResultInt) {
Daniel Dunbarf32443c2008-11-12 22:37:10 +0000999 // FIXME: Rename and handle conversion of other evaluatable things
1000 // to bool.
Richard Smith5fab0c92011-12-28 19:48:30 +00001001 llvm::APSInt Int;
1002 if (!Cond->EvaluateAsInt(Int, getContext()))
Chris Lattner41c6ab52011-02-27 23:02:32 +00001003 return false; // Not foldable, not integer or not fully evaluatable.
Richard Smith5fab0c92011-12-28 19:48:30 +00001004
Chris Lattnercd439292008-11-12 08:04:58 +00001005 if (CodeGenFunction::ContainsLabel(Cond))
Chris Lattner41c6ab52011-02-27 23:02:32 +00001006 return false; // Contains a label.
Richard Smith5fab0c92011-12-28 19:48:30 +00001007
1008 ResultInt = Int;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001009 return true;
Chris Lattnercd439292008-11-12 08:04:58 +00001010}
1011
1012
Chris Lattner29911cc2011-02-28 00:18:40 +00001013
Chris Lattnercd439292008-11-12 08:04:58 +00001014/// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if
1015/// statement) to the specified blocks. Based on the condition, this might try
1016/// to simplify the codegen of the conditional based on the branch.
1017///
1018void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
1019 llvm::BasicBlock *TrueBlock,
Justin Bogneref512b92014-01-06 22:27:43 +00001020 llvm::BasicBlock *FalseBlock,
1021 uint64_t TrueCount) {
Peter Collingbourne91147592011-04-15 00:35:48 +00001022 Cond = Cond->IgnoreParens();
Mike Stump11289f42009-09-09 15:08:12 +00001023
Chris Lattnercd439292008-11-12 08:04:58 +00001024 if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) {
Justin Bogneref512b92014-01-06 22:27:43 +00001025
Chris Lattnercd439292008-11-12 08:04:58 +00001026 // Handle X && Y in a condition.
John McCalle3027922010-08-25 11:45:40 +00001027 if (CondBOp->getOpcode() == BO_LAnd) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001028 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1029
Chris Lattnercd439292008-11-12 08:04:58 +00001030 // If we have "1 && X", simplify the code. "0 && X" would have constant
1031 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001032 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001033 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1034 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001035 // br(1 && X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001036 Cnt.beginRegion(Builder);
1037 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1038 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001039 }
Mike Stump11289f42009-09-09 15:08:12 +00001040
Chris Lattnercd439292008-11-12 08:04:58 +00001041 // If we have "X && 1", simplify the code to use an uncond branch.
1042 // "X && 0" would have been constant folded to 0.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001043 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1044 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001045 // br(X && 1) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001046 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1047 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001048 }
Mike Stump11289f42009-09-09 15:08:12 +00001049
Chris Lattnercd439292008-11-12 08:04:58 +00001050 // Emit the LHS as a conditional. If the LHS conditional is false, we
1051 // want to jump to the FalseBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001052 llvm::BasicBlock *LHSTrue = createBasicBlock("land.lhs.true");
Justin Bogneref512b92014-01-06 22:27:43 +00001053 // The counter tells us how often we evaluate RHS, and all of TrueCount
1054 // can be propagated to that branch.
1055 uint64_t RHSCount = Cnt.getCount();
John McCallce1de612011-01-26 04:00:11 +00001056
1057 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001058 EmitBranchOnBoolExpr(CondBOp->getLHS(), LHSTrue, FalseBlock, RHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001059 EmitBlock(LHSTrue);
Mike Stump11289f42009-09-09 15:08:12 +00001060
Anders Carlsson60ddba62010-01-24 00:20:05 +00001061 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001062 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001063 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001064 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, TrueCount);
John McCallce1de612011-01-26 04:00:11 +00001065 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001066
Chris Lattnercd439292008-11-12 08:04:58 +00001067 return;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001068 }
Michael Ilseman686240a2012-12-04 00:29:55 +00001069
Chris Lattner41c6ab52011-02-27 23:02:32 +00001070 if (CondBOp->getOpcode() == BO_LOr) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001071 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1072
Chris Lattnercd439292008-11-12 08:04:58 +00001073 // If we have "0 || X", simplify the code. "1 || X" would have constant
1074 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001075 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001076 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1077 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001078 // br(0 || X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001079 Cnt.beginRegion(Builder);
1080 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1081 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001082 }
Mike Stump11289f42009-09-09 15:08:12 +00001083
Chris Lattnercd439292008-11-12 08:04:58 +00001084 // If we have "X || 0", simplify the code to use an uncond branch.
1085 // "X || 1" would have been constant folded to 1.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001086 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1087 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001088 // br(X || 0) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001089 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1090 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001091 }
Mike Stump11289f42009-09-09 15:08:12 +00001092
Chris Lattnercd439292008-11-12 08:04:58 +00001093 // Emit the LHS as a conditional. If the LHS conditional is true, we
1094 // want to jump to the TrueBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001095 llvm::BasicBlock *LHSFalse = createBasicBlock("lor.lhs.false");
Justin Bogneref512b92014-01-06 22:27:43 +00001096 // We have the count for entry to the RHS and for the whole expression
1097 // being true, so we can divy up True count between the short circuit and
1098 // the RHS.
Justin Bognerbe614c72014-01-23 02:54:30 +00001099 uint64_t LHSCount = Cnt.getParentCount() - Cnt.getCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001100 uint64_t RHSCount = TrueCount - LHSCount;
John McCallce1de612011-01-26 04:00:11 +00001101
1102 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001103 EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, LHSFalse, LHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001104 EmitBlock(LHSFalse);
Mike Stump11289f42009-09-09 15:08:12 +00001105
Anders Carlsson60ddba62010-01-24 00:20:05 +00001106 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001107 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001108 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001109 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, RHSCount);
1110
John McCallce1de612011-01-26 04:00:11 +00001111 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001112
Chris Lattnercd439292008-11-12 08:04:58 +00001113 return;
1114 }
Chris Lattnerd9537732008-11-12 08:13:36 +00001115 }
Mike Stump11289f42009-09-09 15:08:12 +00001116
Chris Lattnerd9537732008-11-12 08:13:36 +00001117 if (const UnaryOperator *CondUOp = dyn_cast<UnaryOperator>(Cond)) {
1118 // br(!x, t, f) -> br(x, f, t)
Justin Bogneref512b92014-01-06 22:27:43 +00001119 if (CondUOp->getOpcode() == UO_LNot) {
1120 // Negate the count.
1121 uint64_t FalseCount = PGO.getCurrentRegionCount() - TrueCount;
1122 // Negate the condition and swap the destination blocks.
1123 return EmitBranchOnBoolExpr(CondUOp->getSubExpr(), FalseBlock, TrueBlock,
1124 FalseCount);
1125 }
Chris Lattnercd439292008-11-12 08:04:58 +00001126 }
Mike Stump11289f42009-09-09 15:08:12 +00001127
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001128 if (const ConditionalOperator *CondOp = dyn_cast<ConditionalOperator>(Cond)) {
Eli Friedman248f8982012-02-14 03:54:45 +00001129 // br(c ? x : y, t, f) -> br(c, br(x, t, f), br(y, t, f))
1130 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1131 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001132
Justin Bogneref512b92014-01-06 22:27:43 +00001133 RegionCounter Cnt = getPGORegionCounter(CondOp);
Eli Friedman248f8982012-02-14 03:54:45 +00001134 ConditionalEvaluation cond(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001135 EmitBranchOnBoolExpr(CondOp->getCond(), LHSBlock, RHSBlock, Cnt.getCount());
1136
1137 // When computing PGO branch weights, we only know the overall count for
1138 // the true block. This code is essentially doing tail duplication of the
1139 // naive code-gen, introducing new edges for which counts are not
1140 // available. Divide the counts proportionally between the LHS and RHS of
1141 // the conditional operator.
1142 uint64_t LHSScaledTrueCount = 0;
1143 if (TrueCount) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001144 double LHSRatio = Cnt.getCount() / (double) Cnt.getParentCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001145 LHSScaledTrueCount = TrueCount * LHSRatio;
1146 }
John McCallce1de612011-01-26 04:00:11 +00001147
Eli Friedman248f8982012-02-14 03:54:45 +00001148 cond.begin(*this);
1149 EmitBlock(LHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001150 Cnt.beginRegion(Builder);
1151 EmitBranchOnBoolExpr(CondOp->getLHS(), TrueBlock, FalseBlock,
1152 LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001153 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001154
Eli Friedman248f8982012-02-14 03:54:45 +00001155 cond.begin(*this);
1156 EmitBlock(RHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001157 EmitBranchOnBoolExpr(CondOp->getRHS(), TrueBlock, FalseBlock,
1158 TrueCount - LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001159 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001160
Eli Friedman248f8982012-02-14 03:54:45 +00001161 return;
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001162 }
1163
Richard Smithea852322013-05-07 21:53:22 +00001164 if (const CXXThrowExpr *Throw = dyn_cast<CXXThrowExpr>(Cond)) {
1165 // Conditional operator handling can give us a throw expression as a
1166 // condition for a case like:
1167 // br(c ? throw x : y, t, f) -> br(c, br(throw x, t, f), br(y, t, f)
1168 // Fold this to:
1169 // br(c, throw x, br(y, t, f))
1170 EmitCXXThrowExpr(Throw, /*KeepInsertionPoint*/false);
1171 return;
1172 }
1173
Justin Bogneref512b92014-01-06 22:27:43 +00001174 // Create branch weights based on the number of times we get here and the
1175 // number of times the condition should be true.
Bob Wilsonbf854f02014-02-17 19:21:09 +00001176 uint64_t CurrentCount = std::max(PGO.getCurrentRegionCount(), TrueCount);
Justin Bogneref512b92014-01-06 22:27:43 +00001177 llvm::MDNode *Weights = PGO.createBranchWeights(TrueCount,
1178 CurrentCount - TrueCount);
1179
Chris Lattnercd439292008-11-12 08:04:58 +00001180 // Emit the code with the fully general case.
1181 llvm::Value *CondV = EvaluateExprAsBool(Cond);
Justin Bogneref512b92014-01-06 22:27:43 +00001182 Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
Chris Lattnercd439292008-11-12 08:04:58 +00001183}
1184
Daniel Dunbara7c8cf62008-08-16 00:56:44 +00001185/// ErrorUnsupported - Print out an error that codegen doesn't support the
Chris Lattnerfc944342007-12-02 01:43:38 +00001186/// specified stmt yet.
David Blaikie4a9ec7b2013-08-19 21:02:26 +00001187void CodeGenFunction::ErrorUnsupported(const Stmt *S, const char *Type) {
1188 CGM.ErrorUnsupported(S, Type);
Chris Lattnerfc944342007-12-02 01:43:38 +00001189}
1190
John McCall2725aa12011-02-01 21:35:06 +00001191/// emitNonZeroVLAInit - Emit the "zero" initialization of a
1192/// variable-length array whose elements have a non-zero bit-pattern.
1193///
James Dennettbe302452012-06-15 22:10:14 +00001194/// \param baseType the inner-most element type of the array
John McCall2725aa12011-02-01 21:35:06 +00001195/// \param src - a char* pointing to the bit-pattern for a single
1196/// base element of the array
1197/// \param sizeInChars - the total size of the VLA, in chars
John McCall2725aa12011-02-01 21:35:06 +00001198static void emitNonZeroVLAInit(CodeGenFunction &CGF, QualType baseType,
Michael Ilseman686240a2012-12-04 00:29:55 +00001199 llvm::Value *dest, llvm::Value *src,
John McCall2725aa12011-02-01 21:35:06 +00001200 llvm::Value *sizeInChars) {
1201 std::pair<CharUnits,CharUnits> baseSizeAndAlign
1202 = CGF.getContext().getTypeInfoInChars(baseType);
1203
1204 CGBuilderTy &Builder = CGF.Builder;
1205
1206 llvm::Value *baseSizeInChars
1207 = llvm::ConstantInt::get(CGF.IntPtrTy, baseSizeAndAlign.first.getQuantity());
1208
Chris Lattner2192fe52011-07-18 04:24:23 +00001209 llvm::Type *i8p = Builder.getInt8PtrTy();
John McCall2725aa12011-02-01 21:35:06 +00001210
1211 llvm::Value *begin = Builder.CreateBitCast(dest, i8p, "vla.begin");
1212 llvm::Value *end = Builder.CreateInBoundsGEP(dest, sizeInChars, "vla.end");
1213
1214 llvm::BasicBlock *originBB = CGF.Builder.GetInsertBlock();
1215 llvm::BasicBlock *loopBB = CGF.createBasicBlock("vla-init.loop");
1216 llvm::BasicBlock *contBB = CGF.createBasicBlock("vla-init.cont");
1217
1218 // Make a loop over the VLA. C99 guarantees that the VLA element
1219 // count must be nonzero.
1220 CGF.EmitBlock(loopBB);
1221
Jay Foad20c0f022011-03-30 11:28:58 +00001222 llvm::PHINode *cur = Builder.CreatePHI(i8p, 2, "vla.cur");
John McCall2725aa12011-02-01 21:35:06 +00001223 cur->addIncoming(begin, originBB);
1224
1225 // memcpy the individual element bit-pattern.
1226 Builder.CreateMemCpy(cur, src, baseSizeInChars,
1227 baseSizeAndAlign.second.getQuantity(),
1228 /*volatile*/ false);
1229
1230 // Go to the next element.
1231 llvm::Value *next = Builder.CreateConstInBoundsGEP1_32(cur, 1, "vla.next");
1232
1233 // Leave if that's the end of the VLA.
1234 llvm::Value *done = Builder.CreateICmpEQ(next, end, "vla-init.isdone");
1235 Builder.CreateCondBr(done, contBB, loopBB);
1236 cur->addIncoming(next, loopBB);
1237
1238 CGF.EmitBlock(contBB);
Michael Ilseman686240a2012-12-04 00:29:55 +00001239}
John McCall2725aa12011-02-01 21:35:06 +00001240
Anders Carlssonc0964b62010-05-22 17:35:42 +00001241void
1242CodeGenFunction::EmitNullInitialization(llvm::Value *DestPtr, QualType Ty) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001243 // Ignore empty classes in C++.
Richard Smith9c6890a2012-11-01 22:30:59 +00001244 if (getLangOpts().CPlusPlus) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001245 if (const RecordType *RT = Ty->getAs<RecordType>()) {
1246 if (cast<CXXRecordDecl>(RT->getDecl())->isEmpty())
1247 return;
1248 }
1249 }
John McCall7cd1d972010-08-07 08:21:30 +00001250
1251 // Cast the dest ptr to the appropriate i8 pointer type.
1252 unsigned DestAS =
1253 cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
Chris Lattner2192fe52011-07-18 04:24:23 +00001254 llvm::Type *BP = Builder.getInt8PtrTy(DestAS);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001255 if (DestPtr->getType() != BP)
Benjamin Kramer76399eb2011-09-27 21:06:10 +00001256 DestPtr = Builder.CreateBitCast(DestPtr, BP);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001257
1258 // Get size and alignment info for this aggregate.
Michael Ilseman686240a2012-12-04 00:29:55 +00001259 std::pair<CharUnits, CharUnits> TypeInfo =
Ken Dyckc5c416f2011-04-22 17:51:05 +00001260 getContext().getTypeInfoInChars(Ty);
1261 CharUnits Size = TypeInfo.first;
1262 CharUnits Align = TypeInfo.second;
Anders Carlsson2e744e82008-08-30 19:51:14 +00001263
John McCalla08ffd22011-01-14 10:37:58 +00001264 llvm::Value *SizeVal;
John McCall2725aa12011-02-01 21:35:06 +00001265 const VariableArrayType *vla;
Mike Stump11289f42009-09-09 15:08:12 +00001266
John McCalla08ffd22011-01-14 10:37:58 +00001267 // Don't bother emitting a zero-byte memset.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001268 if (Size.isZero()) {
John McCalla08ffd22011-01-14 10:37:58 +00001269 // But note that getTypeInfo returns 0 for a VLA.
1270 if (const VariableArrayType *vlaType =
1271 dyn_cast_or_null<VariableArrayType>(
1272 getContext().getAsArrayType(Ty))) {
John McCall23c29fe2011-06-24 21:55:10 +00001273 QualType eltType;
1274 llvm::Value *numElts;
Benjamin Kramer867ea1d2014-03-02 13:01:17 +00001275 std::tie(numElts, eltType) = getVLASize(vlaType);
John McCall23c29fe2011-06-24 21:55:10 +00001276
1277 SizeVal = numElts;
1278 CharUnits eltSize = getContext().getTypeSizeInChars(eltType);
1279 if (!eltSize.isOne())
1280 SizeVal = Builder.CreateNUWMul(SizeVal, CGM.getSize(eltSize));
John McCall2725aa12011-02-01 21:35:06 +00001281 vla = vlaType;
John McCalla08ffd22011-01-14 10:37:58 +00001282 } else {
1283 return;
1284 }
1285 } else {
John McCall23c29fe2011-06-24 21:55:10 +00001286 SizeVal = CGM.getSize(Size);
Craig Topper8a13c412014-05-21 05:09:00 +00001287 vla = nullptr;
John McCalla08ffd22011-01-14 10:37:58 +00001288 }
John McCall7cd1d972010-08-07 08:21:30 +00001289
1290 // If the type contains a pointer to data member we can't memset it to zero.
1291 // Instead, create a null constant and copy it to the destination.
John McCall2725aa12011-02-01 21:35:06 +00001292 // TODO: there are other patterns besides zero that we can usefully memset,
1293 // like -1, which happens to be the pattern used by member-pointers.
John McCall614dbdc2010-08-22 21:01:12 +00001294 if (!CGM.getTypes().isZeroInitializable(Ty)) {
John McCall2725aa12011-02-01 21:35:06 +00001295 // For a VLA, emit a single element, then splat that over the VLA.
1296 if (vla) Ty = getContext().getBaseElementType(vla);
John McCalla08ffd22011-01-14 10:37:58 +00001297
John McCall7cd1d972010-08-07 08:21:30 +00001298 llvm::Constant *NullConstant = CGM.EmitNullConstant(Ty);
1299
Michael Ilseman686240a2012-12-04 00:29:55 +00001300 llvm::GlobalVariable *NullVariable =
John McCall7cd1d972010-08-07 08:21:30 +00001301 new llvm::GlobalVariable(CGM.getModule(), NullConstant->getType(),
Michael Ilseman686240a2012-12-04 00:29:55 +00001302 /*isConstant=*/true,
John McCall7cd1d972010-08-07 08:21:30 +00001303 llvm::GlobalVariable::PrivateLinkage,
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001304 NullConstant, Twine());
John McCall7cd1d972010-08-07 08:21:30 +00001305 llvm::Value *SrcPtr =
1306 Builder.CreateBitCast(NullVariable, Builder.getInt8PtrTy());
1307
John McCall2725aa12011-02-01 21:35:06 +00001308 if (vla) return emitNonZeroVLAInit(*this, Ty, DestPtr, SrcPtr, SizeVal);
1309
John McCall7cd1d972010-08-07 08:21:30 +00001310 // Get and call the appropriate llvm.memcpy overload.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001311 Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align.getQuantity(), false);
John McCall7cd1d972010-08-07 08:21:30 +00001312 return;
Michael Ilseman686240a2012-12-04 00:29:55 +00001313 }
1314
John McCall7cd1d972010-08-07 08:21:30 +00001315 // Otherwise, just memset the whole thing to zero. This is legal
1316 // because in LLVM, all default initializers (other than the ones we just
1317 // handled above) are guaranteed to have a bit pattern of all zeros.
Michael Ilseman686240a2012-12-04 00:29:55 +00001318 Builder.CreateMemSet(DestPtr, Builder.getInt8(0), SizeVal,
Ken Dyckc5c416f2011-04-22 17:51:05 +00001319 Align.getQuantity(), false);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001320}
1321
Chris Lattnerc8e630e2011-02-17 07:39:24 +00001322llvm::BlockAddress *CodeGenFunction::GetAddrOfLabel(const LabelDecl *L) {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001323 // Make sure that there is a block for the indirect goto.
Craig Topper8a13c412014-05-21 05:09:00 +00001324 if (!IndirectBranch)
Chris Lattner6c4d2552009-10-28 23:59:40 +00001325 GetIndirectGotoBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001326
John McCallad5d61e2010-07-23 21:56:41 +00001327 llvm::BasicBlock *BB = getJumpDestForLabel(L).getBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001328
Chris Lattner6c4d2552009-10-28 23:59:40 +00001329 // Make sure the indirect branch includes all of the address-taken blocks.
1330 IndirectBranch->addDestination(BB);
1331 return llvm::BlockAddress::get(CurFn, BB);
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001332}
1333
1334llvm::BasicBlock *CodeGenFunction::GetIndirectGotoBlock() {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001335 // If we already made the indirect branch for indirect goto, return its block.
1336 if (IndirectBranch) return IndirectBranch->getParent();
Michael Ilseman686240a2012-12-04 00:29:55 +00001337
Chris Lattner6c4d2552009-10-28 23:59:40 +00001338 CGBuilderTy TmpBuilder(createBasicBlock("indirectgoto"));
Michael Ilseman686240a2012-12-04 00:29:55 +00001339
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001340 // Create the PHI node that indirect gotos will add entries to.
Jay Foad20c0f022011-03-30 11:28:58 +00001341 llvm::Value *DestVal = TmpBuilder.CreatePHI(Int8PtrTy, 0,
1342 "indirect.goto.dest");
Michael Ilseman686240a2012-12-04 00:29:55 +00001343
Chris Lattner6c4d2552009-10-28 23:59:40 +00001344 // Create the indirect branch instruction.
1345 IndirectBranch = TmpBuilder.CreateIndirectBr(DestVal);
1346 return IndirectBranch->getParent();
Daniel Dunbar88402ce2008-08-04 16:51:22 +00001347}
Anders Carlsson13abd7e2008-11-04 05:30:00 +00001348
John McCall82fe67b2011-07-09 01:37:26 +00001349/// Computes the length of an array in elements, as well as the base
1350/// element type and a properly-typed first element pointer.
1351llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType,
1352 QualType &baseType,
1353 llvm::Value *&addr) {
1354 const ArrayType *arrayType = origArrayType;
1355
1356 // If it's a VLA, we have to load the stored size. Note that
1357 // this is the size of the VLA in bytes, not its size in elements.
Craig Topper8a13c412014-05-21 05:09:00 +00001358 llvm::Value *numVLAElements = nullptr;
John McCall82fe67b2011-07-09 01:37:26 +00001359 if (isa<VariableArrayType>(arrayType)) {
1360 numVLAElements = getVLASize(cast<VariableArrayType>(arrayType)).first;
1361
1362 // Walk into all VLAs. This doesn't require changes to addr,
1363 // which has type T* where T is the first non-VLA element type.
1364 do {
1365 QualType elementType = arrayType->getElementType();
1366 arrayType = getContext().getAsArrayType(elementType);
1367
1368 // If we only have VLA components, 'addr' requires no adjustment.
1369 if (!arrayType) {
1370 baseType = elementType;
1371 return numVLAElements;
1372 }
1373 } while (isa<VariableArrayType>(arrayType));
1374
1375 // We get out here only if we find a constant array type
1376 // inside the VLA.
1377 }
1378
1379 // We have some number of constant-length arrays, so addr should
1380 // have LLVM type [M x [N x [...]]]*. Build a GEP that walks
1381 // down to the first element of addr.
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001382 SmallVector<llvm::Value*, 8> gepIndices;
John McCall82fe67b2011-07-09 01:37:26 +00001383
1384 // GEP down to the array type.
1385 llvm::ConstantInt *zero = Builder.getInt32(0);
1386 gepIndices.push_back(zero);
1387
John McCall82fe67b2011-07-09 01:37:26 +00001388 uint64_t countFromCLAs = 1;
Richard Smithf3c37e82012-04-22 05:51:36 +00001389 QualType eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001390
Chris Lattner2192fe52011-07-18 04:24:23 +00001391 llvm::ArrayType *llvmArrayType =
Richard Smithf3c37e82012-04-22 05:51:36 +00001392 dyn_cast<llvm::ArrayType>(
John McCall82fe67b2011-07-09 01:37:26 +00001393 cast<llvm::PointerType>(addr->getType())->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001394 while (llvmArrayType) {
John McCall82fe67b2011-07-09 01:37:26 +00001395 assert(isa<ConstantArrayType>(arrayType));
1396 assert(cast<ConstantArrayType>(arrayType)->getSize().getZExtValue()
1397 == llvmArrayType->getNumElements());
1398
1399 gepIndices.push_back(zero);
1400 countFromCLAs *= llvmArrayType->getNumElements();
Richard Smithf3c37e82012-04-22 05:51:36 +00001401 eltType = arrayType->getElementType();
John McCall82fe67b2011-07-09 01:37:26 +00001402
1403 llvmArrayType =
1404 dyn_cast<llvm::ArrayType>(llvmArrayType->getElementType());
John McCall82fe67b2011-07-09 01:37:26 +00001405 arrayType = getContext().getAsArrayType(arrayType->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001406 assert((!llvmArrayType || arrayType) &&
1407 "LLVM and Clang types are out-of-synch");
John McCall82fe67b2011-07-09 01:37:26 +00001408 }
1409
Richard Smithf3c37e82012-04-22 05:51:36 +00001410 if (arrayType) {
1411 // From this point onwards, the Clang array type has been emitted
1412 // as some other type (probably a packed struct). Compute the array
1413 // size, and just emit the 'begin' expression as a bitcast.
1414 while (arrayType) {
1415 countFromCLAs *=
1416 cast<ConstantArrayType>(arrayType)->getSize().getZExtValue();
1417 eltType = arrayType->getElementType();
1418 arrayType = getContext().getAsArrayType(eltType);
1419 }
John McCall82fe67b2011-07-09 01:37:26 +00001420
Micah Villmowea2fea22012-10-25 15:39:14 +00001421 unsigned AddressSpace = addr->getType()->getPointerAddressSpace();
Richard Smithf3c37e82012-04-22 05:51:36 +00001422 llvm::Type *BaseType = ConvertType(eltType)->getPointerTo(AddressSpace);
1423 addr = Builder.CreateBitCast(addr, BaseType, "array.begin");
1424 } else {
1425 // Create the actual GEP.
1426 addr = Builder.CreateInBoundsGEP(addr, gepIndices, "array.begin");
1427 }
1428
1429 baseType = eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001430
1431 llvm::Value *numElements
1432 = llvm::ConstantInt::get(SizeTy, countFromCLAs);
1433
1434 // If we had any VLA dimensions, factor them in.
1435 if (numVLAElements)
1436 numElements = Builder.CreateNUWMul(numVLAElements, numElements);
1437
1438 return numElements;
1439}
1440
John McCall23c29fe2011-06-24 21:55:10 +00001441std::pair<llvm::Value*, QualType>
1442CodeGenFunction::getVLASize(QualType type) {
1443 const VariableArrayType *vla = getContext().getAsVariableArrayType(type);
1444 assert(vla && "type was not a variable array type!");
1445 return getVLASize(vla);
Anders Carlssone388a5b2008-12-20 20:27:15 +00001446}
Anders Carlssonccbe9202008-12-12 07:19:02 +00001447
John McCall23c29fe2011-06-24 21:55:10 +00001448std::pair<llvm::Value*, QualType>
1449CodeGenFunction::getVLASize(const VariableArrayType *type) {
1450 // The number of elements so far; always size_t.
Craig Topper8a13c412014-05-21 05:09:00 +00001451 llvm::Value *numElements = nullptr;
John McCall23c29fe2011-06-24 21:55:10 +00001452
1453 QualType elementType;
1454 do {
1455 elementType = type->getElementType();
1456 llvm::Value *vlaSize = VLASizeMap[type->getSizeExpr()];
1457 assert(vlaSize && "no size for VLA!");
1458 assert(vlaSize->getType() == SizeTy);
1459
1460 if (!numElements) {
1461 numElements = vlaSize;
1462 } else {
1463 // It's undefined behavior if this wraps around, so mark it that way.
Alexey Samsonovcb3f8122014-03-20 10:48:29 +00001464 // FIXME: Teach -fsanitize=undefined to trap this.
John McCall23c29fe2011-06-24 21:55:10 +00001465 numElements = Builder.CreateNUWMul(numElements, vlaSize);
1466 }
1467 } while ((type = getContext().getAsVariableArrayType(elementType)));
1468
1469 return std::pair<llvm::Value*,QualType>(numElements, elementType);
1470}
1471
1472void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
1473 assert(type->isVariablyModifiedType() &&
Anders Carlsson8a01b792008-12-20 20:46:34 +00001474 "Must pass variably modified type to EmitVLASizes!");
Mike Stump11289f42009-09-09 15:08:12 +00001475
Daniel Dunbarb6adc432009-07-19 06:58:07 +00001476 EnsureInsertPoint();
Mike Stump11289f42009-09-09 15:08:12 +00001477
John McCall23c29fe2011-06-24 21:55:10 +00001478 // We're going to walk down into the type and look for VLA
1479 // expressions.
John McCall23c29fe2011-06-24 21:55:10 +00001480 do {
1481 assert(type->isVariablyModifiedType());
Mike Stump11289f42009-09-09 15:08:12 +00001482
John McCall23c29fe2011-06-24 21:55:10 +00001483 const Type *ty = type.getTypePtr();
1484 switch (ty->getTypeClass()) {
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001485
John McCall23c29fe2011-06-24 21:55:10 +00001486#define TYPE(Class, Base)
1487#define ABSTRACT_TYPE(Class, Base)
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001488#define NON_CANONICAL_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001489#define DEPENDENT_TYPE(Class, Base) case Type::Class:
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001490#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001491#include "clang/AST/TypeNodes.def"
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001492 llvm_unreachable("unexpected dependent type!");
Mike Stump11289f42009-09-09 15:08:12 +00001493
John McCall23c29fe2011-06-24 21:55:10 +00001494 // These types are never variably-modified.
1495 case Type::Builtin:
1496 case Type::Complex:
1497 case Type::Vector:
1498 case Type::ExtVector:
1499 case Type::Record:
1500 case Type::Enum:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001501 case Type::Elaborated:
1502 case Type::TemplateSpecialization:
John McCall23c29fe2011-06-24 21:55:10 +00001503 case Type::ObjCObject:
1504 case Type::ObjCInterface:
1505 case Type::ObjCObjectPointer:
1506 llvm_unreachable("type class is never variably-modified!");
Mike Stump11289f42009-09-09 15:08:12 +00001507
Reid Kleckner0503a872013-12-05 01:23:43 +00001508 case Type::Adjusted:
1509 type = cast<AdjustedType>(ty)->getAdjustedType();
1510 break;
1511
Reid Kleckner8a365022013-06-24 17:51:48 +00001512 case Type::Decayed:
1513 type = cast<DecayedType>(ty)->getPointeeType();
1514 break;
1515
John McCall23c29fe2011-06-24 21:55:10 +00001516 case Type::Pointer:
1517 type = cast<PointerType>(ty)->getPointeeType();
1518 break;
Mike Stump11289f42009-09-09 15:08:12 +00001519
John McCall23c29fe2011-06-24 21:55:10 +00001520 case Type::BlockPointer:
1521 type = cast<BlockPointerType>(ty)->getPointeeType();
1522 break;
1523
1524 case Type::LValueReference:
1525 case Type::RValueReference:
1526 type = cast<ReferenceType>(ty)->getPointeeType();
1527 break;
1528
1529 case Type::MemberPointer:
1530 type = cast<MemberPointerType>(ty)->getPointeeType();
1531 break;
1532
1533 case Type::ConstantArray:
1534 case Type::IncompleteArray:
1535 // Losing element qualification here is fine.
1536 type = cast<ArrayType>(ty)->getElementType();
1537 break;
1538
1539 case Type::VariableArray: {
1540 // Losing element qualification here is fine.
1541 const VariableArrayType *vat = cast<VariableArrayType>(ty);
1542
1543 // Unknown size indication requires no size computation.
1544 // Otherwise, evaluate and record it.
1545 if (const Expr *size = vat->getSizeExpr()) {
1546 // It's possible that we might have emitted this already,
1547 // e.g. with a typedef and a pointer to it.
1548 llvm::Value *&entry = VLASizeMap[size];
1549 if (!entry) {
Richard Smith481652b2012-10-10 01:11:12 +00001550 llvm::Value *Size = EmitScalarExpr(size);
1551
1552 // C11 6.7.6.2p5:
1553 // If the size is an expression that is not an integer constant
1554 // expression [...] each time it is evaluated it shall have a value
1555 // greater than zero.
Alexey Samsonovedf99a92014-11-07 22:29:38 +00001556 if (SanOpts.has(SanitizerKind::VLABound) &&
Richard Smithb1b0ab42012-11-05 22:21:05 +00001557 size->getType()->isSignedIntegerType()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +00001558 SanitizerScope SanScope(this);
Richard Smith481652b2012-10-10 01:11:12 +00001559 llvm::Value *Zero = llvm::Constant::getNullValue(Size->getType());
1560 llvm::Constant *StaticArgs[] = {
1561 EmitCheckSourceLocation(size->getLocStart()),
1562 EmitCheckTypeDescriptor(size->getType())
1563 };
Alexey Samsonove396bfc2014-11-11 22:03:54 +00001564 EmitCheck(std::make_pair(Builder.CreateICmpSGT(Size, Zero),
1565 SanitizerKind::VLABound),
1566 "vla_bound_not_positive", StaticArgs, Size);
Richard Smith481652b2012-10-10 01:11:12 +00001567 }
1568
John McCall23c29fe2011-06-24 21:55:10 +00001569 // Always zexting here would be wrong if it weren't
1570 // undefined behavior to have a negative bound.
Richard Smith8772bd82012-10-10 01:12:11 +00001571 entry = Builder.CreateIntCast(Size, SizeTy, /*signed*/ false);
John McCall23c29fe2011-06-24 21:55:10 +00001572 }
1573 }
1574 type = vat->getElementType();
1575 break;
Anders Carlsson8a01b792008-12-20 20:46:34 +00001576 }
Mike Stump11289f42009-09-09 15:08:12 +00001577
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001578 case Type::FunctionProto:
John McCall23c29fe2011-06-24 21:55:10 +00001579 case Type::FunctionNoProto:
Alp Toker314cc812014-01-25 16:55:45 +00001580 type = cast<FunctionType>(ty)->getReturnType();
John McCall23c29fe2011-06-24 21:55:10 +00001581 break;
Eli Friedman0dfb8892011-10-06 23:00:33 +00001582
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001583 case Type::Paren:
1584 case Type::TypeOf:
1585 case Type::UnaryTransform:
1586 case Type::Attributed:
1587 case Type::SubstTemplateTypeParm:
David Blaikie66ed89d2013-07-13 21:08:08 +00001588 case Type::PackExpansion:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001589 // Keep walking after single level desugaring.
1590 type = type.getSingleStepDesugaredType(getContext());
1591 break;
1592
1593 case Type::Typedef:
1594 case Type::Decltype:
1595 case Type::Auto:
1596 // Stop walking: nothing to do.
1597 return;
1598
1599 case Type::TypeOfExpr:
1600 // Stop walking: emit typeof expression.
1601 EmitIgnoredExpr(cast<TypeOfExprType>(ty)->getUnderlyingExpr());
1602 return;
1603
Eli Friedman0dfb8892011-10-06 23:00:33 +00001604 case Type::Atomic:
1605 type = cast<AtomicType>(ty)->getValueType();
1606 break;
John McCall23c29fe2011-06-24 21:55:10 +00001607 }
1608 } while (type->isVariablyModifiedType());
Anders Carlssonccbe9202008-12-12 07:19:02 +00001609}
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001610
1611llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) {
Dan Gohmane9e32dc2010-10-29 22:47:07 +00001612 if (getContext().getBuiltinVaListType()->isArrayType())
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001613 return EmitScalarExpr(E);
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001614 return EmitLValue(E).getAddress();
1615}
Anders Carlsson15cb75a2009-02-07 22:53:43 +00001616
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001617void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
1618 llvm::Constant *Init) {
Devang Pateldc866e12010-08-10 17:53:33 +00001619 assert (Init && "Invalid DeclRefExpr initializer!");
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001620 if (CGDebugInfo *Dbg = getDebugInfo())
1621 if (CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
1622 Dbg->EmitGlobalVariable(E->getDecl(), Init);
Devang Patele03edfd2010-08-10 07:24:25 +00001623}
John McCallc07a0c72011-02-17 10:25:35 +00001624
1625CodeGenFunction::PeepholeProtection
1626CodeGenFunction::protectFromPeepholes(RValue rvalue) {
1627 // At the moment, the only aggressive peephole we do in IR gen
1628 // is trunc(zext) folding, but if we add more, we can easily
1629 // extend this protection.
1630
1631 if (!rvalue.isScalar()) return PeepholeProtection();
1632 llvm::Value *value = rvalue.getScalarVal();
1633 if (!isa<llvm::ZExtInst>(value)) return PeepholeProtection();
1634
1635 // Just make an extra bitcast.
1636 assert(HaveInsertPoint());
1637 llvm::Instruction *inst = new llvm::BitCastInst(value, value->getType(), "",
1638 Builder.GetInsertBlock());
1639
1640 PeepholeProtection protection;
1641 protection.Inst = inst;
1642 return protection;
1643}
1644
1645void CodeGenFunction::unprotectFromPeepholes(PeepholeProtection protection) {
1646 if (!protection.Inst) return;
1647
1648 // In theory, we could try to duplicate the peepholes now, but whatever.
1649 protection.Inst->eraseFromParent();
1650}
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001651
1652llvm::Value *CodeGenFunction::EmitAnnotationCall(llvm::Value *AnnotationFn,
1653 llvm::Value *AnnotatedVal,
Dmitri Gribenkof8579502013-01-12 19:30:44 +00001654 StringRef AnnotationStr,
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001655 SourceLocation Location) {
1656 llvm::Value *Args[4] = {
1657 AnnotatedVal,
1658 Builder.CreateBitCast(CGM.EmitAnnotationString(AnnotationStr), Int8PtrTy),
1659 Builder.CreateBitCast(CGM.EmitAnnotationUnit(Location), Int8PtrTy),
1660 CGM.EmitAnnotationLineNo(Location)
1661 };
1662 return Builder.CreateCall(AnnotationFn, Args);
1663}
1664
1665void CodeGenFunction::EmitVarAnnotations(const VarDecl *D, llvm::Value *V) {
1666 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1667 // FIXME We create a new bitcast for every annotation because that's what
1668 // llvm-gcc was doing.
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001669 for (const auto *I : D->specific_attrs<AnnotateAttr>())
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001670 EmitAnnotationCall(CGM.getIntrinsic(llvm::Intrinsic::var_annotation),
1671 Builder.CreateBitCast(V, CGM.Int8PtrTy, V->getName()),
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001672 I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001673}
1674
1675llvm::Value *CodeGenFunction::EmitFieldAnnotations(const FieldDecl *D,
1676 llvm::Value *V) {
1677 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1678 llvm::Type *VTy = V->getType();
1679 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::ptr_annotation,
1680 CGM.Int8PtrTy);
1681
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001682 for (const auto *I : D->specific_attrs<AnnotateAttr>()) {
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001683 // FIXME Always emit the cast inst so we can differentiate between
1684 // annotation on the first field of a struct and annotation on the struct
1685 // itself.
1686 if (VTy != CGM.Int8PtrTy)
1687 V = Builder.Insert(new llvm::BitCastInst(V, CGM.Int8PtrTy));
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001688 V = EmitAnnotationCall(F, V, I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001689 V = Builder.CreateBitCast(V, VTy);
1690 }
1691
1692 return V;
1693}
Ben Langmuir3b4c30b2013-05-09 19:17:11 +00001694
1695CodeGenFunction::CGCapturedStmtInfo::~CGCapturedStmtInfo() { }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001696
Alexey Samsonov24cad992014-07-17 18:46:27 +00001697CodeGenFunction::SanitizerScope::SanitizerScope(CodeGenFunction *CGF)
1698 : CGF(CGF) {
1699 assert(!CGF->IsSanitizerScope);
1700 CGF->IsSanitizerScope = true;
1701}
1702
1703CodeGenFunction::SanitizerScope::~SanitizerScope() {
1704 CGF->IsSanitizerScope = false;
1705}
1706
Alexander Musman515ad8c2014-05-22 08:54:05 +00001707void CodeGenFunction::InsertHelper(llvm::Instruction *I,
1708 const llvm::Twine &Name,
1709 llvm::BasicBlock *BB,
1710 llvm::BasicBlock::iterator InsertPt) const {
1711 LoopStack.InsertHelper(I);
Kostya Serebryany4ee69042014-08-26 02:29:59 +00001712 if (IsSanitizerScope)
1713 CGM.getSanitizerMetadata()->disableSanitizerForInstruction(I);
Alexander Musman515ad8c2014-05-22 08:54:05 +00001714}
1715
1716template <bool PreserveNames>
1717void CGBuilderInserter<PreserveNames>::InsertHelper(
1718 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1719 llvm::BasicBlock::iterator InsertPt) const {
1720 llvm::IRBuilderDefaultInserter<PreserveNames>::InsertHelper(I, Name, BB,
1721 InsertPt);
1722 if (CGF)
1723 CGF->InsertHelper(I, Name, BB, InsertPt);
1724}
1725
1726#ifdef NDEBUG
1727#define PreserveNames false
1728#else
1729#define PreserveNames true
1730#endif
1731template void CGBuilderInserter<PreserveNames>::InsertHelper(
1732 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1733 llvm::BasicBlock::iterator InsertPt) const;
1734#undef PreserveNames