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