From 502e36c3c95c6bf65094ae6a6ca52d7ff4e13d68 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 6 Apr 2004 01:25:33 +0000 Subject: [PATCH] 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 --- lib/Target/X86/InstSelectSimple.cpp | 11 ++++++++++- lib/Target/X86/X86ISelSimple.cpp | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/InstSelectSimple.cpp b/lib/Target/X86/InstSelectSimple.cpp index 25f67ecca6a..6144b626a67 100644 --- a/lib/Target/X86/InstSelectSimple.cpp +++ b/lib/Target/X86/InstSelectSimple.cpp @@ -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(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(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; diff --git a/lib/Target/X86/X86ISelSimple.cpp b/lib/Target/X86/X86ISelSimple.cpp index 25f67ecca6a..6144b626a67 100644 --- a/lib/Target/X86/X86ISelSimple.cpp +++ b/lib/Target/X86/X86ISelSimple.cpp @@ -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(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(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; -- 2.34.1