switch shufflevector semantics to yield poison rather than undef on OOB idx
The old semantics prevents shufflevector from being removed as it acts a bit like freeze.
LLVM work is ongoing. See
MODIFY
ir/instr.cpp
ir/instr.cpp
@@ -4242,7 +4242,7 @@ StateValue ShuffleVector::toSMT(State &s) const {
for (auto m : mask) {
if (m >= 2 * sz) {
- vals.emplace_back(UndefValue(vty->getChild(0)).toSMT(s).value, true);
+ vals.emplace_back(vty->getChild(0).getDummyValue(false));
} else {
auto *vect = &s[m < sz ? *v1 : *v2];
vals.emplace_back(vty->extract(*vect, m % sz));

switch shufflevector semantics to yield poison rather than undef on OOB idx
The old semantics prevents shufflevector from being removed as it acts a bit like freeze.
LLVM work is ongoing. See #768