]> granicus.if.org Git - llvm/commitdiff
[InstCombine][X86] MULDQ/MULUDQ undef -> zero
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 24 Jan 2017 11:07:41 +0000 (11:07 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 24 Jan 2017 11:07:41 +0000 (11:07 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292913 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstCombineCalls.cpp
lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp

index 07ee3c032c2be68c5d33cc8e27c69ba33fcaa3b5..6b03b682bca3c9e0b950fa6d4538c802fa2f555b 100644 (file)
@@ -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.
index e625f804a23615695e750dfc41759a1046cde511..fb7177f1ddbd8c88de463ee449f1eb19b2618c3a 100644 (file)
@@ -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;
     }