blob: 14f9383d5775a19fa65c8d473262d64c5fba55f3 [file] [log] [blame]
Tom Eccles7f7ebff2023-02-27 13:49:291// Test hlfir.transpose operation parse, verify (no errors), and unparse
2
3// RUN: fir-opt %s | fir-opt | FileCheck %s
4
5// square matrix of known shape
6func.func @transpose0(%arg0: !hlfir.expr<2x2xi32>) {
7 %res = hlfir.transpose %arg0 : (!hlfir.expr<2x2xi32>) -> !hlfir.expr<2x2xi32>
8 return
9}
10// CHECK-LABEL: func.func @transpose0
11// CHECK: %[[ARG0:.*]]: !hlfir.expr<2x2xi32>
12// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<2x2xi32>) -> !hlfir.expr<2x2xi32>
13// CHECK-NEXT: return
14// CHECK-NEXT: }
15
16// rectangular matrix of known shape
17func.func @transpose1(%arg0: !hlfir.expr<2x3xi32>) {
18 %res = hlfir.transpose %arg0 : (!hlfir.expr<2x3xi32>) -> !hlfir.expr<3x2xi32>
19 return
20}
21// CHECK-LABEL: func.func @transpose1
22// CHECK: %[[ARG0:.*]]: !hlfir.expr<2x3xi32>
23// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<2x3xi32>) -> !hlfir.expr<3x2xi32>
24// CHECK-NEXT: return
25// CHECK-NEXT: }
26
27// matrix of assumed shape
28func.func @transpose2(%arg0: !hlfir.expr<?x?xi32>) {
29 %res = hlfir.transpose %arg0 : (!hlfir.expr<?x?xi32>) -> !hlfir.expr<?x?xi32>
30 return
31}
32// CHECK-LABEL: func.func @transpose2
33// CHECK: %[[ARG0:.*]]: !hlfir.expr<?x?xi32>
34// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<?x?xi32>) -> !hlfir.expr<?x?xi32>
35// CHECK-NEXT: return
36// CHECK-NEXT: }
37
38// matrix where only some dimensions are known #1
39func.func @transpose3(%arg0: !hlfir.expr<?x2xi32>) {
40 %res = hlfir.transpose %arg0 : (!hlfir.expr<?x2xi32>) -> !hlfir.expr<2x?xi32>
41 return
42}
43// CHECK-LABEL: func.func @transpose3
44// CHECK: %[[ARG0:.*]]: !hlfir.expr<?x2xi32>
45// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<?x2xi32>) -> !hlfir.expr<2x?xi32>
46// CHECK-NEXT: return
47// CHECK-NEXT: }
48
49// matrix where only some dimensions are known #2
50func.func @transpose4(%arg0: !hlfir.expr<2x?xi32>) {
51 %res = hlfir.transpose %arg0 : (!hlfir.expr<2x?xi32>) -> !hlfir.expr<?x2xi32>
52 return
53}
54// CHECK-LABEL: func.func @transpose4
55// CHECK: %[[ARG0:.*]]: !hlfir.expr<2x?xi32>
56// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<2x?xi32>) -> !hlfir.expr<?x2xi32>
57// CHECK-NEXT: return
58// CHECK-NEXT: }
59
60// matrix is a boxed array
61func.func @transpose5(%arg0: !fir.box<!fir.array<1x2xi32>>) {
62 %res = hlfir.transpose %arg0 : (!fir.box<!fir.array<1x2xi32>>) -> !hlfir.expr<2x1xi32>
63 return
64}
65// CHECK-LABEL: func.func @transpose5
66// CHECK: %[[ARG0:.*]]: !fir.box<!fir.array<1x2xi32>>
67// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!fir.box<!fir.array<1x2xi32>>) -> !hlfir.expr<2x1xi32>
68// CHECK-NEXT: return
69// CHECK-NEXT: }