У меня есть ИК-файл followint LLVMСтирание первой инструкции в базовом блоке от LLVM IR?
%1 = load i32* %i, align 4
%2 = load i32* %j, align 4
%3 = icmp sgt i32 %1, %2
br i1 %3, label %4, label %6
; <label>:4 ; preds = %0
%5 = load i32* %i, align 4
store i32 %5, i32* %k, align 4
br label %6
; <label>:6 ; preds = %5, %0
ret i32 0
В нем я первый загрузке vairable «я» в% 1 и переменная «J» в% 2, то я сравнив больше, чем условие, (я> к). На основании этого есть ветвь либо на метку 4, либо на ярлыке 6. Моя проблема в том, что есть две команды нагрузки для переменной «i» в первом базовом блоке и в другом базовом блоке. Здесь я хочу удалить вторую инструкцию загрузки. Для этого я делаю это так же, как при достижении второй инструкции нагрузки для переменной «i». Я заменяю все виды использования 2-й инструкции первой инструкцией, тогда я стираю текущую инструкцию, то есть вторую. Здесь я не могу установить указатель итератора инструкций. Я не хочу устанавливать следующую команду (хранить i32% 5, i32 *% k, выровнять 4). Есть ли другой способ? Если вы знаете, пожалуйста, дайте мне знать.
Не уверен, что я понимаю ваш вопрос. Но я уверен, что последующие пропуски должны быть в состоянии легко удалить эту нагрузку для вас, поэтому я бы не стал беспокоиться. Если у вас есть веская причина для удаления нагрузки, пожалуйста, повторите свой вопрос, потому что я не могу понять, какова ваша проблема. – CAFxX
Моя проблема в том, что после удаления второй инструкции загрузки я хочу установить итератор инструкций таким образом, чтобы на следующей итерации он должен был достигнуть (сохранить i32% 5, i32 *% k, align 4), потому что в цикле for я увеличиваю итератор команд , – damrudhard
Почему бы просто не получить новый итератор, вызвав 'BB-> begin()' снова сразу после 'inst-> eraseFromParent()'? – CAFxX