[LLVM] Fix Maintainers.md formatting (NFC)
[llvm-project.git] / flang / test / HLFIR / transpose.fir
blob14f9383d5775a19fa65c8d473262d64c5fba55f3
1 // Test hlfir.transpose operation parse, verify (no errors), and unparse
3 // RUN: fir-opt %s | fir-opt | FileCheck %s
5 // square matrix of known shape
6 func.func @transpose0(%arg0: !hlfir.expr<2x2xi32>) {
7   %res = hlfir.transpose %arg0 : (!hlfir.expr<2x2xi32>) -> !hlfir.expr<2x2xi32>
8   return
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:  }
16 // rectangular matrix of known shape
17 func.func @transpose1(%arg0: !hlfir.expr<2x3xi32>) {
18   %res = hlfir.transpose %arg0 : (!hlfir.expr<2x3xi32>) -> !hlfir.expr<3x2xi32>
19   return
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:  }
27 // matrix of assumed shape
28 func.func @transpose2(%arg0: !hlfir.expr<?x?xi32>) {
29   %res = hlfir.transpose %arg0 : (!hlfir.expr<?x?xi32>) -> !hlfir.expr<?x?xi32>
30   return
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:  }
38 // matrix where only some dimensions are known #1
39 func.func @transpose3(%arg0: !hlfir.expr<?x2xi32>) {
40   %res = hlfir.transpose %arg0 : (!hlfir.expr<?x2xi32>) -> !hlfir.expr<2x?xi32>
41   return
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:  }
49 // matrix where only some dimensions are known #2
50 func.func @transpose4(%arg0: !hlfir.expr<2x?xi32>) {
51   %res = hlfir.transpose %arg0 : (!hlfir.expr<2x?xi32>) -> !hlfir.expr<?x2xi32>
52   return
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:  }
60 // matrix is a boxed array
61 func.func @transpose5(%arg0: !fir.box<!fir.array<1x2xi32>>) {
62   %res = hlfir.transpose %arg0 : (!fir.box<!fir.array<1x2xi32>>) -> !hlfir.expr<2x1xi32>
63   return
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:  }