Amogh Akshintala
2013-Jan-20 04:12 UTC
[LLVMdev] Trouble implementing a new subtarget for X86
Hey all, I am trying to implement a new subtarget for the X86 target that has only 64 bit registers and instructions and a very minimal ISA excluding any FPU instructions etc. I have made the required changes to the instructions such that all the instructions that I don't wish to use have a required<> clause that precludes them from being utilised when compiling for this subtarget. I have modified the X86TargetLowering constructor to only include the GR64 group of registers for this particular subtarget. I am now faced with issues with the Lowering of Formal targets. I have implemented a new calling convention that changes all arguments of type i8, i16 or i32 to i64 and only uses the 64 bit registers to pass arguments. I am however encountering an error in the FormalArgumentLowering function in x86ISelLowering.cpp. I have reproduced the error and Debug output in the attached file. The code being compiled is a simple 2 function program where main calls a function and that function counts to 'n' the parameter passed to it from main. Can anyone help me figure out why the formal arguments suddenly have no EVT value?(that is the code that fails) at line 1979 of X86ISelLowering.cpp Thanks a lot for your time, Amogh -- The Wheel of Time turns and Ages come and go, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth returns again. -------------- next part -------------- llc -march=x86 -mcpu=CSE502 -filetype=asm -view-legalize-dags -debug blah.s Args: llc -march=x86 -mcpu=CSE502 -filetype=asm -view-legalize-dags -debug blah.s Features: CPU:CSE502 Subtarget features: SSELevel 0, 3DNowLevel 0, 64bit 1 MERGING MOSTLY EMPTY BLOCKS - BEFORE: for.body: ; preds = %for.cond br label %for.inc for.inc: ; preds = %for.body %2 = load i32* %i, align 4 %inc = add nsw i32 %2, 1 store i32 %inc, i32* %i, align 4 br label %for.cond AFTER: for.inc: ; preds = %for.cond %2 = load i32* %i, align 4 %inc = add nsw i32 %2, 1 store i32 %inc, i32* %i, align 4 br label %for.cond CGP: Found local addrmode: [Base:%n.addr] CGP: Found local addrmode: [Base:%i] CGP: Found local addrmode: [Base:%i] CGP: Found local addrmode: [Base:%n.addr] CGP: Found local addrmode: [Base:%i] CGP: Found local addrmode: [Base:%i] Computing probabilities for for.inc set edge for.inc -> 0 successor weight to 124 Computing probabilities for for.end Computing probabilities for for.cond set edge for.cond -> 0 successor weight to 124 set edge for.cond -> 1 successor weight to 4 Computing probabilities for entry === countto Unknown argument type! UNREACHABLE executed at /home/theusurper/llvm/llvm/lib/Target/X86/X86ISelLowering.cpp:1979! 0 llc 0x000000000141a8ae 1 llc 0x000000000141adaa 2 libpthread.so.0 0x00007fd9c91e6cb0 3 libc.so.6 0x00007fd9c822d425 gsignal + 53 4 libc.so.6 0x00007fd9c8230b8b abort + 379 5 llc 0x0000000001400c86 6 llc 0x0000000000aaac92 llvm::X86TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const + 1378 7 llc 0x0000000000c75883 llvm::SelectionDAGISel::LowerArguments(llvm::BasicBlock const*) + 2339 8 llc 0x0000000000c9af15 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 949 9 llc 0x0000000000c99e95 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 853 10 llc 0x0000000000e9238e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 110 11 llc 0x0000000001395ddf llvm::FPPassManager::runOnFunction(llvm::Function&) + 431 12 llc 0x00000000013960c8 llvm::FPPassManager::runOnModule(llvm::Module&) + 104 13 llc 0x00000000013964ca llvm::MPPassManager::runOnModule(llvm::Module&) + 634 14 llc 0x0000000001396c7e llvm::PassManagerImpl::run(llvm::Module&) + 302 15 llc 0x0000000001396ed1 llvm::PassManager::run(llvm::Module&) + 33 16 llc 0x00000000005fba55 17 llc 0x00000000005fa712 main + 226 18 libc.so.6 0x00007fd9c821876d __libc_start_main + 237 19 llc 0x00000000005fa555 Stack dump: 0. Program arguments: llc -march=x86 -mcpu=CSE502 -filetype=asm -view-legalize-dags -debug blah.s 1. Running pass 'Function Pass Manager' on module 'blah.s'. 2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@countto' Aborted (core dumped)