1 //===--- CodeGenFunction.cpp - Emit LLVM Code from ASTs for a Function ----===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This coordinates the per-function state used while generating code.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenFunction.h"
15 #include "CodeGenModule.h"
16 #include "CGCXXABI.h"
17 #include "CGDebugInfo.h"
18 #include "CGException.h"
19 #include "clang/Basic/TargetInfo.h"
20 #include "clang/AST/APValue.h"
21 #include "clang/AST/ASTContext.h"
22 #include "clang/AST/Decl.h"
23 #include "clang/AST/DeclCXX.h"
24 #include "clang/AST/StmtCXX.h"
25 #include "clang/Frontend/CodeGenOptions.h"
26 #include "llvm/Target/TargetData.h"
27 #include "llvm/Intrinsics.h"
28 using namespace clang;
29 using namespace CodeGen;
30 
31 CodeGenFunction::CodeGenFunction(CodeGenModule &cgm)
32   : CodeGenTypeCache(cgm), CGM(cgm),
33     Target(CGM.getContext().Target), Builder(cgm.getModule().getContext()),
34     BlockInfo(0), BlockPointer(0),
35     NormalCleanupDest(0), EHCleanupDest(0), NextCleanupDestIndex(1),
36     ExceptionSlot(0), DebugInfo(0), IndirectBranch(0),
37     SwitchInsn(0), CaseRangeBlock(0),
38     DidCallStackSave(false), UnreachableBlock(0),
39     CXXThisDecl(0), CXXThisValue(0), CXXVTTDecl(0), CXXVTTValue(0),
40     OutermostConditional(0), TerminateLandingPad(0), TerminateHandler(0),
41     TrapBB(0) {
42 
43   Exceptions = getContext().getLangOptions().Exceptions;
44   CatchUndefined = getContext().getLangOptions().CatchUndefined;
45   CGM.getCXXABI().getMangleContext().startNewFunction();
46 }
47 
48 ASTContext &CodeGenFunction::getContext() const {
49   return CGM.getContext();
50 }
51 
52 
53 const llvm::Type *CodeGenFunction::ConvertTypeForMem(QualType T) {
54   return CGM.getTypes().ConvertTypeForMem(T);
55 }
56 
57 const llvm::Type *CodeGenFunction::ConvertType(QualType T) {
58   return CGM.getTypes().ConvertType(T);
59 }
60 
61 bool CodeGenFunction::hasAggregateLLVMType(QualType T) {
62   return T->isRecordType() || T->isArrayType() || T->isAnyComplexType() ||
63     T->isObjCObjectType();
64 }
65 
66 void CodeGenFunction::EmitReturnBlock() {
67   // For cleanliness, we try to avoid emitting the return block for
68   // simple cases.
69   llvm::BasicBlock *CurBB = Builder.GetInsertBlock();
70 
71   if (CurBB) {
72     assert(!CurBB->getTerminator() && "Unexpected terminated block.");
73 
74     // We have a valid insert point, reuse it if it is empty or there are no
75     // explicit jumps to the return block.
76     if (CurBB->empty() || ReturnBlock.getBlock()->use_empty()) {
77       ReturnBlock.getBlock()->replaceAllUsesWith(CurBB);
78       delete ReturnBlock.getBlock();
79     } else
80       EmitBlock(ReturnBlock.getBlock());
81     return;
82   }
83 
84   // Otherwise, if the return block is the target of a single direct
85   // branch then we can just put the code in that block instead. This
86   // cleans up functions which started with a unified return block.
87   if (ReturnBlock.getBlock()->hasOneUse()) {
88     llvm::BranchInst *BI =
89       dyn_cast<llvm::BranchInst>(*ReturnBlock.getBlock()->use_begin());
90     if (BI && BI->isUnconditional() &&
91         BI->getSuccessor(0) == ReturnBlock.getBlock()) {
92       // Reset insertion point and delete the branch.
93       Builder.SetInsertPoint(BI->getParent());
94       BI->eraseFromParent();
95       delete ReturnBlock.getBlock();
96       return;
97     }
98   }
99 
100   // FIXME: We are at an unreachable point, there is no reason to emit the block
101   // unless it has uses. However, we still need a place to put the debug
102   // region.end for now.
103 
104   EmitBlock(ReturnBlock.getBlock());
105 }
106 
107 static void EmitIfUsed(CodeGenFunction &CGF, llvm::BasicBlock *BB) {
108   if (!BB) return;
109   if (!BB->use_empty())
110     return CGF.CurFn->getBasicBlockList().push_back(BB);
111   delete BB;
112 }
113 
114 void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
115   assert(BreakContinueStack.empty() &&
116          "mismatched push/pop in break/continue stack!");
117 
118   // Emit function epilog (to return).
119   EmitReturnBlock();
120 
121   if (ShouldInstrumentFunction())
122     EmitFunctionInstrumentation("__cyg_profile_func_exit");
123 
124   // Emit debug descriptor for function end.
125   if (CGDebugInfo *DI = getDebugInfo()) {
126     DI->setLocation(EndLoc);
127     DI->EmitFunctionEnd(Builder);
128   }
129 
130   EmitFunctionEpilog(*CurFnInfo);
131   EmitEndEHSpec(CurCodeDecl);
132 
133   assert(EHStack.empty() &&
134          "did not remove all scopes from cleanup stack!");
135 
136   // If someone did an indirect goto, emit the indirect goto block at the end of
137   // the function.
138   if (IndirectBranch) {
139     EmitBlock(IndirectBranch->getParent());
140     Builder.ClearInsertionPoint();
141   }
142 
143   // Remove the AllocaInsertPt instruction, which is just a convenience for us.
144   llvm::Instruction *Ptr = AllocaInsertPt;
145   AllocaInsertPt = 0;
146   Ptr->eraseFromParent();
147 
148   // If someone took the address of a label but never did an indirect goto, we
149   // made a zero entry PHI node, which is illegal, zap it now.
150   if (IndirectBranch) {
151     llvm::PHINode *PN = cast<llvm::PHINode>(IndirectBranch->getAddress());
152     if (PN->getNumIncomingValues() == 0) {
153       PN->replaceAllUsesWith(llvm::UndefValue::get(PN->getType()));
154       PN->eraseFromParent();
155     }
156   }
157 
158   EmitIfUsed(*this, RethrowBlock.getBlock());
159   EmitIfUsed(*this, TerminateLandingPad);
160   EmitIfUsed(*this, TerminateHandler);
161   EmitIfUsed(*this, UnreachableBlock);
162 
163   if (CGM.getCodeGenOpts().EmitDeclMetadata)
164     EmitDeclMetadata();
165 }
166 
167 /// ShouldInstrumentFunction - Return true if the current function should be
168 /// instrumented with __cyg_profile_func_* calls
169 bool CodeGenFunction::ShouldInstrumentFunction() {
170   if (!CGM.getCodeGenOpts().InstrumentFunctions)
171     return false;
172   if (CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>())
173     return false;
174   return true;
175 }
176 
177 /// EmitFunctionInstrumentation - Emit LLVM code to call the specified
178 /// instrumentation function with the current function and the call site, if
179 /// function instrumentation is enabled.
180 void CodeGenFunction::EmitFunctionInstrumentation(const char *Fn) {
181   const llvm::PointerType *PointerTy;
182   const llvm::FunctionType *FunctionTy;
183   std::vector<const llvm::Type*> ProfileFuncArgs;
184 
185   // void __cyg_profile_func_{enter,exit} (void *this_fn, void *call_site);
186   PointerTy = Int8PtrTy;
187   ProfileFuncArgs.push_back(PointerTy);
188   ProfileFuncArgs.push_back(PointerTy);
189   FunctionTy = llvm::FunctionType::get(llvm::Type::getVoidTy(getLLVMContext()),
190                                        ProfileFuncArgs, false);
191 
192   llvm::Constant *F = CGM.CreateRuntimeFunction(FunctionTy, Fn);
193   llvm::CallInst *CallSite = Builder.CreateCall(
194     CGM.getIntrinsic(llvm::Intrinsic::returnaddress, 0, 0),
195     llvm::ConstantInt::get(Int32Ty, 0),
196     "callsite");
197 
198   Builder.CreateCall2(F,
199                       llvm::ConstantExpr::getBitCast(CurFn, PointerTy),
200                       CallSite);
201 }
202 
203 void CodeGenFunction::EmitMCountInstrumentation() {
204   llvm::FunctionType *FTy =
205     llvm::FunctionType::get(llvm::Type::getVoidTy(getLLVMContext()), false);
206 
207   llvm::Constant *MCountFn = CGM.CreateRuntimeFunction(FTy,
208                                                        Target.getMCountName());
209   Builder.CreateCall(MCountFn);
210 }
211 
212 void CodeGenFunction::StartFunction(GlobalDecl GD, QualType RetTy,
213                                     llvm::Function *Fn,
214                                     const FunctionArgList &Args,
215                                     SourceLocation StartLoc) {
216   const Decl *D = GD.getDecl();
217 
218   DidCallStackSave = false;
219   CurCodeDecl = CurFuncDecl = D;
220   FnRetTy = RetTy;
221   CurFn = Fn;
222   assert(CurFn->isDeclaration() && "Function already has body?");
223 
224   // Pass inline keyword to optimizer if it appears explicitly on any
225   // declaration.
226   if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
227     for (FunctionDecl::redecl_iterator RI = FD->redecls_begin(),
228            RE = FD->redecls_end(); RI != RE; ++RI)
229       if (RI->isInlineSpecified()) {
230         Fn->addFnAttr(llvm::Attribute::InlineHint);
231         break;
232       }
233 
234   if (getContext().getLangOptions().OpenCL) {
235     // Add metadata for a kernel function.
236     if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
237       if (FD->hasAttr<OpenCLKernelAttr>()) {
238         llvm::LLVMContext &Context = getLLVMContext();
239         llvm::NamedMDNode *OpenCLMetadata =
240           CGM.getModule().getOrInsertNamedMetadata("opencl.kernels");
241 
242         llvm::Value *Op = Fn;
243         OpenCLMetadata->addOperand(llvm::MDNode::get(Context, &Op, 1));
244       }
245   }
246 
247   llvm::BasicBlock *EntryBB = createBasicBlock("entry", CurFn);
248 
249   // Create a marker to make it easy to insert allocas into the entryblock
250   // later.  Don't create this with the builder, because we don't want it
251   // folded.
252   llvm::Value *Undef = llvm::UndefValue::get(Int32Ty);
253   AllocaInsertPt = new llvm::BitCastInst(Undef, Int32Ty, "", EntryBB);
254   if (Builder.isNamePreserving())
255     AllocaInsertPt->setName("allocapt");
256 
257   ReturnBlock = getJumpDestInCurrentScope("return");
258 
259   Builder.SetInsertPoint(EntryBB);
260 
261   // Emit subprogram debug descriptor.
262   if (CGDebugInfo *DI = getDebugInfo()) {
263     // FIXME: what is going on here and why does it ignore all these
264     // interesting type properties?
265     QualType FnType =
266       getContext().getFunctionType(RetTy, 0, 0,
267                                    FunctionProtoType::ExtProtoInfo());
268 
269     DI->setLocation(StartLoc);
270     DI->EmitFunctionStart(GD, FnType, CurFn, Builder);
271   }
272 
273   if (ShouldInstrumentFunction())
274     EmitFunctionInstrumentation("__cyg_profile_func_enter");
275 
276   if (CGM.getCodeGenOpts().InstrumentForProfiling)
277     EmitMCountInstrumentation();
278 
279   // FIXME: Leaked.
280   // CC info is ignored, hopefully?
281   CurFnInfo = &CGM.getTypes().getFunctionInfo(FnRetTy, Args,
282                                               FunctionType::ExtInfo());
283 
284   if (RetTy->isVoidType()) {
285     // Void type; nothing to return.
286     ReturnValue = 0;
287   } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
288              hasAggregateLLVMType(CurFnInfo->getReturnType())) {
289     // Indirect aggregate return; emit returned value directly into sret slot.
290     // This reduces code size, and affects correctness in C++.
291     ReturnValue = CurFn->arg_begin();
292   } else {
293     ReturnValue = CreateIRTemp(RetTy, "retval");
294   }
295 
296   EmitStartEHSpec(CurCodeDecl);
297   EmitFunctionProlog(*CurFnInfo, CurFn, Args);
298 
299   if (D && isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance())
300     CGM.getCXXABI().EmitInstanceFunctionProlog(*this);
301 
302   // If any of the arguments have a variably modified type, make sure to
303   // emit the type size.
304   for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
305        i != e; ++i) {
306     QualType Ty = i->second;
307 
308     if (Ty->isVariablyModifiedType())
309       EmitVLASize(Ty);
310   }
311 }
312 
313 void CodeGenFunction::EmitFunctionBody(FunctionArgList &Args) {
314   const FunctionDecl *FD = cast<FunctionDecl>(CurGD.getDecl());
315   assert(FD->getBody());
316   EmitStmt(FD->getBody());
317 }
318 
319 /// Tries to mark the given function nounwind based on the
320 /// non-existence of any throwing calls within it.  We believe this is
321 /// lightweight enough to do at -O0.
322 static void TryMarkNoThrow(llvm::Function *F) {
323   // LLVM treats 'nounwind' on a function as part of the type, so we
324   // can't do this on functions that can be overwritten.
325   if (F->mayBeOverridden()) return;
326 
327   for (llvm::Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
328     for (llvm::BasicBlock::iterator
329            BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
330       if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(&*BI))
331         if (!Call->doesNotThrow())
332           return;
333   F->setDoesNotThrow(true);
334 }
335 
336 void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn) {
337   const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
338 
339   // Check if we should generate debug info for this function.
340   if (CGM.getDebugInfo() && !FD->hasAttr<NoDebugAttr>())
341     DebugInfo = CGM.getDebugInfo();
342 
343   FunctionArgList Args;
344   QualType ResTy = FD->getResultType();
345 
346   CurGD = GD;
347   if (isa<CXXMethodDecl>(FD) && cast<CXXMethodDecl>(FD)->isInstance())
348     CGM.getCXXABI().BuildInstanceFunctionParams(*this, ResTy, Args);
349 
350   if (FD->getNumParams()) {
351     const FunctionProtoType* FProto = FD->getType()->getAs<FunctionProtoType>();
352     assert(FProto && "Function def must have prototype!");
353 
354     for (unsigned i = 0, e = FD->getNumParams(); i != e; ++i)
355       Args.push_back(std::make_pair(FD->getParamDecl(i),
356                                     FProto->getArgType(i)));
357   }
358 
359   SourceRange BodyRange;
360   if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange();
361 
362   // Emit the standard function prologue.
363   StartFunction(GD, ResTy, Fn, Args, BodyRange.getBegin());
364 
365   // Generate the body of the function.
366   if (isa<CXXDestructorDecl>(FD))
367     EmitDestructorBody(Args);
368   else if (isa<CXXConstructorDecl>(FD))
369     EmitConstructorBody(Args);
370   else
371     EmitFunctionBody(Args);
372 
373   // Emit the standard function epilogue.
374   FinishFunction(BodyRange.getEnd());
375 
376   // If we haven't marked the function nothrow through other means, do
377   // a quick pass now to see if we can.
378   if (!CurFn->doesNotThrow())
379     TryMarkNoThrow(CurFn);
380 }
381 
382 /// ContainsLabel - Return true if the statement contains a label in it.  If
383 /// this statement is not executed normally, it not containing a label means
384 /// that we can just remove the code.
385 bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) {
386   // Null statement, not a label!
387   if (S == 0) return false;
388 
389   // If this is a label, we have to emit the code, consider something like:
390   // if (0) {  ...  foo:  bar(); }  goto foo;
391   if (isa<LabelStmt>(S))
392     return true;
393 
394   // If this is a case/default statement, and we haven't seen a switch, we have
395   // to emit the code.
396   if (isa<SwitchCase>(S) && !IgnoreCaseStmts)
397     return true;
398 
399   // If this is a switch statement, we want to ignore cases below it.
400   if (isa<SwitchStmt>(S))
401     IgnoreCaseStmts = true;
402 
403   // Scan subexpressions for verboten labels.
404   for (Stmt::const_child_range I = S->children(); I; ++I)
405     if (ContainsLabel(*I, IgnoreCaseStmts))
406       return true;
407 
408   return false;
409 }
410 
411 
412 /// ConstantFoldsToSimpleInteger - If the sepcified expression does not fold to
413 /// a constant, or if it does but contains a label, return 0.  If it constant
414 /// folds to 'true' and does not contain a label, return 1, if it constant folds
415 /// to 'false' and does not contain a label, return -1.
416 int CodeGenFunction::ConstantFoldsToSimpleInteger(const Expr *Cond) {
417   // FIXME: Rename and handle conversion of other evaluatable things
418   // to bool.
419   Expr::EvalResult Result;
420   if (!Cond->Evaluate(Result, getContext()) || !Result.Val.isInt() ||
421       Result.HasSideEffects)
422     return 0;  // Not foldable, not integer or not fully evaluatable.
423 
424   if (CodeGenFunction::ContainsLabel(Cond))
425     return 0;  // Contains a label.
426 
427   return Result.Val.getInt().getBoolValue() ? 1 : -1;
428 }
429 
430 
431 /// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if
432 /// statement) to the specified blocks.  Based on the condition, this might try
433 /// to simplify the codegen of the conditional based on the branch.
434 ///
435 void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
436                                            llvm::BasicBlock *TrueBlock,
437                                            llvm::BasicBlock *FalseBlock) {
438   if (const ParenExpr *PE = dyn_cast<ParenExpr>(Cond))
439     return EmitBranchOnBoolExpr(PE->getSubExpr(), TrueBlock, FalseBlock);
440 
441   if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) {
442     // Handle X && Y in a condition.
443     if (CondBOp->getOpcode() == BO_LAnd) {
444       // If we have "1 && X", simplify the code.  "0 && X" would have constant
445       // folded if the case was simple enough.
446       if (ConstantFoldsToSimpleInteger(CondBOp->getLHS()) == 1) {
447         // br(1 && X) -> br(X).
448         return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock);
449       }
450 
451       // If we have "X && 1", simplify the code to use an uncond branch.
452       // "X && 0" would have been constant folded to 0.
453       if (ConstantFoldsToSimpleInteger(CondBOp->getRHS()) == 1) {
454         // br(X && 1) -> br(X).
455         return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock);
456       }
457 
458       // Emit the LHS as a conditional.  If the LHS conditional is false, we
459       // want to jump to the FalseBlock.
460       llvm::BasicBlock *LHSTrue = createBasicBlock("land.lhs.true");
461 
462       ConditionalEvaluation eval(*this);
463       EmitBranchOnBoolExpr(CondBOp->getLHS(), LHSTrue, FalseBlock);
464       EmitBlock(LHSTrue);
465 
466       // Any temporaries created here are conditional.
467       eval.begin(*this);
468       EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock);
469       eval.end(*this);
470 
471       return;
472     } else if (CondBOp->getOpcode() == BO_LOr) {
473       // If we have "0 || X", simplify the code.  "1 || X" would have constant
474       // folded if the case was simple enough.
475       if (ConstantFoldsToSimpleInteger(CondBOp->getLHS()) == -1) {
476         // br(0 || X) -> br(X).
477         return EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock);
478       }
479 
480       // If we have "X || 0", simplify the code to use an uncond branch.
481       // "X || 1" would have been constant folded to 1.
482       if (ConstantFoldsToSimpleInteger(CondBOp->getRHS()) == -1) {
483         // br(X || 0) -> br(X).
484         return EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, FalseBlock);
485       }
486 
487       // Emit the LHS as a conditional.  If the LHS conditional is true, we
488       // want to jump to the TrueBlock.
489       llvm::BasicBlock *LHSFalse = createBasicBlock("lor.lhs.false");
490 
491       ConditionalEvaluation eval(*this);
492       EmitBranchOnBoolExpr(CondBOp->getLHS(), TrueBlock, LHSFalse);
493       EmitBlock(LHSFalse);
494 
495       // Any temporaries created here are conditional.
496       eval.begin(*this);
497       EmitBranchOnBoolExpr(CondBOp->getRHS(), TrueBlock, FalseBlock);
498       eval.end(*this);
499 
500       return;
501     }
502   }
503 
504   if (const UnaryOperator *CondUOp = dyn_cast<UnaryOperator>(Cond)) {
505     // br(!x, t, f) -> br(x, f, t)
506     if (CondUOp->getOpcode() == UO_LNot)
507       return EmitBranchOnBoolExpr(CondUOp->getSubExpr(), FalseBlock, TrueBlock);
508   }
509 
510   if (const ConditionalOperator *CondOp = dyn_cast<ConditionalOperator>(Cond)) {
511     // Handle ?: operator.
512 
513     // Just ignore GNU ?: extension.
514     if (CondOp->getLHS()) {
515       // br(c ? x : y, t, f) -> br(c, br(x, t, f), br(y, t, f))
516       llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
517       llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
518 
519       ConditionalEvaluation cond(*this);
520       EmitBranchOnBoolExpr(CondOp->getCond(), LHSBlock, RHSBlock);
521 
522       cond.begin(*this);
523       EmitBlock(LHSBlock);
524       EmitBranchOnBoolExpr(CondOp->getLHS(), TrueBlock, FalseBlock);
525       cond.end(*this);
526 
527       cond.begin(*this);
528       EmitBlock(RHSBlock);
529       EmitBranchOnBoolExpr(CondOp->getRHS(), TrueBlock, FalseBlock);
530       cond.end(*this);
531 
532       return;
533     }
534   }
535 
536   // Emit the code with the fully general case.
537   llvm::Value *CondV = EvaluateExprAsBool(Cond);
538   Builder.CreateCondBr(CondV, TrueBlock, FalseBlock);
539 }
540 
541 /// ErrorUnsupported - Print out an error that codegen doesn't support the
542 /// specified stmt yet.
543 void CodeGenFunction::ErrorUnsupported(const Stmt *S, const char *Type,
544                                        bool OmitOnError) {
545   CGM.ErrorUnsupported(S, Type, OmitOnError);
546 }
547 
548 /// emitNonZeroVLAInit - Emit the "zero" initialization of a
549 /// variable-length array whose elements have a non-zero bit-pattern.
550 ///
551 /// \param src - a char* pointing to the bit-pattern for a single
552 /// base element of the array
553 /// \param sizeInChars - the total size of the VLA, in chars
554 /// \param align - the total alignment of the VLA
555 static void emitNonZeroVLAInit(CodeGenFunction &CGF, QualType baseType,
556                                llvm::Value *dest, llvm::Value *src,
557                                llvm::Value *sizeInChars) {
558   std::pair<CharUnits,CharUnits> baseSizeAndAlign
559     = CGF.getContext().getTypeInfoInChars(baseType);
560 
561   CGBuilderTy &Builder = CGF.Builder;
562 
563   llvm::Value *baseSizeInChars
564     = llvm::ConstantInt::get(CGF.IntPtrTy, baseSizeAndAlign.first.getQuantity());
565 
566   const llvm::Type *i8p = Builder.getInt8PtrTy();
567 
568   llvm::Value *begin = Builder.CreateBitCast(dest, i8p, "vla.begin");
569   llvm::Value *end = Builder.CreateInBoundsGEP(dest, sizeInChars, "vla.end");
570 
571   llvm::BasicBlock *originBB = CGF.Builder.GetInsertBlock();
572   llvm::BasicBlock *loopBB = CGF.createBasicBlock("vla-init.loop");
573   llvm::BasicBlock *contBB = CGF.createBasicBlock("vla-init.cont");
574 
575   // Make a loop over the VLA.  C99 guarantees that the VLA element
576   // count must be nonzero.
577   CGF.EmitBlock(loopBB);
578 
579   llvm::PHINode *cur = Builder.CreatePHI(i8p, "vla.cur");
580   cur->reserveOperandSpace(2);
581   cur->addIncoming(begin, originBB);
582 
583   // memcpy the individual element bit-pattern.
584   Builder.CreateMemCpy(cur, src, baseSizeInChars,
585                        baseSizeAndAlign.second.getQuantity(),
586                        /*volatile*/ false);
587 
588   // Go to the next element.
589   llvm::Value *next = Builder.CreateConstInBoundsGEP1_32(cur, 1, "vla.next");
590 
591   // Leave if that's the end of the VLA.
592   llvm::Value *done = Builder.CreateICmpEQ(next, end, "vla-init.isdone");
593   Builder.CreateCondBr(done, contBB, loopBB);
594   cur->addIncoming(next, loopBB);
595 
596   CGF.EmitBlock(contBB);
597 }
598 
599 void
600 CodeGenFunction::EmitNullInitialization(llvm::Value *DestPtr, QualType Ty) {
601   // Ignore empty classes in C++.
602   if (getContext().getLangOptions().CPlusPlus) {
603     if (const RecordType *RT = Ty->getAs<RecordType>()) {
604       if (cast<CXXRecordDecl>(RT->getDecl())->isEmpty())
605         return;
606     }
607   }
608 
609   // Cast the dest ptr to the appropriate i8 pointer type.
610   unsigned DestAS =
611     cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
612   const llvm::Type *BP = Builder.getInt8PtrTy(DestAS);
613   if (DestPtr->getType() != BP)
614     DestPtr = Builder.CreateBitCast(DestPtr, BP, "tmp");
615 
616   // Get size and alignment info for this aggregate.
617   std::pair<uint64_t, unsigned> TypeInfo = getContext().getTypeInfo(Ty);
618   uint64_t Size = TypeInfo.first / 8;
619   unsigned Align = TypeInfo.second / 8;
620 
621   llvm::Value *SizeVal;
622   const VariableArrayType *vla;
623 
624   // Don't bother emitting a zero-byte memset.
625   if (Size == 0) {
626     // But note that getTypeInfo returns 0 for a VLA.
627     if (const VariableArrayType *vlaType =
628           dyn_cast_or_null<VariableArrayType>(
629                                           getContext().getAsArrayType(Ty))) {
630       SizeVal = GetVLASize(vlaType);
631       vla = vlaType;
632     } else {
633       return;
634     }
635   } else {
636     SizeVal = llvm::ConstantInt::get(IntPtrTy, Size);
637     vla = 0;
638   }
639 
640   // If the type contains a pointer to data member we can't memset it to zero.
641   // Instead, create a null constant and copy it to the destination.
642   // TODO: there are other patterns besides zero that we can usefully memset,
643   // like -1, which happens to be the pattern used by member-pointers.
644   if (!CGM.getTypes().isZeroInitializable(Ty)) {
645     // For a VLA, emit a single element, then splat that over the VLA.
646     if (vla) Ty = getContext().getBaseElementType(vla);
647 
648     llvm::Constant *NullConstant = CGM.EmitNullConstant(Ty);
649 
650     llvm::GlobalVariable *NullVariable =
651       new llvm::GlobalVariable(CGM.getModule(), NullConstant->getType(),
652                                /*isConstant=*/true,
653                                llvm::GlobalVariable::PrivateLinkage,
654                                NullConstant, llvm::Twine());
655     llvm::Value *SrcPtr =
656       Builder.CreateBitCast(NullVariable, Builder.getInt8PtrTy());
657 
658     if (vla) return emitNonZeroVLAInit(*this, Ty, DestPtr, SrcPtr, SizeVal);
659 
660     // Get and call the appropriate llvm.memcpy overload.
661     Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align, false);
662     return;
663   }
664 
665   // Otherwise, just memset the whole thing to zero.  This is legal
666   // because in LLVM, all default initializers (other than the ones we just
667   // handled above) are guaranteed to have a bit pattern of all zeros.
668   Builder.CreateMemSet(DestPtr, Builder.getInt8(0), SizeVal, Align, false);
669 }
670 
671 llvm::BlockAddress *CodeGenFunction::GetAddrOfLabel(const LabelDecl *L) {
672   // Make sure that there is a block for the indirect goto.
673   if (IndirectBranch == 0)
674     GetIndirectGotoBlock();
675 
676   llvm::BasicBlock *BB = getJumpDestForLabel(L).getBlock();
677 
678   // Make sure the indirect branch includes all of the address-taken blocks.
679   IndirectBranch->addDestination(BB);
680   return llvm::BlockAddress::get(CurFn, BB);
681 }
682 
683 llvm::BasicBlock *CodeGenFunction::GetIndirectGotoBlock() {
684   // If we already made the indirect branch for indirect goto, return its block.
685   if (IndirectBranch) return IndirectBranch->getParent();
686 
687   CGBuilderTy TmpBuilder(createBasicBlock("indirectgoto"));
688 
689   // Create the PHI node that indirect gotos will add entries to.
690   llvm::Value *DestVal = TmpBuilder.CreatePHI(Int8PtrTy, "indirect.goto.dest");
691 
692   // Create the indirect branch instruction.
693   IndirectBranch = TmpBuilder.CreateIndirectBr(DestVal);
694   return IndirectBranch->getParent();
695 }
696 
697 llvm::Value *CodeGenFunction::GetVLASize(const VariableArrayType *VAT) {
698   llvm::Value *&SizeEntry = VLASizeMap[VAT->getSizeExpr()];
699 
700   assert(SizeEntry && "Did not emit size for type");
701   return SizeEntry;
702 }
703 
704 llvm::Value *CodeGenFunction::EmitVLASize(QualType Ty) {
705   assert(Ty->isVariablyModifiedType() &&
706          "Must pass variably modified type to EmitVLASizes!");
707 
708   EnsureInsertPoint();
709 
710   if (const VariableArrayType *VAT = getContext().getAsVariableArrayType(Ty)) {
711     // unknown size indication requires no size computation.
712     if (!VAT->getSizeExpr())
713       return 0;
714     llvm::Value *&SizeEntry = VLASizeMap[VAT->getSizeExpr()];
715 
716     if (!SizeEntry) {
717       const llvm::Type *SizeTy = ConvertType(getContext().getSizeType());
718 
719       // Get the element size;
720       QualType ElemTy = VAT->getElementType();
721       llvm::Value *ElemSize;
722       if (ElemTy->isVariableArrayType())
723         ElemSize = EmitVLASize(ElemTy);
724       else
725         ElemSize = llvm::ConstantInt::get(SizeTy,
726             getContext().getTypeSizeInChars(ElemTy).getQuantity());
727 
728       llvm::Value *NumElements = EmitScalarExpr(VAT->getSizeExpr());
729       NumElements = Builder.CreateIntCast(NumElements, SizeTy, false, "tmp");
730 
731       SizeEntry = Builder.CreateMul(ElemSize, NumElements);
732     }
733 
734     return SizeEntry;
735   }
736 
737   if (const ArrayType *AT = dyn_cast<ArrayType>(Ty)) {
738     EmitVLASize(AT->getElementType());
739     return 0;
740   }
741 
742   if (const ParenType *PT = dyn_cast<ParenType>(Ty)) {
743     EmitVLASize(PT->getInnerType());
744     return 0;
745   }
746 
747   const PointerType *PT = Ty->getAs<PointerType>();
748   assert(PT && "unknown VM type!");
749   EmitVLASize(PT->getPointeeType());
750   return 0;
751 }
752 
753 llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) {
754   if (getContext().getBuiltinVaListType()->isArrayType())
755     return EmitScalarExpr(E);
756   return EmitLValue(E).getAddress();
757 }
758 
759 void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
760                                               llvm::Constant *Init) {
761   assert (Init && "Invalid DeclRefExpr initializer!");
762   if (CGDebugInfo *Dbg = getDebugInfo())
763     Dbg->EmitGlobalVariable(E->getDecl(), Init);
764 }
765