|
| 1 | +// RUN: fir-opt --split-input-file --cuf-implicit-device-global %s | FileCheck %s |
| 2 | + |
| 3 | +// Test that global used in device function are flagged with the correct |
| 4 | +// attribute. |
| 5 | + |
| 6 | +func.func @_QMdataPsetvalue() attributes {cuf.proc_attr = #cuf.cuda_proc<global>} { |
| 7 | + %c6_i32 = arith.constant 6 : i32 |
| 8 | + %21 = fir.address_of(@_QQclX6995815537abaf90e86ce166af128f3a) : !fir.ref<!fir.char<1,32>> |
| 9 | + %22 = fir.convert %21 : (!fir.ref<!fir.char<1,32>>) -> !fir.ref<i8> |
| 10 | + %c14_i32 = arith.constant 14 : i32 |
| 11 | + %23 = fir.call @_FortranAioBeginExternalListOutput(%c6_i32, %22, %c14_i32) fastmath<contract> : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> |
| 12 | + return |
| 13 | +} |
| 14 | + |
| 15 | +func.func private @_FortranAioBeginExternalListOutput(i32, !fir.ref<i8>, i32) -> !fir.ref<i8> attributes {fir.io, fir.runtime} |
| 16 | +fir.global linkonce @_QQclX6995815537abaf90e86ce166af128f3a constant : !fir.char<1,32> { |
| 17 | + %0 = fir.string_lit "cuda-implicit-device-global.fir\00"(32) : !fir.char<1,32> |
| 18 | + fir.has_value %0 : !fir.char<1,32> |
| 19 | +} |
| 20 | + |
| 21 | +// CHECK-LABEL: func.func @_QMdataPsetvalue() attributes {cuf.proc_attr = #cuf.cuda_proc<global>} |
| 22 | + |
| 23 | +// CHECK: %[[GLOBAL:.*]] = fir.address_of(@_QQcl[[SYMBOL:.*]]) : !fir.ref<!fir.char<1,32>> |
| 24 | +// CHECK: %[[CONV:.*]] = fir.convert %[[GLOBAL]] : (!fir.ref<!fir.char<1,32>>) -> !fir.ref<i8> |
| 25 | +// CHECK: fir.call @_FortranAioBeginExternalListOutput(%{{.*}}, %[[CONV]], %{{.*}}) fastmath<contract> : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> |
| 26 | +// CHECK: fir.global linkonce @_QQcl[[SYMBOL]] {data_attr = #cuf.cuda<constant>} constant : !fir.char<1,32> |
| 27 | + |
| 28 | +// ----- |
| 29 | + |
| 30 | +func.func @_QMdataPsetvalue() { |
| 31 | + %c6_i32 = arith.constant 6 : i32 |
| 32 | + %21 = fir.address_of(@_QQclX6995815537abaf90e86ce166af128f3a) : !fir.ref<!fir.char<1,32>> |
| 33 | + %22 = fir.convert %21 : (!fir.ref<!fir.char<1,32>>) -> !fir.ref<i8> |
| 34 | + %c14_i32 = arith.constant 14 : i32 |
| 35 | + %23 = fir.call @_FortranAioBeginExternalListOutput(%c6_i32, %22, %c14_i32) fastmath<contract> : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> |
| 36 | + return |
| 37 | +} |
| 38 | + |
| 39 | +func.func private @_FortranAioBeginExternalListOutput(i32, !fir.ref<i8>, i32) -> !fir.ref<i8> attributes {fir.io, fir.runtime} |
| 40 | +fir.global linkonce @_QQclX6995815537abaf90e86ce166af128f3a constant : !fir.char<1,32> { |
| 41 | + %0 = fir.string_lit "cuda-implicit-device-global.fir\00"(32) : !fir.char<1,32> |
| 42 | + fir.has_value %0 : !fir.char<1,32> |
| 43 | +} |
| 44 | + |
| 45 | +// CHECK-LABEL: func.func @_QMdataPsetvalue() |
| 46 | +// CHECK: %[[GLOBAL:.*]] = fir.address_of(@_QQcl[[SYMBOL:.*]]) : !fir.ref<!fir.char<1,32>> |
| 47 | +// CHECK: %[[CONV:.*]] = fir.convert %[[GLOBAL]] : (!fir.ref<!fir.char<1,32>>) -> !fir.ref<i8> |
| 48 | +// CHECK: fir.call @_FortranAioBeginExternalListOutput(%{{.*}}, %[[CONV]], %{{.*}}) fastmath<contract> : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> |
| 49 | +// CHECK: fir.global linkonce @_QQcl[[SYMBOL]] constant : !fir.char<1,32> |
0 commit comments