forked from llvm/torch-mlir
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[flang] Lower logical comparison and logical operations
This handles the lowering of the logical comparison to `arith.cmpi` operation. The logical operations `.OR.`, `.AND.` and `.NOT.` are lowered to `arith.ori`, `arith.andi` and `arith.xori` This patch is part of the upstreaming effort from fir-dev branch. Depends on D120559 Reviewed By: schweitz, rovka Differential Revision: https://reviews.llvm.org/D120560 Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]>
- Loading branch information
1 parent
98813e3
commit a7ac120
Showing
2 changed files
with
91 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
! RUN: bbc %s -o "-" | FileCheck %s | ||
|
||
! Test logical intrinsic operation lowering to fir. | ||
|
||
! CHECK-LABEL:eqv0_test | ||
LOGICAL(1) FUNCTION eqv0_test(x0, x1) | ||
LOGICAL(1) :: x0 | ||
LOGICAL(1) :: x1 | ||
! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 | ||
! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 | ||
! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 | ||
! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 | ||
! CHECK:[[reg5:%[0-9]+]] = arith.cmpi eq, [[reg3]], [[reg4]] | ||
! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> | ||
eqv0_test = x0 .EQV. x1 | ||
END FUNCTION | ||
|
||
! CHECK-LABEL:neqv1_test | ||
LOGICAL(1) FUNCTION neqv1_test(x0, x1) | ||
LOGICAL(1) :: x0 | ||
LOGICAL(1) :: x1 | ||
! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 | ||
! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 | ||
! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 | ||
! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 | ||
! CHECK:[[reg5:%[0-9]+]] = arith.cmpi ne, [[reg3]], [[reg4]] | ||
! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> | ||
neqv1_test = x0 .NEQV. x1 | ||
END FUNCTION | ||
|
||
! CHECK-LABEL:or2_test | ||
LOGICAL(1) FUNCTION or2_test(x0, x1) | ||
LOGICAL(1) :: x0 | ||
LOGICAL(1) :: x1 | ||
! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 | ||
! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 | ||
! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 | ||
! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 | ||
! CHECK:[[reg5:%[0-9]+]] = arith.ori [[reg3]], [[reg4]] | ||
! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> | ||
or2_test = x0 .OR. x1 | ||
END FUNCTION | ||
|
||
! CHECK-LABEL:and3_test | ||
LOGICAL(1) FUNCTION and3_test(x0, x1) | ||
LOGICAL(1) :: x0 | ||
LOGICAL(1) :: x1 | ||
! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 | ||
! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 | ||
! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 | ||
! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 | ||
! CHECK:[[reg5:%[0-9]+]] = arith.andi [[reg3]], [[reg4]] | ||
! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> | ||
and3_test = x0 .AND. x1 | ||
END FUNCTION | ||
|
||
! CHECK-LABEL:not4_test | ||
LOGICAL(1) FUNCTION not4_test(x0) | ||
LOGICAL(1) :: x0 | ||
! CHECK:[[reg1:%[0-9]+]] = fir.load %arg0 | ||
! CHECK:[[reg2:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 | ||
! CHECK:[[reg3:%[0-9]+]] = arith.xori [[reg2]], %true | ||
! CHECK:fir.convert [[reg3]] {{.*}} -> !fir.logical<1> | ||
not4_test = .NOT. x0 | ||
END FUNCTION |