radeon/llvm: Remove AMDIL CMP instructions and associated lowering code
authorTom Stellard <thomas.stellard@amd.com>
Wed, 23 May 2012 18:32:54 +0000 (14:32 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Thu, 24 May 2012 18:12:31 +0000 (14:12 -0400)
src/gallium/drivers/radeon/AMDILISelLowering.cpp
src/gallium/drivers/radeon/AMDILISelLowering.h
src/gallium/drivers/radeon/AMDILInstructions.td

index 570927df9741deb27e119666aecf3d43822f5610..bb9dcf18d55c580d7026148745ae2363cd475ffd 100644 (file)
@@ -414,216 +414,6 @@ CondCCodeToCC(ISD::CondCode CC, const MVT::SimpleValueType& type)
   };
 }
 
-  static unsigned int
-translateToOpcode(uint64_t CCCode, unsigned int regClass)
-{
-  switch (CCCode) {
-    case AMDILCC::IL_CC_D_EQ:
-    case AMDILCC::IL_CC_D_OEQ:
-      if (regClass == AMDIL::GPRV2F64RegClassID) {
-        return (unsigned int)AMDIL::DEQ_v2f64;
-      } else {
-        return (unsigned int)AMDIL::DEQ;
-      }
-    case AMDILCC::IL_CC_D_LE:
-    case AMDILCC::IL_CC_D_OLE:
-    case AMDILCC::IL_CC_D_ULE:
-    case AMDILCC::IL_CC_D_GE:
-    case AMDILCC::IL_CC_D_OGE:
-    case AMDILCC::IL_CC_D_UGE:
-      return (unsigned int)AMDIL::DGE;
-    case AMDILCC::IL_CC_D_LT:
-    case AMDILCC::IL_CC_D_OLT:
-    case AMDILCC::IL_CC_D_ULT:
-    case AMDILCC::IL_CC_D_GT:
-    case AMDILCC::IL_CC_D_OGT:
-    case AMDILCC::IL_CC_D_UGT:
-      return (unsigned int)AMDIL::DLT;
-    case AMDILCC::IL_CC_D_NE:
-    case AMDILCC::IL_CC_D_UNE:
-      return (unsigned int)AMDIL::DNE;
-    case AMDILCC::IL_CC_F_EQ:
-    case AMDILCC::IL_CC_F_OEQ:
-      return (unsigned int)AMDIL::FEQ;
-    case AMDILCC::IL_CC_F_LE:
-    case AMDILCC::IL_CC_F_ULE:
-    case AMDILCC::IL_CC_F_OLE:
-    case AMDILCC::IL_CC_F_GE:
-    case AMDILCC::IL_CC_F_UGE:
-    case AMDILCC::IL_CC_F_OGE:
-      return (unsigned int)AMDIL::FGE;
-    case AMDILCC::IL_CC_F_LT:
-    case AMDILCC::IL_CC_F_OLT:
-    case AMDILCC::IL_CC_F_ULT:
-    case AMDILCC::IL_CC_F_GT:
-    case AMDILCC::IL_CC_F_OGT:
-    case AMDILCC::IL_CC_F_UGT:
-      if (regClass == AMDIL::GPRV2F32RegClassID) {
-        return (unsigned int)AMDIL::FLT_v2f32;
-      } else if (regClass == AMDIL::GPRV4F32RegClassID) {
-        return (unsigned int)AMDIL::FLT_v4f32;
-      } else {
-        return (unsigned int)AMDIL::FLT;
-      }
-    case AMDILCC::IL_CC_F_NE:
-    case AMDILCC::IL_CC_F_UNE:
-      return (unsigned int)AMDIL::FNE;
-    case AMDILCC::IL_CC_I_EQ:
-    case AMDILCC::IL_CC_U_EQ:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::IEQ;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRV2I8RegClassID
-          || regClass == AMDIL::GPRV2I16RegClassID) {
-        return (unsigned int)AMDIL::IEQ_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRV4I8RegClassID
-          || regClass == AMDIL::GPRV4I16RegClassID) {
-        return (unsigned int)AMDIL::IEQ_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_L_EQ:
-    case AMDILCC::IL_CC_UL_EQ:
-      return (unsigned int)AMDIL::LEQ;
-    case AMDILCC::IL_CC_I_GE:
-    case AMDILCC::IL_CC_I_LE:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::IGE;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::IGE_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::IGE_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_I_LT:
-    case AMDILCC::IL_CC_I_GT:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::ILT;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::ILT_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::ILT_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_L_GE:
-      return (unsigned int)AMDIL::LGE;
-    case AMDILCC::IL_CC_L_LE:
-      return (unsigned int)AMDIL::LLE;
-    case AMDILCC::IL_CC_L_LT:
-      return (unsigned int)AMDIL::LLT;
-    case AMDILCC::IL_CC_L_GT:
-      return (unsigned int)AMDIL::LGT;
-    case AMDILCC::IL_CC_I_NE:
-    case AMDILCC::IL_CC_U_NE:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::INE;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::INE_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::INE_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_U_GE:
-    case AMDILCC::IL_CC_U_LE:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::UGE;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::UGE_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::UGE_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_L_NE:
-    case AMDILCC::IL_CC_UL_NE:
-      return (unsigned int)AMDIL::LNE;
-    case AMDILCC::IL_CC_UL_GE:
-      return (unsigned int)AMDIL::ULGE;
-    case AMDILCC::IL_CC_UL_LE:
-      return (unsigned int)AMDIL::ULLE;
-    case AMDILCC::IL_CC_U_LT:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::ULT;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::ULT_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::ULT_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_U_GT:
-      if (regClass == AMDIL::GPRI32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::UGT;
-      } else if (regClass == AMDIL::GPRV2I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::UGT_v2i32;
-      } else if (regClass == AMDIL::GPRV4I32RegClassID
-          || regClass == AMDIL::GPRI8RegClassID
-          || regClass == AMDIL::GPRI16RegClassID) {
-        return (unsigned int)AMDIL::UGT_v4i32;
-      } else {
-        assert(!"Unknown reg class!");
-      }
-    case AMDILCC::IL_CC_UL_LT:
-      return (unsigned int)AMDIL::ULLT;
-    case AMDILCC::IL_CC_UL_GT:
-      return (unsigned int)AMDIL::ULGT;
-    case AMDILCC::IL_CC_F_UEQ:
-    case AMDILCC::IL_CC_D_UEQ:
-    case AMDILCC::IL_CC_F_ONE:
-    case AMDILCC::IL_CC_D_ONE:
-    case AMDILCC::IL_CC_F_O:
-    case AMDILCC::IL_CC_F_UO:
-    case AMDILCC::IL_CC_D_O:
-    case AMDILCC::IL_CC_D_UO:
-      // we don't care
-      return 0;
-
-  }
-  errs()<<"Opcode: "<<CCCode<<"\n";
-  assert(0 && "Unknown opcode retrieved");
-  return 0;
-}
-
 /// Helper function used by LowerFormalArguments
 static const TargetRegisterClass*
 getRegClassFromType(unsigned int type) {
@@ -812,322 +602,6 @@ AMDILTargetLowering::convertToReg(MachineOperand op) const
   return op;
 }
 
-void
-AMDILTargetLowering::generateCMPInstr(
-    MachineInstr *MI,
-    MachineBasicBlock *BB,
-    const TargetInstrInfo& TII)
-const
-{
-  MachineOperand DST = MI->getOperand(0);
-  MachineOperand CC = MI->getOperand(1);
-  MachineOperand LHS = MI->getOperand(2);
-  MachineOperand RHS = MI->getOperand(3);
-  int64_t ccCode = CC.getImm();
-  unsigned int simpleVT = MI->getDesc().OpInfo[0].RegClass;
-  unsigned int opCode = translateToOpcode(ccCode, simpleVT);
-  DebugLoc DL = MI->getDebugLoc();
-  MachineBasicBlock::iterator BBI = MI;
-  setPrivateData(BB, BBI, &DL, &TII);
-  if (!LHS.isReg()) {
-    LHS = convertToReg(LHS);
-  }
-  if (!RHS.isReg()) {
-    RHS = convertToReg(RHS);
-  }
-  switch (ccCode) {
-    case AMDILCC::IL_CC_I_EQ:
-    case AMDILCC::IL_CC_I_NE:
-    case AMDILCC::IL_CC_I_GE:
-    case AMDILCC::IL_CC_I_LT:
-      {
-        uint32_t lhsreg = addExtensionInstructions(
-            LHS.getReg(), true, simpleVT);
-        uint32_t rhsreg = addExtensionInstructions(
-            RHS.getReg(), true, simpleVT);
-        generateMachineInst(opCode, DST.getReg(), lhsreg, rhsreg);
-      }
-      break;
-    case AMDILCC::IL_CC_U_EQ:
-    case AMDILCC::IL_CC_U_NE:
-    case AMDILCC::IL_CC_U_GE:
-    case AMDILCC::IL_CC_U_LT:
-    case AMDILCC::IL_CC_D_EQ:
-    case AMDILCC::IL_CC_F_EQ:
-    case AMDILCC::IL_CC_F_OEQ:
-    case AMDILCC::IL_CC_D_OEQ:
-    case AMDILCC::IL_CC_D_NE:
-    case AMDILCC::IL_CC_F_NE:
-    case AMDILCC::IL_CC_F_UNE:
-    case AMDILCC::IL_CC_D_UNE:
-    case AMDILCC::IL_CC_D_GE:
-    case AMDILCC::IL_CC_F_GE:
-    case AMDILCC::IL_CC_D_OGE:
-    case AMDILCC::IL_CC_F_OGE:
-    case AMDILCC::IL_CC_D_LT:
-    case AMDILCC::IL_CC_F_LT:
-    case AMDILCC::IL_CC_F_OLT:
-    case AMDILCC::IL_CC_D_OLT:
-      generateMachineInst(opCode, DST.getReg(),
-          LHS.getReg(), RHS.getReg());
-      break;
-    case AMDILCC::IL_CC_I_GT:
-    case AMDILCC::IL_CC_I_LE:
-      {
-        uint32_t lhsreg = addExtensionInstructions(
-            LHS.getReg(), true, simpleVT);
-        uint32_t rhsreg = addExtensionInstructions(
-            RHS.getReg(), true, simpleVT);
-        generateMachineInst(opCode, DST.getReg(), rhsreg, lhsreg);
-      }
-      break;
-    case AMDILCC::IL_CC_U_GT:
-    case AMDILCC::IL_CC_U_LE:
-    case AMDILCC::IL_CC_F_GT:
-    case AMDILCC::IL_CC_D_GT:
-    case AMDILCC::IL_CC_F_OGT:
-    case AMDILCC::IL_CC_D_OGT:
-    case AMDILCC::IL_CC_F_LE:
-    case AMDILCC::IL_CC_D_LE:
-    case AMDILCC::IL_CC_D_OLE:
-    case AMDILCC::IL_CC_F_OLE:
-      generateMachineInst(opCode, DST.getReg(),
-          RHS.getReg(), LHS.getReg());
-      break;
-    case AMDILCC::IL_CC_F_UGT:
-    case AMDILCC::IL_CC_F_ULE:
-      {
-        uint32_t VReg[4] = {
-          genVReg(simpleVT), genVReg(simpleVT),
-          genVReg(simpleVT), genVReg(simpleVT)
-        };
-        generateMachineInst(opCode, VReg[0],
-            RHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[1],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[2],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-      }
-      break;
-    case AMDILCC::IL_CC_F_ULT:
-    case AMDILCC::IL_CC_F_UGE:
-      {
-        uint32_t VReg[4] = {
-          genVReg(simpleVT), genVReg(simpleVT),
-          genVReg(simpleVT), genVReg(simpleVT)
-        };
-        generateMachineInst(opCode, VReg[0],
-            LHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[1],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[2],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-      }
-      break;
-    case AMDILCC::IL_CC_D_UGT:
-    case AMDILCC::IL_CC_D_ULE:
-      {
-        uint32_t regID = AMDIL::GPRF64RegClassID;
-        uint32_t VReg[4] = {
-          genVReg(regID), genVReg(regID),
-          genVReg(regID), genVReg(regID)
-        };
-        // The result of a double comparison is a 32bit result
-        generateMachineInst(opCode, VReg[0],
-            RHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[1],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[2],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-      }
-      break;
-    case AMDILCC::IL_CC_D_UGE:
-    case AMDILCC::IL_CC_D_ULT:
-      {
-        uint32_t regID = AMDIL::GPRF64RegClassID;
-        uint32_t VReg[4] = {
-          genVReg(regID), genVReg(regID),
-          genVReg(regID), genVReg(regID)
-        };
-        // The result of a double comparison is a 32bit result
-        generateMachineInst(opCode, VReg[0],
-            LHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[1],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[2],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-      }
-      break;
-    case AMDILCC::IL_CC_F_UEQ:
-      {
-        uint32_t VReg[4] = {
-          genVReg(simpleVT), genVReg(simpleVT),
-          genVReg(simpleVT), genVReg(simpleVT)
-        };
-        generateMachineInst(AMDIL::FEQ, VReg[0],
-            LHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[2],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-      }
-      break;
-    case AMDILCC::IL_CC_F_ONE:
-      {
-        uint32_t VReg[4] = {
-          genVReg(simpleVT), genVReg(simpleVT),
-          genVReg(simpleVT), genVReg(simpleVT)
-        };
-        generateMachineInst(AMDIL::FNE, VReg[0],
-            LHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FEQ, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::FEQ, VReg[2],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::BINARY_AND_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_AND_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-      }
-      break;
-    case AMDILCC::IL_CC_D_UEQ:
-      {
-        uint32_t regID = AMDIL::GPRF64RegClassID;
-        uint32_t VReg[4] = {
-          genVReg(regID), genVReg(regID),
-          genVReg(regID), genVReg(regID)
-        };
-        // The result of a double comparison is a 32bit result
-        generateMachineInst(AMDIL::DEQ, VReg[0],
-            LHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[2],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-
-      }
-      break;
-    case AMDILCC::IL_CC_D_ONE:
-      {
-        uint32_t regID = AMDIL::GPRF64RegClassID;
-        uint32_t VReg[4] = {
-          genVReg(regID), genVReg(regID),
-          genVReg(regID), genVReg(regID)
-        };
-        // The result of a double comparison is a 32bit result
-        generateMachineInst(AMDIL::DNE, VReg[0],
-            LHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DEQ, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::DEQ, VReg[2],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::BINARY_AND_f32,
-            VReg[3], VReg[0], VReg[1]);
-        generateMachineInst(AMDIL::BINARY_AND_f32,
-            DST.getReg(), VReg[2], VReg[3]);
-
-      }
-      break;
-    case AMDILCC::IL_CC_F_O:
-      {
-        uint32_t VReg[2] = { genVReg(simpleVT), genVReg(simpleVT) };
-        generateMachineInst(AMDIL::FEQ, VReg[0],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FEQ, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_AND_f32,
-            DST.getReg(), VReg[0], VReg[1]);
-      }
-      break;
-    case AMDILCC::IL_CC_D_O:
-      {
-        uint32_t regID = AMDIL::GPRF64RegClassID;
-        uint32_t VReg[2] = { genVReg(regID), genVReg(regID) };
-        // The result of a double comparison is a 32bit result
-        generateMachineInst(AMDIL::DEQ, VReg[0],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DEQ, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_AND_f32,
-            DST.getReg(), VReg[0], VReg[1]);
-      }
-      break;
-    case AMDILCC::IL_CC_F_UO:
-      {
-        uint32_t VReg[2] = { genVReg(simpleVT), genVReg(simpleVT) };
-        generateMachineInst(AMDIL::FNE, VReg[0],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::FNE, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[0], VReg[1]);
-      }
-      break;
-    case AMDILCC::IL_CC_D_UO:
-      {
-        uint32_t regID = AMDIL::GPRF64RegClassID;
-        uint32_t VReg[2] = { genVReg(regID), genVReg(regID) };
-        // The result of a double comparison is a 32bit result
-        generateMachineInst(AMDIL::DNE, VReg[0],
-            RHS.getReg(), RHS.getReg());
-        generateMachineInst(AMDIL::DNE, VReg[1],
-            LHS.getReg(), LHS.getReg());
-        generateMachineInst(AMDIL::BINARY_OR_f32,
-            DST.getReg(), VReg[0], VReg[1]);
-      }
-      break;
-    case AMDILCC::IL_CC_L_LE:
-    case AMDILCC::IL_CC_L_GE:
-    case AMDILCC::IL_CC_L_EQ:
-    case AMDILCC::IL_CC_L_NE:
-    case AMDILCC::IL_CC_L_LT:
-    case AMDILCC::IL_CC_L_GT:
-    case AMDILCC::IL_CC_UL_LE:
-    case AMDILCC::IL_CC_UL_GE:
-    case AMDILCC::IL_CC_UL_EQ:
-    case AMDILCC::IL_CC_UL_NE:
-    case AMDILCC::IL_CC_UL_LT:
-    case AMDILCC::IL_CC_UL_GT:
-      {
-        const AMDILSubtarget *stm = reinterpret_cast<const AMDILTargetMachine*>(
-            &this->getTargetMachine())->getSubtargetImpl();
-        if (stm->device()->usesHardware(AMDILDeviceInfo::LongOps)) {
-          generateMachineInst(opCode, DST.getReg(), LHS.getReg(), RHS.getReg());
-        } else {
-          generateLongRelational(MI, opCode);
-        }
-      }
-      break;
-    case AMDILCC::COND_ERROR:
-      assert(0 && "Invalid CC code");
-      break;
-  };
-}
-
 //===----------------------------------------------------------------------===//
 // TargetLowering Class Implementation Begins
 //===----------------------------------------------------------------------===//
@@ -2076,22 +1550,6 @@ AMDILTargetLowering::LowerCallResult(
 //                           Other Lowering Hooks
 //===----------------------------------------------------------------------===//
 
-MachineBasicBlock *
-AMDILTargetLowering::EmitInstrWithCustomInserter(
-    MachineInstr *MI, MachineBasicBlock *BB) const
-{
-  const TargetInstrInfo &TII = *getTargetMachine().getInstrInfo();
-  switch (MI->getOpcode()) {
-    ExpandCaseToAllTypes(AMDIL::CMP);
-    generateCMPInstr(MI, BB, TII);
-    MI->eraseFromParent();
-    break;
-    default:
-    break;
-  }
-  return BB;
-}
-
 // Recursively assign SDNodeOrdering to any unordered nodes
 // This is necessary to maintain source ordering of instructions
 // under -O0 to avoid odd-looking "skipping around" issues.
@@ -4210,12 +3668,13 @@ AMDILTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const
       LHS.getValueType().getSimpleVT().SimpleTy);
   assert((AMDILCC != AMDILCC::COND_ERROR) && "Invalid SetCC!");
   Cond = DAG.getNode(
-      AMDILISD::CMP,
-      DL,
+      ISD::SELECT_CC,
+      Op.getDebugLoc(),
       LHS.getValueType(),
-      DAG.getConstant(AMDILCC, MVT::i32),
-      LHS,
-      RHS);
+      LHS, RHS,
+      DAG.getConstant(-1, MVT::i32),
+      DAG.getConstant(0, MVT::i32),
+      CC);
   Cond = getConversionNode(DAG, Cond, Op, true);
   Cond = DAG.getNode(
       ISD::AND,
@@ -4603,22 +4062,20 @@ SDValue
 AMDILTargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const
 {
   SDValue Chain = Op.getOperand(0);
-  CondCodeSDNode *CCNode = cast<CondCodeSDNode>(Op.getOperand(1));
+  SDValue CC = Op.getOperand(1);
   SDValue LHS   = Op.getOperand(2);
   SDValue RHS   = Op.getOperand(3);
   SDValue JumpT  = Op.getOperand(4);
   SDValue CmpValue;
-  ISD::CondCode CC = CCNode->get();
   SDValue Result;
-  unsigned int cmpOpcode = CondCCodeToCC(
-      CC,
-      LHS.getValueType().getSimpleVT().SimpleTy);
   CmpValue = DAG.getNode(
-      AMDILISD::CMP,
+      ISD::SELECT_CC,
       Op.getDebugLoc(),
       LHS.getValueType(),
-      DAG.getConstant(cmpOpcode, MVT::i32),
-      LHS, RHS);
+      LHS, RHS,
+      DAG.getConstant(-1, MVT::i32),
+      DAG.getConstant(0, MVT::i32),
+      CC);
   Result = DAG.getNode(
       AMDILISD::BRANCH_COND,
       CmpValue.getDebugLoc(),
@@ -4715,95 +4172,6 @@ const
       MVT::Other, &RetOps[0], RetOps.size());
   return Flag;
 }
-void
-AMDILTargetLowering::generateLongRelational(MachineInstr *MI,
-    unsigned int opCode) const
-{
-  MachineOperand DST = MI->getOperand(0);
-  MachineOperand LHS = MI->getOperand(2);
-  MachineOperand RHS = MI->getOperand(3);
-  unsigned int opi32Code = 0, si32Code = 0;
-  unsigned int simpleVT = MI->getDesc().OpInfo[0].RegClass;
-  uint32_t REGS[12];
-  // All the relationals can be generated with with 6 temp registers
-  for (int x = 0; x < 12; ++x) {
-    REGS[x] = genVReg(simpleVT);
-  }
-  // Pull out the high and low components of each 64 bit register
-  generateMachineInst(AMDIL::LHI, REGS[0], LHS.getReg());
-  generateMachineInst(AMDIL::LLO, REGS[1], LHS.getReg());
-  generateMachineInst(AMDIL::LHI, REGS[2], RHS.getReg());
-  generateMachineInst(AMDIL::LLO, REGS[3], RHS.getReg());
-  // Determine the correct opcode that we should use
-  switch(opCode) {
-    default:
-      assert(!"comparison case not handled!");
-      break;
-    case AMDIL::LEQ:
-      si32Code = opi32Code = AMDIL::IEQ;
-      break;
-    case AMDIL::LNE:
-      si32Code = opi32Code = AMDIL::INE;
-      break;
-    case AMDIL::LLE:
-    case AMDIL::ULLE:
-    case AMDIL::LGE:
-    case AMDIL::ULGE:
-      if (opCode == AMDIL::LGE || opCode == AMDIL::ULGE) {
-        std::swap(REGS[0], REGS[2]);
-      } else {
-        std::swap(REGS[1], REGS[3]);
-      }
-      if (opCode == AMDIL::LLE || opCode == AMDIL::LGE) {
-        opi32Code = AMDIL::ILT;
-      } else {
-        opi32Code = AMDIL::ULT;
-      }
-      si32Code = AMDIL::UGE;
-      break;
-    case AMDIL::LGT:
-    case AMDIL::ULGT:
-      std::swap(REGS[0], REGS[2]);
-      std::swap(REGS[1], REGS[3]);
-    case AMDIL::LLT:
-    case AMDIL::ULLT:
-      if (opCode == AMDIL::LGT || opCode == AMDIL::LLT) {
-        opi32Code = AMDIL::ILT;
-      } else {
-        opi32Code = AMDIL::ULT;
-      }
-      si32Code = AMDIL::ULT;
-      break;
-  };
-  // Do the initial opcode on the high and low components.
-  // This leaves the following:
-  // REGS[4] = L_HI OP R_HI
-  // REGS[5] = L_LO OP R_LO
-  generateMachineInst(opi32Code, REGS[4], REGS[0], REGS[2]);
-  generateMachineInst(si32Code, REGS[5], REGS[1], REGS[3]);
-  switch(opi32Code) {
-    case AMDIL::IEQ:
-    case AMDIL::INE:
-      {
-        // combine the results with an and or or depending on if
-        // we are eq or ne
-        uint32_t combineOp = (opi32Code == AMDIL::IEQ)
-          ? AMDIL::BINARY_AND_i32 : AMDIL::BINARY_OR_i32;
-        generateMachineInst(combineOp, REGS[11], REGS[4], REGS[5]);
-      }
-      break;
-    default:
-      // this finishes codegen for the following pattern
-      // REGS[4] || (REGS[5] && (L_HI == R_HI))
-      generateMachineInst(AMDIL::IEQ, REGS[9], REGS[0], REGS[2]);
-      generateMachineInst(AMDIL::BINARY_AND_i32, REGS[10], REGS[5],
-          REGS[9]);
-      generateMachineInst(AMDIL::BINARY_OR_i32, REGS[11], REGS[4],
-          REGS[10]);
-      break;
-  }
-  generateMachineInst(AMDIL::LCREATE, DST.getReg(), REGS[11], REGS[11]);
-}
 
 unsigned int
 AMDILTargetLowering::getFunctionAlignment(const Function *) const
@@ -4965,14 +4333,18 @@ AMDILTargetLowering::LowerSDIV32(SDValue Op, SelectionDAG &DAG) const
   SDValue r1 = RHS;
 
   // ilt r10, r0, 0
-  SDValue r10 = DAG.getNode(AMDILISD::CMP, DL, OVT,
-      DAG.getConstant(CondCCodeToCC(ISD::SETLT, MVT::i32), MVT::i32),
-      r0, DAG.getConstant(0, OVT));
+  SDValue r10 = DAG.getSelectCC(DL,
+      r0, DAG.getConstant(0, OVT),
+      DAG.getConstant(-1, MVT::i32),
+      DAG.getConstant(0, MVT::i32),
+      ISD::SETLT);
 
   // ilt r11, r1, 0
-  SDValue r11 = DAG.getNode(AMDILISD::CMP, DL, OVT, 
-      DAG.getConstant(CondCCodeToCC(ISD::SETLT, MVT::i32), MVT::i32),
-      r1, DAG.getConstant(0, OVT));
+  SDValue r11 = DAG.getSelectCC(DL,
+      r1, DAG.getConstant(0, OVT),
+      DAG.getConstant(-1, MVT::i32),
+      DAG.getConstant(0, MVT::i32),
+      ISD::SETLT);
 
   // iadd r0, r0, r10
   r0 = DAG.getNode(ISD::ADD, DL, OVT, r0, r10);
index 84639152257469a6b7b3c3829d83cd2939ab9f94..5743987804c2f824131eca4068d39eb6aa69c960 100644 (file)
@@ -239,11 +239,6 @@ namespace llvm
             unsigned Depth = 0
             ) const;
 
-      virtual MachineBasicBlock*
-        EmitInstrWithCustomInserter(
-            MachineInstr *MI,
-            MachineBasicBlock *MBB) const;
-
       virtual bool 
         getTgtMemIntrinsic(IntrinsicInfo &Info,
                                   const CallInst &I, unsigned Intrinsic) const;
index fe451ea5e93b2fcec95cefbd2e1753a1387a29d3..1e8ed3ddf206368ba2a1f4f0ffb369ef79755b3d 100644 (file)
@@ -441,12 +441,6 @@ def MACRO__shl_i64   : BinaryMacro<GPRI64, GPRI64, GPRI32, shl>;
 def MACRO__sra_i64   : BinaryMacro<GPRI64, GPRI64, GPRI32, sra>;
 }
 //===---------------------------------------------------------------------===//
-// Comparison Instructions
-//===---------------------------------------------------------------------===//
-let usesCustomInserter = 1 in {
-    defm CMP : Compare<"Pseudo comparison instr">;
-}
-//===---------------------------------------------------------------------===//
 // 32-bit floating point operations
 //===---------------------------------------------------------------------===//
 def FEQ         : TwoInOneOut<IL_OP_EQ, (outs GPRF32:$dst),