免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2007 | 回复: 2

find_valid_class() 内部错误 [复制链接]

论坛徽章:
0
发表于 2013-12-04 20:44 |显示全部楼层
gcc 4.7.2出现内部错误。gcc_assert (best_size != 0);

没看明白为啥。


  1. /* Find the largest class which has at least one register valid in
  2.    mode INNER, and which for every such register, that register number
  3.    plus N is also valid in OUTER (if in range) and is cheap to move
  4.    into REGNO.  Such a class must exist.  */

  5. static enum reg_class
  6. find_valid_class (enum machine_mode outer ATTRIBUTE_UNUSED,
  7.                   enum machine_mode inner ATTRIBUTE_UNUSED, int n,
  8.                   unsigned int dest_regno ATTRIBUTE_UNUSED)
  9. {
  10.   int best_cost = -1;
  11.   int rclass;
  12.   int regno;
  13.   enum reg_class best_class = NO_REGS;
  14.   enum reg_class dest_class ATTRIBUTE_UNUSED = REGNO_REG_CLASS (dest_regno);
  15.   unsigned int best_size = 0;
  16.   int cost;

  17.   for (rclass = 1; rclass < N_REG_CLASSES; rclass++)
  18.     {
  19.       int bad = 0;
  20.       int good = 0;
  21.       for (regno = 0; regno < FIRST_PSEUDO_REGISTER - n && ! bad; regno++)
  22.         if (TEST_HARD_REG_BIT (reg_class_contents[rclass], regno))
  23.           {
  24.             if (HARD_REGNO_MODE_OK (regno, inner))
  25.               {
  26.                 good = 1;
  27.                 if (! TEST_HARD_REG_BIT (reg_class_contents[rclass], regno + n)
  28.                     || ! HARD_REGNO_MODE_OK (regno + n, outer))
  29.                   bad = 1;
  30.               }
  31.           }

  32.       if (bad || !good)
  33.         continue;
  34.       cost = register_move_cost (outer, (enum reg_class) rclass, dest_class);

  35.       if ((reg_class_size[rclass] > best_size
  36.            && (best_cost < 0 || best_cost >= cost))
  37.           || best_cost > cost)
  38.         {
  39.           best_class = (enum reg_class) rclass;
  40.           best_size = reg_class_size[rclass];
  41.           best_cost = register_move_cost (outer, (enum reg_class) rclass,
  42.                                           dest_class);
  43.         }
  44.     }

  45.   gcc_assert (best_size != 0);

  46.   return best_class;
  47. }
复制代码

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
发表于 2013-12-05 10:58 |显示全部楼层
reload.c中的代码,是不是因为你的md文件写的有问题,导致的错误?如果是的话,最好是从源头找问题。

论坛徽章:
0
发表于 2013-12-06 00:34 |显示全部楼层
问题解决。TARGET_FUNCTION_VALUE函数没有正确实现MODE_COMPLEX_FLOAT
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP