mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 01:12:59 +00:00
[mips] Check the register class before replacing materializations of zero with $zero in microMIPS.
Summary: The microMIPS register class GPRMM16 does not contain the $zero register. However, MipsSEDAGToDAGISel::replaceUsesWithZeroReg() would replace uses of the $dst register: [d]addiu, $dst, $zero, 0 with the $zero register, without checking for membership in the register class of the target machine operand. Reviewers: dsanders Subscribers: llvm-commits, dsanders Differential Revision: http://reviews.llvm.org/D13984 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251622 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0b88d3e7ee
commit
8bbd2ffc7c
@ -115,6 +115,11 @@ bool MipsSEDAGToDAGISel::replaceUsesWithZeroReg(MachineRegisterInfo *MRI,
|
||||
if (MI->isPHI() || MI->isRegTiedToDefOperand(OpNo) || MI->isPseudo())
|
||||
continue;
|
||||
|
||||
// Also, we have to check that the register class of the operand
|
||||
// contains the zero register.
|
||||
if (!MRI->getRegClass(MO.getReg())->contains(ZeroReg))
|
||||
continue;
|
||||
|
||||
MO.setReg(ZeroReg);
|
||||
}
|
||||
|
||||
|
8
test/CodeGen/Mips/micromips-zero-mat-uses.ll
Normal file
8
test/CodeGen/Mips/micromips-zero-mat-uses.ll
Normal file
@ -0,0 +1,8 @@
|
||||
; RUN: llc -march=mips -mcpu=mips32r2 -mattr=+micromips,+nooddspreg -O0 < %s | FileCheck %s
|
||||
|
||||
; CHECK: addiu $[[R0:[0-9]+]], $zero, 0
|
||||
; CHECK: subu16 $2, $[[R0]], ${{[0-9]+}}
|
||||
define i32 @foo() {
|
||||
%1 = sub i32 0, undef
|
||||
ret i32 %1
|
||||
}
|
Loading…
Reference in New Issue
Block a user