mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-03 14:08:57 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160059 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
597f2950d8
commit
875913439c
@ -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
Block a user