Remove 4 FIXME's from the CAST patch now that the back end is correctly
authorReid Spencer <rspencer@reidspencer.com>
Tue, 28 Nov 2006 07:23:01 +0000 (07:23 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 28 Nov 2006 07:23:01 +0000 (07:23 +0000)
producing code for "trunc to bool". This passes all tests on Linux.

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

lib/Transforms/Scalar/InstructionCombining.cpp

index 223624049eedebfb3e98dc0bae475bce5053bda4..532f112ebcdae25299a7fe0db9f210df86b6aa1f 100644 (file)
@@ -5739,13 +5739,6 @@ Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) {
   unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
   unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
 
-  // FIXME. We currently implement cast-to-bool as a setne %X, 0. This is 
-  // because codegen cannot accurately perform a truncate to bool operation.
-  // Something goes wrong in promotion to a larger type. When CodeGen can
-  // handle a proper truncation to bool, this should be removed.
-  if (DestTy == Type::BoolTy)
-    return BinaryOperator::createSetNE(Src, Constant::getNullValue(SrcTy)); 
-
   // See if we can simplify any instructions used by the LHS whose sole 
   // purpose is to compute bits we don't care about.
   uint64_t KnownZero = 0, KnownOne = 0;
@@ -6021,35 +6014,11 @@ Instruction *InstCombiner::visitFPExt(CastInst &CI) {
 }
 
 Instruction *InstCombiner::visitFPToUI(CastInst &CI) {
-  if (Instruction *I = commonCastTransforms(CI))
-    return I;
-
-  // FIXME. We currently implement cast-to-bool as a setne %X, 0. This is 
-  // because codegen cannot accurately perform a truncate to bool operation.
-  // Something goes wrong in promotion to a larger type. When CodeGen can
-  // handle a proper truncation to bool, this should be removed.
-  Value *Src = CI.getOperand(0);
-  const Type *SrcTy = Src->getType();
-  const Type *DestTy = CI.getType();
-  if (DestTy == Type::BoolTy)
-    return BinaryOperator::createSetNE(Src, Constant::getNullValue(SrcTy)); 
-  return 0;
+  return commonCastTransforms(CI);
 }
 
 Instruction *InstCombiner::visitFPToSI(CastInst &CI) {
-  if (Instruction *I = commonCastTransforms(CI))
-    return I;
-
-  // FIXME. We currently implement cast-to-bool as a setne %X, 0. This is 
-  // because codegen cannot accurately perform a truncate to bool operation.
-  // Something goes wrong in promotion to a larger type. When CodeGen can
-  // handle a proper truncation to bool, this should be removed.
-  Value *Src = CI.getOperand(0);
-  const Type *SrcTy = Src->getType();
-  const Type *DestTy = CI.getType();
-  if (DestTy == Type::BoolTy)
-    return BinaryOperator::createSetNE(Src, Constant::getNullValue(SrcTy)); 
-  return 0;
+  return commonCastTransforms(CI);
 }
 
 Instruction *InstCombiner::visitUIToFP(CastInst &CI) {
@@ -6061,19 +6030,7 @@ Instruction *InstCombiner::visitSIToFP(CastInst &CI) {
 }
 
 Instruction *InstCombiner::visitPtrToInt(CastInst &CI) {
-  if (Instruction *I = commonCastTransforms(CI))
-    return I;
-
-  // FIXME. We currently implement cast-to-bool as a setne %X, 0. This is 
-  // because codegen cannot accurately perform a truncate to bool operation.
-  // Something goes wrong in promotion to a larger type. When CodeGen can
-  // handle a proper truncation to bool, this should be removed.
-  Value *Src = CI.getOperand(0);
-  const Type *SrcTy = Src->getType();
-  const Type *DestTy = CI.getType();
-  if (DestTy == Type::BoolTy)
-    return BinaryOperator::createSetNE(Src, Constant::getNullValue(SrcTy)); 
-  return 0;
+  return commonCastTransforms(CI);
 }
 
 Instruction *InstCombiner::visitIntToPtr(CastInst &CI) {