extractelement(undef,x) -> undef
authorChris Lattner <sabre@nondot.org>
Fri, 31 Mar 2006 18:25:14 +0000 (18:25 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 31 Mar 2006 18:25:14 +0000 (18:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27300 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index cd734568ba5618604f59e1e8a9bdd36f0e0c151d..f69d869c12e4d6525ef2d6256f329c3b8e7843cc 100644 (file)
@@ -6655,12 +6655,14 @@ static bool CheapToScalarize(Value *V, bool isConstant) {
 }
 
 Instruction *InstCombiner::visitExtractElementInst(ExtractElementInst &EI) {
-  if (ConstantAggregateZero *C = 
-      dyn_cast<ConstantAggregateZero>(EI.getOperand(0))) {
-    // If packed val is constant 0, replace extract with scalar 0
-    const Type *Ty = cast<PackedType>(C->getType())->getElementType();
-    return ReplaceInstUsesWith(EI, Constant::getNullValue(Ty));
-  }
+  // If packed val is undef, replace extract with scalar undef.
+  if (isa<UndefValue>(EI.getOperand(0)))
+    return ReplaceInstUsesWith(EI, UndefValue::get(EI.getType()));
+
+  // If packed val is constant 0, replace extract with scalar 0.
+  if (isa<ConstantAggregateZero>(EI.getOperand(0)))
+    return ReplaceInstUsesWith(EI, Constant::getNullValue(EI.getType()));
+  
   if (ConstantPacked *C = dyn_cast<ConstantPacked>(EI.getOperand(0))) {
     // If packed val is constant with uniform operands, replace EI
     // with that operand