[llvm-commits] [llvm] r41802 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
Chris Lattner
clattner at apple.com
Mon Sep 10 14:08:38 PDT 2007
Thanks Evan!
Can you please add a README entry for this? It's better to use xor
reg,reg when the flags are dead (which requires more analysis).
-Chris
On Sep 10, 2007, at 1:48 PM, Evan Cheng wrote:
> Author: evancheng
> Date: Mon Sep 10 15:48:53 2007
> New Revision: 41802
>
> URL: http://llvm.org/viewvc/llvm-project?rev=41802&view=rev
> Log:
> It's not safe to rematerialize MOV32r0 etc. by simply cloning the
> original
> instruction. These are implemented with xor which will modify the
> conditional
> code. They should be rematerialized as move instructions.
>
> Modified:
> llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/
> X86RegisterInfo.cpp?rev=41802&r1=41801&r2=41802&view=diff
>
> ======================================================================
> ========
> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Mon Sep 10
> 15:48:53 2007
> @@ -265,9 +265,28 @@
> MachineBasicBlock::iterator I,
> unsigned DestReg,
> const MachineInstr *Orig) const {
> - MachineInstr *MI = Orig->clone();
> - MI->getOperand(0).setReg(DestReg);
> - MBB.insert(I, MI);
> + // MOV32r0 etc. are implemented with xor which clobbers
> condition code.
> + // Re-materialize them as movri instructions to avoid side effects.
> + switch (Orig->getOpcode()) {
> + case X86::MOV8r0:
> + BuildMI(MBB, I, TII.get(X86::MOV8ri), DestReg).addImm(0);
> + break;
> + case X86::MOV16r0:
> + BuildMI(MBB, I, TII.get(X86::MOV16ri), DestReg).addImm(0);
> + break;
> + case X86::MOV32r0:
> + BuildMI(MBB, I, TII.get(X86::MOV32ri), DestReg).addImm(0);
> + break;
> + case X86::MOV64r0:
> + BuildMI(MBB, I, TII.get(X86::MOV64ri32), DestReg).addImm(0);
> + break;
> + default: {
> + MachineInstr *MI = Orig->clone();
> + MI->getOperand(0).setReg(DestReg);
> + MBB.insert(I, MI);
> + break;
> + }
> + }
> }
>
> static const MachineInstrBuilder &FuseInstrAddOperand
> (MachineInstrBuilder &MIB,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list