llvm-exegesis on AArch64 architecture

Hi everyone,

I can’t find for which opcode llvm-exegesis works on AArch64. I have used bash script from the official site that testing all opcodes for X86 architecture and I changed script to test AArch64 opcodes and there is no working case.
There are some errors:
Assertion for AArch64CallLowering::lowerReturn,
setRegTo is not implemented, results will be unreliable,
Infeasible : has unknown operands,
Infeasible : Didn’t find any scheme to make the instruction serial,
Unsupported opcode: isPseudo.
Unsupported opcode: isBranch/isIndirectBranch
Unsupported opcode: isCall/isReturn

I’m using llvm trunk (native build for AARCH64), am I missing something?


Hi Luka,

I don’t have access to and AArch64 machine unfortunately.
I’m adding John Brawn who implemented experimental support for AArch64.

Could you take a look at this?

It looks like everything is currently broken on AArch64, because function return generation is hitting

an assert. I’ve posted D53074 to fix that.

With that fixed instructions that use only X and W registers will work. Almost anything that uses an

immediate won’t work, because the AArch64 backend uses a lot of custom immediate operand types

that aren’t marked OPERAND_IMMEDIATE (which means you get the “has unknown operands” error).