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:
Chris Lattner 2004-04-06 01:25:33 +00:00
parent 29bf0623e5
commit 502e36c3c9
2 changed files with 20 additions and 2 deletions

View File

@ -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;

View File

@ -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;