70 lines · plain
1// Test hlfir.transpose operation parse, verify (no errors), and unparse2 3// RUN: fir-opt %s | fir-opt | FileCheck %s4 5// square matrix of known shape6func.func @transpose0(%arg0: !hlfir.expr<2x2xi32>) {7 %res = hlfir.transpose %arg0 : (!hlfir.expr<2x2xi32>) -> !hlfir.expr<2x2xi32>8 return9}10// CHECK-LABEL: func.func @transpose011// CHECK: %[[ARG0:.*]]: !hlfir.expr<2x2xi32>12// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<2x2xi32>) -> !hlfir.expr<2x2xi32>13// CHECK-NEXT: return14// CHECK-NEXT: }15 16// rectangular matrix of known shape17func.func @transpose1(%arg0: !hlfir.expr<2x3xi32>) {18 %res = hlfir.transpose %arg0 : (!hlfir.expr<2x3xi32>) -> !hlfir.expr<3x2xi32>19 return20}21// CHECK-LABEL: func.func @transpose122// CHECK: %[[ARG0:.*]]: !hlfir.expr<2x3xi32>23// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<2x3xi32>) -> !hlfir.expr<3x2xi32>24// CHECK-NEXT: return25// CHECK-NEXT: }26 27// matrix of assumed shape28func.func @transpose2(%arg0: !hlfir.expr<?x?xi32>) {29 %res = hlfir.transpose %arg0 : (!hlfir.expr<?x?xi32>) -> !hlfir.expr<?x?xi32>30 return31}32// CHECK-LABEL: func.func @transpose233// CHECK: %[[ARG0:.*]]: !hlfir.expr<?x?xi32>34// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<?x?xi32>) -> !hlfir.expr<?x?xi32>35// CHECK-NEXT: return36// CHECK-NEXT: }37 38// matrix where only some dimensions are known #139func.func @transpose3(%arg0: !hlfir.expr<?x2xi32>) {40 %res = hlfir.transpose %arg0 : (!hlfir.expr<?x2xi32>) -> !hlfir.expr<2x?xi32>41 return42}43// CHECK-LABEL: func.func @transpose344// CHECK: %[[ARG0:.*]]: !hlfir.expr<?x2xi32>45// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<?x2xi32>) -> !hlfir.expr<2x?xi32>46// CHECK-NEXT: return47// CHECK-NEXT: }48 49// matrix where only some dimensions are known #250func.func @transpose4(%arg0: !hlfir.expr<2x?xi32>) {51 %res = hlfir.transpose %arg0 : (!hlfir.expr<2x?xi32>) -> !hlfir.expr<?x2xi32>52 return53}54// CHECK-LABEL: func.func @transpose455// CHECK: %[[ARG0:.*]]: !hlfir.expr<2x?xi32>56// CHECK-NEXT: %[[RES:.*]] = hlfir.transpose %[[ARG0]] : (!hlfir.expr<2x?xi32>) -> !hlfir.expr<?x2xi32>57// CHECK-NEXT: return58// CHECK-NEXT: }59 60// matrix is a boxed array61func.func @transpose5(%arg0: !fir.box<!fir.array<1x2xi32>>) {62 %res = hlfir.transpose %arg0 : (!fir.box<!fir.array<1x2xi32>>) -> !hlfir.expr<2x1xi32>63 return64}65// CHECK-LABEL: func.func @transpose566// 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: return69// CHECK-NEXT: }70