Implement the LLVM IR select statement for MIPS FastISel.
Based on a patch by Reed Kotler.
Paths
| Differential D6774
[mips][FastISel] Implement the select statement for MIPS FastISel. ClosedPublic Authored by vkalintiris on Dec 23 2014, 6:20 PM.
Details Summary Implement the LLVM IR select statement for MIPS FastISel. Based on a patch by Reed Kotler.
Diff Detail Event TimelineComment Actions A regression was fixed here because it shows up in test-suite only after this patch. It's a generic problem caused by a shortcoming in tabelgen whereby you can't mark a side effect of an instruction as it making a register Dead and instead out tablegen marked the mul instruction wirh defs for LO0 and HI0 which causes a problem for the register allocator when trying to allocate register AC0 since LO0 and HI0 are dependent registers. The solution here for this regression is probably temporary since the proper way is to fix tablegen but that will require some more work and approval. dsanders added a parent revision: D6770: [mips][FastISel] Handle calls with non legal types i8 and i16..Jan 22 2015, 12:20 PM
vkalintiris retitled this revision from Implement mips fast-isel select statement to [mips][FastISel] Implement the select statement for MIPS FastISel.. vkalintiris updated this object. Comment ActionsAddressed review comments and removed the review's portions that are not vkalintiris added a parent revision: D9825: [mips][FastISel] Clobber HI0/LO0 registers in MUL instructions..May 18 2015, 8:09 AM dsanders edited edge metadata. Comment ActionsLGTM with the type check corrected and the FIXMEs added.
This revision is now accepted and ready to land.Jun 1 2015, 6:16 AM Closed by commit rL238756: [mips][FastISel] Implement the select statement for MIPS FastISel. (authored by vkalintiris). · Explain WhyJun 1 2015, 9:00 AM This revision was automatically updated to reflect the committed changes.
Revision Contents
Diff 18202 lib/Target/Mips/MipsFastISel.cpp
test/CodeGen/Mips/Fast-ISel/mul1.ll
test/CodeGen/Mips/Fast-ISel/sel1.ll
|
MVT::INVALID_SIMPLE_VALUE_TYPE and MVT::Other are included in this check and shouldn't be.
Also, you can't rely on the types being defined in this order. You could use: