Как я могу сделать переменную volatile или const используя LLVM pass - PullRequest
0 голосов
/ 01 февраля 2019

Есть ли какой-нибудь встроенный метод LLVM, который позволяет сделать мою переменную volatile или const.

Например, если моя программа на C имеет вид,

#include<stdio.h>
int main() {
    int x=1,y=2,z=10;
    z=x+y;
    return 0;
}

Я хочу изменить эту программу, используя проход LLVM, чтобы она работала, как показано ниже,

#include<stdio.h>
int main() {
    volatile int x=1,y=2,z=10;
    z=x+y;
    return 0;
}

1 Ответ

0 голосов
/ 01 февраля 2019

Хорошо, я понял.Было бы просто setVolatile (1) .

Pass будет выглядеть примерно так,

for(Module::iterator F=M.begin(),e=M.end();F!=e;++F){
    for(Function::iterator B=F->begin(),e=F->end();B!=e;++B){
        for(BasicBlock::iterator i=B->begin(),e=B->end();i!=e;++i){
            if(isa<StoreInst>(i)){
                StoreInst *temps=dyn_cast<StoreInst>(i);
                temps->setVolatile(1);
            }
            if(isa<LoadInst>(i)){
                 LoadInst *temps=dyn_cast<LoadInst>(i);
                 temps->setVolatile(1);
            }       
        }
    }
}
...