免费注册 查看新帖 |

Chinaunix

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

关于GCC RTL中Standard Pattern Name [复制链接]

论坛徽章:
0
发表于 2013-11-17 19:23 |显示全部楼层
本帖最后由 adam_w 于 2013-11-17 19:49 编辑

经过阅读一些参考资料和一些实验,对于GCC中从GIMPLE到RTL的转换,我有如下的初步结论:
在从GIMPLE到RTL的转换过程中,GCC会将特定语义的GIMPLE语句转换成其对应的某个特定Standard Pattern Name(SPN)所描述的指令模板(在机器描述中定义),也就是说GIMPLE语句与SPN的对应是机器无关的。

请教各位:
1.不知道这个结论是否正确?
2. 请问GCC中的SPN在什么地方定义?

多谢了!
lazy_linux@126.com

论坛徽章:
0
发表于 2013-11-18 14:44 |显示全部楼层
请各位不吝赐教!

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
发表于 2013-11-18 18:01 |显示全部楼层
本帖最后由 EricFisher 于 2013-11-18 18:04 编辑

> 1.不知道这个结论是否正确?

应该是这样的,标准名字可以用来将tree转换为rtl,所以在expand过程中,不管target如何实现标准名字的rtl pattern,只是直接调用这些gen_SPN处理函数。不过,如果有些标准名字的pattern没有实现,gcc会尝试用别的pattern来生成rtl。

> 2. 请问GCC中的SPN在什么地方定义?

具体的gen_SPN函数,是在build gcc是,自动生成的,源文件位于build目录下,比如:insn-emit.c 中的 gen_addsi3函数。

论坛徽章:
0
发表于 2013-11-21 14:53 |显示全部楼层
回复 3# EricFisher

首先感谢版主!

>> 1.不知道这个结论是否正确?
>
> 应该是这样的,标准名字可以用来将tree转换为rtl,所以在expand过程中,不管target如何实现标准名字的rtl pattern,只是直接调用这些gen_SPN处理函数。不过,
>如果有些标准名字的pattern没有实现,gcc会尝试用别的pattern来生成rtl。

请问:
1. 这写标准的模式名称都包括哪些?我想具体指导每个SPN的名字,从而深入了解其转换过程。
2. 您说的“如果机器描述文件中缺少了某些SPN,gcc会尝试别的pattern来生成rtl”,这句话的如何理解?
我看到有些文档上说:“在MD文件中,只有命名的define_insn或者define_expand的指令模板才会被处理,并且编译器只能处理系统中硬编码(Hard-coded)的insn名称,即具有标准模板名称的指令模板,并且忽略所有的无命名、或者编译器本身所不能识别其名称的指令模板。同时,如果机器描述中没有提供编译器所需要的特定名称的指令模板时,系统将会出错并终止。”
这种说法和您的说法是矛盾的,不知道应该从什么地方入手去真正地验证这个问题?

>> 2. 请问GCC中的SPN在什么地方定义?
>
>具体的gen_SPN函数,是在build gcc是,自动生成的,源文件位于build目录下,比如:insn-emit.c 中的 gen_addsi3函数。
这句话是否可以这样理解,系统里面定义了gen_{name}函数,那么这个{name}就是一个SPN呢?

以上问题请版主赐教!再次感谢!

   

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
发表于 2013-11-22 09:14 |显示全部楼层
> 1. 这写标准的模式名称都包括哪些?我想具体指导每个SPN的名字,从而深入了解其转换过程。

http://gcc.gnu.org/onlinedocs/gc ... html#Standard-Names

> 2. 您说的“如果机器描述文件中缺少了某些SPN,gcc会尝试别的pattern来生成rtl”,这句话的如何理解?

你可以看到上面那个文档中有许多的标准名字,但是,你并不是都要实现了。也就是说,有些标准名字,如果实现了,那么就会生成它的RTL,如果没有实现,那么会根据你实现的那些标准名字,来生成别的等效的RTL。

> 这种说法和您的说法是矛盾的,不知道应该从什么地方入手去真正地验证这个问题?

但是,有些标准名字模式是必须要实现的,最常见的就是movm。文档里并没有说明那些是必须的,这个只能是在实现的时候,看gcc是否会报错。

> 这句话是否可以这样理解,系统里面定义了gen_{name}函数,那么这个{name}就是一个SPN呢?

是的。

论坛徽章:
0
发表于 2013-11-24 16:40 |显示全部楼层
多谢EricFisher版主,我再好好消化消化。
等搞明白了,一定向您汇报!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP