Lines Matching full:this

34     return this->addLocal(Local);  in addExtended()
74 [this, CE](PrimType T) { in VisitCastExpr()
76 if (!this->emitLoadPop(T, CE)) in VisitCastExpr()
78 return DiscardResult ? this->emitPop(T, CE) : true; in VisitCastExpr()
84 if (!this->visit(SubExpr)) in VisitCastExpr()
95 return this->emitGetPtrBase(ToBase->Offset, CE); in VisitCastExpr()
106 return this->visit(SubExpr); in VisitCastExpr()
115 if (!this->visit(SubExpr)) in VisitCastExpr()
118 // TODO: Emit this only if FromT != ToT. in VisitCastExpr()
119 return this->emitCast(*FromT, *ToT, CE); in VisitCastExpr()
136 return this->emitConst(LE->getValue(), LE); in VisitIntegerLiteral()
141 return this->visit(PE->getSubExpr()); in VisitParenExpr()
154 if (!this->visit(RHS)) in VisitBinaryOperator()
166 return this->bail(BO); in VisitBinaryOperator()
169 auto Discard = [this, T, BO](bool Result) { in VisitBinaryOperator()
172 return DiscardResult ? this->emitPop(*T, BO) : true; in VisitBinaryOperator()
178 return this->VisitPointerArithBinOp(BO); in VisitBinaryOperator()
186 return Discard(this->emitEQ(*LT, BO)); in VisitBinaryOperator()
188 return Discard(this->emitNE(*LT, BO)); in VisitBinaryOperator()
190 return Discard(this->emitLT(*LT, BO)); in VisitBinaryOperator()
192 return Discard(this->emitLE(*LT, BO)); in VisitBinaryOperator()
194 return Discard(this->emitGT(*LT, BO)); in VisitBinaryOperator()
196 return Discard(this->emitGE(*LT, BO)); in VisitBinaryOperator()
198 return Discard(this->emitSub(*T, BO)); in VisitBinaryOperator()
200 return Discard(this->emitAdd(*T, BO)); in VisitBinaryOperator()
202 return Discard(this->emitMul(*T, BO)); in VisitBinaryOperator()
204 return Discard(this->emitRem(*T, BO)); in VisitBinaryOperator()
206 return Discard(this->emitDiv(*T, BO)); in VisitBinaryOperator()
209 return this->emitStorePop(*T, BO); in VisitBinaryOperator()
210 return this->emitStore(*T, BO); in VisitBinaryOperator()
212 return Discard(this->emitBitAnd(*T, BO)); in VisitBinaryOperator()
214 return Discard(this->emitBitOr(*T, BO)); in VisitBinaryOperator()
216 return Discard(this->emitShl(*LT, *RT, BO)); in VisitBinaryOperator()
218 return Discard(this->emitShr(*LT, *RT, BO)); in VisitBinaryOperator()
220 return Discard(this->emitBitXor(*T, BO)); in VisitBinaryOperator()
224 return this->bail(BO); in VisitBinaryOperator()
256 return this->emitSubPtr(classifyPrim(E->getType()), E); in VisitPointerArithBinOp()
273 return this->emitAddOffset(OffsetType, E); in VisitPointerArithBinOp()
275 return this->emitSubOffset(OffsetType, E); in VisitPointerArithBinOp()
277 return this->bail(E); in VisitPointerArithBinOp()
283 return this->emitZero(*T, E); in VisitImplicitValueInitExpr()
296 // What's left on the stack after this is a pointer. in VisitArraySubscriptExpr()
297 if (!this->visit(Base)) in VisitArraySubscriptExpr()
300 if (!this->visit(Index)) in VisitArraySubscriptExpr()
303 if (!this->emitAddOffset(IndexT, E)) in VisitArraySubscriptExpr()
306 if (!this->emitNarrowPtr(E)) in VisitArraySubscriptExpr()
310 return this->emitPopPtr(E); in VisitArraySubscriptExpr()
318 if (!this->visit(Init)) in VisitInitListExpr()
327 return this->visit(E->getReplacement()); in VisitSubstNonTypeTemplateParmExpr()
334 return this->visit(E->getSubExpr()); in VisitConstantExpr()
375 return this->emitConst(Size.getQuantity(), E); in VisitUnaryExprOrTypeTraitExpr()
405 return this->emitConst(Size.getQuantity(), E); in VisitUnaryExprOrTypeTraitExpr()
420 if (!this->visit(Base)) in VisitMemberExpr()
431 return this->emitGetFieldPop(PT_Ptr, F->Offset, E); in VisitMemberExpr()
432 return this->emitGetPtrField(F->Offset, E); in VisitMemberExpr()
445 return this->emitConst(*ArrayIndex, E); in VisitArrayInitIndexExpr()
450 return this->visit(E->getSourceExpr()); in VisitOpaqueValueExpr()
460 LabelTy LabelEnd = this->getLabel(); // Label after the operator. in VisitAbstractConditionalOperator()
461 LabelTy LabelFalse = this->getLabel(); // Label for the false expr. in VisitAbstractConditionalOperator()
463 if (!this->visit(Condition)) in VisitAbstractConditionalOperator()
465 if (!this->jumpFalse(LabelFalse)) in VisitAbstractConditionalOperator()
468 if (!this->visit(TrueExpr)) in VisitAbstractConditionalOperator()
470 if (!this->jump(LabelEnd)) in VisitAbstractConditionalOperator()
473 this->emitLabel(LabelFalse); in VisitAbstractConditionalOperator()
475 if (!this->visit(FalseExpr)) in VisitAbstractConditionalOperator()
478 this->fallthrough(LabelEnd); in VisitAbstractConditionalOperator()
479 this->emitLabel(LabelEnd); in VisitAbstractConditionalOperator()
487 return this->emitGetPtrGlobal(StringIndex, E); in VisitStringLiteral()
493 return this->emitConst(E->getValue(), E); in VisitCharacterLiteral()
513 if (!this->emitLoad(*LT, E)) in VisitCompoundAssignOperator()
521 if (!this->emitAdd(*LT, E)) in VisitCompoundAssignOperator()
525 if (!this->emitSub(*LT, E)) in VisitCompoundAssignOperator()
533 if (!this->emitShl(*LT, *RT, E)) in VisitCompoundAssignOperator()
537 if (!this->emitShr(*LT, *RT, E)) in VisitCompoundAssignOperator()
549 return this->emitStorePop(*LT, E); in VisitCompoundAssignOperator()
550 return this->emitStore(*LT, E); in VisitCompoundAssignOperator()
554 OptionScope<Emitter> Scope(this, /*NewDiscardResult=*/true); in discard()
555 return this->Visit(E); in discard()
560 OptionScope<Emitter> Scope(this, /*NewDiscardResult=*/false); in visit()
561 return this->Visit(E); in visit()
569 return this->bail(E); in visitBool()
577 return this->emitZeroBool(E); in visitZeroInitializer()
579 return this->emitZeroSint8(E); in visitZeroInitializer()
581 return this->emitZeroUint8(E); in visitZeroInitializer()
583 return this->emitZeroSint16(E); in visitZeroInitializer()
585 return this->emitZeroUint16(E); in visitZeroInitializer()
587 return this->emitZeroSint32(E); in visitZeroInitializer()
589 return this->emitZeroUint32(E); in visitZeroInitializer()
591 return this->emitZeroSint64(E); in visitZeroInitializer()
593 return this->emitZeroUint64(E); in visitZeroInitializer()
595 return this->emitNullPtr(E); in visitZeroInitializer()
630 auto It = this->Params.find(PD); in dereferenceParam()
631 if (It != this->Params.end()) { in dereferenceParam()
635 return DiscardResult ? true : this->emitGetParam(T, Idx, LV); in dereferenceParam()
640 if (!this->emitSetParam(T, Idx, LV)) in dereferenceParam()
642 return DiscardResult ? true : this->emitGetPtrParam(Idx, LV); in dereferenceParam()
645 if (!this->emitGetParam(T, Idx, LV)) in dereferenceParam()
649 if (!this->emitSetParam(T, Idx, LV)) in dereferenceParam()
651 return DiscardResult ? true : this->emitGetPtrParam(Idx, LV); in dereferenceParam()
659 return this->emitGetPtrGlobal(*Idx, PD); in dereferenceParam()
677 if (!this->emitGetLocal(T, L.Offset, LV)) in dereferenceVar()
679 return DiscardResult ? this->emitPop(T, LV) : true; in dereferenceVar()
684 if (!this->emitSetLocal(T, L.Offset, LV)) in dereferenceVar()
686 return DiscardResult ? true : this->emitGetPtrLocal(L.Offset, LV); in dereferenceVar()
689 if (!this->emitGetLocal(T, L.Offset, LV)) in dereferenceVar()
693 if (!this->emitSetLocal(T, L.Offset, LV)) in dereferenceVar()
695 return DiscardResult ? true : this->emitGetPtrLocal(L.Offset, LV); in dereferenceVar()
700 if (!this->emitGetGlobal(T, *Idx, LV)) in dereferenceVar()
702 return DiscardResult ? this->emitPop(T, LV) : true; in dereferenceVar()
707 if (!this->emitSetGlobal(T, *Idx, LV)) in dereferenceVar()
709 return DiscardResult ? true : this->emitGetPtrGlobal(*Idx, LV); in dereferenceVar()
712 if (!this->emitGetGlobal(T, *Idx, LV)) in dereferenceVar()
716 if (!this->emitSetGlobal(T, *Idx, LV)) in dereferenceVar()
718 return DiscardResult ? true : this->emitGetPtrGlobal(*Idx, LV); in dereferenceVar()
724 // The access mode can only be read in this case. in dereferenceVar()
729 return this->visit(VD->getInit()); in dereferenceVar()
742 return this->emitConstSint8(Value, E); in emitConst()
744 return this->emitConstUint8(Value, E); in emitConst()
746 return this->emitConstSint16(Value, E); in emitConst()
748 return this->emitConstUint16(Value, E); in emitConst()
750 return this->emitConstSint32(Value, E); in emitConst()
752 return this->emitConstUint32(Value, E); in emitConst()
754 return this->emitConstSint64(Value, E); in emitConst()
756 return this->emitConstUint64(Value, E); in emitConst()
758 return this->emitConstBool(Value, E); in emitConst()
769 return this->emitConst(Value.getSExtValue(), E); in emitConst()
770 return this->emitConst(Value.getZExtValue(), E); in emitConst()
790 Scope::Local Local = this->createLocal(D); in allocateLocalPrimitive()
829 Scope::Local Local = this->createLocal(D); in allocateLocal()
836 // NB: When calling this function, we have a pointer to the
848 if (!this->emitDupPtr(Init)) in visitArrayInitializer()
850 if (!this->visit(Init)) in visitArrayInitializer()
852 if (!this->emitInitElem(*T, ElementIndex, Init)) in visitArrayInitializer()
857 if (!this->emitDupPtr(Init)) in visitArrayInitializer()
859 if (!this->emitConstUint32(ElementIndex, Init)) in visitArrayInitializer()
861 if (!this->emitAddOffsetUint32(Init)) in visitArrayInitializer()
863 if (!this->emitNarrowPtr(Init)) in visitArrayInitializer()
869 if (!this->emitPopPtr(Init)) in visitArrayInitializer()
876 return this->visitInitializer(DIE->getExpr()); in visitArrayInitializer()
878 // TODO: This compiles to quite a lot of bytecode if the array is larger. in visitArrayInitializer()
879 // Investigate compiling this to a loop, or at least try to use in visitArrayInitializer()
889 ArrayIndexScope<Emitter> IndexScope(this, I); in visitArrayInitializer()
891 if (!this->emitDupPtr(SubExpr)) // LHS in visitArrayInitializer()
895 if (!this->visit(SubExpr)) in visitArrayInitializer()
897 if (!this->emitInitElem(*ElemT, I, Initializer)) in visitArrayInitializer()
901 if (!this->emitConstUint64(I, SubExpr)) in visitArrayInitializer()
904 if (!this->emitAddOffsetUint64(SubExpr)) in visitArrayInitializer()
907 if (!this->emitNarrowPtr(SubExpr)) in visitArrayInitializer()
914 if (!this->emitPopPtr(Initializer)) in visitArrayInitializer()
925 // TODO(perf): For int and bool types, we can probably just skip this in visitArrayInitializer()
927 // without this. in visitArrayInitializer()
929 if (!this->emitZero(*ElemT, Initializer)) in visitArrayInitializer()
931 if (!this->emitInitElem(*ElemT, I, Initializer)) in visitArrayInitializer()
951 if (!this->emitDupPtr(Initializer)) in visitArrayInitializer()
953 if (!this->emitConstUint64(I, Initializer)) in visitArrayInitializer()
955 if (!this->emitAddOffsetUint64(Initializer)) in visitArrayInitializer()
957 if (!this->emitNarrowPtr(Initializer)) in visitArrayInitializer()
962 if (!this->visit(Arg)) in visitArrayInitializer()
966 if (!this->emitCall(Func, Initializer)) in visitArrayInitializer()
987 // The This pointer is already on the stack because this is an initializer, in visitRecordInitializer()
989 if (!this->emitDupPtr(Initializer)) in visitRecordInitializer()
994 if (!this->visit(Arg)) in visitRecordInitializer()
998 return this->emitCall(Func, Initializer); in visitRecordInitializer()
1006 if (!this->emitDupPtr(Initializer)) in visitRecordInitializer()
1010 if (!this->visit(Init)) in visitRecordInitializer()
1013 if (!this->emitInitField(*T, FieldToInit->Offset, Initializer)) in visitRecordInitializer()
1016 if (!this->emitPopPtr(Initializer)) in visitRecordInitializer()
1021 if (!this->emitGetPtrField(FieldToInit->Offset, Init)) in visitRecordInitializer()
1024 if (!this->visitInitializer(Init)) in visitRecordInitializer()
1027 if (!this->emitPopPtr(Initializer)) in visitRecordInitializer()
1037 if (!this->emitDupPtr(Initializer)) in visitRecordInitializer()
1040 return this->VisitCallExpr(CE); in visitRecordInitializer()
1042 return this->visitInitializer(DIE->getExpr()); in visitRecordInitializer()
1059 return this->visit(Initializer); in visitInitializer()
1107 ExprScope<Emitter> RootScope(this); in visitExpr()
1112 return this->emitRet(*T, Exp); in visitExpr()
1114 return this->emitRetValue(Exp); in visitExpr()
1125 if (!this->visitVarDecl(VD)) in visitDecl()
1132 if (!this->emitGetPtrGlobal(*GlobalIndex, VD)) in visitDecl()
1137 if (!this->emitGetPtrLocal(Local->second.Offset, VD)) in visitDecl()
1143 if (!this->emitLoadPop(*VarT, VD)) in visitDecl()
1146 return this->emitRet(*VarT, VD); in visitDecl()
1149 return this->emitRetValue(VD); in visitDecl()
1161 return this->bail(VD); in visitVarDecl()
1165 DeclScope<Emitter> LocalScope(this, VD); in visitVarDecl()
1168 if (!this->visit(Init)) in visitVarDecl()
1170 return this->emitInitGlobal(*VarT, *GlobalIndex, VD); in visitVarDecl()
1172 return this->visitGlobalInitializer(Init, *GlobalIndex); in visitVarDecl()
1175 VariableScope<Emitter> LocalScope(this); in visitVarDecl()
1177 unsigned Offset = this->allocateLocalPrimitive( in visitVarDecl()
1181 ExprScope<Emitter> Scope(this); in visitVarDecl()
1182 if (!this->visit(Init)) in visitVarDecl()
1185 return this->emitSetLocal(*VarT, Offset, VD); in visitVarDecl()
1188 if (std::optional<unsigned> Offset = this->allocateLocal(VD)) { in visitVarDecl()
1190 return this->visitLocalInitializer(Init, *Offset); in visitVarDecl()
1208 // If the function is being compiled right now, this is a recursive call. in VisitCallExpr()
1222 // for this call. in VisitCallExpr()
1224 if (!this->emitGetPtrLocal(*LocalIndex, E)) in VisitCallExpr()
1231 if (!this->visit(Arg)) in VisitCallExpr()
1238 if (!this->emitCall(Func, E)) in VisitCallExpr()
1242 return this->emitPop(*T, E); in VisitCallExpr()
1255 // Get a This pointer on the stack. in VisitCXXMemberCallExpr()
1256 if (!this->visit(E->getImplicitObjectArgument())) in VisitCXXMemberCallExpr()
1265 return this->visit(E->getExpr()); in VisitCXXDefaultInitExpr()
1271 return this->visit(E->getExpr()); in VisitCXXDefaultArgExpr()
1280 return this->emitConstBool(E->getValue(), E); in VisitCXXBoolLiteralExpr()
1289 return this->emitNullPtr(E); in VisitCXXNullPtrLiteralExpr()
1296 return this->emitThis(E); in VisitCXXThisExpr()
1307 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1310 return DiscardResult ? this->emitIncPop(*T, E) : this->emitInc(*T, E); in VisitUnaryOperator()
1313 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1316 return DiscardResult ? this->emitDecPop(*T, E) : this->emitDec(*T, E); in VisitUnaryOperator()
1319 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1324 return this->emitIncPop(*T, E); in VisitUnaryOperator()
1326 this->emitLoad(*T, E); in VisitUnaryOperator()
1327 this->emitConst(1, E); in VisitUnaryOperator()
1328 this->emitAdd(*T, E); in VisitUnaryOperator()
1329 return this->emitStore(*T, E); in VisitUnaryOperator()
1332 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1337 return this->emitDecPop(*T, E); in VisitUnaryOperator()
1339 this->emitLoad(*T, E); in VisitUnaryOperator()
1340 this->emitConst(1, E); in VisitUnaryOperator()
1341 this->emitSub(*T, E); in VisitUnaryOperator()
1342 return this->emitStore(*T, E); in VisitUnaryOperator()
1345 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1348 return DiscardResult ? this->emitPop(*T, E) : this->emitInvBool(E); in VisitUnaryOperator()
1350 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1352 return DiscardResult ? this->emitPop(*T, E) : this->emitNeg(*T, E); in VisitUnaryOperator()
1354 if (!this->visit(SubExpr)) // noop in VisitUnaryOperator()
1356 return DiscardResult ? this->emitPop(*T, E) : true; in VisitUnaryOperator()
1359 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1361 return DiscardResult ? this->emitPop(*T, E) : true; in VisitUnaryOperator()
1369 [this, E](PrimType T) { in VisitUnaryOperator()
1370 return DiscardResult ? this->emitPop(T, E) : true; in VisitUnaryOperator()
1373 if (!this->visit(SubExpr)) in VisitUnaryOperator()
1375 return DiscardResult ? this->emitPop(*T, E) : this->emitComp(*T, E); in VisitUnaryOperator()
1399 return this->emitGetLocal(PT_Ptr, Offset, E); in VisitDeclRefExpr()
1400 return this->emitGetPtrLocal(Offset, E); in VisitDeclRefExpr()
1403 return this->emitGetGlobal(PT_Ptr, *GlobalIndex, E); in VisitDeclRefExpr()
1405 return this->emitGetPtrGlobal(*GlobalIndex, E); in VisitDeclRefExpr()
1407 if (auto It = this->Params.find(PVD); It != this->Params.end()) { in VisitDeclRefExpr()
1409 return this->emitGetParam(PT_Ptr, It->second, E); in VisitDeclRefExpr()
1410 return this->emitGetPtrParam(It->second, E); in VisitDeclRefExpr()
1413 return this->emitConst(ECD->getInitVal(), E); in VisitDeclRefExpr()