[llvm-dev] SchedClasses

Thorsten Schütt via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 22 10:34:03 PDT 2017


Hi all,

I am looking at the scheduling model of the ThunderX2. I am trying to figure out the cost of the LDADDALX instruction. The following program’s output is:
name LDADDALX; class 872
microops 65535
I would have assumed that the microops are less than 20. The ThunderX2 has a detailed cost model for LSE. Could somebody tell me what I am doing wrong?

Cheers,
  Tom

#define GET_REGINFO_ENUM
#include "AArch64GenRegisterInfo.inc"

#define GET_INSTRINFO_ENUM
#include "AArch64GenInstrInfo.inc"

#define GET_SUBTARGETINFO_ENUM
#include "AArch64GenSubtargetInfo.inc"

#include "llvm/MC/MCSchedule.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/SubtargetFeature.h"
#include "llvm/MC/MCSubtargetInfo.h"

#define GET_INSTRINFO_MC_DESC
#include "AArch64GenInstrInfo.inc"

#define GET_SUBTARGETINFO_MC_DESC
#include "AArch64GenSubtargetInfo.inc"

#define GET_REGINFO_MC_DESC
#include "AArch64GenRegisterInfo.inc"

int main(int argc, char **argv) {
  llvm::MCInstrInfo II;

  llvm::InitAArch64MCInstrInfo(&II);

  llvm::StringRef ref = II.getName(llvm::AArch64::LDADDALX);
  llvm::MCInstrDesc d = II.get(llvm::AArch64::LDADDALX);

  printf("name %s; class %d\n", ref.str().c_str(), d.SchedClass);

  printf("microops %d\n", llvm::ThunderX2T99Model.getSchedClassDesc(d.SchedClass)->NumMicroOps);

  return 0;
}

/*
   LDADDALB_LDADDALH_LDADDALW_LDADDALX = 872, in Sched enum
*/


More information about the llvm-dev mailing list