@@ -53,3 +53,94 @@ // Test that global used in device function are flagged with the correct
53
53
54
54
// CHECK- LABEL: gpu.module @cuda_device_mod [#nvvm.target ]
55
55
// CHECK- NOT: fir.global linkonce @_QQclX6995815537abaf90e86ce166af128f3a
56
+
57
+ // -----
58
+
59
+ func.func @_QPsub1() {
60
+ % 0 = fir.alloca i32 {bindc_name = " i" , uniq_name = " _QFsub1Ei" }
61
+ % 1 :2 = hlfir.declare % 0 {uniq_name = " _QFsub1Ei" } : (! fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
62
+ % c1_i32 = arith.constant 1 : i32
63
+ % 2 = fir.convert % c1_i32 : (i32) - > index
64
+ % c100_i32 = arith.constant 100 : i32
65
+ % 3 = fir.convert % c100_i32 : (i32) - > index
66
+ % c1 = arith.constant 1 : index
67
+ cuf.kernel<<<* , * >>> (% arg0 : index) = (% 2 : index) to (% 3 : index) step (% c1 : index) {
68
+ % 4 = fir.convert % arg0 : (index) - > i32
69
+ fir.store % 4 to % 1 #1 : ! fir.ref<i32>
70
+ % 5 = fir.load % 1 #0 : ! fir.ref<i32>
71
+ % c1_i32_0 = arith.constant 1 : i32
72
+ % 6 = arith.cmpi eq, % 5 , % c1_i32_0 : i32
73
+ fir.if % 6 {
74
+ % c6_i32 = arith.constant 6 : i32
75
+ % 7 = fir.address_of(@_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5) : ! fir.ref<!fir.char<1,10>>
76
+ % 8 = fir.convert % 7 : (! fir.ref<!fir.char<1,10>>) -> !fir.ref<i8>
77
+ % c5_i32 = arith.constant 5 : i32
78
+ % 9 = fir.call @_FortranAioBeginExternalListOutput(% c6_i32, % 8 , % c5_i32) fastmath< contract> : (i32, ! fir.ref<i8>, i32) -> !fir.ref<i8>
79
+ % 10 = fir.address_of(@_QQclX5465737420504153534544) : ! fir.ref<!fir.char<1,11>>
80
+ % c11 = arith.constant 11 : index
81
+ % 11 :2 = hlfir.declare % 10 typeparams % c11 {fortran_attrs = #fir.var_attrs< parameter >, uniq_name = " _QQclX5465737420504153534544" } : (! fir.ref<!fir.char<1,11>>, index) -> (!fir.ref<!fir.char<1,11>>, !fir.ref<!fir.char<1,11>>)
82
+ % 12 = fir.convert % 11 #1 : (! fir.ref<!fir.char<1,11>>) -> !fir.ref<i8>
83
+ % 13 = fir.convert % c11 : (index) - > i64
84
+ % 14 = fir.call @_FortranAioOutputAscii(% 9 , % 12 , % 13 ) fastmath< contract> : (! fir.ref<i8>, !fir.ref<i8>, i64) -> i1
85
+ % 15 = fir.call @_FortranAioEndIoStatement(% 9 ) fastmath< contract> : (! fir.ref<i8>) -> i32
86
+ }
87
+ " fir.end" () : () - > ()
88
+ }
89
+ return
90
+ }
91
+ func.func private @_FortranAioBeginExternalListOutput(i32, ! fir.ref<i8>, i32) -> !fir.ref<i8> attributes {fir.io, fir.runtime}
92
+ fir.global linkonce @_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5 constant : ! fir.char<1,10> {
93
+ % 0 = fir.string_lit " dummy.cuf\00" (10 ) : ! fir.char<1,10>
94
+ fir.has_value % 0 : ! fir.char<1,10>
95
+ }
96
+ func.func private @_FortranAioOutputAscii(! fir.ref<i8>, !fir.ref<i8>, i64) -> i1 attributes {fir.io, fir.runtime}
97
+ fir.global linkonce @_QQclX5465737420504153534544 constant : ! fir.char<1,11> {
98
+ % 0 = fir.string_lit " Test PASSED" (11 ) : ! fir.char<1,11>
99
+ fir.has_value % 0 : ! fir.char<1,11>
100
+ }
101
+
102
+ // CHECK: fir.global linkonce @_QQclX5465737420504153534544 {data_attr = #cuf.cuda< constant>} constant : ! fir.char<1,11>
103
+
104
+ // CHECK- LABEL: gpu.module @cuda_device_mod [#nvvm.target ]
105
+ // CHECK: fir.global linkonce @_QQclX5465737420504153534544 {data_attr = #cuf.cuda< constant>} constant
106
+
107
+ // -----
108
+
109
+ func.func @_QPsub1() attributes {cuf.proc_attr = #cuf.cuda_proc< global>} {
110
+ % 6 = fir.alloca i32 {bindc_name = " i" , uniq_name = " _QFsub1Ei" }
111
+ % 7 :2 = hlfir.declare % 6 {uniq_name = " _QFsub1Ei" } : (! fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
112
+ % 12 = fir.load % 7 #0 : ! fir.ref<i32>
113
+ % c1_i32 = arith.constant 1 : i32
114
+ % 13 = arith.cmpi eq, % 12 , % c1_i32 : i32
115
+ fir.if % 13 {
116
+ % c6_i32 = arith.constant 6 : i32
117
+ % 14 = fir.address_of(@_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5) : ! fir.ref<!fir.char<1,10>>
118
+ % 15 = fir.convert % 14 : (! fir.ref<!fir.char<1,10>>) -> !fir.ref<i8>
119
+ % c3_i32 = arith.constant 3 : i32
120
+ % 16 = fir.call @_FortranAioBeginExternalListOutput(% c6_i32, % 15 , % c3_i32) fastmath< contract> : (i32, ! fir.ref<i8>, i32) -> !fir.ref<i8>
121
+ % 17 = fir.address_of(@_QQclX5465737420504153534544) : ! fir.ref<!fir.char<1,11>>
122
+ % c11 = arith.constant 11 : index
123
+ % 18 :2 = hlfir.declare % 17 typeparams % c11 {fortran_attrs = #fir.var_attrs< parameter >, uniq_name = " _QQclX5465737420504153534544" } : (! fir.ref<!fir.char<1,11>>, index) -> (!fir.ref<!fir.char<1,11>>, !fir.ref<!fir.char<1,11>>)
124
+ % 19 = fir.convert % 18 #1 : (! fir.ref<!fir.char<1,11>>) -> !fir.ref<i8>
125
+ % 20 = fir.convert % c11 : (index) - > i64
126
+ % 21 = fir.call @_FortranAioOutputAscii(% 16 , % 19 , % 20 ) fastmath< contract> : (! fir.ref<i8>, !fir.ref<i8>, i64) -> i1
127
+ % 22 = fir.call @_FortranAioEndIoStatement(% 16 ) fastmath< contract> : (! fir.ref<i8>) -> i32
128
+ }
129
+ return
130
+ }
131
+ func.func private @_FortranAioBeginExternalListOutput(i32, ! fir.ref<i8>, i32) -> !fir.ref<i8> attributes {fir.io, fir.runtime}
132
+ fir.global linkonce @_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5 constant : ! fir.char<1,10> {
133
+ % 0 = fir.string_lit " dummy.cuf\00" (10 ) : ! fir.char<1,10>
134
+ fir.has_value % 0 : ! fir.char<1,10>
135
+ }
136
+ func.func private @_FortranAioOutputAscii(! fir.ref<i8>, !fir.ref<i8>, i64) -> i1 attributes {fir.io, fir.runtime}
137
+ fir.global linkonce @_QQclX5465737420504153534544 constant : ! fir.char<1,11> {
138
+ % 0 = fir.string_lit " Test PASSED" (11 ) : ! fir.char<1,11>
139
+ fir.has_value % 0 : ! fir.char<1,11>
140
+ }
141
+ func.func private @_FortranAioEndIoStatement(! fir.ref<i8>) -> i32 attributes {fir.io, fir.runtime}
142
+
143
+ // CHECK: fir.global linkonce @_QQclX5465737420504153534544 {data_attr = #cuf.cuda< constant>} constant : ! fir.char<1,11>
144
+
145
+ // CHECK- LABEL: gpu.module @cuda_device_mod [#nvvm.target ]
146
+ // CHECK: fir.global linkonce @_QQclX5465737420504153534544 {data_attr = #cuf.cuda< constant>} constant
0 commit comments