Lines Matching refs:S
32 void CodeGenFunction::EmitStopPoint(const Stmt *S) { in EmitStopPoint() argument
34 if (isa<DeclStmt>(S)) in EmitStopPoint()
35 DI->setLocation(S->getLocEnd()); in EmitStopPoint()
37 DI->setLocation(S->getLocStart()); in EmitStopPoint()
43 void CodeGenFunction::EmitStmt(const Stmt *S) { in EmitStmt() argument
44 assert(S && "Null statement?"); in EmitStmt()
48 if (EmitSimpleStmt(S)) in EmitStmt()
58 if (!ContainsLabel(S)) { in EmitStmt()
61 assert(!isa<DeclStmt>(*S) && "Unexpected DeclStmt!"); in EmitStmt()
70 EmitStopPoint(S); in EmitStmt()
72 switch (S->getStmtClass()) { in EmitStmt()
99 EmitIgnoredExpr(cast<Expr>(S)); in EmitStmt()
124 EmitIndirectGotoStmt(cast<IndirectGotoStmt>(*S)); break; in EmitStmt()
126 case Stmt::IfStmtClass: EmitIfStmt(cast<IfStmt>(*S)); break; in EmitStmt()
127 case Stmt::WhileStmtClass: EmitWhileStmt(cast<WhileStmt>(*S)); break; in EmitStmt()
128 case Stmt::DoStmtClass: EmitDoStmt(cast<DoStmt>(*S)); break; in EmitStmt()
129 case Stmt::ForStmtClass: EmitForStmt(cast<ForStmt>(*S)); break; in EmitStmt()
131 case Stmt::ReturnStmtClass: EmitReturnStmt(cast<ReturnStmt>(*S)); break; in EmitStmt()
133 case Stmt::SwitchStmtClass: EmitSwitchStmt(cast<SwitchStmt>(*S)); break; in EmitStmt()
134 case Stmt::AsmStmtClass: EmitAsmStmt(cast<AsmStmt>(*S)); break; in EmitStmt()
137 EmitObjCAtTryStmt(cast<ObjCAtTryStmt>(*S)); in EmitStmt()
146 EmitObjCAtThrowStmt(cast<ObjCAtThrowStmt>(*S)); in EmitStmt()
149 EmitObjCAtSynchronizedStmt(cast<ObjCAtSynchronizedStmt>(*S)); in EmitStmt()
152 EmitObjCForCollectionStmt(cast<ObjCForCollectionStmt>(*S)); in EmitStmt()
155 EmitObjCAutoreleasePoolStmt(cast<ObjCAutoreleasePoolStmt>(*S)); in EmitStmt()
159 EmitCXXTryStmt(cast<CXXTryStmt>(*S)); in EmitStmt()
162 EmitCXXForRangeStmt(cast<CXXForRangeStmt>(*S)); in EmitStmt()
169 bool CodeGenFunction::EmitSimpleStmt(const Stmt *S) { in EmitSimpleStmt() argument
170 switch (S->getStmtClass()) { in EmitSimpleStmt()
173 case Stmt::CompoundStmtClass: EmitCompoundStmt(cast<CompoundStmt>(*S)); break; in EmitSimpleStmt()
174 case Stmt::DeclStmtClass: EmitDeclStmt(cast<DeclStmt>(*S)); break; in EmitSimpleStmt()
175 case Stmt::LabelStmtClass: EmitLabelStmt(cast<LabelStmt>(*S)); break; in EmitSimpleStmt()
176 case Stmt::GotoStmtClass: EmitGotoStmt(cast<GotoStmt>(*S)); break; in EmitSimpleStmt()
177 case Stmt::BreakStmtClass: EmitBreakStmt(cast<BreakStmt>(*S)); break; in EmitSimpleStmt()
178 case Stmt::ContinueStmtClass: EmitContinueStmt(cast<ContinueStmt>(*S)); break; in EmitSimpleStmt()
179 case Stmt::DefaultStmtClass: EmitDefaultStmt(cast<DefaultStmt>(*S)); break; in EmitSimpleStmt()
180 case Stmt::CaseStmtClass: EmitCaseStmt(cast<CaseStmt>(*S)); break; in EmitSimpleStmt()
189 RValue CodeGenFunction::EmitCompoundStmt(const CompoundStmt &S, bool GetLast, in EmitCompoundStmt() argument
191 PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(),S.getLBracLoc(), in EmitCompoundStmt()
196 DI->setLocation(S.getLBracLoc()); in EmitCompoundStmt()
203 for (CompoundStmt::const_body_iterator I = S.body_begin(), in EmitCompoundStmt()
204 E = S.body_end()-GetLast; I != E; ++I) in EmitCompoundStmt()
208 DI->setLocation(S.getRBracLoc()); in EmitCompoundStmt()
220 const Stmt *LastStmt = S.body_back(); in EmitCompoundStmt()
324 void CodeGenFunction::EmitLabelStmt(const LabelStmt &S) { in EmitLabelStmt() argument
325 EmitLabel(S.getDecl()); in EmitLabelStmt()
326 EmitStmt(S.getSubStmt()); in EmitLabelStmt()
329 void CodeGenFunction::EmitGotoStmt(const GotoStmt &S) { in EmitGotoStmt() argument
334 EmitStopPoint(&S); in EmitGotoStmt()
336 EmitBranchThroughCleanup(getJumpDestForLabel(S.getLabel())); in EmitGotoStmt()
340 void CodeGenFunction::EmitIndirectGotoStmt(const IndirectGotoStmt &S) { in EmitIndirectGotoStmt() argument
341 if (const LabelDecl *Target = S.getConstantTarget()) { in EmitIndirectGotoStmt()
347 llvm::Value *V = Builder.CreateBitCast(EmitScalarExpr(S.getTarget()), in EmitIndirectGotoStmt()
362 void CodeGenFunction::EmitIfStmt(const IfStmt &S) { in EmitIfStmt() argument
367 if (S.getConditionVariable()) in EmitIfStmt()
368 EmitAutoVarDecl(*S.getConditionVariable()); in EmitIfStmt()
373 if (ConstantFoldsToSimpleInteger(S.getCond(), CondConstant)) { in EmitIfStmt()
375 const Stmt *Executed = S.getThen(); in EmitIfStmt()
376 const Stmt *Skipped = S.getElse(); in EmitIfStmt()
396 if (S.getElse()) in EmitIfStmt()
398 EmitBranchOnBoolExpr(S.getCond(), ThenBlock, ElseBlock); in EmitIfStmt()
404 EmitStmt(S.getThen()); in EmitIfStmt()
409 if (const Stmt *Else = S.getElse()) { in EmitIfStmt()
428 void CodeGenFunction::EmitWhileStmt(const WhileStmt &S) { in EmitWhileStmt() argument
450 if (S.getConditionVariable()) in EmitWhileStmt()
451 EmitAutoVarDecl(*S.getConditionVariable()); in EmitWhileStmt()
456 llvm::Value *BoolCondVal = EvaluateExprAsBool(S.getCond()); in EmitWhileStmt()
485 EmitStmt(S.getBody()); in EmitWhileStmt()
505 void CodeGenFunction::EmitDoStmt(const DoStmt &S) { in EmitDoStmt() argument
517 EmitStmt(S.getBody()); in EmitDoStmt()
530 llvm::Value *BoolCondVal = EvaluateExprAsBool(S.getCond()); in EmitDoStmt()
552 void CodeGenFunction::EmitForStmt(const ForStmt &S) { in EmitForStmt() argument
559 DI->setLocation(S.getSourceRange().getBegin()); in EmitForStmt()
564 if (S.getInit()) in EmitForStmt()
565 EmitStmt(S.getInit()); in EmitForStmt()
578 if (S.getCond()) { in EmitForStmt()
582 if (S.getConditionVariable()) { in EmitForStmt()
583 EmitAutoVarDecl(*S.getConditionVariable()); in EmitForStmt()
596 BoolCondVal = EvaluateExprAsBool(S.getCond()); in EmitForStmt()
614 if (S.getInc()) in EmitForStmt()
624 EmitStmt(S.getBody()); in EmitForStmt()
628 if (S.getInc()) { in EmitForStmt()
630 EmitStmt(S.getInc()); in EmitForStmt()
641 DI->setLocation(S.getSourceRange().getEnd()); in EmitForStmt()
649 void CodeGenFunction::EmitCXXForRangeStmt(const CXXForRangeStmt &S) { in EmitCXXForRangeStmt() argument
656 DI->setLocation(S.getSourceRange().getBegin()); in EmitCXXForRangeStmt()
661 EmitStmt(S.getRangeStmt()); in EmitCXXForRangeStmt()
662 EmitStmt(S.getBeginEndStmt()); in EmitCXXForRangeStmt()
681 llvm::Value *BoolCondVal = EvaluateExprAsBool(S.getCond()); in EmitCXXForRangeStmt()
700 EmitStmt(S.getLoopVarStmt()); in EmitCXXForRangeStmt()
701 EmitStmt(S.getBody()); in EmitCXXForRangeStmt()
706 EmitStmt(S.getInc()); in EmitCXXForRangeStmt()
715 DI->setLocation(S.getSourceRange().getEnd()); in EmitCXXForRangeStmt()
737 void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) { in EmitReturnStmt() argument
739 const Expr *RV = S.getRetValue(); in EmitReturnStmt()
743 if (S.getNRVOCandidate() && S.getNRVOCandidate()->isNRVOVariable() && in EmitReturnStmt()
751 if (llvm::Value *NRVOFlag = NRVOFlags[S.getNRVOCandidate()]) in EmitReturnStmt()
776 void CodeGenFunction::EmitDeclStmt(const DeclStmt &S) { in EmitDeclStmt() argument
780 EmitStopPoint(&S); in EmitDeclStmt()
782 for (DeclStmt::const_decl_iterator I = S.decl_begin(), E = S.decl_end(); in EmitDeclStmt()
787 void CodeGenFunction::EmitBreakStmt(const BreakStmt &S) { in EmitBreakStmt() argument
794 EmitStopPoint(&S); in EmitBreakStmt()
800 void CodeGenFunction::EmitContinueStmt(const ContinueStmt &S) { in EmitContinueStmt() argument
807 EmitStopPoint(&S); in EmitContinueStmt()
816 void CodeGenFunction::EmitCaseStmtRange(const CaseStmt &S) { in EmitCaseStmtRange() argument
817 assert(S.getRHS() && "Expected RHS value in CaseStmt"); in EmitCaseStmtRange()
819 llvm::APSInt LHS = S.getLHS()->EvaluateAsInt(getContext()); in EmitCaseStmtRange()
820 llvm::APSInt RHS = S.getRHS()->EvaluateAsInt(getContext()); in EmitCaseStmtRange()
827 EmitStmt(S.getSubStmt()); in EmitCaseStmtRange()
871 void CodeGenFunction::EmitCaseStmt(const CaseStmt &S) { in EmitCaseStmt() argument
873 if (S.getRHS()) { in EmitCaseStmt()
874 EmitCaseStmtRange(S); in EmitCaseStmt()
879 Builder.getInt(S.getLHS()->EvaluateAsInt(getContext())); in EmitCaseStmt()
883 if (isa<BreakStmt>(S.getSubStmt())) { in EmitCaseStmt()
913 const CaseStmt *CurCase = &S; in EmitCaseStmt()
914 const CaseStmt *NextCase = dyn_cast<CaseStmt>(S.getSubStmt()); in EmitCaseStmt()
929 void CodeGenFunction::EmitDefaultStmt(const DefaultStmt &S) { in EmitDefaultStmt() argument
934 EmitStmt(S.getSubStmt()); in EmitDefaultStmt()
961 static CSFC_Result CollectStatementsForCase(const Stmt *S, in CollectStatementsForCase() argument
966 if (S == 0) in CollectStatementsForCase()
971 if (const SwitchCase *SC = dyn_cast<SwitchCase>(S)) { in CollectStatementsForCase()
972 if (S == Case) { in CollectStatementsForCase()
985 if (Case == 0 && isa<BreakStmt>(S)) in CollectStatementsForCase()
990 if (const CompoundStmt *CS = dyn_cast<CompoundStmt>(S)) { in CollectStatementsForCase()
1068 if (CodeGenFunction::ContainsLabel(S, true)) in CollectStatementsForCase()
1075 if (CodeGenFunction::containsBreak(S)) return CSFC_Failure; in CollectStatementsForCase()
1079 ResultStmts.push_back(S); in CollectStatementsForCase()
1087 static bool FindCaseStatementsForValue(const SwitchStmt &S, in FindCaseStatementsForValue() argument
1093 const SwitchCase *Case = S.getSwitchCaseList(); in FindCaseStatementsForValue()
1120 return !CodeGenFunction::ContainsLabel(&S); in FindCaseStatementsForValue()
1133 return CollectStatementsForCase(S.getBody(), Case, FoundCase, in FindCaseStatementsForValue()
1138 void CodeGenFunction::EmitSwitchStmt(const SwitchStmt &S) { in EmitSwitchStmt() argument
1143 if (S.getConditionVariable()) in EmitSwitchStmt()
1144 EmitAutoVarDecl(*S.getConditionVariable()); in EmitSwitchStmt()
1149 if (ConstantFoldsToSimpleInteger(S.getCond(), ConstantCondValue)) { in EmitSwitchStmt()
1151 if (FindCaseStatementsForValue(S, ConstantCondValue, CaseStmts, in EmitSwitchStmt()
1163 llvm::Value *CondV = EmitScalarExpr(S.getCond()); in EmitSwitchStmt()
1189 EmitStmt(S.getBody()); in EmitSwitchStmt()
1295 CodeGenFunction::EmitAsmInputLValue(const AsmStmt &S, in EmitAsmInputLValue() argument
1325 llvm::Value* CodeGenFunction::EmitAsmInput(const AsmStmt &S, in EmitAsmInput() argument
1335 return EmitAsmInputLValue(S, Info, Dest, InputExpr->getType(), ConstraintStr); in EmitAsmInput()
1367 void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) { in EmitAsmStmt() argument
1372 S.AnalyzeAsmString(Pieces, getContext(), DiagOffs); in EmitAsmStmt()
1390 for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) { in EmitAsmStmt()
1391 TargetInfo::ConstraintInfo Info(S.getOutputConstraint(i), in EmitAsmStmt()
1392 S.getOutputName(i)); in EmitAsmStmt()
1398 for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) { in EmitAsmStmt()
1399 TargetInfo::ConstraintInfo Info(S.getInputConstraint(i), in EmitAsmStmt()
1400 S.getInputName(i)); in EmitAsmStmt()
1402 S.getNumOutputs(), Info); in EmitAsmStmt()
1421 for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) { in EmitAsmStmt()
1425 std::string OutputConstraint(S.getOutputConstraint(i)); in EmitAsmStmt()
1428 const Expr *OutExpr = S.getOutputExpr(i); in EmitAsmStmt()
1432 Target, CGM, S); in EmitAsmStmt()
1452 for (InputNo = 0; InputNo != S.getNumInputs(); ++InputNo) { in EmitAsmStmt()
1457 assert(InputNo != S.getNumInputs() && "Didn't find matching input!"); in EmitAsmStmt()
1459 QualType InputTy = S.getInputExpr(InputNo)->getType(); in EmitAsmStmt()
1482 const Expr *InputExpr = S.getOutputExpr(i); in EmitAsmStmt()
1483 llvm::Value *Arg = EmitAsmInputLValue(S, Info, Dest, InputExpr->getType(), in EmitAsmStmt()
1496 unsigned NumConstraints = S.getNumOutputs() + S.getNumInputs(); in EmitAsmStmt()
1498 for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) { in EmitAsmStmt()
1499 const Expr *InputExpr = S.getInputExpr(i); in EmitAsmStmt()
1507 std::string InputConstraint(S.getInputConstraint(i)); in EmitAsmStmt()
1514 Target, CGM, S); in EmitAsmStmt()
1516 llvm::Value *Arg = EmitAsmInput(S, Info, InputExpr, Constraints); in EmitAsmStmt()
1525 QualType OutputType = S.getOutputExpr(Output)->getType(); in EmitAsmStmt()
1558 for (unsigned i = 0, e = S.getNumClobbers(); i != e; i++) { in EmitAsmStmt()
1559 llvm::StringRef Clobber = S.getClobber(i)->getString(); in EmitAsmStmt()
1593 S.isVolatile() || S.getNumOutputs() == 0); in EmitAsmStmt()
1599 Result->setMetadata("srcloc", getAsmSrcLocInfo(S.getAsmString(), *this)); in EmitAsmStmt()