小编w3l*_*ome的帖子

有人可以向我解释为什么在LLVM的以下代码中使用相同的操作数进行不等式测试?

我的同事向我展示了LLVM源代码中的以下宏:

#define IMPLEMENT_UNORDERED(TY, X,Y)                                         \
    if (TY->isFloatTy()) {                                                   \
        if (X.FloatVal != X.FloatVal || Y.FloatVal != Y.FloatVal) {          \
            return Dest;                                                     \
        }                                                                    \
    } else if (X.DoubleVal != X.DoubleVal || Y.DoubleVal != Y.DoubleVal) {   \
            Dest.IntVal = APInt(1,true);                                     \
            return Dest;                                                     \
}
Run Code Online (Sandbox Code Playgroud)

以下是他们使用此宏的方式:

static GenericValue executeFCMP_UEQ(GenericValue Src1, GenericValue Src2,
                                    Type *Ty) {
    GenericValue Dest;
    IMPLEMENT_UNORDERED(Ty, Src1, Src2)
    return executeFCMP_OEQ(Src1, Src2, Ty);
}
Run Code Online (Sandbox Code Playgroud)

您可以在下面看到GenericValue的定义:

struct GenericValue {
    union {
        double          DoubleVal;
        float           FloatVal;
        PointerTy       PointerVal; …
Run Code Online (Sandbox Code Playgroud)

c++ comparison relational llvm operator-keyword

3
推荐指数
1
解决办法
319
查看次数

标签 统计

c++ ×1

comparison ×1

llvm ×1

operator-keyword ×1

relational ×1