forked from OSchip/llvm-project
InstrEmitter::EmitSubregNode() optimize extract_subreg in this case:
r1025 = s/zext r1024, 4 r1026 = extract_subreg r1025, 4 to a copy: r1026 = copy r1024 This is correct. However it uses TII->isCoalescableExtInstr() which can return true for instructions which essentially does a sext_in_reg so this can end up with an illegal copy where the source and destination register classes do not match. Add a check to avoid it. Sorry, no test case possible at this time. rdar://11849816 llvm-svn: 160059
This commit is contained in:
parent
3aab6a86a2
commit
b17122859b
|
@ -479,7 +479,8 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
|||
unsigned SrcReg, DstReg, DefSubIdx;
|
||||
if (DefMI &&
|
||||
TII->isCoalescableExtInstr(*DefMI, SrcReg, DstReg, DefSubIdx) &&
|
||||
SubIdx == DefSubIdx) {
|
||||
SubIdx == DefSubIdx &&
|
||||
TRC == MRI->getRegClass(SrcReg)) {
|
||||
// Optimize these:
|
||||
// r1025 = s/zext r1024, 4
|
||||
// r1026 = extract_subreg r1025, 4
|
||||
|
|
Loading…
Reference in New Issue