diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll index 47e4d5f4f0cc..8e527c7e6947 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll @@ -123,7 +123,7 @@ class IteratorCrementNonMemberOperator extends Operator { } private class IteratorCrementNonMemberOperatorModel extends IteratorCrementNonMemberOperator, - DataFlowFunction + DataFlowFunction, SideEffectFunction, AliasFunction { override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { input = getIteratorArgumentInput(this, 0) and @@ -131,6 +131,24 @@ private class IteratorCrementNonMemberOperatorModel extends IteratorCrementNonMe or input.isParameterDeref(0) and output.isReturnValueDeref() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + i = 0 and buffer = false + } + + override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) { + // See the comment on `IteratorCrementMemberOperatorModel::hasSpecificWriteSideEffect` + // for an explanation of these values. + i = 0 and buffer = false and mustWrite = false + } + + override predicate parameterNeverEscapes(int index) { none() } + + override predicate parameterEscapesOnlyViaReturn(int index) { index = 0 } } /** @@ -146,7 +164,7 @@ class IteratorCrementMemberOperator extends MemberFunction { } private class IteratorCrementMemberOperatorModel extends IteratorCrementMemberOperator, - DataFlowFunction, TaintFunction + DataFlowFunction, TaintFunction, SideEffectFunction, AliasFunction { override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { input.isQualifierAddress() and @@ -163,6 +181,28 @@ private class IteratorCrementMemberOperatorModel extends IteratorCrementMemberOp input.isQualifierObject() and output.isReturnValueDeref() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + i = -1 and buffer = false + } + + override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) { + // We have two choices here: either `buffer` must be `true` or `mustWrite` + // must be `false` to ensure that the IR alias analysis doesn't think that + // `it++` completely override the value of the iterator. + // We choose `mustWrite` must be `false`. In that case, the value of + // `buffer` isn't super important (it just decides which kind of read side + // effect will be emitted). + i = -1 and buffer = false and mustWrite = false + } + + override predicate parameterNeverEscapes(int index) { index = -1 } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } } /** @@ -332,7 +372,7 @@ class IteratorAssignArithmeticOperator extends Function { * non-member and member versions, use `IteratorPointerDereferenceOperator`. */ class IteratorPointerDereferenceMemberOperator extends MemberFunction, TaintFunction, - IteratorReferenceFunction + IteratorReferenceFunction, AliasFunction, SideEffectFunction { IteratorPointerDereferenceMemberOperator() { this.getClassAndName("operator*") instanceof Iterator @@ -345,6 +385,18 @@ class IteratorPointerDereferenceMemberOperator extends MemberFunction, TaintFunc input.isReturnValueDeref() and output.isQualifierObject() } + + override predicate parameterNeverEscapes(int index) { index = -1 } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + i = -1 and buffer = false + } } /** @@ -361,7 +413,7 @@ class IteratorPointerDereferenceNonMemberOperator extends Operator, IteratorRefe } private class IteratorPointerDereferenceNonMemberOperatorModel extends IteratorPointerDereferenceNonMemberOperator, - TaintFunction + TaintFunction, AliasFunction, SideEffectFunction { override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { input = getIteratorArgumentInput(this, 0) and @@ -370,6 +422,18 @@ private class IteratorPointerDereferenceNonMemberOperatorModel extends IteratorP input.isReturnValueDeref() and output.isParameterDeref(0) } + + override predicate parameterNeverEscapes(int index) { index = 0 } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + i = 0 and buffer = false + } } /** @@ -420,6 +484,71 @@ class IteratorAssignmentMemberOperator extends MemberFunction { } } +/** + * A member `operator==` or `operator!=` function for an iterator type. + * + * Note that this class _only_ matches member functions. To find both + * non-member and member versions, use `IteratorLogicalOperator`. + */ +class IteratorLogicalMemberOperator extends MemberFunction { + IteratorLogicalMemberOperator() { + this.getClassAndName(["operator!=", "operator=="]) instanceof Iterator + } +} + +private class IteratorLogicalMemberOperatorModel extends IteratorLogicalMemberOperator, + AliasFunction, SideEffectFunction +{ + override predicate parameterNeverEscapes(int index) { index = [-1, 0] } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + i = -1 and buffer = false + } +} + +/** + * A member `operator==` or `operator!=` function for an iterator type. + * + * Note that this class _only_ matches non-member functions. To find both + * non-member and member versions, use `IteratorLogicalOperator`. + */ +class IteratorLogicalNonMemberOperator extends Function { + IteratorLogicalNonMemberOperator() { + this.hasName(["operator!=", "operator=="]) and + exists(getIteratorArgumentInput(this, 0)) and + exists(getIteratorArgumentInput(this, 1)) + } +} + +private class IteratorLogicalNonMemberOperatorModel extends IteratorLogicalNonMemberOperator, + AliasFunction, SideEffectFunction +{ + override predicate parameterNeverEscapes(int index) { index = [0, 1] } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } +} + +/** + * A (member or non-member) `operator==` or `operator!=` function for an iterator type. + */ +class IteratorLogicalOperator extends Function { + IteratorLogicalOperator() { + this instanceof IteratorLogicalNonMemberOperator + or + this instanceof IteratorLogicalMemberOperator + } +} + /** * An `operator=` member function of an iterator class that is not a copy or move assignment * operator. @@ -428,12 +557,26 @@ class IteratorAssignmentMemberOperator extends MemberFunction { * `operator*` and use their own `operator=` to assign to the container. */ private class IteratorAssignmentMemberOperatorModel extends IteratorAssignmentMemberOperator, - TaintFunction + TaintFunction, SideEffectFunction, AliasFunction { override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { input.isParameterDeref(0) and output.isQualifierObject() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) { + // See the comment on `IteratorCrementMemberOperatorModel::hasSpecificWriteSideEffect` + // for an explanation of these values. + i = -1 and buffer = false and mustWrite = false + } + + override predicate parameterNeverEscapes(int index) { index = 0 } + + override predicate parameterEscapesOnlyViaReturn(int index) { index = -1 } } /** diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 39eccf0139f3..4c183b525c5e 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -7351,8 +7351,8 @@ ir.cpp: #-----| Goto -> Block 1 # 1127| Block 1 -# 1127| m1127_19(iterator) = Phi : from 0:m1127_12, from 4:m1127_50 -# 1127| m1127_20(unknown) = Phi : from 0:~m1126_4, from 4:~m1127_47 +# 1127| m1127_19(iterator) = Phi : from 0:m1127_12, from 4:m1127_44 +# 1127| m1127_20(unknown) = Phi : from 0:~m1126_4, from 4:~m1127_27 # 1127| r1127_21(glval>) = VariableAddress[(__begin)] : #-----| r0_5(glval>) = Convert : r1127_21 # 1127| r1127_22(glval) = FunctionAddress[operator!=] : @@ -7370,26 +7370,22 @@ ir.cpp: # 1127| m1127_29(iterator) = Chi : total:m0_7, partial:m1127_28 #-----| r0_11(iterator) = Load[#temp0:0] : &:r0_6, m1127_29 # 1127| r1127_30(bool) = Call[operator!=] : func:r1127_22, this:r0_5, 0:r0_11 -# 1127| m1127_31(unknown) = ^CallSideEffect : ~m1127_27 -# 1127| m1127_32(unknown) = Chi : total:m1127_27, partial:m1127_31 #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1127_19 -# 1127| v1127_33(void) = ConditionalBranch : r1127_30 +# 1127| v1127_31(void) = ConditionalBranch : r1127_30 #-----| False -> Block 5 #-----| True -> Block 2 # 1127| Block 2 -# 1127| r1127_34(glval) = VariableAddress[e] : -# 1127| r1127_35(glval>) = VariableAddress[(__begin)] : -#-----| r0_13(glval>) = Convert : r1127_35 -# 1127| r1127_36(glval) = FunctionAddress[operator*] : -# 1127| r1127_37(int &) = Call[operator*] : func:r1127_36, this:r0_13 -# 1127| m1127_38(unknown) = ^CallSideEffect : ~m1127_32 -# 1127| m1127_39(unknown) = Chi : total:m1127_32, partial:m1127_38 +# 1127| r1127_32(glval) = VariableAddress[e] : +# 1127| r1127_33(glval>) = VariableAddress[(__begin)] : +#-----| r0_13(glval>) = Convert : r1127_33 +# 1127| r1127_34(glval) = FunctionAddress[operator*] : +# 1127| r1127_35(int &) = Call[operator*] : func:r1127_34, this:r0_13 #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1127_19 -# 1127| r1127_40(int) = Load[?] : &:r1127_37, ~m1127_39 -# 1127| m1127_41(int) = Store[e] : &:r1127_34, r1127_40 +# 1127| r1127_36(int) = Load[?] : &:r1127_35, ~m1127_27 +# 1127| m1127_37(int) = Store[e] : &:r1127_32, r1127_36 # 1128| r1128_1(glval) = VariableAddress[e] : -# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_41 +# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_37 # 1128| r1128_3(int) = Constant[0] : # 1128| r1128_4(bool) = CompareGT : r1128_2, r1128_3 # 1128| v1128_5(void) = ConditionalBranch : r1128_4 @@ -7401,16 +7397,14 @@ ir.cpp: #-----| Goto -> Block 4 # 1127| Block 4 -# 1127| v1127_42(void) = NoOp : -# 1127| r1127_43(glval>) = VariableAddress[(__begin)] : -# 1127| r1127_44(glval) = FunctionAddress[operator++] : -# 1127| r1127_45(iterator &) = Call[operator++] : func:r1127_44, this:r1127_43 -# 1127| m1127_46(unknown) = ^CallSideEffect : ~m1127_39 -# 1127| m1127_47(unknown) = Chi : total:m1127_39, partial:m1127_46 -# 1127| v1127_48(void) = ^IndirectReadSideEffect[-1] : &:r1127_43, m1127_19 -# 1127| m1127_49(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_43 -# 1127| m1127_50(iterator) = Chi : total:m1127_19, partial:m1127_49 -# 1127| r1127_51(glval>) = CopyValue : r1127_45 +# 1127| v1127_38(void) = NoOp : +# 1127| r1127_39(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_40(glval) = FunctionAddress[operator++] : +# 1127| r1127_41(iterator &) = Call[operator++] : func:r1127_40, this:r1127_39 +# 1127| v1127_42(void) = ^IndirectReadSideEffect[-1] : &:r1127_39, m1127_19 +# 1127| m1127_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_39 +# 1127| m1127_44(iterator) = Chi : total:m1127_19, partial:m1127_43 +# 1127| r1127_45(glval>) = CopyValue : r1127_41 #-----| Goto (back edge) -> Block 1 # 1133| Block 5 @@ -7439,8 +7433,8 @@ ir.cpp: #-----| Goto -> Block 6 # 1133| Block 6 -# 1133| m1133_19(iterator) = Phi : from 5:m1133_12, from 7:m1133_41 -# 1133| m1133_20(unknown) = Phi : from 5:~m1127_32, from 7:~m1133_38 +# 1133| m1133_19(iterator) = Phi : from 5:m1133_12, from 7:m1133_37 +# 1133| m1133_20(unknown) = Phi : from 5:~m1127_27, from 7:~m1133_27 # 1133| r1133_21(glval>) = VariableAddress[(__begin)] : #-----| r0_19(glval>) = Convert : r1133_21 # 1133| r1133_22(glval) = FunctionAddress[operator!=] : @@ -7458,41 +7452,35 @@ ir.cpp: # 1133| m1133_29(iterator) = Chi : total:m0_21, partial:m1133_28 #-----| r0_25(iterator) = Load[#temp0:0] : &:r0_20, m1133_29 # 1133| r1133_30(bool) = Call[operator!=] : func:r1133_22, this:r0_19, 0:r0_25 -# 1133| m1133_31(unknown) = ^CallSideEffect : ~m1133_27 -# 1133| m1133_32(unknown) = Chi : total:m1133_27, partial:m1133_31 #-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m1133_19 -# 1133| v1133_33(void) = ConditionalBranch : r1133_30 +# 1133| v1133_31(void) = ConditionalBranch : r1133_30 #-----| False -> Block 10 #-----| True -> Block 8 # 1133| Block 7 -# 1133| r1133_34(glval>) = VariableAddress[(__begin)] : -# 1133| r1133_35(glval) = FunctionAddress[operator++] : -# 1133| r1133_36(iterator &) = Call[operator++] : func:r1133_35, this:r1133_34 -# 1133| m1133_37(unknown) = ^CallSideEffect : ~m1133_48 -# 1133| m1133_38(unknown) = Chi : total:m1133_48, partial:m1133_37 -# 1133| v1133_39(void) = ^IndirectReadSideEffect[-1] : &:r1133_34, m1133_19 -# 1133| m1133_40(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_34 -# 1133| m1133_41(iterator) = Chi : total:m1133_19, partial:m1133_40 -# 1133| r1133_42(glval>) = CopyValue : r1133_36 +# 1133| r1133_32(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_33(glval) = FunctionAddress[operator++] : +# 1133| r1133_34(iterator &) = Call[operator++] : func:r1133_33, this:r1133_32 +# 1133| v1133_35(void) = ^IndirectReadSideEffect[-1] : &:r1133_32, m1133_19 +# 1133| m1133_36(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_32 +# 1133| m1133_37(iterator) = Chi : total:m1133_19, partial:m1133_36 +# 1133| r1133_38(glval>) = CopyValue : r1133_34 #-----| Goto (back edge) -> Block 6 # 1133| Block 8 -# 1133| r1133_43(glval) = VariableAddress[e] : -# 1133| r1133_44(glval>) = VariableAddress[(__begin)] : -#-----| r0_27(glval>) = Convert : r1133_44 -# 1133| r1133_45(glval) = FunctionAddress[operator*] : -# 1133| r1133_46(int &) = Call[operator*] : func:r1133_45, this:r0_27 -# 1133| m1133_47(unknown) = ^CallSideEffect : ~m1133_32 -# 1133| m1133_48(unknown) = Chi : total:m1133_32, partial:m1133_47 +# 1133| r1133_39(glval) = VariableAddress[e] : +# 1133| r1133_40(glval>) = VariableAddress[(__begin)] : +#-----| r0_27(glval>) = Convert : r1133_40 +# 1133| r1133_41(glval) = FunctionAddress[operator*] : +# 1133| r1133_42(int &) = Call[operator*] : func:r1133_41, this:r0_27 #-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m1133_19 -# 1133| r1133_49(glval) = CopyValue : r1133_46 -# 1133| r1133_50(glval) = Convert : r1133_49 -# 1133| r1133_51(int &) = CopyValue : r1133_50 -# 1133| m1133_52(int &) = Store[e] : &:r1133_43, r1133_51 +# 1133| r1133_43(glval) = CopyValue : r1133_42 +# 1133| r1133_44(glval) = Convert : r1133_43 +# 1133| r1133_45(int &) = CopyValue : r1133_44 +# 1133| m1133_46(int &) = Store[e] : &:r1133_39, r1133_45 # 1134| r1134_1(glval) = VariableAddress[e] : -# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_52 -# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_48 +# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_46 +# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_27 # 1134| r1134_4(int) = Constant[5] : # 1134| r1134_5(bool) = CompareLT : r1134_3, r1134_4 # 1134| v1134_6(void) = ConditionalBranch : r1134_5 @@ -7504,13 +7492,12 @@ ir.cpp: #-----| Goto -> Block 10 # 1137| Block 10 -# 1137| m1137_1(unknown) = Phi : from 6:~m1133_32, from 9:~m1133_48 -# 1137| v1137_2(void) = NoOp : -# 1138| v1138_1(void) = NoOp : -# 1126| v1126_9(void) = ReturnIndirection[v] : &:r1126_7, m1126_8 -# 1126| v1126_10(void) = ReturnVoid : -# 1126| v1126_11(void) = AliasedUse : ~m1137_1 -# 1126| v1126_12(void) = ExitFunction : +# 1137| v1137_1(void) = NoOp : +# 1138| v1138_1(void) = NoOp : +# 1126| v1126_9(void) = ReturnIndirection[v] : &:r1126_7, m1126_8 +# 1126| v1126_10(void) = ReturnVoid : +# 1126| v1126_11(void) = AliasedUse : ~m1133_27 +# 1126| v1126_12(void) = ExitFunction : # 1157| int AsmStmt(int) # 1157| Block 0 @@ -13555,8 +13542,8 @@ ir.cpp: #-----| Goto -> Block 8 # 2215| Block 8 -# 2215| m2215_30(iterator) = Phi : from 7:m2215_23, from 9:m2215_68 -# 2215| m2215_31(unknown) = Phi : from 7:~m2215_11, from 9:~m2215_65 +# 2215| m2215_30(iterator) = Phi : from 7:m2215_23, from 9:m2215_62 +# 2215| m2215_31(unknown) = Phi : from 7:~m2215_11, from 9:~m2215_53 # 2215| r2215_32(glval>) = VariableAddress[(__begin)] : #-----| r0_7(glval>) = Convert : r2215_32 # 2215| r2215_33(glval) = FunctionAddress[operator!=] : @@ -13574,50 +13561,44 @@ ir.cpp: # 2215| m2215_40(iterator) = Chi : total:m0_9, partial:m2215_39 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2215_40 # 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_7, 0:r0_13 -# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38 -# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42 #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2215_30 -# 2215| v2215_44(void) = ConditionalBranch : r2215_41 +# 2215| v2215_42(void) = ConditionalBranch : r2215_41 #-----| False -> Block 10 #-----| True -> Block 9 # 2215| Block 9 -# 2215| r2215_45(glval) = VariableAddress[y] : -# 2215| r2215_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2215_46 -# 2215| r2215_47(glval) = FunctionAddress[operator*] : -# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_15 -# 2215| m2215_49(unknown) = ^CallSideEffect : ~m2215_43 -# 2215| m2215_50(unknown) = Chi : total:m2215_43, partial:m2215_49 +# 2215| r2215_43(glval) = VariableAddress[y] : +# 2215| r2215_44(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2215_44 +# 2215| r2215_45(glval) = FunctionAddress[operator*] : +# 2215| r2215_46(ClassWithDestructor &) = Call[operator*] : func:r2215_45, this:r0_15 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2215_30 -# 2215| r2215_51(ClassWithDestructor) = Load[?] : &:r2215_48, ~m2215_50 -# 2215| m2215_52(ClassWithDestructor) = Store[y] : &:r2215_45, r2215_51 +# 2215| r2215_47(ClassWithDestructor) = Load[?] : &:r2215_46, ~m2215_38 +# 2215| m2215_48(ClassWithDestructor) = Store[y] : &:r2215_43, r2215_47 # 2216| r2216_1(glval) = VariableAddress[y] : # 2216| r2216_2(glval) = FunctionAddress[set_x] : # 2216| r2216_3(char) = Constant[97] : # 2216| v2216_4(void) = Call[set_x] : func:r2216_2, this:r2216_1, 0:r2216_3 -# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_50 -# 2216| m2216_6(unknown) = Chi : total:m2215_50, partial:m2216_5 -# 2216| v2216_7(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, m2215_52 +# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_38 +# 2216| m2216_6(unknown) = Chi : total:m2215_38, partial:m2216_5 +# 2216| v2216_7(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, m2215_48 # 2216| m2216_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2216| m2216_9(ClassWithDestructor) = Chi : total:m2215_52, partial:m2216_8 -# 2215| r2215_53(glval) = VariableAddress[y] : -# 2215| r2215_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2215| v2215_55(void) = Call[~ClassWithDestructor] : func:r2215_54, this:r2215_53 -# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2216_6 -# 2215| m2215_57(unknown) = Chi : total:m2216_6, partial:m2215_56 -# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2216_9 -# 2215| m2215_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53 -# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2216_9, partial:m2215_59 -# 2215| r2215_61(glval>) = VariableAddress[(__begin)] : -# 2215| r2215_62(glval) = FunctionAddress[operator++] : -# 2215| r2215_63(iterator &) = Call[operator++] : func:r2215_62, this:r2215_61 -# 2215| m2215_64(unknown) = ^CallSideEffect : ~m2215_57 -# 2215| m2215_65(unknown) = Chi : total:m2215_57, partial:m2215_64 -# 2215| v2215_66(void) = ^IndirectReadSideEffect[-1] : &:r2215_61, m2215_30 -# 2215| m2215_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_61 -# 2215| m2215_68(iterator) = Chi : total:m2215_30, partial:m2215_67 -# 2215| r2215_69(glval>) = CopyValue : r2215_63 +# 2216| m2216_9(ClassWithDestructor) = Chi : total:m2215_48, partial:m2216_8 +# 2215| r2215_49(glval) = VariableAddress[y] : +# 2215| r2215_50(glval) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_51(void) = Call[~ClassWithDestructor] : func:r2215_50, this:r2215_49 +# 2215| m2215_52(unknown) = ^CallSideEffect : ~m2216_6 +# 2215| m2215_53(unknown) = Chi : total:m2216_6, partial:m2215_52 +# 2215| v2215_54(void) = ^IndirectReadSideEffect[-1] : &:r2215_49, m2216_9 +# 2215| m2215_55(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_49 +# 2215| m2215_56(ClassWithDestructor) = Chi : total:m2216_9, partial:m2215_55 +# 2215| r2215_57(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_58(glval) = FunctionAddress[operator++] : +# 2215| r2215_59(iterator &) = Call[operator++] : func:r2215_58, this:r2215_57 +# 2215| v2215_60(void) = ^IndirectReadSideEffect[-1] : &:r2215_57, m2215_30 +# 2215| m2215_61(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_57 +# 2215| m2215_62(iterator) = Chi : total:m2215_30, partial:m2215_61 +# 2215| r2215_63(glval>) = CopyValue : r2215_59 #-----| Goto (back edge) -> Block 8 # 2218| Block 10 @@ -13630,8 +13611,8 @@ ir.cpp: # 2218| m2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 # 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, m2218_7 # 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8 -# 2218| m2218_10(unknown) = ^CallSideEffect : ~m2215_43 -# 2218| m2218_11(unknown) = Chi : total:m2215_43, partial:m2218_10 +# 2218| m2218_10(unknown) = ^CallSideEffect : ~m2215_38 +# 2218| m2218_11(unknown) = Chi : total:m2215_38, partial:m2218_10 # 2218| m2218_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 # 2218| m2218_13(vector) = Chi : total:m2218_2, partial:m2218_12 # 2218| r2218_14(glval &>) = VariableAddress[(__range)] : @@ -13659,8 +13640,8 @@ ir.cpp: #-----| Goto -> Block 11 # 2218| Block 11 -# 2218| m2218_30(iterator) = Phi : from 10:m2218_23, from 14:m2218_84 -# 2218| m2218_31(unknown) = Phi : from 10:~m2218_11, from 14:~m2218_81 +# 2218| m2218_30(iterator) = Phi : from 10:m2218_23, from 14:m2218_78 +# 2218| m2218_31(unknown) = Phi : from 10:~m2218_11, from 14:~m2218_69 # 2218| r2218_32(glval>) = VariableAddress[(__begin)] : #-----| r0_23(glval>) = Convert : r2218_32 # 2218| r2218_33(glval) = FunctionAddress[operator!=] : @@ -13678,33 +13659,29 @@ ir.cpp: # 2218| m2218_40(iterator) = Chi : total:m0_25, partial:m2218_39 #-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, m2218_40 # 2218| r2218_41(bool) = Call[operator!=] : func:r2218_33, this:r0_23, 0:r0_29 -# 2218| m2218_42(unknown) = ^CallSideEffect : ~m2218_38 -# 2218| m2218_43(unknown) = Chi : total:m2218_38, partial:m2218_42 #-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2218_30 -# 2218| v2218_44(void) = ConditionalBranch : r2218_41 +# 2218| v2218_42(void) = ConditionalBranch : r2218_41 #-----| False -> Block 15 #-----| True -> Block 12 # 2218| Block 12 -# 2218| r2218_45(glval) = VariableAddress[y] : -# 2218| r2218_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_31(glval>) = Convert : r2218_46 -# 2218| r2218_47(glval) = FunctionAddress[operator*] : -# 2218| r2218_48(ClassWithDestructor &) = Call[operator*] : func:r2218_47, this:r0_31 -# 2218| m2218_49(unknown) = ^CallSideEffect : ~m2218_43 -# 2218| m2218_50(unknown) = Chi : total:m2218_43, partial:m2218_49 +# 2218| r2218_43(glval) = VariableAddress[y] : +# 2218| r2218_44(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2218_44 +# 2218| r2218_45(glval) = FunctionAddress[operator*] : +# 2218| r2218_46(ClassWithDestructor &) = Call[operator*] : func:r2218_45, this:r0_31 #-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2218_30 -# 2218| r2218_51(ClassWithDestructor) = Load[?] : &:r2218_48, ~m2218_50 -# 2218| m2218_52(ClassWithDestructor) = Store[y] : &:r2218_45, r2218_51 +# 2218| r2218_47(ClassWithDestructor) = Load[?] : &:r2218_46, ~m2218_38 +# 2218| m2218_48(ClassWithDestructor) = Store[y] : &:r2218_43, r2218_47 # 2219| r2219_1(glval) = VariableAddress[y] : # 2219| r2219_2(glval) = FunctionAddress[set_x] : # 2219| r2219_3(char) = Constant[97] : # 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3 -# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_50 -# 2219| m2219_6(unknown) = Chi : total:m2218_50, partial:m2219_5 -# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_52 +# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_38 +# 2219| m2219_6(unknown) = Chi : total:m2218_38, partial:m2219_5 +# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_48 # 2219| m2219_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_52, partial:m2219_8 +# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_48, partial:m2219_8 # 2220| r2220_1(glval) = VariableAddress[y] : # 2220| r2220_2(glval) = FunctionAddress[get_x] : # 2220| r2220_3(char) = Call[get_x] : func:r2220_2, this:r2220_1 @@ -13722,50 +13699,48 @@ ir.cpp: # 2221| Block 13 # 2221| v2221_1(void) = NoOp : -# 2218| r2218_53(glval) = VariableAddress[y] : -# 2218| r2218_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_55(void) = Call[~ClassWithDestructor] : func:r2218_54, this:r2218_53 -# 2218| m2218_56(unknown) = ^CallSideEffect : ~m2220_5 -# 2218| m2218_57(unknown) = Chi : total:m2220_5, partial:m2218_56 -# 2218| v2218_58(void) = ^IndirectReadSideEffect[-1] : &:r2218_53, m2220_8 -# 2218| m2218_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_53 -# 2218| m2218_60(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_59 -# 2218| r2218_61(glval>) = VariableAddress[ys] : -# 2218| r2218_62(glval) = FunctionAddress[~vector] : -# 2218| v2218_63(void) = Call[~vector] : func:r2218_62, this:r2218_61 -# 2218| m2218_64(unknown) = ^CallSideEffect : ~m2218_57 -# 2218| m2218_65(unknown) = Chi : total:m2218_57, partial:m2218_64 -# 2218| v2218_66(void) = ^IndirectReadSideEffect[-1] : &:r2218_61, m2218_13 -# 2218| m2218_67(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_61 -# 2218| m2218_68(vector) = Chi : total:m2218_13, partial:m2218_67 +# 2218| r2218_49(glval) = VariableAddress[y] : +# 2218| r2218_50(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_51(void) = Call[~ClassWithDestructor] : func:r2218_50, this:r2218_49 +# 2218| m2218_52(unknown) = ^CallSideEffect : ~m2220_5 +# 2218| m2218_53(unknown) = Chi : total:m2220_5, partial:m2218_52 +# 2218| v2218_54(void) = ^IndirectReadSideEffect[-1] : &:r2218_49, m2220_8 +# 2218| m2218_55(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_49 +# 2218| m2218_56(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_55 +# 2218| r2218_57(glval>) = VariableAddress[ys] : +# 2218| r2218_58(glval) = FunctionAddress[~vector] : +# 2218| v2218_59(void) = Call[~vector] : func:r2218_58, this:r2218_57 +# 2218| m2218_60(unknown) = ^CallSideEffect : ~m2218_53 +# 2218| m2218_61(unknown) = Chi : total:m2218_53, partial:m2218_60 +# 2218| v2218_62(void) = ^IndirectReadSideEffect[-1] : &:r2218_57, m2218_13 +# 2218| m2218_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_57 +# 2218| m2218_64(vector) = Chi : total:m2218_13, partial:m2218_63 # 2233| r2233_1(glval) = VariableAddress[x] : # 2233| r2233_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1 -# 2233| m2233_4(unknown) = ^CallSideEffect : ~m2218_65 -# 2233| m2233_5(unknown) = Chi : total:m2218_65, partial:m2233_4 +# 2233| m2233_4(unknown) = ^CallSideEffect : ~m2218_61 +# 2233| m2233_5(unknown) = Chi : total:m2218_61, partial:m2233_4 # 2233| v2233_6(void) = ^IndirectReadSideEffect[-1] : &:r2233_1, m2214_8 # 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 # 2233| m2233_8(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_7 #-----| Goto -> Block 1 # 2218| Block 14 -# 2218| r2218_69(glval) = VariableAddress[y] : -# 2218| r2218_70(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_71(void) = Call[~ClassWithDestructor] : func:r2218_70, this:r2218_69 -# 2218| m2218_72(unknown) = ^CallSideEffect : ~m2220_5 -# 2218| m2218_73(unknown) = Chi : total:m2220_5, partial:m2218_72 -# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_69, m2220_8 -# 2218| m2218_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_69 -# 2218| m2218_76(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_75 -# 2218| r2218_77(glval>) = VariableAddress[(__begin)] : -# 2218| r2218_78(glval) = FunctionAddress[operator++] : -# 2218| r2218_79(iterator &) = Call[operator++] : func:r2218_78, this:r2218_77 -# 2218| m2218_80(unknown) = ^CallSideEffect : ~m2218_73 -# 2218| m2218_81(unknown) = Chi : total:m2218_73, partial:m2218_80 -# 2218| v2218_82(void) = ^IndirectReadSideEffect[-1] : &:r2218_77, m2218_30 -# 2218| m2218_83(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_77 -# 2218| m2218_84(iterator) = Chi : total:m2218_30, partial:m2218_83 -# 2218| r2218_85(glval>) = CopyValue : r2218_79 +# 2218| r2218_65(glval) = VariableAddress[y] : +# 2218| r2218_66(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_67(void) = Call[~ClassWithDestructor] : func:r2218_66, this:r2218_65 +# 2218| m2218_68(unknown) = ^CallSideEffect : ~m2220_5 +# 2218| m2218_69(unknown) = Chi : total:m2220_5, partial:m2218_68 +# 2218| v2218_70(void) = ^IndirectReadSideEffect[-1] : &:r2218_65, m2220_8 +# 2218| m2218_71(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_65 +# 2218| m2218_72(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_71 +# 2218| r2218_73(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_74(glval) = FunctionAddress[operator++] : +# 2218| r2218_75(iterator &) = Call[operator++] : func:r2218_74, this:r2218_73 +# 2218| v2218_76(void) = ^IndirectReadSideEffect[-1] : &:r2218_73, m2218_30 +# 2218| m2218_77(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_73 +# 2218| m2218_78(iterator) = Chi : total:m2218_30, partial:m2218_77 +# 2218| r2218_79(glval>) = CopyValue : r2218_75 #-----| Goto (back edge) -> Block 11 # 2224| Block 15 @@ -13774,8 +13749,8 @@ ir.cpp: # 2224| r2224_3(glval) = FunctionAddress[vector] : # 2224| r2224_4(int) = Constant[1] : # 2224| v2224_5(void) = Call[vector] : func:r2224_3, this:r2224_1, 0:r2224_4 -# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2218_43 -# 2224| m2224_7(unknown) = Chi : total:m2218_43, partial:m2224_6 +# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2218_38 +# 2224| m2224_7(unknown) = Chi : total:m2218_38, partial:m2224_6 # 2224| m2224_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 # 2224| m2224_9(vector) = Chi : total:m2224_2, partial:m2224_8 # 2224| r2224_10(glval &>) = VariableAddress[(__range)] : @@ -13803,8 +13778,8 @@ ir.cpp: #-----| Goto -> Block 16 # 2224| Block 16 -# 2224| m2224_26(iterator) = Phi : from 15:m2224_19, from 17:m2224_48 -# 2224| m2224_27(unknown) = Phi : from 15:~m2224_7, from 17:~m2224_45 +# 2224| m2224_26(iterator) = Phi : from 15:m2224_19, from 17:m2224_44 +# 2224| m2224_27(unknown) = Phi : from 15:~m2224_7, from 17:~m2224_34 # 2224| r2224_28(glval>) = VariableAddress[(__begin)] : #-----| r0_39(glval>) = Convert : r2224_28 # 2224| r2224_29(glval) = FunctionAddress[operator!=] : @@ -13822,38 +13797,32 @@ ir.cpp: # 2224| m2224_36(iterator) = Chi : total:m0_41, partial:m2224_35 #-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, m2224_36 # 2224| r2224_37(bool) = Call[operator!=] : func:r2224_29, this:r0_39, 0:r0_45 -# 2224| m2224_38(unknown) = ^CallSideEffect : ~m2224_34 -# 2224| m2224_39(unknown) = Chi : total:m2224_34, partial:m2224_38 #-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2224_26 -# 2224| v2224_40(void) = ConditionalBranch : r2224_37 +# 2224| v2224_38(void) = ConditionalBranch : r2224_37 #-----| False -> Block 20 #-----| True -> Block 18 # 2224| Block 17 -# 2224| r2224_41(glval>) = VariableAddress[(__begin)] : -# 2224| r2224_42(glval) = FunctionAddress[operator++] : -# 2224| r2224_43(iterator &) = Call[operator++] : func:r2224_42, this:r2224_41 -# 2224| m2224_44(unknown) = ^CallSideEffect : ~m2224_55 -# 2224| m2224_45(unknown) = Chi : total:m2224_55, partial:m2224_44 -# 2224| v2224_46(void) = ^IndirectReadSideEffect[-1] : &:r2224_41, m2224_26 -# 2224| m2224_47(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_41 -# 2224| m2224_48(iterator) = Chi : total:m2224_26, partial:m2224_47 -# 2224| r2224_49(glval>) = CopyValue : r2224_43 +# 2224| r2224_39(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_40(glval) = FunctionAddress[operator++] : +# 2224| r2224_41(iterator &) = Call[operator++] : func:r2224_40, this:r2224_39 +# 2224| v2224_42(void) = ^IndirectReadSideEffect[-1] : &:r2224_39, m2224_26 +# 2224| m2224_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_39 +# 2224| m2224_44(iterator) = Chi : total:m2224_26, partial:m2224_43 +# 2224| r2224_45(glval>) = CopyValue : r2224_41 #-----| Goto (back edge) -> Block 16 # 2224| Block 18 -# 2224| r2224_50(glval) = VariableAddress[y] : -# 2224| r2224_51(glval>) = VariableAddress[(__begin)] : -#-----| r0_47(glval>) = Convert : r2224_51 -# 2224| r2224_52(glval) = FunctionAddress[operator*] : -# 2224| r2224_53(int &) = Call[operator*] : func:r2224_52, this:r0_47 -# 2224| m2224_54(unknown) = ^CallSideEffect : ~m2224_39 -# 2224| m2224_55(unknown) = Chi : total:m2224_39, partial:m2224_54 +# 2224| r2224_46(glval) = VariableAddress[y] : +# 2224| r2224_47(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2224_47 +# 2224| r2224_48(glval) = FunctionAddress[operator*] : +# 2224| r2224_49(int &) = Call[operator*] : func:r2224_48, this:r0_47 #-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2224_26 -# 2224| r2224_56(int) = Load[?] : &:r2224_53, ~m2224_55 -# 2224| m2224_57(int) = Store[y] : &:r2224_50, r2224_56 +# 2224| r2224_50(int) = Load[?] : &:r2224_49, ~m2224_34 +# 2224| m2224_51(int) = Store[y] : &:r2224_46, r2224_50 # 2225| r2225_1(glval) = VariableAddress[y] : -# 2225| r2225_2(int) = Load[y] : &:r2225_1, m2224_57 +# 2225| r2225_2(int) = Load[y] : &:r2225_1, m2224_51 # 2225| r2225_3(int) = Constant[1] : # 2225| r2225_4(bool) = CompareEQ : r2225_2, r2225_3 # 2225| v2225_5(void) = ConditionalBranch : r2225_4 @@ -13862,19 +13831,19 @@ ir.cpp: # 2226| Block 19 # 2226| v2226_1(void) = NoOp : -# 2224| r2224_58(glval>) = VariableAddress[ys] : -# 2224| r2224_59(glval) = FunctionAddress[~vector] : -# 2224| v2224_60(void) = Call[~vector] : func:r2224_59, this:r2224_58 -# 2224| m2224_61(unknown) = ^CallSideEffect : ~m2224_55 -# 2224| m2224_62(unknown) = Chi : total:m2224_55, partial:m2224_61 -# 2224| v2224_63(void) = ^IndirectReadSideEffect[-1] : &:r2224_58, m2224_9 -# 2224| m2224_64(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_58 -# 2224| m2224_65(vector) = Chi : total:m2224_9, partial:m2224_64 +# 2224| r2224_52(glval>) = VariableAddress[ys] : +# 2224| r2224_53(glval) = FunctionAddress[~vector] : +# 2224| v2224_54(void) = Call[~vector] : func:r2224_53, this:r2224_52 +# 2224| m2224_55(unknown) = ^CallSideEffect : ~m2224_34 +# 2224| m2224_56(unknown) = Chi : total:m2224_34, partial:m2224_55 +# 2224| v2224_57(void) = ^IndirectReadSideEffect[-1] : &:r2224_52, m2224_9 +# 2224| m2224_58(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_52 +# 2224| m2224_59(vector) = Chi : total:m2224_9, partial:m2224_58 # 2233| r2233_9(glval) = VariableAddress[x] : # 2233| r2233_10(glval) = FunctionAddress[~ClassWithDestructor] : # 2233| v2233_11(void) = Call[~ClassWithDestructor] : func:r2233_10, this:r2233_9 -# 2233| m2233_12(unknown) = ^CallSideEffect : ~m2224_62 -# 2233| m2233_13(unknown) = Chi : total:m2224_62, partial:m2233_12 +# 2233| m2233_12(unknown) = ^CallSideEffect : ~m2224_56 +# 2233| m2233_13(unknown) = Chi : total:m2224_56, partial:m2233_12 # 2233| v2233_14(void) = ^IndirectReadSideEffect[-1] : &:r2233_9, m2214_8 # 2233| m2233_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_9 # 2233| m2233_16(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_15 @@ -13890,8 +13859,8 @@ ir.cpp: # 2229| m2229_7(ClassWithDestructor) = Store[#temp2229:45] : &:r2229_4, r2229_6 # 2229| r2229_8(ClassWithDestructor) = Load[#temp2229:45] : &:r2229_4, m2229_7 # 2229| v2229_9(void) = Call[vector] : func:r2229_3, this:r2229_1, 0:r2229_8 -# 2229| m2229_10(unknown) = ^CallSideEffect : ~m2224_39 -# 2229| m2229_11(unknown) = Chi : total:m2224_39, partial:m2229_10 +# 2229| m2229_10(unknown) = ^CallSideEffect : ~m2224_34 +# 2229| m2229_11(unknown) = Chi : total:m2224_34, partial:m2229_10 # 2229| m2229_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_1 # 2229| m2229_13(vector) = Chi : total:m2229_2, partial:m2229_12 # 2229| r2229_14(glval &>) = VariableAddress[(__range)] : @@ -13919,8 +13888,8 @@ ir.cpp: #-----| Goto -> Block 21 # 2229| Block 21 -# 2229| m2229_30(iterator) = Phi : from 20:m2229_23, from 22:m2229_68 -# 2229| m2229_31(unknown) = Phi : from 20:~m2229_11, from 22:~m2229_65 +# 2229| m2229_30(iterator) = Phi : from 20:m2229_23, from 22:m2229_62 +# 2229| m2229_31(unknown) = Phi : from 20:~m2229_11, from 22:~m2229_53 # 2229| r2229_32(glval>) = VariableAddress[(__begin)] : #-----| r0_55(glval>) = Convert : r2229_32 # 2229| r2229_33(glval) = FunctionAddress[operator!=] : @@ -13938,30 +13907,26 @@ ir.cpp: # 2229| m2229_40(iterator) = Chi : total:m0_57, partial:m2229_39 #-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, m2229_40 # 2229| r2229_41(bool) = Call[operator!=] : func:r2229_33, this:r0_55, 0:r0_61 -# 2229| m2229_42(unknown) = ^CallSideEffect : ~m2229_38 -# 2229| m2229_43(unknown) = Chi : total:m2229_38, partial:m2229_42 #-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2229_30 -# 2229| v2229_44(void) = ConditionalBranch : r2229_41 +# 2229| v2229_42(void) = ConditionalBranch : r2229_41 #-----| False -> Block 23 #-----| True -> Block 22 # 2229| Block 22 -# 2229| r2229_45(glval) = VariableAddress[y] : -# 2229| r2229_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_63(glval>) = Convert : r2229_46 -# 2229| r2229_47(glval) = FunctionAddress[operator*] : -# 2229| r2229_48(ClassWithDestructor &) = Call[operator*] : func:r2229_47, this:r0_63 -# 2229| m2229_49(unknown) = ^CallSideEffect : ~m2229_43 -# 2229| m2229_50(unknown) = Chi : total:m2229_43, partial:m2229_49 +# 2229| r2229_43(glval) = VariableAddress[y] : +# 2229| r2229_44(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2229_44 +# 2229| r2229_45(glval) = FunctionAddress[operator*] : +# 2229| r2229_46(ClassWithDestructor &) = Call[operator*] : func:r2229_45, this:r0_63 #-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2229_30 -# 2229| r2229_51(ClassWithDestructor) = Load[?] : &:r2229_48, ~m2229_50 -# 2229| m2229_52(ClassWithDestructor) = Store[y] : &:r2229_45, r2229_51 +# 2229| r2229_47(ClassWithDestructor) = Load[?] : &:r2229_46, ~m2229_38 +# 2229| m2229_48(ClassWithDestructor) = Store[y] : &:r2229_43, r2229_47 # 2230| r2230_1(glval) = VariableAddress[z1] : # 2230| m2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1 # 2230| r2230_3(glval) = FunctionAddress[ClassWithDestructor] : # 2230| v2230_4(void) = Call[ClassWithDestructor] : func:r2230_3, this:r2230_1 -# 2230| m2230_5(unknown) = ^CallSideEffect : ~m2229_50 -# 2230| m2230_6(unknown) = Chi : total:m2229_50, partial:m2230_5 +# 2230| m2230_5(unknown) = ^CallSideEffect : ~m2229_38 +# 2230| m2230_6(unknown) = Chi : total:m2229_38, partial:m2230_5 # 2230| m2230_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 # 2230| m2230_8(ClassWithDestructor) = Chi : total:m2230_2, partial:m2230_7 # 2231| r2231_1(glval) = VariableAddress[z2] : @@ -13988,23 +13953,21 @@ ir.cpp: # 2232| v2232_14(void) = ^IndirectReadSideEffect[-1] : &:r2232_9, m2230_8 # 2232| m2232_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_9 # 2232| m2232_16(ClassWithDestructor) = Chi : total:m2230_8, partial:m2232_15 -# 2229| r2229_53(glval) = VariableAddress[y] : -# 2229| r2229_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2229| v2229_55(void) = Call[~ClassWithDestructor] : func:r2229_54, this:r2229_53 -# 2229| m2229_56(unknown) = ^CallSideEffect : ~m2232_13 -# 2229| m2229_57(unknown) = Chi : total:m2232_13, partial:m2229_56 -# 2229| v2229_58(void) = ^IndirectReadSideEffect[-1] : &:r2229_53, m2229_52 -# 2229| m2229_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_53 -# 2229| m2229_60(ClassWithDestructor) = Chi : total:m2229_52, partial:m2229_59 -# 2229| r2229_61(glval>) = VariableAddress[(__begin)] : -# 2229| r2229_62(glval) = FunctionAddress[operator++] : -# 2229| r2229_63(iterator &) = Call[operator++] : func:r2229_62, this:r2229_61 -# 2229| m2229_64(unknown) = ^CallSideEffect : ~m2229_57 -# 2229| m2229_65(unknown) = Chi : total:m2229_57, partial:m2229_64 -# 2229| v2229_66(void) = ^IndirectReadSideEffect[-1] : &:r2229_61, m2229_30 -# 2229| m2229_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_61 -# 2229| m2229_68(iterator) = Chi : total:m2229_30, partial:m2229_67 -# 2229| r2229_69(glval>) = CopyValue : r2229_63 +# 2229| r2229_49(glval) = VariableAddress[y] : +# 2229| r2229_50(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_51(void) = Call[~ClassWithDestructor] : func:r2229_50, this:r2229_49 +# 2229| m2229_52(unknown) = ^CallSideEffect : ~m2232_13 +# 2229| m2229_53(unknown) = Chi : total:m2232_13, partial:m2229_52 +# 2229| v2229_54(void) = ^IndirectReadSideEffect[-1] : &:r2229_49, m2229_48 +# 2229| m2229_55(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_49 +# 2229| m2229_56(ClassWithDestructor) = Chi : total:m2229_48, partial:m2229_55 +# 2229| r2229_57(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_58(glval) = FunctionAddress[operator++] : +# 2229| r2229_59(iterator &) = Call[operator++] : func:r2229_58, this:r2229_57 +# 2229| v2229_60(void) = ^IndirectReadSideEffect[-1] : &:r2229_57, m2229_30 +# 2229| m2229_61(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_57 +# 2229| m2229_62(iterator) = Chi : total:m2229_30, partial:m2229_61 +# 2229| r2229_63(glval>) = CopyValue : r2229_59 #-----| Goto (back edge) -> Block 21 # 2233| Block 23 @@ -14012,8 +13975,8 @@ ir.cpp: # 2233| r2233_18(glval) = VariableAddress[x] : # 2233| r2233_19(glval) = FunctionAddress[~ClassWithDestructor] : # 2233| v2233_20(void) = Call[~ClassWithDestructor] : func:r2233_19, this:r2233_18 -# 2233| m2233_21(unknown) = ^CallSideEffect : ~m2229_43 -# 2233| m2233_22(unknown) = Chi : total:m2229_43, partial:m2233_21 +# 2233| m2233_21(unknown) = ^CallSideEffect : ~m2229_38 +# 2233| m2233_22(unknown) = Chi : total:m2229_38, partial:m2233_21 # 2233| v2233_23(void) = ^IndirectReadSideEffect[-1] : &:r2233_18, m2214_8 # 2233| m2233_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_18 # 2233| m2233_25(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_24 @@ -14685,8 +14648,8 @@ ir.cpp: #-----| Goto -> Block 4 # 2307| Block 4 -# 2307| m2307_36(iterator) = Phi : from 3:m2307_29, from 5:m2307_83 -# 2307| m2307_37(unknown) = Phi : from 3:~m2307_19, from 5:~m2307_80 +# 2307| m2307_36(iterator) = Phi : from 3:m2307_29, from 5:m2307_77 +# 2307| m2307_37(unknown) = Phi : from 3:~m2307_19, from 5:~m2307_68 # 2307| r2307_38(glval>) = VariableAddress[(__begin)] : #-----| r0_7(glval>) = Convert : r2307_38 # 2307| r2307_39(glval) = FunctionAddress[operator!=] : @@ -14704,39 +14667,35 @@ ir.cpp: # 2307| m2307_46(iterator) = Chi : total:m0_9, partial:m2307_45 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2307_46 # 2307| r2307_47(bool) = Call[operator!=] : func:r2307_39, this:r0_7, 0:r0_13 -# 2307| m2307_48(unknown) = ^CallSideEffect : ~m2307_44 -# 2307| m2307_49(unknown) = Chi : total:m2307_44, partial:m2307_48 #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2307_36 -# 2307| v2307_50(void) = ConditionalBranch : r2307_47 +# 2307| v2307_48(void) = ConditionalBranch : r2307_47 #-----| False -> Block 6 #-----| True -> Block 5 # 2307| Block 5 -# 2307| r2307_51(glval) = VariableAddress[s] : -# 2307| m2307_52(String) = Uninitialized[s] : &:r2307_51 -# 2307| r2307_53(glval) = FunctionAddress[String] : -# 2307| r2307_54(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2307_54 -# 2307| r2307_55(glval) = FunctionAddress[operator*] : -# 2307| r2307_56(String &) = Call[operator*] : func:r2307_55, this:r0_15 -# 2307| m2307_57(unknown) = ^CallSideEffect : ~m2307_49 -# 2307| m2307_58(unknown) = Chi : total:m2307_49, partial:m2307_57 +# 2307| r2307_49(glval) = VariableAddress[s] : +# 2307| m2307_50(String) = Uninitialized[s] : &:r2307_49 +# 2307| r2307_51(glval) = FunctionAddress[String] : +# 2307| r2307_52(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2307_52 +# 2307| r2307_53(glval) = FunctionAddress[operator*] : +# 2307| r2307_54(String &) = Call[operator*] : func:r2307_53, this:r0_15 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2307_36 -# 2307| r2307_59(glval) = CopyValue : r2307_56 -# 2307| r2307_60(glval) = Convert : r2307_59 -# 2307| r2307_61(String &) = CopyValue : r2307_60 -# 2307| v2307_62(void) = Call[String] : func:r2307_53, this:r2307_51, 0:r2307_61 -# 2307| m2307_63(unknown) = ^CallSideEffect : ~m2307_58 -# 2307| m2307_64(unknown) = Chi : total:m2307_58, partial:m2307_63 -# 2307| v2307_65(void) = ^BufferReadSideEffect[0] : &:r2307_61, ~m2307_64 -# 2307| m2307_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_51 -# 2307| m2307_67(String) = Chi : total:m2307_52, partial:m2307_66 +# 2307| r2307_55(glval) = CopyValue : r2307_54 +# 2307| r2307_56(glval) = Convert : r2307_55 +# 2307| r2307_57(String &) = CopyValue : r2307_56 +# 2307| v2307_58(void) = Call[String] : func:r2307_51, this:r2307_49, 0:r2307_57 +# 2307| m2307_59(unknown) = ^CallSideEffect : ~m2307_44 +# 2307| m2307_60(unknown) = Chi : total:m2307_44, partial:m2307_59 +# 2307| v2307_61(void) = ^BufferReadSideEffect[0] : &:r2307_57, ~m2307_60 +# 2307| m2307_62(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_49 +# 2307| m2307_63(String) = Chi : total:m2307_50, partial:m2307_62 # 2308| r2308_1(glval) = VariableAddress[s2] : # 2308| m2308_2(String) = Uninitialized[s2] : &:r2308_1 # 2308| r2308_3(glval) = FunctionAddress[String] : # 2308| v2308_4(void) = Call[String] : func:r2308_3, this:r2308_1 -# 2308| m2308_5(unknown) = ^CallSideEffect : ~m2307_64 -# 2308| m2308_6(unknown) = Chi : total:m2307_64, partial:m2308_5 +# 2308| m2308_5(unknown) = ^CallSideEffect : ~m2307_60 +# 2308| m2308_6(unknown) = Chi : total:m2307_60, partial:m2308_5 # 2308| m2308_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 # 2308| m2308_8(String) = Chi : total:m2308_2, partial:m2308_7 # 2309| r2309_1(glval) = VariableAddress[s2] : @@ -14747,23 +14706,21 @@ ir.cpp: # 2309| v2309_6(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, m2308_8 # 2309| m2309_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1 # 2309| m2309_8(String) = Chi : total:m2308_8, partial:m2309_7 -# 2307| r2307_68(glval) = VariableAddress[s] : -# 2307| r2307_69(glval) = FunctionAddress[~String] : -# 2307| v2307_70(void) = Call[~String] : func:r2307_69, this:r2307_68 -# 2307| m2307_71(unknown) = ^CallSideEffect : ~m2309_5 -# 2307| m2307_72(unknown) = Chi : total:m2309_5, partial:m2307_71 -# 2307| v2307_73(void) = ^IndirectReadSideEffect[-1] : &:r2307_68, m2307_67 -# 2307| m2307_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_68 -# 2307| m2307_75(String) = Chi : total:m2307_67, partial:m2307_74 -# 2307| r2307_76(glval>) = VariableAddress[(__begin)] : -# 2307| r2307_77(glval) = FunctionAddress[operator++] : -# 2307| r2307_78(iterator &) = Call[operator++] : func:r2307_77, this:r2307_76 -# 2307| m2307_79(unknown) = ^CallSideEffect : ~m2307_72 -# 2307| m2307_80(unknown) = Chi : total:m2307_72, partial:m2307_79 -# 2307| v2307_81(void) = ^IndirectReadSideEffect[-1] : &:r2307_76, m2307_36 -# 2307| m2307_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_76 -# 2307| m2307_83(iterator) = Chi : total:m2307_36, partial:m2307_82 -# 2307| r2307_84(glval>) = CopyValue : r2307_78 +# 2307| r2307_64(glval) = VariableAddress[s] : +# 2307| r2307_65(glval) = FunctionAddress[~String] : +# 2307| v2307_66(void) = Call[~String] : func:r2307_65, this:r2307_64 +# 2307| m2307_67(unknown) = ^CallSideEffect : ~m2309_5 +# 2307| m2307_68(unknown) = Chi : total:m2309_5, partial:m2307_67 +# 2307| v2307_69(void) = ^IndirectReadSideEffect[-1] : &:r2307_64, m2307_63 +# 2307| m2307_70(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_64 +# 2307| m2307_71(String) = Chi : total:m2307_63, partial:m2307_70 +# 2307| r2307_72(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_73(glval) = FunctionAddress[operator++] : +# 2307| r2307_74(iterator &) = Call[operator++] : func:r2307_73, this:r2307_72 +# 2307| v2307_75(void) = ^IndirectReadSideEffect[-1] : &:r2307_72, m2307_36 +# 2307| m2307_76(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_72 +# 2307| m2307_77(iterator) = Chi : total:m2307_36, partial:m2307_76 +# 2307| r2307_78(glval>) = CopyValue : r2307_74 #-----| Goto (back edge) -> Block 4 # 2311| Block 6 @@ -14773,8 +14730,8 @@ ir.cpp: # 2311| r2311_4(glval) = StringConstant["hello"] : # 2311| r2311_5(char *) = Convert : r2311_4 # 2311| v2311_6(void) = Call[String] : func:r2311_3, this:r2311_1, 0:r2311_5 -# 2311| m2311_7(unknown) = ^CallSideEffect : ~m2307_49 -# 2311| m2311_8(unknown) = Chi : total:m2307_49, partial:m2311_7 +# 2311| m2311_7(unknown) = ^CallSideEffect : ~m2307_44 +# 2311| m2311_8(unknown) = Chi : total:m2307_44, partial:m2311_7 # 2311| v2311_9(void) = ^BufferReadSideEffect[0] : &:r2311_5, ~m2301_3 # 2311| m2311_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 # 2311| m2311_11(String) = Chi : total:m2311_2, partial:m2311_10 @@ -15517,8 +15474,8 @@ ir.cpp: #-----| Goto -> Block 10 # 2430| Block 10 -# 2430| m2430_43(iterator) = Phi : from 9:m2430_36, from 11:m2430_73 -# 2430| m2430_44(unknown) = Phi : from 9:~m2430_26, from 11:~m2430_70 +# 2430| m2430_43(iterator) = Phi : from 9:m2430_36, from 11:m2430_67 +# 2430| m2430_44(unknown) = Phi : from 9:~m2430_26, from 11:~m2430_51 # 2430| r2430_45(glval>) = VariableAddress[(__begin)] : #-----| r0_7(glval>) = Convert : r2430_45 # 2430| r2430_46(glval) = FunctionAddress[operator!=] : @@ -15536,48 +15493,42 @@ ir.cpp: # 2430| m2430_53(iterator) = Chi : total:m0_9, partial:m2430_52 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2430_53 # 2430| r2430_54(bool) = Call[operator!=] : func:r2430_46, this:r0_7, 0:r0_13 -# 2430| m2430_55(unknown) = ^CallSideEffect : ~m2430_51 -# 2430| m2430_56(unknown) = Chi : total:m2430_51, partial:m2430_55 #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2430_43 -# 2430| v2430_57(void) = ConditionalBranch : r2430_54 +# 2430| v2430_55(void) = ConditionalBranch : r2430_54 #-----| False -> Block 12 #-----| True -> Block 11 # 2430| Block 11 -# 2430| r2430_58(glval) = VariableAddress[y] : -# 2430| r2430_59(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2430_59 -# 2430| r2430_60(glval) = FunctionAddress[operator*] : -# 2430| r2430_61(char &) = Call[operator*] : func:r2430_60, this:r0_15 -# 2430| m2430_62(unknown) = ^CallSideEffect : ~m2430_56 -# 2430| m2430_63(unknown) = Chi : total:m2430_56, partial:m2430_62 +# 2430| r2430_56(glval) = VariableAddress[y] : +# 2430| r2430_57(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2430_57 +# 2430| r2430_58(glval) = FunctionAddress[operator*] : +# 2430| r2430_59(char &) = Call[operator*] : func:r2430_58, this:r0_15 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2430_43 -# 2430| r2430_64(char) = Load[?] : &:r2430_61, ~m2430_63 -# 2430| m2430_65(char) = Store[y] : &:r2430_58, r2430_64 +# 2430| r2430_60(char) = Load[?] : &:r2430_59, ~m2430_51 +# 2430| m2430_61(char) = Store[y] : &:r2430_56, r2430_60 # 2431| r2431_1(glval) = VariableAddress[x] : # 2431| r2431_2(char) = Load[x] : &:r2431_1, m2430_17 # 2431| r2431_3(int) = Convert : r2431_2 # 2431| r2431_4(glval) = VariableAddress[y] : -# 2431| r2431_5(char) = Load[y] : &:r2431_4, m2430_65 +# 2431| r2431_5(char) = Load[y] : &:r2431_4, m2430_61 # 2431| r2431_6(int) = Convert : r2431_5 # 2431| r2431_7(int) = Add : r2431_6, r2431_3 # 2431| r2431_8(char) = Convert : r2431_7 # 2431| m2431_9(char) = Store[y] : &:r2431_4, r2431_8 -# 2430| r2430_66(glval>) = VariableAddress[(__begin)] : -# 2430| r2430_67(glval) = FunctionAddress[operator++] : -# 2430| r2430_68(iterator &) = Call[operator++] : func:r2430_67, this:r2430_66 -# 2430| m2430_69(unknown) = ^CallSideEffect : ~m2430_63 -# 2430| m2430_70(unknown) = Chi : total:m2430_63, partial:m2430_69 -# 2430| v2430_71(void) = ^IndirectReadSideEffect[-1] : &:r2430_66, m2430_43 -# 2430| m2430_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_66 -# 2430| m2430_73(iterator) = Chi : total:m2430_43, partial:m2430_72 -# 2430| r2430_74(glval>) = CopyValue : r2430_68 +# 2430| r2430_62(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_63(glval) = FunctionAddress[operator++] : +# 2430| r2430_64(iterator &) = Call[operator++] : func:r2430_63, this:r2430_62 +# 2430| v2430_65(void) = ^IndirectReadSideEffect[-1] : &:r2430_62, m2430_43 +# 2430| m2430_66(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_62 +# 2430| m2430_67(iterator) = Chi : total:m2430_43, partial:m2430_66 +# 2430| r2430_68(glval>) = CopyValue : r2430_64 #-----| Goto (back edge) -> Block 10 # 2432| Block 12 # 2432| v2432_1(void) = NoOp : # 2410| v2410_5(void) = ReturnVoid : -# 2410| v2410_6(void) = AliasedUse : ~m2430_56 +# 2410| v2410_6(void) = AliasedUse : ~m2430_51 # 2410| v2410_7(void) = ExitFunction : # 2410| Block 13 diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index e331a6d53bbd..cf7a30295ee4 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -6293,7 +6293,7 @@ | ir.cpp:1056:1:1056:1 | SideEffect | ~m1056_6 | | ir.cpp:1126:6:1126:18 | ChiPartial | partial:m1126_3 | | ir.cpp:1126:6:1126:18 | ChiTotal | total:m1126_2 | -| ir.cpp:1126:6:1126:18 | SideEffect | ~m1137_1 | +| ir.cpp:1126:6:1126:18 | SideEffect | ~m1133_27 | | ir.cpp:1126:44:1126:44 | Address | &:r1126_5 | | ir.cpp:1126:44:1126:44 | Address | &:r1126_5 | | ir.cpp:1126:44:1126:44 | Address | &:r1126_7 | @@ -6303,50 +6303,41 @@ | ir.cpp:1127:5:1127:5 | Address | &:r1127_1 | | ir.cpp:1127:5:1127:5 | Address | &:r1127_7 | | ir.cpp:1127:5:1127:5 | Address | &:r1127_13 | -| ir.cpp:1127:14:1127:14 | Address | &:r1127_34 | +| ir.cpp:1127:14:1127:14 | Address | &:r1127_32 | | ir.cpp:1127:18:1127:18 | Address | &:r1127_2 | | ir.cpp:1127:18:1127:18 | Address | &:r1127_8 | | ir.cpp:1127:18:1127:18 | Address | &:r1127_14 | -| ir.cpp:1127:18:1127:18 | Address | &:r1127_37 | -| ir.cpp:1127:18:1127:18 | Address | &:r1127_43 | -| ir.cpp:1127:18:1127:18 | Address | &:r1127_43 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_35 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_39 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_39 | | ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_1 | | ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_3 | | ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_5 | | ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_6 | | ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_13 | -| ir.cpp:1127:18:1127:18 | Arg(this) | this:r1127_43 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r1127_39 | | ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_10 | | ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_16 | | ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_22 | | ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_23 | -| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_36 | -| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_44 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_34 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_40 | | ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_26 | | ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_28 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_31 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_38 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_46 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_49 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_43 | | ir.cpp:1127:18:1127:18 | ChiTotal | total:m0_7 | | ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_19 | | ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_20 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_27 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_32 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_39 | | ir.cpp:1127:18:1127:18 | Condition | r1127_30 | | ir.cpp:1127:18:1127:18 | Load | m1126_6 | | ir.cpp:1127:18:1127:18 | Load | m1127_6 | | ir.cpp:1127:18:1127:18 | Load | m1127_6 | | ir.cpp:1127:18:1127:18 | Phi | from 0:m1127_12 | | ir.cpp:1127:18:1127:18 | Phi | from 0:~m1126_4 | -| ir.cpp:1127:18:1127:18 | Phi | from 4:m1127_50 | -| ir.cpp:1127:18:1127:18 | Phi | from 4:~m1127_47 | +| ir.cpp:1127:18:1127:18 | Phi | from 4:m1127_44 | +| ir.cpp:1127:18:1127:18 | Phi | from 4:~m1127_27 | | ir.cpp:1127:18:1127:18 | SideEffect | m1127_19 | | ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_20 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_27 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_32 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_39 | | ir.cpp:1127:18:1127:18 | StoreValue | r1127_5 | | ir.cpp:1127:18:1127:18 | StoreValue | r1127_11 | | ir.cpp:1127:18:1127:18 | StoreValue | r1127_17 | @@ -6356,61 +6347,52 @@ | ir.cpp:1127:18:1127:18 | Unary | r1127_15 | | ir.cpp:1127:18:1127:18 | Unary | r1127_21 | | ir.cpp:1127:18:1127:18 | Unary | r1127_24 | -| ir.cpp:1127:18:1127:18 | Unary | r1127_35 | -| ir.cpp:1127:18:1127:18 | Unary | r1127_45 | -| ir.cpp:1127:18:1127:19 | Load | ~m1127_39 | -| ir.cpp:1127:18:1127:19 | StoreValue | r1127_40 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_33 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_41 | +| ir.cpp:1127:18:1127:19 | Load | ~m1127_27 | +| ir.cpp:1127:18:1127:19 | StoreValue | r1127_36 | | ir.cpp:1128:13:1128:13 | Address | &:r1128_1 | | ir.cpp:1128:13:1128:13 | Left | r1128_2 | -| ir.cpp:1128:13:1128:13 | Load | m1127_41 | +| ir.cpp:1128:13:1128:13 | Load | m1127_37 | | ir.cpp:1128:13:1128:17 | Condition | r1128_4 | | ir.cpp:1128:17:1128:17 | Right | r1128_3 | | ir.cpp:1133:5:1133:5 | Address | &:r1133_1 | | ir.cpp:1133:5:1133:5 | Address | &:r1133_7 | | ir.cpp:1133:5:1133:5 | Address | &:r1133_13 | -| ir.cpp:1133:21:1133:21 | Address | &:r1133_43 | +| ir.cpp:1133:21:1133:21 | Address | &:r1133_39 | | ir.cpp:1133:25:1133:25 | Address | &:r1133_2 | | ir.cpp:1133:25:1133:25 | Address | &:r1133_8 | | ir.cpp:1133:25:1133:25 | Address | &:r1133_14 | -| ir.cpp:1133:25:1133:25 | Address | &:r1133_34 | -| ir.cpp:1133:25:1133:25 | Address | &:r1133_34 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_32 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_32 | | ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_15 | | ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_17 | | ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_19 | | ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_20 | | ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_27 | -| ir.cpp:1133:25:1133:25 | Arg(this) | this:r1133_34 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r1133_32 | | ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_10 | | ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_16 | | ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_22 | | ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_23 | -| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_35 | -| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_45 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_33 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_41 | | ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_26 | | ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_28 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_31 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_37 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_40 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_47 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_36 | | ir.cpp:1133:25:1133:25 | ChiTotal | total:m0_21 | | ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_19 | | ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_20 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_27 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_32 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_48 | | ir.cpp:1133:25:1133:25 | Condition | r1133_30 | | ir.cpp:1133:25:1133:25 | Load | m1126_6 | | ir.cpp:1133:25:1133:25 | Load | m1133_6 | | ir.cpp:1133:25:1133:25 | Load | m1133_6 | | ir.cpp:1133:25:1133:25 | Phi | from 5:m1133_12 | -| ir.cpp:1133:25:1133:25 | Phi | from 5:~m1127_32 | -| ir.cpp:1133:25:1133:25 | Phi | from 7:m1133_41 | -| ir.cpp:1133:25:1133:25 | Phi | from 7:~m1133_38 | +| ir.cpp:1133:25:1133:25 | Phi | from 5:~m1127_27 | +| ir.cpp:1133:25:1133:25 | Phi | from 7:m1133_37 | +| ir.cpp:1133:25:1133:25 | Phi | from 7:~m1133_27 | | ir.cpp:1133:25:1133:25 | SideEffect | m1133_19 | | ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_20 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_27 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_32 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_48 | | ir.cpp:1133:25:1133:25 | StoreValue | r1133_5 | | ir.cpp:1133:25:1133:25 | StoreValue | r1133_11 | | ir.cpp:1133:25:1133:25 | StoreValue | r1133_17 | @@ -6420,21 +6402,19 @@ | ir.cpp:1133:25:1133:25 | Unary | r1133_15 | | ir.cpp:1133:25:1133:25 | Unary | r1133_21 | | ir.cpp:1133:25:1133:25 | Unary | r1133_24 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_36 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_44 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_46 | -| ir.cpp:1133:25:1133:26 | StoreValue | r1133_51 | -| ir.cpp:1133:25:1133:26 | Unary | r1133_49 | -| ir.cpp:1133:25:1133:26 | Unary | r1133_50 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_34 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_40 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_42 | +| ir.cpp:1133:25:1133:26 | StoreValue | r1133_45 | +| ir.cpp:1133:25:1133:26 | Unary | r1133_43 | +| ir.cpp:1133:25:1133:26 | Unary | r1133_44 | | ir.cpp:1134:13:1134:13 | Address | &:r1134_1 | | ir.cpp:1134:13:1134:13 | Address | &:r1134_2 | | ir.cpp:1134:13:1134:13 | Left | r1134_3 | -| ir.cpp:1134:13:1134:13 | Load | m1133_52 | -| ir.cpp:1134:13:1134:13 | Load | ~m1133_48 | +| ir.cpp:1134:13:1134:13 | Load | m1133_46 | +| ir.cpp:1134:13:1134:13 | Load | ~m1133_27 | | ir.cpp:1134:13:1134:17 | Condition | r1134_5 | | ir.cpp:1134:17:1134:17 | Right | r1134_4 | -| ir.cpp:1137:5:1137:5 | Phi | from 6:~m1133_32 | -| ir.cpp:1137:5:1137:5 | Phi | from 9:~m1133_48 | | ir.cpp:1157:5:1157:11 | Address | &:r1157_7 | | ir.cpp:1157:5:1157:11 | ChiPartial | partial:m1157_3 | | ir.cpp:1157:5:1157:11 | ChiTotal | total:m1157_2 | @@ -11230,97 +11210,88 @@ | ir.cpp:2215:45:2215:46 | ChiTotal | total:m2214_6 | | ir.cpp:2215:45:2215:46 | ChiTotal | total:m2215_2 | | ir.cpp:2215:45:2215:46 | SideEffect | ~m2214_6 | -| ir.cpp:2215:69:2215:69 | Address | &:r2215_45 | -| ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | -| ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | -| ir.cpp:2215:69:2215:69 | Arg(this) | this:r2215_53 | -| ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_54 | -| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_56 | -| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_59 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_43 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_49 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_49 | +| ir.cpp:2215:69:2215:69 | Arg(this) | this:r2215_49 | +| ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_50 | +| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_52 | +| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_55 | | ir.cpp:2215:69:2215:69 | ChiTotal | total:m2216_6 | | ir.cpp:2215:69:2215:69 | ChiTotal | total:m2216_9 | | ir.cpp:2215:69:2215:69 | SideEffect | m2216_9 | | ir.cpp:2215:69:2215:69 | SideEffect | ~m2216_6 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_19 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_25 | -| ir.cpp:2215:73:2215:73 | Address | &:r2215_48 | -| ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | -| ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_46 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_57 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_57 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_2 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_5 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_7 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_8 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_15 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r2215_61 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r2215_57 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_21 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_27 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_33 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_34 | -| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_47 | -| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_62 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_45 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_58 | | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_37 | | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_39 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_42 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_49 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_64 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_67 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_61 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_9 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_30 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_31 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_38 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_43 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_57 | | ir.cpp:2215:73:2215:73 | Condition | r2215_41 | | ir.cpp:2215:73:2215:73 | Load | m2215_17 | | ir.cpp:2215:73:2215:73 | Load | m2215_17 | | ir.cpp:2215:73:2215:73 | Phi | from 7:m2215_23 | | ir.cpp:2215:73:2215:73 | Phi | from 7:~m2215_11 | -| ir.cpp:2215:73:2215:73 | Phi | from 9:m2215_68 | -| ir.cpp:2215:73:2215:73 | Phi | from 9:~m2215_65 | +| ir.cpp:2215:73:2215:73 | Phi | from 9:m2215_62 | +| ir.cpp:2215:73:2215:73 | Phi | from 9:~m2215_53 | | ir.cpp:2215:73:2215:73 | SideEffect | m2215_30 | | ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_31 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_38 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_43 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_57 | | ir.cpp:2215:73:2215:73 | StoreValue | r2215_22 | | ir.cpp:2215:73:2215:73 | StoreValue | r2215_28 | | ir.cpp:2215:73:2215:73 | Unary | r2215_20 | | ir.cpp:2215:73:2215:73 | Unary | r2215_26 | | ir.cpp:2215:73:2215:73 | Unary | r2215_32 | | ir.cpp:2215:73:2215:73 | Unary | r2215_35 | -| ir.cpp:2215:73:2215:73 | Unary | r2215_46 | -| ir.cpp:2215:73:2215:73 | Unary | r2215_63 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_44 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_59 | | ir.cpp:2215:73:2215:74 | StoreValue | r2215_16 | | ir.cpp:2215:73:2215:74 | Unary | r2215_15 | -| ir.cpp:2215:73:2215:75 | Load | ~m2215_50 | -| ir.cpp:2215:73:2215:75 | StoreValue | r2215_51 | +| ir.cpp:2215:73:2215:75 | Load | ~m2215_38 | +| ir.cpp:2215:73:2215:75 | StoreValue | r2215_47 | | ir.cpp:2216:7:2216:7 | Address | &:r2216_1 | | ir.cpp:2216:7:2216:7 | Address | &:r2216_1 | | ir.cpp:2216:7:2216:7 | Arg(this) | this:r2216_1 | | ir.cpp:2216:7:2216:7 | ChiPartial | partial:m2216_8 | -| ir.cpp:2216:7:2216:7 | ChiTotal | total:m2215_52 | -| ir.cpp:2216:7:2216:7 | SideEffect | m2215_52 | +| ir.cpp:2216:7:2216:7 | ChiTotal | total:m2215_48 | +| ir.cpp:2216:7:2216:7 | SideEffect | m2215_48 | | ir.cpp:2216:9:2216:13 | CallTarget | func:r2216_2 | | ir.cpp:2216:9:2216:13 | ChiPartial | partial:m2216_5 | -| ir.cpp:2216:9:2216:13 | ChiTotal | total:m2215_50 | -| ir.cpp:2216:9:2216:13 | SideEffect | ~m2215_50 | +| ir.cpp:2216:9:2216:13 | ChiTotal | total:m2215_38 | +| ir.cpp:2216:9:2216:13 | SideEffect | ~m2215_38 | | ir.cpp:2216:15:2216:17 | Arg(0) | 0:r2216_3 | | ir.cpp:2218:5:2218:5 | Address | &:r2218_14 | | ir.cpp:2218:5:2218:5 | Address | &:r2218_18 | | ir.cpp:2218:5:2218:5 | Address | &:r2218_24 | | ir.cpp:2218:42:2218:43 | Address | &:r2218_1 | | ir.cpp:2218:42:2218:43 | Address | &:r2218_1 | -| ir.cpp:2218:42:2218:43 | Address | &:r2218_61 | -| ir.cpp:2218:42:2218:43 | Address | &:r2218_61 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_57 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_57 | | ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_1 | -| ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_61 | -| ir.cpp:2218:42:2218:43 | CallTarget | func:r2218_62 | -| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_64 | -| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_67 | +| ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_57 | +| ir.cpp:2218:42:2218:43 | CallTarget | func:r2218_58 | +| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_60 | +| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_63 | | ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_13 | -| ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_57 | +| ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_53 | | ir.cpp:2218:42:2218:43 | SideEffect | m2218_13 | -| ir.cpp:2218:42:2218:43 | SideEffect | ~m2218_57 | +| ir.cpp:2218:42:2218:43 | SideEffect | ~m2218_53 | | ir.cpp:2218:45:2218:45 | Address | &:r2218_4 | | ir.cpp:2218:45:2218:45 | Address | &:r2218_4 | | ir.cpp:2218:45:2218:45 | Address | &:r2218_5 | @@ -11331,22 +11302,22 @@ | ir.cpp:2218:45:2218:46 | CallTarget | func:r2218_3 | | ir.cpp:2218:45:2218:46 | ChiPartial | partial:m2218_10 | | ir.cpp:2218:45:2218:46 | ChiPartial | partial:m2218_12 | -| ir.cpp:2218:45:2218:46 | ChiTotal | total:m2215_43 | +| ir.cpp:2218:45:2218:46 | ChiTotal | total:m2215_38 | | ir.cpp:2218:45:2218:46 | ChiTotal | total:m2218_2 | -| ir.cpp:2218:45:2218:46 | SideEffect | ~m2215_43 | -| ir.cpp:2218:69:2218:69 | Address | &:r2218_45 | -| ir.cpp:2218:69:2218:69 | Address | &:r2218_53 | -| ir.cpp:2218:69:2218:69 | Address | &:r2218_53 | -| ir.cpp:2218:69:2218:69 | Address | &:r2218_69 | -| ir.cpp:2218:69:2218:69 | Address | &:r2218_69 | -| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_53 | -| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_69 | -| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_54 | -| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_70 | -| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_56 | -| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_59 | -| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_72 | -| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_75 | +| ir.cpp:2218:45:2218:46 | SideEffect | ~m2215_38 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_43 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_49 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_49 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_65 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_65 | +| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_49 | +| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_65 | +| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_50 | +| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_66 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_52 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_55 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_68 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_71 | | ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_5 | | ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_5 | | ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_8 | @@ -11357,67 +11328,58 @@ | ir.cpp:2218:69:2218:69 | SideEffect | ~m2220_5 | | ir.cpp:2218:73:2218:73 | Address | &:r2218_19 | | ir.cpp:2218:73:2218:73 | Address | &:r2218_25 | -| ir.cpp:2218:73:2218:73 | Address | &:r2218_48 | -| ir.cpp:2218:73:2218:73 | Address | &:r2218_77 | -| ir.cpp:2218:73:2218:73 | Address | &:r2218_77 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_46 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_73 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_73 | | ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_18 | | ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_21 | | ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_23 | | ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_24 | | ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_31 | -| ir.cpp:2218:73:2218:73 | Arg(this) | this:r2218_77 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r2218_73 | | ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_21 | | ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_27 | | ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_33 | | ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_34 | -| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_47 | -| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_78 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_45 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_74 | | ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_37 | | ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_39 | -| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_42 | -| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_49 | -| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_80 | -| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_83 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_77 | | ir.cpp:2218:73:2218:73 | ChiTotal | total:m0_25 | | ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_30 | | ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_31 | -| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_38 | -| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_43 | -| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_73 | | ir.cpp:2218:73:2218:73 | Condition | r2218_41 | | ir.cpp:2218:73:2218:73 | Load | m2218_17 | | ir.cpp:2218:73:2218:73 | Load | m2218_17 | | ir.cpp:2218:73:2218:73 | Phi | from 10:m2218_23 | | ir.cpp:2218:73:2218:73 | Phi | from 10:~m2218_11 | -| ir.cpp:2218:73:2218:73 | Phi | from 14:m2218_84 | -| ir.cpp:2218:73:2218:73 | Phi | from 14:~m2218_81 | +| ir.cpp:2218:73:2218:73 | Phi | from 14:m2218_78 | +| ir.cpp:2218:73:2218:73 | Phi | from 14:~m2218_69 | | ir.cpp:2218:73:2218:73 | SideEffect | m2218_30 | | ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_31 | -| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_38 | -| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_43 | -| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_73 | | ir.cpp:2218:73:2218:73 | StoreValue | r2218_22 | | ir.cpp:2218:73:2218:73 | StoreValue | r2218_28 | | ir.cpp:2218:73:2218:73 | Unary | r2218_20 | | ir.cpp:2218:73:2218:73 | Unary | r2218_26 | | ir.cpp:2218:73:2218:73 | Unary | r2218_32 | | ir.cpp:2218:73:2218:73 | Unary | r2218_35 | -| ir.cpp:2218:73:2218:73 | Unary | r2218_46 | -| ir.cpp:2218:73:2218:73 | Unary | r2218_79 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_44 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_75 | | ir.cpp:2218:73:2218:74 | StoreValue | r2218_16 | | ir.cpp:2218:73:2218:74 | Unary | r2218_15 | -| ir.cpp:2218:73:2218:75 | Load | ~m2218_50 | -| ir.cpp:2218:73:2218:75 | StoreValue | r2218_51 | +| ir.cpp:2218:73:2218:75 | Load | ~m2218_38 | +| ir.cpp:2218:73:2218:75 | StoreValue | r2218_47 | | ir.cpp:2219:7:2219:7 | Address | &:r2219_1 | | ir.cpp:2219:7:2219:7 | Address | &:r2219_1 | | ir.cpp:2219:7:2219:7 | Arg(this) | this:r2219_1 | | ir.cpp:2219:7:2219:7 | ChiPartial | partial:m2219_8 | -| ir.cpp:2219:7:2219:7 | ChiTotal | total:m2218_52 | -| ir.cpp:2219:7:2219:7 | SideEffect | m2218_52 | +| ir.cpp:2219:7:2219:7 | ChiTotal | total:m2218_48 | +| ir.cpp:2219:7:2219:7 | SideEffect | m2218_48 | | ir.cpp:2219:9:2219:13 | CallTarget | func:r2219_2 | | ir.cpp:2219:9:2219:13 | ChiPartial | partial:m2219_5 | -| ir.cpp:2219:9:2219:13 | ChiTotal | total:m2218_50 | -| ir.cpp:2219:9:2219:13 | SideEffect | ~m2218_50 | +| ir.cpp:2219:9:2219:13 | ChiTotal | total:m2218_38 | +| ir.cpp:2219:9:2219:13 | SideEffect | ~m2218_38 | | ir.cpp:2219:15:2219:17 | Arg(0) | 0:r2219_3 | | ir.cpp:2220:11:2220:11 | Address | &:r2220_1 | | ir.cpp:2220:11:2220:11 | Address | &:r2220_1 | @@ -11438,81 +11400,72 @@ | ir.cpp:2224:5:2224:5 | Address | &:r2224_20 | | ir.cpp:2224:26:2224:27 | Address | &:r2224_1 | | ir.cpp:2224:26:2224:27 | Address | &:r2224_1 | -| ir.cpp:2224:26:2224:27 | Address | &:r2224_58 | -| ir.cpp:2224:26:2224:27 | Address | &:r2224_58 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_52 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_52 | | ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_1 | -| ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_58 | -| ir.cpp:2224:26:2224:27 | CallTarget | func:r2224_59 | -| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_61 | -| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_64 | +| ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_52 | +| ir.cpp:2224:26:2224:27 | CallTarget | func:r2224_53 | +| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_55 | +| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_58 | | ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_9 | -| ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_55 | +| ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_34 | | ir.cpp:2224:26:2224:27 | SideEffect | m2224_9 | -| ir.cpp:2224:26:2224:27 | SideEffect | ~m2224_55 | +| ir.cpp:2224:26:2224:27 | SideEffect | ~m2224_34 | | ir.cpp:2224:29:2224:29 | Arg(0) | 0:r2224_4 | | ir.cpp:2224:29:2224:30 | CallTarget | func:r2224_3 | | ir.cpp:2224:29:2224:30 | ChiPartial | partial:m2224_6 | | ir.cpp:2224:29:2224:30 | ChiPartial | partial:m2224_8 | -| ir.cpp:2224:29:2224:30 | ChiTotal | total:m2218_43 | +| ir.cpp:2224:29:2224:30 | ChiTotal | total:m2218_38 | | ir.cpp:2224:29:2224:30 | ChiTotal | total:m2224_2 | -| ir.cpp:2224:29:2224:30 | SideEffect | ~m2218_43 | -| ir.cpp:2224:37:2224:37 | Address | &:r2224_50 | +| ir.cpp:2224:29:2224:30 | SideEffect | ~m2218_38 | +| ir.cpp:2224:37:2224:37 | Address | &:r2224_46 | | ir.cpp:2224:41:2224:41 | Address | &:r2224_15 | | ir.cpp:2224:41:2224:41 | Address | &:r2224_21 | -| ir.cpp:2224:41:2224:41 | Address | &:r2224_41 | -| ir.cpp:2224:41:2224:41 | Address | &:r2224_41 | -| ir.cpp:2224:41:2224:41 | Address | &:r2224_53 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_39 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_39 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_49 | | ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_34 | | ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_37 | | ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_39 | | ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_40 | | ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_47 | -| ir.cpp:2224:41:2224:41 | Arg(this) | this:r2224_41 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r2224_39 | | ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_17 | | ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_23 | | ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_29 | | ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_30 | -| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_42 | -| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_52 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_40 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_48 | | ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_33 | | ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_35 | -| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_38 | -| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_44 | -| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_47 | -| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_54 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_43 | | ir.cpp:2224:41:2224:41 | ChiTotal | total:m0_41 | | ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_26 | | ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_27 | -| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_34 | -| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_39 | -| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_55 | | ir.cpp:2224:41:2224:41 | Condition | r2224_37 | | ir.cpp:2224:41:2224:41 | Load | m2224_13 | | ir.cpp:2224:41:2224:41 | Load | m2224_13 | | ir.cpp:2224:41:2224:41 | Phi | from 15:m2224_19 | | ir.cpp:2224:41:2224:41 | Phi | from 15:~m2224_7 | -| ir.cpp:2224:41:2224:41 | Phi | from 17:m2224_48 | -| ir.cpp:2224:41:2224:41 | Phi | from 17:~m2224_45 | +| ir.cpp:2224:41:2224:41 | Phi | from 17:m2224_44 | +| ir.cpp:2224:41:2224:41 | Phi | from 17:~m2224_34 | | ir.cpp:2224:41:2224:41 | SideEffect | m2224_26 | | ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_27 | -| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_34 | -| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_39 | -| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_55 | | ir.cpp:2224:41:2224:41 | StoreValue | r2224_18 | | ir.cpp:2224:41:2224:41 | StoreValue | r2224_24 | | ir.cpp:2224:41:2224:41 | Unary | r2224_16 | | ir.cpp:2224:41:2224:41 | Unary | r2224_22 | | ir.cpp:2224:41:2224:41 | Unary | r2224_28 | | ir.cpp:2224:41:2224:41 | Unary | r2224_31 | -| ir.cpp:2224:41:2224:41 | Unary | r2224_43 | -| ir.cpp:2224:41:2224:41 | Unary | r2224_51 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_41 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_47 | | ir.cpp:2224:41:2224:42 | StoreValue | r2224_12 | | ir.cpp:2224:41:2224:42 | Unary | r2224_11 | -| ir.cpp:2224:41:2224:43 | Load | ~m2224_55 | -| ir.cpp:2224:41:2224:43 | StoreValue | r2224_56 | +| ir.cpp:2224:41:2224:43 | Load | ~m2224_34 | +| ir.cpp:2224:41:2224:43 | StoreValue | r2224_50 | | ir.cpp:2225:11:2225:11 | Address | &:r2225_1 | | ir.cpp:2225:11:2225:11 | Left | r2225_2 | -| ir.cpp:2225:11:2225:11 | Load | m2224_57 | +| ir.cpp:2225:11:2225:11 | Load | m2224_51 | | ir.cpp:2225:11:2225:16 | Condition | r2225_4 | | ir.cpp:2225:16:2225:16 | Right | r2225_3 | | ir.cpp:2229:5:2229:5 | Address | &:r2229_14 | @@ -11531,82 +11484,73 @@ | ir.cpp:2229:45:2229:46 | CallTarget | func:r2229_3 | | ir.cpp:2229:45:2229:46 | ChiPartial | partial:m2229_10 | | ir.cpp:2229:45:2229:46 | ChiPartial | partial:m2229_12 | -| ir.cpp:2229:45:2229:46 | ChiTotal | total:m2224_39 | +| ir.cpp:2229:45:2229:46 | ChiTotal | total:m2224_34 | | ir.cpp:2229:45:2229:46 | ChiTotal | total:m2229_2 | -| ir.cpp:2229:45:2229:46 | SideEffect | ~m2224_39 | -| ir.cpp:2229:69:2229:69 | Address | &:r2229_45 | -| ir.cpp:2229:69:2229:69 | Address | &:r2229_53 | -| ir.cpp:2229:69:2229:69 | Address | &:r2229_53 | -| ir.cpp:2229:69:2229:69 | Arg(this) | this:r2229_53 | -| ir.cpp:2229:69:2229:69 | CallTarget | func:r2229_54 | -| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_56 | -| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_59 | -| ir.cpp:2229:69:2229:69 | ChiTotal | total:m2229_52 | +| ir.cpp:2229:45:2229:46 | SideEffect | ~m2224_34 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_43 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_49 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_49 | +| ir.cpp:2229:69:2229:69 | Arg(this) | this:r2229_49 | +| ir.cpp:2229:69:2229:69 | CallTarget | func:r2229_50 | +| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_52 | +| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_55 | +| ir.cpp:2229:69:2229:69 | ChiTotal | total:m2229_48 | | ir.cpp:2229:69:2229:69 | ChiTotal | total:m2232_13 | -| ir.cpp:2229:69:2229:69 | SideEffect | m2229_52 | +| ir.cpp:2229:69:2229:69 | SideEffect | m2229_48 | | ir.cpp:2229:69:2229:69 | SideEffect | ~m2232_13 | | ir.cpp:2229:73:2229:73 | Address | &:r2229_19 | | ir.cpp:2229:73:2229:73 | Address | &:r2229_25 | -| ir.cpp:2229:73:2229:73 | Address | &:r2229_48 | -| ir.cpp:2229:73:2229:73 | Address | &:r2229_61 | -| ir.cpp:2229:73:2229:73 | Address | &:r2229_61 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_46 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_57 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_57 | | ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_50 | | ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_53 | | ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_55 | | ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_56 | | ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_63 | -| ir.cpp:2229:73:2229:73 | Arg(this) | this:r2229_61 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r2229_57 | | ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_21 | | ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_27 | | ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_33 | | ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_34 | -| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_47 | -| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_62 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_45 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_58 | | ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_37 | | ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_39 | -| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_42 | -| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_49 | -| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_64 | -| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_67 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_61 | | ir.cpp:2229:73:2229:73 | ChiTotal | total:m0_57 | | ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_30 | | ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_31 | -| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_38 | -| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_43 | -| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_57 | | ir.cpp:2229:73:2229:73 | Condition | r2229_41 | | ir.cpp:2229:73:2229:73 | Load | m2229_17 | | ir.cpp:2229:73:2229:73 | Load | m2229_17 | | ir.cpp:2229:73:2229:73 | Phi | from 20:m2229_23 | | ir.cpp:2229:73:2229:73 | Phi | from 20:~m2229_11 | -| ir.cpp:2229:73:2229:73 | Phi | from 22:m2229_68 | -| ir.cpp:2229:73:2229:73 | Phi | from 22:~m2229_65 | +| ir.cpp:2229:73:2229:73 | Phi | from 22:m2229_62 | +| ir.cpp:2229:73:2229:73 | Phi | from 22:~m2229_53 | | ir.cpp:2229:73:2229:73 | SideEffect | m2229_30 | | ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_31 | -| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_38 | -| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_43 | -| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_57 | | ir.cpp:2229:73:2229:73 | StoreValue | r2229_22 | | ir.cpp:2229:73:2229:73 | StoreValue | r2229_28 | | ir.cpp:2229:73:2229:73 | Unary | r2229_20 | | ir.cpp:2229:73:2229:73 | Unary | r2229_26 | | ir.cpp:2229:73:2229:73 | Unary | r2229_32 | | ir.cpp:2229:73:2229:73 | Unary | r2229_35 | -| ir.cpp:2229:73:2229:73 | Unary | r2229_46 | -| ir.cpp:2229:73:2229:73 | Unary | r2229_63 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_44 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_59 | | ir.cpp:2229:73:2229:74 | StoreValue | r2229_16 | | ir.cpp:2229:73:2229:74 | Unary | r2229_15 | -| ir.cpp:2229:73:2229:75 | Load | ~m2229_50 | -| ir.cpp:2229:73:2229:75 | StoreValue | r2229_51 | +| ir.cpp:2229:73:2229:75 | Load | ~m2229_38 | +| ir.cpp:2229:73:2229:75 | StoreValue | r2229_47 | | ir.cpp:2230:27:2230:28 | Address | &:r2230_1 | | ir.cpp:2230:27:2230:28 | Address | &:r2230_1 | | ir.cpp:2230:27:2230:28 | Arg(this) | this:r2230_1 | | ir.cpp:2230:27:2230:28 | CallTarget | func:r2230_3 | | ir.cpp:2230:27:2230:28 | ChiPartial | partial:m2230_5 | | ir.cpp:2230:27:2230:28 | ChiPartial | partial:m2230_7 | -| ir.cpp:2230:27:2230:28 | ChiTotal | total:m2229_50 | +| ir.cpp:2230:27:2230:28 | ChiTotal | total:m2229_38 | | ir.cpp:2230:27:2230:28 | ChiTotal | total:m2230_2 | -| ir.cpp:2230:27:2230:28 | SideEffect | ~m2229_50 | +| ir.cpp:2230:27:2230:28 | SideEffect | ~m2229_38 | | ir.cpp:2231:27:2231:28 | Address | &:r2231_1 | | ir.cpp:2231:27:2231:28 | Address | &:r2231_1 | | ir.cpp:2231:27:2231:28 | Arg(this) | this:r2231_1 | @@ -11657,15 +11601,15 @@ | ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | | ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | | ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | -| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2218_65 | -| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2224_62 | -| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2229_43 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2218_61 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2224_56 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2229_38 | | ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | | ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | | ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | -| ir.cpp:2233:1:2233:1 | SideEffect | ~m2218_65 | -| ir.cpp:2233:1:2233:1 | SideEffect | ~m2224_62 | -| ir.cpp:2233:1:2233:1 | SideEffect | ~m2229_43 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2218_61 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2224_56 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2229_38 | | ir.cpp:2235:6:2235:38 | ChiPartial | partial:m2235_3 | | ir.cpp:2235:6:2235:38 | ChiTotal | total:m2235_2 | | ir.cpp:2235:6:2235:38 | SideEffect | ~m2238_7 | @@ -12171,74 +12115,65 @@ | ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | | ir.cpp:2307:5:2307:5 | Address | &:r2307_24 | | ir.cpp:2307:5:2307:5 | Address | &:r2307_30 | -| ir.cpp:2307:16:2307:16 | Address | &:r2307_51 | -| ir.cpp:2307:16:2307:16 | Address | &:r2307_51 | -| ir.cpp:2307:16:2307:16 | Address | &:r2307_68 | -| ir.cpp:2307:16:2307:16 | Address | &:r2307_68 | -| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_51 | -| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_68 | -| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_53 | -| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_69 | -| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_63 | -| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_66 | -| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_71 | -| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_74 | -| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_52 | -| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_58 | -| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_67 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_49 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_49 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_64 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_64 | +| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_49 | +| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_64 | +| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_51 | +| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_65 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_59 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_62 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_67 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_70 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_44 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_50 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_63 | | ir.cpp:2307:16:2307:16 | ChiTotal | total:m2309_5 | -| ir.cpp:2307:16:2307:16 | SideEffect | m2307_67 | -| ir.cpp:2307:16:2307:16 | SideEffect | ~m2307_58 | +| ir.cpp:2307:16:2307:16 | SideEffect | m2307_63 | +| ir.cpp:2307:16:2307:16 | SideEffect | ~m2307_44 | | ir.cpp:2307:16:2307:16 | SideEffect | ~m2309_5 | | ir.cpp:2307:20:2307:20 | Address | &:r2307_25 | | ir.cpp:2307:20:2307:20 | Address | &:r2307_31 | -| ir.cpp:2307:20:2307:20 | Address | &:r2307_76 | -| ir.cpp:2307:20:2307:20 | Address | &:r2307_76 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_72 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_72 | | ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_2 | | ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_5 | | ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_7 | | ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_8 | | ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_15 | -| ir.cpp:2307:20:2307:20 | Arg(this) | this:r2307_76 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r2307_72 | | ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_27 | | ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_33 | | ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_39 | | ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_40 | -| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_55 | -| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_77 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_53 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_73 | | ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_43 | | ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_45 | -| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_48 | -| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_57 | -| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_79 | -| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_82 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_76 | | ir.cpp:2307:20:2307:20 | ChiTotal | total:m0_9 | | ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_36 | | ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_37 | -| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_44 | -| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_49 | -| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_72 | | ir.cpp:2307:20:2307:20 | Condition | r2307_47 | | ir.cpp:2307:20:2307:20 | Load | m2307_23 | | ir.cpp:2307:20:2307:20 | Load | m2307_23 | | ir.cpp:2307:20:2307:20 | Phi | from 3:m2307_29 | | ir.cpp:2307:20:2307:20 | Phi | from 3:~m2307_19 | -| ir.cpp:2307:20:2307:20 | Phi | from 5:m2307_83 | -| ir.cpp:2307:20:2307:20 | Phi | from 5:~m2307_80 | +| ir.cpp:2307:20:2307:20 | Phi | from 5:m2307_77 | +| ir.cpp:2307:20:2307:20 | Phi | from 5:~m2307_68 | | ir.cpp:2307:20:2307:20 | SideEffect | m2307_36 | | ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_37 | -| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_44 | -| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_49 | -| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_72 | | ir.cpp:2307:20:2307:20 | StoreValue | r2307_28 | | ir.cpp:2307:20:2307:20 | StoreValue | r2307_34 | | ir.cpp:2307:20:2307:20 | Unary | r2307_26 | | ir.cpp:2307:20:2307:20 | Unary | r2307_32 | | ir.cpp:2307:20:2307:20 | Unary | r2307_38 | | ir.cpp:2307:20:2307:20 | Unary | r2307_41 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_52 | | ir.cpp:2307:20:2307:20 | Unary | r2307_54 | -| ir.cpp:2307:20:2307:20 | Unary | r2307_56 | -| ir.cpp:2307:20:2307:20 | Unary | r2307_78 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_74 | | ir.cpp:2307:20:2307:55 | Address | &:r2307_2 | | ir.cpp:2307:20:2307:55 | Address | &:r2307_2 | | ir.cpp:2307:20:2307:55 | Arg(this) | this:r2307_2 | @@ -12250,11 +12185,11 @@ | ir.cpp:2307:20:2307:55 | SideEffect | ~m2307_12 | | ir.cpp:2307:20:2307:55 | StoreValue | r2307_22 | | ir.cpp:2307:20:2307:55 | Unary | r2307_2 | -| ir.cpp:2307:20:2307:56 | Address | &:r2307_61 | -| ir.cpp:2307:20:2307:56 | Arg(0) | 0:r2307_61 | -| ir.cpp:2307:20:2307:56 | SideEffect | ~m2307_64 | -| ir.cpp:2307:20:2307:56 | Unary | r2307_59 | -| ir.cpp:2307:20:2307:56 | Unary | r2307_60 | +| ir.cpp:2307:20:2307:56 | Address | &:r2307_57 | +| ir.cpp:2307:20:2307:56 | Arg(0) | 0:r2307_57 | +| ir.cpp:2307:20:2307:56 | SideEffect | ~m2307_60 | +| ir.cpp:2307:20:2307:56 | Unary | r2307_55 | +| ir.cpp:2307:20:2307:56 | Unary | r2307_56 | | ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | | ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | | ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | @@ -12277,9 +12212,9 @@ | ir.cpp:2308:16:2308:17 | CallTarget | func:r2308_3 | | ir.cpp:2308:16:2308:17 | ChiPartial | partial:m2308_5 | | ir.cpp:2308:16:2308:17 | ChiPartial | partial:m2308_7 | -| ir.cpp:2308:16:2308:17 | ChiTotal | total:m2307_64 | +| ir.cpp:2308:16:2308:17 | ChiTotal | total:m2307_60 | | ir.cpp:2308:16:2308:17 | ChiTotal | total:m2308_2 | -| ir.cpp:2308:16:2308:17 | SideEffect | ~m2307_64 | +| ir.cpp:2308:16:2308:17 | SideEffect | ~m2307_60 | | ir.cpp:2309:5:2309:5 | Address | &:r2309_1 | | ir.cpp:2309:5:2309:5 | Address | &:r2309_1 | | ir.cpp:2309:5:2309:5 | Arg(this) | this:r2309_1 | @@ -12310,9 +12245,9 @@ | ir.cpp:2311:18:2311:25 | CallTarget | func:r2311_3 | | ir.cpp:2311:18:2311:25 | ChiPartial | partial:m2311_7 | | ir.cpp:2311:18:2311:25 | ChiPartial | partial:m2311_10 | -| ir.cpp:2311:18:2311:25 | ChiTotal | total:m2307_49 | +| ir.cpp:2311:18:2311:25 | ChiTotal | total:m2307_44 | | ir.cpp:2311:18:2311:25 | ChiTotal | total:m2311_2 | -| ir.cpp:2311:18:2311:25 | SideEffect | ~m2307_49 | +| ir.cpp:2311:18:2311:25 | SideEffect | ~m2307_44 | | ir.cpp:2311:28:2311:29 | Address | &:r2311_12 | | ir.cpp:2311:28:2311:29 | Address | &:r2311_12 | | ir.cpp:2311:28:2311:29 | Address | &:r2311_42 | @@ -12710,7 +12645,7 @@ | ir.cpp:2407:12:2407:21 | StoreValue | r2407_2 | | ir.cpp:2410:6:2410:40 | ChiPartial | partial:m2410_3 | | ir.cpp:2410:6:2410:40 | ChiTotal | total:m2410_2 | -| ir.cpp:2410:6:2410:40 | SideEffect | ~m2430_56 | +| ir.cpp:2410:6:2410:40 | SideEffect | ~m2430_51 | | ir.cpp:2411:9:2411:46 | Address | &:r2411_1 | | ir.cpp:2411:9:2411:46 | Condition | r2411_22 | | ir.cpp:2411:14:2411:14 | Address | &:r2411_18 | @@ -12891,56 +12826,47 @@ | ir.cpp:2430:40:2430:44 | ChiTotal | total:m2430_7 | | ir.cpp:2430:40:2430:44 | SideEffect | ~m2430_7 | | ir.cpp:2430:40:2430:44 | StoreValue | r2430_11 | -| ir.cpp:2430:54:2430:54 | Address | &:r2430_58 | +| ir.cpp:2430:54:2430:54 | Address | &:r2430_56 | | ir.cpp:2430:58:2430:58 | Address | &:r2430_32 | | ir.cpp:2430:58:2430:58 | Address | &:r2430_38 | -| ir.cpp:2430:58:2430:58 | Address | &:r2430_61 | -| ir.cpp:2430:58:2430:58 | Address | &:r2430_66 | -| ir.cpp:2430:58:2430:58 | Address | &:r2430_66 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_59 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_62 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_62 | | ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_2 | | ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_5 | | ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_7 | | ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_8 | | ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_15 | -| ir.cpp:2430:58:2430:58 | Arg(this) | this:r2430_66 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r2430_62 | | ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_34 | | ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_40 | | ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_46 | | ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_47 | -| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_60 | -| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_67 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_58 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_63 | | ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_50 | | ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_52 | -| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_55 | -| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_62 | -| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_69 | -| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_72 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_66 | | ir.cpp:2430:58:2430:58 | ChiTotal | total:m0_9 | | ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_43 | | ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_44 | -| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_51 | -| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_56 | -| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_63 | | ir.cpp:2430:58:2430:58 | Condition | r2430_54 | | ir.cpp:2430:58:2430:58 | Load | m2430_30 | | ir.cpp:2430:58:2430:58 | Load | m2430_30 | | ir.cpp:2430:58:2430:58 | Phi | from 9:m2430_36 | | ir.cpp:2430:58:2430:58 | Phi | from 9:~m2430_26 | -| ir.cpp:2430:58:2430:58 | Phi | from 11:m2430_73 | -| ir.cpp:2430:58:2430:58 | Phi | from 11:~m2430_70 | +| ir.cpp:2430:58:2430:58 | Phi | from 11:m2430_67 | +| ir.cpp:2430:58:2430:58 | Phi | from 11:~m2430_51 | | ir.cpp:2430:58:2430:58 | SideEffect | m2430_43 | | ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_44 | -| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_51 | -| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_56 | -| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_63 | | ir.cpp:2430:58:2430:58 | StoreValue | r2430_35 | | ir.cpp:2430:58:2430:58 | StoreValue | r2430_41 | | ir.cpp:2430:58:2430:58 | Unary | r2430_33 | | ir.cpp:2430:58:2430:58 | Unary | r2430_39 | | ir.cpp:2430:58:2430:58 | Unary | r2430_45 | | ir.cpp:2430:58:2430:58 | Unary | r2430_48 | -| ir.cpp:2430:58:2430:58 | Unary | r2430_59 | -| ir.cpp:2430:58:2430:58 | Unary | r2430_68 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_57 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_64 | | ir.cpp:2430:58:2430:77 | Address | &:r2430_19 | | ir.cpp:2430:58:2430:77 | Address | &:r2430_19 | | ir.cpp:2430:58:2430:77 | Arg(this) | this:r2430_19 | @@ -12952,14 +12878,14 @@ | ir.cpp:2430:58:2430:77 | SideEffect | ~m2430_13 | | ir.cpp:2430:58:2430:77 | StoreValue | r2430_29 | | ir.cpp:2430:58:2430:77 | Unary | r2430_19 | -| ir.cpp:2430:58:2430:78 | Load | ~m2430_63 | -| ir.cpp:2430:58:2430:78 | StoreValue | r2430_64 | +| ir.cpp:2430:58:2430:78 | Load | ~m2430_51 | +| ir.cpp:2430:58:2430:78 | StoreValue | r2430_60 | | ir.cpp:2430:76:2430:76 | Address | &:r2430_22 | | ir.cpp:2430:76:2430:76 | Arg(0) | 0:r2430_23 | | ir.cpp:2430:76:2430:76 | Load | m2430_17 | | ir.cpp:2431:9:2431:9 | Address | &:r2431_4 | | ir.cpp:2431:9:2431:9 | Address | &:r2431_4 | -| ir.cpp:2431:9:2431:9 | Load | m2430_65 | +| ir.cpp:2431:9:2431:9 | Load | m2430_61 | | ir.cpp:2431:9:2431:9 | Unary | r2431_5 | | ir.cpp:2431:9:2431:14 | Left | r2431_6 | | ir.cpp:2431:9:2431:14 | StoreValue | r2431_8 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 5cd8ff2cd4a6..e3687fd91e0b 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -6910,22 +6910,20 @@ ir.cpp: # 1127| mu1127_25(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 #-----| r0_11(iterator) = Load[#temp0:0] : &:r0_6, ~m? # 1127| r1127_26(bool) = Call[operator!=] : func:r1127_20, this:r0_5, 0:r0_11 -# 1127| mu1127_27(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 1127| v1127_28(void) = ConditionalBranch : r1127_26 +# 1127| v1127_27(void) = ConditionalBranch : r1127_26 #-----| False -> Block 5 #-----| True -> Block 2 # 1127| Block 2 -# 1127| r1127_29(glval) = VariableAddress[e] : -# 1127| r1127_30(glval>) = VariableAddress[(__begin)] : -#-----| r0_13(glval>) = Convert : r1127_30 -# 1127| r1127_31(glval) = FunctionAddress[operator*] : -# 1127| r1127_32(int &) = Call[operator*] : func:r1127_31, this:r0_13 -# 1127| mu1127_33(unknown) = ^CallSideEffect : ~m? +# 1127| r1127_28(glval) = VariableAddress[e] : +# 1127| r1127_29(glval>) = VariableAddress[(__begin)] : +#-----| r0_13(glval>) = Convert : r1127_29 +# 1127| r1127_30(glval) = FunctionAddress[operator*] : +# 1127| r1127_31(int &) = Call[operator*] : func:r1127_30, this:r0_13 #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? -# 1127| r1127_34(int) = Load[?] : &:r1127_32, ~m? -# 1127| mu1127_35(int) = Store[e] : &:r1127_29, r1127_34 +# 1127| r1127_32(int) = Load[?] : &:r1127_31, ~m? +# 1127| mu1127_33(int) = Store[e] : &:r1127_28, r1127_32 # 1128| r1128_1(glval) = VariableAddress[e] : # 1128| r1128_2(int) = Load[e] : &:r1128_1, ~m? # 1128| r1128_3(int) = Constant[0] : @@ -6939,14 +6937,13 @@ ir.cpp: #-----| Goto -> Block 4 # 1127| Block 4 -# 1127| v1127_36(void) = NoOp : -# 1127| r1127_37(glval>) = VariableAddress[(__begin)] : -# 1127| r1127_38(glval) = FunctionAddress[operator++] : -# 1127| r1127_39(iterator &) = Call[operator++] : func:r1127_38, this:r1127_37 -# 1127| mu1127_40(unknown) = ^CallSideEffect : ~m? -# 1127| v1127_41(void) = ^IndirectReadSideEffect[-1] : &:r1127_37, ~m? -# 1127| mu1127_42(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_37 -# 1127| r1127_43(glval>) = CopyValue : r1127_39 +# 1127| v1127_34(void) = NoOp : +# 1127| r1127_35(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_36(glval) = FunctionAddress[operator++] : +# 1127| r1127_37(iterator &) = Call[operator++] : func:r1127_36, this:r1127_35 +# 1127| v1127_38(void) = ^IndirectReadSideEffect[-1] : &:r1127_35, ~m? +# 1127| mu1127_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_35 +# 1127| r1127_40(glval>) = CopyValue : r1127_37 #-----| Goto (back edge) -> Block 1 # 1133| Block 5 @@ -6990,34 +6987,31 @@ ir.cpp: # 1133| mu1133_25(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 #-----| r0_25(iterator) = Load[#temp0:0] : &:r0_20, ~m? # 1133| r1133_26(bool) = Call[operator!=] : func:r1133_20, this:r0_19, 0:r0_25 -# 1133| mu1133_27(unknown) = ^CallSideEffect : ~m? #-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? -# 1133| v1133_28(void) = ConditionalBranch : r1133_26 +# 1133| v1133_27(void) = ConditionalBranch : r1133_26 #-----| False -> Block 10 #-----| True -> Block 8 # 1133| Block 7 -# 1133| r1133_29(glval>) = VariableAddress[(__begin)] : -# 1133| r1133_30(glval) = FunctionAddress[operator++] : -# 1133| r1133_31(iterator &) = Call[operator++] : func:r1133_30, this:r1133_29 -# 1133| mu1133_32(unknown) = ^CallSideEffect : ~m? -# 1133| v1133_33(void) = ^IndirectReadSideEffect[-1] : &:r1133_29, ~m? -# 1133| mu1133_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_29 -# 1133| r1133_35(glval>) = CopyValue : r1133_31 +# 1133| r1133_28(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_29(glval) = FunctionAddress[operator++] : +# 1133| r1133_30(iterator &) = Call[operator++] : func:r1133_29, this:r1133_28 +# 1133| v1133_31(void) = ^IndirectReadSideEffect[-1] : &:r1133_28, ~m? +# 1133| mu1133_32(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_28 +# 1133| r1133_33(glval>) = CopyValue : r1133_30 #-----| Goto (back edge) -> Block 6 # 1133| Block 8 -# 1133| r1133_36(glval) = VariableAddress[e] : -# 1133| r1133_37(glval>) = VariableAddress[(__begin)] : -#-----| r0_27(glval>) = Convert : r1133_37 -# 1133| r1133_38(glval) = FunctionAddress[operator*] : -# 1133| r1133_39(int &) = Call[operator*] : func:r1133_38, this:r0_27 -# 1133| mu1133_40(unknown) = ^CallSideEffect : ~m? +# 1133| r1133_34(glval) = VariableAddress[e] : +# 1133| r1133_35(glval>) = VariableAddress[(__begin)] : +#-----| r0_27(glval>) = Convert : r1133_35 +# 1133| r1133_36(glval) = FunctionAddress[operator*] : +# 1133| r1133_37(int &) = Call[operator*] : func:r1133_36, this:r0_27 #-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? -# 1133| r1133_41(glval) = CopyValue : r1133_39 -# 1133| r1133_42(glval) = Convert : r1133_41 -# 1133| r1133_43(int &) = CopyValue : r1133_42 -# 1133| mu1133_44(int &) = Store[e] : &:r1133_36, r1133_43 +# 1133| r1133_38(glval) = CopyValue : r1133_37 +# 1133| r1133_39(glval) = Convert : r1133_38 +# 1133| r1133_40(int &) = CopyValue : r1133_39 +# 1133| mu1133_41(int &) = Store[e] : &:r1133_34, r1133_40 # 1134| r1134_1(glval) = VariableAddress[e] : # 1134| r1134_2(int &) = Load[e] : &:r1134_1, ~m? # 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m? @@ -12620,22 +12614,20 @@ ir.cpp: # 2215| mu2215_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? # 2215| r2215_35(bool) = Call[operator!=] : func:r2215_29, this:r0_7, 0:r0_13 -# 2215| mu2215_36(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2215| v2215_37(void) = ConditionalBranch : r2215_35 +# 2215| v2215_36(void) = ConditionalBranch : r2215_35 #-----| False -> Block 14 #-----| True -> Block 12 # 2215| Block 12 -# 2215| r2215_38(glval) = VariableAddress[y] : -# 2215| r2215_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2215_39 -# 2215| r2215_40(glval) = FunctionAddress[operator*] : -# 2215| r2215_41(ClassWithDestructor &) = Call[operator*] : func:r2215_40, this:r0_15 -# 2215| mu2215_42(unknown) = ^CallSideEffect : ~m? +# 2215| r2215_37(glval) = VariableAddress[y] : +# 2215| r2215_38(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2215_38 +# 2215| r2215_39(glval) = FunctionAddress[operator*] : +# 2215| r2215_40(ClassWithDestructor &) = Call[operator*] : func:r2215_39, this:r0_15 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2215| r2215_43(ClassWithDestructor) = Load[?] : &:r2215_41, ~m? -# 2215| mu2215_44(ClassWithDestructor) = Store[y] : &:r2215_38, r2215_43 +# 2215| r2215_41(ClassWithDestructor) = Load[?] : &:r2215_40, ~m? +# 2215| mu2215_42(ClassWithDestructor) = Store[y] : &:r2215_37, r2215_41 # 2216| r2216_1(glval) = VariableAddress[y] : # 2216| r2216_2(glval) = FunctionAddress[set_x] : # 2216| r2216_3(char) = Constant[97] : @@ -12643,28 +12635,27 @@ ir.cpp: # 2216| mu2216_5(unknown) = ^CallSideEffect : ~m? # 2216| v2216_6(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, ~m? # 2216| mu2216_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2215| r2215_45(glval) = VariableAddress[y] : -# 2215| r2215_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2215| v2215_47(void) = Call[~ClassWithDestructor] : func:r2215_46, this:r2215_45 -# 2215| mu2215_48(unknown) = ^CallSideEffect : ~m? -# 2215| v2215_49(void) = ^IndirectReadSideEffect[-1] : &:r2215_45, ~m? -# 2215| mu2215_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_45 -# 2215| r2215_51(glval>) = VariableAddress[(__begin)] : -# 2215| r2215_52(glval) = FunctionAddress[operator++] : -# 2215| r2215_53(iterator &) = Call[operator++] : func:r2215_52, this:r2215_51 -# 2215| mu2215_54(unknown) = ^CallSideEffect : ~m? -# 2215| v2215_55(void) = ^IndirectReadSideEffect[-1] : &:r2215_51, ~m? -# 2215| mu2215_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_51 -# 2215| r2215_57(glval>) = CopyValue : r2215_53 +# 2215| r2215_43(glval) = VariableAddress[y] : +# 2215| r2215_44(glval) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_45(void) = Call[~ClassWithDestructor] : func:r2215_44, this:r2215_43 +# 2215| mu2215_46(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_47(void) = ^IndirectReadSideEffect[-1] : &:r2215_43, ~m? +# 2215| mu2215_48(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_43 +# 2215| r2215_49(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_50(glval) = FunctionAddress[operator++] : +# 2215| r2215_51(iterator &) = Call[operator++] : func:r2215_50, this:r2215_49 +# 2215| v2215_52(void) = ^IndirectReadSideEffect[-1] : &:r2215_49, ~m? +# 2215| mu2215_53(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_49 +# 2215| r2215_54(glval>) = CopyValue : r2215_51 #-----| Goto (back edge) -> Block 11 # 2215| Block 13 -# 2215| r2215_58(glval>) = VariableAddress[ys] : -# 2215| r2215_59(glval) = FunctionAddress[~vector] : -# 2215| v2215_60(void) = Call[~vector] : func:r2215_59, this:r2215_58 -# 2215| mu2215_61(unknown) = ^CallSideEffect : ~m? -# 2215| v2215_62(void) = ^IndirectReadSideEffect[-1] : &:r2215_58, ~m? -# 2215| mu2215_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_58 +# 2215| r2215_55(glval>) = VariableAddress[ys] : +# 2215| r2215_56(glval) = FunctionAddress[~vector] : +# 2215| v2215_57(void) = Call[~vector] : func:r2215_56, this:r2215_55 +# 2215| mu2215_58(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_59(void) = ^IndirectReadSideEffect[-1] : &:r2215_55, ~m? +# 2215| mu2215_60(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_55 #-----| Goto -> Block 14 # 2218| Block 14 @@ -12719,22 +12710,20 @@ ir.cpp: # 2218| mu2218_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 #-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? # 2218| r2218_35(bool) = Call[operator!=] : func:r2218_29, this:r0_23, 0:r0_29 -# 2218| mu2218_36(unknown) = ^CallSideEffect : ~m? #-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? -# 2218| v2218_37(void) = ConditionalBranch : r2218_35 +# 2218| v2218_36(void) = ConditionalBranch : r2218_35 #-----| False -> Block 20 #-----| True -> Block 16 # 2218| Block 16 -# 2218| r2218_38(glval) = VariableAddress[y] : -# 2218| r2218_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_31(glval>) = Convert : r2218_39 -# 2218| r2218_40(glval) = FunctionAddress[operator*] : -# 2218| r2218_41(ClassWithDestructor &) = Call[operator*] : func:r2218_40, this:r0_31 -# 2218| mu2218_42(unknown) = ^CallSideEffect : ~m? +# 2218| r2218_37(glval) = VariableAddress[y] : +# 2218| r2218_38(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2218_38 +# 2218| r2218_39(glval) = FunctionAddress[operator*] : +# 2218| r2218_40(ClassWithDestructor &) = Call[operator*] : func:r2218_39, this:r0_31 #-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? -# 2218| r2218_43(ClassWithDestructor) = Load[?] : &:r2218_41, ~m? -# 2218| mu2218_44(ClassWithDestructor) = Store[y] : &:r2218_38, r2218_43 +# 2218| r2218_41(ClassWithDestructor) = Load[?] : &:r2218_40, ~m? +# 2218| mu2218_42(ClassWithDestructor) = Store[y] : &:r2218_37, r2218_41 # 2219| r2219_1(glval) = VariableAddress[y] : # 2219| r2219_2(glval) = FunctionAddress[set_x] : # 2219| r2219_3(char) = Constant[97] : @@ -12757,18 +12746,18 @@ ir.cpp: # 2221| Block 17 # 2221| v2221_1(void) = NoOp : -# 2218| r2218_45(glval) = VariableAddress[y] : -# 2218| r2218_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_47(void) = Call[~ClassWithDestructor] : func:r2218_46, this:r2218_45 -# 2218| mu2218_48(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_49(void) = ^IndirectReadSideEffect[-1] : &:r2218_45, ~m? -# 2218| mu2218_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_45 -# 2218| r2218_51(glval>) = VariableAddress[ys] : -# 2218| r2218_52(glval) = FunctionAddress[~vector] : -# 2218| v2218_53(void) = Call[~vector] : func:r2218_52, this:r2218_51 -# 2218| mu2218_54(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_55(void) = ^IndirectReadSideEffect[-1] : &:r2218_51, ~m? -# 2218| mu2218_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_51 +# 2218| r2218_43(glval) = VariableAddress[y] : +# 2218| r2218_44(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_45(void) = Call[~ClassWithDestructor] : func:r2218_44, this:r2218_43 +# 2218| mu2218_46(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_47(void) = ^IndirectReadSideEffect[-1] : &:r2218_43, ~m? +# 2218| mu2218_48(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_43 +# 2218| r2218_49(glval>) = VariableAddress[ys] : +# 2218| r2218_50(glval) = FunctionAddress[~vector] : +# 2218| v2218_51(void) = Call[~vector] : func:r2218_50, this:r2218_49 +# 2218| mu2218_52(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_53(void) = ^IndirectReadSideEffect[-1] : &:r2218_49, ~m? +# 2218| mu2218_54(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_49 # 2233| r2233_1(glval) = VariableAddress[x] : # 2233| r2233_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1 @@ -12778,28 +12767,27 @@ ir.cpp: #-----| Goto -> Block 1 # 2218| Block 18 -# 2218| r2218_57(glval) = VariableAddress[y] : -# 2218| r2218_58(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_59(void) = Call[~ClassWithDestructor] : func:r2218_58, this:r2218_57 -# 2218| mu2218_60(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_61(void) = ^IndirectReadSideEffect[-1] : &:r2218_57, ~m? -# 2218| mu2218_62(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_57 -# 2218| r2218_63(glval>) = VariableAddress[(__begin)] : -# 2218| r2218_64(glval) = FunctionAddress[operator++] : -# 2218| r2218_65(iterator &) = Call[operator++] : func:r2218_64, this:r2218_63 -# 2218| mu2218_66(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_67(void) = ^IndirectReadSideEffect[-1] : &:r2218_63, ~m? -# 2218| mu2218_68(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_63 -# 2218| r2218_69(glval>) = CopyValue : r2218_65 +# 2218| r2218_55(glval) = VariableAddress[y] : +# 2218| r2218_56(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_57(void) = Call[~ClassWithDestructor] : func:r2218_56, this:r2218_55 +# 2218| mu2218_58(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_59(void) = ^IndirectReadSideEffect[-1] : &:r2218_55, ~m? +# 2218| mu2218_60(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_55 +# 2218| r2218_61(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_62(glval) = FunctionAddress[operator++] : +# 2218| r2218_63(iterator &) = Call[operator++] : func:r2218_62, this:r2218_61 +# 2218| v2218_64(void) = ^IndirectReadSideEffect[-1] : &:r2218_61, ~m? +# 2218| mu2218_65(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_61 +# 2218| r2218_66(glval>) = CopyValue : r2218_63 #-----| Goto (back edge) -> Block 15 # 2218| Block 19 -# 2218| r2218_70(glval>) = VariableAddress[ys] : -# 2218| r2218_71(glval) = FunctionAddress[~vector] : -# 2218| v2218_72(void) = Call[~vector] : func:r2218_71, this:r2218_70 -# 2218| mu2218_73(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_70, ~m? -# 2218| mu2218_75(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_70 +# 2218| r2218_67(glval>) = VariableAddress[ys] : +# 2218| r2218_68(glval) = FunctionAddress[~vector] : +# 2218| v2218_69(void) = Call[~vector] : func:r2218_68, this:r2218_67 +# 2218| mu2218_70(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_71(void) = ^IndirectReadSideEffect[-1] : &:r2218_67, ~m? +# 2218| mu2218_72(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_67 #-----| Goto -> Block 20 # 2224| Block 20 @@ -12850,32 +12838,29 @@ ir.cpp: # 2224| mu2224_30(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 #-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? # 2224| r2224_31(bool) = Call[operator!=] : func:r2224_25, this:r0_39, 0:r0_45 -# 2224| mu2224_32(unknown) = ^CallSideEffect : ~m? #-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? -# 2224| v2224_33(void) = ConditionalBranch : r2224_31 +# 2224| v2224_32(void) = ConditionalBranch : r2224_31 #-----| False -> Block 26 #-----| True -> Block 23 # 2224| Block 22 -# 2224| r2224_34(glval>) = VariableAddress[(__begin)] : -# 2224| r2224_35(glval) = FunctionAddress[operator++] : -# 2224| r2224_36(iterator &) = Call[operator++] : func:r2224_35, this:r2224_34 -# 2224| mu2224_37(unknown) = ^CallSideEffect : ~m? -# 2224| v2224_38(void) = ^IndirectReadSideEffect[-1] : &:r2224_34, ~m? -# 2224| mu2224_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_34 -# 2224| r2224_40(glval>) = CopyValue : r2224_36 +# 2224| r2224_33(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_34(glval) = FunctionAddress[operator++] : +# 2224| r2224_35(iterator &) = Call[operator++] : func:r2224_34, this:r2224_33 +# 2224| v2224_36(void) = ^IndirectReadSideEffect[-1] : &:r2224_33, ~m? +# 2224| mu2224_37(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_33 +# 2224| r2224_38(glval>) = CopyValue : r2224_35 #-----| Goto (back edge) -> Block 21 # 2224| Block 23 -# 2224| r2224_41(glval) = VariableAddress[y] : -# 2224| r2224_42(glval>) = VariableAddress[(__begin)] : -#-----| r0_47(glval>) = Convert : r2224_42 -# 2224| r2224_43(glval) = FunctionAddress[operator*] : -# 2224| r2224_44(int &) = Call[operator*] : func:r2224_43, this:r0_47 -# 2224| mu2224_45(unknown) = ^CallSideEffect : ~m? +# 2224| r2224_39(glval) = VariableAddress[y] : +# 2224| r2224_40(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2224_40 +# 2224| r2224_41(glval) = FunctionAddress[operator*] : +# 2224| r2224_42(int &) = Call[operator*] : func:r2224_41, this:r0_47 #-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? -# 2224| r2224_46(int) = Load[?] : &:r2224_44, ~m? -# 2224| mu2224_47(int) = Store[y] : &:r2224_41, r2224_46 +# 2224| r2224_43(int) = Load[?] : &:r2224_42, ~m? +# 2224| mu2224_44(int) = Store[y] : &:r2224_39, r2224_43 # 2225| r2225_1(glval) = VariableAddress[y] : # 2225| r2225_2(int) = Load[y] : &:r2225_1, ~m? # 2225| r2225_3(int) = Constant[1] : @@ -12886,12 +12871,12 @@ ir.cpp: # 2226| Block 24 # 2226| v2226_1(void) = NoOp : -# 2224| r2224_48(glval>) = VariableAddress[ys] : -# 2224| r2224_49(glval) = FunctionAddress[~vector] : -# 2224| v2224_50(void) = Call[~vector] : func:r2224_49, this:r2224_48 -# 2224| mu2224_51(unknown) = ^CallSideEffect : ~m? -# 2224| v2224_52(void) = ^IndirectReadSideEffect[-1] : &:r2224_48, ~m? -# 2224| mu2224_53(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_48 +# 2224| r2224_45(glval>) = VariableAddress[ys] : +# 2224| r2224_46(glval) = FunctionAddress[~vector] : +# 2224| v2224_47(void) = Call[~vector] : func:r2224_46, this:r2224_45 +# 2224| mu2224_48(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_49(void) = ^IndirectReadSideEffect[-1] : &:r2224_45, ~m? +# 2224| mu2224_50(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_45 # 2233| r2233_7(glval) = VariableAddress[x] : # 2233| r2233_8(glval) = FunctionAddress[~ClassWithDestructor] : # 2233| v2233_9(void) = Call[~ClassWithDestructor] : func:r2233_8, this:r2233_7 @@ -12901,12 +12886,12 @@ ir.cpp: #-----| Goto -> Block 1 # 2224| Block 25 -# 2224| r2224_54(glval>) = VariableAddress[ys] : -# 2224| r2224_55(glval) = FunctionAddress[~vector] : -# 2224| v2224_56(void) = Call[~vector] : func:r2224_55, this:r2224_54 -# 2224| mu2224_57(unknown) = ^CallSideEffect : ~m? -# 2224| v2224_58(void) = ^IndirectReadSideEffect[-1] : &:r2224_54, ~m? -# 2224| mu2224_59(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_54 +# 2224| r2224_51(glval>) = VariableAddress[ys] : +# 2224| r2224_52(glval) = FunctionAddress[~vector] : +# 2224| v2224_53(void) = Call[~vector] : func:r2224_52, this:r2224_51 +# 2224| mu2224_54(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_55(void) = ^IndirectReadSideEffect[-1] : &:r2224_51, ~m? +# 2224| mu2224_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_51 #-----| Goto -> Block 26 # 2229| Block 26 @@ -12961,22 +12946,20 @@ ir.cpp: # 2229| mu2229_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 #-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? # 2229| r2229_35(bool) = Call[operator!=] : func:r2229_29, this:r0_55, 0:r0_61 -# 2229| mu2229_36(unknown) = ^CallSideEffect : ~m? #-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? -# 2229| v2229_37(void) = ConditionalBranch : r2229_35 +# 2229| v2229_36(void) = ConditionalBranch : r2229_35 #-----| False -> Block 30 #-----| True -> Block 28 # 2229| Block 28 -# 2229| r2229_38(glval) = VariableAddress[y] : -# 2229| r2229_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_63(glval>) = Convert : r2229_39 -# 2229| r2229_40(glval) = FunctionAddress[operator*] : -# 2229| r2229_41(ClassWithDestructor &) = Call[operator*] : func:r2229_40, this:r0_63 -# 2229| mu2229_42(unknown) = ^CallSideEffect : ~m? +# 2229| r2229_37(glval) = VariableAddress[y] : +# 2229| r2229_38(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2229_38 +# 2229| r2229_39(glval) = FunctionAddress[operator*] : +# 2229| r2229_40(ClassWithDestructor &) = Call[operator*] : func:r2229_39, this:r0_63 #-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? -# 2229| r2229_43(ClassWithDestructor) = Load[?] : &:r2229_41, ~m? -# 2229| mu2229_44(ClassWithDestructor) = Store[y] : &:r2229_38, r2229_43 +# 2229| r2229_41(ClassWithDestructor) = Load[?] : &:r2229_40, ~m? +# 2229| mu2229_42(ClassWithDestructor) = Store[y] : &:r2229_37, r2229_41 # 2230| r2230_1(glval) = VariableAddress[z1] : # 2230| mu2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1 # 2230| r2230_3(glval) = FunctionAddress[ClassWithDestructor] : @@ -13001,28 +12984,27 @@ ir.cpp: # 2232| mu2232_10(unknown) = ^CallSideEffect : ~m? # 2232| v2232_11(void) = ^IndirectReadSideEffect[-1] : &:r2232_7, ~m? # 2232| mu2232_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_7 -# 2229| r2229_45(glval) = VariableAddress[y] : -# 2229| r2229_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2229| v2229_47(void) = Call[~ClassWithDestructor] : func:r2229_46, this:r2229_45 -# 2229| mu2229_48(unknown) = ^CallSideEffect : ~m? -# 2229| v2229_49(void) = ^IndirectReadSideEffect[-1] : &:r2229_45, ~m? -# 2229| mu2229_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_45 -# 2229| r2229_51(glval>) = VariableAddress[(__begin)] : -# 2229| r2229_52(glval) = FunctionAddress[operator++] : -# 2229| r2229_53(iterator &) = Call[operator++] : func:r2229_52, this:r2229_51 -# 2229| mu2229_54(unknown) = ^CallSideEffect : ~m? -# 2229| v2229_55(void) = ^IndirectReadSideEffect[-1] : &:r2229_51, ~m? -# 2229| mu2229_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_51 -# 2229| r2229_57(glval>) = CopyValue : r2229_53 +# 2229| r2229_43(glval) = VariableAddress[y] : +# 2229| r2229_44(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_45(void) = Call[~ClassWithDestructor] : func:r2229_44, this:r2229_43 +# 2229| mu2229_46(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_47(void) = ^IndirectReadSideEffect[-1] : &:r2229_43, ~m? +# 2229| mu2229_48(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_43 +# 2229| r2229_49(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_50(glval) = FunctionAddress[operator++] : +# 2229| r2229_51(iterator &) = Call[operator++] : func:r2229_50, this:r2229_49 +# 2229| v2229_52(void) = ^IndirectReadSideEffect[-1] : &:r2229_49, ~m? +# 2229| mu2229_53(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_49 +# 2229| r2229_54(glval>) = CopyValue : r2229_51 #-----| Goto (back edge) -> Block 27 # 2229| Block 29 -# 2229| r2229_58(glval>) = VariableAddress[ys] : -# 2229| r2229_59(glval) = FunctionAddress[~vector] : -# 2229| v2229_60(void) = Call[~vector] : func:r2229_59, this:r2229_58 -# 2229| mu2229_61(unknown) = ^CallSideEffect : ~m? -# 2229| v2229_62(void) = ^IndirectReadSideEffect[-1] : &:r2229_58, ~m? -# 2229| mu2229_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_58 +# 2229| r2229_55(glval>) = VariableAddress[ys] : +# 2229| r2229_56(glval) = FunctionAddress[~vector] : +# 2229| v2229_57(void) = Call[~vector] : func:r2229_56, this:r2229_55 +# 2229| mu2229_58(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_59(void) = ^IndirectReadSideEffect[-1] : &:r2229_55, ~m? +# 2229| mu2229_60(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_55 #-----| Goto -> Block 30 # 2233| Block 30 @@ -13610,29 +13592,27 @@ ir.cpp: # 2307| mu2307_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? # 2307| r2307_39(bool) = Call[operator!=] : func:r2307_33, this:r0_7, 0:r0_13 -# 2307| mu2307_40(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2307| v2307_41(void) = ConditionalBranch : r2307_39 +# 2307| v2307_40(void) = ConditionalBranch : r2307_39 #-----| False -> Block 6 #-----| True -> Block 5 # 2307| Block 5 -# 2307| r2307_42(glval) = VariableAddress[s] : -# 2307| mu2307_43(String) = Uninitialized[s] : &:r2307_42 -# 2307| r2307_44(glval) = FunctionAddress[String] : -# 2307| r2307_45(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2307_45 -# 2307| r2307_46(glval) = FunctionAddress[operator*] : -# 2307| r2307_47(String &) = Call[operator*] : func:r2307_46, this:r0_15 -# 2307| mu2307_48(unknown) = ^CallSideEffect : ~m? +# 2307| r2307_41(glval) = VariableAddress[s] : +# 2307| mu2307_42(String) = Uninitialized[s] : &:r2307_41 +# 2307| r2307_43(glval) = FunctionAddress[String] : +# 2307| r2307_44(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2307_44 +# 2307| r2307_45(glval) = FunctionAddress[operator*] : +# 2307| r2307_46(String &) = Call[operator*] : func:r2307_45, this:r0_15 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2307| r2307_49(glval) = CopyValue : r2307_47 -# 2307| r2307_50(glval) = Convert : r2307_49 -# 2307| r2307_51(String &) = CopyValue : r2307_50 -# 2307| v2307_52(void) = Call[String] : func:r2307_44, this:r2307_42, 0:r2307_51 -# 2307| mu2307_53(unknown) = ^CallSideEffect : ~m? -# 2307| v2307_54(void) = ^BufferReadSideEffect[0] : &:r2307_51, ~m? -# 2307| mu2307_55(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_42 +# 2307| r2307_47(glval) = CopyValue : r2307_46 +# 2307| r2307_48(glval) = Convert : r2307_47 +# 2307| r2307_49(String &) = CopyValue : r2307_48 +# 2307| v2307_50(void) = Call[String] : func:r2307_43, this:r2307_41, 0:r2307_49 +# 2307| mu2307_51(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_52(void) = ^BufferReadSideEffect[0] : &:r2307_49, ~m? +# 2307| mu2307_53(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_41 # 2308| r2308_1(glval) = VariableAddress[s2] : # 2308| mu2308_2(String) = Uninitialized[s2] : &:r2308_1 # 2308| r2308_3(glval) = FunctionAddress[String] : @@ -13645,19 +13625,18 @@ ir.cpp: # 2309| mu2309_4(unknown) = ^CallSideEffect : ~m? # 2309| v2309_5(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, ~m? # 2309| mu2309_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1 -# 2307| r2307_56(glval) = VariableAddress[s] : -# 2307| r2307_57(glval) = FunctionAddress[~String] : -# 2307| v2307_58(void) = Call[~String] : func:r2307_57, this:r2307_56 -# 2307| mu2307_59(unknown) = ^CallSideEffect : ~m? -# 2307| v2307_60(void) = ^IndirectReadSideEffect[-1] : &:r2307_56, ~m? -# 2307| mu2307_61(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_56 -# 2307| r2307_62(glval>) = VariableAddress[(__begin)] : -# 2307| r2307_63(glval) = FunctionAddress[operator++] : -# 2307| r2307_64(iterator &) = Call[operator++] : func:r2307_63, this:r2307_62 -# 2307| mu2307_65(unknown) = ^CallSideEffect : ~m? -# 2307| v2307_66(void) = ^IndirectReadSideEffect[-1] : &:r2307_62, ~m? -# 2307| mu2307_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_62 -# 2307| r2307_68(glval>) = CopyValue : r2307_64 +# 2307| r2307_54(glval) = VariableAddress[s] : +# 2307| r2307_55(glval) = FunctionAddress[~String] : +# 2307| v2307_56(void) = Call[~String] : func:r2307_55, this:r2307_54 +# 2307| mu2307_57(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_58(void) = ^IndirectReadSideEffect[-1] : &:r2307_54, ~m? +# 2307| mu2307_59(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_54 +# 2307| r2307_60(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_61(glval) = FunctionAddress[operator++] : +# 2307| r2307_62(iterator &) = Call[operator++] : func:r2307_61, this:r2307_60 +# 2307| v2307_63(void) = ^IndirectReadSideEffect[-1] : &:r2307_60, ~m? +# 2307| mu2307_64(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_60 +# 2307| r2307_65(glval>) = CopyValue : r2307_62 #-----| Goto (back edge) -> Block 4 # 2311| Block 6 @@ -14322,22 +14301,20 @@ ir.cpp: # 2430| mu2430_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? # 2430| r2430_44(bool) = Call[operator!=] : func:r2430_38, this:r0_7, 0:r0_13 -# 2430| mu2430_45(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2430| v2430_46(void) = ConditionalBranch : r2430_44 +# 2430| v2430_45(void) = ConditionalBranch : r2430_44 #-----| False -> Block 13 #-----| True -> Block 12 # 2430| Block 12 -# 2430| r2430_47(glval) = VariableAddress[y] : -# 2430| r2430_48(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2430_48 -# 2430| r2430_49(glval) = FunctionAddress[operator*] : -# 2430| r2430_50(char &) = Call[operator*] : func:r2430_49, this:r0_15 -# 2430| mu2430_51(unknown) = ^CallSideEffect : ~m? +# 2430| r2430_46(glval) = VariableAddress[y] : +# 2430| r2430_47(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2430_47 +# 2430| r2430_48(glval) = FunctionAddress[operator*] : +# 2430| r2430_49(char &) = Call[operator*] : func:r2430_48, this:r0_15 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2430| r2430_52(char) = Load[?] : &:r2430_50, ~m? -# 2430| mu2430_53(char) = Store[y] : &:r2430_47, r2430_52 +# 2430| r2430_50(char) = Load[?] : &:r2430_49, ~m? +# 2430| mu2430_51(char) = Store[y] : &:r2430_46, r2430_50 # 2431| r2431_1(glval) = VariableAddress[x] : # 2431| r2431_2(char) = Load[x] : &:r2431_1, ~m? # 2431| r2431_3(int) = Convert : r2431_2 @@ -14347,13 +14324,12 @@ ir.cpp: # 2431| r2431_7(int) = Add : r2431_6, r2431_3 # 2431| r2431_8(char) = Convert : r2431_7 # 2431| mu2431_9(char) = Store[y] : &:r2431_4, r2431_8 -# 2430| r2430_54(glval>) = VariableAddress[(__begin)] : -# 2430| r2430_55(glval) = FunctionAddress[operator++] : -# 2430| r2430_56(iterator &) = Call[operator++] : func:r2430_55, this:r2430_54 -# 2430| mu2430_57(unknown) = ^CallSideEffect : ~m? -# 2430| v2430_58(void) = ^IndirectReadSideEffect[-1] : &:r2430_54, ~m? -# 2430| mu2430_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_54 -# 2430| r2430_60(glval>) = CopyValue : r2430_56 +# 2430| r2430_52(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_53(glval) = FunctionAddress[operator++] : +# 2430| r2430_54(iterator &) = Call[operator++] : func:r2430_53, this:r2430_52 +# 2430| v2430_55(void) = ^IndirectReadSideEffect[-1] : &:r2430_52, ~m? +# 2430| mu2430_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_52 +# 2430| r2430_57(glval>) = CopyValue : r2430_54 #-----| Goto (back edge) -> Block 11 # 2432| Block 13