File: type-conversion.mlir

package info (click to toggle)
llvm-toolchain-20 1%3A20.1.8-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,111,388 kB
  • sloc: cpp: 7,438,767; ansic: 1,393,871; asm: 1,012,926; python: 241,728; f90: 86,635; objc: 75,411; lisp: 42,144; pascal: 17,286; sh: 10,027; ml: 5,082; perl: 4,730; awk: 3,523; makefile: 3,349; javascript: 2,251; xml: 892; fortran: 672
file content (57 lines) | stat: -rw-r--r-- 2,535 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// RUN: mlir-opt %s -test-llvm-legalize-patterns -split-input-file

// Test the argument materializer for ranked MemRef types.

//   CHECK-LABEL: func @construct_ranked_memref_descriptor(
//         CHECK:   llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
// CHECK-COUNT-7:   llvm.insertvalue
//         CHECK:   builtin.unrealized_conversion_cast %{{.*}} : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)> to memref<5x4xf32>
func.func @construct_ranked_memref_descriptor(%arg0: !llvm.ptr, %arg1: !llvm.ptr, %arg2: i64, %arg3: i64, %arg4: i64, %arg5: i64, %arg6: i64) {
  %0 = "test.direct_replacement"(%arg0, %arg1, %arg2, %arg3, %arg4, %arg5, %arg6) : (!llvm.ptr, !llvm.ptr, i64, i64, i64, i64, i64) -> (memref<5x4xf32>)
  "test.legal_op"(%0) : (memref<5x4xf32>) -> ()
  return
}

// -----

// The argument materializer for ranked MemRef types is called with incorrect
// input types. Make sure that the materializer is skipped and we do not
// generate invalid IR.

// CHECK-LABEL: func @invalid_ranked_memref_descriptor(
//       CHECK:   %[[cast:.*]] = builtin.unrealized_conversion_cast %{{.*}} : i1 to memref<5x4xf32>
//       CHECK:   "test.legal_op"(%[[cast]])
func.func @invalid_ranked_memref_descriptor(%arg0: i1) {
  %0 = "test.direct_replacement"(%arg0) : (i1) -> (memref<5x4xf32>)
  "test.legal_op"(%0) : (memref<5x4xf32>) -> ()
  return
}

// -----

// Test the argument materializer for unranked MemRef types.

//   CHECK-LABEL: func @construct_unranked_memref_descriptor(
//         CHECK:   llvm.mlir.undef : !llvm.struct<(i64, ptr)>
// CHECK-COUNT-2:   llvm.insertvalue
//         CHECK:   builtin.unrealized_conversion_cast %{{.*}} : !llvm.struct<(i64, ptr)> to memref<*xf32>
func.func @construct_unranked_memref_descriptor(%arg0: i64, %arg1: !llvm.ptr) {
  %0 = "test.direct_replacement"(%arg0, %arg1) : (i64, !llvm.ptr) -> (memref<*xf32>)
  "test.legal_op"(%0) : (memref<*xf32>) -> ()
  return
}

// -----

// The argument materializer for unranked MemRef types is called with incorrect
// input types. Make sure that the materializer is skipped and we do not
// generate invalid IR.

// CHECK-LABEL: func @invalid_unranked_memref_descriptor(
//       CHECK:   %[[cast:.*]] = builtin.unrealized_conversion_cast %{{.*}} : i1 to memref<*xf32>
//       CHECK:   "test.legal_op"(%[[cast]])
func.func @invalid_unranked_memref_descriptor(%arg0: i1) {
  %0 = "test.direct_replacement"(%arg0) : (i1) -> (memref<*xf32>)
  "test.legal_op"(%0) : (memref<*xf32>) -> ()
  return
}