diff options
author | Pawel Bylica <chfast@gmail.com> | 2015-04-24 07:42:35 +0000 |
---|---|---|
committer | Pawel Bylica <chfast@gmail.com> | 2015-04-24 07:42:35 +0000 |
commit | bce9c2e263f90cf54ad01803b15a076cf466abb9 (patch) | |
tree | 5c151fdd79ba234235e5fca18c7fb31fc7cb785f /llvm/lib/IR/ConstantFold.cpp | |
parent | 86ac44744a0207fea281fc2267fffaa69660fc03 (diff) | |
download | llvm-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.cpp | 5 |
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; } |