LCOV - code coverage report
Current view: top level - out/Release/gen/torque-generated - builtins-regexp-replace-from-dsl-gen.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 179 179 100.0 %
Date: 2019-04-17 Functions: 6 6 100.0 %

          Line data    Source code
       1             : #include "src/builtins/builtins-utils-gen.h"
       2             : #include "src/builtins/builtins.h"
       3             : #include "src/code-factory.h"
       4             : #include "src/elements-kind.h"
       5             : #include "src/heap/factory-inl.h"
       6             : #include "src/objects.h"
       7             : #include "src/objects/arguments.h"
       8             : #include "src/objects/bigint.h"
       9             : #include "src/objects/free-space.h"
      10             : #include "src/objects/js-generator.h"
      11             : #include "src/objects/js-promise.h"
      12             : #include "src/objects/js-regexp-string-iterator.h"
      13             : #include "src/objects/module.h"
      14             : #include "src/objects/stack-frame-info.h"
      15             : #include "src/builtins/builtins-regexp-gen.h"
      16             : #include "src/builtins/builtins-array-gen.h"
      17             : #include "src/builtins/builtins-collections-gen.h"
      18             : #include "src/builtins/builtins-data-view-gen.h"
      19             : #include "src/builtins/builtins-iterator-gen.h"
      20             : #include "src/builtins/builtins-proxy-gen.h"
      21             : #include "src/builtins/builtins-proxy-gen.h"
      22             : #include "src/builtins/builtins-proxy-gen.h"
      23             : #include "src/builtins/builtins-proxy-gen.h"
      24             : #include "src/builtins/builtins-regexp-gen.h"
      25             : #include "src/builtins/builtins-regexp-gen.h"
      26             : #include "src/builtins/builtins-regexp-gen.h"
      27             : #include "src/builtins/builtins-typed-array-gen.h"
      28             : #include "src/builtins/builtins-constructor-gen.h"
      29             : #include "src/builtins/builtins-typed-array-gen.h"
      30             : #include "src/builtins/builtins-typed-array-gen.h"
      31             : #include "src/builtins/builtins-typed-array-gen.h"
      32             : #include "src/builtins/builtins-typed-array-gen.h"
      33             : #include "src/builtins/builtins-typed-array-gen.h"
      34             : #include "src/builtins/builtins-typed-array-gen.h"
      35             : #include "src/builtins/builtins-typed-array-gen.h"
      36             : #include "src/builtins/builtins-typed-array-gen.h"
      37             : #include "torque-generated/builtins-base-from-dsl-gen.h"
      38             : #include "torque-generated/builtins-growable-fixed-array-from-dsl-gen.h"
      39             : #include "torque-generated/builtins-arguments-from-dsl-gen.h"
      40             : #include "torque-generated/builtins-array-from-dsl-gen.h"
      41             : #include "torque-generated/builtins-array-copywithin-from-dsl-gen.h"
      42             : #include "torque-generated/builtins-array-filter-from-dsl-gen.h"
      43             : #include "torque-generated/builtins-array-find-from-dsl-gen.h"
      44             : #include "torque-generated/builtins-array-findindex-from-dsl-gen.h"
      45             : #include "torque-generated/builtins-array-foreach-from-dsl-gen.h"
      46             : #include "torque-generated/builtins-array-join-from-dsl-gen.h"
      47             : #include "torque-generated/builtins-array-lastindexof-from-dsl-gen.h"
      48             : #include "torque-generated/builtins-array-of-from-dsl-gen.h"
      49             : #include "torque-generated/builtins-array-map-from-dsl-gen.h"
      50             : #include "torque-generated/builtins-array-reverse-from-dsl-gen.h"
      51             : #include "torque-generated/builtins-array-shift-from-dsl-gen.h"
      52             : #include "torque-generated/builtins-array-slice-from-dsl-gen.h"
      53             : #include "torque-generated/builtins-array-splice-from-dsl-gen.h"
      54             : #include "torque-generated/builtins-array-unshift-from-dsl-gen.h"
      55             : #include "torque-generated/builtins-collections-from-dsl-gen.h"
      56             : #include "torque-generated/builtins-data-view-from-dsl-gen.h"
      57             : #include "torque-generated/builtins-extras-utils-from-dsl-gen.h"
      58             : #include "torque-generated/builtins-iterator-from-dsl-gen.h"
      59             : #include "torque-generated/builtins-object-from-dsl-gen.h"
      60             : #include "torque-generated/builtins-proxy-from-dsl-gen.h"
      61             : #include "torque-generated/builtins-regexp-from-dsl-gen.h"
      62             : #include "torque-generated/builtins-regexp-replace-from-dsl-gen.h"
      63             : #include "torque-generated/builtins-string-from-dsl-gen.h"
      64             : #include "torque-generated/builtins-string-html-from-dsl-gen.h"
      65             : #include "torque-generated/builtins-string-repeat-from-dsl-gen.h"
      66             : #include "torque-generated/builtins-typed-array-from-dsl-gen.h"
      67             : #include "torque-generated/builtins-typed-array-createtypedarray-from-dsl-gen.h"
      68             : #include "torque-generated/builtins-typed-array-every-from-dsl-gen.h"
      69             : #include "torque-generated/builtins-typed-array-filter-from-dsl-gen.h"
      70             : #include "torque-generated/builtins-typed-array-find-from-dsl-gen.h"
      71             : #include "torque-generated/builtins-typed-array-findindex-from-dsl-gen.h"
      72             : #include "torque-generated/builtins-typed-array-foreach-from-dsl-gen.h"
      73             : #include "torque-generated/builtins-typed-array-reduce-from-dsl-gen.h"
      74             : #include "torque-generated/builtins-typed-array-reduceright-from-dsl-gen.h"
      75             : #include "torque-generated/builtins-typed-array-slice-from-dsl-gen.h"
      76             : #include "torque-generated/builtins-typed-array-some-from-dsl-gen.h"
      77             : #include "torque-generated/builtins-typed-array-subarray-from-dsl-gen.h"
      78             : #include "torque-generated/builtins-test-from-dsl-gen.h"
      79             : 
      80             : namespace v8 {
      81             : namespace internal {
      82             : 
      83          56 : compiler::TNode<String> RegexpReplaceBuiltinsFromDSLAssembler::RegExpReplaceFastString(compiler::TNode<Context> p_context, compiler::TNode<JSRegExp> p_regexp, compiler::TNode<String> p_string, compiler::TNode<String> p_replaceString) {
      84          56 :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      85             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      86             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      87             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      88             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      89             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, JSRegExp, String> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      90             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, JSRegExp, String, RegExpMatchInfo> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      91             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      92             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      93             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      94             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      95             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      96             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      97             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block15(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      98             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block16(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
      99             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     100             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     101             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String> block17(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     102             :     ca_.Goto(&block0, p_context, p_regexp, p_string, p_replaceString);
     103             : 
     104          56 :   if (block0.is_used()) {
     105             :     compiler::TNode<Context> tmp0;
     106             :     compiler::TNode<JSRegExp> tmp1;
     107             :     compiler::TNode<String> tmp2;
     108             :     compiler::TNode<String> tmp3;
     109             :     ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3);
     110          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 36);
     111             :     compiler::TNode<String> tmp4;
     112             :     USE(tmp4);
     113         168 :     tmp4 = BaseBuiltinsFromDSLAssembler(state_).kEmptyString();
     114          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 37);
     115             :     compiler::TNode<Smi> tmp5;
     116             :     USE(tmp5);
     117         168 :     tmp5 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
     118          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 38);
     119             :     compiler::TNode<BoolT> tmp6;
     120             :     USE(tmp6);
     121         168 :     tmp6 = ca_.UncheckedCast<BoolT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr6ATbool16ATconstexpr_bool(false));
     122          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 39);
     123             :     compiler::TNode<Smi> tmp7;
     124             :     USE(tmp7);
     125         168 :     tmp7 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp3}));
     126          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 40);
     127             :     compiler::TNode<BoolT> tmp8;
     128             :     USE(tmp8);
     129         112 :     tmp8 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).FastFlagGetterGlobal(compiler::TNode<JSRegExp>{tmp1}));
     130          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 42);
     131          56 :     ca_.Branch(tmp8, &block2, &block3, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8);
     132             :   }
     133             : 
     134          56 :   if (block2.is_used()) {
     135             :     compiler::TNode<Context> tmp9;
     136             :     compiler::TNode<JSRegExp> tmp10;
     137             :     compiler::TNode<String> tmp11;
     138             :     compiler::TNode<String> tmp12;
     139             :     compiler::TNode<String> tmp13;
     140             :     compiler::TNode<Smi> tmp14;
     141             :     compiler::TNode<BoolT> tmp15;
     142             :     compiler::TNode<Smi> tmp16;
     143             :     compiler::TNode<BoolT> tmp17;
     144             :     ca_.Bind(&block2, &tmp9, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15, &tmp16, &tmp17);
     145          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 43);
     146             :     compiler::TNode<BoolT> tmp18;
     147             :     USE(tmp18);
     148         112 :     tmp18 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).FastFlagGetterUnicode(compiler::TNode<JSRegExp>{tmp10}));
     149          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 44);
     150             :     compiler::TNode<Smi> tmp19;
     151             :     USE(tmp19);
     152         168 :     tmp19 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
     153         168 :     RegExpBuiltinsAssembler(state_).FastStoreLastIndex(compiler::TNode<JSRegExp>{tmp10}, compiler::TNode<Smi>{tmp19});
     154          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 42);
     155             :     ca_.Goto(&block3, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp18, tmp16, tmp17);
     156             :   }
     157             : 
     158          56 :   if (block3.is_used()) {
     159             :     compiler::TNode<Context> tmp20;
     160             :     compiler::TNode<JSRegExp> tmp21;
     161             :     compiler::TNode<String> tmp22;
     162             :     compiler::TNode<String> tmp23;
     163             :     compiler::TNode<String> tmp24;
     164             :     compiler::TNode<Smi> tmp25;
     165             :     compiler::TNode<BoolT> tmp26;
     166             :     compiler::TNode<Smi> tmp27;
     167             :     compiler::TNode<BoolT> tmp28;
     168             :     ca_.Bind(&block3, &tmp20, &tmp21, &tmp22, &tmp23, &tmp24, &tmp25, &tmp26, &tmp27, &tmp28);
     169          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 47);
     170             :     ca_.Goto(&block6, tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27, tmp28);
     171             :   }
     172             : 
     173          56 :   if (block6.is_used()) {
     174             :     compiler::TNode<Context> tmp29;
     175             :     compiler::TNode<JSRegExp> tmp30;
     176             :     compiler::TNode<String> tmp31;
     177             :     compiler::TNode<String> tmp32;
     178             :     compiler::TNode<String> tmp33;
     179             :     compiler::TNode<Smi> tmp34;
     180             :     compiler::TNode<BoolT> tmp35;
     181             :     compiler::TNode<Smi> tmp36;
     182             :     compiler::TNode<BoolT> tmp37;
     183             :     ca_.Bind(&block6, &tmp29, &tmp30, &tmp31, &tmp32, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37);
     184             :     compiler::TNode<BoolT> tmp38;
     185             :     USE(tmp38);
     186         168 :     tmp38 = ca_.UncheckedCast<BoolT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr6ATbool16ATconstexpr_bool(true));
     187          56 :     ca_.Branch(tmp38, &block4, &block5, tmp29, tmp30, tmp31, tmp32, tmp33, tmp34, tmp35, tmp36, tmp37);
     188             :   }
     189             : 
     190          56 :   if (block4.is_used()) {
     191             :     compiler::TNode<Context> tmp39;
     192             :     compiler::TNode<JSRegExp> tmp40;
     193             :     compiler::TNode<String> tmp41;
     194             :     compiler::TNode<String> tmp42;
     195             :     compiler::TNode<String> tmp43;
     196             :     compiler::TNode<Smi> tmp44;
     197             :     compiler::TNode<BoolT> tmp45;
     198             :     compiler::TNode<Smi> tmp46;
     199             :     compiler::TNode<BoolT> tmp47;
     200             :     ca_.Bind(&block4, &tmp39, &tmp40, &tmp41, &tmp42, &tmp43, &tmp44, &tmp45, &tmp46, &tmp47);
     201          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 49);
     202          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 48);
     203             :     compiler::TNode<RegExpMatchInfo> tmp48;
     204             :     USE(tmp48);
     205          56 :     compiler::CodeAssemblerLabel label0(&ca_);
     206         168 :     tmp48 = RegExpBuiltinsAssembler(state_).RegExpPrototypeExecBodyWithoutResultFast(compiler::TNode<Context>{tmp39}, compiler::TNode<JSReceiver>{tmp40}, compiler::TNode<String>{tmp41}, &label0);
     207             :     ca_.Goto(&block9, tmp39, tmp40, tmp41, tmp42, tmp43, tmp44, tmp45, tmp46, tmp47, tmp40, tmp41, tmp48);
     208          56 :     if (label0.is_used()) {
     209          56 :       ca_.Bind(&label0);
     210             :       ca_.Goto(&block10, tmp39, tmp40, tmp41, tmp42, tmp43, tmp44, tmp45, tmp46, tmp47, tmp40, tmp41);
     211             :     }
     212             :   }
     213             : 
     214          56 :   if (block10.is_used()) {
     215             :     compiler::TNode<Context> tmp49;
     216             :     compiler::TNode<JSRegExp> tmp50;
     217             :     compiler::TNode<String> tmp51;
     218             :     compiler::TNode<String> tmp52;
     219             :     compiler::TNode<String> tmp53;
     220             :     compiler::TNode<Smi> tmp54;
     221             :     compiler::TNode<BoolT> tmp55;
     222             :     compiler::TNode<Smi> tmp56;
     223             :     compiler::TNode<BoolT> tmp57;
     224             :     compiler::TNode<JSRegExp> tmp58;
     225             :     compiler::TNode<String> tmp59;
     226             :     ca_.Bind(&block10, &tmp49, &tmp50, &tmp51, &tmp52, &tmp53, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59);
     227             :     ca_.Goto(&block8, tmp49, tmp50, tmp51, tmp52, tmp53, tmp54, tmp55, tmp56, tmp57);
     228             :   }
     229             : 
     230          56 :   if (block9.is_used()) {
     231             :     compiler::TNode<Context> tmp60;
     232             :     compiler::TNode<JSRegExp> tmp61;
     233             :     compiler::TNode<String> tmp62;
     234             :     compiler::TNode<String> tmp63;
     235             :     compiler::TNode<String> tmp64;
     236             :     compiler::TNode<Smi> tmp65;
     237             :     compiler::TNode<BoolT> tmp66;
     238             :     compiler::TNode<Smi> tmp67;
     239             :     compiler::TNode<BoolT> tmp68;
     240             :     compiler::TNode<JSRegExp> tmp69;
     241             :     compiler::TNode<String> tmp70;
     242             :     compiler::TNode<RegExpMatchInfo> tmp71;
     243             :     ca_.Bind(&block9, &tmp60, &tmp61, &tmp62, &tmp63, &tmp64, &tmp65, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71);
     244             :     ca_.Goto(&block7, tmp60, tmp61, tmp62, tmp63, tmp64, tmp65, tmp66, tmp67, tmp68, tmp71);
     245             :   }
     246             : 
     247          56 :   if (block8.is_used()) {
     248             :     compiler::TNode<Context> tmp72;
     249             :     compiler::TNode<JSRegExp> tmp73;
     250             :     compiler::TNode<String> tmp74;
     251             :     compiler::TNode<String> tmp75;
     252             :     compiler::TNode<String> tmp76;
     253             :     compiler::TNode<Smi> tmp77;
     254             :     compiler::TNode<BoolT> tmp78;
     255             :     compiler::TNode<Smi> tmp79;
     256             :     compiler::TNode<BoolT> tmp80;
     257             :     ca_.Bind(&block8, &tmp72, &tmp73, &tmp74, &tmp75, &tmp76, &tmp77, &tmp78, &tmp79, &tmp80);
     258          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 49);
     259             :     ca_.Goto(&block5, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77, tmp78, tmp79, tmp80);
     260             :   }
     261             : 
     262          56 :   if (block7.is_used()) {
     263             :     compiler::TNode<Context> tmp81;
     264             :     compiler::TNode<JSRegExp> tmp82;
     265             :     compiler::TNode<String> tmp83;
     266             :     compiler::TNode<String> tmp84;
     267             :     compiler::TNode<String> tmp85;
     268             :     compiler::TNode<Smi> tmp86;
     269             :     compiler::TNode<BoolT> tmp87;
     270             :     compiler::TNode<Smi> tmp88;
     271             :     compiler::TNode<BoolT> tmp89;
     272             :     compiler::TNode<RegExpMatchInfo> tmp90;
     273             :     ca_.Bind(&block7, &tmp81, &tmp82, &tmp83, &tmp84, &tmp85, &tmp86, &tmp87, &tmp88, &tmp89, &tmp90);
     274          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 48);
     275          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 50);
     276             :     compiler::TNode<Smi> tmp91;
     277             :     USE(tmp91);
     278         168 :     tmp91 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_)._method_RegExpMatchInfo_GetStartOfCapture(compiler::TNode<Context>{tmp81}, compiler::TNode<RegExpMatchInfo>{tmp90}, 0));
     279          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 51);
     280             :     compiler::TNode<Smi> tmp92;
     281             :     USE(tmp92);
     282         168 :     tmp92 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_)._method_RegExpMatchInfo_GetEndOfCapture(compiler::TNode<Context>{tmp81}, compiler::TNode<RegExpMatchInfo>{tmp90}, 0));
     283          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 55);
     284             :     compiler::TNode<String> tmp93;
     285         112 :     tmp93 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kSubString, tmp81, tmp83, tmp86, tmp91));
     286             :     USE(tmp93);
     287             :     compiler::TNode<String> tmp94;
     288             :     USE(tmp94);
     289         168 :     tmp94 = ca_.UncheckedCast<String>(BaseBuiltinsFromDSLAssembler(state_).StringAdd(compiler::TNode<Context>{tmp81}, compiler::TNode<String>{tmp85}, compiler::TNode<String>{tmp93}));
     290          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 56);
     291          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 58);
     292             :     compiler::TNode<Smi> tmp95;
     293             :     USE(tmp95);
     294         168 :     tmp95 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
     295             :     compiler::TNode<BoolT> tmp96;
     296             :     USE(tmp96);
     297         112 :     tmp96 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiNotEqual(compiler::TNode<Smi>{tmp88}, compiler::TNode<Smi>{tmp95}));
     298          56 :     ca_.Branch(tmp96, &block11, &block12, tmp81, tmp82, tmp83, tmp84, tmp94, tmp92, tmp87, tmp88, tmp89, tmp90, tmp91, tmp92);
     299             :   }
     300             : 
     301          56 :   if (block11.is_used()) {
     302             :     compiler::TNode<Context> tmp97;
     303             :     compiler::TNode<JSRegExp> tmp98;
     304             :     compiler::TNode<String> tmp99;
     305             :     compiler::TNode<String> tmp100;
     306             :     compiler::TNode<String> tmp101;
     307             :     compiler::TNode<Smi> tmp102;
     308             :     compiler::TNode<BoolT> tmp103;
     309             :     compiler::TNode<Smi> tmp104;
     310             :     compiler::TNode<BoolT> tmp105;
     311             :     compiler::TNode<RegExpMatchInfo> tmp106;
     312             :     compiler::TNode<Smi> tmp107;
     313             :     compiler::TNode<Smi> tmp108;
     314             :     ca_.Bind(&block11, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103, &tmp104, &tmp105, &tmp106, &tmp107, &tmp108);
     315             :     compiler::TNode<String> tmp109;
     316             :     USE(tmp109);
     317         168 :     tmp109 = ca_.UncheckedCast<String>(BaseBuiltinsFromDSLAssembler(state_).StringAdd(compiler::TNode<Context>{tmp97}, compiler::TNode<String>{tmp101}, compiler::TNode<String>{tmp100}));
     318             :     ca_.Goto(&block12, tmp97, tmp98, tmp99, tmp100, tmp109, tmp102, tmp103, tmp104, tmp105, tmp106, tmp107, tmp108);
     319             :   }
     320             : 
     321          56 :   if (block12.is_used()) {
     322             :     compiler::TNode<Context> tmp110;
     323             :     compiler::TNode<JSRegExp> tmp111;
     324             :     compiler::TNode<String> tmp112;
     325             :     compiler::TNode<String> tmp113;
     326             :     compiler::TNode<String> tmp114;
     327             :     compiler::TNode<Smi> tmp115;
     328             :     compiler::TNode<BoolT> tmp116;
     329             :     compiler::TNode<Smi> tmp117;
     330             :     compiler::TNode<BoolT> tmp118;
     331             :     compiler::TNode<RegExpMatchInfo> tmp119;
     332             :     compiler::TNode<Smi> tmp120;
     333             :     compiler::TNode<Smi> tmp121;
     334             :     ca_.Bind(&block12, &tmp110, &tmp111, &tmp112, &tmp113, &tmp114, &tmp115, &tmp116, &tmp117, &tmp118, &tmp119, &tmp120, &tmp121);
     335          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 61);
     336             :     compiler::TNode<BoolT> tmp122;
     337             :     USE(tmp122);
     338         168 :     tmp122 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).Word32BinaryNot(compiler::TNode<BoolT>{tmp118}));
     339          56 :     ca_.Branch(tmp122, &block13, &block14, tmp110, tmp111, tmp112, tmp113, tmp114, tmp115, tmp116, tmp117, tmp118, tmp119, tmp120, tmp121);
     340             :   }
     341             : 
     342          56 :   if (block13.is_used()) {
     343             :     compiler::TNode<Context> tmp123;
     344             :     compiler::TNode<JSRegExp> tmp124;
     345             :     compiler::TNode<String> tmp125;
     346             :     compiler::TNode<String> tmp126;
     347             :     compiler::TNode<String> tmp127;
     348             :     compiler::TNode<Smi> tmp128;
     349             :     compiler::TNode<BoolT> tmp129;
     350             :     compiler::TNode<Smi> tmp130;
     351             :     compiler::TNode<BoolT> tmp131;
     352             :     compiler::TNode<RegExpMatchInfo> tmp132;
     353             :     compiler::TNode<Smi> tmp133;
     354             :     compiler::TNode<Smi> tmp134;
     355             :     ca_.Bind(&block13, &tmp123, &tmp124, &tmp125, &tmp126, &tmp127, &tmp128, &tmp129, &tmp130, &tmp131, &tmp132, &tmp133, &tmp134);
     356             :     ca_.Goto(&block5, tmp123, tmp124, tmp125, tmp126, tmp127, tmp128, tmp129, tmp130, tmp131);
     357             :   }
     358             : 
     359          56 :   if (block14.is_used()) {
     360             :     compiler::TNode<Context> tmp135;
     361             :     compiler::TNode<JSRegExp> tmp136;
     362             :     compiler::TNode<String> tmp137;
     363             :     compiler::TNode<String> tmp138;
     364             :     compiler::TNode<String> tmp139;
     365             :     compiler::TNode<Smi> tmp140;
     366             :     compiler::TNode<BoolT> tmp141;
     367             :     compiler::TNode<Smi> tmp142;
     368             :     compiler::TNode<BoolT> tmp143;
     369             :     compiler::TNode<RegExpMatchInfo> tmp144;
     370             :     compiler::TNode<Smi> tmp145;
     371             :     compiler::TNode<Smi> tmp146;
     372             :     ca_.Bind(&block14, &tmp135, &tmp136, &tmp137, &tmp138, &tmp139, &tmp140, &tmp141, &tmp142, &tmp143, &tmp144, &tmp145, &tmp146);
     373          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 64);
     374             :     compiler::TNode<BoolT> tmp147;
     375             :     USE(tmp147);
     376         112 :     tmp147 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiEqual(compiler::TNode<Smi>{tmp146}, compiler::TNode<Smi>{tmp145}));
     377          56 :     ca_.Branch(tmp147, &block15, &block16, tmp135, tmp136, tmp137, tmp138, tmp139, tmp140, tmp141, tmp142, tmp143, tmp144, tmp145, tmp146);
     378             :   }
     379             : 
     380          56 :   if (block15.is_used()) {
     381             :     compiler::TNode<Context> tmp148;
     382             :     compiler::TNode<JSRegExp> tmp149;
     383             :     compiler::TNode<String> tmp150;
     384             :     compiler::TNode<String> tmp151;
     385             :     compiler::TNode<String> tmp152;
     386             :     compiler::TNode<Smi> tmp153;
     387             :     compiler::TNode<BoolT> tmp154;
     388             :     compiler::TNode<Smi> tmp155;
     389             :     compiler::TNode<BoolT> tmp156;
     390             :     compiler::TNode<RegExpMatchInfo> tmp157;
     391             :     compiler::TNode<Smi> tmp158;
     392             :     compiler::TNode<Smi> tmp159;
     393             :     ca_.Bind(&block15, &tmp148, &tmp149, &tmp150, &tmp151, &tmp152, &tmp153, &tmp154, &tmp155, &tmp156, &tmp157, &tmp158, &tmp159);
     394          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 65);
     395          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 66);
     396             :     compiler::TNode<Smi> tmp160;
     397             :     USE(tmp160);
     398         168 :     tmp160 = ca_.UncheckedCast<Smi>(RegExpBuiltinsAssembler(state_).FastLoadLastIndex(compiler::TNode<JSRegExp>{tmp149}));
     399             :     compiler::TNode<Smi> tmp161;
     400             :     USE(tmp161);
     401         112 :     tmp161 = ca_.UncheckedCast<Smi>(RegExpBuiltinsAssembler(state_).AdvanceStringIndexFast(compiler::TNode<String>{tmp150}, compiler::TNode<Number>{tmp160}, compiler::TNode<BoolT>{tmp154}));
     402          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 65);
     403         168 :     RegExpBuiltinsAssembler(state_).FastStoreLastIndex(compiler::TNode<JSRegExp>{tmp149}, compiler::TNode<Smi>{tmp161});
     404          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 64);
     405             :     ca_.Goto(&block16, tmp148, tmp149, tmp150, tmp151, tmp152, tmp153, tmp154, tmp155, tmp156, tmp157, tmp158, tmp159);
     406             :   }
     407             : 
     408          56 :   if (block16.is_used()) {
     409             :     compiler::TNode<Context> tmp162;
     410             :     compiler::TNode<JSRegExp> tmp163;
     411             :     compiler::TNode<String> tmp164;
     412             :     compiler::TNode<String> tmp165;
     413             :     compiler::TNode<String> tmp166;
     414             :     compiler::TNode<Smi> tmp167;
     415             :     compiler::TNode<BoolT> tmp168;
     416             :     compiler::TNode<Smi> tmp169;
     417             :     compiler::TNode<BoolT> tmp170;
     418             :     compiler::TNode<RegExpMatchInfo> tmp171;
     419             :     compiler::TNode<Smi> tmp172;
     420             :     compiler::TNode<Smi> tmp173;
     421             :     ca_.Bind(&block16, &tmp162, &tmp163, &tmp164, &tmp165, &tmp166, &tmp167, &tmp168, &tmp169, &tmp170, &tmp171, &tmp172, &tmp173);
     422          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 47);
     423             :     ca_.Goto(&block6, tmp162, tmp163, tmp164, tmp165, tmp166, tmp167, tmp168, tmp169, tmp170);
     424             :   }
     425             : 
     426          56 :   if (block5.is_used()) {
     427             :     compiler::TNode<Context> tmp174;
     428             :     compiler::TNode<JSRegExp> tmp175;
     429             :     compiler::TNode<String> tmp176;
     430             :     compiler::TNode<String> tmp177;
     431             :     compiler::TNode<String> tmp178;
     432             :     compiler::TNode<Smi> tmp179;
     433             :     compiler::TNode<BoolT> tmp180;
     434             :     compiler::TNode<Smi> tmp181;
     435             :     compiler::TNode<BoolT> tmp182;
     436             :     ca_.Bind(&block5, &tmp174, &tmp175, &tmp176, &tmp177, &tmp178, &tmp179, &tmp180, &tmp181, &tmp182);
     437          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 70);
     438             :     compiler::TNode<Smi> tmp183;
     439             :     USE(tmp183);
     440         168 :     tmp183 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp176}));
     441             :     compiler::TNode<String> tmp184;
     442         112 :     tmp184 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kSubString, tmp174, tmp176, tmp179, tmp183));
     443             :     USE(tmp184);
     444             :     compiler::TNode<String> tmp185;
     445             :     USE(tmp185);
     446         168 :     tmp185 = ca_.UncheckedCast<String>(BaseBuiltinsFromDSLAssembler(state_).StringAdd(compiler::TNode<Context>{tmp174}, compiler::TNode<String>{tmp178}, compiler::TNode<String>{tmp184}));
     447             :     ca_.Goto(&block1, tmp174, tmp175, tmp176, tmp177, tmp185);
     448             :   }
     449             : 
     450          56 :   if (block1.is_used()) {
     451             :     compiler::TNode<Context> tmp186;
     452             :     compiler::TNode<JSRegExp> tmp187;
     453             :     compiler::TNode<String> tmp188;
     454             :     compiler::TNode<String> tmp189;
     455             :     compiler::TNode<String> tmp190;
     456             :     ca_.Bind(&block1, &tmp186, &tmp187, &tmp188, &tmp189, &tmp190);
     457          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 31);
     458             :     ca_.Goto(&block17, tmp186, tmp187, tmp188, tmp189, tmp190);
     459             :   }
     460             : 
     461             :     compiler::TNode<Context> tmp191;
     462             :     compiler::TNode<JSRegExp> tmp192;
     463             :     compiler::TNode<String> tmp193;
     464             :     compiler::TNode<String> tmp194;
     465             :     compiler::TNode<String> tmp195;
     466             :     ca_.Bind(&block17, &tmp191, &tmp192, &tmp193, &tmp194, &tmp195);
     467         112 :   return compiler::TNode<String>{tmp195};
     468             : }
     469             : 
     470         224 : TF_BUILTIN(RegExpReplace, CodeStubAssembler) {
     471          56 :   compiler::CodeAssemblerState* state_ = state();  compiler::CodeAssembler ca_(state());
     472             :   TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
     473             :   USE(parameter0);
     474             :   compiler::TNode<JSRegExp> parameter1 = UncheckedCast<JSRegExp>(Parameter(Descriptor::kRegexp));
     475             :   USE(parameter1);
     476             :   compiler::TNode<String> parameter2 = UncheckedCast<String>(Parameter(Descriptor::kString));
     477             :   USE(parameter2);
     478             :   compiler::TNode<Object> parameter3 = UncheckedCast<Object>(Parameter(Descriptor::kReplaceValue));
     479             :   USE(parameter3);
     480             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     481             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     482             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSReceiver> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     483             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     484             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     485             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver, String> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     486             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver, String> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     487             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     488             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     489             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp, JSRegExp> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     490             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     491             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     492             :   compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String> block10(&ca_, compiler::CodeAssemblerLabel::kDeferred);
     493             :     ca_.Goto(&block0, parameter0, parameter1, parameter2, parameter3);
     494             : 
     495          56 :   if (block0.is_used()) {
     496             :     compiler::TNode<Context> tmp0;
     497             :     compiler::TNode<JSRegExp> tmp1;
     498             :     compiler::TNode<String> tmp2;
     499             :     compiler::TNode<Object> tmp3;
     500             :     ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3);
     501          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 80);
     502          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 81);
     503             :     compiler::TNode<JSReceiver> tmp4;
     504             :     USE(tmp4);
     505          56 :     compiler::CodeAssemblerLabel label0(&ca_);
     506         112 :     tmp4 = BaseBuiltinsFromDSLAssembler(state_).Cast39UT15JSBoundFunction10JSFunction7JSProxy(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp3}, &label0);
     507             :     ca_.Goto(&block3, tmp0, tmp1, tmp2, tmp3, tmp3, tmp3, tmp4);
     508          56 :     if (label0.is_used()) {
     509          56 :       ca_.Bind(&label0);
     510             :       ca_.Goto(&block4, tmp0, tmp1, tmp2, tmp3, tmp3, tmp3);
     511             :     }
     512             :   }
     513             : 
     514          56 :   if (block4.is_used()) {
     515             :     compiler::TNode<Context> tmp5;
     516             :     compiler::TNode<JSRegExp> tmp6;
     517             :     compiler::TNode<String> tmp7;
     518             :     compiler::TNode<Object> tmp8;
     519             :     compiler::TNode<Object> tmp9;
     520             :     compiler::TNode<Object> tmp10;
     521             :     ca_.Bind(&block4, &tmp5, &tmp6, &tmp7, &tmp8, &tmp9, &tmp10);
     522             :     ca_.Goto(&block2, tmp5, tmp6, tmp7, tmp8, tmp9);
     523             :   }
     524             : 
     525          56 :   if (block3.is_used()) {
     526             :     compiler::TNode<Context> tmp11;
     527             :     compiler::TNode<JSRegExp> tmp12;
     528             :     compiler::TNode<String> tmp13;
     529             :     compiler::TNode<Object> tmp14;
     530             :     compiler::TNode<Object> tmp15;
     531             :     compiler::TNode<Object> tmp16;
     532             :     compiler::TNode<JSReceiver> tmp17;
     533             :     ca_.Bind(&block3, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15, &tmp16, &tmp17);
     534          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 82);
     535             :     compiler::TNode<BoolT> tmp18;
     536             :     USE(tmp18);
     537          56 :     tmp18 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).FastFlagGetterGlobal(compiler::TNode<JSRegExp>{tmp12}));
     538          56 :     ca_.Branch(tmp18, &block5, &block6, tmp11, tmp12, tmp13, tmp14, tmp15, tmp17);
     539             :   }
     540             : 
     541          56 :   if (block5.is_used()) {
     542             :     compiler::TNode<Context> tmp19;
     543             :     compiler::TNode<JSRegExp> tmp20;
     544             :     compiler::TNode<String> tmp21;
     545             :     compiler::TNode<Object> tmp22;
     546             :     compiler::TNode<Object> tmp23;
     547             :     compiler::TNode<JSReceiver> tmp24;
     548             :     ca_.Bind(&block5, &tmp19, &tmp20, &tmp21, &tmp22, &tmp23, &tmp24);
     549          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 83);
     550             :     compiler::TNode<String> tmp25;
     551             :     USE(tmp25);
     552         168 :     tmp25 = ca_.UncheckedCast<String>(RegExpBuiltinsAssembler(state_).ReplaceGlobalCallableFastPath(compiler::TNode<Context>{tmp19}, compiler::TNode<JSRegExp>{tmp20}, compiler::TNode<String>{tmp21}, compiler::TNode<JSReceiver>{tmp24}));
     553          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 82);
     554             :     ca_.Goto(&block8, tmp19, tmp20, tmp21, tmp22, tmp23, tmp24, tmp25);
     555             :   }
     556             : 
     557          56 :   if (block6.is_used()) {
     558             :     compiler::TNode<Context> tmp26;
     559             :     compiler::TNode<JSRegExp> tmp27;
     560             :     compiler::TNode<String> tmp28;
     561             :     compiler::TNode<Object> tmp29;
     562             :     compiler::TNode<Object> tmp30;
     563             :     compiler::TNode<JSReceiver> tmp31;
     564             :     ca_.Bind(&block6, &tmp26, &tmp27, &tmp28, &tmp29, &tmp30, &tmp31);
     565          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 84);
     566             :     compiler::TNode<String> tmp32;
     567         112 :     tmp32 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kStringReplaceNonGlobalRegExpWithFunction, tmp26, tmp28, tmp27, tmp31));
     568             :     USE(tmp32);
     569          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 82);
     570             :     ca_.Goto(&block7, tmp26, tmp27, tmp28, tmp29, tmp30, tmp31, tmp32);
     571             :   }
     572             : 
     573          56 :   if (block8.is_used()) {
     574             :     compiler::TNode<Context> tmp33;
     575             :     compiler::TNode<JSRegExp> tmp34;
     576             :     compiler::TNode<String> tmp35;
     577             :     compiler::TNode<Object> tmp36;
     578             :     compiler::TNode<Object> tmp37;
     579             :     compiler::TNode<JSReceiver> tmp38;
     580             :     compiler::TNode<String> tmp39;
     581             :     ca_.Bind(&block8, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37, &tmp38, &tmp39);
     582             :     ca_.Goto(&block7, tmp33, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39);
     583             :   }
     584             : 
     585          56 :   if (block7.is_used()) {
     586             :     compiler::TNode<Context> tmp40;
     587             :     compiler::TNode<JSRegExp> tmp41;
     588             :     compiler::TNode<String> tmp42;
     589             :     compiler::TNode<Object> tmp43;
     590             :     compiler::TNode<Object> tmp44;
     591             :     compiler::TNode<JSReceiver> tmp45;
     592             :     compiler::TNode<String> tmp46;
     593             :     ca_.Bind(&block7, &tmp40, &tmp41, &tmp42, &tmp43, &tmp44, &tmp45, &tmp46);
     594         112 :     CodeStubAssembler(state_).Return(tmp46);
     595             :   }
     596             : 
     597          56 :   if (block2.is_used()) {
     598             :     compiler::TNode<Context> tmp47;
     599             :     compiler::TNode<JSRegExp> tmp48;
     600             :     compiler::TNode<String> tmp49;
     601             :     compiler::TNode<Object> tmp50;
     602             :     compiler::TNode<Object> tmp51;
     603             :     ca_.Bind(&block2, &tmp47, &tmp48, &tmp49, &tmp50, &tmp51);
     604          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 86);
     605          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 87);
     606          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 88);
     607             :     compiler::TNode<String> tmp52;
     608             :     USE(tmp52);
     609         224 :     tmp52 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp47}, compiler::TNode<Object>{tmp50}));
     610          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 94);
     611             :     compiler::TNode<JSRegExp> tmp53;
     612             :     USE(tmp53);
     613          56 :     compiler::CodeAssemblerLabel label0(&ca_);
     614         112 :     tmp53 = BaseBuiltinsFromDSLAssembler(state_).Cast14ATFastJSRegExp(compiler::TNode<Context>{tmp47}, compiler::TNode<HeapObject>{tmp48}, &label0);
     615             :     ca_.Goto(&block11, tmp47, tmp48, tmp49, tmp50, tmp51, ca_.UncheckedCast<Object>(tmp51), tmp48, tmp52, tmp48, tmp53);
     616          56 :     if (label0.is_used()) {
     617          56 :       ca_.Bind(&label0);
     618             :       ca_.Goto(&block12, tmp47, tmp48, tmp49, tmp50, tmp51, ca_.UncheckedCast<Object>(tmp51), tmp48, tmp52, tmp48);
     619             :     }
     620             :   }
     621             : 
     622          56 :   if (block12.is_used()) {
     623             :     compiler::TNode<Context> tmp54;
     624             :     compiler::TNode<JSRegExp> tmp55;
     625             :     compiler::TNode<String> tmp56;
     626             :     compiler::TNode<Object> tmp57;
     627             :     compiler::TNode<Object> tmp58;
     628             :     compiler::TNode<Object> tmp59;
     629             :     compiler::TNode<JSRegExp> tmp60;
     630             :     compiler::TNode<String> tmp61;
     631             :     compiler::TNode<JSRegExp> tmp62;
     632             :     ca_.Bind(&block12, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59, &tmp60, &tmp61, &tmp62);
     633             :     ca_.Goto(&block10, tmp54, tmp55, tmp56, tmp57, tmp58, tmp59, tmp60, tmp61);
     634             :   }
     635             : 
     636          56 :   if (block11.is_used()) {
     637             :     compiler::TNode<Context> tmp63;
     638             :     compiler::TNode<JSRegExp> tmp64;
     639             :     compiler::TNode<String> tmp65;
     640             :     compiler::TNode<Object> tmp66;
     641             :     compiler::TNode<Object> tmp67;
     642             :     compiler::TNode<Object> tmp68;
     643             :     compiler::TNode<JSRegExp> tmp69;
     644             :     compiler::TNode<String> tmp70;
     645             :     compiler::TNode<JSRegExp> tmp71;
     646             :     compiler::TNode<JSRegExp> tmp72;
     647             :     ca_.Bind(&block11, &tmp63, &tmp64, &tmp65, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71, &tmp72);
     648          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 96);
     649             :     compiler::TNode<String> tmp73;
     650             :     USE(tmp73);
     651         112 :     tmp73 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).SingleCharacterStringConstant("$"));
     652          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 95);
     653             :     compiler::TNode<Smi> tmp74;
     654             :     USE(tmp74);
     655         112 :     tmp74 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
     656             :     compiler::TNode<Smi> tmp75;
     657         112 :     tmp75 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kStringIndexOf, tmp63, tmp70, tmp73, tmp74));
     658             :     USE(tmp75);
     659             :     compiler::TNode<Smi> tmp76;
     660             :     USE(tmp76);
     661         112 :     tmp76 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(-1));
     662             :     compiler::TNode<BoolT> tmp77;
     663             :     USE(tmp77);
     664         112 :     tmp77 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiNotEqual(compiler::TNode<Smi>{tmp75}, compiler::TNode<Smi>{tmp76}));
     665          56 :     ca_.Branch(tmp77, &block13, &block14, tmp63, tmp64, tmp65, tmp66, tmp67, tmp68, tmp69, tmp70, tmp72);
     666             :   }
     667             : 
     668          56 :   if (block13.is_used()) {
     669             :     compiler::TNode<Context> tmp78;
     670             :     compiler::TNode<JSRegExp> tmp79;
     671             :     compiler::TNode<String> tmp80;
     672             :     compiler::TNode<Object> tmp81;
     673             :     compiler::TNode<Object> tmp82;
     674             :     compiler::TNode<Object> tmp83;
     675             :     compiler::TNode<JSRegExp> tmp84;
     676             :     compiler::TNode<String> tmp85;
     677             :     compiler::TNode<JSRegExp> tmp86;
     678             :     ca_.Bind(&block13, &tmp78, &tmp79, &tmp80, &tmp81, &tmp82, &tmp83, &tmp84, &tmp85, &tmp86);
     679          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 97);
     680             :     ca_.Goto(&block10, tmp78, tmp79, tmp80, tmp81, tmp82, tmp83, tmp84, tmp85);
     681             :   }
     682             : 
     683          56 :   if (block14.is_used()) {
     684             :     compiler::TNode<Context> tmp87;
     685             :     compiler::TNode<JSRegExp> tmp88;
     686             :     compiler::TNode<String> tmp89;
     687             :     compiler::TNode<Object> tmp90;
     688             :     compiler::TNode<Object> tmp91;
     689             :     compiler::TNode<Object> tmp92;
     690             :     compiler::TNode<JSRegExp> tmp93;
     691             :     compiler::TNode<String> tmp94;
     692             :     compiler::TNode<JSRegExp> tmp95;
     693             :     ca_.Bind(&block14, &tmp87, &tmp88, &tmp89, &tmp90, &tmp91, &tmp92, &tmp93, &tmp94, &tmp95);
     694          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 100);
     695             :     compiler::TNode<String> tmp96;
     696             :     USE(tmp96);
     697         112 :     tmp96 = ca_.UncheckedCast<String>(RegexpReplaceBuiltinsFromDSLAssembler(state_).RegExpReplaceFastString(compiler::TNode<Context>{tmp87}, compiler::TNode<JSRegExp>{tmp95}, compiler::TNode<String>{tmp89}, compiler::TNode<String>{tmp94}));
     698         112 :     CodeStubAssembler(state_).Return(tmp96);
     699             :   }
     700             : 
     701          56 :   if (block10.is_used()) {
     702             :     compiler::TNode<Context> tmp97;
     703             :     compiler::TNode<JSRegExp> tmp98;
     704             :     compiler::TNode<String> tmp99;
     705             :     compiler::TNode<Object> tmp100;
     706             :     compiler::TNode<Object> tmp101;
     707             :     compiler::TNode<Object> tmp102;
     708             :     compiler::TNode<JSRegExp> tmp103;
     709             :     compiler::TNode<String> tmp104;
     710             :     ca_.Bind(&block10, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103, &tmp104);
     711          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 103);
     712             :     compiler::TNode<String> tmp105;
     713         112 :     tmp105 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kRegExpReplaceRT, tmp97, tmp103, tmp99, tmp104));
     714             :     USE(tmp105);
     715         112 :     CodeStubAssembler(state_).Return(tmp105);
     716             :   }
     717          56 : }
     718             : 
     719         224 : TF_BUILTIN(RegExpPrototypeReplace, CodeStubAssembler) {
     720          56 :   compiler::CodeAssemblerState* state_ = state();  compiler::CodeAssembler ca_(state());
     721             :   TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
     722             :   USE(parameter0);
     723             :   Node* argc = Parameter(Descriptor::kJSActualArgumentsCount);
     724          56 :   TNode<IntPtrT> arguments_length(ChangeInt32ToIntPtr(argc));
     725          56 :   TNode<RawPtrT> arguments_frame = UncheckedCast<RawPtrT>(LoadFramePointer());
     726          56 :   BaseBuiltinsFromDSLAssembler::Arguments torque_arguments(GetFrameArguments(arguments_frame, arguments_length));
     727             :   CodeStubArguments arguments(this, torque_arguments);
     728          56 :   TNode<Object> parameter1 = arguments.GetReceiver();
     729             : USE(parameter1);
     730             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     731             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, Object> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     732             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, Object, JSReceiver> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     733             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     734             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     735             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver, String, JSReceiver> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     736             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver, String, JSReceiver, JSRegExp> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
     737             :   compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver, String> block6(&ca_, compiler::CodeAssemblerLabel::kDeferred);
     738             :     ca_.Goto(&block0, parameter0, parameter1, torque_arguments.frame, torque_arguments.base, torque_arguments.length);
     739             : 
     740          56 :   if (block0.is_used()) {
     741             :     compiler::TNode<Context> tmp0;
     742             :     compiler::TNode<Object> tmp1;
     743             :     compiler::TNode<RawPtrT> tmp2;
     744             :     compiler::TNode<RawPtrT> tmp3;
     745             :     compiler::TNode<IntPtrT> tmp4;
     746             :     ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3, &tmp4);
     747          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 131);
     748             :     compiler::TNode<IntPtrT> tmp5;
     749             :     USE(tmp5);
     750         112 :     tmp5 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(0));
     751             :     compiler::TNode<Object> tmp6;
     752             :     USE(tmp6);
     753         112 :     tmp6 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(BaseBuiltinsFromDSLAssembler::Arguments{compiler::TNode<RawPtrT>{tmp2}, compiler::TNode<RawPtrT>{tmp3}, compiler::TNode<IntPtrT>{tmp4}}, compiler::TNode<IntPtrT>{tmp5}));
     754          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 132);
     755             :     compiler::TNode<IntPtrT> tmp7;
     756             :     USE(tmp7);
     757         112 :     tmp7 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(1));
     758             :     compiler::TNode<Object> tmp8;
     759             :     USE(tmp8);
     760         112 :     tmp8 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(BaseBuiltinsFromDSLAssembler::Arguments{compiler::TNode<RawPtrT>{tmp2}, compiler::TNode<RawPtrT>{tmp3}, compiler::TNode<IntPtrT>{tmp4}}, compiler::TNode<IntPtrT>{tmp7}));
     761          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 136);
     762             :     compiler::TNode<JSReceiver> tmp9;
     763             :     USE(tmp9);
     764          56 :     compiler::CodeAssemblerLabel label0(&ca_);
     765         112 :     tmp9 = BaseBuiltinsFromDSLAssembler(state_).Cast10JSReceiver(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}, &label0);
     766             :     ca_.Goto(&block3, tmp0, tmp1, tmp2, tmp3, tmp4, tmp6, tmp8, tmp1, tmp9);
     767          56 :     if (label0.is_used()) {
     768          56 :       ca_.Bind(&label0);
     769             :       ca_.Goto(&block4, tmp0, tmp1, tmp2, tmp3, tmp4, tmp6, tmp8, tmp1);
     770             :     }
     771             :   }
     772             : 
     773          56 :   if (block4.is_used()) {
     774             :     compiler::TNode<Context> tmp10;
     775             :     compiler::TNode<Object> tmp11;
     776             :     compiler::TNode<RawPtrT> tmp12;
     777             :     compiler::TNode<RawPtrT> tmp13;
     778             :     compiler::TNode<IntPtrT> tmp14;
     779             :     compiler::TNode<Object> tmp15;
     780             :     compiler::TNode<Object> tmp16;
     781             :     compiler::TNode<Object> tmp17;
     782             :     ca_.Bind(&block4, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15, &tmp16, &tmp17);
     783             :     ca_.Goto(&block2, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16);
     784             :   }
     785             : 
     786          56 :   if (block3.is_used()) {
     787             :     compiler::TNode<Context> tmp18;
     788             :     compiler::TNode<Object> tmp19;
     789             :     compiler::TNode<RawPtrT> tmp20;
     790             :     compiler::TNode<RawPtrT> tmp21;
     791             :     compiler::TNode<IntPtrT> tmp22;
     792             :     compiler::TNode<Object> tmp23;
     793             :     compiler::TNode<Object> tmp24;
     794             :     compiler::TNode<Object> tmp25;
     795             :     compiler::TNode<JSReceiver> tmp26;
     796             :     ca_.Bind(&block3, &tmp18, &tmp19, &tmp20, &tmp21, &tmp22, &tmp23, &tmp24, &tmp25, &tmp26);
     797             :     ca_.Goto(&block1, tmp18, tmp19, tmp20, tmp21, tmp22, tmp23, tmp24, tmp26);
     798             :   }
     799             : 
     800          56 :   if (block2.is_used()) {
     801             :     compiler::TNode<Context> tmp27;
     802             :     compiler::TNode<Object> tmp28;
     803             :     compiler::TNode<RawPtrT> tmp29;
     804             :     compiler::TNode<RawPtrT> tmp30;
     805             :     compiler::TNode<IntPtrT> tmp31;
     806             :     compiler::TNode<Object> tmp32;
     807             :     compiler::TNode<Object> tmp33;
     808             :     ca_.Bind(&block2, &tmp27, &tmp28, &tmp29, &tmp30, &tmp31, &tmp32, &tmp33);
     809          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 137);
     810         112 :     CodeStubAssembler(state_).ThrowTypeError(compiler::TNode<Context>{tmp27}, MessageTemplate::kIncompatibleMethodReceiver, "RegExp.prototype.@@replace");
     811             :   }
     812             : 
     813          56 :   if (block1.is_used()) {
     814             :     compiler::TNode<Context> tmp34;
     815             :     compiler::TNode<Object> tmp35;
     816             :     compiler::TNode<RawPtrT> tmp36;
     817             :     compiler::TNode<RawPtrT> tmp37;
     818             :     compiler::TNode<IntPtrT> tmp38;
     819             :     compiler::TNode<Object> tmp39;
     820             :     compiler::TNode<Object> tmp40;
     821             :     compiler::TNode<JSReceiver> tmp41;
     822             :     ca_.Bind(&block1, &tmp34, &tmp35, &tmp36, &tmp37, &tmp38, &tmp39, &tmp40, &tmp41);
     823          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 140);
     824             :     compiler::TNode<String> tmp42;
     825             :     USE(tmp42);
     826         224 :     tmp42 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp34}, compiler::TNode<Object>{tmp39}));
     827          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 144);
     828             :     compiler::TNode<JSRegExp> tmp43;
     829             :     USE(tmp43);
     830          56 :     compiler::CodeAssemblerLabel label0(&ca_);
     831         112 :     tmp43 = BaseBuiltinsFromDSLAssembler(state_).Cast14ATFastJSRegExp(compiler::TNode<Context>{tmp34}, compiler::TNode<HeapObject>{tmp41}, &label0);
     832             :     ca_.Goto(&block7, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp41, tmp43);
     833          56 :     if (label0.is_used()) {
     834          56 :       ca_.Bind(&label0);
     835             :       ca_.Goto(&block8, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp41);
     836             :     }
     837             :   }
     838             : 
     839          56 :   if (block8.is_used()) {
     840             :     compiler::TNode<Context> tmp44;
     841             :     compiler::TNode<Object> tmp45;
     842             :     compiler::TNode<RawPtrT> tmp46;
     843             :     compiler::TNode<RawPtrT> tmp47;
     844             :     compiler::TNode<IntPtrT> tmp48;
     845             :     compiler::TNode<Object> tmp49;
     846             :     compiler::TNode<Object> tmp50;
     847             :     compiler::TNode<JSReceiver> tmp51;
     848             :     compiler::TNode<String> tmp52;
     849             :     compiler::TNode<JSReceiver> tmp53;
     850             :     ca_.Bind(&block8, &tmp44, &tmp45, &tmp46, &tmp47, &tmp48, &tmp49, &tmp50, &tmp51, &tmp52, &tmp53);
     851             :     ca_.Goto(&block6, tmp44, tmp45, tmp46, tmp47, tmp48, tmp49, tmp50, tmp51, tmp52);
     852             :   }
     853             : 
     854          56 :   if (block7.is_used()) {
     855             :     compiler::TNode<Context> tmp54;
     856             :     compiler::TNode<Object> tmp55;
     857             :     compiler::TNode<RawPtrT> tmp56;
     858             :     compiler::TNode<RawPtrT> tmp57;
     859             :     compiler::TNode<IntPtrT> tmp58;
     860             :     compiler::TNode<Object> tmp59;
     861             :     compiler::TNode<Object> tmp60;
     862             :     compiler::TNode<JSReceiver> tmp61;
     863             :     compiler::TNode<String> tmp62;
     864             :     compiler::TNode<JSReceiver> tmp63;
     865             :     compiler::TNode<JSRegExp> tmp64;
     866             :     ca_.Bind(&block7, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59, &tmp60, &tmp61, &tmp62, &tmp63, &tmp64);
     867          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 145);
     868             :     compiler::TNode<String> tmp65;
     869         112 :     tmp65 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kRegExpReplace, tmp54, tmp64, tmp62, tmp60));
     870             :     USE(tmp65);
     871          56 :     arguments.PopAndReturn(tmp65);
     872             :   }
     873             : 
     874          56 :   if (block6.is_used()) {
     875             :     compiler::TNode<Context> tmp66;
     876             :     compiler::TNode<Object> tmp67;
     877             :     compiler::TNode<RawPtrT> tmp68;
     878             :     compiler::TNode<RawPtrT> tmp69;
     879             :     compiler::TNode<IntPtrT> tmp70;
     880             :     compiler::TNode<Object> tmp71;
     881             :     compiler::TNode<Object> tmp72;
     882             :     compiler::TNode<JSReceiver> tmp73;
     883             :     compiler::TNode<String> tmp74;
     884             :     ca_.Bind(&block6, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71, &tmp72, &tmp73, &tmp74);
     885          56 :     ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 148);
     886             :     compiler::TNode<String> tmp75;
     887         112 :     tmp75 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kRegExpReplaceRT, tmp66, tmp73, tmp74, tmp72));
     888             :     USE(tmp75);
     889          56 :     arguments.PopAndReturn(tmp75);
     890             :   }
     891          56 : }
     892             : 
     893             : }  // namespace internal
     894       59456 : }  // namespace v8
     895             : 

Generated by: LCOV version 1.10