LLVM每日談之五十一 TargetMachine

TargetMachine及其子類:

前文介紹了TargetMachine類,我們這篇文章簡單分析下TargetMachine類及其子類。TargetMachine類位於include/llvm/Target/TargetMachine.h 文件之中。

TargetMachine類作爲獲取目標機器相關信息的入口,作爲目標機器類的父類,並不是直接被具體平臺的TargetMachine類所繼承的,而是首先被LLVMTargetMachine類繼承:

TargetMachine.h

class LLVMTargetMachine : public TargetMachine {

然後具體平臺的TargetMachine類再繼承LLVMTargetMachine類.(以X86平臺爲例)

lib/Target/X86/X86TargetMachine.h

class X86TargetMachine final : public LLVMTargetMachine {

所以,TargetMachine、LLVMTargetMachine和具體的目標平臺的XXXTargetMachine類的關係如圖所示:

圖來自於:llvm::TargetMachine Class Reference

TargetMachine Virtual Methods:

基於前文我們已經提到的LLVM後端文檔跟不上代碼的變化,實際上現在除了TargetMachine類,Target description classes 中其他的類已經都不在include/llvm/Target目錄之下。與此同時,在TargetMachine類中也不存在獲取其他類包含的信息的接口,目前TargetMachine僅存的獲取Target description classes中的類所包含信息的接口如下(其他的接口多是獲取具體信息):

  /// Create a DataLayout.
  const DataLayout createDataLayout() const { return DL; }

創建DataLayout.

  virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const {
    return nullptr;
  }

獲取TargetSubtargetInfo。

其他的Target description classes(除TargetMachine和DataLayout之外):

以TargetLowering爲例:TargetLowering(include/llvm/Codegen/TargetLowering.h)

TargetLoweringBase和TargetLowering都在include/llvm/Codegen/TargetLowering.h之中。而具體目標平臺的XXXTargetLowering類則是在lib/Target下具體的目標平臺目錄之中。以X86平臺爲例,其則是在lib/Target/X86/X86ISelLowering.h 之中:

  //  X86 Implementation of the TargetLowering interface
  class X86TargetLowering final : public TargetLowering {

這個文件的註釋也描述的很清晰:

// This file defines the interfaces that X86 uses to lower LLVM code into a
// selection DAG.

其他幾個類的情況雖然有細微差別,但是情況都差不多。

 

所以,本文的分析,其實是結合Target description classesImplementations of the abstract description interfaces for particular targets進行的代碼分析,後端文檔中六大部分的1和5.

 

相關內容:

小乖他爹:LLVM每日談之三十七 LLVM後端簡介(杭州分享PPT)

小乖他爹:LLVM每日談之四十七 LLVM後端文檔解析

小乖他爹:LLVM每日談之四十八 LLVM後端文檔解析1

小乖他爹:LLVM每日談之四十九 LLVM後端文檔解析2

小乖他爹:LLVM每日談之五十 LLVM 後端文檔解析3 —目標描述類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章