亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? combine.c

?? 這是完整的gcc源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
      || (i1 && GET_CODE (i1) == NOTE))    return 0;  /* Don't combine across a CALL_INSN, because that would possibly     change whether the life span of some REGs crosses calls or not,     and it is a pain to update that information.  */  if (INSN_CUID (i2) < last_call_cuid      || (i1 && INSN_CUID (i1) < last_call_cuid))    return 0;  /* Can combine only if previous insn is a SET of a REG, a SUBREG or CC0.     That REG must be either set or dead by the final instruction     (so that we can safely forget about setting it).     Also test use_crosses_set_p to make sure that the value     that is to be substituted for the register     does not use any registers whose values alter in between.     Do not try combining with moves from one register to another     since it is better to let them be tied by register allocation.     (There is a switch to permit such combination; except the insns     that copy a function value into another register are never combined     because moving that too far away from the function call could cause     something else to be stored in that register in the interim.)     A set of a SUBREG is considered as if it were a set from     SUBREG.  Thus, (SET (SUBREG:X (REG:Y...)) (something:X...))     is handled by substituting (SUBREG:Y (something:X...)) for (REG:Y...).  */  if (GET_CODE (PATTERN (i2)) != SET)    return 0;  i2dest = SET_DEST (PATTERN (i2));  i2src = SET_SRC (PATTERN (i2));  if (GET_CODE (i2dest) == SUBREG)    {      i2dest = SUBREG_REG (i2dest);      i2src = gen_rtx (SUBREG, GET_MODE (i2dest), i2src, 0);    }  /* Don't eliminate a store in the stack pointer.  */  if (i2dest == stack_pointer_rtx)    return 0;  /* Don't install a subreg involving two modes not tieable.     It can worsen register allocation, and can even make invalid reload insns,     since the reg inside may need to be copied from in the outside mode,     and that may be invalid if it is an fp reg copied in integer mode.  */  if (GET_CODE (i2src) == SUBREG      && ! MODES_TIEABLE_P (GET_MODE (i2src), GET_MODE (SUBREG_REG (i2src))))    return 0;  if (GET_CODE (i2dest) != CC0      && (GET_CODE (i2dest) != REG	  || (GET_CODE (i2src) == REG	      /* Do allow the combination of y = x; x = y; (with x dead)		 because the result will turn into nothing.  */	      && !(GET_CODE (PATTERN (i3)) == SET		   && i2src == SET_DEST (PATTERN (i3)))	      && (!flag_combine_regs		  /* Don't substitute a function value reg for any other.  */		  || FUNCTION_VALUE_REGNO_P (REGNO (i2src))))	  || GET_CODE (i2src) == CALL	  /* Don't substitute into an incremented register.  */	  || find_reg_note (i3, REG_INC, i2dest)	  || use_crosses_set_p (i2src, INSN_CUID (i2))))    return 0;  if (GET_CODE (i2src) == ASM_OPERANDS && MEM_VOLATILE_P (i2src))    return 0;  /* Don't substitute for a register intended as a clobberable operand.  */  if (GET_CODE (PATTERN (i3)) == PARALLEL)    for (i = 0; i < XVECLEN (PATTERN (i3), 0); i++)      if (GET_CODE (XVECEXP (PATTERN (i3), 0, i)) == CLOBBER	  && XEXP (XVECEXP (PATTERN (i3), 0, i), 0) == i2dest)	return 0;  if (i1 != 0)    {      if (GET_CODE (PATTERN (i1)) != SET)	return 0;      i1dest = SET_DEST (PATTERN (i1));      i1src = SET_SRC (PATTERN (i1));      if (GET_CODE (i1dest) == SUBREG)	{	  i1dest = SUBREG_REG (i1dest);	  i1src = gen_rtx (SUBREG, GET_MODE (i1dest), i1src, 0);	}      if (i1dest == stack_pointer_rtx)	return 0;      if (GET_CODE (i1src) == SUBREG	  && ! MODES_TIEABLE_P (GET_MODE (i1src),				GET_MODE (SUBREG_REG (i1src))))	return 0;      if (GET_CODE (i1dest) != CC0	  && (GET_CODE (i1dest) != REG	      || (GET_CODE (i1src) == REG		  && (!flag_combine_regs		      || FUNCTION_VALUE_REGNO_P (REGNO (i1src))))	      || GET_CODE (i1src) == CALL	      || find_reg_note (i3, REG_INC, i1dest)	      || find_reg_note (i2, REG_INC, i1dest)	      || use_crosses_set_p (i1src, INSN_CUID (i1))))	return 0;      if (GET_CODE (i1src) == ASM_OPERANDS && MEM_VOLATILE_P (i1src))	return 0;      /* Don't substitute for a register intended as a clobberable operand.  */      if (GET_CODE (PATTERN (i3)) == PARALLEL)	for (i = 0; i < XVECLEN (PATTERN (i3), 0); i++)	  if (GET_CODE (XVECEXP (PATTERN (i3), 0, i)) == CLOBBER	      && XEXP (XVECEXP (PATTERN (i3), 0, i), 0) == i1dest)	    return 0;    }  /* If it is better that two different modes keep two different pseudos,     avoid combining them.  */  if (GET_CODE (PATTERN (i3)) == SET)    {      rtx i3dest = SET_DEST (PATTERN (i3));      while (GET_CODE (i3dest) == SUBREG	     || GET_CODE (i3dest) == STRICT_LOW_PART	     || GET_CODE (i3dest) == SIGN_EXTRACT	     || GET_CODE (i3dest) == ZERO_EXTRACT)	i3dest = SUBREG_REG (i3dest);      if (SET_SRC (PATTERN (i3)) == i2dest	  && GET_CODE (i3dest) == REG	  && ! MODES_TIEABLE_P (GET_MODE (i2dest), GET_MODE (i3dest)))	return 0;    }  /* If I2 contains anything volatile, reject, unless nothing     volatile comes between it and I3.  */  if (volatile_refs_p (PATTERN (i2)))    {      rtx insn;      for (insn = NEXT_INSN (i2); insn != i3; insn = NEXT_INSN (insn))	if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN	    || GET_CODE (insn) == JUMP_INSN)	  if (volatile_refs_p (PATTERN (insn)))	    return 0;    }  /* Likewise for I1; nothing volatile can come between it and I3,     except optionally I2.  */  if (i1 && volatile_refs_p (PATTERN (i1)))    {      rtx insn;      rtx end = (volatile_refs_p (PATTERN (i2)) ? i2 : i3);      for (insn = NEXT_INSN (i1); insn != end; insn = NEXT_INSN (insn))	if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN	    || GET_CODE (insn) == JUMP_INSN)	  if (volatile_refs_p (PATTERN (insn)))	    return 0;    }  /* If I1 or I2 contains an autoincrement or autodecrement,     make sure that register is not used between there and I3,     and not already used in I3 either.     Also insist that I3 not be a jump; if it were one     and the incremented register were spilled, we would lose.  */  for (link = REG_NOTES (i2); link; link = XEXP (link, 1))    if (REG_NOTE_KIND (link) == REG_INC	&& (GET_CODE (i3) == JUMP_INSN	    || reg_used_between_p (XEXP (link, 0), i2, i3)	    || reg_mentioned_p (XEXP (link, 0), PATTERN (i3))))      return 0;  if (i1)    for (link = REG_NOTES (i1); link; link = XEXP (link, 1))      if (REG_NOTE_KIND (link) == REG_INC	  && (GET_CODE (i3) == JUMP_INSN	      || reg_used_between_p (XEXP (link, 0), i1, i3)	      || reg_mentioned_p (XEXP (link, 0), PATTERN (i3))))	return 0;  /* If I3 has an inc, then give up if I1 or I2 uses the reg that is inc'd,     EXCEPT in one case: I3 has a post-inc in an output operand.  */  if (!(GET_CODE (PATTERN (i3)) == SET	&& GET_CODE (SET_SRC (PATTERN (i3))) == REG	&& GET_CODE (SET_DEST (PATTERN (i3))) == MEM	&& (GET_CODE (XEXP (SET_DEST (PATTERN (i3)), 0)) == POST_INC	    || GET_CODE (XEXP (SET_DEST (PATTERN (i3)), 0)) == POST_DEC)))    /* It's not the exception.  */    for (link = REG_NOTES (i3); link; link = XEXP (link, 1))      if (REG_NOTE_KIND (link) == REG_INC	  && (reg_mentioned_p (XEXP (link, 0), PATTERN (i2))	      || (i1 != 0		  && reg_mentioned_p (XEXP (link, 0), PATTERN (i1)))))	return 0;  /* Make sure that I1DEST is not used between I2 and I3.  */  if (i1 && reg_used_between_p (i1dest, i2, i3))    return 0;  /* Don't combine an insn I1 or I2 that follows a CC0-setting insn.     An insn that uses CC0 must not be separated from the one that sets it.     It would be more logical to test whether CC0 occurs inside I1 or I2,     but that would be much slower, and this ought to be equivalent.  */  temp = PREV_INSN (i2);  while (temp && GET_CODE (temp) == NOTE)    temp = PREV_INSN (temp);  if (temp && GET_CODE (temp) == INSN && sets_cc0_p (PATTERN (temp)))    return 0;  if (i1)    {      temp = PREV_INSN (i2);      while (temp && GET_CODE (temp) == NOTE)	temp = PREV_INSN (temp);      if (temp && GET_CODE (temp) == INSN && sets_cc0_p (PATTERN (temp)))	return 0;    }  /* See if the SETs in i1 or i2 need to be kept around in the merged     instruction: whenever the value set there is still needed past i3.  */  added_sets_2 = (GET_CODE (i2dest) != CC0		  && ! dead_or_set_p (i3, i2dest));  if (i1)    added_sets_1 = ! (dead_or_set_p (i3, i1dest)		      || dead_or_set_p (i2, i1dest));  combine_merges++;  undobuf.num_undo = 0;  undobuf.storage = 0;  /* Substitute in the latest insn for the regs set by the earlier ones.  */  maxreg = max_reg_num ();  subst_insn = i3;  n_occurrences = 0;		/* `subst' counts here */  newpat = subst (PATTERN (i3), i2dest, i2src);  /* Record whether i2's body now appears within i3's body.  */  i2_is_used = n_occurrences;  if (i1)    {      n_occurrences = 0;      newpat = subst (newpat, i1dest, i1src);    }  if (GET_CODE (PATTERN (i3)) == SET      && SET_DEST (PATTERN (i3)) == cc0_rtx      && (GET_CODE (SET_SRC (PATTERN (i3))) == AND	  || GET_CODE (SET_SRC (PATTERN (i3))) == LSHIFTRT)      && next_insn_tests_no_inequality (i3))    simplify_set_cc0_and (i3);  if (max_reg_num () != maxreg)    abort ();  /* If the actions of the earler insns must be kept     in addition to substituting them into the latest one,     we must make a new PARALLEL for the latest insn     to hold additional the SETs.  */  if (added_sets_1 || added_sets_2)    {      combine_extras++;      /* Arrange to free later what we allocate now	 if we don't accept this combination.  */      if (!undobuf.storage)	undobuf.storage = (char *) oballoc (0);      if (GET_CODE (newpat) == PARALLEL)	{	  rtvec old = XVEC (newpat, 0);	  total_sets = XVECLEN (newpat, 0) + added_sets_1 + added_sets_2;	  newpat = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (total_sets));	  bcopy (&old->elem[0], &XVECEXP (newpat, 0, 0),		 sizeof (old->elem[0]) * old->num_elem);	}      else	{	  rtx old = newpat;	  total_sets = 1 + added_sets_1 + added_sets_2;	  newpat = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (total_sets));	  XVECEXP (newpat, 0, 0) = old;	}     if (added_sets_1)	{	  XVECEXP (newpat, 0, --total_sets) = PATTERN (i1);	}     if (added_sets_2)	{	  /* If there is no I1, use I2's body as is.  */	  if (i1 == 0	  /* If I2 was stuck into I3, then anything within it has	     already had I1 substituted into it when that was done to I3.  */	      || i2_is_used)	    {	      XVECEXP (newpat, 0, --total_sets) = PATTERN (i2);	    }	  else	    XVECEXP (newpat, 0, --total_sets)	      = subst (PATTERN (i2), i1dest, i1src);	}    }  /* Fail if an autoincrement side-effect has been duplicated.  */  if ((i2_is_used > 1 && find_reg_note (i2, REG_INC, 0) != 0)      || (i1 != 0 && n_occurrences > 1 && find_reg_note (i1, REG_INC, 0) != 0))    {      undo_all ();      return 0;    }  /* Is the result of combination a valid instruction?  */  insn_code_number = recog (newpat, i3);  if (insn_code_number >= 0      /* Is the result a reasonable ASM_OPERANDS?  */      || (check_asm_operands (newpat) && ! added_sets_1 && ! added_sets_2))    {      /* Yes.  Install it.  */      register int regno;      INSN_CODE (i3) = insn_code_number;      PATTERN (i3) = newpat;      /* If anything was substituted more than once,	 copy it to avoid invalid shared rtl structure.  */      copy_substitutions ();      /* The data flowing into I2 now flows into I3.	 But we cannot always move all of I2's LOG_LINKS into I3,	 since they must go to a setting of a REG from the	 first use following.  If I2 was the first use following a set,	 I3 is now a use, but it is not the first use	 if some instruction between I2 and I3 is also a use.	 Here, for simplicity, we move all the links only if	 there are no real insns between I2 and I3.	 Otherwise, we move only links that correspond to regs	 that used to die in I2.  They are always safe to move.  */      add_links (i3, i2, adjacent_insns_p (i2, i3));      /* Most REGs that previously died in I2 now die in I3.  */       move_deaths (i2src, INSN_CUID (i2), i3);      if (GET_CODE (i2dest) == REG)	{	  /* If the reg formerly set in I2 died only once and that was in I3,	     zero its use count so it won't make `reload' do any work.  */	  regno = REGNO (i2dest);	  if (! added_sets_2)	    {	      reg_n_sets[regno]--;	      /* Used to check  && regno_dead_p (regno, i3)  also here.  */	      if (reg_n_sets[regno] == 0		  && ! (basic_block_live_at_start[0][regno / HOST_BITS_PER_INT]			& (1 << (regno % HOST_BITS_PER_INT))))		reg_n_refs[regno] = 0;	    }	  /* If a ref to REGNO was substituted into I3 from I2,	     then it still dies there if it previously did.	     Otherwise either REGNO never did die in I3 so remove_death is safe	     or this entire life of REGNO is gone so remove its death.  */	  if (!added_sets_2	      && ! reg_mentioned_p (i2dest, PATTERN (i3)))	    remove_death (regno, i3);	}      /* Any registers previously autoincremented in I2	 are now incremented in I3.  */      add_incs (i3, REG_NOTES (i2));      if (i1)	{	  /* Likewise, merge the info from I1 and get rid of it.  */	  add_links (i3, i1,		     adjacent_insns_p (i1, i2) && adjacent_insns_p (i2, i3));	  move_deaths (i1src, INSN_CUID (i1), i3);	  if (GET_CODE (i1dest) == REG)	    {	      regno = REGNO (i1dest);	      if (! added_sets_1)		{		  reg_n_sets[regno]--;		  /* Used to also check  && regno_dead_p (regno, i3) here.  */		  if (reg_n_sets[regno] == 0		      && ! (basic_block_live_at_start[0][regno / HOST_BITS_PER_INT]			    & (1 << (regno % HOST_BITS_PER_INT))))		    reg_n_refs[regno] = 0;		}	      /* If a ref to REGNO was substituted into I3 from I1,		 then it still dies there if it previously did.		 Else either REGNO never did die in I3 so remove_death is safe		 or this entire life of REGNO is gone so remove its death.  */	      if (! added_sets_1		  && ! reg_mentioned_p (i1dest, PATTERN (i3)))		remove_death (regno, i3);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综合丁香| 另类欧美日韩国产在线| 欧美怡红院视频| 一区二区三区四区乱视频| 色94色欧美sute亚洲13| 亚洲电影一级片| 欧美一级日韩一级| 激情欧美日韩一区二区| 国产亚洲精品久| 99久久精品一区二区| 亚洲黄一区二区三区| 欧美猛男超大videosgay| 奇米影视一区二区三区| 久久久亚洲精品石原莉奈| 成人丝袜高跟foot| 亚洲精品国产高清久久伦理二区| 精品1区2区3区| 久久99精品一区二区三区 | 捆绑紧缚一区二区三区视频| 精品国产百合女同互慰| 成人性生交大合| 亚洲综合成人在线视频| 日韩一区二区三区精品视频| 国产一区二区美女| 亚洲免费观看高清完整版在线观看 | 亚洲国产综合91精品麻豆| 在线播放欧美女士性生活| 国产一区二区不卡老阿姨| 亚洲人一二三区| 欧美日产国产精品| 国产乱国产乱300精品| 亚洲乱码国产乱码精品精的特点| 欧美天堂一区二区三区| 国精产品一区一区三区mba桃花| 国产精品三级av| 欧美日本韩国一区二区三区视频 | 欧美色图天堂网| 黄色日韩网站视频| 亚洲精品videosex极品| 日韩欧美激情在线| 99久久精品免费观看| 日本午夜一区二区| 中文字幕一区二区三区在线观看 | 亚洲午夜影视影院在线观看| 精品人在线二区三区| 成人av在线网站| 青青草成人在线观看| 国产精品久久久久久久久免费相片 | 久久久久久久久久电影| 在线观看国产一区二区| 极品瑜伽女神91| 一区二区三区成人在线视频| www亚洲一区| 欧美日韩在线三区| 丰满岳乱妇一区二区三区| 天天综合日日夜夜精品| 国产精品国产a| 日韩欧美在线网站| 色综合色狠狠天天综合色| 精品一区二区三区久久久| 一区二区三区四区视频精品免费| 国产肉丝袜一区二区| 欧美二区三区的天堂| 91免费看片在线观看| 激情五月婷婷综合网| 亚洲乱码一区二区三区在线观看| 日韩西西人体444www| 欧美在线视频日韩| 成人自拍视频在线| 久久久国产综合精品女国产盗摄| 欧美亚洲国产一区二区三区| 国产高清精品久久久久| 日韩黄色在线观看| 亚洲精品高清在线| 中文字幕不卡在线| 精品裸体舞一区二区三区| 欧美日韩成人综合| 91黄色在线观看| 北条麻妃一区二区三区| 国产一区二区三区久久悠悠色av | 韩国欧美一区二区| 丝袜脚交一区二区| 欧美国产丝袜视频| 精品对白一区国产伦| 91精品久久久久久蜜臀| 在线精品视频免费播放| 99久久精品国产精品久久| 国产精品一区二区x88av| 麻豆91在线播放免费| 天天综合色天天综合色h| 亚洲一区二区三区四区的| 亚洲欧洲一区二区三区| 国产人伦精品一区二区| 日韩免费性生活视频播放| 欧美精品乱码久久久久久| 欧洲视频一区二区| 91久久一区二区| 91理论电影在线观看| 成人av资源在线观看| 成人在线视频一区二区| 国产伦精品一区二区三区免费迷 | 亚洲黄网站在线观看| 亚洲蜜臀av乱码久久精品| 国产精品久久久久久久久免费樱桃 | 秋霞影院一区二区| 日韩国产欧美视频| 日韩中文欧美在线| 日本中文字幕一区二区视频| 亚洲观看高清完整版在线观看| 一区二区三区在线视频观看| 亚洲欧美乱综合| 亚洲另类在线视频| 亚洲精品欧美专区| 亚洲综合偷拍欧美一区色| 一级中文字幕一区二区| 亚洲影视资源网| 亚洲成va人在线观看| 亚洲高清免费一级二级三级| 亚洲成人综合网站| 日韩电影网1区2区| 青青青伊人色综合久久| 青青国产91久久久久久| 蜜臂av日日欢夜夜爽一区| 美女免费视频一区| 国产一区二区三区日韩| 中文字幕一区二区三区乱码在线| 久久九九影视网| 国产区在线观看成人精品| 亚洲国产精品激情在线观看| 国产精品不卡在线| 亚洲免费在线视频| 亚洲va欧美va天堂v国产综合| 亚洲国产精品人人做人人爽| 亚洲大片精品永久免费| 午夜视频在线观看一区二区三区| 日韩中文字幕91| 国产在线精品视频| 国产精品一区免费在线观看| 国产成人av电影| 91香蕉视频污在线| 欧美亚洲综合网| 91精品国产一区二区人妖| 精品国产污污免费网站入口| 久久综合国产精品| 国产精品毛片大码女人| 亚洲自拍偷拍网站| 日日摸夜夜添夜夜添国产精品| 蜜桃一区二区三区在线观看| 国产米奇在线777精品观看| 精品一区二区三区在线播放| 粉嫩在线一区二区三区视频| 日本电影欧美片| 正在播放亚洲一区| 国产午夜三级一区二区三| 亚洲色图另类专区| 五月综合激情网| 国产精品自产自拍| 日本久久电影网| 欧美一二三区在线观看| 久久久久久久免费视频了| 亚洲视频一区在线| 亚洲综合视频在线观看| 精品国产不卡一区二区三区| 1024精品合集| 婷婷丁香激情综合| 国产电影精品久久禁18| 91福利精品第一导航| 欧美大片免费久久精品三p| 国产精品国产a级| 调教+趴+乳夹+国产+精品| 成人免费高清在线| 欧美高清视频一二三区| 欧美韩国日本综合| 天天做天天摸天天爽国产一区 | 欧美激情一二三区| 日韩和欧美一区二区三区| 从欧美一区二区三区| 制服.丝袜.亚洲.中文.综合| 国产精品灌醉下药二区| 麻豆国产91在线播放| 91免费视频观看| 久久中文娱乐网| 亚洲国产精品影院| 成人免费毛片a| 日韩一级欧美一级| 亚洲精品自拍动漫在线| 国产原创一区二区| 欧美日韩精品一区二区三区蜜桃 | 六月婷婷色综合| 日本伦理一区二区| 中文字幕av资源一区| 奇米在线7777在线精品| 日本高清免费不卡视频| 国产日韩欧美精品综合| 久久综合狠狠综合久久综合88| 一区二区免费视频| 成人免费高清在线| 精品对白一区国产伦| 日本欧美韩国一区三区| 91蝌蚪porny|