<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>编译点滴 &#187; GCC</title>
	<atom:link href="http://www.lingcc.com/category/tech/gcc_tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lingcc.com</link>
	<description>编译器、虚拟机、程序设计语言、体系结构、软件调试、操作系统等等</description>
	<lastBuildDate>Sat, 04 Feb 2012 06:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Open64、LLVM、GCC源代码行数对比</title>
		<link>http://www.lingcc.com/2012/01/15/11963/</link>
		<comments>http://www.lingcc.com/2012/01/15/11963/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 11:59:30 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[LLVM]]></category>
		<category><![CDATA[open64]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[Open64]]></category>
		<category><![CDATA[代码量]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11963</guid>
		<description><![CDATA[使用如下命令，统计了一下这三个编译器的代码行数情况。 find . -type f -not -regex '\./\.git.*' &#124; xargs cat &#124; wc -l 结果如下，供参考。这三个编译器使用的都是各个代码库中的最新版本，因为《编译点滴》使用git svn工具，所以命令行里有“git”，而标明的版本号却是SVN的。 Open64（SVN R3782）： open64$ find . -type f -not -regex '\./\.git.*' &#124; xargs cat &#124; wc -l 13164644 LLVM（LLVM R148206, 包含Clang  ）： llvm$ find . -type f -not -regex '\./\.git.*' &#124; xargs cat &#124; wc -l 2468255 GCC（R183190）： gcc$ find <a href='http://www.lingcc.com/2012/01/15/11963/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F10%2F11799%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64编译器 5.0版本发布</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F06%2F15%2F10978%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64业内外人士对LLVM和Open64的观点</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F16%2F10317%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64课程—代码生成(CG)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F25%2F10418%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64课程–OpenMp和自动并行化</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F20%2F10065%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Gcc和Open64中的-fPIC选项</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/01/04/11490/' rel='bookmark' title='open64 doxygen 上线'>open64 doxygen 上线</a></li>
<li><a href='http://www.lingcc.com/2010/04/28/10807/' rel='bookmark' title='LLVM 2.7 发布'>LLVM 2.7 发布</a></li>
<li><a href='http://www.lingcc.com/2009/11/30/10168/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT I) part II'>Open64 课程–全局标量优化(WOPT I) part II</a></li>
<li><a href='http://www.lingcc.com/2009/12/13/10273/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT II)'>Open64 课程–全局标量优化(WOPT II)</a></li>
<li><a href='http://www.lingcc.com/2010/06/02/10955/' rel='bookmark' title='Google的野心&#8211;Native Client+LLVM'>Google的野心&#8211;Native Client+LLVM</a></li>
<li><a href='http://www.lingcc.com/2009/11/25/10127/' rel='bookmark' title='Open64 课程&#8211;全局标量优化(WOPT I)  part 1'>Open64 课程&#8211;全局标量优化(WOPT I)  part 1</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>使用如下命令，统计了一下这三个编译器的代码行数情况。<br />
<code>find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l</code></p>
<p>结果如下，供参考。这三个编译器使用的都是各个代码库中的最新版本，因为《编译点滴》使用git svn工具，所以命令行里有“git”，而标明的版本号却是SVN的。<br />
Open64（SVN R3782）：</p>
<p><code>open64$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l<br />
13164644</code></p>
<p>LLVM（LLVM R148206, 包含Clang  ）：<br />
<code>llvm$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l<br />
2468255</code></p>
<p>GCC（R183190）：<br />
<code>gcc$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l<br />
12823155</code></p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F10%2F11799%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64编译器 5.0版本发布</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F06%2F15%2F10978%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64业内外人士对LLVM和Open64的观点</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F16%2F10317%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64课程—代码生成(CG)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F25%2F10418%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64课程–OpenMp和自动并行化</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F20%2F10065%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Gcc和Open64中的-fPIC选项</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/01/04/11490/' rel='bookmark' title='open64 doxygen 上线'>open64 doxygen 上线</a></li>
<li><a href='http://www.lingcc.com/2010/04/28/10807/' rel='bookmark' title='LLVM 2.7 发布'>LLVM 2.7 发布</a></li>
<li><a href='http://www.lingcc.com/2009/11/30/10168/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT I) part II'>Open64 课程–全局标量优化(WOPT I) part II</a></li>
<li><a href='http://www.lingcc.com/2009/12/13/10273/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT II)'>Open64 课程–全局标量优化(WOPT II)</a></li>
<li><a href='http://www.lingcc.com/2010/06/02/10955/' rel='bookmark' title='Google的野心&#8211;Native Client+LLVM'>Google的野心&#8211;Native Client+LLVM</a></li>
<li><a href='http://www.lingcc.com/2009/11/25/10127/' rel='bookmark' title='Open64 课程&#8211;全局标量优化(WOPT I)  part 1'>Open64 课程&#8211;全局标量优化(WOPT I)  part 1</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2012/01/15/11963/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>GCC如何进出GIMPLE中间表示</title>
		<link>http://www.lingcc.com/2011/11/29/11859/</link>
		<comments>http://www.lingcc.com/2011/11/29/11859/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 06:00:18 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[前端和程序分析]]></category>
		<category><![CDATA[后端优化与处理器]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[GIMPLE]]></category>
		<category><![CDATA[rtl]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11859</guid>
		<description><![CDATA[GIMPLE中间表示，是GCC中机器无关的中间表示，机器无关的优化基本都在这个层次上做。 本文先来看看GCC是如何进、出GIMPLE中间表示的。 Table of Contents 1 从 GENERIC 到GIMPLE 2 从 GIMPLE 到 RTL 3 参考 1 从 GENERIC 到GIMPLE GENERIC是GCC最顶层的语言无关中间表示。 GCC 利用 “gimplifier” 将 GENERIC 中间表示转换为 GIMPLE中间表示。 因为GENERIC 是语法树形式的，所以这个转换过程是递归的。 对于一个函数，GENERIC中间表示将其存储在FUNCTION_DECL树节点中的DECL_SAVED_TREE域中。 然后通过调用函数gimplify_function_tree将其转换为GIMPLE. 具体的转换过程一般是 gimplify.c: gimplify_function_tree -&#62; gimplify_body -&#62; gimplify_stmt -&#62; gimplify_expr . GIMPLE中有一个lower的动作，用于将高层次的GIMPLE表示，解析成低层次的，这个lower动作在pass_lower_cf中完成。 比如，嵌套的作用域和表达式。 可以使用选项 -fdump-tree-gimple得到类C的GIMPLE表达形式 如下面程序： int main() { int a; if (a) { <a href='http://www.lingcc.com/2011/11/29/11859/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F23%2F11157%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64中的gcc前端</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC几个选项学习</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64、LLVM、GCC源代码行数对比</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC Internal 中文文档上线</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">仔细端详GCC 4.6的新特性</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/09/05/11185/' rel='bookmark' title='extern inline问题'>extern inline问题</a></li>
<li><a href='http://www.lingcc.com/2011/11/28/11851/' rel='bookmark' title='Illegal Instruction 错误初窥'>Illegal Instruction 错误初窥</a></li>
<li><a href='http://www.lingcc.com/2012/01/30/11974/' rel='bookmark' title='大软件的烦恼与编译技术'>大软件的烦恼与编译技术</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/10/09/11296/' rel='bookmark' title='宏和内联函数'>宏和内联函数</a></li>
<li><a href='http://www.lingcc.com/2011/08/14/11695/' rel='bookmark' title='TIPS for writing easily auto-vectorized code'>TIPS for writing easily auto-vectorized code</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>GIMPLE中间表示，是GCC中机器无关的中间表示，机器无关的优化基本都在这个层次上做。<br />
本文先来看看GCC是如何进、出GIMPLE中间表示的。<span id="more-11859"></span></p>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1 从 GENERIC 到GIMPLE </a></li>
<li><a href="#sec-2">2 从 GIMPLE 到 RTL </a></li>
<li><a href="#sec-3">3 参考 </a></li>
</ul>
</div>
</div>
<div id="outline-container-1" class="outline-2">
<h2 id="sec-1"><span class="section-number-2">1</span> 从 GENERIC 到GIMPLE</h2>
<div id="text-1" class="outline-text-2">
<p>GENERIC是GCC最顶层的语言无关中间表示。<br />
GCC 利用 “gimplifier” 将 GENERIC 中间表示转换为 GIMPLE中间表示。<br />
因为GENERIC 是语法树形式的，所以这个转换过程是递归的。</p>
<p>对于一个函数，GENERIC中间表示将其存储在FUNCTION_DECL树节点中的DECL_SAVED_TREE域中。<br />
然后通过调用函数gimplify_function_tree将其转换为GIMPLE.<br />
具体的转换过程一般是 gimplify.c: gimplify_function_tree -&gt; gimplify_body -&gt; gimplify_stmt -&gt; gimplify_expr .</p>
<p>GIMPLE中有一个lower的动作，用于将高层次的GIMPLE表示，解析成低层次的，这个lower动作在pass_lower_cf中完成。<br />
比如，嵌套的作用域和表达式。 可以使用选项 -fdump-tree-gimple得到类C的GIMPLE表达形式</p>
<p>如下面程序：</p>
<pre class="src src-c"><span style="color: #6920ac;">int</span> <span style="color: #0000cd;">main</span>()
{
  <span style="color: #6920ac;">int</span> <span style="color: #0000cd;">a</span>;
  <span style="color: #ff0000;">if</span> (a)
    {
      <span style="color: #6920ac;">int</span> <span style="color: #0000cd;">b</span>;
      b = 2 + a + b;
    }
  <span style="color: #ff0000;">return</span> 0;
}</pre>
<p>使用该选项得到的转换成C语言形式的GIMPLE中间表示为：</p>
<pre class="src src-c"><span style="color: #0000cd;">main</span> ()
{
  <span style="color: #6920ac;">int</span> <span style="color: #0000cd;">D</span>.1593;
  <span style="color: #6920ac;">int</span> <span style="color: #0000cd;">D</span>.1594;
  <span style="color: #6920ac;">int</span> <span style="color: #0000cd;">a</span>;

  <span style="color: #ff0000;">if</span> (a != 0) <span style="color: #ff0000;">goto</span> &lt;D.1591&gt;; <span style="color: #ff0000;">else</span> <span style="color: #ff0000;">goto</span> &lt;D.1592&gt;;
  &lt;D.1591&gt;:
  {
    <span style="color: #6920ac;">int</span> <span style="color: #0000cd;">b</span>;

    D.1593 = a + 2;
    b = D.1593 + b;
  }
  &lt;D.1592&gt;:
  D.1594 = 0;
  <span style="color: #ff0000;">return</span> D.1594;
}</pre>
</div>
</div>
<div id="outline-container-2" class="outline-2">
<h2 id="sec-2"><span class="section-number-2">2</span> 从 GIMPLE 到 RTL</h2>
<div id="text-2" class="outline-text-2">
<p>做完机器无关优化之后，GCC会将GIMPLE转换为RTL中间表示。<br />
在RTL上，基本都是机器相关的优化，以及寄存器分配，指令调度等功能。<br />
从GIMPLE到RTL中间表示，则是在expr.c:expand_expr_real中，</p>
</div>
</div>
<div id="outline-container-3" class="outline-2">
<h2 id="sec-3"><span class="section-number-2">3</span> 参考</h2>
<div id="text-3" class="outline-text-2">
<ul>
<li><a href="http://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html#GIMPLE">http://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html#GIMPLE</a></li>
<li><a href="http://stackoverflow.com/questions/4917756/need-help-on-gcc-gimple">http://stackoverflow.com/questions/4917756/need-help-on-gcc-gimple</a></li>
<li><a href="http://stackoverflow.com/questions/731639/adding-a-pass-to-gcc">http://stackoverflow.com/questions/731639/adding-a-pass-to-gcc</a></li>
<li><a href="http://gcc.gnu.org/wiki/GIMPLE">http://gcc.gnu.org/wiki/GIMPLE</a></li>
<li><a href="http://www.cse.iitb.ac.in/~uday/courses/cs715-09/gcc-gimple.pdf">http://www.cse.iitb.ac.in/~uday/courses/cs715-09/gcc-gimple.pdf</a></li>
<li><a href="http://www.public.asu.edu/~kbai3/docs/Gimple.pdf">http://www.public.asu.edu/~kbai3/docs/Gimple.pdf</a></li>
</ul>
</div>
</div>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F23%2F11157%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64中的gcc前端</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC几个选项学习</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64、LLVM、GCC源代码行数对比</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC Internal 中文文档上线</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">仔细端详GCC 4.6的新特性</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/09/05/11185/' rel='bookmark' title='extern inline问题'>extern inline问题</a></li>
<li><a href='http://www.lingcc.com/2011/11/28/11851/' rel='bookmark' title='Illegal Instruction 错误初窥'>Illegal Instruction 错误初窥</a></li>
<li><a href='http://www.lingcc.com/2012/01/30/11974/' rel='bookmark' title='大软件的烦恼与编译技术'>大软件的烦恼与编译技术</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/10/09/11296/' rel='bookmark' title='宏和内联函数'>宏和内联函数</a></li>
<li><a href='http://www.lingcc.com/2011/08/14/11695/' rel='bookmark' title='TIPS for writing easily auto-vectorized code'>TIPS for writing easily auto-vectorized code</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/11/29/11859/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>说说静态单赋值（SSA,Static Single-Assignment)</title>
		<link>http://www.lingcc.com/2011/08/13/11685/</link>
		<comments>http://www.lingcc.com/2011/08/13/11685/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 10:52:24 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[open64]]></category>
		<category><![CDATA[前端和程序分析]]></category>
		<category><![CDATA[后端优化与处理器]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[Compiler Optimization]]></category>
		<category><![CDATA[Control Flow]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[Open64]]></category>
		<category><![CDATA[SSA]]></category>
		<category><![CDATA[Static Single Assignment(SSA)]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11685</guid>
		<description><![CDATA[精确的数据流分析是让编译优化能高效进行的基础。 SSA就是一种高效的数据流分析技术，目前几乎所有的现代编译器，如GCC、Open64、LLVM都有将SSA技术的支持， 不仅仅是编译器，Jikes RVM, HotSpot JVM, .Net的Mono，Python的Pypy， Andoroid的Dalvik，这些虚拟机/解释器中的Just-in-Time Compiler也有了SSA的支持。 Firefox的下一代JavaScript引擎IonMonkey中，也将为其JIT引入SSA。 可以看到，几乎所有热门的语言所用的热门编译器/解释器/虚拟机中都有了SSA。 Table of Contents 1 SSA是什么？ 2 SSA的作用 2.1 SSA与寄存器分配 3 SSA的转换 3.1 从普通中间表示到SSA 3.2 从SSA到普通中间表示 4 更复杂情况下的SSA 4.1 数组、指针等别名 4.2 堆上的存储 4.3 复合结构–结构体 5 GCC中的SSA 6 open64 中的SSA 7 相关资料和文献 1 SSA是什么？ SSA即静态单赋值，Static Single-Assignment，这是一种中间表示形式。 之所以称之为单赋值，是因为每个名字在SSA中仅被赋值一次. 如下图中的一段程序的控制流图。从这张图中可以看到，最后一个基本块中y值的定义或者来自左侧的分支，或者来自右侧的分支。 将每个赋值语句中的变量赋予一个唯一的名称后，一般新名称采用原变量+版本号（Version）的形式。 对于上面这段控制流图，就变成如下形式： 这张图中有个问题，有分支时，若分支中有对变量的操作，就无法确定使用了哪个版本的变量。 因此，引入了PHI节点。如下图所示： PHI将分支中的y1和y2连接，并生成一个新的定义y3。有了PHI节点后，最后一个基本块中y3的定义来自之前的PHI节点，PHI节点中的两个操作数y1和y2分别来自左右两个分支。 2 SSA的作用 在SSA中间表示中，可以保证每个被使用的变量都有唯一的定义，即SSA能带来精确的使用–定义关系。 而在图SSA_example1.1中的y值定义却非常模糊。 概括起来，SSA带来四大益处： <a href='http://www.lingcc.com/2011/08/13/11685/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F30%2F10168%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64 课程–全局标量优化(WOPT I) part II</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F13%2F10273%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64 课程–全局标量优化(WOPT II)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F25%2F10127%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64 课程–全局标量优化(WOPT I)  part 1</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F10%2F11799%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64编译器 5.0版本发布</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F14%2F10295%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64课程–过程间分析优化(IPA)</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/11/10/11799/' rel='bookmark' title='Open64编译器 5.0版本发布'>Open64编译器 5.0版本发布</a></li>
<li><a href='http://www.lingcc.com/2009/12/28/10469/' rel='bookmark' title='Open64课程-结语'>Open64课程-结语</a></li>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
<li><a href='http://www.lingcc.com/2009/12/13/10273/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT II)'>Open64 课程–全局标量优化(WOPT II)</a></li>
<li><a href='http://www.lingcc.com/2010/01/03/10573/' rel='bookmark' title='过程间分析(InterProcedural Analysis)很好很强大'>过程间分析(InterProcedural Analysis)很好很强大</a></li>
<li><a href='http://www.lingcc.com/2009/11/30/10168/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT I) part II'>Open64 课程–全局标量优化(WOPT I) part II</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>精确的数据流分析是让编译优化能高效进行的基础。 SSA就是一种高效的数据流分析技术，目前几乎所有的现代编译器，如GCC、Open64、LLVM都有将SSA技术的支持， 不仅仅是编译器，Jikes RVM, HotSpot JVM, .Net的Mono，Python的Pypy， Andoroid的Dalvik，这些虚拟机/解释器中的Just-in-Time Compiler也有了SSA的支持。 Firefox的下一代JavaScript引擎IonMonkey中，也将为其JIT引入SSA。<span id="more-11685"></span></p>
<p>可以看到，几乎所有热门的语言所用的热门编译器/解释器/虚拟机中都有了SSA。</p>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1 SSA是什么？</a></li>
<li><a href="#sec-2">2 SSA的作用</a>
<ul>
<li><a href="#sec-2.1">2.1 SSA与寄存器分配</a></li>
</ul>
</li>
<li><a href="#sec-3">3 SSA的转换</a>
<ul>
<li><a href="#sec-3.1">3.1 从普通中间表示到SSA</a></li>
<li><a href="#sec-3.2">3.2 从SSA到普通中间表示</a></li>
</ul>
</li>
<li><a href="#sec-4">4 更复杂情况下的SSA</a>
<ul>
<li><a href="#sec-4.1">4.1 数组、指针等别名</a></li>
<li><a href="#sec-4.2">4.2 堆上的存储</a></li>
<li><a href="#sec-4.3">4.3 复合结构–结构体</a></li>
</ul>
</li>
<li><a href="#sec-5">5 GCC中的SSA</a></li>
<li><a href="#sec-6">6 open64 中的SSA</a></li>
<li><a href="#sec-7">7 相关资料和文献</a></li>
</ul>
</div>
</div>
<div id="outline-container-1">
<h2 id="sec-1">1 SSA是什么？</h2>
<div id="text-1">
<p>SSA即静态单赋值，Static Single-Assignment，这是一种中间表示形式。 之所以称之为单赋值，是因为每个名字在SSA中仅被赋值一次.</p>
<p>如下图中的一段程序的控制流图。从这张图中可以看到，最后一个基本块中y值的定义或者来自左侧的分支，或者来自右侧的分支。</p>
<div id="attachment_11688" class="wp-caption alignnone" style="width: 210px"><a href="http://www.lingcc.com/2011/08/13/11685/ssa_example1-1/" rel="attachment wp-att-11688"><img class="size-full wp-image-11688" title="SSA_example1.1" src="http://www.lingcc.com/wp-content/uploads/2011/08/SSA_example1.1.png" alt="SSA_example1.1" width="200" height="290" /></a><p class="wp-caption-text">SSA_example1.1</p></div>
<p>将每个赋值语句中的变量赋予一个唯一的名称后，一般新名称采用原变量+版本号（Version）的形式。 对于上面这段控制流图，就变成如下形式：</p>
<div id="attachment_11689" class="wp-caption alignnone" style="width: 210px"><a href="http://www.lingcc.com/2011/08/13/11685/ssa_example1-2/" rel="attachment wp-att-11689"><img class="size-full wp-image-11689" title="SSA_example1.2" src="http://www.lingcc.com/wp-content/uploads/2011/08/SSA_example1.2.png" alt="SSA_example1.2" width="200" height="290" /></a><p class="wp-caption-text">SSA_example1.2</p></div>
<p>这张图中有个问题，有分支时，若分支中有对变量的操作，就无法确定使用了哪个版本的变量。 因此，引入了PHI节点。如下图所示：</p>
<div id="attachment_11690" class="wp-caption alignnone" style="width: 210px"><a href="http://www.lingcc.com/2011/08/13/11685/ssa_example1-3/" rel="attachment wp-att-11690"><img class="size-full wp-image-11690" title="SSA_example1.3" src="http://www.lingcc.com/wp-content/uploads/2011/08/SSA_example1.3.png" alt="SSA_example1.3" width="200" height="298" /></a><p class="wp-caption-text">SSA_example1.3</p></div>
<p>PHI将分支中的y1和y2连接，并生成一个新的定义y3。有了PHI节点后，最后一个基本块中y3的定义来自之前的PHI节点，PHI节点中的两个操作数y1和y2分别来自左右两个分支。</p>
</div>
</div>
<div id="outline-container-2">
<h2 id="sec-2">2 SSA的作用</h2>
<div id="text-2">
<p>在SSA中间表示中，可以保证每个被使用的变量都有唯一的定义，即SSA能带来精确的使用–定义关系。 而在图SSA_example1.1中的y值定义却非常模糊。</p>
<p>概括起来，SSA带来四大益处：</p>
<ul>
<li>因为SSA使得每个变量都有唯一的定义，因此数据流分析和优化算法可以更加简单</li>
<li>使用-定义关系链所消耗空间从指数增长降低为线性增长。若一个变量有N个使用和M个定义，若不采用SSA，则存在M×N个使用-定义关系。</li>
<li>SSA中因为使用和定义的关系更加的精确，能简化构建干扰图的算法</li>
<li>源程序中对同一个变量的不相关的若干次使用，在SSA形式中会转变成对不同变量的使用，因此能消除很多不必要的依赖关系。</li>
</ul>
<p>有了精确的对象使用–定义关系，许多利用使用–定义关系的优化就能更精确、更彻底、更高效。如</p>
<ul>
<li>常数传播</li>
<li>死代码删除</li>
<li>全局</li>
<li>部分冗余删除</li>
<li>强度削弱</li>
<li>寄存器分配</li>
</ul>
</div>
<div id="outline-container-2.1">
<h3 id="sec-2.1">2.1 SSA与寄存器分配</h3>
<div id="text-2.1">
<p>因为SSA使得依赖分析更加简单、精确，而且PHI节点中的变量不可能同时活跃。因此在SSA形式能协助完成寄存器分配。 实际上，GCC最早的SSA就是GCC 3中RTL阶段。</p>
</div>
</div>
</div>
<div id="outline-container-3">
<h2 id="sec-3">3 SSA的转换</h2>
<div id="text-3">
<p>讲了这么多有关SSA的优点，接下来介绍一下一般编译器构建SSA的方式。</p>
</div>
<div id="outline-container-3.1">
<h3 id="sec-3.1">3.1 从普通中间表示到SSA</h3>
<div id="text-3.1">
<p>两步走战略：</p>
<ul>
<li>插入PHI节点： PHI节点要插在控制流图的汇聚点处（joint point), 只要在汇聚点之前的分支中有针对某个变量的修改， 就需要在该汇聚点插入针对该变量的PHI节点。 PHI节点的操作数是分支路径中重新定义的变量。</li>
<li>变量重命名： 在插入PHI节点后，SSA中所有针对变量的定义就具备了，接下来就依次在定义处重命名变量，并替换对应的变量使用处。</li>
</ul>
<p>此外，为了节省内存空间，简化SSA上的算法，我们需要将插入的PHI节点数目最小化。 因为PHI节点本身只是一个概念性的节点，若插入过多不必要的PHI节点，算法就需要在控制流图的汇聚点针对每个分支做分析。 可以借用变量的支配边界（dominance frontier)进行PHI节点数目最消化。一般都通过直接计算支配边界的方式插入PHI节点。</p>
</div>
</div>
<div id="outline-container-3.2">
<h3 id="sec-3.2">3.2 从SSA到普通中间表示</h3>
<div id="text-3.2">
<p>为什么还要从SSA转换回去呢？很简单，处理器不能直接执行PHI节点对应的操作。最简单的做法，直接拷贝，如下图所示：</p>
<div id="attachment_11686" class="wp-caption alignnone" style="width: 310px"><a href="http://www.lingcc.com/2011/08/13/11685/de-ssa/" rel="attachment wp-att-11686"><img class="size-medium wp-image-11686" title="de-ssa" src="http://www.lingcc.com/wp-content/uploads/2011/08/de-ssa-300x100.png" alt="out of ssa" width="300" height="100" /></a><p class="wp-caption-text">out of ssa</p></div>
<p>但这样有一个问题，如下图。简单的拷贝算法可能改变代码的语义：</p>
<div id="attachment_11687" class="wp-caption alignnone" style="width: 310px"><a href="http://www.lingcc.com/2011/08/13/11685/de-ssa-problem/" rel="attachment wp-att-11687"><img class="size-medium wp-image-11687" title="de-ssa-problem" src="http://www.lingcc.com/wp-content/uploads/2011/08/de-ssa-problem-300x128.png" alt="out of ssa problem" width="300" height="128" /></a><p class="wp-caption-text">out of ssa problem</p></div>
<p>正确的做法：</p>
<ul>
<li>对PHI节点的操作数和结果重命名，使其名称相同，即变成同一个变量</li>
<li>再在分支中插入拷贝操作</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-4">
<h2 id="sec-4">4 更复杂情况下的SSA</h2>
<div id="outline-container-4.1">
<h3 id="sec-4.1">4.1 数组、指针等别名</h3>
<div id="text-4.1">
<p>上面关于SSA的讨论基本都是针对单个简单变量的SSA操作，那么对于复杂的指针、数组之类的访存,SSA应该如何处理呢？ 数组和指针使得编译器无法确定define和use的具体变量。</p>
<p>参考资料7给出了一种定义方式，通过引入maydef，mayuse和zero version使得编译器也能对别名（即指针和数组）存在的程序做SSA分析。 若通过指针为其所指区域赋值，就在此处插入maydef，表示可能对变量做了定义。同理，对使用指针所指向区域的值的，就插入一个mayuse。 因为无法确定指针所指向的到底是哪个变量，为了正确性，需要对所有变量都插入maydef动作。同样mayuse也是针对所有变量的。</p>
<p>当指针操作较多时，这种方式就会引入过多的新变量版本。因此就增加了zero version。 zero version的作用就是尽量把maydef所带来的版本数降低。 将那些很可能不会别名的都使用相同的zero version。 比如某个变量通过maydef产生了一个新版本之后，若还会有新的maydef操作，则直接生成zero version，不再生成新的version。</p>
</div>
</div>
<div id="outline-container-4.2">
<h3 id="sec-4.2">4.2 堆上的存储</h3>
<div id="text-4.2">
<p>在堆上分配的存储空间，一般编译器都将整个堆看作一个对象，来做SSA。</p>
</div>
</div>
<div id="outline-container-4.3">
<h3 id="sec-4.3">4.3 复合结构–结构体</h3>
<div id="text-4.3">
<p>因为结构体也是由很多元素构成的，所以就存在两种处理方式：把结构体整个看作一个整体做SSA、把结构体的每个元素看作一个对象做SSA。 后者相比前者，因为分的更细，在结构体操作频繁的程序中能带来不错的优化效果。</p>
</div>
</div>
</div>
<div id="outline-container-5">
<h2 id="sec-5">5 GCC中的SSA</h2>
<div id="text-5">
<p>GCC的SSA</p>
<ul>
<li>tree-ssa.c</li>
<li>tree-into-ssa.c:将函数转换为SSA形式，插入PHI节点，对于未初始化的变量给出警告。</li>
<li>tree-ssa-dce.c:扫描整个函数，标记无副作用且结果并未被使用的语句，所有存储操作都视为有副作用。</li>
<li>tree-ssa-dom.c:支配关系相关优化：复写传播、常数传播、表达式简化、冗余消除、Jump Threading？</li>
<li>tree-ssa-forwprop.c:前向传播单一引用变量，通过将仅使用一次的变量用相应的表达式替代来尝试容易删除。</li>
<li>tree-ssa-copyrename.c:尝试将由拷贝动作产生的SSA变量用原变量替换之，优化符号表。</li>
<li>tree-ssa-phiopt.c: 识别表达条件表达式的phi节点，并将其重写为直线代码。</li>
<li>tree-ssa-alias.c:流敏感基于SSA的指向分析，得到可能-别名，一定-别名和逃逸分析信息。 这些信息将用于将变量从内存中地址可用对象提升为非别名变量，这样这些变量就能使用SSA形式的分析和优化了。</li>
<li>tree-ssa-structalias.c:用于过程间的指向分析。</li>
<li>tree-sra.c:将合适的无别名局部复合变量转换为一个标量集合，并进而转换为SSA形式。</li>
<li>tree-ssa-dse.c:删除那些无用的存储操作</li>
<li>tree-ssa-sink.c:将存储和赋值语句尽量下沉到和它们的使用点接近的位置。</li>
<li>tree-ssa-pre.c:部分冗余删除、load语句移动、完全冗余删除</li>
<li>tree-ssa-loop.c: SSA形式的循环优化
<ul>
<li>tree-ssa-loop-im.c:循环无关语句移动</li>
<li>tree-ssa-loop-ivcanon.c:循环标准化</li>
<li>tree-ssa-loop-ivopts.c:索引变量优化</li>
<li>tree-ssa-loop-unswitch.c:将循环无关的条件跳转移到循环外</li>
<li>tree-vectorizer.c, tree-vect-analyze.c, tree-vect-transform.c:自动向量化</li>
</ul>
</li>
<li>tree-ssa-ccp.c:条件常数传播</li>
<li>tree-ssa-copy.c:条件复写传播</li>
<li>tree-vrp.c:取值范围传播</li>
<li>tree-outof-ssa.c:从SSA形式转换回普通形式</li>
</ul>
</div>
</div>
<div id="outline-container-6">
<h2 id="sec-6">6 open64 中的SSA</h2>
<div id="text-6">
<p>open64中的SSA主要用于循环嵌套优化、过程间优化以及普通的函数内优化。 除了循环变换和内联优化外的所有机器无关优化都基于SSA做。 这部分可以说是Open64的重要卖点，对应的代码在osprey/be/opt下。</p>
<p>Open64在没有过程间优化时，主要以函数为单位进行，基于控制流图和别名分析得到的信息构建SSA。</p>
<ul>
<li>opt_goto.cxx：goto语句转换，方便做SSA</li>
<li>opt_loop.cxx：循环正规化</li>
<li>opt_sym.cxx：构建相关符号表</li>
<li>opt_alias_class.cxx：别名分类，方便别名分析</li>
<li>opt_cfg.cxx：构建控制流图，包括支配树，不可到达代码识别，if语句转换</li>
<li>opt_tail.cxx：尾递归消除</li>
<li>opt_alias_analysis.cxx：流无关别名分析</li>
<li>opt_ssa.cxx：构建基于WHIRL的SSA</li>
<li>opt_dse.cxx：死store删除</li>
<li>opt_htable.cxx：构建HSSA–基于哈希的全局值编号SSA</li>
<li>opt_ivr.cxx：索引变量标准化</li>
<li>opt_prop.cxx：复写传播</li>
<li>opt_revise_ssa.cxx：将非直接变量展开成直接变量</li>
<li>opt_dce.cxx：死代码删除</li>
<li>opt_cfg_trans.cxx：控制流转换</li>
<li>opt_rename.cxx：SSA变量重命名、更新</li>
<li>opt_du.cxx：构建define-use信息</li>
<li>opt_etable.cxx：基于表达式的部分冗余删除</li>
<li>opt_estr.cxx：强度削弱</li>
<li>opt_ehoist.cxx：代码提升</li>
<li>opt_lftr2.cxx：线性代码测试、替换</li>
<li>opt_vn.cxx：基于值编号的完全冗余删除</li>
<li>opt_ltable.cxx：针对load的部分冗余删除</li>
<li>opt_stable.cxx：store Partial Redundancy Elimination 针对store的部分冗余删除</li>
<li>opt_bdce.cxx： Bitwise dead code elimination–针对结构体</li>
<li>opt_htable_emit.cxx: 从SSA转换回WHIRL中间表示</li>
</ul>
</div>
</div>
<div id="outline-container-7">
<h2 id="sec-7">7 相关资料和文献</h2>
<div id="text-7">
<ul>
<li><a href="http://en.wikipedia.org/wiki/Static_single_assignment_form">http://en.wikipedia.org/wiki/Static_single_assignment_form</a></li>
<li><a href="http://en.wikipedia.org/wiki/SpiderMonkey_%28JavaScript_engine%29">http://en.wikipedia.org/wiki/SpiderMonkey_%28JavaScript_engine%29</a></li>
<li>Advanced Compiler Design and Implementation, by Steven S. Muchnick, Page 252-265</li>
<li>Modern Compiler Implementation in C， by Andrew W. Appel, Page 433-473</li>
<li>Crafting A Compiler, by Charles N. Fischer, etc , Page 410-414</li>
<li>8. Static Single Assignment Form， by Marcus Denker, <a href="http://marcusdenker.de/talks/08CC/08IntroSSA.pdf">http://marcusdenker.de/talks/08CC/08IntroSSA.pdf</a></li>
<li>Effective Representation of Aliases and Indirect Memory Operations in SSA Form, Fred Chow, Sun Chan, etc. Compiler Construction 1996</li>
</ul>
</div>
</div>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F30%2F10168%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64 课程–全局标量优化(WOPT I) part II</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F13%2F10273%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64 课程–全局标量优化(WOPT II)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F25%2F10127%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64 课程–全局标量优化(WOPT I)  part 1</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F10%2F11799%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64编译器 5.0版本发布</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F14%2F10295%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F13%2F11685%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64课程–过程间分析优化(IPA)</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/11/10/11799/' rel='bookmark' title='Open64编译器 5.0版本发布'>Open64编译器 5.0版本发布</a></li>
<li><a href='http://www.lingcc.com/2009/12/28/10469/' rel='bookmark' title='Open64课程-结语'>Open64课程-结语</a></li>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
<li><a href='http://www.lingcc.com/2009/12/13/10273/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT II)'>Open64 课程–全局标量优化(WOPT II)</a></li>
<li><a href='http://www.lingcc.com/2010/01/03/10573/' rel='bookmark' title='过程间分析(InterProcedural Analysis)很好很强大'>过程间分析(InterProcedural Analysis)很好很强大</a></li>
<li><a href='http://www.lingcc.com/2009/11/30/10168/' rel='bookmark' title='Open64 课程–全局标量优化(WOPT I) part II'>Open64 课程–全局标量优化(WOPT I) part II</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/08/13/11685/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GCC几个选项学习</title>
		<link>http://www.lingcc.com/2011/06/27/11679/</link>
		<comments>http://www.lingcc.com/2011/06/27/11679/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 12:20:32 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[选项]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11679</guid>
		<description><![CDATA[最近研究了一把GCC的选项，比较有意思，选些出来，学习学习。编译器作为程序员的重要工具，GCC作为编译器中应用最广泛的，无不处处体现出贴心的设计和功能支持。 Table of Contents 1 -dumpmachine 2 -xc 3 -dM 4 -print-file-name=include 5 -isystem DIR 6 -nostdinc/-nostdinc++ 7 -Wp/-Wa/-Wl 8 -EL/-EB 9 -DMACRO/-UMACRO 10 -G num 11 -msym32/-mnosym32 12 -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks 13 -mcheck-zero-division/-mno-check-zero-division 14 -mabicalls/-mno-abicalls 15 -mbranch-likely/-mno-branch-likely 16 -fstack-protector 17 -fstrict-overflow 18 -fconserve-stack 19 参考 1 -dumpmachine 给出当前使用GCC的信息,在erlv的Debian AMD64上，结果如下。 关于GCC的这些字段是什么意思，请参考这篇博文： $ gcc -dumpmachine x86_64-linux-gnu 2 -xc <a href='http://www.lingcc.com/2011/06/27/11679/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F20%2F10065%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Gcc和Open64中的-fPIC选项</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F08%2F10609%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC中的pie和fpie选项</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC如何进出GIMPLE中间表示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F19%2F11208%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC即将支持龙芯3A</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F23%2F11157%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64中的gcc前端</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/12/05/11872/' rel='bookmark' title='Linux 内核中的.S文件'>Linux 内核中的.S文件</a></li>
<li><a href='http://www.lingcc.com/2010/08/23/11157/' rel='bookmark' title='open64中的gcc前端'>open64中的gcc前端</a></li>
<li><a href='http://www.lingcc.com/2008/01/23/9891/' rel='bookmark' title='我的xorg.conf'>我的xorg.conf</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/01/08/10609/' rel='bookmark' title='GCC中的pie和fpie选项'>GCC中的pie和fpie选项</a></li>
<li><a href='http://www.lingcc.com/2010/03/25/10717/' rel='bookmark' title='为龙芯电脑安装操作系统常见问题'>为龙芯电脑安装操作系统常见问题</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>最近研究了一把GCC的选项，比较有意思，选些出来，学习学习。编译器作为程序员的重要工具，GCC作为编译器中应用最广泛的，无不处处体现出贴心的设计和功能支持。<br />
<span id="more-11679"></span></p>
<div id="table-of-contents"></div>
<div>
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1 -dumpmachine </a></li>
<li><a href="#sec-2">2 -xc </a></li>
<li><a href="#sec-3">3 -dM </a></li>
<li><a href="#sec-4">4 -print-file-name=include </a></li>
<li><a href="#sec-5">5 -isystem DIR </a></li>
<li><a href="#sec-6">6 -nostdinc/-nostdinc++ </a></li>
<li><a href="#sec-7">7 -Wp/-Wa/-Wl </a></li>
<li><a href="#sec-8">8 -EL/-EB </a></li>
<li><a href="#sec-9">9 -DMACRO/-UMACRO </a></li>
<li><a href="#sec-10">10 -G num </a></li>
<li><a href="#sec-11">11 -msym32/-mnosym32 </a></li>
<li><a href="#sec-12">12 -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks </a></li>
<li><a href="#sec-13">13 -mcheck-zero-division/-mno-check-zero-division </a></li>
<li><a href="#sec-14">14 -mabicalls/-mno-abicalls </a></li>
<li><a href="#sec-15">15 -mbranch-likely/-mno-branch-likely </a></li>
<li><a href="#sec-16">16 -fstack-protector </a></li>
<li><a href="#sec-17">17 -fstrict-overflow </a></li>
<li><a href="#sec-18">18 -fconserve-stack </a></li>
<li><a href="#sec-19">19 参考 </a></li>
</ul>
</div>
</div>
<div id="outline-container-1" class="outline-2">
<h2 id="sec-1"><span class="section-number-2">1</span> -dumpmachine</h2>
<div id="text-1" class="outline-text-2">
<p>给出当前使用GCC的信息,在erlv的Debian AMD64上，结果如下。<br />
关于GCC的这些字段是什么意思，请参考这篇博文：</p>
<pre class="src src-sh">$ gcc -dumpmachine
x86_64-linux-gnu</pre>
</div>
</div>
<div id="outline-container-2" class="outline-2">
<h2 id="sec-2"><span class="section-number-2">2</span> -xc</h2>
<div id="text-2" class="outline-text-2">
<p>其实，-xc和 “-x c”等同。</p>
<ul>
<li> x用于指定输入的程序的语言，如果使用该选项，GCC就不再根据文件的后缀名判断语言类型。&nbsp;</li>
</ul>
</div>
</div>
<div id="outline-container-3" class="outline-2">
<h2 id="sec-3"><span class="section-number-2">3</span> -dM</h2>
<div id="text-3" class="outline-text-2">
<p>不做实际的预处理，仅仅列出所有#define的宏,这些宏大部分与体系结构和GNU相关，或来自所包含的头文件。</p>
<pre class="src src-sh"><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;">程序输出太长，这里就不列出了
</span>$<span style="color: #eedd82;">gcc</span>  -E -dM hello.c</pre>
<p>另外，还有一些-dCHARS的组合选项：</p>
<ul>
<li> -dD:和-dM类似，不过仅仅包含头文件中定义的宏，不会输出预处理器中默认定义的宏，另外会将源程序代码也预处理输出。</li>
<li> -dN：和-dD类似，但仅输出定义的宏的名称，不输出宏的值。</li>
<li> -dI:给出#include的头文件，预计预处理的结果</li>
<li> -dU:和-dD类似，但仅仅输出那些在源码中需要展开的，或者其定义会被测试到的宏。&nbsp;</li>
</ul>
</div>
</div>
<div id="outline-container-4" class="outline-2">
<h2 id="sec-4"><span class="section-number-2">4</span> -print-file-name=include</h2>
<div id="text-4" class="outline-text-2">
<p>打印GCC默认搜索include头文件的路径</p>
<pre class="src src-sh">$ gcc -print-file-name=include
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/include</pre>
</div>
</div>
<div id="outline-container-5" class="outline-2">
<h2 id="sec-5"><span class="section-number-2">5</span> -isystem DIR</h2>
<div id="text-5" class="outline-text-2">
<p>将DIR路径作为头文件搜索路径之一。搜索顺序: -I指定的文件夹 =》  -isystem指定的文件夹 =》 标准系统头文件夹。</p>
</div>
</div>
<div id="outline-container-6" class="outline-2">
<h2 id="sec-6"><span class="section-number-2">6</span> -nostdinc/-nostdinc++</h2>
<div id="text-6" class="outline-text-2">
<p>不要搜索标准系统头文件目录，仅搜索-I指定的路径。</p>
</div>
</div>
<div id="outline-container-7" class="outline-2">
<h2 id="sec-7"><span class="section-number-2">7</span> -Wp/-Wa/-Wl</h2>
<div id="text-7" class="outline-text-2">
<p>这三个分别用来指定传递给 预处理起、汇编器和链接器的参数。</p>
<ul>
<li> -Wp,option 等价于  -Xpreprocessor option</li>
<li> -Wa,option 等价于  -Xassembler option</li>
<li> -Wl,option 等价于  -Xlinker option</li>
</ul>
</div>
</div>
<div id="outline-container-8" class="outline-2">
<h2 id="sec-8"><span class="section-number-2">8</span> -EL/-EB</h2>
<div id="text-8" class="outline-text-2">
<p>为小尾端/大尾端系统编译代码。默认是小尾端</p>
</div>
</div>
<div id="outline-container-9" class="outline-2">
<h2 id="sec-9"><span class="section-number-2">9</span> -DMACRO/-UMACRO</h2>
<div id="text-9" class="outline-text-2">
<p>定义宏MACRO/撤销对宏MACRO的定义</p>
</div>
</div>
<div id="outline-container-10" class="outline-2">
<h2 id="sec-10"><span class="section-number-2">10</span> -G num</h2>
<div id="text-10" class="outline-text-2">
<p>将全局和静态对象的大小分割成小于num字节的数据放入bss端的小数据中，而非正常数据中。<br />
默认的num的值为8.</p>
<p>由于MIPS在从符号得到地址时，需要先取出高16位，再取出低16位，做拼接得到最终地址，所以就需要两次访存操作。<br />
当程序中大量使用静态和全局数据时，这种方式就会让程序变慢。<br />
于是就有了利用GP寄存器进行优化的方法，即采用和GP寄存器做相对偏移的方式访存，以便降低访存次数。<br />
关键问题是编译器和汇编器需要在编译时刻确定哪些变量可以使用GP寄存器访问。<br />
通常的做法是让大小小于一定值的变量通过GP寄存器访问。</p>
<p>若num为 0表示将这一优化关闭。</p>
</div>
</div>
<div id="outline-container-11" class="outline-2">
<h2 id="sec-11"><span class="section-number-2">11</span> -msym32/-mnosym32</h2>
<div id="text-11" class="outline-text-2">
<p>不管采取何种ABI，都假设/不假设所有符号都是32位的值。<br />
这一选项配合-mabi=64 和-mno-abicall时非常有用，因为可以通过假设都是32位数据生成更小巧更快的符号地址</p>
</div>
</div>
<div id="outline-container-12" class="outline-2">
<h2 id="sec-12"><span class="section-number-2">12</span> -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks</h2>
<div id="text-12" class="outline-text-2">
<p>delete-null-pointer-checks是一种优化手段，通过全局的数据流分析来识别和删除所有对空指针的检测操作。<br />
编译器假定对空指针的解引用会造成程序终止。但因为有些环境下，这一结论并不一定成立，而O2，O3和Os时会开启此优化。<br />
因此GCC增加了选项-fno-delete-null-pointer-checks</p>
</div>
</div>
<div id="outline-container-13" class="outline-2">
<h2 id="sec-13"><span class="section-number-2">13</span> -mcheck-zero-division/-mno-check-zero-division</h2>
<div id="text-13" class="outline-text-2">
<p>当整数除0操作时，陷入/不陷入</p>
</div>
</div>
<div id="outline-container-14" class="outline-2">
<h2 id="sec-14"><span class="section-number-2">14</span> -mabicalls/-mno-abicalls</h2>
<div id="text-14" class="outline-text-2">
<p>生成/不生成适SVR4形式的动态对象代码，默认生成。</p>
</div>
</div>
<div id="outline-container-15" class="outline-2">
<h2 id="sec-15"><span class="section-number-2">15</span> -mbranch-likely/-mno-branch-likely</h2>
<div id="text-15" class="outline-text-2">
<p>使用/使用 branch likely 指令，不管所指定体系结构默认是否支持。<br />
GCC默认会为支持branch likely指令的体系结构生成branch likely指令。</p>
<p>引入这类指令，是为了引入一种很大可能会发生跳转的指令，这样编译器就能充分的利用MIPS中的delay slot。</p>
</div>
</div>
<div id="outline-container-16" class="outline-2">
<h2 id="sec-16"><span class="section-number-2">16</span> -fstack-protector</h2>
<div id="text-16" class="outline-text-2">
<p>为可能的缓冲区溢出生成额外的检测代码。</p>
</div>
</div>
<div id="outline-container-17" class="outline-2">
<h2 id="sec-17"><span class="section-number-2">17</span> -fstrict-overflow</h2>
<div id="text-17" class="outline-text-2">
<p>允许编译器使用严格的有符号溢出规则。</p>
</div>
</div>
<div id="outline-container-18" class="outline-2">
<h2 id="sec-18"><span class="section-number-2">18</span> -fconserve-stack</h2>
<div id="text-18" class="outline-text-2">
<p>尽量减小对栈的使用。</p>
</div>
</div>
<div id="outline-container-19" class="outline-2">
<h2 id="sec-19"><span class="section-number-2">19</span> 参考</h2>
<div id="text-19" class="outline-text-2">
<ul>
<li> <a href="http://gcc.gnu.org/ml/gcc-help/2006-10/msg00191.html">http://gcc.gnu.org/ml/gcc-help/2006-10/msg00191.html</a></li>
<li> See MIPS Run Linux, 2ed， by Dominic Sweetman， Page 273</li>
<li> GCC man pages</li>
</ul>
</div>
</div>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F11%2F20%2F10065%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Gcc和Open64中的-fPIC选项</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F08%2F10609%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC中的pie和fpie选项</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC如何进出GIMPLE中间表示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F19%2F11208%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC即将支持龙芯3A</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F23%2F11157%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64中的gcc前端</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/12/05/11872/' rel='bookmark' title='Linux 内核中的.S文件'>Linux 内核中的.S文件</a></li>
<li><a href='http://www.lingcc.com/2010/08/23/11157/' rel='bookmark' title='open64中的gcc前端'>open64中的gcc前端</a></li>
<li><a href='http://www.lingcc.com/2008/01/23/9891/' rel='bookmark' title='我的xorg.conf'>我的xorg.conf</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/01/08/10609/' rel='bookmark' title='GCC中的pie和fpie选项'>GCC中的pie和fpie选项</a></li>
<li><a href='http://www.lingcc.com/2010/03/25/10717/' rel='bookmark' title='为龙芯电脑安装操作系统常见问题'>为龙芯电脑安装操作系统常见问题</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/06/27/11679/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>自动向量化</title>
		<link>http://www.lingcc.com/2011/06/03/11619/</link>
		<comments>http://www.lingcc.com/2011/06/03/11619/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 09:20:53 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[前端和程序分析]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[编译理论实践和应用]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[自动向量化]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11619</guid>
		<description><![CDATA[自动向量化能最大程度的解放程序员， 为程序员屏蔽底层CPU的细节，又能通过底层CPU SIMD并行获得有效的性能提升，所以自动向量化一直是研究热点。 目前实现自动向量化的方式有主要有两种： 基于循环的自动向量化： 通过分析循环，对于无数据依赖的并行迭代，直接生成对应的向量指令的方式实现向量化。 基于基本块的自动向量化： 通过循环展开，得到较大的基本块，然后收集循环中的相同操作，合成后端CPU支持的SIMD操作，实现向量化。 基于循环的自动向量化 基于循环的自动向量化早在上世纪80年代就在向量机系统上得到了广泛应用，其中又以Randy Allen的工作最为著名。 Randy Allen为了在向量机上让历史遗留代码充分利用处理器，开发了一个Fortran到Fortran 8x的代码编译器，其中Fortran 8x中支持向量操作。 该过程就是一个基于循环的自动向量化过程。 为了将循环向量化，作者首先对循环体进行依赖分析，找出无数据依赖的循环迭代， 通过设定循环控制变量每次迭代的跨度，决定有多少个循环迭代被转换成相应的向量指令。 这一机制，使得Fortran能更好的利用向量运算。从Benchmark来看，向量化的加速度大约10倍。 Konrad T. 等人研究了如何把循环自动向量化和其他循环优化映射到多面体模型中。 并在这一模型中，针对这些循环优化，构建统一的代价模型，通过衡量代价模型找出最佳的优化方式。 一般的自动向量化需要事先设定针对最内层循环还是最外层循环作自动向量化。 而本文则可以通过多面体模型自动判断对哪一层循环做向量化。 在作者使用的Benchmark上，基于CELL处理器的测试显示，相比于普通标量有3.5倍的加速比， 相比基于GCC的直接最内层循环向量化有2.3倍的加速；相比直接外层循环向量化，有36%的加速。 在IBM PPC970处理器上，相比串行程序有2.9倍的加速，相比内层循环向量化有2.3倍的加速， 相比外层循环向量化有50%的加速。 Alexandre E. E等人在循环中，考虑有非对齐访存情况下的自动向量化， 提出了一种系统的解决该问题的编译架构。 作者的机制通过在SIMD寄存器中自动拼接数据来满足硬件的对齐需求， 这种拼接多数基于位移的操作，即整个寄存器位移元素长度的整数倍的方式， 位移的操作最终会转换成目标机中的vperm置换指令。 通过vperm置换操作，数据就被有序的组织在向量寄存器中， 接着作者通过向量化数据操作语句的方式，生成向量指令。 作者选定了一些75%以上的数据访存是非对齐的例子，在支持128位向量数据的IBM Altiec上，对于单精度浮点例子，加速比3.71; 对于半字整点例子，加速比6.06。 Doriy Nuzman等人针对通用CPU中的短SIMD结构，研究如何对外层循环做自动向量化， 并在GCC中实现之，相比最内层循环向量化，有一倍以上的加速。 作者注意到，一般的最内层循环向量化很难应对交叉循环迭代依赖，而且迭代次数较少时，也很难有性能提升。 相比于在最内层循环做自动向量化，外层循环能够发现更多的数据并行和局部性，出现非连续访存的可能性更小。 作者首先分析循环，包括对循环内控制流的分析和循环迭代控制的分析，找出循环中会被一直执行的语句和循环的迭代次数。 之后，先通过循环体变换，得到内层循环中的一段线性语句，再递归的对内层循环作处理，将内层循环直线代码分配到基本块。 作者在GCC 4.3中实现了这套机制，对于选定的benchmark，在Cell BE SPU和PowerPC 970上分别获得3.13和2.77的加速比。 相比之下，最内层循环向量化的加速比只有1.53和1.39。 <a href='http://www.lingcc.com/2011/06/03/11619/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F07%2F12%2F11066%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64中的自动向量化支持</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F21%2F11365%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">自动向量化的研究现状</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F01%2F11927%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">体系结构这五年--《计算机体系结构-量化研究方法》第5版的新变化</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/10/21/11365/' rel='bookmark' title='自动向量化的研究现状'>自动向量化的研究现状</a></li>
<li><a href='http://www.lingcc.com/2011/06/02/11605/' rel='bookmark' title='SIMD硬件的发展'>SIMD硬件的发展</a></li>
<li><a href='http://www.lingcc.com/about/' rel='bookmark' title='关于'>关于</a></li>
<li><a href='http://www.lingcc.com/2010/02/03/10675/' rel='bookmark' title='计算机系统结构方向的顶尖会议'>计算机系统结构方向的顶尖会议</a></li>
<li><a href='http://www.lingcc.com/2011/09/20/11745/' rel='bookmark' title='美国国家仪器（NI）招聘信息'>美国国家仪器（NI）招聘信息</a></li>
<li><a href='http://www.lingcc.com/2011/08/14/11695/' rel='bookmark' title='TIPS for writing easily auto-vectorized code'>TIPS for writing easily auto-vectorized code</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>自动向量化能最大程度的解放程序员， 为程序员屏蔽底层CPU的细节，又能通过底层CPU SIMD并行获得有效的性能提升，所以自动向量化一直是研究热点。</p>
<p>目前实现自动向量化的方式有主要有两种：</p>
<ul>
<li>基于循环的自动向量化： 通过分析循环，对于无数据依赖的并行迭代，直接生成对应的向量指令的方式实现向量化。</li>
<li>基于基本块的自动向量化： 通过循环展开，得到较大的基本块，然后收集循环中的相同操作，合成后端CPU支持的SIMD操作，实现向量化。</li>
</ul>
<h2><a name="SECTION00251000000000000000"></a>基于循环的自动向量化</h2>
<p>基于循环的自动向量化早在上世纪80年代就在向量机系统上得到了广泛应用，其中又以Randy Allen的工作最为著名。 Randy Allen为了在向量机上让历史遗留代码充分利用处理器，开发了一个Fortran到Fortran 8x的代码编译器，其中Fortran 8x中支持向量操作。 该过程就是一个基于循环的自动向量化过程。 为了将循环向量化，作者首先对循环体进行依赖分析，找出无数据依赖的循环迭代， 通过设定循环控制变量每次迭代的跨度，决定有多少个循环迭代被转换成相应的向量指令。 这一机制，使得Fortran能更好的利用向量运算。从Benchmark来看，向量化的加速度大约10倍。</p>
<p>Konrad T. 等人研究了如何把循环自动向量化和其他循环优化映射到多面体模型中。 并在这一模型中，针对这些循环优化，构建统一的代价模型，通过衡量代价模型找出最佳的优化方式。 一般的自动向量化需要事先设定针对最内层循环还是最外层循环作自动向量化。 而本文则可以通过多面体模型自动判断对哪一层循环做向量化。 在作者使用的Benchmark上，基于CELL处理器的测试显示，相比于普通标量有3.5倍的加速比， 相比基于GCC的直接最内层循环向量化有2.3倍的加速；相比直接外层循环向量化，有36%的加速。 在IBM PPC970处理器上，相比串行程序有2.9倍的加速，相比内层循环向量化有2.3倍的加速， 相比外层循环向量化有50%的加速。</p>
<p>Alexandre E. E等人在循环中，考虑有非对齐访存情况下的自动向量化， 提出了一种系统的解决该问题的编译架构。 作者的机制通过在SIMD寄存器中自动拼接数据来满足硬件的对齐需求， 这种拼接多数基于位移的操作，即整个寄存器位移元素长度的整数倍的方式， 位移的操作最终会转换成目标机中的vperm置换指令。 通过vperm置换操作，数据就被有序的组织在向量寄存器中， 接着作者通过向量化数据操作语句的方式，生成向量指令。 作者选定了一些75%以上的数据访存是非对齐的例子，在支持128位向量数据的IBM Altiec上，对于单精度浮点例子，加速比3.71; 对于半字整点例子，加速比6.06。</p>
<p>Doriy Nuzman等人针对通用CPU中的短SIMD结构，研究如何对外层循环做自动向量化， 并在GCC中实现之，相比最内层循环向量化，有一倍以上的加速。 作者注意到，一般的最内层循环向量化很难应对交叉循环迭代依赖，而且迭代次数较少时，也很难有性能提升。 相比于在最内层循环做自动向量化，外层循环能够发现更多的数据并行和局部性，出现非连续访存的可能性更小。 作者首先分析循环，包括对循环内控制流的分析和循环迭代控制的分析，找出循环中会被一直执行的语句和循环的迭代次数。 之后，先通过循环体变换，得到内层循环中的一段线性语句，再递归的对内层循环作处理，将内层循环直线代码分配到基本块。 作者在GCC 4.3中实现了这套机制，对于选定的benchmark，在Cell BE SPU和PowerPC 970上分别获得3.13和2.77的加速比。 相比之下，最内层循环向量化的加速比只有1.53和1.39。</p>
<p>Aart J. C. Bik等人实现了Intel编译器中自动向量化。 ICC通过对最内层循环展开，构建数据依赖图的方式，寻找可以向量化的操作。 为了降低非对齐访存带来的开销，ICC生成了多种版本的循环主体代码，通过运行时检测的方式，寻找最适合执行的代码，并执行之。 对于Linpack，ICC的自动向量化在有MMX和SSE2扩展的2GHz的Pentium 4芯片上，双精度例子加速比平均为2。 对于SPEC2000例子，galgel性能提升20%， swim 6%， gzpi 6%。</p>
<h2><a name="SECTION00252000000000000000"></a>基于基本块的自动向量化</h2>
<p>Samuel L.首先提出了从单个基本块中综合生成SIMD指令操作的SLP(Superword Level Parallelism)向量化机制。 该架构先在基本块中寻找无依赖的同构操作，将这些同构操作合并，并转换为相应的SIMD操作来实现向量化。 首先使用循环展开，将循环迭代间的并行语句集中到一个基本块中，再在该基本块中利用启发式算法，作对齐分析和数据流优化，减少数据依赖。 之后确定合并成SIMD指令的语句组，并最终生成SIMD操作。 作者将以上机制应用在SPEC95浮点测试集中的科学计算程序和几个多媒体计算程序的kernel中。 因为有了SIMD并行，最终执行的指令数下降了46%。这些benchmark的加速比从1.24到6.70不等。</p>
<p>接着，Samuel L.等人又将软流水和向量化结合，在软流水中寻找向量并行机会，同时进行ILP(Instruction Level Parallelism)和DLP(Data Level Parallelism)。 作者注意到虽然SLP能够发掘并行性，让向量部件更有效的运转，但同时标量运算部件和向量运算部件之间也可以并行。 为了更好的利用这种并行，作者尝试在软流水中寻找向量化机会。 在DSP和SPEC FP benchmark上，分别拿到了1.30和1.18的加速比。</p>
<p>Jaewook Shin等人将SLP扩充到有控制流存在的情况下。 作者注意到控制流因为有分支，使得有些SLP向量化无法进行。 通过将控制流依赖转换为数据流依赖，之后在控制流依赖涉及到的指令中，添加一个谓词属性的转换方式，消除分支，使循环体都在一个基本块中。 之后，重新将SLP算法作用到这个基本块中。 在合并SIMD指令语句组时，相对Samuel L.的SLP，唯一的不同是只有具有相同谓词属性的指令才能合并成带有向量谓词属性的SIMD指令。 然后，对于可以向量化的语句，将其合并。否则通过将向量谓词转换为SELECT动作，保持原程序中分支的语义。 最后将这些向量化的语句生成对应的SIMD代码，而SELECT动作的语句，则重新转换为if-then分支。 作者选取了8个多媒体程序的Kernel来评估自己的工作，获得了1.97到15.07的加速比。</p>
<h2><a name="SECTION00253000000000000000"></a>关注可移植性的编译器向量支持</h2>
<p>因为各个处理器厂商支持的SIMD扩展支持的数据元素类型、向量数据总长度都有很大的不同。 SIMD指令的数量和功能也有很大的差别，而且处理器厂商也会持续改进自己的SIMD扩展。 在没有好的通用自动向量化算法的前提下，只能由编译器开发者针对每个SIMD扩展，作精确的调优。 如果支持多个处理器，就需要很多繁琐的调优工作。 所以，提升编译器的自动向量化算法的可移植性，也是研究的热点问题。</p>
<p>Dorit N一直为实现一个高性能高可移植的GCC自动向量化而努力。 她在04年的文章中介绍了在 GCC 上实现的基于循环的自动向量化，该机制可以用在向量长度不同的一些后端上。 作者首先介绍了在GCC的嵌套循环优化阶段如何在GCC的SSA表示上使用数据依赖图中的强联通分量作数据依赖分析。 它利用GCC基于SSA的GIMPLE中间表示，首先分析循环格式，接着做数据依赖分析和操作分析。 通过这一系列分析，进行向量化。通过向量化因子VF，控制循环展开的次数，从而实现对不同SIMD数据长度后端的支持。 作者通过循环标记和循环peeling来作对齐分析，寻找最大限度的访存对齐。 两年以后，Dorit N.介绍了他们在GCC中实现自动向量化支持的工作的进展。 作者在GCC 4中实现了新的自动向量化机制，在这套机制中充分考虑了向量化的可移植性问题。 作者的工作基于GCC的GIMPLE中间表示，因为SIMD扩展比较底层，所以作者着重介绍了如何在可移植和暴露底层细节之间的权衡。 在访存对齐方面，作者首先采用静态对齐分析找出对齐访存；再将这些非对齐访存尽可能转换为对齐访存， 可以同时包含多个循环变换版本，并在动态对齐检测的方式确定执行哪个版本； 若经过这一变换，还有些不能确定是否对齐的，若目标平台提供了非对齐访存指令，则向量化之，否则放弃向量化。 作者选了一些浮点、short和char型整点的例子，并在四个平台：IBM PPC97、Pentium4 、Itanium2、Alpha。 结果显示，在四个平台上都有不少加速，尤其在IBM PPC97和Intel Pentium4上有不错的加速比。</p>
<p>CGO 2011中，Dorit Nuzman等人介绍了通过引入运行时支持， 使得静态编译得到的向量化中间表示能在多个不同的SIMD平台上运行，实现了一次编译，跨平台运行。 Dorit Nuzman针对不同处理器的SIMD扩展对向量长度、内存对齐和访问方式三方面的差异展开可移植研究。 作者首先扩充CIL中间表示，针对如上三个差异设计相应的中间表示， 然后利用GCC已有的自动向量化机制，修改GCC使之能生成包含向量扩展的CIL中间表示， 并分别在Intel的SSE、AVX，IBM的AltiVec和ARM的NEON四种SIMD扩展上，通过扩充CIL的运行时环境MONO分别验证了其解决上面三个差异的方法。 作者通过引入向量长度因子和向量化因子来动态表示向量长度，以及由向量长度不同引起的循环展开次数的不同； 通过同时生成对齐和非对齐访存语句，并引入一个判断语句在运行时确定采取哪种方式访存，解决访存对齐问题。 实验结果显示，虽然该策略平均比GCC静态向量化结果略差，但能同时针对多种SIMD扩展， 可以应对不同扩展间对齐访存不同、向量宽度不同、向量指令集不同的问题。</p>
<p>Manuel H.等人针对嵌入式平台，研究编译器 SIMD 支持的可移植性，给出了一个能快速高效移植的编译器向量化架构。 这种嵌入式平台多为面向特定应用的指令集(ASIP)，这类平台一般指令集差别很大，因此对编译器的可移植性要求高。 作者提出了一种能充分利用SIMD指令和编译器可移植性的机制。 该机制由一个循环向量化器和一个展开——打包工具组成，这两者都使用相同的SIMD指令集描述。 因此，移植编译器时只需要修改这些指令集表示即可。 向量相关的优化都采用机器无关的形式描述。 作者在ACE公司的编译器生成工具中实现了这一机制，并在ARM11和NXP TriMedia两款嵌入式处理器上做了验证。 结果显示，这种机制对于DSP类的Benchmark，有7%-66%的加速比。 即使做了4次循环展开， 代码大小与串行代码相比，ARM为原来的0.9，TriMedia为原来的1.1。</p>
<p>Randall J. Fisher等人研究了98年以前SIMD扩展的情况，总结概括了这些SIMD扩展中指令动作的特点， 并据此开发了一种类C语言SWARC，以方便编译器同时支持多个SIMD扩展。 并为该语言开发了一个实验性的编译器Scc，该编译器支持X86平台的MMX和3DNow！ SIMD扩展。 之后，他们又针对SCC编译器做了向量处理优化，但并未给出具体的数据。 该编译器针通过扩展数据类型，使之具有溢出和向量的属性。 针对SIMD指令的新功能，增加新的操作符，如增加最大操作符：?&lt;、最小值操作符：?&gt;。</p>
<p><span style="font-size: 20px; font-weight: bold;"><a name="SECTION00254000000000000000"></a>自动向量化面临的问题</span></p>
<p>时至今日，虽然学术界针对自动向量化展开了很多研究，但仍存在很多的问题：</p>
<ul>
<li>发现可向量化操作难： 因为指针引起的别名，使得编译器很难对有指针存在的程序做精确的数据依赖关系分析，因而很难并行化。 且SIMD指令无法描述有分支的串行程序的语义，因此编译器无法对循环体中有分支结构的程序向量化。</li>
<li>确定向量化方案难： 对于越来越强大的SIMD支持，编译器有很多种向量化方式，由于代价模型不成熟，编译器有时不能正确找到有性能提升的自动向量化方式。 数据置换指令执行时间长，非对齐访存延迟大，自动向量化对循环结构的改变影响其他编译优化的正常进行， 这些都可能影响自动向量化的最终效果。 目前尚无理想的代价模型，可以让编译器从众多向量化方式中，找到代价最小，性能最优的一个。</li>
<li>对齐访存要求严格： 非对齐的访存，要么出错，要么效率很低。 在编译时并不能得到所有对齐信息。 为了保证正确性，编译器就需要放弃许多潜在优化机会。</li>
<li>可移植性差： 由于知识产权保护和技术演进，各个 CPU SIMD 扩展指令支持的操作、SIMD数据长度和类型都不尽相同。 自动向量化算法要么针对各个不同的指令集做针对性配置和调试，但这样可移植性差； 要么努力提高可移植性，兼容尽可能多的后端CPU扩展，但这样某些后端特有的指令就很难有效利用。</li>
</ul>
<h2>参考</h2>
<p><a name="EA:vec-cell-vecalign"></a>Eichenberger et al.(2004)aEICHENBERGER A E, WU P, O&#8217;BRIEN K. Vectorization for SIMD architectures with alignment constraints. Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation, 2004:82-93<span style="line-height: 6px;"><br />
</span><a name="DN:vec-gcc"></a>Naishlos(2004)NAISHLOS D. Autovectorization in GCC. GCC Developers’ Summit, 2004:105-118<a name="RA:c4vec"></a>Allen and Johnson(1988)ALLEN R, JOHNSON S. Compiling C for vectorization, parallelization, and inline expansion. Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation, 1988:241-249<a name="ref:dsp-c-drawback"></a>42VOJIN Z. Compilers for digital signal processors: The hard way from marketing to production tool. DSP and Multimedia Technology, 1995(4):27-45<span style="line-height: 6px;"><br />
</span><a name="ref:icc-ref"></a>Cooperation()Intel COOPERATION . Intel C/C++ Compiler User and Reference Guides. http://www.intel.com/software/products/compilers.<a name="WJvtune"></a>III(1999)III J H W. Programming Methods for the Pentium  III Processor&#8217;s Streaming SIMD Extensions Using the VTune<sup><small>TM</small></sup>Performance Enhancement Environment. Intel Technol. J., 1999<a name="Shahbahrami_performanceimpact"></a>Shahbahrami et al.(2006)SHAHBAHRAMI A, JUURLINK B, VASSILIADIS S. Performance Impact of Misaligned Accesses in SIMD Extension.Proceedings of the 17th Annual Workshop on Circuits, Systems and Signal Processing (ProRISC 2006), 2006:334-342<a name="nathan-pasimd"></a>Slingerland and Smith(2001)SLINGERLAND N, SMITH A J. Performance Analysis of Instruction Set Architecture Extensions for Multimedia.In the 3rd Workshop on Media and Stream Processors, 2001:204 &#8211; 217.<a name="GR:data-permutation"></a>Ren et al.(2006)REN G, WU P, PADUA D. Optimizing data permutations for SIMD devices. Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation, 2006, 41:118-131.<a name="Allen:1987:ATF:29873.29875"></a>Allen and Kennedy(1987)ALLEN R, KENNEDY K. Automatic translation of FORTRAN programs to vector form. ACM Trans. Program. Lang. Syst., 1987, 9:491-542.<a name="TK:vect-poly"></a>Trifunovic et al.(2009)TRIFUNOVIC K, NUZMAN D, COHEN A, et al. Polyhedral-Model Guided Loop-Nest Auto-Vectorization. Proceedings of the 2009 18th International Conference on Parallel Architectures and Compilation Techniques, 2009:327-337.<a name="EA:vect-with-align"></a>Eichenberger et al.(2004)bEICHENBERGER A E, WU P, O&#8217;BRIEN K. Vectorization for SIMD architectures with alignment constraints.Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation, 2004:82-93.<a name="DN:vec-outerloop"></a>Nuzman and Zaks(2008)NUZMAN D, ZAKS A. Outer-loop vectorization: revisited for short SIMD architectures. Proceedings of the 17th international conference on Parallel architectures and compilation techniques, 2008:2-11<a name="BA:vec-icc"></a>Bik et al.(2002)BIK A J C, GIRKAR M, GREY P M, et al. Automatic intra-register vectorization for the Intel architecture. Int. J. Parallel Program., 2002, 30:65-98.<a name="LS:vec-slp"></a>Larsen and Amarasinghe(2000)LARSEN S, AMARASINGHE S. Exploiting superword level parallelism with multimedia instruction sets. Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation, 2000:145-156.<a name="LS:vec-swp"></a>Larsen et al.(2005)LARSEN S, RABBAH R, AMARASINGHE S. Exploiting Vector Parallelism in Software Pipelined Loops. Proceedings of the 38th annual IEEE/ACM International Symposium on Microarchitecture, 2005:119-129<a name="SJ:vec-slp-cflow"></a>Shin et al.(2005)SHIN J, HALL M, JACQUELINE C. Superword-Level Parallelism in the Presence of Control Flow. Proceedings of the international symposium on Code generation and optimization, 2005:165-175<a name="DN:vec-retarg-gcc"></a>Nuzman and Henderson(2006)NUZMAN D, HENDERSON R. Multi-platform Auto-vectorization. Proceedings of the International Symposium on Code Generation and Optimization, 2006:281-294<a name="dyshel:vec-vapor"></a>Dyshel et al.(2011)DYSHEL S, NUZMAN D, ROHOU E, et al. Vapor SIMD &#8211; Auto-Vectorize Once, Run Everywhere. International Symposium on Code Generation and Optimization (CGO&#8217;11). Chamonix, France, 2011<a name="HM:vec-retarg"></a>Hohenauer et al.(2009)HOHENAUER M, ENGEL F, LEUPERS R, et al. A SIMD optimization framework for retargetable compilers. ACM Trans. Archit. Code Optim., 2009, 6:2:1-2:27.<a name="FR:vec-simdlang"></a>Fisher and Dietz(1999)FISHER R J, DIETZ H G. Compiling for SIMD Within a Register. Proceedings of the 11th International Workshop on Languages and Compilers for Parallel Computing. 1999:290-304<a name="FR:vec-scc"></a>Fisher and Dietz(2000)FISHER R J, DIETZ H G. The Scc Compiler: SWARing at MMX 3DNow!. Proceedings of the 12th International Workshop on Languages and Compilers for Parallel Computing, 2000:399-414</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F07%2F12%2F11066%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64中的自动向量化支持</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F21%2F11365%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">自动向量化的研究现状</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F01%2F11927%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">体系结构这五年--《计算机体系结构-量化研究方法》第5版的新变化</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/10/21/11365/' rel='bookmark' title='自动向量化的研究现状'>自动向量化的研究现状</a></li>
<li><a href='http://www.lingcc.com/2011/06/02/11605/' rel='bookmark' title='SIMD硬件的发展'>SIMD硬件的发展</a></li>
<li><a href='http://www.lingcc.com/about/' rel='bookmark' title='关于'>关于</a></li>
<li><a href='http://www.lingcc.com/2010/02/03/10675/' rel='bookmark' title='计算机系统结构方向的顶尖会议'>计算机系统结构方向的顶尖会议</a></li>
<li><a href='http://www.lingcc.com/2011/09/20/11745/' rel='bookmark' title='美国国家仪器（NI）招聘信息'>美国国家仪器（NI）招聘信息</a></li>
<li><a href='http://www.lingcc.com/2011/08/14/11695/' rel='bookmark' title='TIPS for writing easily auto-vectorized code'>TIPS for writing easily auto-vectorized code</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/06/03/11619/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>仔细端详GCC 4.6的新特性</title>
		<link>http://www.lingcc.com/2011/03/28/11567/</link>
		<comments>http://www.lingcc.com/2011/03/28/11567/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 09:24:23 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11567</guid>
		<description><![CDATA[去年3月GCC 4.5.0发布，而今，GCC刚刚正式发布了4.6版本。这个版本包含了很多的更新。 亮点： 大大改进了过程间分析和链接时优化。正确性方面，编译了FIrefox，无疑是最有力的证明，但性能方面的评测没有，所以LTO是否真有性能不好说。不过从 Go语言进入了GCC的支持 龙芯3A也支持了。 AVX支持了，但看样子，有点弱(没有自己调研过)。 增加了128位浮点数支持，这个在科学计算领域应该很有用，X86和安腾系的芯片首先得益。 另外，Phoronix刚刚发布了针对GCC4.5.2， 4.6RC2， LLVM2.9和DragonEgg的性能评测，结果看起来GCC4.6不是很给力。不清楚具体开了什么编译选项。 &#160; 细节更新如下： 更标准化的选项。含义不精确的选项被取缔，通过gcc命令传递给汇编器和链接器的选项，也通通需要加上指定的前缀，如-Wl,&#8211;as-needed. 修正了一个GCC内部函数cproj和ISO C99标准不一致的地方，并做了优化，不过用户需要GLIBC 2.12及以后的版本才行。 移除了模块间优化扩展，使用4.5中引入的LTO代替之。 增加了采用LGPL协议的libquadmath数学库，这个库可以为32位x86，x86-64和安腾平台提供128浮点数的浮点运算支持。 删除了一些老旧平台的支持。 优化方面的更新： 增加猥琐级编译优化选项-ofast,这个选项除了打开-O3的所有优化外，还开启了所有能开启的优化，以获得更好的性能，如-ffast-mast优化 改进链接时优化(LTO)： 全局可扩展优化器已经足够稳定。打开LTO后会默认开启此优化。该优化器可以自动分割成几个并行的编译过程，可以用选项-flto=n指定并行编译进程个数。 搞定了很多LTO的bug。打开LTO可以编译Firefox了。 改进连接器插件 C++内联函数和虚表采取了更急进的私有化策略，以便更好的作过程间优化。 改进内存试用 将独立单元的静态构造和析构函数内联到一个单独函数中，以便加速大型C++程序的启动 支持Ada语言 过程间优化的改进 已经为了LTO调优了过程间处理机制，获得了更好的扩展性。 改进对const和pure函数的自动检测 一些针对内联的改进 O2现在会开启部分内联。即，将函数分割成较热的路径和不热的路径。这样，就可以对热路径采用更激进的优化策略。 改进对大的编译单元的扩展性。 对回调的内联更激进 改进对虚方法的内联，以及在开启-Os选项时针对C++程序的内联策略。 加强IPA引用优化阶段 对 全局变量的使用/定义的检测， 死函数地址优化 增加-fstack-usage选项。编译器可以输出程序的栈使用信息 其他更新 改进编译时间和内存占用。 增加Go语言支持 增加对avx的支持 增加对龙芯3A的支持 相关文章： 来仔细看看GCC 4.5.0 GCC初窥 Open64课程-编译过程 说说静态单赋值（SSA,Static Single-Assignment) <a href='http://www.lingcc.com/2011/03/28/11567/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC几个选项学习</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC Internal 中文文档上线</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64、LLVM、GCC源代码行数对比</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC如何进出GIMPLE中间表示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F03%2F10216%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">说说佳能 A720 IS</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/04/16/10746/' rel='bookmark' title='来仔细看看GCC 4.5.0'>来仔细看看GCC 4.5.0</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2009/11/19/10024/' rel='bookmark' title='Open64课程-编译过程'>Open64课程-编译过程</a></li>
<li><a href='http://www.lingcc.com/2011/08/13/11685/' rel='bookmark' title='说说静态单赋值（SSA,Static Single-Assignment)'>说说静态单赋值（SSA,Static Single-Assignment)</a></li>
<li><a href='http://www.lingcc.com/2011/06/27/11679/' rel='bookmark' title='GCC几个选项学习'>GCC几个选项学习</a></li>
<li><a href='http://www.lingcc.com/2010/09/16/11210/' rel='bookmark' title='GCC Internal 中文文档上线'>GCC Internal 中文文档上线</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>去年3月GCC 4.5.0发布，而今，GCC刚刚正式发布了4.6版本。这个版本包含了很多的更新。</p>
<p>亮点：</p>
<ul>
<li>大大改进了过程间分析和链接时优化。正确性方面，编译了FIrefox，无疑是最有力的证明，但性能方面的评测没有，所以LTO是否真有性能不好说。不过从</li>
<li>Go语言进入了GCC的支持</li>
<li>龙芯3A也支持了。</li>
<li>AVX支持了，<del>但看样子，有点弱</del>(没有自己调研过)。</li>
<li>增加了128位浮点数支持，这个在科学计算领域应该很有用，X86和安腾系的芯片首先得益。</li>
<li>另外，<a href="http://www.phoronix.com/scan.php?page=article&amp;item=gcc_46_llvm29&amp;num=1">Phoronix刚刚发布了针对GCC4.5.2， 4.6RC2， LLVM2.9和DragonEgg的性能评测</a>，结果看起来GCC4.6不是很给力。不清楚具体开了什么编译选项。</li>
</ul>
<p>&nbsp;</p>
<p>细节更新如下：</p>
<ul>
<li>更标准化的选项。含义不精确的选项被取缔，通过gcc命令传递给汇编器和链接器的选项，也通通需要加上指定的前缀，如-Wl,&#8211;as-needed.</li>
<li>修正了一个GCC内部函数cproj和ISO C99标准不一致的地方，并做了优化，不过用户需要GLIBC 2.12及以后的版本才行。</li>
<li>移除了模块间优化扩展，使用4.5中引入的LTO代替之。</li>
<li>增加了采用LGPL协议的libquadmath数学库，这个库可以为32位x86，x86-64和安腾平台提供128浮点数的浮点运算支持。</li>
<li>删除了一些老旧平台的支持。</li>
</ul>
<p><span id="more-11567"></span></p>
<p>优化方面的更新：</p>
<ul>
<li>增加猥琐级编译优化选项-ofast,这个选项除了打开-O3的所有优化外，还开启了所有能开启的优化，以获得更好的性能，如-ffast-mast优化</li>
<li>改进链接时优化(LTO)：
<ul>
<li>全局可扩展优化器已经足够稳定。打开LTO后会默认开启此优化。该优化器可以自动分割成几个并行的编译过程，可以用选项-flto=n指定并行编译进程个数。</li>
<li>搞定了很多LTO的bug。打开LTO可以编译Firefox了。</li>
<li>改进连接器插件</li>
<li>C++内联函数和虚表采取了更急进的私有化策略，以便更好的作过程间优化。</li>
<li>改进内存试用</li>
<li>将独立单元的静态构造和析构函数内联到一个单独函数中，以便加速大型C++程序的启动</li>
<li>支持Ada语言</li>
</ul>
</li>
<li>过程间优化的改进
<ul>
<li>已经为了LTO调优了过程间处理机制，获得了更好的扩展性。</li>
<li>改进对const和pure函数的自动检测</li>
<li>一些针对内联的改进
<ul>
<li>O2现在会开启部分内联。即，将函数分割成较热的路径和不热的路径。这样，就可以对热路径采用更激进的优化策略。</li>
<li>改进对大的编译单元的扩展性。</li>
<li>对回调的内联更激进</li>
<li>改进对虚方法的内联，以及在开启-Os选项时针对C++程序的内联策略。</li>
</ul>
</li>
<li>加强IPA引用优化阶段 对 全局变量的使用/定义的检测，</li>
<li>死函数地址优化</li>
</ul>
</li>
<li>增加-fstack-usage选项。编译器可以输出程序的栈使用信息</li>
</ul>
<p>其他更新</p>
<ul>
<li>改进编译时间和内存占用。</li>
<li>增加Go语言支持</li>
<li>增加对avx的支持</li>
<li>增加对龙芯3A的支持</li>
</ul>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC几个选项学习</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC Internal 中文文档上线</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64、LLVM、GCC源代码行数对比</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC如何进出GIMPLE中间表示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F03%2F10216%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">说说佳能 A720 IS</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/04/16/10746/' rel='bookmark' title='来仔细看看GCC 4.5.0'>来仔细看看GCC 4.5.0</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2009/11/19/10024/' rel='bookmark' title='Open64课程-编译过程'>Open64课程-编译过程</a></li>
<li><a href='http://www.lingcc.com/2011/08/13/11685/' rel='bookmark' title='说说静态单赋值（SSA,Static Single-Assignment)'>说说静态单赋值（SSA,Static Single-Assignment)</a></li>
<li><a href='http://www.lingcc.com/2011/06/27/11679/' rel='bookmark' title='GCC几个选项学习'>GCC几个选项学习</a></li>
<li><a href='http://www.lingcc.com/2010/09/16/11210/' rel='bookmark' title='GCC Internal 中文文档上线'>GCC Internal 中文文档上线</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/03/28/11567/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>看图：嵌入式开发中的工具链组成</title>
		<link>http://www.lingcc.com/2010/10/09/11285/</link>
		<comments>http://www.lingcc.com/2010/10/09/11285/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 10:37:27 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[codesourcery]]></category>
		<category><![CDATA[gnu]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11285</guid>
		<description><![CDATA[这张图来自《GNU Toolchain for Power Architecture》。介绍了一个开发工具链的完整组成。 相关文章： GCC中的pie和fpie选项 能给H1B签证的编译器及模拟器职位&#8211;Compilers jobs at Tensilica 自动向量化 超线程技术适合什么样的程序？ 《多核编译技术研讨会》记二 计算机系统结构方向的顶尖会议<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F03%2F08%2F10709%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GNU工具链学习笔记</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F12%2F05%2F11872%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Linux 内核中的.S文件</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F07%2F10594%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">使用crossdev安装龙芯的O32 gnu交叉工具链</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F05%2F23%2F11595%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">能给H1B签证的编译器及模拟器职位–Compilers jobs at Tensilica</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F05%2F10588%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">用crossdev装龙芯的n32 gnu交叉工具链</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/01/08/10609/' rel='bookmark' title='GCC中的pie和fpie选项'>GCC中的pie和fpie选项</a></li>
<li><a href='http://www.lingcc.com/2011/05/23/11595/' rel='bookmark' title='能给H1B签证的编译器及模拟器职位&#8211;Compilers jobs at Tensilica'>能给H1B签证的编译器及模拟器职位&#8211;Compilers jobs at Tensilica</a></li>
<li><a href='http://www.lingcc.com/2011/06/03/11619/' rel='bookmark' title='自动向量化'>自动向量化</a></li>
<li><a href='http://www.lingcc.com/2010/12/10/11425/' rel='bookmark' title='超线程技术适合什么样的程序？'>超线程技术适合什么样的程序？</a></li>
<li><a href='http://www.lingcc.com/2009/12/05/10234/' rel='bookmark' title='《多核编译技术研讨会》记二'>《多核编译技术研讨会》记二</a></li>
<li><a href='http://www.lingcc.com/2010/02/03/10675/' rel='bookmark' title='计算机系统结构方向的顶尖会议'>计算机系统结构方向的顶尖会议</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>这张图来自《<span style="font-size: 13px; line-height: 19px;">GNU Toolchain for Power Architecture</span>》。介绍了一个开发工具链的完整组成。</p>
<p><a rel="attachment wp-att-11286" href="http://www.lingcc.com/2010/10/09/11285/toolchain/"><img class="alignleft size-medium wp-image-11286" title="toolchain" src="http://www.lingcc.com/wp-content/uploads/2010/10/toolchain-300x200.jpg" alt="" width="600" height="400" /></a></p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F03%2F08%2F10709%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GNU工具链学习笔记</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F12%2F05%2F11872%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Linux 内核中的.S文件</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F07%2F10594%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">使用crossdev安装龙芯的O32 gnu交叉工具链</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F05%2F23%2F11595%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">能给H1B签证的编译器及模拟器职位–Compilers jobs at Tensilica</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F05%2F10588%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F09%2F11285%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">用crossdev装龙芯的n32 gnu交叉工具链</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/01/08/10609/' rel='bookmark' title='GCC中的pie和fpie选项'>GCC中的pie和fpie选项</a></li>
<li><a href='http://www.lingcc.com/2011/05/23/11595/' rel='bookmark' title='能给H1B签证的编译器及模拟器职位&#8211;Compilers jobs at Tensilica'>能给H1B签证的编译器及模拟器职位&#8211;Compilers jobs at Tensilica</a></li>
<li><a href='http://www.lingcc.com/2011/06/03/11619/' rel='bookmark' title='自动向量化'>自动向量化</a></li>
<li><a href='http://www.lingcc.com/2010/12/10/11425/' rel='bookmark' title='超线程技术适合什么样的程序？'>超线程技术适合什么样的程序？</a></li>
<li><a href='http://www.lingcc.com/2009/12/05/10234/' rel='bookmark' title='《多核编译技术研讨会》记二'>《多核编译技术研讨会》记二</a></li>
<li><a href='http://www.lingcc.com/2010/02/03/10675/' rel='bookmark' title='计算机系统结构方向的顶尖会议'>计算机系统结构方向的顶尖会议</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/10/09/11285/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GCC Internal 中文文档上线</title>
		<link>http://www.lingcc.com/2010/09/16/11210/</link>
		<comments>http://www.lingcc.com/2010/09/16/11210/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 08:52:36 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[GCC]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[gcc internal]]></category>
		<category><![CDATA[中文文档]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11210</guid>
		<description><![CDATA[链接： http://www.lingcc.com/gccint/ GCC Internal中文文档，是以Hellogcc组织为首的一个热爱GCC等开源编译技术的小团伙集体努力的结果。任何人都可以参与到其中来，只要你有兴趣(如何参与和获得最新的gcc internals中文翻译）。GCC Internals文档中文翻译的最近进展：） 因为一直以来GCC internal中文文档，都只是躺在SVN库中，恰好lingcc.com有网络空间，于是就在lingcc.com下放上了网页版的 GCC Internal中文文档。 这个文档会不定期和SVN库同步。 另外，Hellogcc在征集今年workshop的话题，欢迎各位积极支持，参与。 相关文章： GCC如何进出GIMPLE中间表示 说说静态单赋值（SSA,Static Single-Assignment) GCC几个选项学习 仔细端详GCC 4.6的新特性 来仔细看看GCC 4.5.0 GNU工具链学习笔记<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64、LLVM、GCC源代码行数对比</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC如何进出GIMPLE中间表示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC几个选项学习</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F23%2F11157%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64中的gcc前端</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">仔细端详GCC 4.6的新特性</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/11/29/11859/' rel='bookmark' title='GCC如何进出GIMPLE中间表示'>GCC如何进出GIMPLE中间表示</a></li>
<li><a href='http://www.lingcc.com/2011/08/13/11685/' rel='bookmark' title='说说静态单赋值（SSA,Static Single-Assignment)'>说说静态单赋值（SSA,Static Single-Assignment)</a></li>
<li><a href='http://www.lingcc.com/2011/06/27/11679/' rel='bookmark' title='GCC几个选项学习'>GCC几个选项学习</a></li>
<li><a href='http://www.lingcc.com/2011/03/28/11567/' rel='bookmark' title='仔细端详GCC 4.6的新特性'>仔细端详GCC 4.6的新特性</a></li>
<li><a href='http://www.lingcc.com/2010/04/16/10746/' rel='bookmark' title='来仔细看看GCC 4.5.0'>来仔细看看GCC 4.5.0</a></li>
<li><a href='http://www.lingcc.com/2010/03/08/10709/' rel='bookmark' title='GNU工具链学习笔记'>GNU工具链学习笔记</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>链接： <a href="http://www.lingcc.com/gccint/">http://www.lingcc.com/gccint/</a></p>
<p>GCC Internal中文文档，是以<a href="http://hellogcc.blogbus.com/" target="_blank">Hellogcc</a>组织为首的一个热爱GCC等开源编译技术的小团伙集体努力的结果。任何人都可以参与到其中来，只要你有兴趣(<a href="http://hellogcc.blogbus.com/logs/68403700.html" target="_blank">如何参与和获得最新的gcc internals中文翻译</a>）。<a href="http://hellogcc.blogbus.com/logs/74017138.html" target="_blank">GCC Internals文档中文翻译的最近进展</a>：）</p>
<p>因为一直以来GCC internal中文文档，都只是躺在SVN库中，恰好lingcc.com有网络空间，于是就在lingcc.com下放上了网页版的 GCC Internal中文文档。 这个文档会不定期和SVN库同步。</p>
<p>另外，<a href="http://hellogcc.blogbus.com/logs/69145033.html" target="_blank">Hellogcc在征集今年workshop的话题</a>，欢迎各位积极支持，参与。</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2012%2F01%2F15%2F11963%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Open64、LLVM、GCC源代码行数对比</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F11%2F29%2F11859%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC如何进出GIMPLE中间表示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F27%2F11679%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC几个选项学习</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F23%2F11157%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">open64中的gcc前端</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F03%2F28%2F11567%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11210%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">仔细端详GCC 4.6的新特性</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/11/29/11859/' rel='bookmark' title='GCC如何进出GIMPLE中间表示'>GCC如何进出GIMPLE中间表示</a></li>
<li><a href='http://www.lingcc.com/2011/08/13/11685/' rel='bookmark' title='说说静态单赋值（SSA,Static Single-Assignment)'>说说静态单赋值（SSA,Static Single-Assignment)</a></li>
<li><a href='http://www.lingcc.com/2011/06/27/11679/' rel='bookmark' title='GCC几个选项学习'>GCC几个选项学习</a></li>
<li><a href='http://www.lingcc.com/2011/03/28/11567/' rel='bookmark' title='仔细端详GCC 4.6的新特性'>仔细端详GCC 4.6的新特性</a></li>
<li><a href='http://www.lingcc.com/2010/04/16/10746/' rel='bookmark' title='来仔细看看GCC 4.5.0'>来仔细看看GCC 4.5.0</a></li>
<li><a href='http://www.lingcc.com/2010/03/08/10709/' rel='bookmark' title='GNU工具链学习笔记'>GNU工具链学习笔记</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/09/16/11210/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

