Add support for lowering DataMovementOp ops to Linalg on unsigned types.
PiperOrigin-RevId: 379527360
This commit is contained in:
		
							parent
							
								
									3afbe312f8
								
							
						
					
					
						commit
						b44ab8ad49
					
				|  | @ -406,6 +406,8 @@ class DataMovementOpConverter : public OpConversionPattern<OpTy> { | ||||||
|       ConversionPatternRewriter& rewriter) const final { |       ConversionPatternRewriter& rewriter) const final { | ||||||
|     if (!VerifyHloOpBufferOrTensorSemantics<isLHLO>(op)) return failure(); |     if (!VerifyHloOpBufferOrTensorSemantics<isLHLO>(op)) return failure(); | ||||||
|     auto result_type = GetHloOpResultType<isLHLO>(op); |     auto result_type = GetHloOpResultType<isLHLO>(op); | ||||||
|  |     result_type = this->typeConverter->convertType(result_type) | ||||||
|  |                       .template cast<ShapedType>(); | ||||||
| 
 | 
 | ||||||
|     SmallVector<AffineMap, 2> indexing_maps = |     SmallVector<AffineMap, 2> indexing_maps = | ||||||
|         Derived::getIndexingMaps(op, &rewriter); |         Derived::getIndexingMaps(op, &rewriter); | ||||||
|  |  | ||||||
|  | @ -493,6 +493,24 @@ func @broadcast_in_dim(%operand: tensor<5x7x1xf32>) -> tensor<7x10x6x4x5xf32> { | ||||||
| 
 | 
 | ||||||
| // ----- | // ----- | ||||||
| 
 | 
 | ||||||
|  | // CHECK-DAG: #[[OPERAND_MAP:.*]] = affine_map<(d0, d1, d2, d3, d4) -> (d4, d0, 0)> | ||||||
|  | // CHECK-DAG: #[[RESULT_MAP:.*]] = affine_map<(d0, d1, d2, d3, d4) -> (d0, d1, d2, d3, d4)> | ||||||
|  | // CHECK-LABEL: func @broadcast_in_dim_ui32 | ||||||
|  | func @broadcast_in_dim_ui32(%operand: tensor<5x7x1xui32>) -> tensor<7x10x6x4x5xui32> { | ||||||
|  |   %0 = "mhlo.broadcast_in_dim"(%operand) | ||||||
|  |          {broadcast_dimensions = dense<[4,0,2]> : tensor<3xi64>} | ||||||
|  |          : (tensor<5x7x1xui32>) -> tensor<7x10x6x4x5xui32> | ||||||
|  |   return %0 : tensor<7x10x6x4x5xui32> | ||||||
|  | } | ||||||
|  | // CHECK: unrealized_conversion_cast %{{.*}} : tensor<5x7x1xui32> to tensor<5x7x1xi32> | ||||||
|  | // CHECK: linalg.init_tensor [7, 10, 6, 4, 5] : tensor<7x10x6x4x5xi32> | ||||||
|  | // CHECK: %[[RES:.*]] = linalg.generic {{{.*}}indexing_maps = [#[[OPERAND_MAP]], #[[RESULT_MAP]]] | ||||||
|  | // CHECK-NEXT: ^bb0(%[[OPERAND:.*]]: i32, %{{.*}}: i32): | ||||||
|  | // CHECK-NEXT:   linalg.yield %[[OPERAND]] : i32 | ||||||
|  | // CHECK: unrealized_conversion_cast %[[RES]] : tensor<7x10x6x4x5xi32> to tensor<7x10x6x4x5xui32> | ||||||
|  | 
 | ||||||
|  | // ----- | ||||||
|  | 
 | ||||||
| // CHECK-DAG: #[[OPERAND_MAP:.+]] = affine_map<(d0, d1) -> (d0)> | // CHECK-DAG: #[[OPERAND_MAP:.+]] = affine_map<(d0, d1) -> (d0)> | ||||||
| // CHECK-DAG: #[[RESULT_MAP:.+]] = affine_map<(d0, d1) -> (d0, d1)> | // CHECK-DAG: #[[RESULT_MAP:.+]] = affine_map<(d0, d1) -> (d0, d1)> | ||||||
| // CHECK-LABEL: func @broadcast_in_dim_with_one_to_one | // CHECK-LABEL: func @broadcast_in_dim_with_one_to_one | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue