really kill off the last MRMInitReg inst, remove logic from encoder.
authorChris Lattner <sabre@nondot.org>
Fri, 5 Feb 2010 21:34:18 +0000 (21:34 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 5 Feb 2010 21:34:18 +0000 (21:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95437 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmPrinter/X86MCInstLower.cpp
lib/Target/X86/X86Instr64bit.td
lib/Target/X86/X86InstrSSE.td
lib/Target/X86/X86MCCodeEmitter.cpp

index 4688158b54a5c4650c6f6d1fd5630ef02542267f..4f09699ef678241479b9e1ef8ddffe902ef051ce 100644 (file)
@@ -384,6 +384,7 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
   case X86::MMX_V_SETALLONES:
     LowerUnaryToTwoAddr(OutMI, X86::MMX_PCMPEQDrr); break;
   case X86::FsFLD0SS:     LowerUnaryToTwoAddr(OutMI, X86::PXORrr); break;
+  case X86::FsFLD0SD:     LowerUnaryToTwoAddr(OutMI, X86::PXORrr); break;
   case X86::V_SET0:       LowerUnaryToTwoAddr(OutMI, X86::XORPSrr); break;
   case X86::V_SETALLONES: LowerUnaryToTwoAddr(OutMI, X86::PCMPEQDrr); break;
 
index 8fb5021e49db428ea0fc0a73bb381c6bc19fcb47..ef86b2c7c388d0c0b9ede55ffac6faa38097e09e 100644 (file)
@@ -1610,8 +1610,7 @@ def SLDT64m : RI<0x00, MRM0m, (outs i16mem:$dst), (ins),
 // when we have a better way to specify isel priority.
 let Defs = [EFLAGS],
     AddedComplexity = 1, isReMaterializable = 1, isAsCheapAsAMove = 1 in
-def MOV64r0   : I<0x31, MRMInitReg, (outs GR64:$dst), (ins),
-                 "",
+def MOV64r0   : I<0x31, MRMInitReg, (outs GR64:$dst), (ins), "",
                  [(set GR64:$dst, 0)]>;
 
 // Materialize i64 constant where top 32-bits are zero. This could theoretically
index b55acc6d5e07a7050f10e575ad5da544c8149bb1..bbdaed4116aeb52f62b16226c4052cd0dde3e381 100644 (file)
@@ -506,9 +506,9 @@ def Int_COMISSrm: PSI<0x2F, MRMSrcMem, (outs), (ins VR128:$src1, f128mem:$src2),
 let isReMaterializable = 1, isAsCheapAsAMove = 1, isCodeGenOnly = 1,
     canFoldAsLoad = 1 in
   // FIXME: Set encoding to pseudo!
-def FsFLD0SS : I<0xEF, MRMInitReg, (outs FR32:$dst), (ins),
-                 "", [(set FR32:$dst, fp32imm0)]>,
-               Requires<[HasSSE1]>, TB, OpSize;
+def FsFLD0SS : I<0xEF, MRMInitReg, (outs FR32:$dst), (ins), "",
+                 [(set FR32:$dst, fp32imm0)]>,
+                 Requires<[HasSSE1]>, TB, OpSize;
 
 // Alias instruction to do FR32 reg-to-reg copy using movaps. Upper bits are
 // disregarded.
@@ -1270,8 +1270,8 @@ def Int_COMISDrm: PDI<0x2F, MRMSrcMem, (outs), (ins VR128:$src1, f128mem:$src2),
 // Alias instructions that map fld0 to pxor for sse.
 let isReMaterializable = 1, isAsCheapAsAMove = 1, isCodeGenOnly = 1,
     canFoldAsLoad = 1 in
-def FsFLD0SD : I<0xEF, MRMInitReg, (outs FR64:$dst), (ins),
-                 "pxor\t$dst, $dst", [(set FR64:$dst, fpimm0)]>,
+def FsFLD0SD : I<0xEF, MRMInitReg, (outs FR64:$dst), (ins), "",
+                 [(set FR64:$dst, fpimm0)]>,
                Requires<[HasSSE2]>, TB, OpSize;
 
 // Alias instruction to do FR64 reg-to-reg copy using movapd. Upper bits are
index 8b0cb3e6ee22e3ede3a5c95ffefb0ab1d23eb385..4061b9c40ac32549f7764840f487ba6daa947b8e 100644 (file)
@@ -364,10 +364,10 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS) const {
     // Skip the last source operand that is tied_to the dest reg. e.g. LXADD32
     --NumOps;
   
-  // FIXME: Can we kill off MRMInitReg??
-  
   unsigned char BaseOpcode = X86II::getBaseOpcodeFor(TSFlags);
   switch (TSFlags & X86II::FormMask) {
+  case X86II::MRMInitReg:
+    assert(0 && "FIXME: Remove this form when the JIT moves to MCCodeEmitter!");
   default: errs() << "FORM: " << (TSFlags & X86II::FormMask) << "\n";
       assert(0 && "Unknown FormMask value in X86MCCodeEmitter!");
   case X86II::RawFrm: {
@@ -547,14 +547,6 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS) const {
 #endif
     break;
   }
-    
-  case X86II::MRMInitReg:
-    EmitByte(BaseOpcode, OS);
-    // Duplicate register, used by things like MOV8r0 (aka xor reg,reg).
-    EmitRegModRMByte(MI.getOperand(CurOp),
-                     GetX86RegNum(MI.getOperand(CurOp)), OS);
-    ++CurOp;
-    break;
   }
   
 #ifndef NDEBUG