diff options
author | Sanjay Patel <spatel@rotateright.com> | 2019-10-13 17:34:08 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2019-10-13 17:34:08 +0000 |
commit | b32e4664a7156830aa6a5c97d9074269574b1f98 (patch) | |
tree | b713b63f627689db357b9e8cec46cdea702ba72e /llvm/lib/IR/ConstantFold.cpp | |
parent | f90728c3227d86794819e945ab79f46a6933f95a (diff) | |
download | llvm-b32e4664a7156830aa6a5c97d9074269574b1f98.zip llvm-b32e4664a7156830aa6a5c97d9074269574b1f98.tar.gz llvm-b32e4664a7156830aa6a5c97d9074269574b1f98.tar.bz2 |
[ConstantFold] fix inconsistent handling of extractelement with undef index (PR42689)
Any constant other than zero was already folded to undef if the index is undef.
https://bugs.llvm.org/show_bug.cgi?id=42689
llvm-svn: 374729
Diffstat (limited to 'llvm/lib/IR/ConstantFold.cpp')
-rw-r--r-- | llvm/lib/IR/ConstantFold.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp index 54814bb..b60b450 100644 --- a/llvm/lib/IR/ConstantFold.cpp +++ b/llvm/lib/IR/ConstantFold.cpp @@ -787,12 +787,9 @@ Constant *llvm::ConstantFoldSelectInstruction(Constant *Cond, Constant *llvm::ConstantFoldExtractElementInstruction(Constant *Val, Constant *Idx) { - if (isa<UndefValue>(Val)) // ee(undef, x) -> undef - return UndefValue::get(Val->getType()->getVectorElementType()); - if (Val->isNullValue()) // ee(zero, x) -> zero - return Constant::getNullValue(Val->getType()->getVectorElementType()); - // ee({w,x,y,z}, undef) -> undef - if (isa<UndefValue>(Idx)) + // extractelt undef, C -> undef + // extractelt C, undef -> undef + if (isa<UndefValue>(Val) || isa<UndefValue>(Idx)) return UndefValue::get(Val->getType()->getVectorElementType()); if (ConstantInt *CIdx = dyn_cast<ConstantInt>(Idx)) { |