Skip to content

Commit a240f12

Browse files
committed
Unconditionally use initialize function
1 parent d2234d7 commit a240f12

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+4265
-3871
lines changed

source/compiler/qsc/src/codegen/tests.rs

Lines changed: 84 additions & 0 deletions
Large diffs are not rendered by default.

source/compiler/qsc/src/interpret/tests.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,12 +919,15 @@ mod given_interpreter {
919919
920920
define i64 @ENTRYPOINT__main() #0 {
921921
block_0:
922+
call void @__quantum__rt__initialize(i8* null)
922923
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
923924
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
924925
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
925926
ret i64 0
926927
}
927928
929+
declare void @__quantum__rt__initialize(i8*)
930+
928931
declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1
929932
930933
declare void @__quantum__rt__result_record_output(%Result*, i8*)
@@ -983,6 +986,7 @@ mod given_interpreter {
983986
984987
define i64 @ENTRYPOINT__main() #0 {
985988
block_0:
989+
call void @__quantum__rt__initialize(i8* null)
986990
call void @__quantum__qis__rz__body(double 2.0, %Qubit* inttoptr (i64 0 to %Qubit*))
987991
call void @__quantum__qis__rz__body(double 0.0, %Qubit* inttoptr (i64 0 to %Qubit*))
988992
call void @__quantum__qis__rz__body(double 1.0, %Qubit* inttoptr (i64 0 to %Qubit*))
@@ -991,6 +995,8 @@ mod given_interpreter {
991995
ret i64 0
992996
}
993997
998+
declare void @__quantum__rt__initialize(i8*)
999+
9941000
declare void @__quantum__qis__rz__body(double, %Qubit*)
9951001
9961002
declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1
@@ -1045,6 +1051,7 @@ mod given_interpreter {
10451051
10461052
define i64 @ENTRYPOINT__main() #0 {
10471053
block_0:
1054+
call void @__quantum__rt__initialize(i8* null)
10481055
call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
10491056
%var_0 = call i1 @__quantum__rt__read_result(%Result* inttoptr (i64 0 to %Result*))
10501057
%var_2 = call i1 @__quantum__rt__read_result(%Result* inttoptr (i64 0 to %Result*))
@@ -1057,6 +1064,8 @@ mod given_interpreter {
10571064
ret i64 0
10581065
}
10591066
1067+
declare void @__quantum__rt__initialize(i8*)
1068+
10601069
declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1
10611070
10621071
declare i1 @__quantum__rt__read_result(%Result*)
@@ -1125,12 +1134,15 @@ mod given_interpreter {
11251134
11261135
define i64 @ENTRYPOINT__main() #0 {
11271136
block_0:
1137+
call void @__quantum__rt__initialize(i8* null)
11281138
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
11291139
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
11301140
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
11311141
ret i64 0
11321142
}
11331143
1144+
declare void @__quantum__rt__initialize(i8*)
1145+
11341146
declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1
11351147
11361148
declare void @__quantum__rt__result_record_output(%Result*, i8*)
@@ -1172,12 +1184,15 @@ mod given_interpreter {
11721184
11731185
define i64 @ENTRYPOINT__main() #0 {
11741186
block_0:
1187+
call void @__quantum__rt__initialize(i8* null)
11751188
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
11761189
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
11771190
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
11781191
ret i64 0
11791192
}
11801193
1194+
declare void @__quantum__rt__initialize(i8*)
1195+
11811196
declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1
11821197
11831198
declare void @__quantum__rt__result_record_output(%Result*, i8*)
@@ -1251,12 +1266,15 @@ mod given_interpreter {
12511266
12521267
define i64 @ENTRYPOINT__main() #0 {
12531268
block_0:
1269+
call void @__quantum__rt__initialize(i8* null)
12541270
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
12551271
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
12561272
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
12571273
ret i64 0
12581274
}
12591275
1276+
declare void @__quantum__rt__initialize(i8*)
1277+
12601278
declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1
12611279
12621280
declare void @__quantum__rt__result_record_output(%Result*, i8*)
@@ -1310,12 +1328,15 @@ mod given_interpreter {
13101328
13111329
define i64 @ENTRYPOINT__main() #0 {
13121330
block_0:
1331+
call void @__quantum__rt__initialize(i8* null)
13131332
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
13141333
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
13151334
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
13161335
ret i64 0
13171336
}
13181337
1338+
declare void @__quantum__rt__initialize(i8*)
1339+
13191340
declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1
13201341
13211342
declare void @__quantum__rt__result_record_output(%Result*, i8*)
@@ -1368,12 +1389,15 @@ mod given_interpreter {
13681389
13691390
define i64 @ENTRYPOINT__main() #0 {
13701391
block_0:
1392+
call void @__quantum__rt__initialize(i8* null)
13711393
call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
13721394
%var_0 = call i1 @check_result(%Result* inttoptr (i64 0 to %Result*))
13731395
call void @__quantum__rt__bool_record_output(i1 %var_0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
13741396
ret i64 0
13751397
}
13761398
1399+
declare void @__quantum__rt__initialize(i8*)
1400+
13771401
declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1
13781402
13791403
declare i1 @check_result(%Result*)

source/compiler/qsc_partial_eval/src/lib.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use qsc_rca::{
4646
},
4747
};
4848
use qsc_rir::{
49-
builder,
49+
builder::{self, initialize_decl},
5050
rir::{
5151
self, Callable, CallableId, CallableType, ConditionCode, FcmpConditionCode, Instruction,
5252
Literal, Operand, Program, VariableId,
@@ -232,6 +232,19 @@ impl<'a> PartialEvaluator<'a> {
232232
program.callables.insert(entry_point_id, entry_point);
233233
program.entry = entry_point_id;
234234

235+
// Add the required call to the initialization function.
236+
let init_func = initialize_decl();
237+
let init_id = resource_manager.next_callable();
238+
program.callables.insert(init_id, init_func);
239+
program
240+
.get_block_mut(entry_block_id)
241+
.0
242+
.push(Instruction::Call(
243+
init_id,
244+
vec![Operand::Literal(Literal::Pointer)],
245+
None,
246+
));
247+
235248
// Initialize the evaluation context and create a new partial evaluator.
236249
let context = EvaluationContext::new(
237250
package_id.unwrap_or_else(|| {

0 commit comments

Comments
 (0)