From 1baace07c498dd50e9c08f40e83b43fd5a8b2954 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 16 Oct 2008 05:26:51 +0000 Subject: [PATCH] apply Eli's patch for PR2165 and provide a testcase. llvm-svn: 57625 --- llvm/lib/VMCore/ConstantFold.cpp | 6 ++++++ llvm/test/Transforms/ConstProp/bitcast2.ll | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100644 llvm/test/Transforms/ConstProp/bitcast2.ll diff --git a/llvm/lib/VMCore/ConstantFold.cpp b/llvm/lib/VMCore/ConstantFold.cpp index 93ee7fe59aea..fcbda21451be 100644 --- a/llvm/lib/VMCore/ConstantFold.cpp +++ b/llvm/lib/VMCore/ConstantFold.cpp @@ -133,6 +133,12 @@ static Constant *FoldBitCast(Constant *V, const Type *DestTy) { if (ConstantVector *CV = dyn_cast(V)) return BitCastConstantVector(CV, DestPTy); } + + // Canonicalize scalar-to-vector bitcasts into vector-to-vector bitcasts + // This allows for other simplifications (although some of them + // can only be handled by Analysis/ConstantFolding.cpp). + if (isa(V) || isa(V)) + return ConstantExpr::getBitCast(ConstantVector::get(&V, 1), DestPTy); } // Finally, implement bitcast folding now. The code below doesn't handle diff --git a/llvm/test/Transforms/ConstProp/bitcast2.ll b/llvm/test/Transforms/ConstProp/bitcast2.ll new file mode 100644 index 000000000000..66def7f49da2 --- /dev/null +++ b/llvm/test/Transforms/ConstProp/bitcast2.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep bitcast +; PR2165 + +define <1 x i64> @test() { + %A = bitcast i64 63 to <1 x i64> + ret <1 x i64> %A +} +