[llvm] r180045 - Changed back (relative to commit 179786) the	operations	executed when extract(cast) is transformed to cast(extract). It uses	the	Builder class as before. In addition the result node is added to the	Worklist,	so all the previous extract users will become the new scalar cast	users.
    Anat Shemer 
    anat.shemer at intel.com
       
    Mon Apr 22 13:51:10 PDT 2013
    
    
  
Author: ashemer
Date: Mon Apr 22 15:51:10 2013
New Revision: 180045
URL: http://llvm.org/viewvc/llvm-project?rev=180045&view=rev
Log:
Changed back (relative to commit 179786) the operations executed when extract(cast) is transformed to cast(extract). It uses the Builder class as before. In addition the result node is added to the Worklist, so all the previous extract users will become the new scalar cast users.
Added:
    llvm/trunk/test/Transforms/InstCombine/vec_extract_var_elt.ll
Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp?rev=180045&r1=180044&r2=180045&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp Mon Apr 22 15:51:10 2013
@@ -279,9 +279,9 @@ Instruction *InstCombiner::visitExtractE
       // Canonicalize extractelement(cast) -> cast(extractelement)
       // bitcasts can change the number of vector elements and they cost nothing
       if (CI->hasOneUse() && (CI->getOpcode() != Instruction::BitCast)) {
-        Value *EE = InsertNewInstWith(
-       	  ExtractElementInst::Create(CI->getOperand(0), EI.getIndexOperand()),
-          *CI);
+        Value *EE = Builder->CreateExtractElement(CI->getOperand(0),
+                                                  EI.getIndexOperand());
+        Worklist.AddValue(EE);
         return CastInst::Create(CI->getOpcode(), EE, EI.getType());
       }
     }
Added: llvm/trunk/test/Transforms/InstCombine/vec_extract_var_elt.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/vec_extract_var_elt.ll?rev=180045&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/vec_extract_var_elt.ll (added)
+++ llvm/trunk/test/Transforms/InstCombine/vec_extract_var_elt.ll Mon Apr 22 15:51:10 2013
@@ -0,0 +1,18 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+define void @test (float %b, <8 x float> * %p)  {
+; CHECK: extractelement
+; CHECK: fptosi
+  %1 = load <8 x float> * %p
+  %2 = bitcast <8 x float> %1 to <8 x i32>
+  %3 = bitcast <8 x i32> %2 to <8 x float>
+  %a = fptosi <8 x float> %3 to <8 x i32>
+  %4 = fptosi float %b to i32
+  %5 = add i32 %4, -2
+  %6 = extractelement <8 x i32> %a, i32 %5
+  %7 = insertelement <8 x i32> undef, i32 %6, i32 7
+  %8 = sitofp <8 x i32> %7 to <8 x float>
+  store <8 x float> %8, <8 x float>* %p
+  ret void    
+}
+
    
    
More information about the llvm-commits
mailing list