Ho la lima IR followint LLVMCancellare una prima istruzione in Basic Block da 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
In esso sto primo caricamento vairable "i" in% 1 e "j" variabile in% 2 allora io sto paragonando il maggiore di condizione che è (i> j). Sulla base di ciò esiste un ramo per etichettare 4 o etichetta 6. Il mio problema è che ci sono due istruzioni di caricamento per la variabile "i" una nel primo blocco di base e altre nel 2o blocco di base. Qui voglio rimuovere la seconda istruzione di caricamento. Per quello sto facendo come quando arrivo alla seconda istruzione di caricamento per la variabile "i" Sto sostituendo tutti gli usi della 2a istruzione con la prima istruzione, quindi sto cancellando l'istruzione corrente, cioè 2a. Qui non riesco a impostare il puntatore iteratore dell'istruzione. Non desidero impostare le istruzioni successive (memorizza i32% 5, i32 *% k, allinea 4). C'è un altro modo? Se lo sai per favore fammelo sapere.
Non capisco la tua domanda. Ma sono abbastanza sicuro che i passaggi successivi dovrebbero essere in grado di rimuovere facilmente quel carico per te, quindi non mi preoccuperei molto. Se hai un valido motivo per eliminare il carico, ti preghiamo di riaffermare la domanda, perché non sono in grado di capire qual è il tuo problema. – CAFxX
Il mio problema è che dopo aver cancellato la seconda istruzione di caricamento, voglio impostare l'iteratore di istruzioni in modo tale che nell'iterazione successiva debba raggiungere (memorizzare i32% 5, i32 *% k, allineare 4) perché in ciclo sto incrementando l'iteratore di istruzioni . – damrudhard
Perché non ottenere semplicemente un nuovo iteratore chiamando 'BB-> begin()' immediatamente dopo 'inst-> eraseFromParent()'? – CAFxX