Hi LLVM developers,
I am porting GlobalISel to AVR Target, try to delete SelectionDAG in 100* commits https://github.com/xiangzhai/llvm/tree/avr/lib/Target/AVR
I just copy ARMCallLowering, ARMRegisterBankInfo, ARMLegalizerInfo, ARMInstructionSelector, ARMRegisterBanks.td into AVR target's folder, then renamed them to AVRXXX
Removed ARM related code, for example:
* AEABI (eabi)
* hasDivideInXXXMode
* useSoftFloat (soft-float-point), hasVFP2
Overrided addIRTranslator, addLegalizeMachineIR, addRegBankSelectaddGlobalInstructionSelect in AVRTargetMachine.
Added AVRGenGlobalISel.inc to CMakeLists.txt for tablegen, also *.cpp related to GlobalISel.
Also added GlobalISel dependence to LLVMBuild.txt
But tablegen is failed to generate AVRGenGlobalISel.inc:
[ 53%] Building CXX object lib/Target/AVR/CMakeFiles/LLVMAVRCodeGen.dir/AVRLegalizerInfo.cpp.o
In file included from /data/project/xiangzhai/llvm/lib/Target/AVR/AVRInstructionSelector.cpp:103:
/data/project/xiangzhai/llvm/build/lib/Target/AVR/AVRGenGlobalISel.inc:112:64: error: no member named
'GPR8RegClassID' in namespace 'llvm::AVR'; did you mean 'GPR8RegClass'?
GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/AVR::GPR8RegClassID,
~~~~~^~~~~~~~~~~~~~
GPR8RegClass
/data/project/xiangzhai/llvm/build/lib/Target/AVR/AVRGenRegisterInfo.inc:827:36: note: 'GPR8RegClass'
declared here
extern const TargetRegisterClass GPR8RegClass;
^
The general purpose registers, such as GPR8, defined in AVRRegisterInfo.td like this https://github.com/xiangzhai/llvm/blob/avr/lib/Target/AVR/AVRRegisterInfo.td#L114
Why auto-generated GPR8RegClassID, but not GPR8RegClass, where is the ID come from? please give me some hint, thanks a lot!