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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? flow.c

?? 這是完整的gcc源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	      /* For stack ptr or arg pointer,		 nothing below can be necessary, so waste no more time.  */	      if (regno == STACK_POINTER_REGNUM		  || regno == ARG_POINTER_REGNUM)		return;	      /* No death notes for global register variables;		 their values are live after this function exits.  */	      if (global_regs[regno])		return;	      n = HARD_REGNO_NREGS (regno, GET_MODE (x));	      while (--n > 0)		{		  live[(regno + n) / REGSET_ELT_BITS]		    |= 1 << ((regno + n) % REGSET_ELT_BITS);		  is_needed |= (needed[(regno + n) / REGSET_ELT_BITS]				& 1 << ((regno + n) % REGSET_ELT_BITS));		}	    }	  if (final)	    {	      if (regno < FIRST_PSEUDO_REGISTER)		{		  /* If a hard reg is being used,		     record that this function does use it.  */		  register int i;		  i = HARD_REGNO_NREGS (regno, GET_MODE (x));		  if (i == 0)		    i = 1;		  do		    regs_ever_live[regno + --i] = 1;		  while (i > 0);		}	      else		{		  /* Keep track of which basic block each reg appears in.  */		  register int blocknum = BLOCK_NUM (insn);		  if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)		    reg_basic_block[regno] = blocknum;		  else if (reg_basic_block[regno] != blocknum)		    reg_basic_block[regno] = REG_BLOCK_GLOBAL;		  /* Record the earliest insn that uses this reg,		     provided the reg is used only in one basic block.		     Do this by recording each insn, and the one that		     sticks is the last one scanned (the earliest insn).  */		  reg_first_use[regno] = insn;		  /* Record where each reg is used, so when the reg		     is set we know the next insn that uses it.  */		  reg_next_use[regno] = insn;		  /* Count (weighted) number of uses of each reg.  */		  reg_n_refs[regno] += loop_depth;		}	      /* Record and count the insns in which a reg dies.		 If it is used in this insn and was dead below the insn		 then it dies in this insn.  */	      if (!(needed[offset] & bit) && !is_needed		  && ! find_regno_note (insn, REG_DEAD, regno))		{		  REG_NOTES (insn)		    = gen_rtx (EXPR_LIST, REG_DEAD, x, REG_NOTES (insn));		  reg_n_deaths[regno]++;		}	    }	}      return;    case SET:      {	register rtx testreg = SET_DEST (x);	int mark_dest = 0;	/* Storing in STRICT_LOW_PART is like storing in a reg	   in that this SET might be dead, so ignore it in TESTREG.	   but in some other ways it is like using the reg.  */	/* Storing in a SUBREG or a bit field is like storing the entire	   register in that if the register's value is not used	   then this SET is not needed.  */	while (GET_CODE (testreg) == STRICT_LOW_PART	       || GET_CODE (testreg) == ZERO_EXTRACT	       || GET_CODE (testreg) == SIGN_EXTRACT	       || GET_CODE (testreg) == SUBREG)	  {	    /* Modifying a single register in an alternate mode	       does not use any of the old value.  But these other	       ways of storing in a register do use the old value.  */	    if (GET_CODE (testreg) == SUBREG		&& !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))	      ;	    else	      mark_dest = 1;	    testreg = XEXP (testreg, 0);	  }	/* If this is a store into a register,	   recursively scan the only value being stored,	   and only if the register's value is live after this insn.	   If the value being computed here would never be used	   then the values it uses don't need to be computed either.  */	if (GET_CODE (testreg) == REG	    && (regno = REGNO (testreg), regno != FRAME_POINTER_REGNUM)	    && regno != ARG_POINTER_REGNUM	    && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))#if 0 /* This was added in 1.25, but screws up death notes for hard regs.	 It probably isn't really needed anyway.  */	    && (regno >= FIRST_PSEUDO_REGISTER		|| INSN_VOLATILE (insn)))#endif	  {	    register int offset = regno / REGSET_ELT_BITS;	    register int bit = 1 << (regno % REGSET_ELT_BITS);	    if ((needed[offset] & bit)		/* If insn refers to volatile, we mustn't delete it,		   so its inputs are all needed.  */		|| INSN_VOLATILE (insn))	      {		mark_used_regs (needed, live, SET_SRC (x), final, insn);		if (mark_dest)		  mark_used_regs (needed, live, SET_DEST (x), final, insn);	      }	    return;	  }      }      break;    }  /* Recursively scan the operands of this expression.  */  {    register char *fmt = GET_RTX_FORMAT (code);    register int i;        for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)      {	if (fmt[i] == 'e')	  {	    /* Tail recursive case: save a function call level.  */	    if (i == 0)	      {		x = XEXP (x, 0);		goto retry;	      }	    mark_used_regs (needed, live, XEXP (x, i), final, insn);	  }	else if (fmt[i] == 'E')	  {	    register int j;	    for (j = 0; j < XVECLEN (x, i); j++)	      mark_used_regs (needed, live, XVECEXP (x, i, j), final, insn);	  }      }  }}#ifdef AUTO_INC_DECstatic inttry_pre_increment_1 (insn)     rtx insn;{  /* Find the next use of this reg.  If in same basic block,     make it do pre-increment or pre-decrement if appropriate.  */  rtx x = PATTERN (insn);  int amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)		* INTVAL (XEXP (SET_SRC (x), 1)));  int regno = REGNO (SET_DEST (x));  rtx y = reg_next_use[regno];  if (y != 0      && BLOCK_NUM (y) == BLOCK_NUM (insn)      && try_pre_increment (y, SET_DEST (PATTERN (insn)),			    amount))    {      /* We have found a suitable auto-increment	 and already changed insn Y to do it.	 So flush this increment-instruction.  */      PUT_CODE (insn, NOTE);      NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;      NOTE_SOURCE_FILE (insn) = 0;      /* Count a reference to this reg for the increment	 insn we are deleting.  When a reg is incremented.	 spilling it is worse, so we want to make that	 less likely.  */      reg_n_refs[regno] += loop_depth;      reg_n_sets[regno]++;      return 1;    }  return 0;}/* Try to change INSN so that it does pre-increment or pre-decrement   addressing on register REG in order to add AMOUNT to REG.   AMOUNT is negative for pre-decrement.   Returns 1 if the change could be made.   This checks all about the validity of the result of modifying INSN.  */static inttry_pre_increment (insn, reg, amount)     rtx insn, reg;     int amount;{  register rtx use;  /* Nonzero if we can try to make a pre-increment or pre-decrement.     For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */  int pre_ok = 0;  /* Nonzero if we can try to make a post-increment or post-decrement.     For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...     It is possible for both PRE_OK and POST_OK to be nonzero if the machine     supports both pre-inc and post-inc, or both pre-dec and post-dec.  */  int post_ok = 0;  /* Nonzero if the opportunity actually requires post-inc or post-dec.  */  int do_post = 0;  /* From the sign of increment, see which possibilities are conceivable     on this target machine.  */#ifdef HAVE_PRE_INCREMENT  if (amount > 0)    pre_ok = 1;#endif#ifdef HAVE_POST_INCREMENT  if (amount > 0)    post_ok = 1;#endif#ifdef HAVE_PRE_DECREMENT  if (amount < 0)    pre_ok = 1;#endif#ifdef HAVE_POST_DECREMENT  if (amount < 0)    post_ok = 1;#endif  if (! (pre_ok || post_ok))    return 0;  /* It is not safe to add a side effect to a jump insn     because if the incremented register is spilled and must be reloaded     there would be no way to store the incremented value back in memory.  */  if (GET_CODE (insn) == JUMP_INSN)    return 0;  use = 0;  if (pre_ok)    use = find_use_as_address (PATTERN (insn), reg, 0);  if (post_ok && (use == 0 || use == (rtx) 1))    {      use = find_use_as_address (PATTERN (insn), reg, -amount);      do_post = 1;    }  if (use == 0 || use == (rtx) 1)    return 0;  if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))    return 0;  XEXP (use, 0) = gen_rtx (amount > 0			   ? (do_post ? POST_INC : PRE_INC)			   : (do_post ? POST_DEC : PRE_DEC),			   Pmode, reg);  /* Record that this insn now has an implicit side effect on X.  */  REG_NOTES (insn) = gen_rtx (EXPR_LIST, REG_INC, reg, REG_NOTES (insn));  return 1;}#endif /* AUTO_INC_DEC *//* Find the place in the rtx X where REG is used as a memory address.   Return the MEM rtx that so uses it.   If PLUSCONST is nonzero, search instead for a memory address equivalent to   (plus REG (const_int PLUSCONST)).   If such an address does not appear, return 0.   If REG appears more than once, or is used other than in such an address,   return (rtx)1.  */static rtxfind_use_as_address (x, reg, plusconst)     register rtx x;     rtx reg;     int plusconst;{  enum rtx_code code = GET_CODE (x);  char *fmt = GET_RTX_FORMAT (code);  register int i;  register rtx value = 0;  register rtx tem;  if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)    return x;  if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS      && XEXP (XEXP (x, 0), 0) == reg      && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT      && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)    return x;  if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)    {      /* If REG occurs inside a MEM used in a bit-field reference,	 that is unacceptable.  */      if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)	return (rtx) 1;    }  if (x == reg)    return (rtx) 1;  for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)    {      if (fmt[i] == 'e')	{	  tem = find_use_as_address (XEXP (x, i), reg, plusconst);	  if (value == 0)	    value = tem;	  else if (tem != 0)	    return (rtx) 1;	}      if (fmt[i] == 'E')	{	  register int j;	  for (j = XVECLEN (x, i) - 1; j >= 0; j--)	    {	      tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);	      if (value == 0)		value = tem;	      else if (tem != 0)		return (rtx) 1;	    }	}    }  return value;}/* Write information about registers and basic blocks into FILE.   This is part of making a debugging dump.  */voiddump_flow_info (file)     FILE *file;{  register int i;  static char *reg_class_names[] = REG_CLASS_NAMES;  fprintf (file, "%d registers.\n", max_regno);  for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)    if (reg_n_refs[i])      {	enum reg_class class;	fprintf (file, "\nRegister %d used %d times across %d insns",		 i, reg_n_refs[i], reg_live_length[i]);	if (reg_basic_block[i] >= 0)	  fprintf (file, " in block %d", reg_basic_block[i]);	if (reg_n_deaths[i] != 1)	  fprintf (file, "; dies in %d places", reg_n_deaths[i]);	if (reg_n_calls_crossed[i] == 1)	  fprintf (file, "; crosses 1 call", reg_n_calls_crossed[i]);	else if (reg_n_calls_crossed[i])	  fprintf (file, "; crosses %d calls", reg_n_calls_crossed[i]);	if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)	  fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));	class = reg_preferred_class (i);	if (class != GENERAL_REGS)	  {	    if (reg_preferred_or_nothing (i))	      fprintf (file, "; %s or none", reg_class_names[(int) class]);	    else	      fprintf (file, "; pref %s", reg_class_names[(int) class]);	  }	if (REGNO_POINTER_FLAG (i))	  fprintf (file, "; pointer");	fprintf (file, ".\n");      }  fprintf (file, "\n%d basic blocks.\n", n_basic_blocks);  for (i = 0; i < n_basic_blocks; i++)    {      register rtx head, jump;      register int regno;      fprintf (file, "\nBasic block %d: first insn %d, last %d.\n",	       i,	       INSN_UID (basic_block_head[i]),	       INSN_UID (basic_block_end[i]));      /* The control flow graph's storage is freed	 now when flow_analysis returns.	 Don't try to print it if it is gone.  */      if (basic_block_drops_in)	{	  fprintf (file, "Reached from blocks: ");	  head = basic_block_head[i];	  if (GET_CODE (head) == CODE_LABEL)	    for (jump = LABEL_REFS (head);		 jump != head;		 jump = LABEL_NEXTREF (jump))	      {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久免费观看| 免费欧美在线视频| 精品国产一区二区三区久久影院 | 日本一区二区三区免费乱视频 | 欧美日韩一区二区三区四区| 国产一区中文字幕| 丝袜美腿亚洲综合| 亚洲国产日韩a在线播放性色| 亚洲视频你懂的| 又紧又大又爽精品一区二区| 亚洲人成网站色在线观看| 中文字幕一区二区三区色视频| 国产精品乱码人人做人人爱| 成人欧美一区二区三区在线播放| 国产精品国产馆在线真实露脸| 亚洲乱码精品一二三四区日韩在线| 中文字幕亚洲成人| 一区二区国产盗摄色噜噜| 亚洲制服丝袜一区| 久久电影网电视剧免费观看| 国产精品一区二区x88av| 国产乱人伦精品一区二区在线观看| 国产精品一二三区| 99久久国产综合精品色伊| 91亚洲大成网污www| 欧洲一区二区三区免费视频| 91精品在线麻豆| 久久精品在线免费观看| 中文字幕 久热精品 视频在线| 日韩理论片一区二区| 亚洲高清免费一级二级三级| 国产麻豆精品一区二区| av成人动漫在线观看| 欧美日韩一二三| 久久综合精品国产一区二区三区| 亚洲婷婷国产精品电影人久久| 最新日韩av在线| 久久精品国产亚洲a| jlzzjlzz亚洲女人18| 欧美日韩国产bt| 国产女人18水真多18精品一级做| 亚洲精品中文在线观看| 麻豆成人在线观看| 99久久精品国产毛片| 日韩欧美视频在线| 国产精品国产三级国产普通话蜜臀| 天堂蜜桃一区二区三区| 国产91丝袜在线18| 日韩小视频在线观看专区| 欧美www视频| 亚洲乱码国产乱码精品精98午夜| 九色综合国产一区二区三区| 欧美性一区二区| 国产精品美女久久久久aⅴ国产馆| 亚洲不卡一区二区三区| 东方aⅴ免费观看久久av| 91精品久久久久久久久99蜜臂| 最新日韩在线视频| 国产精品一区二区91| 日韩一区二区三区电影 | 欧美午夜影院一区| 久久综合丝袜日本网| 午夜精品视频一区| 91视视频在线观看入口直接观看www| 日韩精品一区二区三区在线播放 | 欧美综合亚洲图片综合区| 久久青草欧美一区二区三区| 免费不卡在线观看| 欧美日产国产精品| 亚洲一二三四区| 91农村精品一区二区在线| 国产精品青草综合久久久久99| 捆绑调教一区二区三区| 777久久久精品| 天堂久久一区二区三区| 欧美日韩在线播放三区四区| 一级日本不卡的影视| 99re成人精品视频| 亚洲青青青在线视频| av在线不卡电影| 自拍av一区二区三区| av在线这里只有精品| 国产精品久久久久久久久动漫| 成人性生交大片免费看中文网站| 久久精品亚洲精品国产欧美kt∨| 国产精品66部| 亚洲国产激情av| 色中色一区二区| 亚洲精品大片www| 欧美麻豆精品久久久久久| 亚洲第一电影网| 欧美成人一区二区三区| 国模少妇一区二区三区| 欧美韩日一区二区三区四区| 99久久综合99久久综合网站| 一区二区三区四区在线播放| 9191精品国产综合久久久久久| 日韩精品乱码免费| 日韩欧美国产综合在线一区二区三区 | 五月天视频一区| 91精品综合久久久久久| 久久国产精品99久久人人澡| 国产日韩欧美不卡在线| 在线观看av一区二区| 日本不卡免费在线视频| 国产亚洲精品中文字幕| 91香蕉视频污| 久久精品国产亚洲高清剧情介绍 | 精品视频在线看| 精品一区二区三区视频在线观看| 中文在线一区二区| 一本到三区不卡视频| 乱中年女人伦av一区二区| 国产精品美女视频| 91精品国产综合久久香蕉麻豆| 国产乱妇无码大片在线观看| 亚洲综合一区二区精品导航| 久久九九久精品国产免费直播| 色综合久久久久| 久久99精品久久久久久| 亚洲精品亚洲人成人网在线播放| 精品久久国产字幕高潮| kk眼镜猥琐国模调教系列一区二区 | 免费看精品久久片| 国产精品久久夜| 2023国产精华国产精品| 欧美电影在哪看比较好| 国产福利一区二区三区视频| 午夜精品一区二区三区三上悠亚| 久久久久久久久97黄色工厂| 欧美老女人第四色| 激情文学综合插| 日韩电影网1区2区| 亚洲视频图片小说| 国产日韩欧美a| 精品国产一区久久| 欧美日韩精品一区二区| 91啦中文在线观看| 国产成人精品免费看| 亚洲v日本v欧美v久久精品| 中文字幕在线不卡一区| 久久色视频免费观看| 欧美一级淫片007| 91欧美一区二区| 高清beeg欧美| 国产在线精品一区二区| 日本亚洲三级在线| 亚洲国产美女搞黄色| 久久久久久一二三区| 日韩午夜中文字幕| 91麻豆精品国产综合久久久久久| 欧美另类z0zxhd电影| 欧美日韩一区中文字幕| 欧美色图一区二区三区| 91九色最新地址| 91国产免费看| 精品视频1区2区| 欧美日韩精品一区二区天天拍小说| 日本道精品一区二区三区| 国产黄人亚洲片| 成人精品视频网站| 国产盗摄一区二区三区| 国产一区二区三区在线观看免费 | 久久久久久97三级| 日韩免费一区二区三区在线播放| 欧美日韩亚洲不卡| 在线播放国产精品二区一二区四区 | 国内精品国产三级国产a久久| 国产综合久久久久影院| 青青草原综合久久大伊人精品 | 亚洲欧美一区二区在线观看| 国产精品视频麻豆| 国产精品第13页| 亚洲人成人一区二区在线观看| 亚洲成av人影院在线观看网| 欧美a级一区二区| 国产剧情一区二区三区| 91美女片黄在线观看91美女| 欧美性猛交xxxx黑人交| 日韩一二三四区| 亚洲欧洲成人精品av97| 一区在线中文字幕| 亚洲午夜电影网| 麻豆成人在线观看| 91小视频免费观看| 日韩一区二区三区电影| 久久九九国产精品| 亚洲综合av网| 国产成人精品影视| 色综合久久综合中文综合网| 91精品国产综合久久久久久| 久久综合色8888| 亚洲国产视频a| 国产v日产∨综合v精品视频| 欧美午夜一区二区三区| 久久久亚洲精华液精华液精华液| 亚洲欧美另类小说| 狠狠色综合播放一区二区| 91久久精品一区二区三| 精品国产一区二区在线观看|