Stop annoying warnings about mismatched types with the argument of a free
authorChris Lattner <sabre@nondot.org>
Thu, 14 Aug 2003 19:19:53 +0000 (19:19 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 14 Aug 2003 19:19:53 +0000 (19:19 +0000)
implement more constant expressions so that 176.gcc compiles with the CBE

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

lib/Target/CBackend/CBackend.cpp
lib/Target/CBackend/Writer.cpp

index 5cccc37a3c2975401b535cf0a80fe58b4660a6cb..6a800190913dea34b09f5c2fd1ac7e65b4c797d1 100644 (file)
@@ -369,16 +369,32 @@ void CWriter::printConstant(Constant *CPV) {
       Out << "))";
       return;
     case Instruction::Add:
-      Out << "(";
-      printConstant(CE->getOperand(0));
-      Out << " + ";
-      printConstant(CE->getOperand(1));
-      Out << ")";
-      return;
     case Instruction::Sub:
+    case Instruction::Mul:
+    case Instruction::Div:
+    case Instruction::Rem:
+    case Instruction::SetEQ:
+    case Instruction::SetNE:
+    case Instruction::SetLT:
+    case Instruction::SetLE:
+    case Instruction::SetGT:
+    case Instruction::SetGE:
       Out << "(";
       printConstant(CE->getOperand(0));
-      Out << " - ";
+      switch (CE->getOpcode()) {
+      case Instruction::Add: Out << " + "; break;
+      case Instruction::Sub: Out << " - "; break;
+      case Instruction::Mul: Out << " * "; break;
+      case Instruction::Div: Out << " / "; break;
+      case Instruction::Rem: Out << " % "; break;
+      case Instruction::SetEQ: Out << " == "; break;
+      case Instruction::SetNE: Out << " != "; break;
+      case Instruction::SetLT: Out << " < "; break;
+      case Instruction::SetLE: Out << " <= "; break;
+      case Instruction::SetGT: Out << " > "; break;
+      case Instruction::SetGE: Out << " >= "; break;
+      default: assert(0 && "Illegal opcode here!");
+      }
       printConstant(CE->getOperand(1));
       Out << ")";
       return;
@@ -1186,7 +1202,7 @@ void CWriter::visitAllocaInst(AllocaInst &I) {
 }
 
 void CWriter::visitFreeInst(FreeInst &I) {
-  Out << "free(";
+  Out << "free((char*)";
   writeOperand(I.getOperand(0));
   Out << ")";
 }
index 5cccc37a3c2975401b535cf0a80fe58b4660a6cb..6a800190913dea34b09f5c2fd1ac7e65b4c797d1 100644 (file)
@@ -369,16 +369,32 @@ void CWriter::printConstant(Constant *CPV) {
       Out << "))";
       return;
     case Instruction::Add:
-      Out << "(";
-      printConstant(CE->getOperand(0));
-      Out << " + ";
-      printConstant(CE->getOperand(1));
-      Out << ")";
-      return;
     case Instruction::Sub:
+    case Instruction::Mul:
+    case Instruction::Div:
+    case Instruction::Rem:
+    case Instruction::SetEQ:
+    case Instruction::SetNE:
+    case Instruction::SetLT:
+    case Instruction::SetLE:
+    case Instruction::SetGT:
+    case Instruction::SetGE:
       Out << "(";
       printConstant(CE->getOperand(0));
-      Out << " - ";
+      switch (CE->getOpcode()) {
+      case Instruction::Add: Out << " + "; break;
+      case Instruction::Sub: Out << " - "; break;
+      case Instruction::Mul: Out << " * "; break;
+      case Instruction::Div: Out << " / "; break;
+      case Instruction::Rem: Out << " % "; break;
+      case Instruction::SetEQ: Out << " == "; break;
+      case Instruction::SetNE: Out << " != "; break;
+      case Instruction::SetLT: Out << " < "; break;
+      case Instruction::SetLE: Out << " <= "; break;
+      case Instruction::SetGT: Out << " > "; break;
+      case Instruction::SetGE: Out << " >= "; break;
+      default: assert(0 && "Illegal opcode here!");
+      }
       printConstant(CE->getOperand(1));
       Out << ")";
       return;
@@ -1186,7 +1202,7 @@ void CWriter::visitAllocaInst(AllocaInst &I) {
 }
 
 void CWriter::visitFreeInst(FreeInst &I) {
-  Out << "free(";
+  Out << "free((char*)";
   writeOperand(I.getOperand(0));
   Out << ")";
 }