mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 00:39:36 +00:00
Minor tweak to avoid an extra reg-reg copy that the register allocator has to eliminate
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12680 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
29bf0623e5
commit
502e36c3c9
@ -1109,12 +1109,21 @@ void ISel::promote32(unsigned targetReg, const ValueRecord &VR) {
|
||||
|
||||
Value *Val = VR.Val;
|
||||
const Type *Ty = VR.Ty;
|
||||
if (Val)
|
||||
if (Val) {
|
||||
if (Constant *C = dyn_cast<Constant>(Val)) {
|
||||
Val = ConstantExpr::getCast(C, Type::IntTy);
|
||||
Ty = Type::IntTy;
|
||||
}
|
||||
|
||||
// If this is a simple constant, just emit a MOVri directly to avoid the
|
||||
// copy.
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(Val)) {
|
||||
int TheVal = CI->getRawValue() & 0xFFFFFFFF;
|
||||
BuildMI(BB, X86::MOV32ri, 1, targetReg).addImm(TheVal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we have the register number for this value...
|
||||
unsigned Reg = Val ? getReg(Val) : VR.Reg;
|
||||
|
||||
|
@ -1109,12 +1109,21 @@ void ISel::promote32(unsigned targetReg, const ValueRecord &VR) {
|
||||
|
||||
Value *Val = VR.Val;
|
||||
const Type *Ty = VR.Ty;
|
||||
if (Val)
|
||||
if (Val) {
|
||||
if (Constant *C = dyn_cast<Constant>(Val)) {
|
||||
Val = ConstantExpr::getCast(C, Type::IntTy);
|
||||
Ty = Type::IntTy;
|
||||
}
|
||||
|
||||
// If this is a simple constant, just emit a MOVri directly to avoid the
|
||||
// copy.
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(Val)) {
|
||||
int TheVal = CI->getRawValue() & 0xFFFFFFFF;
|
||||
BuildMI(BB, X86::MOV32ri, 1, targetReg).addImm(TheVal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we have the register number for this value...
|
||||
unsigned Reg = Val ? getReg(Val) : VR.Reg;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user