与我自己的项目相比,llvm Costmodel Analysis Pass通过opt显示了不同的结果

时间:2018-11-27 10:09:14

标签: optimization llvm llvm-clang llvm-ir instructions

我有一个llvm IR文件,其中包含fadd和fmul之类的指令。使用成本模型传递计算成本时的这些说明

 win.on('focus',function(){
        if(child!=null && child.isVisible()){
            child.focus()
        }
    });

我还创建了自己的密码,并在代码中运行了该密码。但是,当我这样做时,尽管它在同一系统上运行,但我得到了不同的结果。当我使用opts运行时,通常只有1和0,但从来没有像2这样的。另请参见随附的屏幕截图,顶部是opt版本,底部是我自己的密码。

CostModel Analysis Pass by opt and in my own project

基本上,我复制了CostModel.cpp底部所描述的过程,除了结果不同外,此过程非常有效。没有任何错误,但是正如您在图像中看到的,添加 fmul 指令正确,因此成本为2。可悲的是,在我自己的项目中,它只是变成了得出1。

我还尝试通过调用TargetTransformInfoWrapperPass中描述的所有指令来实施整个成本分析。这样也可以完美编译,但结果却相同。

我尝试过的另一个选项是在stackoverflow上发布的: Get cpu cycles of LLVM IR using CostModel。我必须作一些细微的调整,但对于同一指令上的fmul和fadd,结果都是1。

很明显,通过opt进行的成本模型传递正在做我不知道的其他事情,但是我对此一无所获。

当您阅读了整篇文章并且熟悉LLVM并知道原因可能是什么或可以将我指向另一个方向时,我将不胜感激,因为这个问题已经使我发疯了数周。

0 个答案:

没有答案