blob: 67eae450e8c7074b009bd0e14b4c52df20be0d35 [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(),
Alexey Samsonov24cad992014-07-17 18:46:27 +000039 CGBuilderInserterTy(this)),
40 CapturedStmtInfo(nullptr), SanOpts(&CGM.getLangOpts().Sanitize),
Reid Kleckner19819442014-07-25 21:39:46 +000041 IsSanitizerScope(false), CurFuncIsThunk(false), AutoreleaseResult(false),
42 BlockInfo(nullptr), BlockPointer(nullptr),
43 LambdaThisCaptureField(nullptr), NormalCleanupDest(nullptr),
44 NextCleanupDestIndex(1), FirstBlockInfo(nullptr), EHResumeBlock(nullptr),
45 ExceptionSlot(nullptr), EHSelectorSlot(nullptr),
46 DebugInfo(CGM.getModuleDebugInfo()), DisableDebugInfo(false),
47 DidCallStackSave(false), IndirectBranch(nullptr), PGO(cgm),
48 SwitchInsn(nullptr), SwitchWeights(nullptr), CaseRangeBlock(nullptr),
49 UnreachableBlock(nullptr), NumReturnExprs(0), NumSimpleReturnExprs(0),
50 CXXABIThisDecl(nullptr), CXXABIThisValue(nullptr), CXXThisValue(nullptr),
Craig Topper8a13c412014-05-21 05:09:00 +000051 CXXDefaultInitExprThis(nullptr), CXXStructorImplicitParamDecl(nullptr),
52 CXXStructorImplicitParamValue(nullptr), OutermostConditional(nullptr),
53 CurLexicalScope(nullptr), TerminateLandingPad(nullptr),
54 TerminateHandler(nullptr), TrapBB(nullptr) {
Fariborz Jahanian63628032012-06-26 16:06:38 +000055 if (!suppressNewContext)
56 CGM.getCXXABI().getMangleContext().startNewFunction();
Michael Ilseman7a167ee2012-12-04 00:36:06 +000057
58 llvm::FastMathFlags FMF;
59 if (CGM.getLangOpts().FastMath)
Benjamin Kramer7464efc2012-12-09 21:58:24 +000060 FMF.setUnsafeAlgebra();
Michael Ilseman7a167ee2012-12-04 00:36:06 +000061 if (CGM.getLangOpts().FiniteMathOnly) {
Benjamin Kramer7464efc2012-12-09 21:58:24 +000062 FMF.setNoNaNs();
63 FMF.setNoInfs();
Michael Ilseman7a167ee2012-12-04 00:36:06 +000064 }
65 Builder.SetFastMathFlags(FMF);
Chris Lattner5696e7b2008-06-17 18:05:57 +000066}
Chris Lattnerd1af2d22007-05-29 23:17:50 +000067
John McCall08ef4662011-11-10 08:15:53 +000068CodeGenFunction::~CodeGenFunction() {
Richard Smith736a9472013-06-12 20:42:33 +000069 assert(LifetimeExtendedCleanupStack.empty() && "failed to emit a cleanup");
70
John McCall08ef4662011-11-10 08:15:53 +000071 // If there are any unclaimed block infos, go ahead and destroy them
72 // now. This can happen if IR-gen gets clever and skips evaluating
73 // something.
74 if (FirstBlockInfo)
75 destroyBlockInfos(FirstBlockInfo);
Alexey Bataev9959db52014-05-06 10:08:46 +000076
77 if (getLangOpts().OpenMP) {
78 CGM.getOpenMPRuntime().FunctionFinished(*this);
79 }
John McCall08ef4662011-11-10 08:15:53 +000080}
81
Chris Lattnerd1af2d22007-05-29 23:17:50 +000082
Chris Lattnera5f58b02011-07-09 17:41:47 +000083llvm::Type *CodeGenFunction::ConvertTypeForMem(QualType T) {
Daniel Dunbaree3da872009-02-03 23:03:55 +000084 return CGM.getTypes().ConvertTypeForMem(T);
85}
86
Chris Lattnera5f58b02011-07-09 17:41:47 +000087llvm::Type *CodeGenFunction::ConvertType(QualType T) {
Chris Lattnerf033c142007-06-22 19:05:19 +000088 return CGM.getTypes().ConvertType(T);
Chris Lattner45bb9142007-06-09 02:28:57 +000089}
Chris Lattnerd1af2d22007-05-29 23:17:50 +000090
John McCall47fb9502013-03-07 21:37:08 +000091TypeEvaluationKind CodeGenFunction::getEvaluationKind(QualType type) {
92 type = type.getCanonicalType();
93 while (true) {
94 switch (type->getTypeClass()) {
John McCall745ae282011-05-15 02:34:36 +000095#define TYPE(name, parent)
96#define ABSTRACT_TYPE(name, parent)
97#define NON_CANONICAL_TYPE(name, parent) case Type::name:
98#define DEPENDENT_TYPE(name, parent) case Type::name:
99#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(name, parent) case Type::name:
100#include "clang/AST/TypeNodes.def"
John McCall47fb9502013-03-07 21:37:08 +0000101 llvm_unreachable("non-canonical or dependent type in IR-generation");
John McCall745ae282011-05-15 02:34:36 +0000102
Richard Smith27d807c2013-04-30 13:56:41 +0000103 case Type::Auto:
104 llvm_unreachable("undeduced auto type in IR-generation");
105
John McCall47fb9502013-03-07 21:37:08 +0000106 // Various scalar types.
107 case Type::Builtin:
108 case Type::Pointer:
109 case Type::BlockPointer:
110 case Type::LValueReference:
111 case Type::RValueReference:
112 case Type::MemberPointer:
113 case Type::Vector:
114 case Type::ExtVector:
115 case Type::FunctionProto:
116 case Type::FunctionNoProto:
117 case Type::Enum:
118 case Type::ObjCObjectPointer:
119 return TEK_Scalar;
John McCall745ae282011-05-15 02:34:36 +0000120
John McCall47fb9502013-03-07 21:37:08 +0000121 // Complexes.
122 case Type::Complex:
123 return TEK_Complex;
Eli Friedman0dfb8892011-10-06 23:00:33 +0000124
John McCall47fb9502013-03-07 21:37:08 +0000125 // Arrays, records, and Objective-C objects.
126 case Type::ConstantArray:
127 case Type::IncompleteArray:
128 case Type::VariableArray:
129 case Type::Record:
130 case Type::ObjCObject:
131 case Type::ObjCInterface:
132 return TEK_Aggregate;
133
134 // We operate on atomic values according to their underlying type.
135 case Type::Atomic:
136 type = cast<AtomicType>(type)->getValueType();
137 continue;
138 }
139 llvm_unreachable("unknown type kind!");
John McCall745ae282011-05-15 02:34:36 +0000140 }
Chris Lattner54fb19e2007-06-22 22:02:34 +0000141}
142
David Blaikie357aafb2013-02-01 19:09:49 +0000143void CodeGenFunction::EmitReturnBlock() {
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000144 // For cleanliness, we try to avoid emitting the return block for
145 // simple cases.
146 llvm::BasicBlock *CurBB = Builder.GetInsertBlock();
147
148 if (CurBB) {
149 assert(!CurBB->getTerminator() && "Unexpected terminated block.");
150
Daniel Dunbarea3060a2009-07-19 08:24:34 +0000151 // We have a valid insert point, reuse it if it is empty or there are no
152 // explicit jumps to the return block.
John McCallad5d61e2010-07-23 21:56:41 +0000153 if (CurBB->empty() || ReturnBlock.getBlock()->use_empty()) {
154 ReturnBlock.getBlock()->replaceAllUsesWith(CurBB);
155 delete ReturnBlock.getBlock();
Daniel Dunbarea3060a2009-07-19 08:24:34 +0000156 } else
John McCallad5d61e2010-07-23 21:56:41 +0000157 EmitBlock(ReturnBlock.getBlock());
David Blaikie357aafb2013-02-01 19:09:49 +0000158 return;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000159 }
160
161 // Otherwise, if the return block is the target of a single direct
162 // branch then we can just put the code in that block instead. This
163 // cleans up functions which started with a unified return block.
John McCallad5d61e2010-07-23 21:56:41 +0000164 if (ReturnBlock.getBlock()->hasOneUse()) {
Mike Stump11289f42009-09-09 15:08:12 +0000165 llvm::BranchInst *BI =
Chandler Carruth4d01fff2014-03-09 03:16:50 +0000166 dyn_cast<llvm::BranchInst>(*ReturnBlock.getBlock()->user_begin());
John McCallbd309292010-07-06 01:34:17 +0000167 if (BI && BI->isUnconditional() &&
John McCallad5d61e2010-07-23 21:56:41 +0000168 BI->getSuccessor(0) == ReturnBlock.getBlock()) {
David Blaikie1d969f42013-02-23 19:20:56 +0000169 // Reset insertion point, including debug location, and delete the
170 // branch. This is really subtle and only works because the next change
171 // in location will hit the caching in CGDebugInfo::EmitLocation and not
172 // override this.
Eric Christopher65c5c912011-09-09 21:53:04 +0000173 Builder.SetCurrentDebugLocation(BI->getDebugLoc());
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000174 Builder.SetInsertPoint(BI->getParent());
175 BI->eraseFromParent();
John McCallad5d61e2010-07-23 21:56:41 +0000176 delete ReturnBlock.getBlock();
David Blaikie357aafb2013-02-01 19:09:49 +0000177 return;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000178 }
179 }
180
Mike Stump18bb9282009-05-16 07:57:57 +0000181 // FIXME: We are at an unreachable point, there is no reason to emit the block
182 // unless it has uses. However, we still need a place to put the debug
183 // region.end for now.
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000184
John McCallad5d61e2010-07-23 21:56:41 +0000185 EmitBlock(ReturnBlock.getBlock());
John McCallbd309292010-07-06 01:34:17 +0000186}
187
188static void EmitIfUsed(CodeGenFunction &CGF, llvm::BasicBlock *BB) {
189 if (!BB) return;
190 if (!BB->use_empty())
191 return CGF.CurFn->getBasicBlockList().push_back(BB);
192 delete BB;
Daniel Dunbarfd346a32009-01-26 23:27:52 +0000193}
194
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000195void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
Chris Lattnere73e4322007-07-16 21:28:45 +0000196 assert(BreakContinueStack.empty() &&
197 "mismatched push/pop in break/continue stack!");
Mike Stump11289f42009-09-09 15:08:12 +0000198
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000199 bool OnlySimpleReturnStmts = NumSimpleReturnExprs > 0
Adrian Prantl524ba1f2013-07-25 00:23:42 +0000200 && NumSimpleReturnExprs == NumReturnExprs
201 && ReturnBlock.getBlock()->use_empty();
202 // Usually the return expression is evaluated before the cleanup
203 // code. If the function contains only a simple return statement,
204 // such as a constant, the location before the cleanup code becomes
205 // the last useful breakpoint in the function, because the simple
206 // return expression will be evaluated after the cleanup code. To be
207 // safe, set the debug location for cleanup code to the location of
208 // the return statement. Otherwise the cleanup code should be at the
209 // end of the function's lexical scope.
210 //
211 // If there are multiple branches to the return block, the branch
212 // instructions will get the location of the return statements and
213 // all will be fine.
Adrian Prantl3be10542013-05-02 17:30:20 +0000214 if (CGDebugInfo *DI = getDebugInfo()) {
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000215 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000216 DI->EmitLocation(Builder, LastStopPoint);
Adrian Prantl3be10542013-05-02 17:30:20 +0000217 else
Adrian Prantle83b1302014-01-07 22:05:52 +0000218 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000219 }
David Blaikie357aafb2013-02-01 19:09:49 +0000220
John McCall31168b02011-06-15 23:02:42 +0000221 // Pop any cleanups that might have been associated with the
222 // parameters. Do this in whatever block we're currently in; it's
223 // important to do this before we enter the return block or return
224 // edges will be *really* confused.
Adrian Prantl3be10542013-05-02 17:30:20 +0000225 bool EmitRetDbgLoc = true;
226 if (EHStack.stable_begin() != PrologueCleanupDepth) {
Adrian Prantldc237b52013-05-16 00:41:26 +0000227 PopCleanupBlocks(PrologueCleanupDepth);
John McCall31168b02011-06-15 23:02:42 +0000228
Adrian Prantl3be10542013-05-02 17:30:20 +0000229 // Make sure the line table doesn't jump back into the body for
230 // the ret after it's been at EndLoc.
231 EmitRetDbgLoc = false;
232
233 if (CGDebugInfo *DI = getDebugInfo())
Adrian Prantl52bf3c42013-05-03 20:11:48 +0000234 if (OnlySimpleReturnStmts)
Adrian Prantle83b1302014-01-07 22:05:52 +0000235 DI->EmitLocation(Builder, EndLoc);
Adrian Prantl3be10542013-05-02 17:30:20 +0000236 }
237
Mike Stump11289f42009-09-09 15:08:12 +0000238 // Emit function epilog (to return).
David Blaikie357aafb2013-02-01 19:09:49 +0000239 EmitReturnBlock();
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000240
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000241 if (ShouldInstrumentFunction())
242 EmitFunctionInstrumentation("__cyg_profile_func_exit");
Chris Lattner3c77a352010-06-22 00:03:40 +0000243
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000244 // Emit debug descriptor for function end.
Anders Carlsson63784f42009-02-13 08:11:52 +0000245 if (CGDebugInfo *DI = getDebugInfo()) {
Devang Patel0884a602010-07-22 22:29:16 +0000246 DI->EmitFunctionEnd(Builder);
Daniel Dunbarfab3f932008-11-11 20:59:54 +0000247 }
248
Nick Lewycky2d84e842013-10-02 02:29:49 +0000249 EmitFunctionEpilog(*CurFnInfo, EmitRetDbgLoc, EndLoc);
Mike Stump1d849212009-12-07 23:38:24 +0000250 EmitEndEHSpec(CurCodeDecl);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000251
John McCallbd309292010-07-06 01:34:17 +0000252 assert(EHStack.empty() &&
253 "did not remove all scopes from cleanup stack!");
254
Chris Lattner6c4d2552009-10-28 23:59:40 +0000255 // If someone did an indirect goto, emit the indirect goto block at the end of
256 // the function.
257 if (IndirectBranch) {
258 EmitBlock(IndirectBranch->getParent());
259 Builder.ClearInsertionPoint();
260 }
Michael Ilseman686240a2012-12-04 00:29:55 +0000261
Chris Lattnerc48023b2007-12-02 06:32:24 +0000262 // Remove the AllocaInsertPt instruction, which is just a convenience for us.
Chris Lattner2739d2b2009-03-31 22:17:44 +0000263 llvm::Instruction *Ptr = AllocaInsertPt;
Craig Topper8a13c412014-05-21 05:09:00 +0000264 AllocaInsertPt = nullptr;
Chris Lattner2739d2b2009-03-31 22:17:44 +0000265 Ptr->eraseFromParent();
Michael Ilseman686240a2012-12-04 00:29:55 +0000266
Chris Lattner6c4d2552009-10-28 23:59:40 +0000267 // If someone took the address of a label but never did an indirect goto, we
268 // made a zero entry PHI node, which is illegal, zap it now.
269 if (IndirectBranch) {
270 llvm::PHINode *PN = cast<llvm::PHINode>(IndirectBranch->getAddress());
271 if (PN->getNumIncomingValues() == 0) {
272 PN->replaceAllUsesWith(llvm::UndefValue::get(PN->getType()));
273 PN->eraseFromParent();
274 }
275 }
John McCallbd309292010-07-06 01:34:17 +0000276
John McCall8e4c74b2011-08-11 02:22:43 +0000277 EmitIfUsed(*this, EHResumeBlock);
John McCallbd309292010-07-06 01:34:17 +0000278 EmitIfUsed(*this, TerminateLandingPad);
279 EmitIfUsed(*this, TerminateHandler);
280 EmitIfUsed(*this, UnreachableBlock);
John McCall09ae0322010-07-06 23:57:41 +0000281
282 if (CGM.getCodeGenOpts().EmitDeclMetadata)
283 EmitDeclMetadata();
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000284
285 for (SmallVectorImpl<std::pair<llvm::Instruction *, llvm::Value *> >::iterator
286 I = DeferredReplacements.begin(),
287 E = DeferredReplacements.end();
288 I != E; ++I) {
289 I->first->replaceAllUsesWith(I->second);
290 I->first->eraseFromParent();
291 }
Chris Lattnerd1af2d22007-05-29 23:17:50 +0000292}
Chris Lattner308f4312007-05-29 23:50:05 +0000293
Chris Lattner3c77a352010-06-22 00:03:40 +0000294/// ShouldInstrumentFunction - Return true if the current function should be
295/// instrumented with __cyg_profile_func_* calls
296bool CodeGenFunction::ShouldInstrumentFunction() {
297 if (!CGM.getCodeGenOpts().InstrumentFunctions)
298 return false;
Ted Kremenekc249c412011-05-16 23:49:20 +0000299 if (!CurFuncDecl || CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>())
Chris Lattner3c77a352010-06-22 00:03:40 +0000300 return false;
301 return true;
302}
303
304/// EmitFunctionInstrumentation - Emit LLVM code to call the specified
305/// instrumentation function with the current function and the call site, if
306/// function instrumentation is enabled.
307void CodeGenFunction::EmitFunctionInstrumentation(const char *Fn) {
Chris Lattnerb48a2d52010-06-23 05:21:28 +0000308 // void __cyg_profile_func_{enter,exit} (void *this_fn, void *call_site);
Chris Lattnera5f58b02011-07-09 17:41:47 +0000309 llvm::PointerType *PointerTy = Int8PtrTy;
310 llvm::Type *ProfileFuncArgs[] = { PointerTy, PointerTy };
Chris Lattner2192fe52011-07-18 04:24:23 +0000311 llvm::FunctionType *FunctionTy =
Chris Lattnerece04092012-02-07 00:39:47 +0000312 llvm::FunctionType::get(VoidTy, ProfileFuncArgs, false);
Chris Lattner3c77a352010-06-22 00:03:40 +0000313
314 llvm::Constant *F = CGM.CreateRuntimeFunction(FunctionTy, Fn);
315 llvm::CallInst *CallSite = Builder.CreateCall(
Benjamin Kramer8d375ce2011-07-14 17:45:50 +0000316 CGM.getIntrinsic(llvm::Intrinsic::returnaddress),
Chris Lattner5e016ae2010-06-27 07:15:29 +0000317 llvm::ConstantInt::get(Int32Ty, 0),
Chris Lattner3c77a352010-06-22 00:03:40 +0000318 "callsite");
319
John McCall882987f2013-02-28 19:01:20 +0000320 llvm::Value *args[] = {
321 llvm::ConstantExpr::getBitCast(CurFn, PointerTy),
322 CallSite
323 };
324
325 EmitNounwindRuntimeCall(F, args);
Chris Lattner3c77a352010-06-22 00:03:40 +0000326}
327
Roman Divacky178e01602011-02-10 16:52:03 +0000328void CodeGenFunction::EmitMCountInstrumentation() {
Chris Lattnerece04092012-02-07 00:39:47 +0000329 llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
Roman Divacky178e01602011-02-10 16:52:03 +0000330
John McCallc8e01702013-04-16 22:48:15 +0000331 llvm::Constant *MCountFn =
332 CGM.CreateRuntimeFunction(FTy, getTarget().getMCountName());
John McCall882987f2013-02-28 19:01:20 +0000333 EmitNounwindRuntimeCall(MCountFn);
Roman Divacky178e01602011-02-10 16:52:03 +0000334}
335
Tanya Lattner7445ada2012-07-11 23:02:10 +0000336// OpenCL v1.2 s5.6.4.6 allows the compiler to store kernel argument
337// information in the program executable. The argument information stored
338// includes the argument name, its type, the address and access qualifiers used.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000339static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
340 CodeGenModule &CGM,llvm::LLVMContext &Context,
Guy Benyeifb36ede2013-03-24 13:58:12 +0000341 SmallVector <llvm::Value*, 5> &kernelMDArgs,
342 CGBuilderTy& Builder, ASTContext &ASTCtx) {
343 // Create MDNodes that represent the kernel arg metadata.
Tanya Lattner7445ada2012-07-11 23:02:10 +0000344 // Each MDNode is a list in the form of "key", N number of values which is
345 // the same number of values as their are kernel arguments.
Michael Ilseman686240a2012-12-04 00:29:55 +0000346
Joey Gouly92a47442014-04-04 13:43:57 +0000347 const PrintingPolicy &Policy = ASTCtx.getPrintingPolicy();
348
Guy Benyeifb36ede2013-03-24 13:58:12 +0000349 // MDNode for the kernel argument address space qualifiers.
350 SmallVector<llvm::Value*, 8> addressQuals;
351 addressQuals.push_back(llvm::MDString::get(Context, "kernel_arg_addr_space"));
352
353 // MDNode for the kernel argument access qualifiers (images only).
354 SmallVector<llvm::Value*, 8> accessQuals;
355 accessQuals.push_back(llvm::MDString::get(Context, "kernel_arg_access_qual"));
356
357 // MDNode for the kernel argument type names.
358 SmallVector<llvm::Value*, 8> argTypeNames;
359 argTypeNames.push_back(llvm::MDString::get(Context, "kernel_arg_type"));
360
361 // MDNode for the kernel argument type qualifiers.
362 SmallVector<llvm::Value*, 8> argTypeQuals;
363 argTypeQuals.push_back(llvm::MDString::get(Context, "kernel_arg_type_qual"));
364
Tanya Lattner7445ada2012-07-11 23:02:10 +0000365 // MDNode for the kernel argument names.
366 SmallVector<llvm::Value*, 8> argNames;
367 argNames.push_back(llvm::MDString::get(Context, "kernel_arg_name"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000368
Tanya Lattner7445ada2012-07-11 23:02:10 +0000369 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i) {
370 const ParmVarDecl *parm = FD->getParamDecl(i);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000371 QualType ty = parm->getType();
372 std::string typeQuals;
373
374 if (ty->isPointerType()) {
375 QualType pointeeTy = ty->getPointeeType();
376
377 // Get address qualifier.
378 addressQuals.push_back(Builder.getInt32(ASTCtx.getTargetAddressSpace(
379 pointeeTy.getAddressSpace())));
380
381 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000382 std::string typeName =
383 pointeeTy.getUnqualifiedType().getAsString(Policy) + "*";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000384
385 // Turn "unsigned type" to "utype"
386 std::string::size_type pos = typeName.find("unsigned");
Benjamin Krameref89ae02013-03-24 16:04:55 +0000387 if (pos != std::string::npos)
388 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000389
390 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
391
392 // Get argument type qualifiers:
393 if (ty.isRestrictQualified())
394 typeQuals = "restrict";
395 if (pointeeTy.isConstQualified() ||
396 (pointeeTy.getAddressSpace() == LangAS::opencl_constant))
Benjamin Krameref89ae02013-03-24 16:04:55 +0000397 typeQuals += typeQuals.empty() ? "const" : " const";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000398 if (pointeeTy.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000399 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000400 } else {
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000401 uint32_t AddrSpc = 0;
402 if (ty->isImageType())
403 AddrSpc =
404 CGM.getContext().getTargetAddressSpace(LangAS::opencl_global);
Bob Wilson95a27b02014-02-17 19:20:59 +0000405
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000406 addressQuals.push_back(Builder.getInt32(AddrSpc));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000407
408 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000409 std::string typeName = ty.getUnqualifiedType().getAsString(Policy);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000410
411 // Turn "unsigned type" to "utype"
412 std::string::size_type pos = typeName.find("unsigned");
Benjamin Krameref89ae02013-03-24 16:04:55 +0000413 if (pos != std::string::npos)
414 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000415
416 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
417
418 // Get argument type qualifiers:
419 if (ty.isConstQualified())
420 typeQuals = "const";
421 if (ty.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000422 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000423 }
Justin Bogner0f066062013-11-22 10:20:40 +0000424
Guy Benyeifb36ede2013-03-24 13:58:12 +0000425 argTypeQuals.push_back(llvm::MDString::get(Context, typeQuals));
426
427 // Get image access qualifier:
428 if (ty->isImageType()) {
Aaron Ballmanc4327992013-12-19 03:09:10 +0000429 const OpenCLImageAccessAttr *A = parm->getAttr<OpenCLImageAccessAttr>();
Aaron Ballman26891332014-01-14 17:41:53 +0000430 if (A && A->isWriteOnly())
Guy Benyeifb36ede2013-03-24 13:58:12 +0000431 accessQuals.push_back(llvm::MDString::get(Context, "write_only"));
432 else
433 accessQuals.push_back(llvm::MDString::get(Context, "read_only"));
Aaron Ballman26891332014-01-14 17:41:53 +0000434 // FIXME: what about read_write?
Guy Benyeifb36ede2013-03-24 13:58:12 +0000435 } else
436 accessQuals.push_back(llvm::MDString::get(Context, "none"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000437
Tanya Lattner7445ada2012-07-11 23:02:10 +0000438 // Get argument name.
439 argNames.push_back(llvm::MDString::get(Context, parm->getName()));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000440 }
Guy Benyeifb36ede2013-03-24 13:58:12 +0000441
442 kernelMDArgs.push_back(llvm::MDNode::get(Context, addressQuals));
443 kernelMDArgs.push_back(llvm::MDNode::get(Context, accessQuals));
444 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeNames));
445 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeQuals));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000446 kernelMDArgs.push_back(llvm::MDNode::get(Context, argNames));
447}
448
Michael Ilseman686240a2012-12-04 00:29:55 +0000449void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000450 llvm::Function *Fn)
451{
452 if (!FD->hasAttr<OpenCLKernelAttr>())
453 return;
454
455 llvm::LLVMContext &Context = getLLVMContext();
456
Dmitri Gribenkof8579502013-01-12 19:30:44 +0000457 SmallVector <llvm::Value*, 5> kernelMDArgs;
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000458 kernelMDArgs.push_back(Fn);
459
Tanya Lattner7445ada2012-07-11 23:02:10 +0000460 if (CGM.getCodeGenOpts().EmitOpenCLArgMetadata)
Guy Benyeifb36ede2013-03-24 13:58:12 +0000461 GenOpenCLArgMetadata(FD, Fn, CGM, Context, kernelMDArgs,
462 Builder, getContext());
Michael Ilseman686240a2012-12-04 00:29:55 +0000463
Aaron Ballmanc4327992013-12-19 03:09:10 +0000464 if (const VecTypeHintAttr *A = FD->getAttr<VecTypeHintAttr>()) {
465 QualType hintQTy = A->getTypeHint();
Joey Goulyaba589c2013-03-08 09:42:32 +0000466 const ExtVectorType *hintEltQTy = hintQTy->getAs<ExtVectorType>();
467 bool isSignedInteger =
468 hintQTy->isSignedIntegerType() ||
469 (hintEltQTy && hintEltQTy->getElementType()->isSignedIntegerType());
470 llvm::Value *attrMDArgs[] = {
471 llvm::MDString::get(Context, "vec_type_hint"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000472 llvm::UndefValue::get(CGM.getTypes().ConvertType(A->getTypeHint())),
Joey Goulyaba589c2013-03-08 09:42:32 +0000473 llvm::ConstantInt::get(
474 llvm::IntegerType::get(Context, 32),
475 llvm::APInt(32, (uint64_t)(isSignedInteger ? 1 : 0)))
476 };
477 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
478 }
479
Aaron Ballmanc4327992013-12-19 03:09:10 +0000480 if (const WorkGroupSizeHintAttr *A = FD->getAttr<WorkGroupSizeHintAttr>()) {
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000481 llvm::Value *attrMDArgs[] = {
482 llvm::MDString::get(Context, "work_group_size_hint"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000483 Builder.getInt32(A->getXDim()),
484 Builder.getInt32(A->getYDim()),
485 Builder.getInt32(A->getZDim())
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000486 };
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000487 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
488 }
489
Aaron Ballmanc4327992013-12-19 03:09:10 +0000490 if (const ReqdWorkGroupSizeAttr *A = FD->getAttr<ReqdWorkGroupSizeAttr>()) {
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000491 llvm::Value *attrMDArgs[] = {
492 llvm::MDString::get(Context, "reqd_work_group_size"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000493 Builder.getInt32(A->getXDim()),
494 Builder.getInt32(A->getYDim()),
495 Builder.getInt32(A->getZDim())
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000496 };
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000497 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
498 }
499
500 llvm::MDNode *kernelMDNode = llvm::MDNode::get(Context, kernelMDArgs);
501 llvm::NamedMDNode *OpenCLKernelMetadata =
502 CGM.getModule().getOrInsertNamedMetadata("opencl.kernels");
503 OpenCLKernelMetadata->addOperand(kernelMDNode);
504}
505
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000506/// Determine whether the function F ends with a return stmt.
507static bool endsWithReturn(const Decl* F) {
508 const Stmt *Body = nullptr;
509 if (auto *FD = dyn_cast_or_null<FunctionDecl>(F))
510 Body = FD->getBody();
511 else if (auto *OMD = dyn_cast_or_null<ObjCMethodDecl>(F))
512 Body = OMD->getBody();
513
514 if (auto *CS = dyn_cast_or_null<CompoundStmt>(Body)) {
515 auto LastStmt = CS->body_rbegin();
516 if (LastStmt != CS->body_rend())
517 return isa<ReturnStmt>(*LastStmt);
518 }
519 return false;
520}
521
John McCalldec348f72013-05-03 07:33:41 +0000522void CodeGenFunction::StartFunction(GlobalDecl GD,
523 QualType RetTy,
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000524 llvm::Function *Fn,
John McCalla738c252011-03-09 04:27:21 +0000525 const CGFunctionInfo &FnInfo,
Daniel Dunbar354d2782008-10-18 18:22:23 +0000526 const FunctionArgList &Args,
Adrian Prantl42d71b92014-04-10 23:21:53 +0000527 SourceLocation Loc,
Tilmann Scheller99cc30c2011-03-02 21:36:49 +0000528 SourceLocation StartLoc) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000529 const Decl *D = GD.getDecl();
Michael Ilseman686240a2012-12-04 00:29:55 +0000530
Anders Carlssonf4478e92009-02-09 20:20:56 +0000531 DidCallStackSave = false;
John McCalldec348f72013-05-03 07:33:41 +0000532 CurCodeDecl = D;
Craig Topper8a13c412014-05-21 05:09:00 +0000533 CurFuncDecl = (D ? D->getNonClosureContext() : nullptr);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000534 FnRetTy = RetTy;
Daniel Dunbar9c426522008-07-29 23:18:29 +0000535 CurFn = Fn;
John McCalla738c252011-03-09 04:27:21 +0000536 CurFnInfo = &FnInfo;
Chris Lattner5696e7b2008-06-17 18:05:57 +0000537 assert(CurFn->isDeclaration() && "Function already has body?");
538
Alexey Samsonovac4afe42014-07-07 23:59:57 +0000539 if (CGM.getSanitizerBlacklist().isIn(*Fn))
Will Dietzf54319c2013-01-18 11:30:38 +0000540 SanOpts = &SanitizerOptions::Disabled;
Will Dietzf54319c2013-01-18 11:30:38 +0000541
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000542 // Pass inline keyword to optimizer if it appears explicitly on any
Roman Divackydd9bfb22014-01-15 19:07:16 +0000543 // declaration. Also, in the case of -fno-inline attach NoInline
David Majnemer19d7d542014-02-25 10:51:14 +0000544 // attribute to all function that are not marked AlwaysInline.
Roman Divackydd9bfb22014-01-15 19:07:16 +0000545 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
546 if (!CGM.getCodeGenOpts().NoInline) {
Aaron Ballman86c93902014-03-06 23:45:36 +0000547 for (auto RI : FD->redecls())
Chad Rosier883b2572012-03-14 23:32:11 +0000548 if (RI->isInlineSpecified()) {
Bill Wendling207f0532012-12-20 19:27:06 +0000549 Fn->addFnAttr(llvm::Attribute::InlineHint);
Chad Rosier883b2572012-03-14 23:32:11 +0000550 break;
551 }
David Majnemer67e541e1c2014-02-25 09:53:29 +0000552 } else if (!FD->hasAttr<AlwaysInlineAttr>())
Roman Divackydd9bfb22014-01-15 19:07:16 +0000553 Fn->addFnAttr(llvm::Attribute::NoInline);
554 }
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000555
Richard Smith9c6890a2012-11-01 22:30:59 +0000556 if (getLangOpts().OpenCL) {
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000557 // Add metadata for a kernel function.
558 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000559 EmitOpenCLKernelMetadata(FD, Fn);
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000560 }
561
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000562 // If we are checking function types, emit a function type signature as
563 // prefix data.
564 if (getLangOpts().CPlusPlus && SanOpts->Function) {
565 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
566 if (llvm::Constant *PrefixSig =
567 CGM.getTargetCodeGenInfo().getUBSanFunctionSignature(CGM)) {
568 llvm::Constant *FTRTTIConst =
569 CGM.GetAddrOfRTTIDescriptor(FD->getType(), /*ForEH=*/true);
570 llvm::Constant *PrefixStructElems[] = { PrefixSig, FTRTTIConst };
571 llvm::Constant *PrefixStructConst =
572 llvm::ConstantStruct::getAnon(PrefixStructElems, /*Packed=*/true);
573 Fn->setPrefixData(PrefixStructConst);
574 }
575 }
576 }
577
Daniel Dunbar75283ff2008-11-11 02:29:29 +0000578 llvm::BasicBlock *EntryBB = createBasicBlock("entry", CurFn);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000579
Chris Lattner5696e7b2008-06-17 18:05:57 +0000580 // Create a marker to make it easy to insert allocas into the entryblock
581 // later. Don't create this with the builder, because we don't want it
582 // folded.
Chris Lattner5e016ae2010-06-27 07:15:29 +0000583 llvm::Value *Undef = llvm::UndefValue::get(Int32Ty);
584 AllocaInsertPt = new llvm::BitCastInst(Undef, Int32Ty, "", EntryBB);
Chris Lattner47640222009-03-22 00:24:14 +0000585 if (Builder.isNamePreserving())
586 AllocaInsertPt->setName("allocapt");
Mike Stump11289f42009-09-09 15:08:12 +0000587
John McCallbd309292010-07-06 01:34:17 +0000588 ReturnBlock = getJumpDestInCurrentScope("return");
Mike Stump11289f42009-09-09 15:08:12 +0000589
Chris Lattner5696e7b2008-06-17 18:05:57 +0000590 Builder.SetInsertPoint(EntryBB);
Mike Stump11289f42009-09-09 15:08:12 +0000591
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000592 // Emit subprogram debug descriptor.
Anders Carlsson63784f42009-02-13 08:11:52 +0000593 if (CGDebugInfo *DI = getDebugInfo()) {
Jordan Rose5c382722013-03-08 21:51:21 +0000594 SmallVector<QualType, 16> ArgTypes;
Eric Christopher4b4beb22011-10-21 23:30:10 +0000595 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
596 i != e; ++i) {
Jordan Rose5c382722013-03-08 21:51:21 +0000597 ArgTypes.push_back((*i)->getType());
Eric Christopher4b4beb22011-10-21 23:30:10 +0000598 }
599
John McCalldb40c7f2010-12-14 08:05:40 +0000600 QualType FnType =
Jordan Rose5c382722013-03-08 21:51:21 +0000601 getContext().getFunctionType(RetTy, ArgTypes,
John McCalldb40c7f2010-12-14 08:05:40 +0000602 FunctionProtoType::ExtProtoInfo());
Adrian Prantl42d71b92014-04-10 23:21:53 +0000603 DI->EmitFunctionStart(GD, Loc, StartLoc, FnType, CurFn, Builder);
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000604 }
605
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000606 if (ShouldInstrumentFunction())
607 EmitFunctionInstrumentation("__cyg_profile_func_enter");
Chris Lattner3c77a352010-06-22 00:03:40 +0000608
Roman Divacky178e01602011-02-10 16:52:03 +0000609 if (CGM.getCodeGenOpts().InstrumentForProfiling)
610 EmitMCountInstrumentation();
611
Eli Friedman4b1942c2009-12-04 02:43:40 +0000612 if (RetTy->isVoidType()) {
613 // Void type; nothing to return.
Craig Topper8a13c412014-05-21 05:09:00 +0000614 ReturnValue = nullptr;
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000615
616 // Count the implicit return.
617 if (!endsWithReturn(D))
618 ++NumReturnExprs;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000619 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
John McCall47fb9502013-03-07 21:37:08 +0000620 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
Eli Friedman4b1942c2009-12-04 02:43:40 +0000621 // Indirect aggregate return; emit returned value directly into sret slot.
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000622 // This reduces code size, and affects correctness in C++.
Reid Kleckner37abaca2014-05-09 22:46:15 +0000623 auto AI = CurFn->arg_begin();
624 if (CurFnInfo->getReturnInfo().isSRetAfterThis())
625 ++AI;
626 ReturnValue = AI;
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000627 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
628 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
629 // Load the sret pointer from the argument struct and return into that.
630 unsigned Idx = CurFnInfo->getReturnInfo().getInAllocaFieldIndex();
631 llvm::Function::arg_iterator EI = CurFn->arg_end();
632 --EI;
633 llvm::Value *Addr = Builder.CreateStructGEP(EI, Idx);
634 ReturnValue = Builder.CreateLoad(Addr, "agg.result");
Eli Friedman4b1942c2009-12-04 02:43:40 +0000635 } else {
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000636 ReturnValue = CreateIRTemp(RetTy, "retval");
John McCall31168b02011-06-15 23:02:42 +0000637
638 // Tell the epilog emitter to autorelease the result. We do this
639 // now so that various specialized functions can suppress it
640 // during their IR-generation.
David Blaikiebbafb8a2012-03-11 07:00:24 +0000641 if (getLangOpts().ObjCAutoRefCount &&
John McCall31168b02011-06-15 23:02:42 +0000642 !CurFnInfo->isReturnsRetained() &&
643 RetTy->isObjCRetainableType())
644 AutoreleaseResult = true;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000645 }
646
Mike Stump1d849212009-12-07 23:38:24 +0000647 EmitStartEHSpec(CurCodeDecl);
John McCall31168b02011-06-15 23:02:42 +0000648
649 PrologueCleanupDepth = EHStack.stable_begin();
Daniel Dunbard931a872009-02-02 22:03:45 +0000650 EmitFunctionProlog(*CurFnInfo, CurFn, Args);
Mike Stump11289f42009-09-09 15:08:12 +0000651
Eli Friedman9fbeba02012-02-11 02:57:39 +0000652 if (D && isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) {
John McCall5d865c322010-08-31 07:33:07 +0000653 CGM.getCXXABI().EmitInstanceFunctionProlog(*this);
Eli Friedman9fbeba02012-02-11 02:57:39 +0000654 const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
655 if (MD->getParent()->isLambda() &&
656 MD->getOverloadedOperator() == OO_Call) {
657 // We're in a lambda; figure out the captures.
658 MD->getParent()->getCaptureFields(LambdaCaptureFields,
659 LambdaThisCaptureField);
660 if (LambdaThisCaptureField) {
661 // If this lambda captures this, load it.
John McCalldec348f72013-05-03 07:33:41 +0000662 LValue ThisLValue = EmitLValueForLambdaField(LambdaThisCaptureField);
Nick Lewycky2d84e842013-10-02 02:29:49 +0000663 CXXThisValue = EmitLoadOfLValue(ThisLValue,
664 SourceLocation()).getScalarVal();
Eli Friedman9fbeba02012-02-11 02:57:39 +0000665 }
666 } else {
667 // Not in a lambda; just use 'this' from the method.
668 // FIXME: Should we generate a new load for each use of 'this'? The
669 // fast register allocator would be happier...
670 CXXThisValue = CXXABIThisValue;
671 }
672 }
John McCall347132b2010-02-16 22:04:33 +0000673
Anders Carlssonc20879a2008-12-20 21:28:43 +0000674 // If any of the arguments have a variably modified type, make sure to
675 // emit the type size.
676 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
677 i != e; ++i) {
Eli Friedman1f576832012-11-14 22:09:59 +0000678 const VarDecl *VD = *i;
679
680 // Dig out the type as written from ParmVarDecls; it's unclear whether
681 // the standard (C99 6.9.1p10) requires this, but we're following the
682 // precedent set by gcc.
683 QualType Ty;
684 if (const ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(VD))
685 Ty = PVD->getOriginalType();
686 else
687 Ty = VD->getType();
Anders Carlssonc20879a2008-12-20 21:28:43 +0000688
689 if (Ty->isVariablyModifiedType())
John McCall23c29fe2011-06-24 21:55:10 +0000690 EmitVariablyModifiedType(Ty);
Anders Carlssonc20879a2008-12-20 21:28:43 +0000691 }
Eric Christopher7cdf9482011-10-13 21:45:18 +0000692 // Emit a location at the end of the prologue.
693 if (CGDebugInfo *DI = getDebugInfo())
694 DI->EmitLocation(Builder, StartLoc);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000695}
Eli Friedman3d421e12008-08-25 21:31:01 +0000696
Richard Smithb47c36f2013-11-05 09:12:18 +0000697void CodeGenFunction::EmitFunctionBody(FunctionArgList &Args,
698 const Stmt *Body) {
Justin Bogneref512b92014-01-06 22:27:43 +0000699 RegionCounter Cnt = getPGORegionCounter(Body);
700 Cnt.beginRegion(Builder);
Richard Smithb47c36f2013-11-05 09:12:18 +0000701 if (const CompoundStmt *S = dyn_cast<CompoundStmt>(Body))
David Blaikie0a21d0d2013-01-26 22:16:26 +0000702 EmitCompoundStmtWithoutScope(*S);
703 else
Richard Smithb47c36f2013-11-05 09:12:18 +0000704 EmitStmt(Body);
John McCall89b12b32010-02-18 03:17:58 +0000705}
706
Bob Wilsonbf854f02014-02-17 19:21:09 +0000707/// When instrumenting to collect profile data, the counts for some blocks
708/// such as switch cases need to not include the fall-through counts, so
709/// emit a branch around the instrumentation code. When not instrumenting,
710/// this just calls EmitBlock().
711void CodeGenFunction::EmitBlockWithFallThrough(llvm::BasicBlock *BB,
712 RegionCounter &Cnt) {
Craig Topper8a13c412014-05-21 05:09:00 +0000713 llvm::BasicBlock *SkipCountBB = nullptr;
Bob Wilsonbf854f02014-02-17 19:21:09 +0000714 if (HaveInsertPoint() && CGM.getCodeGenOpts().ProfileInstrGenerate) {
715 // When instrumenting for profiling, the fallthrough to certain
716 // statements needs to skip over the instrumentation code so that we
717 // get an accurate count.
718 SkipCountBB = createBasicBlock("skipcount");
719 EmitBranch(SkipCountBB);
720 }
721 EmitBlock(BB);
722 Cnt.beginRegion(Builder, /*AddIncomingFallThrough=*/true);
723 if (SkipCountBB)
724 EmitBlock(SkipCountBB);
725}
726
John McCall8601a752010-08-03 22:46:07 +0000727/// Tries to mark the given function nounwind based on the
728/// non-existence of any throwing calls within it. We believe this is
729/// lightweight enough to do at -O0.
730static void TryMarkNoThrow(llvm::Function *F) {
John McCall59966992010-08-11 22:38:33 +0000731 // LLVM treats 'nounwind' on a function as part of the type, so we
732 // can't do this on functions that can be overwritten.
733 if (F->mayBeOverridden()) return;
734
John McCall8601a752010-08-03 22:46:07 +0000735 for (llvm::Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
736 for (llvm::BasicBlock::iterator
737 BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
Bill Wendlingf0724e82011-09-19 20:31:14 +0000738 if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(&*BI)) {
John McCall8601a752010-08-03 22:46:07 +0000739 if (!Call->doesNotThrow())
740 return;
Bill Wendlingf0724e82011-09-19 20:31:14 +0000741 } else if (isa<llvm::ResumeInst>(&*BI)) {
742 return;
743 }
Bill Wendling73e465e2012-10-10 03:13:20 +0000744 F->setDoesNotThrow();
John McCall8601a752010-08-03 22:46:07 +0000745}
746
Richard Smithb47c36f2013-11-05 09:12:18 +0000747static void EmitSizedDeallocationFunction(CodeGenFunction &CGF,
748 const FunctionDecl *UnsizedDealloc) {
749 // This is a weak discardable definition of the sized deallocation function.
750 CGF.CurFn->setLinkage(llvm::Function::LinkOnceAnyLinkage);
751
752 // Call the unsized deallocation function and forward the first argument
753 // unchanged.
754 llvm::Constant *Unsized = CGF.CGM.GetAddrOfFunction(UnsizedDealloc);
755 CGF.Builder.CreateCall(Unsized, &*CGF.CurFn->arg_begin());
756}
757
John McCalla738c252011-03-09 04:27:21 +0000758void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn,
759 const CGFunctionInfo &FnInfo) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000760 const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
Michael Ilseman686240a2012-12-04 00:29:55 +0000761
Anders Carlsson63784f42009-02-13 08:11:52 +0000762 // Check if we should generate debug info for this function.
David Blaikie92848de2013-08-26 20:33:21 +0000763 if (FD->hasAttr<NoDebugAttr>())
Craig Topper8a13c412014-05-21 05:09:00 +0000764 DebugInfo = nullptr; // disable debug info indefinitely for this function
Mike Stump11289f42009-09-09 15:08:12 +0000765
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000766 FunctionArgList Args;
Alp Toker314cc812014-01-25 16:55:45 +0000767 QualType ResTy = FD->getReturnType();
Mike Stump11289f42009-09-09 15:08:12 +0000768
Mike Stumpbee78dd2009-12-04 23:26:17 +0000769 CurGD = GD;
Reid Kleckner89077a12013-12-17 19:46:40 +0000770 const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD);
771 if (MD && MD->isInstance()) {
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000772 if (CGM.getCXXABI().HasThisReturn(GD))
773 ResTy = MD->getThisType(getContext());
Reid Kleckner89077a12013-12-17 19:46:40 +0000774 CGM.getCXXABI().buildThisParam(*this, Args);
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000775 }
Mike Stump11289f42009-09-09 15:08:12 +0000776
Chad Rosierf0cccf52012-02-18 00:37:07 +0000777 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i)
778 Args.push_back(FD->getParamDecl(i));
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000779
Reid Kleckner89077a12013-12-17 19:46:40 +0000780 if (MD && (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)))
781 CGM.getCXXABI().addImplicitStructorParams(*this, ResTy, Args);
782
John McCall89b12b32010-02-18 03:17:58 +0000783 SourceRange BodyRange;
784 if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange();
Adrian Prantldc237b52013-05-16 00:41:26 +0000785 CurEHLocation = BodyRange.getEnd();
Anders Carlsson438cf922009-11-06 02:55:43 +0000786
Adrian Prantl42d71b92014-04-10 23:21:53 +0000787 // Use the location of the start of the function to determine where
788 // the function definition is located. By default use the location
789 // of the declaration as the location for the subprogram. A function
790 // may lack a declaration in the source code if it is created by code
791 // gen. (examples: _GLOBAL__I_a, __cxx_global_array_dtor, thunk).
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000792 SourceLocation Loc = FD->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000793
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000794 // If this is a function specialization then use the pattern body
795 // as the location for the function.
796 if (const FunctionDecl *SpecDecl = FD->getTemplateInstantiationPattern())
797 if (SpecDecl->hasBody(SpecDecl))
798 Loc = SpecDecl->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000799
John McCall89b12b32010-02-18 03:17:58 +0000800 // Emit the standard function prologue.
Adrian Prantl42d71b92014-04-10 23:21:53 +0000801 StartFunction(GD, ResTy, Fn, FnInfo, Args, Loc, BodyRange.getBegin());
Anders Carlsson438cf922009-11-06 02:55:43 +0000802
John McCall89b12b32010-02-18 03:17:58 +0000803 // Generate the body of the function.
Bob Wilsonda1ebed2014-03-06 04:55:41 +0000804 PGO.assignRegionCounters(GD.getDecl(), CurFn);
John McCallb81884d2010-02-19 09:25:03 +0000805 if (isa<CXXDestructorDecl>(FD))
806 EmitDestructorBody(Args);
807 else if (isa<CXXConstructorDecl>(FD))
808 EmitConstructorBody(Args);
Richard Smith9c6890a2012-11-01 22:30:59 +0000809 else if (getLangOpts().CUDA &&
Peter Collingbournefa4d6032011-10-06 18:51:56 +0000810 !CGM.getCodeGenOpts().CUDAIsDevice &&
811 FD->hasAttr<CUDAGlobalAttr>())
812 CGM.getCUDARuntime().EmitDeviceStubBody(*this, Args);
Eli Friedman5a6d5072012-02-16 01:37:33 +0000813 else if (isa<CXXConversionDecl>(FD) &&
Douglas Gregor355efbb2012-02-17 03:02:34 +0000814 cast<CXXConversionDecl>(FD)->isLambdaToBlockPointerConversion()) {
815 // The lambda conversion to block pointer is special; the semantics can't be
816 // expressed in the AST, so IRGen needs to special-case it.
817 EmitLambdaToBlockPointerBody(Args);
818 } else if (isa<CXXMethodDecl>(FD) &&
819 cast<CXXMethodDecl>(FD)->isLambdaStaticInvoker()) {
Faisal Vali2b391ab2013-09-26 19:54:12 +0000820 // The lambda static invoker function is special, because it forwards or
Douglas Gregor355efbb2012-02-17 03:02:34 +0000821 // clones the body of the function call operator (but is actually static).
822 EmitLambdaStaticInvokeFunction(cast<CXXMethodDecl>(FD));
Lang Hamesbf122742013-02-17 07:22:09 +0000823 } else if (FD->isDefaulted() && isa<CXXMethodDecl>(FD) &&
Nick Lewyckyb39be1f2013-09-10 05:14:39 +0000824 (cast<CXXMethodDecl>(FD)->isCopyAssignmentOperator() ||
825 cast<CXXMethodDecl>(FD)->isMoveAssignmentOperator())) {
Lang Hamesbf122742013-02-17 07:22:09 +0000826 // Implicit copy-assignment gets the same special treatment as implicit
827 // copy-constructors.
828 emitImplicitAssignmentOperatorBody(Args);
Richard Smithb47c36f2013-11-05 09:12:18 +0000829 } else if (Stmt *Body = FD->getBody()) {
830 EmitFunctionBody(Args, Body);
831 } else if (FunctionDecl *UnsizedDealloc =
832 FD->getCorrespondingUnsizedGlobalDeallocationFunction()) {
833 // Global sized deallocation functions get an implicit weak definition if
834 // they don't have an explicit definition.
835 EmitSizedDeallocationFunction(*this, UnsizedDealloc);
836 } else
837 llvm_unreachable("no definition for emitted function");
Anders Carlssonff8cce42010-02-07 19:45:40 +0000838
Richard Smith9f9e5822012-10-04 23:52:29 +0000839 // C++11 [stmt.return]p2:
840 // Flowing off the end of a function [...] results in undefined behavior in
841 // a value-returning function.
842 // C11 6.9.1p12:
843 // If the '}' that terminates a function is reached, and the value of the
844 // function call is used by the caller, the behavior is undefined.
Richard Smith9c6890a2012-11-01 22:30:59 +0000845 if (getLangOpts().CPlusPlus && !FD->hasImplicitReturnZero() &&
Alp Toker314cc812014-01-25 16:55:45 +0000846 !FD->getReturnType()->isVoidType() && Builder.GetInsertBlock()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +0000847 if (SanOpts->Return) {
848 SanitizerScope SanScope(this);
Richard Smithe30752c2012-10-09 19:52:38 +0000849 EmitCheck(Builder.getFalse(), "missing_return",
850 EmitCheckSourceLocation(FD->getLocation()),
Dmitri Gribenkof8579502013-01-12 19:30:44 +0000851 ArrayRef<llvm::Value *>(), CRK_Unrecoverable);
Alexey Samsonov24cad992014-07-17 18:46:27 +0000852 } else if (CGM.getCodeGenOpts().OptimizationLevel == 0)
Richard Smith6b4ebcc2012-10-15 00:23:07 +0000853 Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::trap));
Richard Smith9f9e5822012-10-04 23:52:29 +0000854 Builder.CreateUnreachable();
855 Builder.ClearInsertionPoint();
856 }
857
John McCall89b12b32010-02-18 03:17:58 +0000858 // Emit the standard function epilogue.
859 FinishFunction(BodyRange.getEnd());
John McCall8601a752010-08-03 22:46:07 +0000860
861 // If we haven't marked the function nothrow through other means, do
862 // a quick pass now to see if we can.
863 if (!CurFn->doesNotThrow())
864 TryMarkNoThrow(CurFn);
Justin Bogneref512b92014-01-06 22:27:43 +0000865
Duncan P. N. Exon Smith2fe531c2014-03-17 21:18:30 +0000866 PGO.emitInstrumentationData();
Justin Bogneref512b92014-01-06 22:27:43 +0000867 PGO.destroyRegionCounters();
Chris Lattner5696e7b2008-06-17 18:05:57 +0000868}
869
Chris Lattner5b1964b2008-11-11 07:41:27 +0000870/// ContainsLabel - Return true if the statement contains a label in it. If
871/// this statement is not executed normally, it not containing a label means
872/// that we can just remove the code.
873bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) {
874 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000875 if (!S) return false;
Mike Stump11289f42009-09-09 15:08:12 +0000876
Chris Lattner5b1964b2008-11-11 07:41:27 +0000877 // If this is a label, we have to emit the code, consider something like:
878 // if (0) { ... foo: bar(); } goto foo;
Chris Lattner29911cc2011-02-28 00:18:40 +0000879 //
880 // TODO: If anyone cared, we could track __label__'s, since we know that you
881 // can't jump to one from outside their declared region.
Chris Lattner5b1964b2008-11-11 07:41:27 +0000882 if (isa<LabelStmt>(S))
883 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000884
Chris Lattner5b1964b2008-11-11 07:41:27 +0000885 // If this is a case/default statement, and we haven't seen a switch, we have
886 // to emit the code.
887 if (isa<SwitchCase>(S) && !IgnoreCaseStmts)
888 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000889
Chris Lattner5b1964b2008-11-11 07:41:27 +0000890 // If this is a switch statement, we want to ignore cases below it.
891 if (isa<SwitchStmt>(S))
892 IgnoreCaseStmts = true;
Mike Stump11289f42009-09-09 15:08:12 +0000893
Chris Lattner5b1964b2008-11-11 07:41:27 +0000894 // Scan subexpressions for verboten labels.
John McCall8322c3a2011-02-13 04:07:26 +0000895 for (Stmt::const_child_range I = S->children(); I; ++I)
Chris Lattner5b1964b2008-11-11 07:41:27 +0000896 if (ContainsLabel(*I, IgnoreCaseStmts))
897 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000898
Chris Lattner5b1964b2008-11-11 07:41:27 +0000899 return false;
900}
901
Chris Lattner29911cc2011-02-28 00:18:40 +0000902/// containsBreak - Return true if the statement contains a break out of it.
903/// If the statement (recursively) contains a switch or loop with a break
904/// inside of it, this is fine.
905bool CodeGenFunction::containsBreak(const Stmt *S) {
906 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000907 if (!S) return false;
Chris Lattner29911cc2011-02-28 00:18:40 +0000908
909 // If this is a switch or loop that defines its own break scope, then we can
910 // include it and anything inside of it.
911 if (isa<SwitchStmt>(S) || isa<WhileStmt>(S) || isa<DoStmt>(S) ||
912 isa<ForStmt>(S))
Chris Lattner30db8282011-02-28 00:42:31 +0000913 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000914
Chris Lattner30db8282011-02-28 00:42:31 +0000915 if (isa<BreakStmt>(S))
Chris Lattner29911cc2011-02-28 00:18:40 +0000916 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000917
Chris Lattner29911cc2011-02-28 00:18:40 +0000918 // Scan subexpressions for verboten breaks.
919 for (Stmt::const_child_range I = S->children(); I; ++I)
920 if (containsBreak(*I))
921 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000922
Chris Lattner29911cc2011-02-28 00:18:40 +0000923 return false;
924}
925
Chris Lattnercd439292008-11-12 08:04:58 +0000926
Chris Lattner41c6ab52011-02-27 23:02:32 +0000927/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
928/// to a constant, or if it does but contains a label, return false. If it
929/// constant folds return true and set the boolean result in Result.
930bool CodeGenFunction::ConstantFoldsToSimpleInteger(const Expr *Cond,
931 bool &ResultBool) {
Richard Trieuc320c742012-07-23 20:21:35 +0000932 llvm::APSInt ResultInt;
Chris Lattner29911cc2011-02-28 00:18:40 +0000933 if (!ConstantFoldsToSimpleInteger(Cond, ResultInt))
934 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000935
Chris Lattner29911cc2011-02-28 00:18:40 +0000936 ResultBool = ResultInt.getBoolValue();
937 return true;
938}
939
940/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
941/// to a constant, or if it does but contains a label, return false. If it
942/// constant folds return true and set the folded value.
943bool CodeGenFunction::
Richard Trieuc320c742012-07-23 20:21:35 +0000944ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &ResultInt) {
Daniel Dunbarf32443c2008-11-12 22:37:10 +0000945 // FIXME: Rename and handle conversion of other evaluatable things
946 // to bool.
Richard Smith5fab0c92011-12-28 19:48:30 +0000947 llvm::APSInt Int;
948 if (!Cond->EvaluateAsInt(Int, getContext()))
Chris Lattner41c6ab52011-02-27 23:02:32 +0000949 return false; // Not foldable, not integer or not fully evaluatable.
Richard Smith5fab0c92011-12-28 19:48:30 +0000950
Chris Lattnercd439292008-11-12 08:04:58 +0000951 if (CodeGenFunction::ContainsLabel(Cond))
Chris Lattner41c6ab52011-02-27 23:02:32 +0000952 return false; // Contains a label.
Richard Smith5fab0c92011-12-28 19:48:30 +0000953
954 ResultInt = Int;
Chris Lattner41c6ab52011-02-27 23:02:32 +0000955 return true;
Chris Lattnercd439292008-11-12 08:04:58 +0000956}
957
958
Chris Lattner29911cc2011-02-28 00:18:40 +0000959
Chris Lattnercd439292008-11-12 08:04:58 +0000960/// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if
961/// statement) to the specified blocks. Based on the condition, this might try
962/// to simplify the codegen of the conditional based on the branch.
963///
964void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
965 llvm::BasicBlock *TrueBlock,
Justin Bogneref512b92014-01-06 22:27:43 +0000966 llvm::BasicBlock *FalseBlock,
967 uint64_t TrueCount) {
Peter Collingbourne91147592011-04-15 00:35:48 +0000968 Cond = Cond->IgnoreParens();
Mike Stump11289f42009-09-09 15:08:12 +0000969
Chris Lattnercd439292008-11-12 08:04:58 +0000970 if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) {
Justin Bogneref512b92014-01-06 22:27:43 +0000971
Chris Lattnercd439292008-11-12 08:04:58 +0000972 // Handle X && Y in a condition.
John McCalle3027922010-08-25 11:45:40 +0000973 if (CondBOp->getOpcode() == BO_LAnd) {
Bob Wilsonbf854f02014-02-17 19:21:09 +0000974 RegionCounter Cnt = getPGORegionCounter(CondBOp);
975
Chris Lattnercd439292008-11-12 08:04:58 +0000976 // If we have "1 && X", simplify the code. "0 && X" would have constant
977 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +0000978 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +0000979 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
980 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +0000981 // br(1 && X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +0000982 Cnt.beginRegion(Builder);
983 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
984 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +0000985 }
Mike Stump11289f42009-09-09 15:08:12 +0000986
Chris Lattnercd439292008-11-12 08:04:58 +0000987 // If we have "X && 1", simplify the code to use an uncond branch.
988 // "X && 0" would have been constant folded to 0.
Chris Lattner41c6ab52011-02-27 23:02:32 +0000989 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
990 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +0000991 // br(X && 1) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +0000992 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
993 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +0000994 }
Mike Stump11289f42009-09-09 15:08:12 +0000995
Chris Lattnercd439292008-11-12 08:04:58 +0000996 // Emit the LHS as a conditional. If the LHS conditional is false, we
997 // want to jump to the FalseBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +0000998 llvm::BasicBlock *LHSTrue = createBasicBlock("land.lhs.true");
Justin Bogneref512b92014-01-06 22:27:43 +0000999 // The counter tells us how often we evaluate RHS, and all of TrueCount
1000 // can be propagated to that branch.
1001 uint64_t RHSCount = Cnt.getCount();
John McCallce1de612011-01-26 04:00:11 +00001002
1003 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001004 EmitBranchOnBoolExpr(CondBOp->getLHS(), LHSTrue, FalseBlock, RHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001005 EmitBlock(LHSTrue);
Mike Stump11289f42009-09-09 15:08:12 +00001006
Anders Carlsson60ddba62010-01-24 00:20:05 +00001007 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001008 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001009 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001010 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, TrueCount);
John McCallce1de612011-01-26 04:00:11 +00001011 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001012
Chris Lattnercd439292008-11-12 08:04:58 +00001013 return;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001014 }
Michael Ilseman686240a2012-12-04 00:29:55 +00001015
Chris Lattner41c6ab52011-02-27 23:02:32 +00001016 if (CondBOp->getOpcode() == BO_LOr) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001017 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1018
Chris Lattnercd439292008-11-12 08:04:58 +00001019 // If we have "0 || X", simplify the code. "1 || X" would have constant
1020 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001021 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001022 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1023 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001024 // br(0 || X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001025 Cnt.beginRegion(Builder);
1026 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1027 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001028 }
Mike Stump11289f42009-09-09 15:08:12 +00001029
Chris Lattnercd439292008-11-12 08:04:58 +00001030 // If we have "X || 0", simplify the code to use an uncond branch.
1031 // "X || 1" would have been constant folded to 1.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001032 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1033 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001034 // br(X || 0) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001035 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1036 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001037 }
Mike Stump11289f42009-09-09 15:08:12 +00001038
Chris Lattnercd439292008-11-12 08:04:58 +00001039 // Emit the LHS as a conditional. If the LHS conditional is true, we
1040 // want to jump to the TrueBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001041 llvm::BasicBlock *LHSFalse = createBasicBlock("lor.lhs.false");
Justin Bogneref512b92014-01-06 22:27:43 +00001042 // We have the count for entry to the RHS and for the whole expression
1043 // being true, so we can divy up True count between the short circuit and
1044 // the RHS.
Justin Bognerbe614c72014-01-23 02:54:30 +00001045 uint64_t LHSCount = Cnt.getParentCount() - Cnt.getCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001046 uint64_t RHSCount = TrueCount - LHSCount;
John McCallce1de612011-01-26 04:00:11 +00001047
1048 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001049 EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, LHSFalse, LHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001050 EmitBlock(LHSFalse);
Mike Stump11289f42009-09-09 15:08:12 +00001051
Anders Carlsson60ddba62010-01-24 00:20:05 +00001052 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001053 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001054 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001055 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, RHSCount);
1056
John McCallce1de612011-01-26 04:00:11 +00001057 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001058
Chris Lattnercd439292008-11-12 08:04:58 +00001059 return;
1060 }
Chris Lattnerd9537732008-11-12 08:13:36 +00001061 }
Mike Stump11289f42009-09-09 15:08:12 +00001062
Chris Lattnerd9537732008-11-12 08:13:36 +00001063 if (const UnaryOperator *CondUOp = dyn_cast<UnaryOperator>(Cond)) {
1064 // br(!x, t, f) -> br(x, f, t)
Justin Bogneref512b92014-01-06 22:27:43 +00001065 if (CondUOp->getOpcode() == UO_LNot) {
1066 // Negate the count.
1067 uint64_t FalseCount = PGO.getCurrentRegionCount() - TrueCount;
1068 // Negate the condition and swap the destination blocks.
1069 return EmitBranchOnBoolExpr(CondUOp->getSubExpr(), FalseBlock, TrueBlock,
1070 FalseCount);
1071 }
Chris Lattnercd439292008-11-12 08:04:58 +00001072 }
Mike Stump11289f42009-09-09 15:08:12 +00001073
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001074 if (const ConditionalOperator *CondOp = dyn_cast<ConditionalOperator>(Cond)) {
Eli Friedman248f8982012-02-14 03:54:45 +00001075 // br(c ? x : y, t, f) -> br(c, br(x, t, f), br(y, t, f))
1076 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1077 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001078
Justin Bogneref512b92014-01-06 22:27:43 +00001079 RegionCounter Cnt = getPGORegionCounter(CondOp);
Eli Friedman248f8982012-02-14 03:54:45 +00001080 ConditionalEvaluation cond(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001081 EmitBranchOnBoolExpr(CondOp->getCond(), LHSBlock, RHSBlock, Cnt.getCount());
1082
1083 // When computing PGO branch weights, we only know the overall count for
1084 // the true block. This code is essentially doing tail duplication of the
1085 // naive code-gen, introducing new edges for which counts are not
1086 // available. Divide the counts proportionally between the LHS and RHS of
1087 // the conditional operator.
1088 uint64_t LHSScaledTrueCount = 0;
1089 if (TrueCount) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001090 double LHSRatio = Cnt.getCount() / (double) Cnt.getParentCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001091 LHSScaledTrueCount = TrueCount * LHSRatio;
1092 }
John McCallce1de612011-01-26 04:00:11 +00001093
Eli Friedman248f8982012-02-14 03:54:45 +00001094 cond.begin(*this);
1095 EmitBlock(LHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001096 Cnt.beginRegion(Builder);
1097 EmitBranchOnBoolExpr(CondOp->getLHS(), TrueBlock, FalseBlock,
1098 LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001099 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001100
Eli Friedman248f8982012-02-14 03:54:45 +00001101 cond.begin(*this);
1102 EmitBlock(RHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001103 EmitBranchOnBoolExpr(CondOp->getRHS(), TrueBlock, FalseBlock,
1104 TrueCount - LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001105 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001106
Eli Friedman248f8982012-02-14 03:54:45 +00001107 return;
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001108 }
1109
Richard Smithea852322013-05-07 21:53:22 +00001110 if (const CXXThrowExpr *Throw = dyn_cast<CXXThrowExpr>(Cond)) {
1111 // Conditional operator handling can give us a throw expression as a
1112 // condition for a case like:
1113 // br(c ? throw x : y, t, f) -> br(c, br(throw x, t, f), br(y, t, f)
1114 // Fold this to:
1115 // br(c, throw x, br(y, t, f))
1116 EmitCXXThrowExpr(Throw, /*KeepInsertionPoint*/false);
1117 return;
1118 }
1119
Justin Bogneref512b92014-01-06 22:27:43 +00001120 // Create branch weights based on the number of times we get here and the
1121 // number of times the condition should be true.
Bob Wilsonbf854f02014-02-17 19:21:09 +00001122 uint64_t CurrentCount = std::max(PGO.getCurrentRegionCount(), TrueCount);
Justin Bogneref512b92014-01-06 22:27:43 +00001123 llvm::MDNode *Weights = PGO.createBranchWeights(TrueCount,
1124 CurrentCount - TrueCount);
1125
Chris Lattnercd439292008-11-12 08:04:58 +00001126 // Emit the code with the fully general case.
1127 llvm::Value *CondV = EvaluateExprAsBool(Cond);
Justin Bogneref512b92014-01-06 22:27:43 +00001128 Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
Chris Lattnercd439292008-11-12 08:04:58 +00001129}
1130
Daniel Dunbara7c8cf62008-08-16 00:56:44 +00001131/// ErrorUnsupported - Print out an error that codegen doesn't support the
Chris Lattnerfc944342007-12-02 01:43:38 +00001132/// specified stmt yet.
David Blaikie4a9ec7b2013-08-19 21:02:26 +00001133void CodeGenFunction::ErrorUnsupported(const Stmt *S, const char *Type) {
1134 CGM.ErrorUnsupported(S, Type);
Chris Lattnerfc944342007-12-02 01:43:38 +00001135}
1136
John McCall2725aa12011-02-01 21:35:06 +00001137/// emitNonZeroVLAInit - Emit the "zero" initialization of a
1138/// variable-length array whose elements have a non-zero bit-pattern.
1139///
James Dennettbe302452012-06-15 22:10:14 +00001140/// \param baseType the inner-most element type of the array
John McCall2725aa12011-02-01 21:35:06 +00001141/// \param src - a char* pointing to the bit-pattern for a single
1142/// base element of the array
1143/// \param sizeInChars - the total size of the VLA, in chars
John McCall2725aa12011-02-01 21:35:06 +00001144static void emitNonZeroVLAInit(CodeGenFunction &CGF, QualType baseType,
Michael Ilseman686240a2012-12-04 00:29:55 +00001145 llvm::Value *dest, llvm::Value *src,
John McCall2725aa12011-02-01 21:35:06 +00001146 llvm::Value *sizeInChars) {
1147 std::pair<CharUnits,CharUnits> baseSizeAndAlign
1148 = CGF.getContext().getTypeInfoInChars(baseType);
1149
1150 CGBuilderTy &Builder = CGF.Builder;
1151
1152 llvm::Value *baseSizeInChars
1153 = llvm::ConstantInt::get(CGF.IntPtrTy, baseSizeAndAlign.first.getQuantity());
1154
Chris Lattner2192fe52011-07-18 04:24:23 +00001155 llvm::Type *i8p = Builder.getInt8PtrTy();
John McCall2725aa12011-02-01 21:35:06 +00001156
1157 llvm::Value *begin = Builder.CreateBitCast(dest, i8p, "vla.begin");
1158 llvm::Value *end = Builder.CreateInBoundsGEP(dest, sizeInChars, "vla.end");
1159
1160 llvm::BasicBlock *originBB = CGF.Builder.GetInsertBlock();
1161 llvm::BasicBlock *loopBB = CGF.createBasicBlock("vla-init.loop");
1162 llvm::BasicBlock *contBB = CGF.createBasicBlock("vla-init.cont");
1163
1164 // Make a loop over the VLA. C99 guarantees that the VLA element
1165 // count must be nonzero.
1166 CGF.EmitBlock(loopBB);
1167
Jay Foad20c0f022011-03-30 11:28:58 +00001168 llvm::PHINode *cur = Builder.CreatePHI(i8p, 2, "vla.cur");
John McCall2725aa12011-02-01 21:35:06 +00001169 cur->addIncoming(begin, originBB);
1170
1171 // memcpy the individual element bit-pattern.
1172 Builder.CreateMemCpy(cur, src, baseSizeInChars,
1173 baseSizeAndAlign.second.getQuantity(),
1174 /*volatile*/ false);
1175
1176 // Go to the next element.
1177 llvm::Value *next = Builder.CreateConstInBoundsGEP1_32(cur, 1, "vla.next");
1178
1179 // Leave if that's the end of the VLA.
1180 llvm::Value *done = Builder.CreateICmpEQ(next, end, "vla-init.isdone");
1181 Builder.CreateCondBr(done, contBB, loopBB);
1182 cur->addIncoming(next, loopBB);
1183
1184 CGF.EmitBlock(contBB);
Michael Ilseman686240a2012-12-04 00:29:55 +00001185}
John McCall2725aa12011-02-01 21:35:06 +00001186
Anders Carlssonc0964b62010-05-22 17:35:42 +00001187void
1188CodeGenFunction::EmitNullInitialization(llvm::Value *DestPtr, QualType Ty) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001189 // Ignore empty classes in C++.
Richard Smith9c6890a2012-11-01 22:30:59 +00001190 if (getLangOpts().CPlusPlus) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001191 if (const RecordType *RT = Ty->getAs<RecordType>()) {
1192 if (cast<CXXRecordDecl>(RT->getDecl())->isEmpty())
1193 return;
1194 }
1195 }
John McCall7cd1d972010-08-07 08:21:30 +00001196
1197 // Cast the dest ptr to the appropriate i8 pointer type.
1198 unsigned DestAS =
1199 cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
Chris Lattner2192fe52011-07-18 04:24:23 +00001200 llvm::Type *BP = Builder.getInt8PtrTy(DestAS);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001201 if (DestPtr->getType() != BP)
Benjamin Kramer76399eb2011-09-27 21:06:10 +00001202 DestPtr = Builder.CreateBitCast(DestPtr, BP);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001203
1204 // Get size and alignment info for this aggregate.
Michael Ilseman686240a2012-12-04 00:29:55 +00001205 std::pair<CharUnits, CharUnits> TypeInfo =
Ken Dyckc5c416f2011-04-22 17:51:05 +00001206 getContext().getTypeInfoInChars(Ty);
1207 CharUnits Size = TypeInfo.first;
1208 CharUnits Align = TypeInfo.second;
Anders Carlsson2e744e82008-08-30 19:51:14 +00001209
John McCalla08ffd22011-01-14 10:37:58 +00001210 llvm::Value *SizeVal;
John McCall2725aa12011-02-01 21:35:06 +00001211 const VariableArrayType *vla;
Mike Stump11289f42009-09-09 15:08:12 +00001212
John McCalla08ffd22011-01-14 10:37:58 +00001213 // Don't bother emitting a zero-byte memset.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001214 if (Size.isZero()) {
John McCalla08ffd22011-01-14 10:37:58 +00001215 // But note that getTypeInfo returns 0 for a VLA.
1216 if (const VariableArrayType *vlaType =
1217 dyn_cast_or_null<VariableArrayType>(
1218 getContext().getAsArrayType(Ty))) {
John McCall23c29fe2011-06-24 21:55:10 +00001219 QualType eltType;
1220 llvm::Value *numElts;
Benjamin Kramer867ea1d2014-03-02 13:01:17 +00001221 std::tie(numElts, eltType) = getVLASize(vlaType);
John McCall23c29fe2011-06-24 21:55:10 +00001222
1223 SizeVal = numElts;
1224 CharUnits eltSize = getContext().getTypeSizeInChars(eltType);
1225 if (!eltSize.isOne())
1226 SizeVal = Builder.CreateNUWMul(SizeVal, CGM.getSize(eltSize));
John McCall2725aa12011-02-01 21:35:06 +00001227 vla = vlaType;
John McCalla08ffd22011-01-14 10:37:58 +00001228 } else {
1229 return;
1230 }
1231 } else {
John McCall23c29fe2011-06-24 21:55:10 +00001232 SizeVal = CGM.getSize(Size);
Craig Topper8a13c412014-05-21 05:09:00 +00001233 vla = nullptr;
John McCalla08ffd22011-01-14 10:37:58 +00001234 }
John McCall7cd1d972010-08-07 08:21:30 +00001235
1236 // If the type contains a pointer to data member we can't memset it to zero.
1237 // Instead, create a null constant and copy it to the destination.
John McCall2725aa12011-02-01 21:35:06 +00001238 // TODO: there are other patterns besides zero that we can usefully memset,
1239 // like -1, which happens to be the pattern used by member-pointers.
John McCall614dbdc2010-08-22 21:01:12 +00001240 if (!CGM.getTypes().isZeroInitializable(Ty)) {
John McCall2725aa12011-02-01 21:35:06 +00001241 // For a VLA, emit a single element, then splat that over the VLA.
1242 if (vla) Ty = getContext().getBaseElementType(vla);
John McCalla08ffd22011-01-14 10:37:58 +00001243
John McCall7cd1d972010-08-07 08:21:30 +00001244 llvm::Constant *NullConstant = CGM.EmitNullConstant(Ty);
1245
Michael Ilseman686240a2012-12-04 00:29:55 +00001246 llvm::GlobalVariable *NullVariable =
John McCall7cd1d972010-08-07 08:21:30 +00001247 new llvm::GlobalVariable(CGM.getModule(), NullConstant->getType(),
Michael Ilseman686240a2012-12-04 00:29:55 +00001248 /*isConstant=*/true,
John McCall7cd1d972010-08-07 08:21:30 +00001249 llvm::GlobalVariable::PrivateLinkage,
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001250 NullConstant, Twine());
John McCall7cd1d972010-08-07 08:21:30 +00001251 llvm::Value *SrcPtr =
1252 Builder.CreateBitCast(NullVariable, Builder.getInt8PtrTy());
1253
John McCall2725aa12011-02-01 21:35:06 +00001254 if (vla) return emitNonZeroVLAInit(*this, Ty, DestPtr, SrcPtr, SizeVal);
1255
John McCall7cd1d972010-08-07 08:21:30 +00001256 // Get and call the appropriate llvm.memcpy overload.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001257 Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align.getQuantity(), false);
John McCall7cd1d972010-08-07 08:21:30 +00001258 return;
Michael Ilseman686240a2012-12-04 00:29:55 +00001259 }
1260
John McCall7cd1d972010-08-07 08:21:30 +00001261 // Otherwise, just memset the whole thing to zero. This is legal
1262 // because in LLVM, all default initializers (other than the ones we just
1263 // handled above) are guaranteed to have a bit pattern of all zeros.
Michael Ilseman686240a2012-12-04 00:29:55 +00001264 Builder.CreateMemSet(DestPtr, Builder.getInt8(0), SizeVal,
Ken Dyckc5c416f2011-04-22 17:51:05 +00001265 Align.getQuantity(), false);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001266}
1267
Chris Lattnerc8e630e2011-02-17 07:39:24 +00001268llvm::BlockAddress *CodeGenFunction::GetAddrOfLabel(const LabelDecl *L) {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001269 // Make sure that there is a block for the indirect goto.
Craig Topper8a13c412014-05-21 05:09:00 +00001270 if (!IndirectBranch)
Chris Lattner6c4d2552009-10-28 23:59:40 +00001271 GetIndirectGotoBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001272
John McCallad5d61e2010-07-23 21:56:41 +00001273 llvm::BasicBlock *BB = getJumpDestForLabel(L).getBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001274
Chris Lattner6c4d2552009-10-28 23:59:40 +00001275 // Make sure the indirect branch includes all of the address-taken blocks.
1276 IndirectBranch->addDestination(BB);
1277 return llvm::BlockAddress::get(CurFn, BB);
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001278}
1279
1280llvm::BasicBlock *CodeGenFunction::GetIndirectGotoBlock() {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001281 // If we already made the indirect branch for indirect goto, return its block.
1282 if (IndirectBranch) return IndirectBranch->getParent();
Michael Ilseman686240a2012-12-04 00:29:55 +00001283
Chris Lattner6c4d2552009-10-28 23:59:40 +00001284 CGBuilderTy TmpBuilder(createBasicBlock("indirectgoto"));
Michael Ilseman686240a2012-12-04 00:29:55 +00001285
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001286 // Create the PHI node that indirect gotos will add entries to.
Jay Foad20c0f022011-03-30 11:28:58 +00001287 llvm::Value *DestVal = TmpBuilder.CreatePHI(Int8PtrTy, 0,
1288 "indirect.goto.dest");
Michael Ilseman686240a2012-12-04 00:29:55 +00001289
Chris Lattner6c4d2552009-10-28 23:59:40 +00001290 // Create the indirect branch instruction.
1291 IndirectBranch = TmpBuilder.CreateIndirectBr(DestVal);
1292 return IndirectBranch->getParent();
Daniel Dunbar88402ce2008-08-04 16:51:22 +00001293}
Anders Carlsson13abd7e2008-11-04 05:30:00 +00001294
John McCall82fe67b2011-07-09 01:37:26 +00001295/// Computes the length of an array in elements, as well as the base
1296/// element type and a properly-typed first element pointer.
1297llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType,
1298 QualType &baseType,
1299 llvm::Value *&addr) {
1300 const ArrayType *arrayType = origArrayType;
1301
1302 // If it's a VLA, we have to load the stored size. Note that
1303 // this is the size of the VLA in bytes, not its size in elements.
Craig Topper8a13c412014-05-21 05:09:00 +00001304 llvm::Value *numVLAElements = nullptr;
John McCall82fe67b2011-07-09 01:37:26 +00001305 if (isa<VariableArrayType>(arrayType)) {
1306 numVLAElements = getVLASize(cast<VariableArrayType>(arrayType)).first;
1307
1308 // Walk into all VLAs. This doesn't require changes to addr,
1309 // which has type T* where T is the first non-VLA element type.
1310 do {
1311 QualType elementType = arrayType->getElementType();
1312 arrayType = getContext().getAsArrayType(elementType);
1313
1314 // If we only have VLA components, 'addr' requires no adjustment.
1315 if (!arrayType) {
1316 baseType = elementType;
1317 return numVLAElements;
1318 }
1319 } while (isa<VariableArrayType>(arrayType));
1320
1321 // We get out here only if we find a constant array type
1322 // inside the VLA.
1323 }
1324
1325 // We have some number of constant-length arrays, so addr should
1326 // have LLVM type [M x [N x [...]]]*. Build a GEP that walks
1327 // down to the first element of addr.
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001328 SmallVector<llvm::Value*, 8> gepIndices;
John McCall82fe67b2011-07-09 01:37:26 +00001329
1330 // GEP down to the array type.
1331 llvm::ConstantInt *zero = Builder.getInt32(0);
1332 gepIndices.push_back(zero);
1333
John McCall82fe67b2011-07-09 01:37:26 +00001334 uint64_t countFromCLAs = 1;
Richard Smithf3c37e82012-04-22 05:51:36 +00001335 QualType eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001336
Chris Lattner2192fe52011-07-18 04:24:23 +00001337 llvm::ArrayType *llvmArrayType =
Richard Smithf3c37e82012-04-22 05:51:36 +00001338 dyn_cast<llvm::ArrayType>(
John McCall82fe67b2011-07-09 01:37:26 +00001339 cast<llvm::PointerType>(addr->getType())->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001340 while (llvmArrayType) {
John McCall82fe67b2011-07-09 01:37:26 +00001341 assert(isa<ConstantArrayType>(arrayType));
1342 assert(cast<ConstantArrayType>(arrayType)->getSize().getZExtValue()
1343 == llvmArrayType->getNumElements());
1344
1345 gepIndices.push_back(zero);
1346 countFromCLAs *= llvmArrayType->getNumElements();
Richard Smithf3c37e82012-04-22 05:51:36 +00001347 eltType = arrayType->getElementType();
John McCall82fe67b2011-07-09 01:37:26 +00001348
1349 llvmArrayType =
1350 dyn_cast<llvm::ArrayType>(llvmArrayType->getElementType());
John McCall82fe67b2011-07-09 01:37:26 +00001351 arrayType = getContext().getAsArrayType(arrayType->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001352 assert((!llvmArrayType || arrayType) &&
1353 "LLVM and Clang types are out-of-synch");
John McCall82fe67b2011-07-09 01:37:26 +00001354 }
1355
Richard Smithf3c37e82012-04-22 05:51:36 +00001356 if (arrayType) {
1357 // From this point onwards, the Clang array type has been emitted
1358 // as some other type (probably a packed struct). Compute the array
1359 // size, and just emit the 'begin' expression as a bitcast.
1360 while (arrayType) {
1361 countFromCLAs *=
1362 cast<ConstantArrayType>(arrayType)->getSize().getZExtValue();
1363 eltType = arrayType->getElementType();
1364 arrayType = getContext().getAsArrayType(eltType);
1365 }
John McCall82fe67b2011-07-09 01:37:26 +00001366
Micah Villmowea2fea22012-10-25 15:39:14 +00001367 unsigned AddressSpace = addr->getType()->getPointerAddressSpace();
Richard Smithf3c37e82012-04-22 05:51:36 +00001368 llvm::Type *BaseType = ConvertType(eltType)->getPointerTo(AddressSpace);
1369 addr = Builder.CreateBitCast(addr, BaseType, "array.begin");
1370 } else {
1371 // Create the actual GEP.
1372 addr = Builder.CreateInBoundsGEP(addr, gepIndices, "array.begin");
1373 }
1374
1375 baseType = eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001376
1377 llvm::Value *numElements
1378 = llvm::ConstantInt::get(SizeTy, countFromCLAs);
1379
1380 // If we had any VLA dimensions, factor them in.
1381 if (numVLAElements)
1382 numElements = Builder.CreateNUWMul(numVLAElements, numElements);
1383
1384 return numElements;
1385}
1386
John McCall23c29fe2011-06-24 21:55:10 +00001387std::pair<llvm::Value*, QualType>
1388CodeGenFunction::getVLASize(QualType type) {
1389 const VariableArrayType *vla = getContext().getAsVariableArrayType(type);
1390 assert(vla && "type was not a variable array type!");
1391 return getVLASize(vla);
Anders Carlssone388a5b2008-12-20 20:27:15 +00001392}
Anders Carlssonccbe9202008-12-12 07:19:02 +00001393
John McCall23c29fe2011-06-24 21:55:10 +00001394std::pair<llvm::Value*, QualType>
1395CodeGenFunction::getVLASize(const VariableArrayType *type) {
1396 // The number of elements so far; always size_t.
Craig Topper8a13c412014-05-21 05:09:00 +00001397 llvm::Value *numElements = nullptr;
John McCall23c29fe2011-06-24 21:55:10 +00001398
1399 QualType elementType;
1400 do {
1401 elementType = type->getElementType();
1402 llvm::Value *vlaSize = VLASizeMap[type->getSizeExpr()];
1403 assert(vlaSize && "no size for VLA!");
1404 assert(vlaSize->getType() == SizeTy);
1405
1406 if (!numElements) {
1407 numElements = vlaSize;
1408 } else {
1409 // It's undefined behavior if this wraps around, so mark it that way.
Alexey Samsonovcb3f8122014-03-20 10:48:29 +00001410 // FIXME: Teach -fsanitize=undefined to trap this.
John McCall23c29fe2011-06-24 21:55:10 +00001411 numElements = Builder.CreateNUWMul(numElements, vlaSize);
1412 }
1413 } while ((type = getContext().getAsVariableArrayType(elementType)));
1414
1415 return std::pair<llvm::Value*,QualType>(numElements, elementType);
1416}
1417
1418void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
1419 assert(type->isVariablyModifiedType() &&
Anders Carlsson8a01b792008-12-20 20:46:34 +00001420 "Must pass variably modified type to EmitVLASizes!");
Mike Stump11289f42009-09-09 15:08:12 +00001421
Daniel Dunbarb6adc432009-07-19 06:58:07 +00001422 EnsureInsertPoint();
Mike Stump11289f42009-09-09 15:08:12 +00001423
John McCall23c29fe2011-06-24 21:55:10 +00001424 // We're going to walk down into the type and look for VLA
1425 // expressions.
John McCall23c29fe2011-06-24 21:55:10 +00001426 do {
1427 assert(type->isVariablyModifiedType());
Mike Stump11289f42009-09-09 15:08:12 +00001428
John McCall23c29fe2011-06-24 21:55:10 +00001429 const Type *ty = type.getTypePtr();
1430 switch (ty->getTypeClass()) {
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001431
John McCall23c29fe2011-06-24 21:55:10 +00001432#define TYPE(Class, Base)
1433#define ABSTRACT_TYPE(Class, Base)
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001434#define NON_CANONICAL_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001435#define DEPENDENT_TYPE(Class, Base) case Type::Class:
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001436#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001437#include "clang/AST/TypeNodes.def"
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001438 llvm_unreachable("unexpected dependent type!");
Mike Stump11289f42009-09-09 15:08:12 +00001439
John McCall23c29fe2011-06-24 21:55:10 +00001440 // These types are never variably-modified.
1441 case Type::Builtin:
1442 case Type::Complex:
1443 case Type::Vector:
1444 case Type::ExtVector:
1445 case Type::Record:
1446 case Type::Enum:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001447 case Type::Elaborated:
1448 case Type::TemplateSpecialization:
John McCall23c29fe2011-06-24 21:55:10 +00001449 case Type::ObjCObject:
1450 case Type::ObjCInterface:
1451 case Type::ObjCObjectPointer:
1452 llvm_unreachable("type class is never variably-modified!");
Mike Stump11289f42009-09-09 15:08:12 +00001453
Reid Kleckner0503a872013-12-05 01:23:43 +00001454 case Type::Adjusted:
1455 type = cast<AdjustedType>(ty)->getAdjustedType();
1456 break;
1457
Reid Kleckner8a365022013-06-24 17:51:48 +00001458 case Type::Decayed:
1459 type = cast<DecayedType>(ty)->getPointeeType();
1460 break;
1461
John McCall23c29fe2011-06-24 21:55:10 +00001462 case Type::Pointer:
1463 type = cast<PointerType>(ty)->getPointeeType();
1464 break;
Mike Stump11289f42009-09-09 15:08:12 +00001465
John McCall23c29fe2011-06-24 21:55:10 +00001466 case Type::BlockPointer:
1467 type = cast<BlockPointerType>(ty)->getPointeeType();
1468 break;
1469
1470 case Type::LValueReference:
1471 case Type::RValueReference:
1472 type = cast<ReferenceType>(ty)->getPointeeType();
1473 break;
1474
1475 case Type::MemberPointer:
1476 type = cast<MemberPointerType>(ty)->getPointeeType();
1477 break;
1478
1479 case Type::ConstantArray:
1480 case Type::IncompleteArray:
1481 // Losing element qualification here is fine.
1482 type = cast<ArrayType>(ty)->getElementType();
1483 break;
1484
1485 case Type::VariableArray: {
1486 // Losing element qualification here is fine.
1487 const VariableArrayType *vat = cast<VariableArrayType>(ty);
1488
1489 // Unknown size indication requires no size computation.
1490 // Otherwise, evaluate and record it.
1491 if (const Expr *size = vat->getSizeExpr()) {
1492 // It's possible that we might have emitted this already,
1493 // e.g. with a typedef and a pointer to it.
1494 llvm::Value *&entry = VLASizeMap[size];
1495 if (!entry) {
Richard Smith481652b2012-10-10 01:11:12 +00001496 llvm::Value *Size = EmitScalarExpr(size);
1497
1498 // C11 6.7.6.2p5:
1499 // If the size is an expression that is not an integer constant
1500 // expression [...] each time it is evaluated it shall have a value
1501 // greater than zero.
Will Dietzf54319c2013-01-18 11:30:38 +00001502 if (SanOpts->VLABound &&
Richard Smithb1b0ab42012-11-05 22:21:05 +00001503 size->getType()->isSignedIntegerType()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +00001504 SanitizerScope SanScope(this);
Richard Smith481652b2012-10-10 01:11:12 +00001505 llvm::Value *Zero = llvm::Constant::getNullValue(Size->getType());
1506 llvm::Constant *StaticArgs[] = {
1507 EmitCheckSourceLocation(size->getLocStart()),
1508 EmitCheckTypeDescriptor(size->getType())
1509 };
1510 EmitCheck(Builder.CreateICmpSGT(Size, Zero),
Will Dietz88e02332012-12-02 19:50:33 +00001511 "vla_bound_not_positive", StaticArgs, Size,
1512 CRK_Recoverable);
Richard Smith481652b2012-10-10 01:11:12 +00001513 }
1514
John McCall23c29fe2011-06-24 21:55:10 +00001515 // Always zexting here would be wrong if it weren't
1516 // undefined behavior to have a negative bound.
Richard Smith8772bd82012-10-10 01:12:11 +00001517 entry = Builder.CreateIntCast(Size, SizeTy, /*signed*/ false);
John McCall23c29fe2011-06-24 21:55:10 +00001518 }
1519 }
1520 type = vat->getElementType();
1521 break;
Anders Carlsson8a01b792008-12-20 20:46:34 +00001522 }
Mike Stump11289f42009-09-09 15:08:12 +00001523
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001524 case Type::FunctionProto:
John McCall23c29fe2011-06-24 21:55:10 +00001525 case Type::FunctionNoProto:
Alp Toker314cc812014-01-25 16:55:45 +00001526 type = cast<FunctionType>(ty)->getReturnType();
John McCall23c29fe2011-06-24 21:55:10 +00001527 break;
Eli Friedman0dfb8892011-10-06 23:00:33 +00001528
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001529 case Type::Paren:
1530 case Type::TypeOf:
1531 case Type::UnaryTransform:
1532 case Type::Attributed:
1533 case Type::SubstTemplateTypeParm:
David Blaikie66ed89d2013-07-13 21:08:08 +00001534 case Type::PackExpansion:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001535 // Keep walking after single level desugaring.
1536 type = type.getSingleStepDesugaredType(getContext());
1537 break;
1538
1539 case Type::Typedef:
1540 case Type::Decltype:
1541 case Type::Auto:
1542 // Stop walking: nothing to do.
1543 return;
1544
1545 case Type::TypeOfExpr:
1546 // Stop walking: emit typeof expression.
1547 EmitIgnoredExpr(cast<TypeOfExprType>(ty)->getUnderlyingExpr());
1548 return;
1549
Eli Friedman0dfb8892011-10-06 23:00:33 +00001550 case Type::Atomic:
1551 type = cast<AtomicType>(ty)->getValueType();
1552 break;
John McCall23c29fe2011-06-24 21:55:10 +00001553 }
1554 } while (type->isVariablyModifiedType());
Anders Carlssonccbe9202008-12-12 07:19:02 +00001555}
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001556
1557llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) {
Dan Gohmane9e32dc2010-10-29 22:47:07 +00001558 if (getContext().getBuiltinVaListType()->isArrayType())
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001559 return EmitScalarExpr(E);
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001560 return EmitLValue(E).getAddress();
1561}
Anders Carlsson15cb75a2009-02-07 22:53:43 +00001562
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001563void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
1564 llvm::Constant *Init) {
Devang Pateldc866e12010-08-10 17:53:33 +00001565 assert (Init && "Invalid DeclRefExpr initializer!");
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001566 if (CGDebugInfo *Dbg = getDebugInfo())
1567 if (CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
1568 Dbg->EmitGlobalVariable(E->getDecl(), Init);
Devang Patele03edfd2010-08-10 07:24:25 +00001569}
John McCallc07a0c72011-02-17 10:25:35 +00001570
1571CodeGenFunction::PeepholeProtection
1572CodeGenFunction::protectFromPeepholes(RValue rvalue) {
1573 // At the moment, the only aggressive peephole we do in IR gen
1574 // is trunc(zext) folding, but if we add more, we can easily
1575 // extend this protection.
1576
1577 if (!rvalue.isScalar()) return PeepholeProtection();
1578 llvm::Value *value = rvalue.getScalarVal();
1579 if (!isa<llvm::ZExtInst>(value)) return PeepholeProtection();
1580
1581 // Just make an extra bitcast.
1582 assert(HaveInsertPoint());
1583 llvm::Instruction *inst = new llvm::BitCastInst(value, value->getType(), "",
1584 Builder.GetInsertBlock());
1585
1586 PeepholeProtection protection;
1587 protection.Inst = inst;
1588 return protection;
1589}
1590
1591void CodeGenFunction::unprotectFromPeepholes(PeepholeProtection protection) {
1592 if (!protection.Inst) return;
1593
1594 // In theory, we could try to duplicate the peepholes now, but whatever.
1595 protection.Inst->eraseFromParent();
1596}
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001597
1598llvm::Value *CodeGenFunction::EmitAnnotationCall(llvm::Value *AnnotationFn,
1599 llvm::Value *AnnotatedVal,
Dmitri Gribenkof8579502013-01-12 19:30:44 +00001600 StringRef AnnotationStr,
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001601 SourceLocation Location) {
1602 llvm::Value *Args[4] = {
1603 AnnotatedVal,
1604 Builder.CreateBitCast(CGM.EmitAnnotationString(AnnotationStr), Int8PtrTy),
1605 Builder.CreateBitCast(CGM.EmitAnnotationUnit(Location), Int8PtrTy),
1606 CGM.EmitAnnotationLineNo(Location)
1607 };
1608 return Builder.CreateCall(AnnotationFn, Args);
1609}
1610
1611void CodeGenFunction::EmitVarAnnotations(const VarDecl *D, llvm::Value *V) {
1612 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1613 // FIXME We create a new bitcast for every annotation because that's what
1614 // llvm-gcc was doing.
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001615 for (const auto *I : D->specific_attrs<AnnotateAttr>())
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001616 EmitAnnotationCall(CGM.getIntrinsic(llvm::Intrinsic::var_annotation),
1617 Builder.CreateBitCast(V, CGM.Int8PtrTy, V->getName()),
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001618 I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001619}
1620
1621llvm::Value *CodeGenFunction::EmitFieldAnnotations(const FieldDecl *D,
1622 llvm::Value *V) {
1623 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1624 llvm::Type *VTy = V->getType();
1625 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::ptr_annotation,
1626 CGM.Int8PtrTy);
1627
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001628 for (const auto *I : D->specific_attrs<AnnotateAttr>()) {
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001629 // FIXME Always emit the cast inst so we can differentiate between
1630 // annotation on the first field of a struct and annotation on the struct
1631 // itself.
1632 if (VTy != CGM.Int8PtrTy)
1633 V = Builder.Insert(new llvm::BitCastInst(V, CGM.Int8PtrTy));
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001634 V = EmitAnnotationCall(F, V, I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001635 V = Builder.CreateBitCast(V, VTy);
1636 }
1637
1638 return V;
1639}
Ben Langmuir3b4c30b2013-05-09 19:17:11 +00001640
1641CodeGenFunction::CGCapturedStmtInfo::~CGCapturedStmtInfo() { }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001642
Alexey Samsonov24cad992014-07-17 18:46:27 +00001643CodeGenFunction::SanitizerScope::SanitizerScope(CodeGenFunction *CGF)
1644 : CGF(CGF) {
1645 assert(!CGF->IsSanitizerScope);
1646 CGF->IsSanitizerScope = true;
1647}
1648
1649CodeGenFunction::SanitizerScope::~SanitizerScope() {
1650 CGF->IsSanitizerScope = false;
1651}
1652
Alexander Musman515ad8c2014-05-22 08:54:05 +00001653void CodeGenFunction::InsertHelper(llvm::Instruction *I,
1654 const llvm::Twine &Name,
1655 llvm::BasicBlock *BB,
1656 llvm::BasicBlock::iterator InsertPt) const {
1657 LoopStack.InsertHelper(I);
Alexey Samsonov24cad992014-07-17 18:46:27 +00001658 if (IsSanitizerScope) {
1659 I->setMetadata(
1660 CGM.getModule().getMDKindID("nosanitize"),
1661 llvm::MDNode::get(CGM.getLLVMContext(), ArrayRef<llvm::Value *>()));
1662 }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001663}
1664
1665template <bool PreserveNames>
1666void CGBuilderInserter<PreserveNames>::InsertHelper(
1667 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1668 llvm::BasicBlock::iterator InsertPt) const {
1669 llvm::IRBuilderDefaultInserter<PreserveNames>::InsertHelper(I, Name, BB,
1670 InsertPt);
1671 if (CGF)
1672 CGF->InsertHelper(I, Name, BB, InsertPt);
1673}
1674
1675#ifdef NDEBUG
1676#define PreserveNames false
1677#else
1678#define PreserveNames true
1679#endif
1680template void CGBuilderInserter<PreserveNames>::InsertHelper(
1681 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1682 llvm::BasicBlock::iterator InsertPt) const;
1683#undef PreserveNames