When truncating to bool, it is necessary to & with 1 for all casts that
authorReid Spencer <rspencer@reidspencer.com>
Mon, 27 Nov 2006 18:51:06 +0000 (18:51 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 27 Nov 2006 18:51:06 +0000 (18:51 +0000)
can result in a bool. Previously PtrToInt, FPToUI and FPToSI were missing
this operation.

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

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

index bcc5fbf60ae6ca7f71483313aad9c41ade6194cc..59ccf0079bd7eef4097a439d9a3c67bdf91ad308 100644 (file)
@@ -626,8 +626,11 @@ void CWriter::printConstant(Constant *CPV) {
         Out << "0-";
       }
       printConstant(CE->getOperand(0));
-      if (CE->getOpcode() == Instruction::Trunc && 
-          CE->getType() == Type::BoolTy) {
+      if (CE->getType() == Type::BoolTy &&
+          (CE->getOpcode() == Instruction::Trunc ||
+           CE->getOpcode() == Instruction::FPToUI ||
+           CE->getOpcode() == Instruction::FPToSI ||
+           CE->getOpcode() == Instruction::PtrToInt)) {
         // Make sure we really truncate to bool here by anding with 1
         Out << "&1u";
       }
@@ -1960,7 +1963,11 @@ void CWriter::visitCastInst(CastInst &I) {
     Out << "0-";
   }
   writeOperand(I.getOperand(0));
-  if (I.getOpcode() == Instruction::Trunc && DstTy == Type::BoolTy) {
+  if (DstTy == Type::BoolTy && 
+      (I.getOpcode() == Instruction::Trunc ||
+       I.getOpcode() == Instruction::FPToUI ||
+       I.getOpcode() == Instruction::FPToSI ||
+       I.getOpcode() == Instruction::PtrToInt)) {
     // Make sure we really get a trunc to bool by anding the operand with 1 
     Out << "&1u";
   }
index bcc5fbf60ae6ca7f71483313aad9c41ade6194cc..59ccf0079bd7eef4097a439d9a3c67bdf91ad308 100644 (file)
@@ -626,8 +626,11 @@ void CWriter::printConstant(Constant *CPV) {
         Out << "0-";
       }
       printConstant(CE->getOperand(0));
-      if (CE->getOpcode() == Instruction::Trunc && 
-          CE->getType() == Type::BoolTy) {
+      if (CE->getType() == Type::BoolTy &&
+          (CE->getOpcode() == Instruction::Trunc ||
+           CE->getOpcode() == Instruction::FPToUI ||
+           CE->getOpcode() == Instruction::FPToSI ||
+           CE->getOpcode() == Instruction::PtrToInt)) {
         // Make sure we really truncate to bool here by anding with 1
         Out << "&1u";
       }
@@ -1960,7 +1963,11 @@ void CWriter::visitCastInst(CastInst &I) {
     Out << "0-";
   }
   writeOperand(I.getOperand(0));
-  if (I.getOpcode() == Instruction::Trunc && DstTy == Type::BoolTy) {
+  if (DstTy == Type::BoolTy && 
+      (I.getOpcode() == Instruction::Trunc ||
+       I.getOpcode() == Instruction::FPToUI ||
+       I.getOpcode() == Instruction::FPToSI ||
+       I.getOpcode() == Instruction::PtrToInt)) {
     // Make sure we really get a trunc to bool by anding the operand with 1 
     Out << "&1u";
   }