• Home
  • Raw
  • Download

Lines Matching full:arguments

33 static bool has_compile_time_constant_arguments(const ExpressionArray& arguments) {  in has_compile_time_constant_arguments()  argument
34 for (const std::unique_ptr<Expression>& arg : arguments) { in has_compile_time_constant_arguments()
83 // Takes up to two vector or scalar arguments and coalesces them in sequence: in coalesce_n_way_vector()
91 // If an argument is null, zero is passed to the coalesce function. If the arguments are a mix in coalesce_n_way_vector()
134 static std::unique_ptr<Expression> coalesce_vector(const IntrinsicArguments& arguments, in coalesce_vector() argument
139 SkASSERT(arguments[0]); in coalesce_vector()
140 SkASSERT(!arguments[1]); in coalesce_vector()
141 type_check_expression<T>(*arguments[0]); in coalesce_vector()
143 return coalesce_n_way_vector(arguments[0], /*arg1=*/nullptr, in coalesce_vector()
148 static std::unique_ptr<Expression> coalesce_pairwise_vectors(const IntrinsicArguments& arguments, in coalesce_pairwise_vectors() argument
153 SkASSERT(arguments[0]); in coalesce_pairwise_vectors()
154 SkASSERT(arguments[1]); in coalesce_pairwise_vectors()
155 SkASSERT(!arguments[2]); in coalesce_pairwise_vectors()
156 type_check_expression<T>(*arguments[0]); in coalesce_pairwise_vectors()
157 type_check_expression<T>(*arguments[1]); in coalesce_pairwise_vectors()
159 return coalesce_n_way_vector(arguments[0], arguments[1], in coalesce_pairwise_vectors()
166 const IntrinsicArguments& arguments, in optimize_comparison() argument
168 const Expression* left = arguments[0]; in optimize_comparison()
169 const Expression* right = arguments[1]; in optimize_comparison()
172 SkASSERT(!arguments[2]); in optimize_comparison()
201 // Takes up to three arguments and evaluates all of them, left-to-right, in tandem. in evaluate_n_way_intrinsic()
208 // If an argument is null, zero is passed to the evaluation function. If the arguments are a mix in evaluate_n_way_intrinsic()
250 const IntrinsicArguments& arguments, in evaluate_intrinsic() argument
253 SkASSERT(arguments[0]); in evaluate_intrinsic()
254 SkASSERT(!arguments[1]); in evaluate_intrinsic()
255 type_check_expression<T>(*arguments[0]); in evaluate_intrinsic()
257 return evaluate_n_way_intrinsic(context, arguments[0], /*arg1=*/nullptr, /*arg2=*/nullptr, in evaluate_intrinsic()
262 const IntrinsicArguments& arguments, in evaluate_intrinsic_numeric() argument
265 SkASSERT(arguments[0]); in evaluate_intrinsic_numeric()
266 SkASSERT(!arguments[1]); in evaluate_intrinsic_numeric()
267 const Type& type = arguments[0]->type().componentType(); in evaluate_intrinsic_numeric()
270 return evaluate_intrinsic<float>(context, arguments, returnType, eval); in evaluate_intrinsic_numeric()
273 return evaluate_intrinsic<SKSL_INT>(context, arguments, returnType, eval); in evaluate_intrinsic_numeric()
281 const IntrinsicArguments& arguments, in evaluate_pairwise_intrinsic() argument
284 SkASSERT(arguments[0]); in evaluate_pairwise_intrinsic()
285 SkASSERT(arguments[1]); in evaluate_pairwise_intrinsic()
286 SkASSERT(!arguments[2]); in evaluate_pairwise_intrinsic()
287 const Type& type = arguments[0]->type().componentType(); in evaluate_pairwise_intrinsic()
290 type_check_expression<float>(*arguments[0]); in evaluate_pairwise_intrinsic()
291 type_check_expression<float>(*arguments[1]); in evaluate_pairwise_intrinsic()
293 type_check_expression<SKSL_INT>(*arguments[0]); in evaluate_pairwise_intrinsic()
294 type_check_expression<SKSL_INT>(*arguments[1]); in evaluate_pairwise_intrinsic()
300 return evaluate_n_way_intrinsic(context, arguments[0], arguments[1], /*arg2=*/nullptr, in evaluate_pairwise_intrinsic()
305 const IntrinsicArguments& arguments, in evaluate_3_way_intrinsic() argument
308 SkASSERT(arguments[0]); in evaluate_3_way_intrinsic()
309 SkASSERT(arguments[1]); in evaluate_3_way_intrinsic()
310 SkASSERT(arguments[2]); in evaluate_3_way_intrinsic()
311 const Type& type = arguments[0]->type().componentType(); in evaluate_3_way_intrinsic()
314 type_check_expression<float>(*arguments[0]); in evaluate_3_way_intrinsic()
315 type_check_expression<float>(*arguments[1]); in evaluate_3_way_intrinsic()
316 type_check_expression<float>(*arguments[2]); in evaluate_3_way_intrinsic()
318 type_check_expression<SKSL_INT>(*arguments[0]); in evaluate_3_way_intrinsic()
319 type_check_expression<SKSL_INT>(*arguments[1]); in evaluate_3_way_intrinsic()
320 type_check_expression<SKSL_INT>(*arguments[2]); in evaluate_3_way_intrinsic()
326 return evaluate_n_way_intrinsic(context, arguments[0], arguments[1], arguments[2], in evaluate_3_way_intrinsic()
438 IntrinsicArguments arguments = {}; in optimize_intrinsic_call() local
439 SkASSERT(argArray.size() <= arguments.size()); in optimize_intrinsic_call()
441 arguments[index] = ConstantFolder::GetConstantValueForVariable(*argArray[index]); in optimize_intrinsic_call()
445 return *arguments[idx]->getConstantValue(col); in optimize_intrinsic_call()
452 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
455 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
458 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
461 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
464 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
467 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
470 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
473 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
476 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
479 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
483 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
486 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
490 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
494 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
497 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
501 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
504 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
507 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
510 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
513 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
516 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
519 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
523 return evaluate_intrinsic_numeric(context, arguments, returnType, in optimize_intrinsic_call()
526 return evaluate_intrinsic_numeric(context, arguments, returnType, in optimize_intrinsic_call()
529 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
532 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
535 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
538 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
541 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
544 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
547 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
550 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
553 if (arguments[2]->type().componentType().isBoolean()) { in optimize_intrinsic_call()
554 const SkSL::Type& numericType = arguments[0]->type().componentType(); in optimize_intrinsic_call()
557 type_check_expression<float>(*arguments[0]); in optimize_intrinsic_call()
558 type_check_expression<float>(*arguments[1]); in optimize_intrinsic_call()
560 type_check_expression<SKSL_INT>(*arguments[0]); in optimize_intrinsic_call()
561 type_check_expression<SKSL_INT>(*arguments[1]); in optimize_intrinsic_call()
563 type_check_expression<bool>(*arguments[0]); in optimize_intrinsic_call()
564 type_check_expression<bool>(*arguments[1]); in optimize_intrinsic_call()
569 return evaluate_n_way_intrinsic(context, arguments[0], arguments[1], arguments[2], in optimize_intrinsic_call()
572 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
576 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
579 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
582 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
586 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
589 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
592 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
595 return evaluate_intrinsic<SKSL_INT>(context, arguments, returnType, in optimize_intrinsic_call()
598 return evaluate_intrinsic<SKSL_INT>(context, arguments, returnType, in optimize_intrinsic_call()
610 SKSL_INT x = *arguments[0]->getConstantValue(0); in optimize_intrinsic_call()
616 return coalesce_vector<float>(arguments, /*startingState=*/0, returnType, in optimize_intrinsic_call()
620 return coalesce_pairwise_vectors<float>(arguments, /*startingState=*/0, returnType, in optimize_intrinsic_call()
624 return coalesce_pairwise_vectors<float>(arguments, /*startingState=*/0, returnType, in optimize_intrinsic_call()
630 SkASSERT(arguments[0]->type().columns() == 3); // the vec2 form is not a real intrinsic in optimize_intrinsic_call()
635 return assemble_compound(context, arguments[0]->fLine, returnType, vec); in optimize_intrinsic_call()
638 auto Vec = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
642 auto N = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
643 auto I = [&] { return DSLExpression{arguments[1]->clone()}; }; in optimize_intrinsic_call()
644 auto NRef = [&] { return DSLExpression{arguments[2]->clone()}; }; in optimize_intrinsic_call()
648 auto I = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
649 auto N = [&] { return DSLExpression{arguments[1]->clone()}; }; in optimize_intrinsic_call()
653 auto I = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
654 auto N = [&] { return DSLExpression{arguments[1]->clone()}; }; in optimize_intrinsic_call()
655 auto Eta = [&] { return DSLExpression{arguments[2]->clone()}; }; in optimize_intrinsic_call()
670 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
680 return assemble_compound(context, arguments[0]->fLine, returnType, mat); in optimize_intrinsic_call()
690 return assemble_compound(context, arguments[0]->fLine, returnType, mat); in optimize_intrinsic_call()
694 extract_matrix(arguments[0], mat); in optimize_intrinsic_call()
696 switch (arguments[0]->type().slotCount()) { in optimize_intrinsic_call()
707 SkDEBUGFAILF("unsupported type %s", arguments[0]->type().description().c_str()); in optimize_intrinsic_call()
710 return Literal::MakeFloat(arguments[0]->fLine, determinant, &returnType); in optimize_intrinsic_call()
714 extract_matrix(arguments[0], mat); in optimize_intrinsic_call()
715 switch (arguments[0]->type().slotCount()) { in optimize_intrinsic_call()
732 SkDEBUGFAILF("unsupported type %s", arguments[0]->type().description().c_str()); in optimize_intrinsic_call()
738 return assemble_compound(context, arguments[0]->fLine, returnType, dmat); in optimize_intrinsic_call()
742 return optimize_comparison(context, arguments, Intrinsics::compare_lessThan); in optimize_intrinsic_call()
745 return optimize_comparison(context, arguments, Intrinsics::compare_lessThanEqual); in optimize_intrinsic_call()
748 return optimize_comparison(context, arguments, Intrinsics::compare_greaterThan); in optimize_intrinsic_call()
751 return optimize_comparison(context, arguments, Intrinsics::compare_greaterThanEqual); in optimize_intrinsic_call()
754 return optimize_comparison(context, arguments, Intrinsics::compare_equal); in optimize_intrinsic_call()
757 return optimize_comparison(context, arguments, Intrinsics::compare_notEqual); in optimize_intrinsic_call()
760 return coalesce_vector<bool>(arguments, /*startingState=*/false, returnType, in optimize_intrinsic_call()
764 return coalesce_vector<bool>(arguments, /*startingState=*/true, returnType, in optimize_intrinsic_call()
768 return evaluate_intrinsic<bool>(context, arguments, returnType, in optimize_intrinsic_call()
780 for (const auto& arg : this->arguments()) { in hasProperty()
790 cloned.reserve_back(this->arguments().size()); in clone()
791 for (const std::unique_ptr<Expression>& arg : this->arguments()) { in clone()
801 for (const std::unique_ptr<Expression>& arg : this->arguments()) { in description()
811 * Determines the cost of coercing the arguments of a function to the required types. Cost has no
816 const ExpressionArray& arguments){ in CallCost() argument
821 if (function.parameters().size() != arguments.size()) { in CallCost()
826 if (!function.determineFinalTypes(arguments, &types, &ignored)) { in CallCost()
830 for (size_t i = 0; i < arguments.size(); i++) { in CallCost()
831 total = total + arguments[i]->coercionCost(*types[i]); in CallCost()
839 const ExpressionArray& arguments) { in FindBestFunctionForCall() argument
846 CoercionCost cost = CallCost(context, *f, arguments); in FindBestFunctionForCall()
858 ExpressionArray arguments) { in Convert() argument
864 std::move(arguments)); in Convert()
868 if (count != (int) arguments.size()) { in Convert()
871 " arguments, but found " + to_string((int)arguments.size())); in Convert()
879 arguments[i] = types[i]->coerceExpression(std::move(arguments[i]), context); in Convert()
880 if (!arguments[i]) { in Convert()
884 return std::make_unique<ExternalFunctionCall>(line, &f, std::move(arguments)); in Convert()
890 arguments); in Convert()
892 return FunctionCall::Convert(context, line, *best, std::move(arguments)); in Convert()
896 for (size_t i = 0; i < arguments.size(); i++) { in Convert()
899 msg += arguments[i]->type().displayName(); in Convert()
907 arguments.push_back(std::move(ref.self())); in Convert()
911 arguments); in Convert()
913 return FunctionCall::Convert(context, line, *best, std::move(arguments)); in Convert()
915 String msg = "no match for " + arguments.back()->type().displayName() + in Convert()
918 for (size_t i = 0; i < arguments.size() - 1; i++) { in Convert()
921 msg += arguments[i]->type().displayName(); in Convert()
938 ExpressionArray arguments) { in Convert() argument
945 // Reject function calls with the wrong number of arguments. in Convert()
946 if (function.parameters().size() != arguments.size()) { in Convert()
952 msg += ", but found " + to_string(arguments.count()); in Convert()
960 if (!function.determineFinalTypes(arguments, &types, &returnType)) { in Convert()
963 for (const std::unique_ptr<Expression>& arg : arguments) { in Convert()
973 for (size_t i = 0; i < arguments.size(); i++) { in Convert()
975 arguments[i] = types[i]->coerceExpression(std::move(arguments[i]), context); in Convert()
976 if (!arguments[i]) { in Convert()
985 if (!Analysis::UpdateVariableRefKind(arguments[i].get(), refKind, context.fErrors)) { in Convert()
994 const Variable& child = *arguments.back()->as<VariableReference>().variable(); in Convert()
995 arguments.pop_back(); in Convert()
996 return ChildCall::Make(context, line, returnType, child, std::move(arguments)); in Convert()
999 return Make(context, line, returnType, function, std::move(arguments)); in Convert()
1006 ExpressionArray arguments) { in Make() argument
1007 SkASSERT(function.parameters().size() == arguments.size()); in Make()
1010 if (function.isIntrinsic() && has_compile_time_constant_arguments(arguments)) { in Make()
1014 arguments, in Make()
1020 return std::make_unique<FunctionCall>(line, returnType, &function, std::move(arguments)); in Make()