Nano Hash - криптовалюты, майнинг, программирование

выражение метки в ИК-коде llvm

Иногда я обнаруживал, что идентификатор метки в llvm IR начинается с запятой ';', например ; <label> 6, однако, как я знаю, запятая используется для комментариев. Так как же llvm получить информацию о ярлыке в комментариях? Я что-то упустил?
Выполняется один простой тест.
исходный файл на C:

#include <stdio.h>

int main()
{
 int a;
 scanf("%d", &a);
 if ( a > 3)
  a *= 2;
 return 0;
}

ИК-код llvm, сгенерированный http://llvm.org/demo/index.cgi (то же как clang -c -emit-llvm main.c) выглядит следующим образом:

; ModuleID = '/tmp/webcompile/_13654_0.bc'

@.str = private unnamed_addr constant [3 x i8] c"%d\00", align 1

define i32 @main() nounwind uwtable {
  %a = alloca i32, align 4
  %1 = call i32 (i8*, ...)* @__isoc99_scanf(i8* getelementptr inbounds ([3 x i8]* @.str, i64 0, i64 0), i32* %a) nounwind
  %2 = load i32* %a, align 4, !tbaa !0
  %3 = icmp sgt i32 %2, 3
  br i1 %3, label %4, label %6

; <label>:4                                       ; preds = %0
  %5 = shl nsw i32 %2, 1
  store i32 %5, i32* %a, align 4, !tbaa !0
  br label %6

; <label>:6                                       ; preds = %4, %0
  ret i32 0
}

Ответы:


1

В LLVM IR блок не нуждается в явной метке. Инструкции такие же, что и для% 1,% 2,% 3. LLVM присваивает номера безымянным инструкциям и блокам в порядке возрастания. br i1 %3... завершает первый блок, а последняя использованная числовая метка - 3, поэтому следующий блок помечается как 4. Этот блок заканчивается следующей инструкцией br, а последний использованный номер - 5, поэтому следующий и последний блок помечен цифрой 6. На Сначала может показаться странным, что блоки и инструкции используют одно и то же пространство имен, но помните, что блоки тоже являются значениями.

19.03.2012
  • Спасибо за вашу помощь. Это кажется немного странным. Не могли бы вы дать мне совет по изучению LLVM? 20.03.2012

  • 2

    Несмотря на формулировку, %4 в label %4 НЕ является меткой, это просто ссылка на блок. Вы правы, это очень сбивает с толку, см. этот вопрос для обсуждения.

    19.12.2013

    3

    Что-то, что вы можете попробовать, - это запустить передачу instnamer на вашем IR, которая даст явное имя всему, поэтому вам не нужно беспокоиться о поиске неявных имен.

    16.06.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..