Пример #1
0
// Returns true if base value is undef, or if all members are undef
bool AreAllUndefined(const llvm::Value* value)
{
    if (IsUndef(value))
        return true;

    // Assume a fully undef aggregate satisfies "IsUndef" at the highest level
    return false;

    // If a fully undef aggregate ever needs to be walked to to verify that,
    // use the following code.
    //if (const llvm::User* user = llvm::dyn_cast<llvm::User>(value)) {
    //    switch(user->getType()->getTypeID()) {
    //    case llvm::Type::VectorTyID:
    //    case llvm::Type::ArrayTyID:
    //    case llvm::Type::StructTyID:
    //        if (user->getNumOperands() > 0) {
    //            for (llvm::User::const_op_iterator i = user->op_begin(), e = user->op_end(); i != e; ++i) {
    //                if (! AreAllUndefined(*i))
    //                    return false;
    //            }
    //        }
    //    }
    //}

    //return true;
}
Пример #2
0
String CppMacro::ToString() const
{
	String r;
	if(param.GetCount()) {
		String h = param;
		h.Replace(".", "...");
		r << "(" << h << ")";
	}
	if(IsUndef())
		r << " #undef";
	else
		r << ' ' << body;
	return r;
}
Пример #3
0
// Returns false if base value is undef, or if any member is undef
bool AreAllDefined(const llvm::Value* value)
{
    if (IsUndef(value))
        return false;

    if (const llvm::User* user = llvm::dyn_cast<llvm::User>(value)) {
        switch(user->getType()->getTypeID()) {
        case llvm::Type::VectorTyID:
        case llvm::Type::ArrayTyID:
        case llvm::Type::StructTyID:
            if (user->getNumOperands() > 0) {
                for (llvm::User::const_op_iterator i = user->op_begin(), e = user->op_end(); i != e; ++i) {
                    if (! AreAllDefined(*i))
                        return false;
                }
            }
        }
    }

    return true;
}