Удаление первой инструкции в базовом блоке из LLVM IR?

У меня есть следующий 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). Есть ли другой способ? Если вы знаете, пожалуйста, дайте мне знать.

6
задан damrudhard 14 March 2012 в 02:58
поделиться