aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/ConstantFold.cpp
diff options
context:
space:
mode:
authorPawel Bylica <chfast@gmail.com>2015-04-24 07:42:35 +0000
committerPawel Bylica <chfast@gmail.com>2015-04-24 07:42:35 +0000
commitbce9c2e263f90cf54ad01803b15a076cf466abb9 (patch)
tree5c151fdd79ba234235e5fca18c7fb31fc7cb785f /llvm/lib/IR/ConstantFold.cpp
parent86ac44744a0207fea281fc2267fffaa69660fc03 (diff)
downloadllvm-bce9c2e263f90cf54ad01803b15a076cf466abb9.zip
llvm-bce9c2e263f90cf54ad01803b15a076cf466abb9.tar.gz
llvm-bce9c2e263f90cf54ad01803b15a076cf466abb9.tar.bz2
Correct extractelement constant folding
Summary: Constant folding of extractelement with out-of-bound index produces undef also for indexes bigger than 64bit (instead of crash assert failure as before) Test Plan: Unit tests included. Reviewers: majnemer Reviewed By: majnemer Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9225 llvm-svn: 235700
Diffstat (limited to 'llvm/lib/IR/ConstantFold.cpp')
-rw-r--r--llvm/lib/IR/ConstantFold.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp
index d3caf04..03d7c5e 100644
--- a/llvm/lib/IR/ConstantFold.cpp
+++ b/llvm/lib/IR/ConstantFold.cpp
@@ -789,11 +789,10 @@ Constant *llvm::ConstantFoldExtractElementInstruction(Constant *Val,
return UndefValue::get(Val->getType()->getVectorElementType());
if (ConstantInt *CIdx = dyn_cast<ConstantInt>(Idx)) {
- uint64_t Index = CIdx->getZExtValue();
// ee({w,x,y,z}, wrong_value) -> undef
- if (Index >= Val->getType()->getVectorNumElements())
+ if (CIdx->uge(Val->getType()->getVectorNumElements()))
return UndefValue::get(Val->getType()->getVectorElementType());
- return Val->getAggregateElement(Index);
+ return Val->getAggregateElement(CIdx->getZExtValue());
}
return nullptr;
}