aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-21 06:55:54 +0000
committerChris Lattner <sabre@nondot.org>2009-03-21 06:55:54 +0000
commit8c7f24a36ad7d5aa7322a64d22666fec35fb8478 (patch)
tree037a38d74509a95c8e81ea1a5d9a3f0844ae1651
parent3ee87b6f9da0f63762ffaf0c4fcbc39514a059fb (diff)
add a fastpath to ConstantExpr::getBitCast to handle the case when an obviously
unneeded bitcast is requested. This is common for frontends who just unconditionally cast even if the target is often the right type already. THis prevents going into getFoldedCast which switches on the opcode and does a bunch of other stuff before doing the same opzn. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67435 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/VMCore/Constants.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp
index ed1e04ad54..6c99a1ffe8 100644
--- a/lib/VMCore/Constants.cpp
+++ b/lib/VMCore/Constants.cpp
@@ -1996,6 +1996,11 @@ Constant *ConstantExpr::getBitCast(Constant *C, const Type *DstTy) {
unsigned DstBitSize = DstTy->getPrimitiveSizeInBits();
#endif
assert(SrcBitSize == DstBitSize && "BitCast requires types of same width");
+
+ // It is common to ask for a bitcast of a value to its own type, handle this
+ // speedily.
+ if (C->getType() == DstTy) return C;
+
return getFoldedCast(Instruction::BitCast, C, DstTy);
}