У меня есть следующий IR-файл LLVM
%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
В нем я сначала загружаю переменную "i" в %1 и переменную "j" в %2, затем я сравниваю условие "больше чем" то есть (i>j). Исходя из этого, есть ветвь либо к метке 4, либо к метке 6. Моя проблема в том, что есть две инструкции загрузки для переменной «i», одна в первом базовом блоке, а другая во втором базовом блоке. Здесь я хочу удалить 2-ю инструкцию загрузки. Для этого я делаю это так, как когда я добираюсь до 2-й инструкции загрузки для переменной «i», я заменяю все использования 2-й инструкции первой инструкцией, затем стираю текущую инструкцию, т.е. 2-ю. Здесь я не могу установить указатель итератора инструкций. Я не хочу устанавливать следующую инструкцию (сохранить i32 %5, i32* %k, выровнять 4). Есть ли другой способ? Если вы знаете, пожалуйста, дайте мне знать.