]> granicus.if.org Git - clang/commitdiff
Now that we have reliable cast kinds, simplify scalar cast IR gen.
authorJohn McCall <rjmccall@apple.com>
Tue, 16 Nov 2010 06:21:14 +0000 (06:21 +0000)
committerJohn McCall <rjmccall@apple.com>
Tue, 16 Nov 2010 06:21:14 +0000 (06:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119332 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprScalar.cpp

index 98676d9ff7c80392e76e9d5073272840b0070ec3..a64debd6c12890d2dac37fbcb36c2154250ae7e6 100644 (file)
@@ -1041,9 +1041,6 @@ Value *ScalarExprEmitter::EmitCastExpr(CastExpr *CE) {
     const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(CE);
     return CGF.EmitDynamicCast(V, DCE);
   }
-  case CK_ToUnion:
-    assert(0 && "Should be unreachable!");
-    break;
 
   case CK_ArrayToPointerDecay: {
     assert(E->getType()->isArrayType() &&
@@ -1101,7 +1098,8 @@ Value *ScalarExprEmitter::EmitCastExpr(CastExpr *CE) {
   case CK_IntegralComplexToFloatingComplex:
   case CK_FloatingComplexToIntegralComplex:
   case CK_ConstructorConversion:
-    assert(0 && "Should be unreachable!");
+  case CK_ToUnion:
+    llvm_unreachable("scalar cast to non-scalar value");
     break;
 
   case CK_IntegralToPointer: {
@@ -1190,39 +1188,8 @@ Value *ScalarExprEmitter::EmitCastExpr(CastExpr *CE) {
   }
 
   }
-  
-  // Handle cases where the source is an non-complex type.
-
-  if (!CGF.hasAggregateLLVMType(E->getType())) {
-    Value *Src = Visit(const_cast<Expr*>(E));
-
-    // Use EmitScalarConversion to perform the conversion.
-    return EmitScalarConversion(Src, E->getType(), DestTy);
-  }
-
-  // Handle cases where the source is a complex type.
-  // TODO: when we're certain about cast kinds, we should just be able
-  // to assert that no complexes make it here.
-  if (E->getType()->isAnyComplexType()) {
-    bool IgnoreImag = true;
-    bool IgnoreImagAssign = true;
-    bool IgnoreReal = IgnoreResultAssign;
-    bool IgnoreRealAssign = IgnoreResultAssign;
-    if (DestTy->isBooleanType())
-      IgnoreImagAssign = IgnoreImag = false;
-    else if (DestTy->isVoidType()) {
-      IgnoreReal = IgnoreImag = false;
-      IgnoreRealAssign = IgnoreImagAssign = true;
-    }
-    CodeGenFunction::ComplexPairTy V
-      = CGF.EmitComplexExpr(E, IgnoreReal, IgnoreImag, IgnoreRealAssign,
-                            IgnoreImagAssign);
-    return EmitComplexToScalarConversion(V, E->getType(), DestTy);
-  }
 
-  // Okay, this is a cast from an aggregate.  It must be a cast to void.  Just
-  // evaluate the result and return.
-  CGF.EmitAggExpr(E, AggValueSlot::ignored(), true);
+  llvm_unreachable("unknown scalar cast");
   return 0;
 }