[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