分支预测和优化代码

时间:2018-01-23 15:19:52

标签: optimization compiler-construction embedded branch branch-prediction

我有以下一组代码块,两个块的目的是相同的。 我必须实现第二个块以避免反向逻辑并提高可读性。 顺便说一句,在生产代码中,条件非常复杂。

问题是 - 我知道分支是坏的,我需要支付多少罚款。 另外,请注意,其他分支的概率非常高。

X = Get_XValue()
if (X != 5)
{
    K = X+3;
    .
    .
}
X = Get_XValue()
if (X == 5)
{
    /*do nothing*/
}
else
{
    K = X+3;
    .
    .
}

1 个答案:

答案 0 :(得分:3)

这一切都归结为你的编译器。一个好的优化编译器会检测到第二个例子中的then - 子句是空的并反转测试。因此,它将为两种情况生成相同的代码,因此根本不应该受到惩罚。

作为旁注,我可以补充一点,我试过的所有三个编译器就是这种情况(clang,gcc和iccarm),