Lines Matching refs:til
62 static bool isIncompletePhi(const til::SExpr *E) { in isIncompletePhi()
63 if (const auto *Ph = dyn_cast<til::Phi>(E)) in isIncompletePhi()
64 return Ph->status() == til::Phi::PH_Incomplete; in isIncompletePhi()
70 til::SExpr *SExprBuilder::lookupStmt(const Stmt *S) { in lookupStmt()
77 til::SCFG *SExprBuilder::buildCFG(CFGWalker &Walker) { in buildCFG()
160 return CapabilityExpr(new (Arena) til::Wildcard(), false); in translateAttrExpr()
180 til::SExpr *E = translate(AttrExp, Ctx); in translateAttrExpr()
184 if (!E || isa<til::Literal>(E)) in translateAttrExpr()
188 if (auto *CE = dyn_cast_or_null<til::Cast>(E)) { in translateAttrExpr()
189 if (CE->castOpcode() == til::CAST_objToPtr) in translateAttrExpr()
198 til::SExpr *SExprBuilder::translate(const Stmt *S, CallingContext *Ctx) { in translate()
204 if (til::SExpr *E = lookupStmt(S)) in translate()
253 return new (Arena) til::Literal(cast<Expr>(S)); in translate()
263 return new (Arena) til::Undefined(S); in translate()
266 til::SExpr *SExprBuilder::translateDeclRefExpr(const DeclRefExpr *DRE, in translateDeclRefExpr()
287 return new (Arena) til::LiteralPtr(VD); in translateDeclRefExpr()
290 til::SExpr *SExprBuilder::translateCXXThisExpr(const CXXThisExpr *TE, in translateCXXThisExpr()
299 static const ValueDecl *getValueDeclFromSExpr(const til::SExpr *E) { in getValueDeclFromSExpr()
300 if (auto *V = dyn_cast<til::Variable>(E)) in getValueDeclFromSExpr()
302 if (auto *Ph = dyn_cast<til::Phi>(E)) in getValueDeclFromSExpr()
304 if (auto *P = dyn_cast<til::Project>(E)) in getValueDeclFromSExpr()
306 if (auto *L = dyn_cast<til::LiteralPtr>(E)) in getValueDeclFromSExpr()
311 static bool hasCppPointerType(const til::SExpr *E) { in hasCppPointerType()
315 if (auto *C = dyn_cast<til::Cast>(E)) in hasCppPointerType()
316 return C->castOpcode() == til::CAST_objToPtr; in hasCppPointerType()
334 til::SExpr *SExprBuilder::translateMemberExpr(const MemberExpr *ME, in translateMemberExpr()
336 til::SExpr *BE = translate(ME->getBase(), Ctx); in translateMemberExpr()
337 til::SExpr *E = new (Arena) til::SApply(BE); in translateMemberExpr()
344 til::Project *P = new (Arena) til::Project(E, D); in translateMemberExpr()
350 til::SExpr *SExprBuilder::translateCallExpr(const CallExpr *CE, in translateCallExpr()
362 return const_cast<til::SExpr*>( in translateCallExpr()
367 til::SExpr *E = translate(CE->getCallee(), Ctx); in translateCallExpr()
369 til::SExpr *A = translate(Arg, Ctx); in translateCallExpr()
370 E = new (Arena) til::Apply(E, A); in translateCallExpr()
372 return new (Arena) til::Call(E, CE); in translateCallExpr()
375 til::SExpr *SExprBuilder::translateCXXMemberCallExpr( in translateCXXMemberCallExpr()
382 return new (Arena) til::Cast(til::CAST_objToPtr, E); in translateCXXMemberCallExpr()
390 til::SExpr *SExprBuilder::translateCXXOperatorCallExpr( in translateCXXOperatorCallExpr()
397 return new (Arena) til::Cast(til::CAST_objToPtr, E); in translateCXXOperatorCallExpr()
404 til::SExpr *SExprBuilder::translateUnaryOperator(const UnaryOperator *UO, in translateUnaryOperator()
411 return new (Arena) til::Undefined(UO); in translateUnaryOperator()
420 auto *W = new (Arena) til::Wildcard(); in translateUnaryOperator()
421 return new (Arena) til::Project(W, DRE->getDecl()); in translateUnaryOperator()
436 til::UnaryOp(til::UOP_Minus, translate(UO->getSubExpr(), Ctx)); in translateUnaryOperator()
439 til::UnaryOp(til::UOP_BitNot, translate(UO->getSubExpr(), Ctx)); in translateUnaryOperator()
442 til::UnaryOp(til::UOP_LogicNot, translate(UO->getSubExpr(), Ctx)); in translateUnaryOperator()
449 return new (Arena) til::Undefined(UO); in translateUnaryOperator()
451 return new (Arena) til::Undefined(UO); in translateUnaryOperator()
454 til::SExpr *SExprBuilder::translateBinOp(til::TIL_BinaryOpcode Op, in translateBinOp()
457 til::SExpr *E0 = translate(BO->getLHS(), Ctx); in translateBinOp()
458 til::SExpr *E1 = translate(BO->getRHS(), Ctx); in translateBinOp()
460 return new (Arena) til::BinaryOp(Op, E1, E0); in translateBinOp()
462 return new (Arena) til::BinaryOp(Op, E0, E1); in translateBinOp()
465 til::SExpr *SExprBuilder::translateBinAssign(til::TIL_BinaryOpcode Op, in translateBinAssign()
471 til::SExpr *E0 = translate(LHS, Ctx); in translateBinAssign()
472 til::SExpr *E1 = translate(RHS, Ctx); in translateBinAssign()
475 til::SExpr *CV = nullptr; in translateBinAssign()
482 til::SExpr *Arg = CV ? CV : new (Arena) til::Load(E0); in translateBinAssign()
483 E1 = new (Arena) til::BinaryOp(Op, Arg, E1); in translateBinAssign()
488 return new (Arena) til::Store(E0, E1); in translateBinAssign()
491 til::SExpr *SExprBuilder::translateBinaryOperator(const BinaryOperator *BO, in translateBinaryOperator()
496 return new (Arena) til::Undefined(BO); in translateBinaryOperator()
498 case BO_Mul: return translateBinOp(til::BOP_Mul, BO, Ctx); in translateBinaryOperator()
499 case BO_Div: return translateBinOp(til::BOP_Div, BO, Ctx); in translateBinaryOperator()
500 case BO_Rem: return translateBinOp(til::BOP_Rem, BO, Ctx); in translateBinaryOperator()
501 case BO_Add: return translateBinOp(til::BOP_Add, BO, Ctx); in translateBinaryOperator()
502 case BO_Sub: return translateBinOp(til::BOP_Sub, BO, Ctx); in translateBinaryOperator()
503 case BO_Shl: return translateBinOp(til::BOP_Shl, BO, Ctx); in translateBinaryOperator()
504 case BO_Shr: return translateBinOp(til::BOP_Shr, BO, Ctx); in translateBinaryOperator()
505 case BO_LT: return translateBinOp(til::BOP_Lt, BO, Ctx); in translateBinaryOperator()
506 case BO_GT: return translateBinOp(til::BOP_Lt, BO, Ctx, true); in translateBinaryOperator()
507 case BO_LE: return translateBinOp(til::BOP_Leq, BO, Ctx); in translateBinaryOperator()
508 case BO_GE: return translateBinOp(til::BOP_Leq, BO, Ctx, true); in translateBinaryOperator()
509 case BO_EQ: return translateBinOp(til::BOP_Eq, BO, Ctx); in translateBinaryOperator()
510 case BO_NE: return translateBinOp(til::BOP_Neq, BO, Ctx); in translateBinaryOperator()
511 case BO_And: return translateBinOp(til::BOP_BitAnd, BO, Ctx); in translateBinaryOperator()
512 case BO_Xor: return translateBinOp(til::BOP_BitXor, BO, Ctx); in translateBinaryOperator()
513 case BO_Or: return translateBinOp(til::BOP_BitOr, BO, Ctx); in translateBinaryOperator()
514 case BO_LAnd: return translateBinOp(til::BOP_LogicAnd, BO, Ctx); in translateBinaryOperator()
515 case BO_LOr: return translateBinOp(til::BOP_LogicOr, BO, Ctx); in translateBinaryOperator()
517 case BO_Assign: return translateBinAssign(til::BOP_Eq, BO, Ctx, true); in translateBinaryOperator()
518 case BO_MulAssign: return translateBinAssign(til::BOP_Mul, BO, Ctx); in translateBinaryOperator()
519 case BO_DivAssign: return translateBinAssign(til::BOP_Div, BO, Ctx); in translateBinaryOperator()
520 case BO_RemAssign: return translateBinAssign(til::BOP_Rem, BO, Ctx); in translateBinaryOperator()
521 case BO_AddAssign: return translateBinAssign(til::BOP_Add, BO, Ctx); in translateBinaryOperator()
522 case BO_SubAssign: return translateBinAssign(til::BOP_Sub, BO, Ctx); in translateBinaryOperator()
523 case BO_ShlAssign: return translateBinAssign(til::BOP_Shl, BO, Ctx); in translateBinaryOperator()
524 case BO_ShrAssign: return translateBinAssign(til::BOP_Shr, BO, Ctx); in translateBinaryOperator()
525 case BO_AndAssign: return translateBinAssign(til::BOP_BitAnd, BO, Ctx); in translateBinaryOperator()
526 case BO_XorAssign: return translateBinAssign(til::BOP_BitXor, BO, Ctx); in translateBinaryOperator()
527 case BO_OrAssign: return translateBinAssign(til::BOP_BitOr, BO, Ctx); in translateBinaryOperator()
533 return new (Arena) til::Undefined(BO); in translateBinaryOperator()
536 til::SExpr *SExprBuilder::translateCastExpr(const CastExpr *CE, in translateCastExpr()
542 til::SExpr *E0 = lookupVarDecl(DRE->getDecl()); in translateCastExpr()
546 til::SExpr *E0 = translate(CE->getSubExpr(), Ctx); in translateCastExpr()
556 til::SExpr *E0 = translate(CE->getSubExpr(), Ctx); in translateCastExpr()
561 til::SExpr *E0 = translate(CE->getSubExpr(), Ctx); in translateCastExpr()
564 return new (Arena) til::Cast(til::CAST_none, E0); in translateCastExpr()
569 til::SExpr *
572 til::SExpr *E0 = translate(E->getBase(), Ctx); in translateArraySubscriptExpr()
573 til::SExpr *E1 = translate(E->getIdx(), Ctx); in translateArraySubscriptExpr()
574 return new (Arena) til::ArrayIndex(E0, E1); in translateArraySubscriptExpr()
577 til::SExpr *
583 return new (Arena) til::IfThenElse(C, T, E); in translateAbstractConditionalOperator()
586 til::SExpr *
592 til::SExpr* SE = translate(E, Ctx); in translateDeclStmt()
611 til::SExpr *SExprBuilder::addStatement(til::SExpr* E, const Stmt *S, in addStatement()
613 if (!E || !CurrentBB || E->block() || til::ThreadSafetyTIL::isTrivial(E)) in addStatement()
616 E = new (Arena) til::Variable(E, VD); in addStatement()
624 til::SExpr *SExprBuilder::lookupVarDecl(const ValueDecl *VD) { in lookupVarDecl()
634 static void maybeUpdateVD(til::SExpr *E, const ValueDecl *VD) { in maybeUpdateVD()
637 if (til::Variable *V = dyn_cast<til::Variable>(E)) { in maybeUpdateVD()
644 til::SExpr *SExprBuilder::addVarDecl(const ValueDecl *VD, til::SExpr *E) { in addVarDecl()
653 til::SExpr *SExprBuilder::updateVarDecl(const ValueDecl *VD, til::SExpr *E) { in updateVarDecl()
657 til::SExpr *Ptr = new (Arena) til::LiteralPtr(VD); in updateVarDecl()
658 til::SExpr *St = new (Arena) til::Store(Ptr, E); in updateVarDecl()
669 void SExprBuilder::makePhiNodeVar(unsigned i, unsigned NPreds, til::SExpr *E) { in makePhiNodeVar()
673 til::SExpr *CurrE = CurrentLVarMap[i].second; in makePhiNodeVar()
677 til::Phi *Ph = dyn_cast<til::Phi>(CurrE); in makePhiNodeVar()
686 til::Phi *Ph = new (Arena) til::Phi(Arena, NPreds); in makePhiNodeVar()
696 Ph->setStatus(til::Phi::PH_Incomplete); in makePhiNodeVar()
701 if (Ph->status() == til::Phi::PH_Incomplete) in makePhiNodeVar()
772 til::BasicBlock *BB = lookupBlock(Blk); in mergePhiNodesBackEdge()
776 for (til::SExpr *PE : BB->arguments()) { in mergePhiNodesBackEdge()
777 til::Phi *Ph = dyn_cast_or_null<til::Phi>(PE); in mergePhiNodesBackEdge()
781 til::SExpr *E = lookupVarDecl(Ph->clangDecl()); in mergePhiNodesBackEdge()
791 Scfg = new (Arena) til::SCFG(Arena, NBlocks); in enterCFG()
798 auto *BB = new (Arena) til::BasicBlock(Arena); in enterCFG()
813 til::SExpr *Lp = new (Arena) til::LiteralPtr(Pm); in enterCFG()
814 til::SExpr *Ld = new (Arena) til::Load(Lp); in enterCFG()
815 til::SExpr *V = addStatement(Ld, nullptr, Pm); in enterCFG()
862 til::SExpr *E = translate(S, nullptr); in handleStatement()
868 til::SExpr *Sf = new (Arena) til::LiteralPtr(VD); in handleDestructorCall()
869 til::SExpr *Dr = new (Arena) til::LiteralPtr(DD); in handleDestructorCall()
870 til::SExpr *Ap = new (Arena) til::Apply(Dr, Sf); in handleDestructorCall()
871 til::SExpr *E = new (Arena) til::Call(Ap); in handleDestructorCall()
885 til::BasicBlock *BB = *It ? lookupBlock(*It) : nullptr; in exitCFGBlockBody()
888 auto *Tm = new (Arena) til::Goto(BB, Idx); in exitCFGBlockBody()
892 til::SExpr *C = translate(B->getTerminatorCondition(true), nullptr); in exitCFGBlockBody()
893 til::BasicBlock *BB1 = *It ? lookupBlock(*It) : nullptr; in exitCFGBlockBody()
895 til::BasicBlock *BB2 = *It ? lookupBlock(*It) : nullptr; in exitCFGBlockBody()
897 auto *Tm = new (Arena) til::Branch(C, BB1, BB2); in exitCFGBlockBody()
921 if (Ph->status() == til::Phi::PH_Incomplete) in exitCFG()