Имам разгърнати контури във файла a.bc
използвайки следната команда:opt -loops -loop-rotate -loop-simplify -loop-unroll -unroll-count=3 -unroll-allow-partial -debug a.bc -o a.loop.bc
Сега, трябваше да премахна задните ръбове от всички бримки във функция, да речем F
, Мислех да създам пропуск llvm, който ще намери блока за излизане от цикъла (предполагам само 1 изходен блок) и след това да заменя задната страна с ръб към изходния блок на всеки цикъл.
Има ли пряк начин да го направите?
Отговори:
0 за отговор № 1Така че, ако не се лъжа, искате да имате уникаленизходен блок за всички бримки? ако всичките ви контури имат постоянен брой на пътуванията, тогава няма изходен блок в изходните блокове и затова е доста лесно да ги свържете, иначе има някои изходни фи възли, тогава трябва да ги реконструирате, за да запазите доминиращото свойство на SSA , което може да не е направо напред, можете да намерите различни методи за това в глава 5 на тази книга (можете да изтеглите книгата): SSA книга