Skip to content

Commit 3817350

Browse files
committed
Updates to output schemas, getelementptr pattern
1 parent 575b919 commit 3817350

5 files changed

Lines changed: 65 additions & 65 deletions

File tree

specification/under_development/output_schemas/Labeled.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ the type of output to be recorded.
5959
### Result
6060

6161
```llvm
62-
void @__quantum__rt__result_record_output(%Result*, i8*)
62+
void @__quantum__rt__result_record_output(ptr, ptr)
6363
```
6464

6565
Produces output records of the format `"OUTPUT\tRESULT\t0\tlabel"` or
@@ -70,7 +70,7 @@ the corresponding output record.
7070
### Boolean
7171

7272
```llvm
73-
void @__quantum__rt__bool_record_output(i1, i8*)
73+
void @__quantum__rt__bool_record_output(i1, ptr)
7474
```
7575

7676
Produces output records of the format `"OUTPUT\tBOOL\tfalse\tlabel"` or
@@ -81,7 +81,7 @@ record.
8181
### Integer
8282

8383
```llvm
84-
void @__quantum__rt__int_record_output(i64, i8*)
84+
void @__quantum__rt__int_record_output(i64, ptr)
8585
```
8686

8787
Produces output records of the format `"OUTPUT\tINT\tn\tlabel"` where `n` is the
@@ -92,7 +92,7 @@ which is included in the corresponding output record.
9292
### Double
9393

9494
```llvm
95-
void @__quantum__rt__double_record_output(double, i8*)
95+
void @__quantum__rt__double_record_output(double, ptr)
9696
```
9797

9898
Produces output records of the format `"OUTPUT\tDOUBLE\td\tlabel"` where `d` is
@@ -104,7 +104,7 @@ output record.
104104
### Tuple
105105

106106
```llvm
107-
void @__quantum__rt__tuple_record_output(i64, i8*)
107+
void @__quantum__rt__tuple_record_output(i64, ptr)
108108
```
109109

110110
Produces output records of the format `"OUTPUT\tTUPLE\tn\tlabel"` where `n` is
@@ -116,7 +116,7 @@ This record indicates the existence of a tuple and how many elements it has.
116116
### Array
117117

118118
```llvm
119-
void @__quantum__rt__array_record_output(i64, i8*)
119+
void @__quantum__rt__array_record_output(i64, ptr)
120120
```
121121

122122
Produces output records of the format `"OUTPUT\tARRAY\tn\tlabel"` where `n` is
@@ -134,7 +134,7 @@ function:
134134

135135
```llvm
136136
@0 = internal constant [3 x i8] c"0_i\00"
137-
call void @__quantum__rt__int_record_output(i64 %5, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @0, i32 0, i32 0))
137+
call void @__quantum__rt__int_record_output(i64 %5, ptr @0)
138138
ret void
139139
```
140140

@@ -173,11 +173,11 @@ the array items (shown with static result allocation):
173173
@2 = internal constant [5 x i8] c"2_1a\00"
174174
@3 = internal constant [7 x i8] c"3_1a0r\00"
175175
@4 = internal constant [7 x i8] c"4_1a1r\00"
176-
call void @__quantum__rt__array_record_output(i64 1, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @0, i32 0, i32 0))
177-
call void @__quantum__rt__result_record_output(%Result* %2, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @1, i32 0, i32 0))
178-
call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @2, i32 0, i32 0))
179-
call void @__quantum__rt__result_record_output(%Result* nonnull inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @3, i32 0, i32 0))
180-
call void @__quantum__rt__result_record_output(%Result* nonnull inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @4, i32 0, i32 0))
176+
call void @__quantum__rt__array_record_output(i64 1, ptr @0)
177+
call void @__quantum__rt__result_record_output(ptr %2, ptr @1)
178+
call void @__quantum__rt__array_record_output(i64 2, ptr @2)
179+
call void @__quantum__rt__result_record_output(ptr null, ptr @3)
180+
call void @__quantum__rt__result_record_output(ptr null, ptr @4)
181181
ret void
182182
```
183183

@@ -225,9 +225,9 @@ following output recording functions:
225225
@0 = internal constant [4 x i8] c"0_t\00"
226226
@1 = internal constant [6 x i8] c"1_t0r\00"
227227
@2 = internal constant [6 x i8] c"2_t1d\00"
228-
call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i32 0, i32 0))
229-
call void @__quantum__rt__result_record_output(%Result* %2, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i32 0, i32 0))
230-
call void @__quantum__rt__double_record_output(double %3, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @2, i32 0, i32 0))
228+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @0)
229+
call void @__quantum__rt__result_record_output(ptr %2, ptr @1)
230+
call void @__quantum__rt__double_record_output(double %3, ptr @2)
231231
ret void
232232
```
233233

@@ -273,13 +273,13 @@ containing an integer and result uses the following output recording functions:
273273
@4 = internal constant [6 x i8] c"4_a1t\00"
274274
@5 = internal constant [8 x i8] c"5_a1t0i\00"
275275
@6 = internal constant [8 x i8] c"6_a1t1r\00"
276-
call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i32 0, i32 0))
277-
call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i32 0, i32 0))
278-
call void @__quantum__rt__int_record_output(i64 %3, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0))
279-
call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @3, i32 0, i32 0))
280-
call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @4, i32 0, i32 0))
281-
call void @__quantum__rt__int_record_output(i64 %7, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0))
282-
call void @__quantum__rt__result_record_output(%Result* nonnull inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @6, i32 0, i32 0))
276+
call void @__quantum__rt__array_record_output(i64 2, ptr @0)
277+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @1)
278+
call void @__quantum__rt__int_record_output(i64 %3, ptr @2)
279+
call void @__quantum__rt__result_record_output(ptr null, ptr @3)
280+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @4)
281+
call void @__quantum__rt__int_record_output(i64 %7, ptr @5)
282+
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 1 to ptr), ptr @6)
283283
ret void
284284
```
285285

specification/under_development/output_schemas/Notes.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -122,25 +122,25 @@ END\t0
122122
123123
define void @main() #0 {
124124
entry:
125-
call void @__quantum__rt__initialize(i8* null)
126-
call void @__quantum__qis__h__body(%Qubit* null)
127-
call void @__quantum__qis__mz__body(%Qubit* null, %Result* null)
128-
call void @__quantum__qis__mz__body(%Qubit* null, %Result* inttoptr (i64 2 to %Result*))
129-
call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @0, i32 0, i32 0))
130-
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @1, i32 0, i32 0))
131-
call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @2, i32 0, i32 0))
132-
call void @__quantum__rt__array_record_output(i64 3, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @3, i32 0, i32 0))
133-
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 4 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @4, i32 0, i32 0))
134-
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 3 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @5, i32 0, i32 0))
135-
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 2 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @6, i32 0, i32 0))
125+
call void @__quantum__rt__initialize(ptr null)
126+
call void @__quantum__qis__h__body(ptr null)
127+
call void @__quantum__qis__mz__body(ptr null, ptr null)
128+
call void @__quantum__qis__mz__body(ptr null, ptr inttoptr (i64 2 to ptr))
129+
call void @__quantum__rt__array_record_output(i64 2, ptr @0)
130+
call void @__quantum__rt__result_record_output(ptr inttoptr (i64 1 to ptr), ptr @1)
131+
call void @__quantum__rt__result_record_output(ptr null, ptr @2)
132+
call void @__quantum__rt__array_record_output(i64 3, ptr @3)
133+
call void @__quantum__rt__result_record_output(ptr inttoptr (i64 4 to ptr), ptr @4)
134+
call void @__quantum__rt__result_record_output(ptr inttoptr (i64 3 to ptr), ptr @5)
135+
call void @__quantum__rt__result_record_output(ptr inttoptr (i64 2 to ptr), ptr @6)
136136
ret void
137137
}
138138
139-
declare void @__quantum__rt__initialize(i8*)
139+
declare void @__quantum__rt__initialize(ptr)
140140
141-
declare void @__quantum__qis__h__body(%Qubit*)
141+
declare void @__quantum__qis__h__body(ptr)
142142
143-
declare void @__quantum__qis__mz__body(%Qubit*, %Result* writeonly) #1
143+
declare void @__quantum__qis__mz__body(ptr, ptr writeonly) #1
144144
145145
declare void @__quantum__rt__array_record_output(i64, i8*)
146146

specification/under_development/output_schemas/Ordered.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,13 @@ of output to the relevant stream. Each of these functions follow the naming
187187
pattern `__quantum__rt__*_record_output` where the initial part indicates the
188188
type of output to be recorded.
189189

190-
Though all the output recording functions have an `i8*` parameter representing a
190+
Though all the output recording functions have an `ptr` parameter representing a
191191
label, its value is ignored by backends that use the ordered output schema.
192192

193193
### Result
194194

195195
```llvm
196-
void @__quantum__rt__result_record_output(%Result*, i8*)
196+
void @__quantum__rt__result_record_output(%Result*, ptr)
197197
```
198198

199199
Produces output records that are exactly `"OUTPUT\tRESULT\t0"` or
@@ -202,7 +202,7 @@ Produces output records that are exactly `"OUTPUT\tRESULT\t0"` or
202202
### Boolean
203203

204204
```llvm
205-
void @__quantum__rt__bool_record_output(i1, i8*)
205+
void @__quantum__rt__bool_record_output(i1, ptr)
206206
```
207207

208208
Produces output records that are exactly `"OUTPUT\tBOOL\tfalse"` or
@@ -211,7 +211,7 @@ Produces output records that are exactly `"OUTPUT\tBOOL\tfalse"` or
211211
### Integer
212212

213213
```llvm
214-
void @__quantum__rt__int_record_output(i64, i8*)
214+
void @__quantum__rt__int_record_output(i64, ptr)
215215
```
216216

217217
Produces output records of the format `"OUTPUT\tINT\tn"` where `n` is the string
@@ -220,7 +220,7 @@ representation of the integer value, such as `"OUTPUT\tINT\t42"`.
220220
### Double
221221

222222
```llvm
223-
void @__quantum__rt__double_record_output(double, i8*)
223+
void @__quantum__rt__double_record_output(double, ptr)
224224
```
225225

226226
Produces output records of the format `"OUTPUT\tDOUBLE\td"` where `d` is the
@@ -229,7 +229,7 @@ string representation of the double value, such as `"OUTPUT\tDOUBLE\t3.14159"`
229229
### Tuple
230230

231231
```llvm
232-
void @__quantum__rt__tuple_record_output(i64, i8*)
232+
void @__quantum__rt__tuple_record_output(i64, ptr)
233233
```
234234

235235
Produces output records of the format `"OUTPUT\tTUPLE\tn"` where `n` is the
@@ -239,7 +239,7 @@ record indicates the start of a tuple and how many elements it has.
239239
### Array
240240

241241
```llvm
242-
void @__quantum__rt__array_record_output(i64, i8*)
242+
void @__quantum__rt__array_record_output(i64, ptr)
243243
```
244244

245245
Produces output records of the format `"OUTPUT\tARRAY\tn"` where `n` is the
@@ -255,7 +255,7 @@ function:
255255

256256
```llvm
257257
@0 = internal constant [3 x i8] c"0_i\00"
258-
call void @__quantum__rt__int_record_output(i64 %5, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @0, i32 0, i32 0))
258+
call void @__quantum__rt__int_record_output(i64 %5, ptr @0)
259259
ret void
260260
```
261261

@@ -294,11 +294,11 @@ the array items (shown with static result allocation):
294294
@2 = internal constant [5 x i8] c"2_1a\00"
295295
@3 = internal constant [7 x i8] c"3_1a0r\00"
296296
@4 = internal constant [7 x i8] c"4_1a1r\00"
297-
call void @__quantum__rt__array_record_output(i64 1, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @0, i32 0, i32 0))
298-
call void @__quantum__rt__result_record_output(%Result* %2, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @1, i32 0, i32 0))
299-
call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @2, i32 0, i32 0))
300-
call void @__quantum__rt__result_record_output(%Result* nonnull inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @3, i32 0, i32 0))
301-
call void @__quantum__rt__result_record_output(%Result* nonnull inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @4, i32 0, i32 0))
297+
call void @__quantum__rt__array_record_output(i64 1, ptr @0)
298+
call void @__quantum__rt__result_record_output(ptr %2, ptr @1)
299+
call void @__quantum__rt__array_record_output(i64 2, ptr @2)
300+
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 0 to ptr), ptr @3)
301+
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 0 to ptr), ptr @4)
302302
ret void
303303
```
304304

@@ -346,9 +346,9 @@ following output recording functions:
346346
@0 = internal constant [4 x i8] c"0_t\00"
347347
@1 = internal constant [6 x i8] c"1_t0r\00"
348348
@2 = internal constant [6 x i8] c"2_t1d\00"
349-
call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i32 0, i32 0))
350-
call void @__quantum__rt__result_record_output(%Result* %2, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i32 0, i32 0))
351-
call void @__quantum__rt__double_record_output(double %3, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @2, i32 0, i32 0))
349+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @0)
350+
call void @__quantum__rt__result_record_output(ptr %2, ptr @1)
351+
call void @__quantum__rt__double_record_output(double %3, ptr @2)
352352
ret void
353353
```
354354

@@ -394,13 +394,13 @@ containing an integer and result uses the following output recording functions:
394394
@4 = internal constant [6 x i8] c"4_a1t\00"
395395
@5 = internal constant [8 x i8] c"5_a1t0i\00"
396396
@6 = internal constant [8 x i8] c"6_a1t1r\00"
397-
call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i32 0, i32 0))
398-
call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i32 0, i32 0))
399-
call void @__quantum__rt__int_record_output(i64 %3, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0))
400-
call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @3, i32 0, i32 0))
401-
call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @4, i32 0, i32 0))
402-
call void @__quantum__rt__int_record_output(i64 %7, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0))
403-
call void @__quantum__rt__result_record_output(%Result* nonnull inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @6, i32 0, i32 0))
397+
call void @__quantum__rt__array_record_output(i64 2, ptr @0)
398+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @1)
399+
call void @__quantum__rt__int_record_output(i64 %3, ptr @2)
400+
call void @__quantum__rt__result_record_output(ptr null, ptr @3)
401+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @4)
402+
call void @__quantum__rt__int_record_output(i64 %7, ptr @5)
403+
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 1 to ptr), ptr @6)
404404
ret void
405405
```
406406

specification/under_development/profiles/Adaptive_Profile.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ error:
350350
; qubits should be in a zero state at the end of the program
351351
ret i64 1
352352
exit:
353-
call void @__quantum__rt__result_record_output(ptr null, getelementptr inbounds ([2 x i8], ptr @0, i32 0, i32 0))
353+
call void @__quantum__rt__result_record_output(ptr null, ptr @0)
354354
ret i64 0
355355
}
356356
```
@@ -466,8 +466,8 @@ continue__4: ; preds = %continue__3, %then__4
466466
br label %exit
467467
468468
exit:
469-
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 4 to ptr), getelementptr inbounds ([5 x i8], ptr @0, i32 0, i32 0))
470-
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 5 to ptr), getelementptr inbounds ([5 x i8], ptr @1, i32 0, i32 0))
469+
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 4 to ptr), ptr @0)
470+
call void @__quantum__rt__result_record_output(ptr nonnull inttoptr (i64 5 to ptr), ptr @1)
471471
ret i64 0
472472
}
473473

specification/under_development/profiles/Base_Profile.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ measurements: ; preds = %body
141141
142142
output: ; preds = %measurements
143143
; calls to record the program output
144-
call void @__quantum__rt__tuple_record_output(i64 2, getelementptr inbounds ([3 x i8], ptr @2, i32 0, i32 0))
145-
call void @__quantum__rt__result_record_output(ptr null, getelementptr inbounds ([3 x i8], ptr @0, i32 0, i32 0))
146-
call void @__quantum__rt__result_record_output(ptr inttoptr (i64 1 to ptr), getelementptr inbounds ([3 x i8], ptr @1, i32 0, i32 0))
144+
call void @__quantum__rt__tuple_record_output(i64 2, ptr @2)
145+
call void @__quantum__rt__result_record_output(ptr null, ptr @0)
146+
call void @__quantum__rt__result_record_output(ptr inttoptr (i64 1 to ptr), ptr @1)
147147
148148
ret i64 0
149149
}

0 commit comments

Comments
 (0)