diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-01-24 11:07:41 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-01-24 11:07:41 +0000 |
| commit | 78f8630ac098b63d904e8c5ab50c6e2d6d5bae5b (patch) | |
| tree | 31a1f95143a169e4ffae9eaab8771ad749dddfab /llvm | |
| parent | f726dfa65edebb6827eb5c8f17d028ad7e588b49 (diff) | |
| download | bcm5719-llvm-78f8630ac098b63d904e8c5ab50c6e2d6d5bae5b.tar.gz bcm5719-llvm-78f8630ac098b63d904e8c5ab50c6e2d6d5bae5b.zip | |
[InstCombine][X86] MULDQ/MULUDQ undef -> zero
Added early out for single undef input - we were already supporting (and testing) this in the constant folding code, we just do it quicker now
Drop undef handling from demanded elts code now that we handle it fully in InstCombiner::visitCallInst
llvm-svn: 292913
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp | 6 |
2 files changed, 1 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index 07ee3c032c2..6b03b682bca 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -520,7 +520,7 @@ static Value *simplifyX86muldq(const IntrinsicInst &II, ResTy->getScalarSizeInBits() == 64 && "Unexpected muldq/muludq types"); // muldq/muludq(undef, undef) -> zero (matches generic mul behavior) - if (isa<UndefValue>(Arg0) && isa<UndefValue>(Arg1)) + if (isa<UndefValue>(Arg0) || isa<UndefValue>(Arg1)) return ConstantAggregateZero::get(ResTy); // Constant folding. diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp index e625f804a23..fb7177f1ddb 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp @@ -1469,12 +1469,6 @@ Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, APInt DemandedElts, Depth + 1); if (TmpV) { II->setArgOperand(1, TmpV); MadeChange = true; } - // Output elements are undefined if both are undefined. Consider things - // like undef*0. The result is known zero, not undef. - for (unsigned i = 0; i != VWidth; ++i) - if (UndefElts2[i * 2] && UndefElts3[i * 2]) - UndefElts.setBit(i); - break; } |

