如何查看llvm优化前后的差异Selectiondag

问题描述

我最近阅读了“LLVM Essentials”一书,其中描述了“优化Selectiondag”,并举了一个例子如下:

unsigned hadd(uint32x4_t a) {
    return a[0] + a[1] + a[2] + a[3];
}

它会输出如下汇编代码

mov w8,v0.s[3]
mov w9,v0.s[2]
add w8,w8,w9
mov w9,v0.s[1]
add w8,w9
fmov w9,s0
add w0,w9
ret

它会一个一个添加每个数组元素。

在像 AARCH64 这样具有向量加法指令的 ARM 架构中,它会发出更高效的代码,例如:

addv s0,v0.4s
fmov w0,s0
ret

我使用命令 llc -mtriple=aarch64-linux-gnu -verify-machineinstrs hadd.ll 测试它,但没有得到相同的结果,它总是像以前一样发出汇编代码。 我是否遗漏了什么,我该怎么做才能获得书中所说的优化结果? 感谢您的回复

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)