diff options
| author | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2016-09-07 12:03:03 +0000 |
|---|---|---|
| committer | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2016-09-07 12:03:03 +0000 |
| commit | 8df5b9cf487701ff323d3a758c71349f8b7916a8 (patch) | |
| tree | c7af87932457ff4c604dc34ed8cf9e6191e7c2b7 /llvm/test/Transforms/InstCombine/add.ll | |
| parent | bcbbb3987d06a757b90e32b87716f9af8db9565b (diff) | |
| download | bcm5719-llvm-8df5b9cf487701ff323d3a758c71349f8b7916a8.tar.gz bcm5719-llvm-8df5b9cf487701ff323d3a758c71349f8b7916a8.zip | |
[InstCombine][SSE4a] Fix assertion failure caused by unsafe dyn_casts on the operands of extrq/extrqi intrinsic calls.
This patch fixes an assertion failure caused by unsafe dynamic casts on the
constant operands of sse4a intrinsic calls to extrq/extrqi
The combine logic that simplifies sse4a extrq/extrqi intrinsic calls currently
checks if the input operands are constants. Internally, that logic relies on
dyn_casts of values returned by calls to method Constant::getAggregateElement.
However, method getAggregateElemet may return nullptr if the constant element
cannot be retrieved. So, all the dyn_casts can potentially fail. This is what
happens for example if a constexpr value is passed in input to an extrq/extrqi
intrinsic call.
This patch fixes the problem by using a dyn_cast_or_null (instead of a simple
dyn_cast) on the result of each call to Constant::getAggregateElement.
Added reproducible test cases to x86-sse4a.ll.
Differential Revision: https://reviews.llvm.org/D24256
llvm-svn: 280804
Diffstat (limited to 'llvm/test/Transforms/InstCombine/add.ll')
0 files changed, 0 insertions, 0 deletions

