[InstCombineVectorOps] Use poison instead of undef as placeholder [NFC]
authorNuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Thu, 20 Jul 2023 07:14:43 +0000 (08:14 +0100)
committerNuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Thu, 20 Jul 2023 07:14:55 +0000 (08:14 +0100)
Undef was being used to populate unused vector lanes.
While at it, switch extractelement to use poison as the OOB value (per LangRef)

llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp

index ae18e2c..4a5ffef 100644 (file)
@@ -546,7 +546,7 @@ Instruction *InstCombinerImpl::visitExtractElementInst(ExtractElementInst &EI) {
                                 ->getNumElements();
 
         if (SrcIdx < 0)
-          return replaceInstUsesWith(EI, UndefValue::get(EI.getType()));
+          return replaceInstUsesWith(EI, PoisonValue::get(EI.getType()));
         if (SrcIdx < (int)LHSWidth)
           Src = SVI->getOperand(0);
         else {
@@ -1480,10 +1480,10 @@ static Instruction *foldConstantInsEltIntoShuffle(InsertElementInst &InsElt) {
       }
       ++ValI;
     }
-    // Remaining values are filled with 'undef' values.
+    // Remaining values are filled with 'poison' values.
     for (unsigned I = 0; I < NumElts; ++I) {
       if (!Values[I]) {
-        Values[I] = UndefValue::get(InsElt.getType()->getElementType());
+        Values[I] = PoisonValue::get(InsElt.getType()->getElementType());
         Mask[I] = I;
       }
     }
@@ -1704,7 +1704,7 @@ Instruction *InstCombinerImpl::visitInsertElementInst(InsertElementInst &IE) {
         if (LR.first != &IE && LR.second != &IE) {
           // We now have a shuffle of LHS, RHS, Mask.
           if (LR.second == nullptr)
-            LR.second = UndefValue::get(LR.first->getType());
+            LR.second = PoisonValue::get(LR.first->getType());
           return new ShuffleVectorInst(LR.first, LR.second, Mask);
         }
       }