blob: d609ac745bfa71d8bbee1b0c04d30f8b187c750c [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
Fraser Cormackdadc3712014-07-30 14:39:53 +0000361 // MDNode for the kernel argument base type names.
362 SmallVector<llvm::Value*, 8> argBaseTypeNames;
363 argBaseTypeNames.push_back(
364 llvm::MDString::get(Context, "kernel_arg_base_type"));
365
Guy Benyeifb36ede2013-03-24 13:58:12 +0000366 // MDNode for the kernel argument type qualifiers.
367 SmallVector<llvm::Value*, 8> argTypeQuals;
368 argTypeQuals.push_back(llvm::MDString::get(Context, "kernel_arg_type_qual"));
369
Tanya Lattner7445ada2012-07-11 23:02:10 +0000370 // MDNode for the kernel argument names.
371 SmallVector<llvm::Value*, 8> argNames;
372 argNames.push_back(llvm::MDString::get(Context, "kernel_arg_name"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000373
Tanya Lattner7445ada2012-07-11 23:02:10 +0000374 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i) {
375 const ParmVarDecl *parm = FD->getParamDecl(i);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000376 QualType ty = parm->getType();
377 std::string typeQuals;
378
379 if (ty->isPointerType()) {
380 QualType pointeeTy = ty->getPointeeType();
381
382 // Get address qualifier.
383 addressQuals.push_back(Builder.getInt32(ASTCtx.getTargetAddressSpace(
384 pointeeTy.getAddressSpace())));
385
386 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000387 std::string typeName =
388 pointeeTy.getUnqualifiedType().getAsString(Policy) + "*";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000389
390 // Turn "unsigned type" to "utype"
391 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000392 if (pointeeTy.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000393 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000394
395 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
396
Fraser Cormackdadc3712014-07-30 14:39:53 +0000397 std::string baseTypeName =
398 pointeeTy.getUnqualifiedType().getCanonicalType().getAsString(
399 Policy) +
400 "*";
401
402 // Turn "unsigned type" to "utype"
403 pos = baseTypeName.find("unsigned");
404 if (pos != std::string::npos)
405 baseTypeName.erase(pos+1, 8);
406
407 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
408
Guy Benyeifb36ede2013-03-24 13:58:12 +0000409 // Get argument type qualifiers:
410 if (ty.isRestrictQualified())
411 typeQuals = "restrict";
412 if (pointeeTy.isConstQualified() ||
413 (pointeeTy.getAddressSpace() == LangAS::opencl_constant))
Benjamin Krameref89ae02013-03-24 16:04:55 +0000414 typeQuals += typeQuals.empty() ? "const" : " const";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000415 if (pointeeTy.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000416 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000417 } else {
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000418 uint32_t AddrSpc = 0;
419 if (ty->isImageType())
420 AddrSpc =
421 CGM.getContext().getTargetAddressSpace(LangAS::opencl_global);
Bob Wilson95a27b02014-02-17 19:20:59 +0000422
Pekka Jaaskelainen3587b322014-01-09 13:37:30 +0000423 addressQuals.push_back(Builder.getInt32(AddrSpc));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000424
425 // Get argument type name.
Joey Gouly92a47442014-04-04 13:43:57 +0000426 std::string typeName = ty.getUnqualifiedType().getAsString(Policy);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000427
428 // Turn "unsigned type" to "utype"
429 std::string::size_type pos = typeName.find("unsigned");
Fraser Cormack152493b2014-07-30 13:41:12 +0000430 if (ty.isCanonical() && pos != std::string::npos)
Benjamin Krameref89ae02013-03-24 16:04:55 +0000431 typeName.erase(pos+1, 8);
Guy Benyeifb36ede2013-03-24 13:58:12 +0000432
433 argTypeNames.push_back(llvm::MDString::get(Context, typeName));
434
Fraser Cormackdadc3712014-07-30 14:39:53 +0000435 std::string baseTypeName =
436 ty.getUnqualifiedType().getCanonicalType().getAsString(Policy);
437
438 // Turn "unsigned type" to "utype"
439 pos = baseTypeName.find("unsigned");
440 if (pos != std::string::npos)
441 baseTypeName.erase(pos+1, 8);
442
443 argBaseTypeNames.push_back(llvm::MDString::get(Context, baseTypeName));
444
Guy Benyeifb36ede2013-03-24 13:58:12 +0000445 // Get argument type qualifiers:
446 if (ty.isConstQualified())
447 typeQuals = "const";
448 if (ty.isVolatileQualified())
Benjamin Krameref89ae02013-03-24 16:04:55 +0000449 typeQuals += typeQuals.empty() ? "volatile" : " volatile";
Guy Benyeifb36ede2013-03-24 13:58:12 +0000450 }
Justin Bogner0f066062013-11-22 10:20:40 +0000451
Guy Benyeifb36ede2013-03-24 13:58:12 +0000452 argTypeQuals.push_back(llvm::MDString::get(Context, typeQuals));
453
454 // Get image access qualifier:
455 if (ty->isImageType()) {
Aaron Ballmanc4327992013-12-19 03:09:10 +0000456 const OpenCLImageAccessAttr *A = parm->getAttr<OpenCLImageAccessAttr>();
Aaron Ballman26891332014-01-14 17:41:53 +0000457 if (A && A->isWriteOnly())
Guy Benyeifb36ede2013-03-24 13:58:12 +0000458 accessQuals.push_back(llvm::MDString::get(Context, "write_only"));
459 else
460 accessQuals.push_back(llvm::MDString::get(Context, "read_only"));
Aaron Ballman26891332014-01-14 17:41:53 +0000461 // FIXME: what about read_write?
Guy Benyeifb36ede2013-03-24 13:58:12 +0000462 } else
463 accessQuals.push_back(llvm::MDString::get(Context, "none"));
Michael Ilseman686240a2012-12-04 00:29:55 +0000464
Tanya Lattner7445ada2012-07-11 23:02:10 +0000465 // Get argument name.
466 argNames.push_back(llvm::MDString::get(Context, parm->getName()));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000467 }
Guy Benyeifb36ede2013-03-24 13:58:12 +0000468
469 kernelMDArgs.push_back(llvm::MDNode::get(Context, addressQuals));
470 kernelMDArgs.push_back(llvm::MDNode::get(Context, accessQuals));
471 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeNames));
Fraser Cormackdadc3712014-07-30 14:39:53 +0000472 kernelMDArgs.push_back(llvm::MDNode::get(Context, argBaseTypeNames));
Guy Benyeifb36ede2013-03-24 13:58:12 +0000473 kernelMDArgs.push_back(llvm::MDNode::get(Context, argTypeQuals));
Tanya Lattner7445ada2012-07-11 23:02:10 +0000474 kernelMDArgs.push_back(llvm::MDNode::get(Context, argNames));
475}
476
Michael Ilseman686240a2012-12-04 00:29:55 +0000477void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000478 llvm::Function *Fn)
479{
480 if (!FD->hasAttr<OpenCLKernelAttr>())
481 return;
482
483 llvm::LLVMContext &Context = getLLVMContext();
484
Dmitri Gribenkof8579502013-01-12 19:30:44 +0000485 SmallVector <llvm::Value*, 5> kernelMDArgs;
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000486 kernelMDArgs.push_back(Fn);
487
Tanya Lattner7445ada2012-07-11 23:02:10 +0000488 if (CGM.getCodeGenOpts().EmitOpenCLArgMetadata)
Guy Benyeifb36ede2013-03-24 13:58:12 +0000489 GenOpenCLArgMetadata(FD, Fn, CGM, Context, kernelMDArgs,
490 Builder, getContext());
Michael Ilseman686240a2012-12-04 00:29:55 +0000491
Aaron Ballmanc4327992013-12-19 03:09:10 +0000492 if (const VecTypeHintAttr *A = FD->getAttr<VecTypeHintAttr>()) {
493 QualType hintQTy = A->getTypeHint();
Joey Goulyaba589c2013-03-08 09:42:32 +0000494 const ExtVectorType *hintEltQTy = hintQTy->getAs<ExtVectorType>();
495 bool isSignedInteger =
496 hintQTy->isSignedIntegerType() ||
497 (hintEltQTy && hintEltQTy->getElementType()->isSignedIntegerType());
498 llvm::Value *attrMDArgs[] = {
499 llvm::MDString::get(Context, "vec_type_hint"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000500 llvm::UndefValue::get(CGM.getTypes().ConvertType(A->getTypeHint())),
Joey Goulyaba589c2013-03-08 09:42:32 +0000501 llvm::ConstantInt::get(
502 llvm::IntegerType::get(Context, 32),
503 llvm::APInt(32, (uint64_t)(isSignedInteger ? 1 : 0)))
504 };
505 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
506 }
507
Aaron Ballmanc4327992013-12-19 03:09:10 +0000508 if (const WorkGroupSizeHintAttr *A = FD->getAttr<WorkGroupSizeHintAttr>()) {
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000509 llvm::Value *attrMDArgs[] = {
510 llvm::MDString::get(Context, "work_group_size_hint"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000511 Builder.getInt32(A->getXDim()),
512 Builder.getInt32(A->getYDim()),
513 Builder.getInt32(A->getZDim())
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000514 };
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000515 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
516 }
517
Aaron Ballmanc4327992013-12-19 03:09:10 +0000518 if (const ReqdWorkGroupSizeAttr *A = FD->getAttr<ReqdWorkGroupSizeAttr>()) {
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000519 llvm::Value *attrMDArgs[] = {
520 llvm::MDString::get(Context, "reqd_work_group_size"),
Aaron Ballmanc4327992013-12-19 03:09:10 +0000521 Builder.getInt32(A->getXDim()),
522 Builder.getInt32(A->getYDim()),
523 Builder.getInt32(A->getZDim())
Benjamin Kramerc1b78412012-11-15 16:40:35 +0000524 };
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000525 kernelMDArgs.push_back(llvm::MDNode::get(Context, attrMDArgs));
526 }
527
528 llvm::MDNode *kernelMDNode = llvm::MDNode::get(Context, kernelMDArgs);
529 llvm::NamedMDNode *OpenCLKernelMetadata =
530 CGM.getModule().getOrInsertNamedMetadata("opencl.kernels");
531 OpenCLKernelMetadata->addOperand(kernelMDNode);
532}
533
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000534/// Determine whether the function F ends with a return stmt.
535static bool endsWithReturn(const Decl* F) {
536 const Stmt *Body = nullptr;
537 if (auto *FD = dyn_cast_or_null<FunctionDecl>(F))
538 Body = FD->getBody();
539 else if (auto *OMD = dyn_cast_or_null<ObjCMethodDecl>(F))
540 Body = OMD->getBody();
541
542 if (auto *CS = dyn_cast_or_null<CompoundStmt>(Body)) {
543 auto LastStmt = CS->body_rbegin();
544 if (LastStmt != CS->body_rend())
545 return isa<ReturnStmt>(*LastStmt);
546 }
547 return false;
548}
549
John McCalldec348f72013-05-03 07:33:41 +0000550void CodeGenFunction::StartFunction(GlobalDecl GD,
551 QualType RetTy,
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000552 llvm::Function *Fn,
John McCalla738c252011-03-09 04:27:21 +0000553 const CGFunctionInfo &FnInfo,
Daniel Dunbar354d2782008-10-18 18:22:23 +0000554 const FunctionArgList &Args,
Adrian Prantl42d71b92014-04-10 23:21:53 +0000555 SourceLocation Loc,
Tilmann Scheller99cc30c2011-03-02 21:36:49 +0000556 SourceLocation StartLoc) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000557 const Decl *D = GD.getDecl();
Michael Ilseman686240a2012-12-04 00:29:55 +0000558
Anders Carlssonf4478e92009-02-09 20:20:56 +0000559 DidCallStackSave = false;
John McCalldec348f72013-05-03 07:33:41 +0000560 CurCodeDecl = D;
Craig Topper8a13c412014-05-21 05:09:00 +0000561 CurFuncDecl = (D ? D->getNonClosureContext() : nullptr);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000562 FnRetTy = RetTy;
Daniel Dunbar9c426522008-07-29 23:18:29 +0000563 CurFn = Fn;
John McCalla738c252011-03-09 04:27:21 +0000564 CurFnInfo = &FnInfo;
Chris Lattner5696e7b2008-06-17 18:05:57 +0000565 assert(CurFn->isDeclaration() && "Function already has body?");
566
Alexey Samsonovac4afe42014-07-07 23:59:57 +0000567 if (CGM.getSanitizerBlacklist().isIn(*Fn))
Will Dietzf54319c2013-01-18 11:30:38 +0000568 SanOpts = &SanitizerOptions::Disabled;
Will Dietzf54319c2013-01-18 11:30:38 +0000569
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000570 // Pass inline keyword to optimizer if it appears explicitly on any
Roman Divackydd9bfb22014-01-15 19:07:16 +0000571 // declaration. Also, in the case of -fno-inline attach NoInline
David Majnemer19d7d542014-02-25 10:51:14 +0000572 // attribute to all function that are not marked AlwaysInline.
Roman Divackydd9bfb22014-01-15 19:07:16 +0000573 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
574 if (!CGM.getCodeGenOpts().NoInline) {
Aaron Ballman86c93902014-03-06 23:45:36 +0000575 for (auto RI : FD->redecls())
Chad Rosier883b2572012-03-14 23:32:11 +0000576 if (RI->isInlineSpecified()) {
Bill Wendling207f0532012-12-20 19:27:06 +0000577 Fn->addFnAttr(llvm::Attribute::InlineHint);
Chad Rosier883b2572012-03-14 23:32:11 +0000578 break;
579 }
David Majnemer67e541e1c2014-02-25 09:53:29 +0000580 } else if (!FD->hasAttr<AlwaysInlineAttr>())
Roman Divackydd9bfb22014-01-15 19:07:16 +0000581 Fn->addFnAttr(llvm::Attribute::NoInline);
582 }
Jakob Stoklund Olesen819e54b2010-02-09 00:10:00 +0000583
Richard Smith9c6890a2012-11-01 22:30:59 +0000584 if (getLangOpts().OpenCL) {
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000585 // Add metadata for a kernel function.
586 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
Tanya Lattnerbcffcdf2012-07-09 22:06:01 +0000587 EmitOpenCLKernelMetadata(FD, Fn);
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +0000588 }
589
Peter Collingbourneb453cd62013-10-20 21:29:19 +0000590 // If we are checking function types, emit a function type signature as
591 // prefix data.
592 if (getLangOpts().CPlusPlus && SanOpts->Function) {
593 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
594 if (llvm::Constant *PrefixSig =
595 CGM.getTargetCodeGenInfo().getUBSanFunctionSignature(CGM)) {
596 llvm::Constant *FTRTTIConst =
597 CGM.GetAddrOfRTTIDescriptor(FD->getType(), /*ForEH=*/true);
598 llvm::Constant *PrefixStructElems[] = { PrefixSig, FTRTTIConst };
599 llvm::Constant *PrefixStructConst =
600 llvm::ConstantStruct::getAnon(PrefixStructElems, /*Packed=*/true);
601 Fn->setPrefixData(PrefixStructConst);
602 }
603 }
604 }
605
Daniel Dunbar75283ff2008-11-11 02:29:29 +0000606 llvm::BasicBlock *EntryBB = createBasicBlock("entry", CurFn);
Daniel Dunbar54bb1932008-09-09 21:00:17 +0000607
Chris Lattner5696e7b2008-06-17 18:05:57 +0000608 // Create a marker to make it easy to insert allocas into the entryblock
609 // later. Don't create this with the builder, because we don't want it
610 // folded.
Chris Lattner5e016ae2010-06-27 07:15:29 +0000611 llvm::Value *Undef = llvm::UndefValue::get(Int32Ty);
612 AllocaInsertPt = new llvm::BitCastInst(Undef, Int32Ty, "", EntryBB);
Chris Lattner47640222009-03-22 00:24:14 +0000613 if (Builder.isNamePreserving())
614 AllocaInsertPt->setName("allocapt");
Mike Stump11289f42009-09-09 15:08:12 +0000615
John McCallbd309292010-07-06 01:34:17 +0000616 ReturnBlock = getJumpDestInCurrentScope("return");
Mike Stump11289f42009-09-09 15:08:12 +0000617
Chris Lattner5696e7b2008-06-17 18:05:57 +0000618 Builder.SetInsertPoint(EntryBB);
Mike Stump11289f42009-09-09 15:08:12 +0000619
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000620 // Emit subprogram debug descriptor.
Anders Carlsson63784f42009-02-13 08:11:52 +0000621 if (CGDebugInfo *DI = getDebugInfo()) {
Jordan Rose5c382722013-03-08 21:51:21 +0000622 SmallVector<QualType, 16> ArgTypes;
Eric Christopher4b4beb22011-10-21 23:30:10 +0000623 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
624 i != e; ++i) {
Jordan Rose5c382722013-03-08 21:51:21 +0000625 ArgTypes.push_back((*i)->getType());
Eric Christopher4b4beb22011-10-21 23:30:10 +0000626 }
627
John McCalldb40c7f2010-12-14 08:05:40 +0000628 QualType FnType =
Jordan Rose5c382722013-03-08 21:51:21 +0000629 getContext().getFunctionType(RetTy, ArgTypes,
John McCalldb40c7f2010-12-14 08:05:40 +0000630 FunctionProtoType::ExtProtoInfo());
Adrian Prantl42d71b92014-04-10 23:21:53 +0000631 DI->EmitFunctionStart(GD, Loc, StartLoc, FnType, CurFn, Builder);
Sanjiv Gupta1e8b6082008-07-04 11:04:26 +0000632 }
633
Daniel Dunbar468a8f82011-02-10 17:32:22 +0000634 if (ShouldInstrumentFunction())
635 EmitFunctionInstrumentation("__cyg_profile_func_enter");
Chris Lattner3c77a352010-06-22 00:03:40 +0000636
Roman Divacky178e01602011-02-10 16:52:03 +0000637 if (CGM.getCodeGenOpts().InstrumentForProfiling)
638 EmitMCountInstrumentation();
639
Eli Friedman4b1942c2009-12-04 02:43:40 +0000640 if (RetTy->isVoidType()) {
641 // Void type; nothing to return.
Craig Topper8a13c412014-05-21 05:09:00 +0000642 ReturnValue = nullptr;
Adrian Prantl2cede0f2014-04-29 01:07:59 +0000643
644 // Count the implicit return.
645 if (!endsWithReturn(D))
646 ++NumReturnExprs;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000647 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
John McCall47fb9502013-03-07 21:37:08 +0000648 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
Eli Friedman4b1942c2009-12-04 02:43:40 +0000649 // Indirect aggregate return; emit returned value directly into sret slot.
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000650 // This reduces code size, and affects correctness in C++.
Reid Kleckner37abaca2014-05-09 22:46:15 +0000651 auto AI = CurFn->arg_begin();
652 if (CurFnInfo->getReturnInfo().isSRetAfterThis())
653 ++AI;
654 ReturnValue = AI;
Reid Kleckner314ef7b2014-02-01 00:04:45 +0000655 } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
656 !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
657 // Load the sret pointer from the argument struct and return into that.
658 unsigned Idx = CurFnInfo->getReturnInfo().getInAllocaFieldIndex();
659 llvm::Function::arg_iterator EI = CurFn->arg_end();
660 --EI;
661 llvm::Value *Addr = Builder.CreateStructGEP(EI, Idx);
662 ReturnValue = Builder.CreateLoad(Addr, "agg.result");
Eli Friedman4b1942c2009-12-04 02:43:40 +0000663 } else {
Daniel Dunbarfd09df72010-02-16 19:45:20 +0000664 ReturnValue = CreateIRTemp(RetTy, "retval");
John McCall31168b02011-06-15 23:02:42 +0000665
666 // Tell the epilog emitter to autorelease the result. We do this
667 // now so that various specialized functions can suppress it
668 // during their IR-generation.
David Blaikiebbafb8a2012-03-11 07:00:24 +0000669 if (getLangOpts().ObjCAutoRefCount &&
John McCall31168b02011-06-15 23:02:42 +0000670 !CurFnInfo->isReturnsRetained() &&
671 RetTy->isObjCRetainableType())
672 AutoreleaseResult = true;
Eli Friedman4b1942c2009-12-04 02:43:40 +0000673 }
674
Mike Stump1d849212009-12-07 23:38:24 +0000675 EmitStartEHSpec(CurCodeDecl);
John McCall31168b02011-06-15 23:02:42 +0000676
677 PrologueCleanupDepth = EHStack.stable_begin();
Daniel Dunbard931a872009-02-02 22:03:45 +0000678 EmitFunctionProlog(*CurFnInfo, CurFn, Args);
Mike Stump11289f42009-09-09 15:08:12 +0000679
Eli Friedman9fbeba02012-02-11 02:57:39 +0000680 if (D && isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) {
John McCall5d865c322010-08-31 07:33:07 +0000681 CGM.getCXXABI().EmitInstanceFunctionProlog(*this);
Eli Friedman9fbeba02012-02-11 02:57:39 +0000682 const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
683 if (MD->getParent()->isLambda() &&
684 MD->getOverloadedOperator() == OO_Call) {
685 // We're in a lambda; figure out the captures.
686 MD->getParent()->getCaptureFields(LambdaCaptureFields,
687 LambdaThisCaptureField);
688 if (LambdaThisCaptureField) {
689 // If this lambda captures this, load it.
John McCalldec348f72013-05-03 07:33:41 +0000690 LValue ThisLValue = EmitLValueForLambdaField(LambdaThisCaptureField);
Nick Lewycky2d84e842013-10-02 02:29:49 +0000691 CXXThisValue = EmitLoadOfLValue(ThisLValue,
692 SourceLocation()).getScalarVal();
Eli Friedman9fbeba02012-02-11 02:57:39 +0000693 }
694 } else {
695 // Not in a lambda; just use 'this' from the method.
696 // FIXME: Should we generate a new load for each use of 'this'? The
697 // fast register allocator would be happier...
698 CXXThisValue = CXXABIThisValue;
699 }
700 }
John McCall347132b2010-02-16 22:04:33 +0000701
Anders Carlssonc20879a2008-12-20 21:28:43 +0000702 // If any of the arguments have a variably modified type, make sure to
703 // emit the type size.
704 for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
705 i != e; ++i) {
Eli Friedman1f576832012-11-14 22:09:59 +0000706 const VarDecl *VD = *i;
707
708 // Dig out the type as written from ParmVarDecls; it's unclear whether
709 // the standard (C99 6.9.1p10) requires this, but we're following the
710 // precedent set by gcc.
711 QualType Ty;
712 if (const ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(VD))
713 Ty = PVD->getOriginalType();
714 else
715 Ty = VD->getType();
Anders Carlssonc20879a2008-12-20 21:28:43 +0000716
717 if (Ty->isVariablyModifiedType())
John McCall23c29fe2011-06-24 21:55:10 +0000718 EmitVariablyModifiedType(Ty);
Anders Carlssonc20879a2008-12-20 21:28:43 +0000719 }
Eric Christopher7cdf9482011-10-13 21:45:18 +0000720 // Emit a location at the end of the prologue.
721 if (CGDebugInfo *DI = getDebugInfo())
722 DI->EmitLocation(Builder, StartLoc);
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000723}
Eli Friedman3d421e12008-08-25 21:31:01 +0000724
Richard Smithb47c36f2013-11-05 09:12:18 +0000725void CodeGenFunction::EmitFunctionBody(FunctionArgList &Args,
726 const Stmt *Body) {
Justin Bogneref512b92014-01-06 22:27:43 +0000727 RegionCounter Cnt = getPGORegionCounter(Body);
728 Cnt.beginRegion(Builder);
Richard Smithb47c36f2013-11-05 09:12:18 +0000729 if (const CompoundStmt *S = dyn_cast<CompoundStmt>(Body))
David Blaikie0a21d0d2013-01-26 22:16:26 +0000730 EmitCompoundStmtWithoutScope(*S);
731 else
Richard Smithb47c36f2013-11-05 09:12:18 +0000732 EmitStmt(Body);
John McCall89b12b32010-02-18 03:17:58 +0000733}
734
Bob Wilsonbf854f02014-02-17 19:21:09 +0000735/// When instrumenting to collect profile data, the counts for some blocks
736/// such as switch cases need to not include the fall-through counts, so
737/// emit a branch around the instrumentation code. When not instrumenting,
738/// this just calls EmitBlock().
739void CodeGenFunction::EmitBlockWithFallThrough(llvm::BasicBlock *BB,
740 RegionCounter &Cnt) {
Craig Topper8a13c412014-05-21 05:09:00 +0000741 llvm::BasicBlock *SkipCountBB = nullptr;
Bob Wilsonbf854f02014-02-17 19:21:09 +0000742 if (HaveInsertPoint() && CGM.getCodeGenOpts().ProfileInstrGenerate) {
743 // When instrumenting for profiling, the fallthrough to certain
744 // statements needs to skip over the instrumentation code so that we
745 // get an accurate count.
746 SkipCountBB = createBasicBlock("skipcount");
747 EmitBranch(SkipCountBB);
748 }
749 EmitBlock(BB);
750 Cnt.beginRegion(Builder, /*AddIncomingFallThrough=*/true);
751 if (SkipCountBB)
752 EmitBlock(SkipCountBB);
753}
754
John McCall8601a752010-08-03 22:46:07 +0000755/// Tries to mark the given function nounwind based on the
756/// non-existence of any throwing calls within it. We believe this is
757/// lightweight enough to do at -O0.
758static void TryMarkNoThrow(llvm::Function *F) {
John McCall59966992010-08-11 22:38:33 +0000759 // LLVM treats 'nounwind' on a function as part of the type, so we
760 // can't do this on functions that can be overwritten.
761 if (F->mayBeOverridden()) return;
762
John McCall8601a752010-08-03 22:46:07 +0000763 for (llvm::Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
764 for (llvm::BasicBlock::iterator
765 BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
Bill Wendlingf0724e82011-09-19 20:31:14 +0000766 if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(&*BI)) {
John McCall8601a752010-08-03 22:46:07 +0000767 if (!Call->doesNotThrow())
768 return;
Bill Wendlingf0724e82011-09-19 20:31:14 +0000769 } else if (isa<llvm::ResumeInst>(&*BI)) {
770 return;
771 }
Bill Wendling73e465e2012-10-10 03:13:20 +0000772 F->setDoesNotThrow();
John McCall8601a752010-08-03 22:46:07 +0000773}
774
Richard Smithb47c36f2013-11-05 09:12:18 +0000775static void EmitSizedDeallocationFunction(CodeGenFunction &CGF,
776 const FunctionDecl *UnsizedDealloc) {
777 // This is a weak discardable definition of the sized deallocation function.
778 CGF.CurFn->setLinkage(llvm::Function::LinkOnceAnyLinkage);
779
780 // Call the unsized deallocation function and forward the first argument
781 // unchanged.
782 llvm::Constant *Unsized = CGF.CGM.GetAddrOfFunction(UnsizedDealloc);
783 CGF.Builder.CreateCall(Unsized, &*CGF.CurFn->arg_begin());
784}
785
John McCalla738c252011-03-09 04:27:21 +0000786void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn,
787 const CGFunctionInfo &FnInfo) {
Anders Carlsson73fcc952009-09-11 00:07:24 +0000788 const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
Michael Ilseman686240a2012-12-04 00:29:55 +0000789
Anders Carlsson63784f42009-02-13 08:11:52 +0000790 // Check if we should generate debug info for this function.
David Blaikie92848de2013-08-26 20:33:21 +0000791 if (FD->hasAttr<NoDebugAttr>())
Craig Topper8a13c412014-05-21 05:09:00 +0000792 DebugInfo = nullptr; // disable debug info indefinitely for this function
Mike Stump11289f42009-09-09 15:08:12 +0000793
Daniel Dunbarbc915f42008-09-09 23:14:03 +0000794 FunctionArgList Args;
Alp Toker314cc812014-01-25 16:55:45 +0000795 QualType ResTy = FD->getReturnType();
Mike Stump11289f42009-09-09 15:08:12 +0000796
Mike Stumpbee78dd2009-12-04 23:26:17 +0000797 CurGD = GD;
Reid Kleckner89077a12013-12-17 19:46:40 +0000798 const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD);
799 if (MD && MD->isInstance()) {
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000800 if (CGM.getCXXABI().HasThisReturn(GD))
801 ResTy = MD->getThisType(getContext());
Reid Kleckner89077a12013-12-17 19:46:40 +0000802 CGM.getCXXABI().buildThisParam(*this, Args);
Stephen Lin9dc6eef2013-06-30 20:40:16 +0000803 }
Mike Stump11289f42009-09-09 15:08:12 +0000804
Chad Rosierf0cccf52012-02-18 00:37:07 +0000805 for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i)
806 Args.push_back(FD->getParamDecl(i));
Daniel Dunbar89654ee2008-08-26 08:29:31 +0000807
Reid Kleckner89077a12013-12-17 19:46:40 +0000808 if (MD && (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)))
809 CGM.getCXXABI().addImplicitStructorParams(*this, ResTy, Args);
810
John McCall89b12b32010-02-18 03:17:58 +0000811 SourceRange BodyRange;
812 if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange();
Adrian Prantldc237b52013-05-16 00:41:26 +0000813 CurEHLocation = BodyRange.getEnd();
Anders Carlsson438cf922009-11-06 02:55:43 +0000814
Adrian Prantl42d71b92014-04-10 23:21:53 +0000815 // Use the location of the start of the function to determine where
816 // the function definition is located. By default use the location
817 // of the declaration as the location for the subprogram. A function
818 // may lack a declaration in the source code if it is created by code
819 // gen. (examples: _GLOBAL__I_a, __cxx_global_array_dtor, thunk).
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000820 SourceLocation Loc = FD->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000821
Alexey Samsonovcb1ad6f2014-07-08 20:23:18 +0000822 // If this is a function specialization then use the pattern body
823 // as the location for the function.
824 if (const FunctionDecl *SpecDecl = FD->getTemplateInstantiationPattern())
825 if (SpecDecl->hasBody(SpecDecl))
826 Loc = SpecDecl->getLocation();
Adrian Prantl42d71b92014-04-10 23:21:53 +0000827
John McCall89b12b32010-02-18 03:17:58 +0000828 // Emit the standard function prologue.
Adrian Prantl42d71b92014-04-10 23:21:53 +0000829 StartFunction(GD, ResTy, Fn, FnInfo, Args, Loc, BodyRange.getBegin());
Anders Carlsson438cf922009-11-06 02:55:43 +0000830
John McCall89b12b32010-02-18 03:17:58 +0000831 // Generate the body of the function.
Alex Lorenzee024992014-08-04 18:41:51 +0000832 PGO.checkGlobalDecl(GD);
Bob Wilsonda1ebed2014-03-06 04:55:41 +0000833 PGO.assignRegionCounters(GD.getDecl(), CurFn);
John McCallb81884d2010-02-19 09:25:03 +0000834 if (isa<CXXDestructorDecl>(FD))
835 EmitDestructorBody(Args);
836 else if (isa<CXXConstructorDecl>(FD))
837 EmitConstructorBody(Args);
Richard Smith9c6890a2012-11-01 22:30:59 +0000838 else if (getLangOpts().CUDA &&
Peter Collingbournefa4d6032011-10-06 18:51:56 +0000839 !CGM.getCodeGenOpts().CUDAIsDevice &&
840 FD->hasAttr<CUDAGlobalAttr>())
841 CGM.getCUDARuntime().EmitDeviceStubBody(*this, Args);
Eli Friedman5a6d5072012-02-16 01:37:33 +0000842 else if (isa<CXXConversionDecl>(FD) &&
Douglas Gregor355efbb2012-02-17 03:02:34 +0000843 cast<CXXConversionDecl>(FD)->isLambdaToBlockPointerConversion()) {
844 // The lambda conversion to block pointer is special; the semantics can't be
845 // expressed in the AST, so IRGen needs to special-case it.
846 EmitLambdaToBlockPointerBody(Args);
847 } else if (isa<CXXMethodDecl>(FD) &&
848 cast<CXXMethodDecl>(FD)->isLambdaStaticInvoker()) {
Faisal Vali2b391ab2013-09-26 19:54:12 +0000849 // The lambda static invoker function is special, because it forwards or
Douglas Gregor355efbb2012-02-17 03:02:34 +0000850 // clones the body of the function call operator (but is actually static).
851 EmitLambdaStaticInvokeFunction(cast<CXXMethodDecl>(FD));
Lang Hamesbf122742013-02-17 07:22:09 +0000852 } else if (FD->isDefaulted() && isa<CXXMethodDecl>(FD) &&
Nick Lewyckyb39be1f2013-09-10 05:14:39 +0000853 (cast<CXXMethodDecl>(FD)->isCopyAssignmentOperator() ||
854 cast<CXXMethodDecl>(FD)->isMoveAssignmentOperator())) {
Lang Hamesbf122742013-02-17 07:22:09 +0000855 // Implicit copy-assignment gets the same special treatment as implicit
856 // copy-constructors.
857 emitImplicitAssignmentOperatorBody(Args);
Richard Smithb47c36f2013-11-05 09:12:18 +0000858 } else if (Stmt *Body = FD->getBody()) {
859 EmitFunctionBody(Args, Body);
860 } else if (FunctionDecl *UnsizedDealloc =
861 FD->getCorrespondingUnsizedGlobalDeallocationFunction()) {
862 // Global sized deallocation functions get an implicit weak definition if
863 // they don't have an explicit definition.
864 EmitSizedDeallocationFunction(*this, UnsizedDealloc);
865 } else
866 llvm_unreachable("no definition for emitted function");
Anders Carlssonff8cce42010-02-07 19:45:40 +0000867
Richard Smith9f9e5822012-10-04 23:52:29 +0000868 // C++11 [stmt.return]p2:
869 // Flowing off the end of a function [...] results in undefined behavior in
870 // a value-returning function.
871 // C11 6.9.1p12:
872 // If the '}' that terminates a function is reached, and the value of the
873 // function call is used by the caller, the behavior is undefined.
Richard Smith9c6890a2012-11-01 22:30:59 +0000874 if (getLangOpts().CPlusPlus && !FD->hasImplicitReturnZero() &&
Alp Toker314cc812014-01-25 16:55:45 +0000875 !FD->getReturnType()->isVoidType() && Builder.GetInsertBlock()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +0000876 if (SanOpts->Return) {
877 SanitizerScope SanScope(this);
Richard Smithe30752c2012-10-09 19:52:38 +0000878 EmitCheck(Builder.getFalse(), "missing_return",
879 EmitCheckSourceLocation(FD->getLocation()),
Dmitri Gribenkof8579502013-01-12 19:30:44 +0000880 ArrayRef<llvm::Value *>(), CRK_Unrecoverable);
Alexey Samsonov24cad992014-07-17 18:46:27 +0000881 } else if (CGM.getCodeGenOpts().OptimizationLevel == 0)
Richard Smith6b4ebcc2012-10-15 00:23:07 +0000882 Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::trap));
Richard Smith9f9e5822012-10-04 23:52:29 +0000883 Builder.CreateUnreachable();
884 Builder.ClearInsertionPoint();
885 }
886
John McCall89b12b32010-02-18 03:17:58 +0000887 // Emit the standard function epilogue.
888 FinishFunction(BodyRange.getEnd());
John McCall8601a752010-08-03 22:46:07 +0000889
890 // If we haven't marked the function nothrow through other means, do
891 // a quick pass now to see if we can.
892 if (!CurFn->doesNotThrow())
893 TryMarkNoThrow(CurFn);
Justin Bogneref512b92014-01-06 22:27:43 +0000894
Duncan P. N. Exon Smith2fe531c2014-03-17 21:18:30 +0000895 PGO.emitInstrumentationData();
Justin Bogneref512b92014-01-06 22:27:43 +0000896 PGO.destroyRegionCounters();
Chris Lattner5696e7b2008-06-17 18:05:57 +0000897}
898
Chris Lattner5b1964b2008-11-11 07:41:27 +0000899/// ContainsLabel - Return true if the statement contains a label in it. If
900/// this statement is not executed normally, it not containing a label means
901/// that we can just remove the code.
902bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) {
903 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000904 if (!S) return false;
Mike Stump11289f42009-09-09 15:08:12 +0000905
Chris Lattner5b1964b2008-11-11 07:41:27 +0000906 // If this is a label, we have to emit the code, consider something like:
907 // if (0) { ... foo: bar(); } goto foo;
Chris Lattner29911cc2011-02-28 00:18:40 +0000908 //
909 // TODO: If anyone cared, we could track __label__'s, since we know that you
910 // can't jump to one from outside their declared region.
Chris Lattner5b1964b2008-11-11 07:41:27 +0000911 if (isa<LabelStmt>(S))
912 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000913
Chris Lattner5b1964b2008-11-11 07:41:27 +0000914 // If this is a case/default statement, and we haven't seen a switch, we have
915 // to emit the code.
916 if (isa<SwitchCase>(S) && !IgnoreCaseStmts)
917 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000918
Chris Lattner5b1964b2008-11-11 07:41:27 +0000919 // If this is a switch statement, we want to ignore cases below it.
920 if (isa<SwitchStmt>(S))
921 IgnoreCaseStmts = true;
Mike Stump11289f42009-09-09 15:08:12 +0000922
Chris Lattner5b1964b2008-11-11 07:41:27 +0000923 // Scan subexpressions for verboten labels.
John McCall8322c3a2011-02-13 04:07:26 +0000924 for (Stmt::const_child_range I = S->children(); I; ++I)
Chris Lattner5b1964b2008-11-11 07:41:27 +0000925 if (ContainsLabel(*I, IgnoreCaseStmts))
926 return true;
Mike Stump11289f42009-09-09 15:08:12 +0000927
Chris Lattner5b1964b2008-11-11 07:41:27 +0000928 return false;
929}
930
Chris Lattner29911cc2011-02-28 00:18:40 +0000931/// containsBreak - Return true if the statement contains a break out of it.
932/// If the statement (recursively) contains a switch or loop with a break
933/// inside of it, this is fine.
934bool CodeGenFunction::containsBreak(const Stmt *S) {
935 // Null statement, not a label!
Craig Topper8a13c412014-05-21 05:09:00 +0000936 if (!S) return false;
Chris Lattner29911cc2011-02-28 00:18:40 +0000937
938 // If this is a switch or loop that defines its own break scope, then we can
939 // include it and anything inside of it.
940 if (isa<SwitchStmt>(S) || isa<WhileStmt>(S) || isa<DoStmt>(S) ||
941 isa<ForStmt>(S))
Chris Lattner30db8282011-02-28 00:42:31 +0000942 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000943
Chris Lattner30db8282011-02-28 00:42:31 +0000944 if (isa<BreakStmt>(S))
Chris Lattner29911cc2011-02-28 00:18:40 +0000945 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000946
Chris Lattner29911cc2011-02-28 00:18:40 +0000947 // Scan subexpressions for verboten breaks.
948 for (Stmt::const_child_range I = S->children(); I; ++I)
949 if (containsBreak(*I))
950 return true;
Michael Ilseman686240a2012-12-04 00:29:55 +0000951
Chris Lattner29911cc2011-02-28 00:18:40 +0000952 return false;
953}
954
Chris Lattnercd439292008-11-12 08:04:58 +0000955
Chris Lattner41c6ab52011-02-27 23:02:32 +0000956/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
957/// to a constant, or if it does but contains a label, return false. If it
958/// constant folds return true and set the boolean result in Result.
959bool CodeGenFunction::ConstantFoldsToSimpleInteger(const Expr *Cond,
960 bool &ResultBool) {
Richard Trieuc320c742012-07-23 20:21:35 +0000961 llvm::APSInt ResultInt;
Chris Lattner29911cc2011-02-28 00:18:40 +0000962 if (!ConstantFoldsToSimpleInteger(Cond, ResultInt))
963 return false;
Michael Ilseman686240a2012-12-04 00:29:55 +0000964
Chris Lattner29911cc2011-02-28 00:18:40 +0000965 ResultBool = ResultInt.getBoolValue();
966 return true;
967}
968
969/// ConstantFoldsToSimpleInteger - If the specified expression does not fold
970/// to a constant, or if it does but contains a label, return false. If it
971/// constant folds return true and set the folded value.
972bool CodeGenFunction::
Richard Trieuc320c742012-07-23 20:21:35 +0000973ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &ResultInt) {
Daniel Dunbarf32443c2008-11-12 22:37:10 +0000974 // FIXME: Rename and handle conversion of other evaluatable things
975 // to bool.
Richard Smith5fab0c92011-12-28 19:48:30 +0000976 llvm::APSInt Int;
977 if (!Cond->EvaluateAsInt(Int, getContext()))
Chris Lattner41c6ab52011-02-27 23:02:32 +0000978 return false; // Not foldable, not integer or not fully evaluatable.
Richard Smith5fab0c92011-12-28 19:48:30 +0000979
Chris Lattnercd439292008-11-12 08:04:58 +0000980 if (CodeGenFunction::ContainsLabel(Cond))
Chris Lattner41c6ab52011-02-27 23:02:32 +0000981 return false; // Contains a label.
Richard Smith5fab0c92011-12-28 19:48:30 +0000982
983 ResultInt = Int;
Chris Lattner41c6ab52011-02-27 23:02:32 +0000984 return true;
Chris Lattnercd439292008-11-12 08:04:58 +0000985}
986
987
Chris Lattner29911cc2011-02-28 00:18:40 +0000988
Chris Lattnercd439292008-11-12 08:04:58 +0000989/// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if
990/// statement) to the specified blocks. Based on the condition, this might try
991/// to simplify the codegen of the conditional based on the branch.
992///
993void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
994 llvm::BasicBlock *TrueBlock,
Justin Bogneref512b92014-01-06 22:27:43 +0000995 llvm::BasicBlock *FalseBlock,
996 uint64_t TrueCount) {
Peter Collingbourne91147592011-04-15 00:35:48 +0000997 Cond = Cond->IgnoreParens();
Mike Stump11289f42009-09-09 15:08:12 +0000998
Chris Lattnercd439292008-11-12 08:04:58 +0000999 if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) {
Justin Bogneref512b92014-01-06 22:27:43 +00001000
Chris Lattnercd439292008-11-12 08:04:58 +00001001 // Handle X && Y in a condition.
John McCalle3027922010-08-25 11:45:40 +00001002 if (CondBOp->getOpcode() == BO_LAnd) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001003 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1004
Chris Lattnercd439292008-11-12 08:04:58 +00001005 // If we have "1 && X", simplify the code. "0 && X" would have constant
1006 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001007 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001008 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1009 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001010 // br(1 && X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001011 Cnt.beginRegion(Builder);
1012 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1013 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001014 }
Mike Stump11289f42009-09-09 15:08:12 +00001015
Chris Lattnercd439292008-11-12 08:04:58 +00001016 // If we have "X && 1", simplify the code to use an uncond branch.
1017 // "X && 0" would have been constant folded to 0.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001018 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1019 ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001020 // br(X && 1) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001021 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1022 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001023 }
Mike Stump11289f42009-09-09 15:08:12 +00001024
Chris Lattnercd439292008-11-12 08:04:58 +00001025 // Emit the LHS as a conditional. If the LHS conditional is false, we
1026 // want to jump to the FalseBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001027 llvm::BasicBlock *LHSTrue = createBasicBlock("land.lhs.true");
Justin Bogneref512b92014-01-06 22:27:43 +00001028 // The counter tells us how often we evaluate RHS, and all of TrueCount
1029 // can be propagated to that branch.
1030 uint64_t RHSCount = Cnt.getCount();
John McCallce1de612011-01-26 04:00:11 +00001031
1032 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001033 EmitBranchOnBoolExpr(CondBOp->getLHS(), LHSTrue, FalseBlock, RHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001034 EmitBlock(LHSTrue);
Mike Stump11289f42009-09-09 15:08:12 +00001035
Anders Carlsson60ddba62010-01-24 00:20:05 +00001036 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001037 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001038 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001039 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, TrueCount);
John McCallce1de612011-01-26 04:00:11 +00001040 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001041
Chris Lattnercd439292008-11-12 08:04:58 +00001042 return;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001043 }
Michael Ilseman686240a2012-12-04 00:29:55 +00001044
Chris Lattner41c6ab52011-02-27 23:02:32 +00001045 if (CondBOp->getOpcode() == BO_LOr) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001046 RegionCounter Cnt = getPGORegionCounter(CondBOp);
1047
Chris Lattnercd439292008-11-12 08:04:58 +00001048 // If we have "0 || X", simplify the code. "1 || X" would have constant
1049 // folded if the case was simple enough.
Bill Wendling6c9540e2011-03-04 21:46:03 +00001050 bool ConstantBool = false;
Chris Lattner41c6ab52011-02-27 23:02:32 +00001051 if (ConstantFoldsToSimpleInteger(CondBOp->getLHS(), ConstantBool) &&
1052 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001053 // br(0 || X) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001054 Cnt.beginRegion(Builder);
1055 return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock,
1056 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001057 }
Mike Stump11289f42009-09-09 15:08:12 +00001058
Chris Lattnercd439292008-11-12 08:04:58 +00001059 // If we have "X || 0", simplify the code to use an uncond branch.
1060 // "X || 1" would have been constant folded to 1.
Chris Lattner41c6ab52011-02-27 23:02:32 +00001061 if (ConstantFoldsToSimpleInteger(CondBOp->getRHS(), ConstantBool) &&
1062 !ConstantBool) {
Chris Lattnercd439292008-11-12 08:04:58 +00001063 // br(X || 0) -> br(X).
Justin Bogneref512b92014-01-06 22:27:43 +00001064 return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock,
1065 TrueCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001066 }
Mike Stump11289f42009-09-09 15:08:12 +00001067
Chris Lattnercd439292008-11-12 08:04:58 +00001068 // Emit the LHS as a conditional. If the LHS conditional is true, we
1069 // want to jump to the TrueBlock.
Daniel Dunbara612e792008-11-13 01:38:36 +00001070 llvm::BasicBlock *LHSFalse = createBasicBlock("lor.lhs.false");
Justin Bogneref512b92014-01-06 22:27:43 +00001071 // We have the count for entry to the RHS and for the whole expression
1072 // being true, so we can divy up True count between the short circuit and
1073 // the RHS.
Justin Bognerbe614c72014-01-23 02:54:30 +00001074 uint64_t LHSCount = Cnt.getParentCount() - Cnt.getCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001075 uint64_t RHSCount = TrueCount - LHSCount;
John McCallce1de612011-01-26 04:00:11 +00001076
1077 ConditionalEvaluation eval(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001078 EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, LHSFalse, LHSCount);
Chris Lattnercd439292008-11-12 08:04:58 +00001079 EmitBlock(LHSFalse);
Mike Stump11289f42009-09-09 15:08:12 +00001080
Anders Carlsson60ddba62010-01-24 00:20:05 +00001081 // Any temporaries created here are conditional.
Justin Bogneref512b92014-01-06 22:27:43 +00001082 Cnt.beginRegion(Builder);
John McCallce1de612011-01-26 04:00:11 +00001083 eval.begin(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001084 EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock, RHSCount);
1085
John McCallce1de612011-01-26 04:00:11 +00001086 eval.end(*this);
Anders Carlsson60ddba62010-01-24 00:20:05 +00001087
Chris Lattnercd439292008-11-12 08:04:58 +00001088 return;
1089 }
Chris Lattnerd9537732008-11-12 08:13:36 +00001090 }
Mike Stump11289f42009-09-09 15:08:12 +00001091
Chris Lattnerd9537732008-11-12 08:13:36 +00001092 if (const UnaryOperator *CondUOp = dyn_cast<UnaryOperator>(Cond)) {
1093 // br(!x, t, f) -> br(x, f, t)
Justin Bogneref512b92014-01-06 22:27:43 +00001094 if (CondUOp->getOpcode() == UO_LNot) {
1095 // Negate the count.
1096 uint64_t FalseCount = PGO.getCurrentRegionCount() - TrueCount;
1097 // Negate the condition and swap the destination blocks.
1098 return EmitBranchOnBoolExpr(CondUOp->getSubExpr(), FalseBlock, TrueBlock,
1099 FalseCount);
1100 }
Chris Lattnercd439292008-11-12 08:04:58 +00001101 }
Mike Stump11289f42009-09-09 15:08:12 +00001102
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001103 if (const ConditionalOperator *CondOp = dyn_cast<ConditionalOperator>(Cond)) {
Eli Friedman248f8982012-02-14 03:54:45 +00001104 // br(c ? x : y, t, f) -> br(c, br(x, t, f), br(y, t, f))
1105 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1106 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001107
Justin Bogneref512b92014-01-06 22:27:43 +00001108 RegionCounter Cnt = getPGORegionCounter(CondOp);
Eli Friedman248f8982012-02-14 03:54:45 +00001109 ConditionalEvaluation cond(*this);
Justin Bogneref512b92014-01-06 22:27:43 +00001110 EmitBranchOnBoolExpr(CondOp->getCond(), LHSBlock, RHSBlock, Cnt.getCount());
1111
1112 // When computing PGO branch weights, we only know the overall count for
1113 // the true block. This code is essentially doing tail duplication of the
1114 // naive code-gen, introducing new edges for which counts are not
1115 // available. Divide the counts proportionally between the LHS and RHS of
1116 // the conditional operator.
1117 uint64_t LHSScaledTrueCount = 0;
1118 if (TrueCount) {
Bob Wilsonbf854f02014-02-17 19:21:09 +00001119 double LHSRatio = Cnt.getCount() / (double) Cnt.getParentCount();
Justin Bogneref512b92014-01-06 22:27:43 +00001120 LHSScaledTrueCount = TrueCount * LHSRatio;
1121 }
John McCallce1de612011-01-26 04:00:11 +00001122
Eli Friedman248f8982012-02-14 03:54:45 +00001123 cond.begin(*this);
1124 EmitBlock(LHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001125 Cnt.beginRegion(Builder);
1126 EmitBranchOnBoolExpr(CondOp->getLHS(), TrueBlock, FalseBlock,
1127 LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001128 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001129
Eli Friedman248f8982012-02-14 03:54:45 +00001130 cond.begin(*this);
1131 EmitBlock(RHSBlock);
Justin Bogneref512b92014-01-06 22:27:43 +00001132 EmitBranchOnBoolExpr(CondOp->getRHS(), TrueBlock, FalseBlock,
1133 TrueCount - LHSScaledTrueCount);
Eli Friedman248f8982012-02-14 03:54:45 +00001134 cond.end(*this);
John McCallce1de612011-01-26 04:00:11 +00001135
Eli Friedman248f8982012-02-14 03:54:45 +00001136 return;
Daniel Dunbarbf3c22e2008-11-12 10:30:32 +00001137 }
1138
Richard Smithea852322013-05-07 21:53:22 +00001139 if (const CXXThrowExpr *Throw = dyn_cast<CXXThrowExpr>(Cond)) {
1140 // Conditional operator handling can give us a throw expression as a
1141 // condition for a case like:
1142 // br(c ? throw x : y, t, f) -> br(c, br(throw x, t, f), br(y, t, f)
1143 // Fold this to:
1144 // br(c, throw x, br(y, t, f))
1145 EmitCXXThrowExpr(Throw, /*KeepInsertionPoint*/false);
1146 return;
1147 }
1148
Justin Bogneref512b92014-01-06 22:27:43 +00001149 // Create branch weights based on the number of times we get here and the
1150 // number of times the condition should be true.
Bob Wilsonbf854f02014-02-17 19:21:09 +00001151 uint64_t CurrentCount = std::max(PGO.getCurrentRegionCount(), TrueCount);
Justin Bogneref512b92014-01-06 22:27:43 +00001152 llvm::MDNode *Weights = PGO.createBranchWeights(TrueCount,
1153 CurrentCount - TrueCount);
1154
Chris Lattnercd439292008-11-12 08:04:58 +00001155 // Emit the code with the fully general case.
1156 llvm::Value *CondV = EvaluateExprAsBool(Cond);
Justin Bogneref512b92014-01-06 22:27:43 +00001157 Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
Chris Lattnercd439292008-11-12 08:04:58 +00001158}
1159
Daniel Dunbara7c8cf62008-08-16 00:56:44 +00001160/// ErrorUnsupported - Print out an error that codegen doesn't support the
Chris Lattnerfc944342007-12-02 01:43:38 +00001161/// specified stmt yet.
David Blaikie4a9ec7b2013-08-19 21:02:26 +00001162void CodeGenFunction::ErrorUnsupported(const Stmt *S, const char *Type) {
1163 CGM.ErrorUnsupported(S, Type);
Chris Lattnerfc944342007-12-02 01:43:38 +00001164}
1165
John McCall2725aa12011-02-01 21:35:06 +00001166/// emitNonZeroVLAInit - Emit the "zero" initialization of a
1167/// variable-length array whose elements have a non-zero bit-pattern.
1168///
James Dennettbe302452012-06-15 22:10:14 +00001169/// \param baseType the inner-most element type of the array
John McCall2725aa12011-02-01 21:35:06 +00001170/// \param src - a char* pointing to the bit-pattern for a single
1171/// base element of the array
1172/// \param sizeInChars - the total size of the VLA, in chars
John McCall2725aa12011-02-01 21:35:06 +00001173static void emitNonZeroVLAInit(CodeGenFunction &CGF, QualType baseType,
Michael Ilseman686240a2012-12-04 00:29:55 +00001174 llvm::Value *dest, llvm::Value *src,
John McCall2725aa12011-02-01 21:35:06 +00001175 llvm::Value *sizeInChars) {
1176 std::pair<CharUnits,CharUnits> baseSizeAndAlign
1177 = CGF.getContext().getTypeInfoInChars(baseType);
1178
1179 CGBuilderTy &Builder = CGF.Builder;
1180
1181 llvm::Value *baseSizeInChars
1182 = llvm::ConstantInt::get(CGF.IntPtrTy, baseSizeAndAlign.first.getQuantity());
1183
Chris Lattner2192fe52011-07-18 04:24:23 +00001184 llvm::Type *i8p = Builder.getInt8PtrTy();
John McCall2725aa12011-02-01 21:35:06 +00001185
1186 llvm::Value *begin = Builder.CreateBitCast(dest, i8p, "vla.begin");
1187 llvm::Value *end = Builder.CreateInBoundsGEP(dest, sizeInChars, "vla.end");
1188
1189 llvm::BasicBlock *originBB = CGF.Builder.GetInsertBlock();
1190 llvm::BasicBlock *loopBB = CGF.createBasicBlock("vla-init.loop");
1191 llvm::BasicBlock *contBB = CGF.createBasicBlock("vla-init.cont");
1192
1193 // Make a loop over the VLA. C99 guarantees that the VLA element
1194 // count must be nonzero.
1195 CGF.EmitBlock(loopBB);
1196
Jay Foad20c0f022011-03-30 11:28:58 +00001197 llvm::PHINode *cur = Builder.CreatePHI(i8p, 2, "vla.cur");
John McCall2725aa12011-02-01 21:35:06 +00001198 cur->addIncoming(begin, originBB);
1199
1200 // memcpy the individual element bit-pattern.
1201 Builder.CreateMemCpy(cur, src, baseSizeInChars,
1202 baseSizeAndAlign.second.getQuantity(),
1203 /*volatile*/ false);
1204
1205 // Go to the next element.
1206 llvm::Value *next = Builder.CreateConstInBoundsGEP1_32(cur, 1, "vla.next");
1207
1208 // Leave if that's the end of the VLA.
1209 llvm::Value *done = Builder.CreateICmpEQ(next, end, "vla-init.isdone");
1210 Builder.CreateCondBr(done, contBB, loopBB);
1211 cur->addIncoming(next, loopBB);
1212
1213 CGF.EmitBlock(contBB);
Michael Ilseman686240a2012-12-04 00:29:55 +00001214}
John McCall2725aa12011-02-01 21:35:06 +00001215
Anders Carlssonc0964b62010-05-22 17:35:42 +00001216void
1217CodeGenFunction::EmitNullInitialization(llvm::Value *DestPtr, QualType Ty) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001218 // Ignore empty classes in C++.
Richard Smith9c6890a2012-11-01 22:30:59 +00001219 if (getLangOpts().CPlusPlus) {
Anders Carlsson16e94af2010-05-03 01:20:20 +00001220 if (const RecordType *RT = Ty->getAs<RecordType>()) {
1221 if (cast<CXXRecordDecl>(RT->getDecl())->isEmpty())
1222 return;
1223 }
1224 }
John McCall7cd1d972010-08-07 08:21:30 +00001225
1226 // Cast the dest ptr to the appropriate i8 pointer type.
1227 unsigned DestAS =
1228 cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
Chris Lattner2192fe52011-07-18 04:24:23 +00001229 llvm::Type *BP = Builder.getInt8PtrTy(DestAS);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001230 if (DestPtr->getType() != BP)
Benjamin Kramer76399eb2011-09-27 21:06:10 +00001231 DestPtr = Builder.CreateBitCast(DestPtr, BP);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001232
1233 // Get size and alignment info for this aggregate.
Michael Ilseman686240a2012-12-04 00:29:55 +00001234 std::pair<CharUnits, CharUnits> TypeInfo =
Ken Dyckc5c416f2011-04-22 17:51:05 +00001235 getContext().getTypeInfoInChars(Ty);
1236 CharUnits Size = TypeInfo.first;
1237 CharUnits Align = TypeInfo.second;
Anders Carlsson2e744e82008-08-30 19:51:14 +00001238
John McCalla08ffd22011-01-14 10:37:58 +00001239 llvm::Value *SizeVal;
John McCall2725aa12011-02-01 21:35:06 +00001240 const VariableArrayType *vla;
Mike Stump11289f42009-09-09 15:08:12 +00001241
John McCalla08ffd22011-01-14 10:37:58 +00001242 // Don't bother emitting a zero-byte memset.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001243 if (Size.isZero()) {
John McCalla08ffd22011-01-14 10:37:58 +00001244 // But note that getTypeInfo returns 0 for a VLA.
1245 if (const VariableArrayType *vlaType =
1246 dyn_cast_or_null<VariableArrayType>(
1247 getContext().getAsArrayType(Ty))) {
John McCall23c29fe2011-06-24 21:55:10 +00001248 QualType eltType;
1249 llvm::Value *numElts;
Benjamin Kramer867ea1d2014-03-02 13:01:17 +00001250 std::tie(numElts, eltType) = getVLASize(vlaType);
John McCall23c29fe2011-06-24 21:55:10 +00001251
1252 SizeVal = numElts;
1253 CharUnits eltSize = getContext().getTypeSizeInChars(eltType);
1254 if (!eltSize.isOne())
1255 SizeVal = Builder.CreateNUWMul(SizeVal, CGM.getSize(eltSize));
John McCall2725aa12011-02-01 21:35:06 +00001256 vla = vlaType;
John McCalla08ffd22011-01-14 10:37:58 +00001257 } else {
1258 return;
1259 }
1260 } else {
John McCall23c29fe2011-06-24 21:55:10 +00001261 SizeVal = CGM.getSize(Size);
Craig Topper8a13c412014-05-21 05:09:00 +00001262 vla = nullptr;
John McCalla08ffd22011-01-14 10:37:58 +00001263 }
John McCall7cd1d972010-08-07 08:21:30 +00001264
1265 // If the type contains a pointer to data member we can't memset it to zero.
1266 // Instead, create a null constant and copy it to the destination.
John McCall2725aa12011-02-01 21:35:06 +00001267 // TODO: there are other patterns besides zero that we can usefully memset,
1268 // like -1, which happens to be the pattern used by member-pointers.
John McCall614dbdc2010-08-22 21:01:12 +00001269 if (!CGM.getTypes().isZeroInitializable(Ty)) {
John McCall2725aa12011-02-01 21:35:06 +00001270 // For a VLA, emit a single element, then splat that over the VLA.
1271 if (vla) Ty = getContext().getBaseElementType(vla);
John McCalla08ffd22011-01-14 10:37:58 +00001272
John McCall7cd1d972010-08-07 08:21:30 +00001273 llvm::Constant *NullConstant = CGM.EmitNullConstant(Ty);
1274
Michael Ilseman686240a2012-12-04 00:29:55 +00001275 llvm::GlobalVariable *NullVariable =
John McCall7cd1d972010-08-07 08:21:30 +00001276 new llvm::GlobalVariable(CGM.getModule(), NullConstant->getType(),
Michael Ilseman686240a2012-12-04 00:29:55 +00001277 /*isConstant=*/true,
John McCall7cd1d972010-08-07 08:21:30 +00001278 llvm::GlobalVariable::PrivateLinkage,
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001279 NullConstant, Twine());
John McCall7cd1d972010-08-07 08:21:30 +00001280 llvm::Value *SrcPtr =
1281 Builder.CreateBitCast(NullVariable, Builder.getInt8PtrTy());
1282
John McCall2725aa12011-02-01 21:35:06 +00001283 if (vla) return emitNonZeroVLAInit(*this, Ty, DestPtr, SrcPtr, SizeVal);
1284
John McCall7cd1d972010-08-07 08:21:30 +00001285 // Get and call the appropriate llvm.memcpy overload.
Ken Dyckc5c416f2011-04-22 17:51:05 +00001286 Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align.getQuantity(), false);
John McCall7cd1d972010-08-07 08:21:30 +00001287 return;
Michael Ilseman686240a2012-12-04 00:29:55 +00001288 }
1289
John McCall7cd1d972010-08-07 08:21:30 +00001290 // Otherwise, just memset the whole thing to zero. This is legal
1291 // because in LLVM, all default initializers (other than the ones we just
1292 // handled above) are guaranteed to have a bit pattern of all zeros.
Michael Ilseman686240a2012-12-04 00:29:55 +00001293 Builder.CreateMemSet(DestPtr, Builder.getInt8(0), SizeVal,
Ken Dyckc5c416f2011-04-22 17:51:05 +00001294 Align.getQuantity(), false);
Anders Carlsson2e744e82008-08-30 19:51:14 +00001295}
1296
Chris Lattnerc8e630e2011-02-17 07:39:24 +00001297llvm::BlockAddress *CodeGenFunction::GetAddrOfLabel(const LabelDecl *L) {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001298 // Make sure that there is a block for the indirect goto.
Craig Topper8a13c412014-05-21 05:09:00 +00001299 if (!IndirectBranch)
Chris Lattner6c4d2552009-10-28 23:59:40 +00001300 GetIndirectGotoBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001301
John McCallad5d61e2010-07-23 21:56:41 +00001302 llvm::BasicBlock *BB = getJumpDestForLabel(L).getBlock();
Michael Ilseman686240a2012-12-04 00:29:55 +00001303
Chris Lattner6c4d2552009-10-28 23:59:40 +00001304 // Make sure the indirect branch includes all of the address-taken blocks.
1305 IndirectBranch->addDestination(BB);
1306 return llvm::BlockAddress::get(CurFn, BB);
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001307}
1308
1309llvm::BasicBlock *CodeGenFunction::GetIndirectGotoBlock() {
Chris Lattner6c4d2552009-10-28 23:59:40 +00001310 // If we already made the indirect branch for indirect goto, return its block.
1311 if (IndirectBranch) return IndirectBranch->getParent();
Michael Ilseman686240a2012-12-04 00:29:55 +00001312
Chris Lattner6c4d2552009-10-28 23:59:40 +00001313 CGBuilderTy TmpBuilder(createBasicBlock("indirectgoto"));
Michael Ilseman686240a2012-12-04 00:29:55 +00001314
Chris Lattner2bb5cb42009-10-13 06:55:33 +00001315 // Create the PHI node that indirect gotos will add entries to.
Jay Foad20c0f022011-03-30 11:28:58 +00001316 llvm::Value *DestVal = TmpBuilder.CreatePHI(Int8PtrTy, 0,
1317 "indirect.goto.dest");
Michael Ilseman686240a2012-12-04 00:29:55 +00001318
Chris Lattner6c4d2552009-10-28 23:59:40 +00001319 // Create the indirect branch instruction.
1320 IndirectBranch = TmpBuilder.CreateIndirectBr(DestVal);
1321 return IndirectBranch->getParent();
Daniel Dunbar88402ce2008-08-04 16:51:22 +00001322}
Anders Carlsson13abd7e2008-11-04 05:30:00 +00001323
John McCall82fe67b2011-07-09 01:37:26 +00001324/// Computes the length of an array in elements, as well as the base
1325/// element type and a properly-typed first element pointer.
1326llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType,
1327 QualType &baseType,
1328 llvm::Value *&addr) {
1329 const ArrayType *arrayType = origArrayType;
1330
1331 // If it's a VLA, we have to load the stored size. Note that
1332 // this is the size of the VLA in bytes, not its size in elements.
Craig Topper8a13c412014-05-21 05:09:00 +00001333 llvm::Value *numVLAElements = nullptr;
John McCall82fe67b2011-07-09 01:37:26 +00001334 if (isa<VariableArrayType>(arrayType)) {
1335 numVLAElements = getVLASize(cast<VariableArrayType>(arrayType)).first;
1336
1337 // Walk into all VLAs. This doesn't require changes to addr,
1338 // which has type T* where T is the first non-VLA element type.
1339 do {
1340 QualType elementType = arrayType->getElementType();
1341 arrayType = getContext().getAsArrayType(elementType);
1342
1343 // If we only have VLA components, 'addr' requires no adjustment.
1344 if (!arrayType) {
1345 baseType = elementType;
1346 return numVLAElements;
1347 }
1348 } while (isa<VariableArrayType>(arrayType));
1349
1350 // We get out here only if we find a constant array type
1351 // inside the VLA.
1352 }
1353
1354 // We have some number of constant-length arrays, so addr should
1355 // have LLVM type [M x [N x [...]]]*. Build a GEP that walks
1356 // down to the first element of addr.
Chris Lattner0e62c1c2011-07-23 10:55:15 +00001357 SmallVector<llvm::Value*, 8> gepIndices;
John McCall82fe67b2011-07-09 01:37:26 +00001358
1359 // GEP down to the array type.
1360 llvm::ConstantInt *zero = Builder.getInt32(0);
1361 gepIndices.push_back(zero);
1362
John McCall82fe67b2011-07-09 01:37:26 +00001363 uint64_t countFromCLAs = 1;
Richard Smithf3c37e82012-04-22 05:51:36 +00001364 QualType eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001365
Chris Lattner2192fe52011-07-18 04:24:23 +00001366 llvm::ArrayType *llvmArrayType =
Richard Smithf3c37e82012-04-22 05:51:36 +00001367 dyn_cast<llvm::ArrayType>(
John McCall82fe67b2011-07-09 01:37:26 +00001368 cast<llvm::PointerType>(addr->getType())->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001369 while (llvmArrayType) {
John McCall82fe67b2011-07-09 01:37:26 +00001370 assert(isa<ConstantArrayType>(arrayType));
1371 assert(cast<ConstantArrayType>(arrayType)->getSize().getZExtValue()
1372 == llvmArrayType->getNumElements());
1373
1374 gepIndices.push_back(zero);
1375 countFromCLAs *= llvmArrayType->getNumElements();
Richard Smithf3c37e82012-04-22 05:51:36 +00001376 eltType = arrayType->getElementType();
John McCall82fe67b2011-07-09 01:37:26 +00001377
1378 llvmArrayType =
1379 dyn_cast<llvm::ArrayType>(llvmArrayType->getElementType());
John McCall82fe67b2011-07-09 01:37:26 +00001380 arrayType = getContext().getAsArrayType(arrayType->getElementType());
Richard Smithf3c37e82012-04-22 05:51:36 +00001381 assert((!llvmArrayType || arrayType) &&
1382 "LLVM and Clang types are out-of-synch");
John McCall82fe67b2011-07-09 01:37:26 +00001383 }
1384
Richard Smithf3c37e82012-04-22 05:51:36 +00001385 if (arrayType) {
1386 // From this point onwards, the Clang array type has been emitted
1387 // as some other type (probably a packed struct). Compute the array
1388 // size, and just emit the 'begin' expression as a bitcast.
1389 while (arrayType) {
1390 countFromCLAs *=
1391 cast<ConstantArrayType>(arrayType)->getSize().getZExtValue();
1392 eltType = arrayType->getElementType();
1393 arrayType = getContext().getAsArrayType(eltType);
1394 }
John McCall82fe67b2011-07-09 01:37:26 +00001395
Micah Villmowea2fea22012-10-25 15:39:14 +00001396 unsigned AddressSpace = addr->getType()->getPointerAddressSpace();
Richard Smithf3c37e82012-04-22 05:51:36 +00001397 llvm::Type *BaseType = ConvertType(eltType)->getPointerTo(AddressSpace);
1398 addr = Builder.CreateBitCast(addr, BaseType, "array.begin");
1399 } else {
1400 // Create the actual GEP.
1401 addr = Builder.CreateInBoundsGEP(addr, gepIndices, "array.begin");
1402 }
1403
1404 baseType = eltType;
John McCall82fe67b2011-07-09 01:37:26 +00001405
1406 llvm::Value *numElements
1407 = llvm::ConstantInt::get(SizeTy, countFromCLAs);
1408
1409 // If we had any VLA dimensions, factor them in.
1410 if (numVLAElements)
1411 numElements = Builder.CreateNUWMul(numVLAElements, numElements);
1412
1413 return numElements;
1414}
1415
John McCall23c29fe2011-06-24 21:55:10 +00001416std::pair<llvm::Value*, QualType>
1417CodeGenFunction::getVLASize(QualType type) {
1418 const VariableArrayType *vla = getContext().getAsVariableArrayType(type);
1419 assert(vla && "type was not a variable array type!");
1420 return getVLASize(vla);
Anders Carlssone388a5b2008-12-20 20:27:15 +00001421}
Anders Carlssonccbe9202008-12-12 07:19:02 +00001422
John McCall23c29fe2011-06-24 21:55:10 +00001423std::pair<llvm::Value*, QualType>
1424CodeGenFunction::getVLASize(const VariableArrayType *type) {
1425 // The number of elements so far; always size_t.
Craig Topper8a13c412014-05-21 05:09:00 +00001426 llvm::Value *numElements = nullptr;
John McCall23c29fe2011-06-24 21:55:10 +00001427
1428 QualType elementType;
1429 do {
1430 elementType = type->getElementType();
1431 llvm::Value *vlaSize = VLASizeMap[type->getSizeExpr()];
1432 assert(vlaSize && "no size for VLA!");
1433 assert(vlaSize->getType() == SizeTy);
1434
1435 if (!numElements) {
1436 numElements = vlaSize;
1437 } else {
1438 // It's undefined behavior if this wraps around, so mark it that way.
Alexey Samsonovcb3f8122014-03-20 10:48:29 +00001439 // FIXME: Teach -fsanitize=undefined to trap this.
John McCall23c29fe2011-06-24 21:55:10 +00001440 numElements = Builder.CreateNUWMul(numElements, vlaSize);
1441 }
1442 } while ((type = getContext().getAsVariableArrayType(elementType)));
1443
1444 return std::pair<llvm::Value*,QualType>(numElements, elementType);
1445}
1446
1447void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
1448 assert(type->isVariablyModifiedType() &&
Anders Carlsson8a01b792008-12-20 20:46:34 +00001449 "Must pass variably modified type to EmitVLASizes!");
Mike Stump11289f42009-09-09 15:08:12 +00001450
Daniel Dunbarb6adc432009-07-19 06:58:07 +00001451 EnsureInsertPoint();
Mike Stump11289f42009-09-09 15:08:12 +00001452
John McCall23c29fe2011-06-24 21:55:10 +00001453 // We're going to walk down into the type and look for VLA
1454 // expressions.
John McCall23c29fe2011-06-24 21:55:10 +00001455 do {
1456 assert(type->isVariablyModifiedType());
Mike Stump11289f42009-09-09 15:08:12 +00001457
John McCall23c29fe2011-06-24 21:55:10 +00001458 const Type *ty = type.getTypePtr();
1459 switch (ty->getTypeClass()) {
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001460
John McCall23c29fe2011-06-24 21:55:10 +00001461#define TYPE(Class, Base)
1462#define ABSTRACT_TYPE(Class, Base)
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001463#define NON_CANONICAL_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001464#define DEPENDENT_TYPE(Class, Base) case Type::Class:
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001465#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)
John McCall23c29fe2011-06-24 21:55:10 +00001466#include "clang/AST/TypeNodes.def"
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001467 llvm_unreachable("unexpected dependent type!");
Mike Stump11289f42009-09-09 15:08:12 +00001468
John McCall23c29fe2011-06-24 21:55:10 +00001469 // These types are never variably-modified.
1470 case Type::Builtin:
1471 case Type::Complex:
1472 case Type::Vector:
1473 case Type::ExtVector:
1474 case Type::Record:
1475 case Type::Enum:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001476 case Type::Elaborated:
1477 case Type::TemplateSpecialization:
John McCall23c29fe2011-06-24 21:55:10 +00001478 case Type::ObjCObject:
1479 case Type::ObjCInterface:
1480 case Type::ObjCObjectPointer:
1481 llvm_unreachable("type class is never variably-modified!");
Mike Stump11289f42009-09-09 15:08:12 +00001482
Reid Kleckner0503a872013-12-05 01:23:43 +00001483 case Type::Adjusted:
1484 type = cast<AdjustedType>(ty)->getAdjustedType();
1485 break;
1486
Reid Kleckner8a365022013-06-24 17:51:48 +00001487 case Type::Decayed:
1488 type = cast<DecayedType>(ty)->getPointeeType();
1489 break;
1490
John McCall23c29fe2011-06-24 21:55:10 +00001491 case Type::Pointer:
1492 type = cast<PointerType>(ty)->getPointeeType();
1493 break;
Mike Stump11289f42009-09-09 15:08:12 +00001494
John McCall23c29fe2011-06-24 21:55:10 +00001495 case Type::BlockPointer:
1496 type = cast<BlockPointerType>(ty)->getPointeeType();
1497 break;
1498
1499 case Type::LValueReference:
1500 case Type::RValueReference:
1501 type = cast<ReferenceType>(ty)->getPointeeType();
1502 break;
1503
1504 case Type::MemberPointer:
1505 type = cast<MemberPointerType>(ty)->getPointeeType();
1506 break;
1507
1508 case Type::ConstantArray:
1509 case Type::IncompleteArray:
1510 // Losing element qualification here is fine.
1511 type = cast<ArrayType>(ty)->getElementType();
1512 break;
1513
1514 case Type::VariableArray: {
1515 // Losing element qualification here is fine.
1516 const VariableArrayType *vat = cast<VariableArrayType>(ty);
1517
1518 // Unknown size indication requires no size computation.
1519 // Otherwise, evaluate and record it.
1520 if (const Expr *size = vat->getSizeExpr()) {
1521 // It's possible that we might have emitted this already,
1522 // e.g. with a typedef and a pointer to it.
1523 llvm::Value *&entry = VLASizeMap[size];
1524 if (!entry) {
Richard Smith481652b2012-10-10 01:11:12 +00001525 llvm::Value *Size = EmitScalarExpr(size);
1526
1527 // C11 6.7.6.2p5:
1528 // If the size is an expression that is not an integer constant
1529 // expression [...] each time it is evaluated it shall have a value
1530 // greater than zero.
Will Dietzf54319c2013-01-18 11:30:38 +00001531 if (SanOpts->VLABound &&
Richard Smithb1b0ab42012-11-05 22:21:05 +00001532 size->getType()->isSignedIntegerType()) {
Alexey Samsonov24cad992014-07-17 18:46:27 +00001533 SanitizerScope SanScope(this);
Richard Smith481652b2012-10-10 01:11:12 +00001534 llvm::Value *Zero = llvm::Constant::getNullValue(Size->getType());
1535 llvm::Constant *StaticArgs[] = {
1536 EmitCheckSourceLocation(size->getLocStart()),
1537 EmitCheckTypeDescriptor(size->getType())
1538 };
1539 EmitCheck(Builder.CreateICmpSGT(Size, Zero),
Will Dietz88e02332012-12-02 19:50:33 +00001540 "vla_bound_not_positive", StaticArgs, Size,
1541 CRK_Recoverable);
Richard Smith481652b2012-10-10 01:11:12 +00001542 }
1543
John McCall23c29fe2011-06-24 21:55:10 +00001544 // Always zexting here would be wrong if it weren't
1545 // undefined behavior to have a negative bound.
Richard Smith8772bd82012-10-10 01:12:11 +00001546 entry = Builder.CreateIntCast(Size, SizeTy, /*signed*/ false);
John McCall23c29fe2011-06-24 21:55:10 +00001547 }
1548 }
1549 type = vat->getElementType();
1550 break;
Anders Carlsson8a01b792008-12-20 20:46:34 +00001551 }
Mike Stump11289f42009-09-09 15:08:12 +00001552
Abramo Bagnara1cd83682012-01-07 10:52:36 +00001553 case Type::FunctionProto:
John McCall23c29fe2011-06-24 21:55:10 +00001554 case Type::FunctionNoProto:
Alp Toker314cc812014-01-25 16:55:45 +00001555 type = cast<FunctionType>(ty)->getReturnType();
John McCall23c29fe2011-06-24 21:55:10 +00001556 break;
Eli Friedman0dfb8892011-10-06 23:00:33 +00001557
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001558 case Type::Paren:
1559 case Type::TypeOf:
1560 case Type::UnaryTransform:
1561 case Type::Attributed:
1562 case Type::SubstTemplateTypeParm:
David Blaikie66ed89d2013-07-13 21:08:08 +00001563 case Type::PackExpansion:
Abramo Bagnarafa95ed42012-01-11 08:19:46 +00001564 // Keep walking after single level desugaring.
1565 type = type.getSingleStepDesugaredType(getContext());
1566 break;
1567
1568 case Type::Typedef:
1569 case Type::Decltype:
1570 case Type::Auto:
1571 // Stop walking: nothing to do.
1572 return;
1573
1574 case Type::TypeOfExpr:
1575 // Stop walking: emit typeof expression.
1576 EmitIgnoredExpr(cast<TypeOfExprType>(ty)->getUnderlyingExpr());
1577 return;
1578
Eli Friedman0dfb8892011-10-06 23:00:33 +00001579 case Type::Atomic:
1580 type = cast<AtomicType>(ty)->getValueType();
1581 break;
John McCall23c29fe2011-06-24 21:55:10 +00001582 }
1583 } while (type->isVariablyModifiedType());
Anders Carlssonccbe9202008-12-12 07:19:02 +00001584}
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001585
1586llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) {
Dan Gohmane9e32dc2010-10-29 22:47:07 +00001587 if (getContext().getBuiltinVaListType()->isArrayType())
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001588 return EmitScalarExpr(E);
Eli Friedmanddea0ad2009-01-20 17:46:04 +00001589 return EmitLValue(E).getAddress();
1590}
Anders Carlsson15cb75a2009-02-07 22:53:43 +00001591
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001592void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
1593 llvm::Constant *Init) {
Devang Pateldc866e12010-08-10 17:53:33 +00001594 assert (Init && "Invalid DeclRefExpr initializer!");
Yunzhong Gao0ebf1bb2013-08-30 08:53:09 +00001595 if (CGDebugInfo *Dbg = getDebugInfo())
1596 if (CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
1597 Dbg->EmitGlobalVariable(E->getDecl(), Init);
Devang Patele03edfd2010-08-10 07:24:25 +00001598}
John McCallc07a0c72011-02-17 10:25:35 +00001599
1600CodeGenFunction::PeepholeProtection
1601CodeGenFunction::protectFromPeepholes(RValue rvalue) {
1602 // At the moment, the only aggressive peephole we do in IR gen
1603 // is trunc(zext) folding, but if we add more, we can easily
1604 // extend this protection.
1605
1606 if (!rvalue.isScalar()) return PeepholeProtection();
1607 llvm::Value *value = rvalue.getScalarVal();
1608 if (!isa<llvm::ZExtInst>(value)) return PeepholeProtection();
1609
1610 // Just make an extra bitcast.
1611 assert(HaveInsertPoint());
1612 llvm::Instruction *inst = new llvm::BitCastInst(value, value->getType(), "",
1613 Builder.GetInsertBlock());
1614
1615 PeepholeProtection protection;
1616 protection.Inst = inst;
1617 return protection;
1618}
1619
1620void CodeGenFunction::unprotectFromPeepholes(PeepholeProtection protection) {
1621 if (!protection.Inst) return;
1622
1623 // In theory, we could try to duplicate the peepholes now, but whatever.
1624 protection.Inst->eraseFromParent();
1625}
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001626
1627llvm::Value *CodeGenFunction::EmitAnnotationCall(llvm::Value *AnnotationFn,
1628 llvm::Value *AnnotatedVal,
Dmitri Gribenkof8579502013-01-12 19:30:44 +00001629 StringRef AnnotationStr,
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001630 SourceLocation Location) {
1631 llvm::Value *Args[4] = {
1632 AnnotatedVal,
1633 Builder.CreateBitCast(CGM.EmitAnnotationString(AnnotationStr), Int8PtrTy),
1634 Builder.CreateBitCast(CGM.EmitAnnotationUnit(Location), Int8PtrTy),
1635 CGM.EmitAnnotationLineNo(Location)
1636 };
1637 return Builder.CreateCall(AnnotationFn, Args);
1638}
1639
1640void CodeGenFunction::EmitVarAnnotations(const VarDecl *D, llvm::Value *V) {
1641 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1642 // FIXME We create a new bitcast for every annotation because that's what
1643 // llvm-gcc was doing.
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001644 for (const auto *I : D->specific_attrs<AnnotateAttr>())
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001645 EmitAnnotationCall(CGM.getIntrinsic(llvm::Intrinsic::var_annotation),
1646 Builder.CreateBitCast(V, CGM.Int8PtrTy, V->getName()),
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001647 I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001648}
1649
1650llvm::Value *CodeGenFunction::EmitFieldAnnotations(const FieldDecl *D,
1651 llvm::Value *V) {
1652 assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
1653 llvm::Type *VTy = V->getType();
1654 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::ptr_annotation,
1655 CGM.Int8PtrTy);
1656
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001657 for (const auto *I : D->specific_attrs<AnnotateAttr>()) {
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001658 // FIXME Always emit the cast inst so we can differentiate between
1659 // annotation on the first field of a struct and annotation on the struct
1660 // itself.
1661 if (VTy != CGM.Int8PtrTy)
1662 V = Builder.Insert(new llvm::BitCastInst(V, CGM.Int8PtrTy));
Aaron Ballmanbe22bcb2014-03-10 17:08:28 +00001663 V = EmitAnnotationCall(F, V, I->getAnnotation(), D->getLocation());
Julien Lerouge5a6b6982011-09-09 22:41:49 +00001664 V = Builder.CreateBitCast(V, VTy);
1665 }
1666
1667 return V;
1668}
Ben Langmuir3b4c30b2013-05-09 19:17:11 +00001669
1670CodeGenFunction::CGCapturedStmtInfo::~CGCapturedStmtInfo() { }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001671
Alexey Samsonov24cad992014-07-17 18:46:27 +00001672CodeGenFunction::SanitizerScope::SanitizerScope(CodeGenFunction *CGF)
1673 : CGF(CGF) {
1674 assert(!CGF->IsSanitizerScope);
1675 CGF->IsSanitizerScope = true;
1676}
1677
1678CodeGenFunction::SanitizerScope::~SanitizerScope() {
1679 CGF->IsSanitizerScope = false;
1680}
1681
Alexander Musman515ad8c2014-05-22 08:54:05 +00001682void CodeGenFunction::InsertHelper(llvm::Instruction *I,
1683 const llvm::Twine &Name,
1684 llvm::BasicBlock *BB,
1685 llvm::BasicBlock::iterator InsertPt) const {
1686 LoopStack.InsertHelper(I);
Alexey Samsonov24cad992014-07-17 18:46:27 +00001687 if (IsSanitizerScope) {
1688 I->setMetadata(
1689 CGM.getModule().getMDKindID("nosanitize"),
1690 llvm::MDNode::get(CGM.getLLVMContext(), ArrayRef<llvm::Value *>()));
1691 }
Alexander Musman515ad8c2014-05-22 08:54:05 +00001692}
1693
1694template <bool PreserveNames>
1695void CGBuilderInserter<PreserveNames>::InsertHelper(
1696 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1697 llvm::BasicBlock::iterator InsertPt) const {
1698 llvm::IRBuilderDefaultInserter<PreserveNames>::InsertHelper(I, Name, BB,
1699 InsertPt);
1700 if (CGF)
1701 CGF->InsertHelper(I, Name, BB, InsertPt);
1702}
1703
1704#ifdef NDEBUG
1705#define PreserveNames false
1706#else
1707#define PreserveNames true
1708#endif
1709template void CGBuilderInserter<PreserveNames>::InsertHelper(
1710 llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB,
1711 llvm::BasicBlock::iterator InsertPt) const;
1712#undef PreserveNames