2017-01-13 4 views
1

Я просто хотел удостовериться, что правильно понял getOperand(). Похоже, getOperand() возвращают операнды в обратном порядке:Запись или чтение инструкций в LLVM

так что если у меня есть:

%1 = mul nsw i32 7, 2   # The c source code is: a = 7; b = a*2 
ret i32 %1      # The c source code is: return a; 

Поправьте меня, если я ошибаюсь:

В первой инструкции, getOperand (0) дает мне «i32» (что читается) и getOpernad (1) «nsw» (то, что записывается).

Во второй инструкции используется только один операнд i32.

Так что, я думаю, мой вопрос в том, что если инструкция пишет что-то, это последний операнд?

ответ

1

Инструкция mul является умножением, поэтому нет, ее операнд не соответствует этим выражениям C. Вы видите эту инструкцию вместо alloca s и store, потому что Clang выяснил, что ваш код является постоянным выражением и распространяет его. И AFAIK, вы ничего не можете сделать, чтобы остановить это - Clang выполняет постоянное распространение даже с -O0.