[llvm-commits] [llvm] r149148 - in /llvm/trunk: lib/Analysis/ConstantFolding.cpp test/CodeGen/X86/constant-pool-sharing.ll test/Transforms/ConstProp/basictest.ll test/Transforms/InstCombine/icmp.ll
Rafael Espindola
rafael.espindola at gmail.com
Fri Jan 27 14:42:48 PST 2012
Author: rafael
Date: Fri Jan 27 16:42:48 2012
New Revision: 149148
URL: http://llvm.org/viewvc/llvm-project?rev=149148&view=rev
Log:
Revert r149110 and add a testcase that was crashing since that revision.
Unfortunately I also had to disable constant-pool-sharing.ll the code it tests has been
updated to use the IL logic.
Modified:
llvm/trunk/lib/Analysis/ConstantFolding.cpp
llvm/trunk/test/CodeGen/X86/constant-pool-sharing.ll
llvm/trunk/test/Transforms/ConstProp/basictest.ll
llvm/trunk/test/Transforms/InstCombine/icmp.ll
Modified: llvm/trunk/lib/Analysis/ConstantFolding.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ConstantFolding.cpp?rev=149148&r1=149147&r2=149148&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/ConstantFolding.cpp (original)
+++ llvm/trunk/lib/Analysis/ConstantFolding.cpp Fri Jan 27 16:42:48 2012
@@ -52,44 +52,6 @@
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)
Modified: llvm/trunk/test/CodeGen/X86/constant-pool-sharing.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/constant-pool-sharing.ll?rev=149148&r1=149147&r2=149148&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/constant-pool-sharing.ll (original)
+++ llvm/trunk/test/CodeGen/X86/constant-pool-sharing.ll Fri Jan 27 16:42:48 2012
@@ -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.
Modified: llvm/trunk/test/Transforms/ConstProp/basictest.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstProp/basictest.ll?rev=149148&r1=149147&r2=149148&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/ConstProp/basictest.ll (original)
+++ llvm/trunk/test/Transforms/ConstProp/basictest.ll Fri Jan 27 16:42:48 2012
@@ -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 @@
%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
Modified: llvm/trunk/test/Transforms/InstCombine/icmp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/icmp.ll?rev=149148&r1=149147&r2=149148&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/icmp.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/icmp.ll Fri Jan 27 16:42:48 2012
@@ -121,8 +121,8 @@
%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 @@
%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)
More information about the llvm-commits
mailing list