! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s --check-prefix=FIR ! Test that OpenMP target regions in dead code are deleted ! Test 1: if (.false.) with target - target should be deleted ! FIR-LABEL: func.func @_QPtest_dead_simple ! FIR: %[[FALSE:.*]] = arith.constant false ! FIR: fir.if %[[FALSE]] { ! FIR-NOT: omp.target subroutine test_dead_simple() real :: v if (.false.) then !$omp target map(tofrom:v) v = 1.0 !$omp end target end if end subroutine ! Test 2: Live target - should remain ! FIR-LABEL: func.func @_QPtest_live_simple ! FIR: omp.target subroutine test_live_simple() real :: v !$omp target map(tofrom:v) v = 2.0 !$omp end target end subroutine ! Test 3: Mixed dead and live ! FIR-LABEL: func.func @_QPtest_mixed subroutine test_mixed() real :: v ! Dead - should be deleted ! FIR: fir.if %{{.*}} { if (.false.) then !$omp target map(tofrom:v) v = 3.0 !$omp end target end if ! FIR-NOT: omp.target ! Live - should remain (expect exactly 1 omp.target in function) !$omp target map(tofrom:v) ! FIR: omp.target v = 4.0 !$omp end target end subroutine ! Test 4: Nested - outer false, target should be deleted ! FIR-LABEL: func.func @_QPtest_nested_outer_false subroutine test_nested_outer_false() real :: v ! FIR: fir.if %{{.*}} { if (.false.) then if (.true.) then !$omp target map(tofrom:v) v = 5.0 !$omp end target end if end if ! FIR-NOT: omp.target end subroutine ! Test 5: Parameter constant - target should be deleted ! FIR-LABEL: func.func @_QPtest_parameter subroutine test_parameter() real :: v logical, parameter :: DEAD = .false. ! FIR: fir.if %{{.*}} { if (DEAD) then !$omp target map(tofrom:v) v = 6.0 !$omp end target end if ! FIR-NOT: omp.target end subroutine ! FIR-LABEL: func.func @_QPtest_outer subroutine test_outer implicit none contains subroutine unused_sub() real :: v !$omp target map(tofrom: v) v = 5.0 !$omp end target end subroutine ! FIR-NOT: omp.target end subroutine