I tienen el archivo IR followint LLVM¿Borrando una primera instrucción en bloque básico de 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
En ella estoy primera carga vairable "i" en% 1 y variable "j" en% 2 entonces yo estoy comparando el mayor de condición que es (i> j). Basado en eso, hay una rama en la etiqueta 4 o en la etiqueta 6. Mi problema es que hay dos instrucciones de carga para la variable "i" una en el primer bloque básico y otra en el 2º bloque básico. Aquí quiero eliminar la segunda instrucción de carga. Para ello, lo hago como cuando llego a la instrucción de carga 2 para la variable "i". Estoy reemplazando todos los usos de la 2da instrucción por la primera instrucción, luego borro la instrucción actual, es decir, 2da. Aquí no puedo establecer el puntero del iterador de instrucción. No quiero configurar para la próxima instrucción (almacenar i32% 5, i32 *% k, alinear 4). ¿Hay alguna otra forma? Si sabes, házmelo saber.
No estoy seguro de que comprenda su pregunta. Pero estoy bastante seguro de que los pases posteriores deberían poder eliminar esa carga fácilmente para ti, así que realmente no me molestaría. Si tiene una razón convincente para eliminar la carga, vuelva a formular su pregunta, ya que no puedo entender cuál es realmente su problema. – CAFxX
Mi problema es que después de eliminar la segunda instrucción de carga, quiero configurar el iterador de instrucciones de manera que en la siguiente iteración alcance (almacenar i32% 5, i32 *% k, alinear 4) porque en el bucle estoy incrementando el iterador de instrucción . – damrudhard
¿Por qué no simplemente obtener un nuevo iterador llamando 'BB-> begin()' de nuevo inmediatamente después de 'inst-> eraseFromParent()'? – CAFxX