Я делаю проект на LLVM.
Я пытаюсь сделать пропуск:
Для функции
если аргументы (параметры) являются константами,
это сделает новую функцию, что константы
преобразован в локальную переменную,
и удален из аргументов.
Например:
void main(){
c=foo(a,b);
d=foo(a,100);
}
double foo(x,y){return x+y;}
будет оптимизирован в:
void main(){
c=foo(a,b);
d=foo1(a);
}
double foo(x,y){return x+y;}
double foo1(x){
int y=100;
return x+y;
}
Для этого я пытаюсь сделать новую локальную переменную
а затем с помощью replaceAllUsesWith
функция.
Но я не могу выделить новую локальную переменную.
Я попытался определить new Value*
но когда я назначаю это аргументу,
он становится тем же указателем, что и аргумент, который делает replaceAllUsesWith
Функция бесполезна.
Есть ли способ выделить (в памяти) новую локальную переменную по типу Value*
?
Задача ещё не решена.
Других решений пока нет …