1// 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: } 70