File tree Expand file tree Collapse file tree 2 files changed +28
-1
lines changed 
lib/Conversion/VectorToLLVM 
test/Conversion/VectorToLLVM Expand file tree Collapse file tree 2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -1104,7 +1104,10 @@ class VectorExtractOpConversion
11041104    }
11051105
11061106    //  One-shot extraction of vector from array (only requires extractvalue).
1107-     if  (isa<VectorType>(resultType)) {
1107+     //  Except for extracting 1-element vectors.
1108+     if  (isa<VectorType>(resultType) &&
1109+         position.size () !=
1110+             static_cast <size_t >(extractOp.getSourceVectorType ().getRank ())) {
11081111      if  (extractOp.hasDynamicPosition ())
11091112        return  failure ();
11101113
Original file line number Diff line number Diff line change @@ -1130,6 +1130,30 @@ func.func @extract_scalar_from_vec_1d_f32_scalable(%arg0: vector<[16]xf32>) -> f
11301130
11311131// ----- 
11321132
1133+ func.func  @extract_vec_1e_from_vec_1d_f32 (%arg0:  vector <16 xf32 >) -> vector <1 xf32 > {
1134+   %0  = vector.extract  %arg0 [15 ]: vector <1 xf32 > from  vector <16 xf32 >
1135+   return  %0  : vector <1 xf32 >
1136+ }
1137+ // CHECK-LABEL: @extract_vec_1e_from_vec_1d_f32( 
1138+ //  CHECK-SAME:   %[[A:.*]]: vector<16xf32>) 
1139+ //       CHECK:   %[[T0:.*]] = llvm.mlir.constant(15 : i64) : i64 
1140+ //       CHECK:   %[[T1:.*]] = llvm.extractelement %[[A]][%[[T0]] : i64] : vector<16xf32> 
1141+ //       CHECK:   %[[T2:.*]] = builtin.unrealized_conversion_cast %[[T1]] : f32 to vector<1xf32> 
1142+ //       CHECK:   return %[[T2]] : vector<1xf32> 
1143+ 
1144+ func.func  @extract_vec_1e_from_vec_1d_f32_scalable (%arg0:  vector <[16 ]xf32 >) -> vector <1 xf32 > {
1145+   %0  = vector.extract  %arg0 [15 ]: vector <1 xf32 > from  vector <[16 ]xf32 >
1146+   return  %0  : vector <1 xf32 >
1147+ }
1148+ // CHECK-LABEL: @extract_vec_1e_from_vec_1d_f32_scalable( 
1149+ //  CHECK-SAME:   %[[A:.*]]: vector<[16]xf32>) 
1150+ //       CHECK:   %[[T0:.*]] = llvm.mlir.constant(15 : i64) : i64 
1151+ //       CHECK:   %[[T1:.*]] = llvm.extractelement %[[A]][%[[T0]] : i64] : vector<[16]xf32> 
1152+ //       CHECK:   %[[T2:.*]] = builtin.unrealized_conversion_cast %[[T1]] : f32 to vector<1xf32> 
1153+ //       CHECK:   return %[[T2]] : vector<1xf32> 
1154+ 
1155+ // ----- 
1156+ 
11331157func.func  @extract_scalar_from_vec_1d_index (%arg0:  vector <16 xindex >) -> index  {
11341158  %0  = vector.extract  %arg0 [15 ]: index  from  vector <16 xindex >
11351159  return  %0  : index 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments