void results(char *name, char class, int n1, int n2, int n3, int niter,
double t, double mops, char *optype,
int passed_verification, char *npbversion,
char *compiletime, char *cc, char *clink, char *c_lib,
char *c_inc, char *cflags, char *clinkflags)
{
printf("%c\n", class);
if (n3 == 0) {
n3++;
}
else
printf("%4dx%4dx%4d\n", n1, n2, n3);
}
int main() {
double timecounter = 0.0;
results(
"IS", CLASS, 1, 64, 0, 3, timecounter, 1.0,
"keys ranked", 1, NPBVERSION, COMPILETIME, CC, CLINK,
C_LIB, C_INC, CFLAGS, CLINKFLAGS);
return 0;
}
Examining the regalloc debug info, we see that the following corresponding registers are allocated differently. This is because of different live interval weights (calculated as UseDefFreq / (Size + 25*SlotIndex::InstrDist)) that lead to different evictions:
AArch64
%4: 4.38 / (400 + 400) = 4.38 * 1.25 = 5.47
%14: 3.03 / (168 + 400) = 3.03 * 1.76 = 5.33
X86
%4: 4.38 / (512 + 400) = 4.38 * 1.1 = 4.80
%18: 3.03 / (216 + 400) = 3.03 * 1.62 = 4.92
Examining the
regallocdebug info, we see that the following corresponding registers are allocated differently. This is because of different live interval weights (calculated asUseDefFreq / (Size + 25*SlotIndex::InstrDist)) that lead to different evictions:AArch64
X86