Revert r149110 and add a testcase that was crashing since that revision.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 27 Jan 2012 22:42:48 +0000 (22:42 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 27 Jan 2012 22:42:48 +0000 (22:42 +0000)
Unfortunately I also had to disable constant-pool-sharing.ll the code it tests has been
updated to use the IL logic.

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

lib/Analysis/ConstantFolding.cpp
test/CodeGen/X86/constant-pool-sharing.ll
test/Transforms/ConstProp/basictest.ll
test/Transforms/InstCombine/icmp.ll

index 6fbb1fe94d0571e844f35452b854baf2784d026f..fe28926f1b2c4c657f1c6ed3ca50481a750521f6 100644 (file)
@@ -52,44 +52,6 @@ static Constant *FoldBitCast(Constant *C, Type *DestTy,
   if (C->isAllOnesValue() && !DestTy->isX86_MMXTy())
     return Constant::getAllOnesValue(DestTy);
 
-  // Handle a vector->integer cast.
-  if (IntegerType *IT = dyn_cast<IntegerType>(DestTy)) {
-    // FIXME: Remove ConstantVector support.
-    if ((!isa<ConstantDataVector>(C) && !isa<ConstantVector>(C)) ||
-        // TODO: Handle big endian someday.
-        !TD.isLittleEndian())
-      return ConstantExpr::getBitCast(C, DestTy);
-
-    unsigned NumSrcElts = C->getType()->getVectorNumElements();
-    
-    // If the vector is a vector of floating point, convert it to vector of int
-    // to simplify things.
-    if (C->getType()->getVectorElementType()->isFloatingPointTy()) {
-      unsigned FPWidth =
-        C->getType()->getVectorElementType()->getPrimitiveSizeInBits();
-      Type *SrcIVTy =
-        VectorType::get(IntegerType::get(C->getContext(), FPWidth), NumSrcElts);
-      // Ask VMCore to do the conversion now that #elts line up.
-      C = ConstantExpr::getBitCast(C, SrcIVTy);
-    }
-    
-    // Now that we know that the input value is a vector of integers, just shift
-    // and insert them into our result.
-    unsigned BitShift =
-      TD.getTypeAllocSizeInBits(C->getType()->getVectorElementType());
-    APInt Result(IT->getBitWidth(), 0);
-    for (unsigned i = 0; i != NumSrcElts; ++i) {
-      // FIXME: Rework when we have ConstantDataVector.
-      ConstantInt *Elt=dyn_cast_or_null<ConstantInt>(C->getAggregateElement(i));
-      if (Elt == 0)  // Elt must be a constant expr or something.
-        return ConstantExpr::getBitCast(C, DestTy);
-      
-      Result |= Elt->getValue().zext(IT->getBitWidth()) << i*BitShift;
-    }
-   
-    return ConstantInt::get(IT, Result);
-  }
-  
   // The code below only handles casts to vectors currently.
   VectorType *DestVTy = dyn_cast<VectorType>(DestTy);
   if (DestVTy == 0)
index f979945835ffcab934e49203e1d61c77ad749d41..a672cc254f41f1b3b87d7a7d8eb6a40a73720ba2 100644 (file)
@@ -1,5 +1,6 @@
-; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
-; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s
+; RUN-disable: llc < %s -mtriple=x86_64-linux | FileCheck %s
+; RUN-disable: llc < %s -mtriple=x86_64-win32 | FileCheck %s
+; RUN: true
 
 ; llc should share constant pool entries between this integer vector
 ; and this floating-point vector since they have the same encoding.
index 09e6e7db437a226a7a1a3ead2daa8230185e6e04..d0d0a5bb3352c138946e23fa79ae65e05651118d 100644 (file)
@@ -1,8 +1,5 @@
 ; RUN: opt < %s -constprop -die -S | FileCheck %s
 
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
-target triple = "x86_64-apple-macosx10.7.2"
-
 ; This is a basic sanity check for constant propagation.  The add instruction
 ; should be eliminated.
 define i32 @test1(i1 %B) {
@@ -43,11 +40,3 @@ define i1 @TNAN() {
   %C = or i1 %A, %B
   ret i1 %C
 }
-
-define i128 @vector_to_int_cast() {
-  %A = bitcast <4 x i32> <i32 1073741824, i32 1073741824, i32 1073741824, i32 1073741824> to i128
-  ret i128 %A
-; CHECK: @vector_to_int_cast
-; CHECK: ret i128 85070591750041656499021422275829170176
-}
-  
\ No newline at end of file
index 6e91ed20c006d9affa7001bc77eee6d67c14d620..63cbeb7452d78aad9b3ae825a8a10ca3e3751f7d 100644 (file)
@@ -121,8 +121,8 @@ define i1 @test12(i1 %A) {
   %B = icmp ne i64 bitcast (<2 x i32> <i32 1, i32 -1> to i64), %S
   ret i1 %B
 ; CHECK: @test12
-; CHECK-NEXT: = xor i1 %A, true
-; CHECK-NEXT: ret i1
+; CHECK-NEXT: %B = select i1
+; CHECK-NEXT: ret i1 %B
 }
 
 ; PR6481
@@ -580,3 +580,13 @@ define zeroext i1 @cmpabs2(i64 %val) {
   %tobool = icmp ne i64 %sub.val, 0
   ret i1 %tobool
 }
+
+; test that we don't crash
+; CHECK: @test58
+define void @test58() nounwind {
+entry:
+  %0 = bitcast <1 x i64> <i64 36029346783166592> to i64
+  %call = call i32 @test58_d( i64 %0) nounwind
+  ret void
+}
+declare i32 @test58_d(i64)