Я не могу понять, что означает эта строка кода (о LLVM FunctionPass) - PullRequest
0 голосов
/ 29 апреля 2020
void HandleFunction(Function *Func) {
    FixFunctionConstantExpr(Func);
    set<GlobalVariable *> Globals;
    set<User *> Users;
    for (BasicBlock &BB : *Func) {
        for (Instruction &I : BB) {
            for (Value *Op : I.operands()) {
                if (GlobalVariable *G = dyn_cast<GlobalVariable>(Op->stripPointerCasts())) {
                    if(User* U=dyn_cast<User>(Op)){ 
                        Users.insert(U); // Here is 'A'
                    }
                    Users.insert(&I);    // Here is 'B'
                    Globals.insert(G);
                }
            }
        }
    }

 // ....
 // Some Logic
 // ....

}

(A и B) Если это сделать, разве это не перекрывается?

В чем разница между «U» (A) и «& I» (B)?

Спасибо!

...