Use movaps / movapd (instead of movss / movsd) to do FR32 / FR64 reg to reg
authorEvan Cheng <evan.cheng@apple.com>
Thu, 16 Feb 2006 01:50:02 +0000 (01:50 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 16 Feb 2006 01:50:02 +0000 (01:50 +0000)
transfer.

According to the Intel P4 Optimization Manual:

Moves that write a portion of a register can introduce unwanted
dependences. The movsd reg, reg instruction writes only the bottom
64 bits of a register, not to all 128 bits. This introduces a dependence on
the preceding instruction that produces the upper 64 bits (even if those
bits are not longer wanted). The dependence inhibits register renaming,
and thereby reduces parallelism.

Not to mention movaps is shorter than movss.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26226 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86RegisterInfo.cpp

index fdbe4225a064e5ba63d3a1fe64b85d0d9997f4cd..571bef18db6a23b69a623e3bcf5c3e1d02dbb48b 100644 (file)
@@ -106,9 +106,9 @@ void X86RegisterInfo::copyRegToReg(MachineBasicBlock &MBB,
   } else if (RC == &X86::RFPRegClass || RC == &X86::RSTRegClass) {
     Opc = X86::FpMOV;
   } else if (RC == &X86::FR32RegClass || RC == &X86::V4F4RegClass) {
-    Opc = X86::MOVSSrr;
+    Opc = X86::MOVAPSrr;
   } else if (RC == &X86::FR64RegClass || RC == &X86::V2F8RegClass) {
-    Opc = X86::MOVSDrr;
+    Opc = X86::MOVAPDrr;
   } else {
     assert(0 && "Unknown regclass");
     abort();