Liệu mặt sau() của một hàm đảm bảo trả về khối cơ bản terminator của CFG trong LLVM?Khối cơ bản cuối cùng của hàm trong LLVM
6
A
Trả lời
3
Tôi không nghĩ, vì không có một thứ như một "terminator BB": có rất nhiều thể loại BB bị chấm dứt bởi sự trở lại.
0
No. Có thể có nhiều khối cơ bản của một hàm, chẳng hạn một hàm chứa nhiều câu lệnh trả về. mỗi khối cơ bản có chứa một câu lệnh return từ hàm này sau đó sẽ được gọi là một khối terminator hoặc khối cơ sở terminator. Để phát hiện tất cả các khối cơ bản là các khối cơ bản terminator (tức là chứa một câu lệnh trả về), hãy làm như sau:
runOnFunction {
for BB in F:
for I in BB:
if (ReturnInst *RI = dyn_cast<ReturnInst> I)
BB is terminator Basic Block
endif
endfor
endfor
}
Bạn có thể cho tôi ví dụ về hàm có nhiều hơn một BB kết thúc không? Ngay cả khi có nhiều trả về, sẽ có một BB với một phi để "thu thập" tất cả các BBs trả lại, phải không? – dalibocai
Không, trên thực tế, thậm chí có một đường chuyền được gọi là UnifyFunctionExitNodes thực hiện chính xác tên của nó, nghĩa là loại bỏ nhiều lần thoát khỏi một hàm – CAFxX
OK. Tôi hiểu rồi. Cảm ơn! – dalibocai