FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LLVM12でのAPI変更分を確認

LLVMのバージョン12に向けてリポジトリではブランチが切られている。私の自作LLVMバックエンド分は現在LLVM11をベースとしているが、LLVM12に乗せ換えることによりどの程度の差分が発生するのかを確認した。

  • LLVMのバックエンドターゲットの登録方法が変わっている。add_llvm_component_group()CMakeLists.txtに適用する必要がある。
diff --git a/llvm/lib/Target/MYRISCVX/CMakeLists.txt b/llvm/lib/Target/MYRISCVX/CMakeLists.txt
index 97850d0e6044..b742f694c612 100644
--- a/llvm/lib/Target/MYRISCVX/CMakeLists.txt
+++ b/llvm/lib/Target/MYRISCVX/CMakeLists.txt
@@ -1,3 +1,5 @@
+add_llvm_component_group(MYRISCVX)
  • サブターゲットとして、CPU以外にTuneCPUという引数を追加する必要がある。これがどういう意味なのかはちゃんと調べていない。
diff --git a/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXMCTargetDesc.cpp b/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXMCTargetDesc.cpp
index c4dc6e7cbfd5..f924d3d52a8d 100644
--- a/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXMCTargetDesc.cpp
+++ b/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXMCTargetDesc.cpp
@@ -65,9 +65,10 @@ static MCRegisterInfo *createMYRISCVXMCRegisterInfo(const Triple &TT) {
 // @{ MYRISCVXMC_TargetDesc_cpp_createMYRISCVXMCSubtargetInfo
 static MCSubtargetInfo *createMYRISCVXMCSubtargetInfo(const Triple &TT,
                                                       StringRef CPU, StringRef FS) {
+  std::string CPUName = std::string(CPU);
   if (CPU.empty())
     CPU = TT.isArch64Bit() ? "cpu-rv64" : "cpu-rv32";
-  return createMYRISCVXMCSubtargetInfoImpl(TT, CPU, FS);
+  return createMYRISCVXMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPUName, FS);
 }
 // @} MYRISCVXMC_TargetDesc_cpp_createMYRISCVXMCSubtargetInfo
-MYRISCVXSubtarget::MYRISCVXSubtarget(const Triple &TT, StringRef &CPU,
+MYRISCVXSubtarget::MYRISCVXSubtarget(const Triple &TT, StringRef &CPU, StringRef TuneCPU,
                                      StringRef &FS,
                                      const MYRISCVXTargetMachine &_TM) :
-    MYRISCVXGenSubtargetInfo(TT, CPU, FS),
+    MYRISCVXGenSubtargetInfo(TT, CPU, TuneCPU, FS),
     TM(_TM), TargetTriple(TT), TSInfo(),
     InstrInfo(),
-    FrameLowering(initializeSubtargetDependencies(CPU, FS, TM)),
+    FrameLowering(initializeSubtargetDependencies(CPU, TuneCPU, FS, TM)),
     TLInfo(TM, *this), RegInfo(*this, getHwMode()) {
 }
  • Ctx.createNameTempSymbol()APIの仕様が変わっている。
diff --git a/llvm/lib/Target/MYRISCVX/AsmParser/MYRISCVXAsmParser.cpp b/llvm/lib/Target/MYRISCVX/AsmParser/MYRISCVXAsmParser.cpp
index 9af4443ecf64..74f9852950b2 100644
--- a/llvm/lib/Target/MYRISCVX/AsmParser/MYRISCVXAsmParser.cpp
+++ b/llvm/lib/Target/MYRISCVX/AsmParser/MYRISCVXAsmParser.cpp
@@ -447,8 +447,7 @@ void MYRISCVXAsmParser::expandPseudoLLA(MCInst &Inst, SMLoc IDLoc,

   MCContext &Ctx = getContext();

-  MCSymbol *TmpLabel = Ctx.createTempSymbol(
-      "pcrel_hi", /* AlwaysAddSuffix */ true, /* CanBeUnnamed */ false);
+  MCSymbol *TmpLabel = Ctx.createNamedTempSymbol("pcrel_hi");
   Out.emitLabel(TmpLabel);

   MCOperand DestReg = Inst.getOperand(0);
@@ -494,8 +493,7 @@ void MYRISCVXAsmParser::expandPseudoLA(MCInst &Inst, SMLoc IDLoc,
   if (getContext().getObjectFileInfo()->isPositionIndependent()) {
     unsigned GOTLoadOpcode = isRV64() ? MYRISCVX::LD : MYRISCVX::LW;

-    MCSymbol *TmpLabel = Ctx.createTempSymbol(
-        "pcrel_hi", /* AlwaysAddSuffix */ true, /* CanBeUnnamed */ false);
+    MCSymbol *TmpLabel = Ctx.createNamedTempSymbol("pcrel_hi");
     Out.emitLabel(TmpLabel);