Page MenuHomePhabricator

[ConstantFold][SVE] Fix constant folding for scalable vector unary operations.

Authored by huihuiz on Jan 29 2020, 5:47 PM.



Similar to issue D71445. Scalable vector should not be evaluated element by element.
Add support to handle scalable vector UndefValue.

Diff Detail

Event Timeline

huihuiz created this revision.Jan 29 2020, 5:47 PM

current upstream crash with: llvm/lib/IR/Value.cpp:404: void llvm::Value::doRAUW(llvm::Value *, llvm::Value::ReplaceMetadataUses): Assertion `New->getType() == getType() && "replaceAllUses of value with new value of different type!"' failed.

take this test.ll

define <vscale x 2 x double> @fneg(<vscale x 2 x double> %val) {
  %r = fneg <vscale x 2 x double> undef
  ret <vscale x 2 x double> %r

run: opt -S -constprop test.ll -o -

This revision is now accepted and ready to land.Jan 29 2020, 6:07 PM
This revision was automatically updated to reflect the committed changes.