LLVM, как узнать, выполняется ли сохранение или загрузка из массива или поля? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть следующий код C:

int main(){
    int array[10];
    array[0] = 1;
    int a;
    a = 1;
    return 0;
}

Для следующего кода я получаю следующий IR LLVM:

define dso_local i32 @main() #0 {
    %1 = alloca i32, align 4
    %2 = alloca [10 x i32], align 16
    %3 = alloca i32, align 4
    store i32 0, i32* %1, align 4
    %4 = getelementptr inbound [10 x i32], [10 x i32]* %2, i64 0, i64 0
    store i32 1, i32* %4, align 16
    store i32 1, i32* %3, align 4
    ret i32 0
}

Теперь я пишу проход, который считается только store работа с массивами. Теперь, если мы проверим строку 6 store i32 i, i32* %4, align 16, мы увидим, что %4 указывает на другой Instruction, который мы можем проверить, относится к типу массива со следующим if(auto *Ai = dyn_cast<AllocaInst>(value)). У меня вопрос: как я могу получить это Instruction, если увижу, что Instruction относится к типу store? В принципе, как получить Instruction %4?

...