GCC vs clang优化器差异导致此代码无法优化?

时间:2017-01-27 18:37:04

标签: gcc clang compiler-optimization compiler-options boost-range

如果我编译以下代码:

#include <boost/range/irange.hpp>

template<class Integer>
auto iota(Integer last)
{
    return boost::irange(0, last);    
}

template<class Integer, class StepSize>
auto iota(Integer last, StepSize step_size)
{
    return boost::irange(0, last, step_size);    
}

int main(  )
{
    int y = 0;
    for (auto x : iota(5))
        y += x;
    return y;
}

-O1的clang 3.9.0和GCC 6.3.0中,我通过GCC完成优化(只返回最终结果)和大量的clang输出代码。见this experiment on GodBolt。但是,如果我将clang切换到-O2,它也可以编译所有内容。

两个编译器之间的优化差异是什么? -O1模式导致这种情况发生?

0 个答案:

没有答案