2012-03-14 37 views

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.

+1

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

+0

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

+0

OK. Tôi hiểu rồi. Cảm ơn! – dalibocai

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 
} 
Các vấn đề liên quan