From 868510328fc0b25ca97f2fba466a77c2c4e29c45 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57625 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/ConstantFold.cpp | 6 ++++++ test/Transforms/ConstProp/bitcast2.ll | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100644 test/Transforms/ConstProp/bitcast2.ll diff --git a/lib/VMCore/ConstantFold.cpp b/lib/VMCore/ConstantFold.cpp index 93ee7fe59ae..fcbda21451b 100644 --- a/lib/VMCore/ConstantFold.cpp +++ b/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/test/Transforms/ConstProp/bitcast2.ll b/test/Transforms/ConstProp/bitcast2.ll new file mode 100644 index 00000000000..66def7f49da --- /dev/null +++ b/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 +} +