diff options
author | Simon Atanasyan <simon@atanasyan.com> | 2019-09-11 11:16:06 +0000 |
---|---|---|
committer | Simon Atanasyan <simon@atanasyan.com> | 2019-09-11 11:16:06 +0000 |
commit | d811d9115b0b2d004a568e8ebdb37ba0ea6397d1 (patch) | |
tree | 4ad0f8f9c7e1e6834ca171e2c2464bd37adac2dc /llvm/lib | |
parent | e0d9a0bd59d8ece9662c4ad618398ddcfec8d93f (diff) | |
download | bcm5719-llvm-d811d9115b0b2d004a568e8ebdb37ba0ea6397d1.tar.gz bcm5719-llvm-d811d9115b0b2d004a568e8ebdb37ba0ea6397d1.zip |
[mips][msa] Fix infinite loop for mips.nori.b intrinsic
When value of immediate in `mips.nori.b` is 255 (which has all ones in
binary form as 8bit integer) DAGCombiner and Legalizer would fall in an
infinite loop. DAGCombiner would try to simplify `or %value, -1` by
turning `%value` into UNDEF. Legalizer will turn it back into `Constant<0>`
which would then be again turned into UNDEF by DAGCombiner. To avoid this
loop we make UNDEF legal for MSA int types on Mips.
Patch by Mirko Brkusanin.
Differential Revision: https://reviews.llvm.org/D67280
llvm-svn: 371607
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/Mips/MipsSEISelLowering.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsSEISelLowering.cpp b/llvm/lib/Target/Mips/MipsSEISelLowering.cpp index bf7e7b6c30b..a79c3a089c4 100644 --- a/llvm/lib/Target/Mips/MipsSEISelLowering.cpp +++ b/llvm/lib/Target/Mips/MipsSEISelLowering.cpp @@ -327,6 +327,7 @@ addMSAIntType(MVT::SimpleValueType Ty, const TargetRegisterClass *RC) { setOperationAction(ISD::EXTRACT_VECTOR_ELT, Ty, Custom); setOperationAction(ISD::INSERT_VECTOR_ELT, Ty, Legal); setOperationAction(ISD::BUILD_VECTOR, Ty, Custom); + setOperationAction(ISD::UNDEF, Ty, Legal); setOperationAction(ISD::ADD, Ty, Legal); setOperationAction(ISD::AND, Ty, Legal); |