1*f35f863aSjeanPerier! RUN: bbc -hlfir=false %s -o "-" | FileCheck %s 2a7ac120aSValentin Clement 3a7ac120aSValentin Clement! Test logical intrinsic operation lowering to fir. 4a7ac120aSValentin Clement 5a7ac120aSValentin Clement! CHECK-LABEL:eqv0_test 6a7ac120aSValentin ClementLOGICAL(1) FUNCTION eqv0_test(x0, x1) 7a7ac120aSValentin ClementLOGICAL(1) :: x0 8a7ac120aSValentin ClementLOGICAL(1) :: x1 9a7ac120aSValentin Clement! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 10a7ac120aSValentin Clement! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 11a7ac120aSValentin Clement! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 12a7ac120aSValentin Clement! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 13a7ac120aSValentin Clement! CHECK:[[reg5:%[0-9]+]] = arith.cmpi eq, [[reg3]], [[reg4]] 14a7ac120aSValentin Clement! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> 15a7ac120aSValentin Clementeqv0_test = x0 .EQV. x1 16a7ac120aSValentin ClementEND FUNCTION 17a7ac120aSValentin Clement 18a7ac120aSValentin Clement! CHECK-LABEL:neqv1_test 19a7ac120aSValentin ClementLOGICAL(1) FUNCTION neqv1_test(x0, x1) 20a7ac120aSValentin ClementLOGICAL(1) :: x0 21a7ac120aSValentin ClementLOGICAL(1) :: x1 22a7ac120aSValentin Clement! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 23a7ac120aSValentin Clement! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 24a7ac120aSValentin Clement! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 25a7ac120aSValentin Clement! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 26a7ac120aSValentin Clement! CHECK:[[reg5:%[0-9]+]] = arith.cmpi ne, [[reg3]], [[reg4]] 27a7ac120aSValentin Clement! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> 28a7ac120aSValentin Clementneqv1_test = x0 .NEQV. x1 29a7ac120aSValentin ClementEND FUNCTION 30a7ac120aSValentin Clement 31a7ac120aSValentin Clement! CHECK-LABEL:or2_test 32a7ac120aSValentin ClementLOGICAL(1) FUNCTION or2_test(x0, x1) 33a7ac120aSValentin ClementLOGICAL(1) :: x0 34a7ac120aSValentin ClementLOGICAL(1) :: x1 35a7ac120aSValentin Clement! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 36a7ac120aSValentin Clement! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 37a7ac120aSValentin Clement! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 38a7ac120aSValentin Clement! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 39a7ac120aSValentin Clement! CHECK:[[reg5:%[0-9]+]] = arith.ori [[reg3]], [[reg4]] 40a7ac120aSValentin Clement! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> 41a7ac120aSValentin Clementor2_test = x0 .OR. x1 42a7ac120aSValentin ClementEND FUNCTION 43a7ac120aSValentin Clement 44a7ac120aSValentin Clement! CHECK-LABEL:and3_test 45a7ac120aSValentin ClementLOGICAL(1) FUNCTION and3_test(x0, x1) 46a7ac120aSValentin ClementLOGICAL(1) :: x0 47a7ac120aSValentin ClementLOGICAL(1) :: x1 48a7ac120aSValentin Clement! CHECK-DAG:[[reg1:%[0-9]+]] = fir.load %arg0 49a7ac120aSValentin Clement! CHECK-DAG:[[reg2:%[0-9]+]] = fir.load %arg1 50a7ac120aSValentin Clement! CHECK-DAG:[[reg3:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 51a7ac120aSValentin Clement! CHECK-DAG:[[reg4:%[0-9]+]] = fir.convert [[reg2]] {{.*}} -> i1 52a7ac120aSValentin Clement! CHECK:[[reg5:%[0-9]+]] = arith.andi [[reg3]], [[reg4]] 53a7ac120aSValentin Clement! CHECK:fir.convert [[reg5]] {{.*}} -> !fir.logical<1> 54a7ac120aSValentin Clementand3_test = x0 .AND. x1 55a7ac120aSValentin ClementEND FUNCTION 56a7ac120aSValentin Clement 57a7ac120aSValentin Clement! CHECK-LABEL:not4_test 58a7ac120aSValentin ClementLOGICAL(1) FUNCTION not4_test(x0) 59a7ac120aSValentin ClementLOGICAL(1) :: x0 60a7ac120aSValentin Clement! CHECK:[[reg1:%[0-9]+]] = fir.load %arg0 61a7ac120aSValentin Clement! CHECK:[[reg2:%[0-9]+]] = fir.convert [[reg1]] {{.*}} -> i1 62a7ac120aSValentin Clement! CHECK:[[reg3:%[0-9]+]] = arith.xori [[reg2]], %true 63a7ac120aSValentin Clement! CHECK:fir.convert [[reg3]] {{.*}} -> !fir.logical<1> 64a7ac120aSValentin Clementnot4_test = .NOT. x0 65a7ac120aSValentin ClementEND FUNCTION 66