[llvm-branch-commits] [llvm-branch] r206054 - Merging r200028:

Tom Stellard thomas.stellard at amd.com
Fri Apr 11 12:35:42 PDT 2014


Author: tstellar
Date: Fri Apr 11 14:35:42 2014
New Revision: 206054

URL: http://llvm.org/viewvc/llvm-project?rev=206054&view=rev
Log:
Merging r200028:

------------------------------------------------------------------------
r200028 | benny.kra | 2014-01-24 14:02:37 -0500 (Fri, 24 Jan 2014) | 4 lines

InstCombine: Don't try to use aggregate elements of ConstantExprs.

PR18600.

------------------------------------------------------------------------

Modified:
    llvm/branches/release_34/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
    llvm/branches/release_34/test/Transforms/InstCombine/vec_extract_var_elt.ll

Modified: llvm/branches/release_34/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_34/lib/Transforms/InstCombine/InstCombineVectorOps.cpp?rev=206054&r1=206053&r2=206054&view=diff
==============================================================================
--- llvm/branches/release_34/lib/Transforms/InstCombine/InstCombineVectorOps.cpp (original)
+++ llvm/branches/release_34/lib/Transforms/InstCombine/InstCombineVectorOps.cpp Fri Apr 11 14:35:42 2014
@@ -25,11 +25,13 @@ static bool CheapToScalarize(Value *V, b
     if (isConstant) return true;
 
     // If all elts are the same, we can extract it and use any of the values.
-    Constant *Op0 = C->getAggregateElement(0U);
-    for (unsigned i = 1, e = V->getType()->getVectorNumElements(); i != e; ++i)
-      if (C->getAggregateElement(i) != Op0)
-        return false;
-    return true;
+    if (Constant *Op0 = C->getAggregateElement(0U)) {
+      for (unsigned i = 1, e = V->getType()->getVectorNumElements(); i != e;
+           ++i)
+        if (C->getAggregateElement(i) != Op0)
+          return false;
+      return true;
+    }
   }
   Instruction *I = dyn_cast<Instruction>(V);
   if (!I) return false;

Modified: llvm/branches/release_34/test/Transforms/InstCombine/vec_extract_var_elt.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_34/test/Transforms/InstCombine/vec_extract_var_elt.ll?rev=206054&r1=206053&r2=206054&view=diff
==============================================================================
--- llvm/branches/release_34/test/Transforms/InstCombine/vec_extract_var_elt.ll (original)
+++ llvm/branches/release_34/test/Transforms/InstCombine/vec_extract_var_elt.ll Fri Apr 11 14:35:42 2014
@@ -16,3 +16,11 @@ define void @test (float %b, <8 x float>
   ret void    
 }
 
+; PR18600
+define i32 @test2(i32 %i) {
+  %e = extractelement <4 x i32> bitcast (<2 x i64> <i64 1, i64 2> to <4 x i32>), i32 %i
+  ret i32 %e
+
+; CHECK-LABEL: @test2
+; CHECK: extractelement
+}





More information about the llvm-branch-commits mailing list