logo
АСНИ

Операции с указателями

Для вычисления адресов элементов массивов, структур и т. д. с правильной типизацией выполняется с помощью инструкции getelementptr.

%array = alloca i32, i32 %size

%ptr = getelementptr i32* %array, i32 %index ; значение типа i32*

getelementptr только вычисляет адрес, но не обращается к памяти. Инструкция принимает произвольное количество индексов и может разыменовывать структуры любой вложенности.

Также существует инструкции extractvalue и insertvalue. Они отличаются от getelementptr тем, что принимают не указатель на агрегатный тип данных (массив или структуру), а само значение такого типа. extractvalue возвращает соответственное значение подэлемента, а insertvalue порождает новое значение агрегатного типа.

%n = extractvalue { i32, [4 x i8*] } %s, 0

%tmp = add i32 %n, 1

%s.1 = insertvalue { i32, [4 x i8*] } %s, i32 %tmp, 0