Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Описание идентификаторов

Описание идентификаторов

PDF-файл Описание идентификаторов Практикум компиляторы (СП) (39616): Другое - 5 семестрОписание идентификаторов: Практикум компиляторы (СП) - PDF (39616) - СтудИзба2019-05-11СтудИзба

Описание файла

PDF-файл из архива "Описание идентификаторов", который расположен в категории "". Всё это находится в предмете "практикум компиляторы (сп)" из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

ОГЛАВЛЕНИЕИдентификаторы ................................................................................................. 2Структура модуля ............................................................................................... 2Типы данных........................................................................................................ 3First Class Types ...............................................................................................

3Single Value Types ....................................................................................... 3Integer Type .................................................................................................. 3Floating Point Types .....................................................................................

4Pointer Type .................................................................................................. 4Aggregate Types ........................................................................................... 4Array Type ................................................................................................

4Structure Type ........................................................................................... 4Инструкции .......................................................................................................... 5terminator instructions: ..................................................................................... 5binary instructions ............................................................................................. 5bitwise binary instructions ................................................................................

6memory instructions.......................................................................................... 6alloca ............................................................................................................. 6load ................................................................................................................ 6store ........................................................................................................... 6other instructions ...............................................................................................

8„icmp„ ............................................................................................................ 8„phi„ ............................................................................................................... 9'call'................................................................................................................ 9conversion operations ....................................................................................... 9'sext' ...............................................................................................................

9Полное описание доступно по ссылке http://llvm.org/docs/LangRef.html.ИДЕНТИФИКАТОРЫ- бывают глобальные и локальные. Имена глобальных (функции,глобальные переменные) начинаются с символа „@‟. Локальные (именарегистров, типы ) начинаются с „%‟.Пример:%foo, @DivisionByZero, %a.really.long.identifier.Комментарии начинаются с „;‟ и идут до конца строки%0 = add i32 %X, %X; yields i32:%0%1 = add i32 %0, %0; yields i32:%1%result = add i32 %1, %1СТРУКТУРА МОДУЛЯLLVM программы состоят из модулей, которые соответствуют единицамтрансляции.Каждый модуль состоит из функций, глобальныхпеременных и таблицы символов.

Модули могут быть связаны междусобой с помощью компоновщика.Пример:; Declare the string constant as a global constant.@.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"; External declaration of the puts functiondeclare i32 @puts(i8* nocapture) nounwind; Definition of main functiondefine i32 @main() { ; i32()*; Convert [13 x i8]* to i8 *...%cast210 = getelementptr [13 x i8]* @.str, i64 0, i64 0; Call puts function to write out the string to stdout.call i32 @puts(i8* %cast210)ret i32 0}; Named metadata!0 = metadata !{i32 42, null, metadata !"string"}!foo = !{!0}В приведенном примере переменная “.str” объявлена как глобальная,функция “puts” внешняя, определены “main” и метаданные “foo”. Вобщем случае глобальные переменные представлены как указатель, внашем примере как указатель на массив символов и указатель нафункцию.ТИПЫ ДАННЫХVoid - аналог типа void в С/С++Синтаксис:voidFunction TypeФункциональный тип соответствует сигнатуре функции и состоит из типавозвращаемого значения, и списка типов формальных параметров.Синтаксис:<тип возвращаемого значения> (<список параметров>)Пример:i32 (i32)функция принимающая i32, возвращающая i32float (i16, i32 *) * Указатель на функцию, принимающую i16 и указательна i32, возвращающую float.First Class TypesИнструкции могут вернуть только значения этих типов.Single Value TypesТипы, которым будут соответствовать типам регистров целевой машины,при генерации кода.Integer TypeЦелочисленные типы, простой тип который указывает количество битотводимое для хранение значения.

Диапазон от 1 бита до 223-1.Синтаксис:iNN – число бит.Examples:i11 битное целое.i32 32 битное целое.i1942652 1942652 битное целое.Floating Point Typeshalf 16-битное число с плавающей точкойfloat 32- битное число с плавающей точкойdouble64- битное число с плавающей точкойfp128 128- битное число с плавающей точкой (112-битная мантиса)x86_fp80 80- битное число с плавающей точкой (X87)Pointer TypeLLVM не поддерживает указатель на void (void*) , вместо этогоиспользуется i8*.Синтаксис:<type> *Пример:[4 x i32]* Указатель на массив из четырех i32.i32 (i32*) * Указатель на функцию, принимающую i32* и возвращающуюi32.Aggregate TypesArray TypeСлужит для описания массивовСинтаксис:[<# количество элементов> x <тип элементов>]Примеры:[40 x i32] Массив из 40 32-битных целых.[41 x i32] Массив из 41 32-битного целого.[4 x i8]Массив из 4 8-битных целых.[3 x [4 x i32]]массив 3x4 содержащий 32- битных целых.Structure TypeДоступ к элементам структур в памяти осуществляется с использованиеминструкций„load„ and „store„ по указателю на поле полученному спомощью инструкции „getelementptr„.

Доступ к структурам в регистрахосуществляется с использованием инструкций „extractvalue„ и „insertvalue„.Синтаксис:%T1 = type { <список типов> } ; описывает обычную структуру%T2 = type <{ <список типов > }> ; описывает «packed» структуру –элементы следуют непосредственно друг за другом без выравниванияэлементов в памяти, ее размер равен сумме размеров членов структуры.Пример:{ i32, i32, i32 } Три i32 значения.{ float, i32 (i32) * }«Пара» (кортеж из двух элементов) где первыйэлемент float и второй указатель на функцию, принимающую i32, ивозвращающую i32.<{ i8, i32 }>„packed‟ структура, с размером в 5 байтИНСТРУКЦИИterminator instructions:Каждый базовый блок должен заканчиваться инструкцией класса“Terminator” , показывающей, что должно быть выполнено послезавершения базового блока.

Таких инструкций немного:„ret„, „br„, „switch„, „indirectbr„, „invoke„, „resume„, and „unreachable„.ret – аналог оператора return в C/C++Пример:ret i32 5ret voidbr – инструкция передачи управленияbr i1 <условие>, label <условие истинно>, label <условие ложно>br label <dest>; Unconditional branchпример:Test:%cond = icmp eq i32 %a, %bbr i1 %cond, label %IfEqual, label %IfUnequalIfEqual:ret i32 1IfUnequal:ret i32 0binary instructionsПринимают два аргумента и возвращают значение, примерами могутслужить add, sub, mul, div.Синтаксис:<result> = add <ty> <op1>, <op2><result> = add nuw <ty> <op1>, <op2><result> = add nsw <ty> <op1>, <op2><result> = add nuw nsw <ty> <op1>, <op2><result> = add i32 4, %var; i32:result = 4 + %varЕслиоперация вызвала беззнаковое переполнение, возвращаемоезначение будет равно 2n, где n ширина результата в битах.nuw и nsw сокращения от “No Unsigned Wrap” и “No Signed Wrap”.

Еслиэти ключевые слова присутствуют, то при переполнении в качестверезультирующего значения будет использовано специальное значение“poison value” (см. http://llvm.org/docs/LangRef.html#poisonvalues)bitwise binary instructionsнапример: and,or, xor;memory instructionsallocaинструкция „alloca„ выделяет память на стеке текущей функции,<результат> = alloca [inalloca] <тип_выделяемой_памяти> [, <тип> <числоэлементов>] [, align <выравнивание>]Инструкция „alloca„ выделяет sizeof(<тип>)*КоличествоЭлементов байтна стеке текущей функции, возвращает указатель на выделенную память.Память будет освобождена при возврате управления из этой функции.Пример:%ptr = alloca i32%ptr = alloca i32, i32 4%ptr = alloca i32, i32 4, align 1024%ptr = alloca i32, align 1024load< результат > = load [volatile] <тип>* <указатель>[, align <выравнивание>]Инструкция „load„ используется для чтения из памяти.storestore [volatile] <тип> <значение>, <тип>* <указатель>[, align <выравнивание >]Инструкция „store‟ используется для записи в память.Пример:%ptr = alloca i32store i32 3, i32* %ptr%val = load i32* %ptr; выделить на стеке i32; записать 3 по указателю %ptr; считать значение по указателю ptr; val =3getelementptrИспользуется для получения адреса элемента составного типа данных.Инструкция только вычисляет адрес и не осуществляет доступ к памяти.<результат>=getelementptr<Типуказателя>*<переменная_указывающая_на_составной_тип>{, <тип> <индекс>}*<результат> = getelementptr inbounds < Тип указателя >*переменная_указывающая_на_составной_тип >{, <тип> <индекс>}*<Первый аргумент всегда указатель, являющийся базой для вычислений.Остальные аргументы являются индексами для обращения к элементамсоставного типа.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее