Handle cast float-to-float or cast double-to-double.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 9 Sep 2001 20:35:34 +0000 (20:35 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 9 Sep 2001 20:35:34 +0000 (20:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@512 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TargetMachine/Sparc/SparcInstrSelection.cpp

index 08dbbc53551f8d3c427bb7812cc03fb51011b397..8f79f6674d230a3f3abcae788c96dfce10e65530 100644 (file)
@@ -325,8 +325,10 @@ ChooseConvertToFloatInstr(const InstructionNode* instrNode,
        opCode = FXTOS;
       else if (opType == Type::DoubleTy)
        opCode = FDTOS;
+      else if (opType == Type::FloatTy)
+       ;
       else
-         assert(0 && "Cannot convert this type to FLOAT on SPARC");
+       assert(0 && "Cannot convert this type to FLOAT on SPARC");              
       break;
       
     case ToDoubleTy: 
@@ -336,8 +338,10 @@ ChooseConvertToFloatInstr(const InstructionNode* instrNode,
        opCode = FXTOD;
       else if (opType == Type::FloatTy)
        opCode = FSTOD;
+      else if (opType == Type::DoubleTy)
+       ;
       else
-       assert(0 && "Cannot convert this type to DOUBLE on SPARC");
+       assert(0 && "Cannot convert this type to DOUBLE on SPARC");             
       break;
       
     default:
@@ -1504,8 +1508,17 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
     else
       {
        opType = subtreeRoot->leftChild()->getValue()->getType();
-       mvec[0] = new MachineInstr(ChooseConvertToFloatInstr(subtreeRoot, opType));
-       Set2OperandsFromInstr(mvec[0], subtreeRoot, target);
+       MachineOpCode opCode = ChooseConvertToFloatInstr(subtreeRoot, opType);
+       if (opCode == INVALID_OPCODE)   // no conversion needed
+         {
+           numInstr = 0;
+           forwardOperandNum = 0;
+         }
+       else
+         {
+           mvec[0] = new MachineInstr(opCode);
+           Set2OperandsFromInstr(mvec[0], subtreeRoot, target);
+         }
       }
     break;