From 7ec95fba6d87967033e992a8038242e04694551d Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 19 Feb 2024 16:59:07 +0100 Subject: [PATCH] C++: Add more range-based for-loop IR tests --- .../library-tests/ir/ir/PrintAST.expected | 710 ++++++++++++------ .../library-tests/ir/ir/aliased_ir.expected | 645 ++++++++++------ cpp/ql/test/library-tests/ir/ir/ir.cpp | 12 + .../ir/ir/operand_locations.expected | 597 ++++++++++----- .../test/library-tests/ir/ir/raw_ir.expected | 549 +++++++++----- 5 files changed, 1716 insertions(+), 797 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index d49a340d6e3..a7cd4689ff9 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9446,6 +9446,10 @@ ir.cpp: # 1068| : # 1068| getParameter(0): [Parameter] (unnamed parameter 0) # 1068| Type = [TemplateParameter] T +# 1068| [Constructor] void vector::vector(int) +# 1068| : +# 1068| getParameter(0): [Parameter] (unnamed parameter 0) +# 1068| Type = [IntType] int # 1069| [Destructor] void vector::~vector() # 1069| : # 1070| [ConstMemberFunction] vector::iterator vector::begin() const @@ -16384,175 +16388,188 @@ ir.cpp: # 2131| Type = [PlainCharType] char # 2131| ValueCategory = prvalue(load) # 2131| getStmt(1): [ReturnStmt] return ... -# 2134| [GlobalVariable] bool initialization_with_destructor_bool -# 2134| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool -# 2134| getExpr(): [Literal] 1 -# 2134| Type = [BoolType] bool -# 2134| Value = [Literal] 1 -# 2134| ValueCategory = prvalue -# 2136| [TopLevelFunction] void initialization_with_destructor(bool, char) -# 2136| : -# 2136| getParameter(0): [Parameter] b -# 2136| Type = [BoolType] bool -# 2136| getParameter(1): [Parameter] c -# 2136| Type = [PlainCharType] char -# 2136| getEntryPoint(): [BlockStmt] { ... } -# 2137| getStmt(0): [IfStmt] if (...) ... -# 2137| getInitialization(): [DeclStmt] declaration -# 2137| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2137| Type = [Class] ClassWithDestructor -# 2137| getVariable().getInitializer(): [Initializer] initializer for x -# 2137| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2137| Type = [VoidType] void -# 2137| ValueCategory = prvalue -# 2137| getCondition(): [VariableAccess] b -# 2137| Type = [BoolType] bool -# 2137| ValueCategory = prvalue(load) -# 2138| getThen(): [ExprStmt] ExprStmt -# 2138| getExpr(): [FunctionCall] call to set_x -# 2138| Type = [VoidType] void -# 2138| ValueCategory = prvalue -# 2138| getQualifier(): [VariableAccess] x -# 2138| Type = [Class] ClassWithDestructor -# 2138| ValueCategory = lvalue -# 2138| getArgument(0): [CharLiteral] 97 -# 2138| Type = [PlainCharType] char -# 2138| Value = [CharLiteral] 97 -# 2138| ValueCategory = prvalue -# 2138| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2138| Type = [VoidType] void -# 2138| ValueCategory = prvalue -# 2138| getQualifier(): [VariableAccess] x +# 2132| [MemberFunction] char ClassWithDestructor::get_x() +# 2132| : +# 2132| getEntryPoint(): [BlockStmt] { ... } +# 2132| getStmt(0): [ReturnStmt] return ... +# 2132| getExpr(): [PointerDereferenceExpr] * ... +# 2132| Type = [PlainCharType] char +# 2132| ValueCategory = prvalue(load) +# 2132| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2132| Type = [CharPointerType] char * +# 2132| ValueCategory = prvalue(load) +# 2132| getQualifier(): [ThisExpr] this +# 2132| Type = [PointerType] ClassWithDestructor * +# 2132| ValueCategory = prvalue(load) +# 2135| [GlobalVariable] bool initialization_with_destructor_bool +# 2135| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool +# 2135| getExpr(): [Literal] 1 +# 2135| Type = [BoolType] bool +# 2135| Value = [Literal] 1 +# 2135| ValueCategory = prvalue +# 2137| [TopLevelFunction] void initialization_with_destructor(bool, char) +# 2137| : +# 2137| getParameter(0): [Parameter] b +# 2137| Type = [BoolType] bool +# 2137| getParameter(1): [Parameter] c +# 2137| Type = [PlainCharType] char +# 2137| getEntryPoint(): [BlockStmt] { ... } +# 2138| getStmt(0): [IfStmt] if (...) ... +# 2138| getInitialization(): [DeclStmt] declaration +# 2138| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 2138| Type = [Class] ClassWithDestructor -# 2138| ValueCategory = lvalue -# 2140| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... -# 2140| getInitialization(): [DeclStmt] declaration -# 2140| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2140| Type = [Class] ClassWithDestructor -# 2140| getVariable().getInitializer(): [Initializer] initializer for x -# 2140| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2140| Type = [VoidType] void -# 2140| ValueCategory = prvalue -# 2140| getCondition(): [VariableAccess] initialization_with_destructor_bool -# 2140| Type = [BoolType] bool -# 2140| Value = [VariableAccess] 1 -# 2140| ValueCategory = prvalue(load) -# 2141| getThen(): [ExprStmt] ExprStmt -# 2141| getExpr(): [FunctionCall] call to set_x -# 2141| Type = [VoidType] void -# 2141| ValueCategory = prvalue -# 2141| getQualifier(): [VariableAccess] x -# 2141| Type = [Class] ClassWithDestructor -# 2141| ValueCategory = lvalue -# 2141| getArgument(0): [CharLiteral] 97 -# 2141| Type = [PlainCharType] char -# 2141| Value = [CharLiteral] 97 -# 2141| ValueCategory = prvalue -# 2141| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2141| Type = [VoidType] void -# 2141| ValueCategory = prvalue -# 2141| getQualifier(): [VariableAccess] x +# 2138| getVariable().getInitializer(): [Initializer] initializer for x +# 2138| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2138| Type = [VoidType] void +# 2138| ValueCategory = prvalue +# 2138| getCondition(): [VariableAccess] b +# 2138| Type = [BoolType] bool +# 2138| ValueCategory = prvalue(load) +# 2139| getThen(): [ExprStmt] ExprStmt +# 2139| getExpr(): [FunctionCall] call to set_x +# 2139| Type = [VoidType] void +# 2139| ValueCategory = prvalue +# 2139| getQualifier(): [VariableAccess] x +# 2139| Type = [Class] ClassWithDestructor +# 2139| ValueCategory = lvalue +# 2139| getArgument(0): [CharLiteral] 97 +# 2139| Type = [PlainCharType] char +# 2139| Value = [CharLiteral] 97 +# 2139| ValueCategory = prvalue +# 2139| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2139| Type = [VoidType] void +# 2139| ValueCategory = prvalue +# 2139| getQualifier(): [VariableAccess] x +# 2139| Type = [Class] ClassWithDestructor +# 2139| ValueCategory = lvalue +# 2141| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... +# 2141| getInitialization(): [DeclStmt] declaration +# 2141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 2141| Type = [Class] ClassWithDestructor -# 2141| ValueCategory = lvalue -# 2143| getStmt(2): [SwitchStmt] switch (...) ... -# 2143| getInitialization(): [DeclStmt] declaration -# 2143| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2143| Type = [Class] ClassWithDestructor -# 2143| getVariable().getInitializer(): [Initializer] initializer for x -# 2143| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2143| Type = [VoidType] void -# 2143| ValueCategory = prvalue -# 2143| getExpr(): [VariableAccess] c -# 2143| Type = [PlainCharType] char -# 2143| ValueCategory = prvalue(load) -# 2143| getStmt(): [BlockStmt] { ... } -# 2144| getStmt(0): [SwitchCase] case ...: -# 2144| getExpr(): [CharLiteral] 97 -# 2144| Type = [PlainCharType] char -# 2144| Value = [CharLiteral] 97 -# 2144| ValueCategory = prvalue -# 2144| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2144| Conversion = [IntegralConversion] integral conversion -# 2144| Type = [IntType] int -# 2144| Value = [CStyleCast] 97 -# 2144| ValueCategory = prvalue -# 2145| getStmt(1): [ExprStmt] ExprStmt -# 2145| getExpr(): [FunctionCall] call to set_x -# 2145| Type = [VoidType] void +# 2141| getVariable().getInitializer(): [Initializer] initializer for x +# 2141| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2141| Type = [VoidType] void +# 2141| ValueCategory = prvalue +# 2141| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2141| Type = [BoolType] bool +# 2141| Value = [VariableAccess] 1 +# 2141| ValueCategory = prvalue(load) +# 2142| getThen(): [ExprStmt] ExprStmt +# 2142| getExpr(): [FunctionCall] call to set_x +# 2142| Type = [VoidType] void +# 2142| ValueCategory = prvalue +# 2142| getQualifier(): [VariableAccess] x +# 2142| Type = [Class] ClassWithDestructor +# 2142| ValueCategory = lvalue +# 2142| getArgument(0): [CharLiteral] 97 +# 2142| Type = [PlainCharType] char +# 2142| Value = [CharLiteral] 97 +# 2142| ValueCategory = prvalue +# 2142| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2142| Type = [VoidType] void +# 2142| ValueCategory = prvalue +# 2142| getQualifier(): [VariableAccess] x +# 2142| Type = [Class] ClassWithDestructor +# 2142| ValueCategory = lvalue +# 2144| getStmt(2): [SwitchStmt] switch (...) ... +# 2144| getInitialization(): [DeclStmt] declaration +# 2144| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2144| Type = [Class] ClassWithDestructor +# 2144| getVariable().getInitializer(): [Initializer] initializer for x +# 2144| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2144| Type = [VoidType] void +# 2144| ValueCategory = prvalue +# 2144| getExpr(): [VariableAccess] c +# 2144| Type = [PlainCharType] char +# 2144| ValueCategory = prvalue(load) +# 2144| getStmt(): [BlockStmt] { ... } +# 2145| getStmt(0): [SwitchCase] case ...: +# 2145| getExpr(): [CharLiteral] 97 +# 2145| Type = [PlainCharType] char +# 2145| Value = [CharLiteral] 97 # 2145| ValueCategory = prvalue -# 2145| getQualifier(): [VariableAccess] x -# 2145| Type = [Class] ClassWithDestructor -# 2145| ValueCategory = lvalue -# 2145| getArgument(0): [CharLiteral] 97 -# 2145| Type = [PlainCharType] char -# 2145| Value = [CharLiteral] 97 -# 2145| ValueCategory = prvalue -# 2146| getStmt(2): [BreakStmt] break; -# 2147| getStmt(3): [SwitchCase] default: -# 2148| getStmt(4): [ExprStmt] ExprStmt -# 2148| getExpr(): [FunctionCall] call to set_x -# 2148| Type = [VoidType] void -# 2148| ValueCategory = prvalue -# 2148| getQualifier(): [VariableAccess] x -# 2148| Type = [Class] ClassWithDestructor -# 2148| ValueCategory = lvalue -# 2148| getArgument(0): [CharLiteral] 98 -# 2148| Type = [PlainCharType] char -# 2148| Value = [CharLiteral] 98 -# 2148| ValueCategory = prvalue -# 2149| getStmt(5): [BreakStmt] break; -# 2150| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2150| Type = [VoidType] void -# 2150| ValueCategory = prvalue -# 2150| getQualifier(): [VariableAccess] x -# 2150| Type = [Class] ClassWithDestructor -# 2150| ValueCategory = lvalue -# 2143| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2143| Conversion = [IntegralConversion] integral conversion -# 2143| Type = [IntType] int -# 2143| ValueCategory = prvalue -# 2150| getStmt(3): [LabelStmt] label ...: -# 2152| getStmt(4): [DeclStmt] declaration -# 2152| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2152| Type = [Class] ClassWithDestructor -# 2152| getVariable().getInitializer(): [Initializer] initializer for x -# 2152| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2152| Type = [VoidType] void -# 2152| ValueCategory = prvalue -# 2153| getStmt(5): [RangeBasedForStmt] for(...:...) ... -# 2153| getInitialization(): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2153| Type = [ClassTemplateInstantiation,Struct] vector -# 2153| getVariable().getInitializer(): [Initializer] initializer for ys -# 2153| getExpr(): [ConstructorCall] call to vector -# 2153| Type = [VoidType] void -# 2153| ValueCategory = prvalue -# 2153| getArgument(0): [VariableAccess] x -# 2153| Type = [Class] ClassWithDestructor -# 2153| ValueCategory = prvalue(load) -# 2153| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2153| Type = [Class] ClassWithDestructor -# 2153| ValueCategory = lvalue -# 2153| getChild(1): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2153| Type = [LValueReferenceType] vector & +# 2145| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2145| Conversion = [IntegralConversion] integral conversion +# 2145| Type = [IntType] int +# 2145| Value = [CStyleCast] 97 +# 2145| ValueCategory = prvalue +# 2146| getStmt(1): [ExprStmt] ExprStmt +# 2146| getExpr(): [FunctionCall] call to set_x +# 2146| Type = [VoidType] void +# 2146| ValueCategory = prvalue +# 2146| getQualifier(): [VariableAccess] x +# 2146| Type = [Class] ClassWithDestructor +# 2146| ValueCategory = lvalue +# 2146| getArgument(0): [CharLiteral] 97 +# 2146| Type = [PlainCharType] char +# 2146| Value = [CharLiteral] 97 +# 2146| ValueCategory = prvalue +# 2147| getStmt(2): [BreakStmt] break; +# 2148| getStmt(3): [SwitchCase] default: +# 2149| getStmt(4): [ExprStmt] ExprStmt +# 2149| getExpr(): [FunctionCall] call to set_x +# 2149| Type = [VoidType] void +# 2149| ValueCategory = prvalue +# 2149| getQualifier(): [VariableAccess] x +# 2149| Type = [Class] ClassWithDestructor +# 2149| ValueCategory = lvalue +# 2149| getArgument(0): [CharLiteral] 98 +# 2149| Type = [PlainCharType] char +# 2149| Value = [CharLiteral] 98 +# 2149| ValueCategory = prvalue +# 2150| getStmt(5): [BreakStmt] break; +# 2151| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2151| Type = [VoidType] void +# 2151| ValueCategory = prvalue +# 2151| getQualifier(): [VariableAccess] x +# 2151| Type = [Class] ClassWithDestructor +# 2151| ValueCategory = lvalue +# 2144| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2144| Conversion = [IntegralConversion] integral conversion +# 2144| Type = [IntType] int +# 2144| ValueCategory = prvalue +# 2151| getStmt(3): [LabelStmt] label ...: +# 2153| getStmt(4): [DeclStmt] declaration +# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2153| Type = [Class] ClassWithDestructor +# 2153| getVariable().getInitializer(): [Initializer] initializer for x +# 2153| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2153| Type = [VoidType] void +# 2153| ValueCategory = prvalue +# 2154| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2154| getInitialization(): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2154| Type = [ClassTemplateInstantiation,Struct] vector +# 2154| getVariable().getInitializer(): [Initializer] initializer for ys +# 2154| getExpr(): [ConstructorCall] call to vector +# 2154| Type = [VoidType] void +# 2154| ValueCategory = prvalue +# 2154| getArgument(0): [VariableAccess] x +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = prvalue(load) +# 2154| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = lvalue +# 2154| getChild(1): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2154| Type = [LValueReferenceType] vector & #-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2153| getExpr(): [VariableAccess] ys -# 2153| Type = [ClassTemplateInstantiation,Struct] vector -# 2153| ValueCategory = lvalue -# 2153| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2153| Type = [LValueReferenceType] vector & -# 2153| ValueCategory = prvalue -# 2153| getBeginEndDeclaration(): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2153| Type = [NestedStruct] iterator +# 2154| getExpr(): [VariableAccess] ys +# 2154| Type = [ClassTemplateInstantiation,Struct] vector +# 2154| ValueCategory = lvalue +# 2154| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2154| Type = [LValueReferenceType] vector & +# 2154| ValueCategory = prvalue +# 2154| getBeginEndDeclaration(): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2154| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2153| getExpr(): [FunctionCall] call to begin -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = prvalue -# 2153| getQualifier(): [VariableAccess] (__range) -# 2153| Type = [LValueReferenceType] vector & -# 2153| ValueCategory = prvalue(load) +# 2154| getExpr(): [FunctionCall] call to begin +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__range) +# 2154| Type = [LValueReferenceType] vector & +# 2154| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const vector @@ -16560,15 +16577,15 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ClassTemplateInstantiation,Struct] vector #-----| ValueCategory = lvalue -# 2153| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2153| Type = [NestedStruct] iterator +# 2154| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2154| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2153| getExpr(): [FunctionCall] call to end -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = prvalue -# 2153| getQualifier(): [VariableAccess] (__range) -# 2153| Type = [LValueReferenceType] vector & -# 2153| ValueCategory = prvalue(load) +# 2154| getExpr(): [FunctionCall] call to end +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__range) +# 2154| Type = [LValueReferenceType] vector & +# 2154| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const vector @@ -16576,63 +16593,314 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ClassTemplateInstantiation,Struct] vector #-----| ValueCategory = lvalue -# 2153| getCondition(): [FunctionCall] call to operator!= -# 2153| Type = [BoolType] bool -# 2153| ValueCategory = prvalue -# 2153| getQualifier(): [VariableAccess] (__begin) -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = lvalue -# 2153| getArgument(0): [VariableAccess] (__end) -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = prvalue(load) +# 2154| getCondition(): [FunctionCall] call to operator!= +# 2154| Type = [BoolType] bool +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__begin) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +# 2154| getArgument(0): [VariableAccess] (__end) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 2153| getUpdate(): [FunctionCall] call to operator++ -# 2153| Type = [LValueReferenceType] iterator & -# 2153| ValueCategory = prvalue -# 2153| getQualifier(): [VariableAccess] (__begin) -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = lvalue -# 2153| getChild(5): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2153| Type = [Class] ClassWithDestructor -# 2153| getVariable().getInitializer(): [Initializer] initializer for y -# 2153| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2153| Type = [LValueReferenceType] ClassWithDestructor & -# 2153| ValueCategory = prvalue -# 2153| getQualifier(): [VariableAccess] (__begin) -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = lvalue +# 2154| getUpdate(): [FunctionCall] call to operator++ +# 2154| Type = [LValueReferenceType] iterator & +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__begin) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +# 2154| getChild(5): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2154| Type = [Class] ClassWithDestructor +# 2154| getVariable().getInitializer(): [Initializer] initializer for y +# 2154| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2154| Type = [LValueReferenceType] ClassWithDestructor & +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__begin) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 2153| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2153| Type = [Class] ClassWithDestructor -# 2153| ValueCategory = prvalue(load) -# 2154| getStmt(): [ExprStmt] ExprStmt -# 2154| getExpr(): [FunctionCall] call to set_x -# 2154| Type = [VoidType] void -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] y -# 2154| Type = [Class] ClassWithDestructor -# 2154| ValueCategory = lvalue -# 2154| getArgument(0): [CharLiteral] 97 -# 2154| Type = [PlainCharType] char -# 2154| Value = [CharLiteral] 97 -# 2154| ValueCategory = prvalue -# 2153| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2153| Type = [NestedStruct] iterator -# 2153| ValueCategory = lvalue -# 2155| getStmt(6): [ReturnStmt] return ... -# 2155| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2155| Type = [VoidType] void -# 2155| ValueCategory = prvalue -# 2155| getQualifier(): [VariableAccess] x -# 2155| Type = [Class] ClassWithDestructor -# 2155| ValueCategory = lvalue +# 2154| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = prvalue(load) +# 2155| getStmt(): [ExprStmt] ExprStmt +# 2155| getExpr(): [FunctionCall] call to set_x +# 2155| Type = [VoidType] void +# 2155| ValueCategory = prvalue +# 2155| getQualifier(): [VariableAccess] y +# 2155| Type = [Class] ClassWithDestructor +# 2155| ValueCategory = lvalue +# 2155| getArgument(0): [CharLiteral] 97 +# 2155| Type = [PlainCharType] char +# 2155| Value = [CharLiteral] 97 +# 2155| ValueCategory = prvalue +# 2154| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +# 2157| getStmt(6): [RangeBasedForStmt] for(...:...) ... +# 2157| getInitialization(): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2157| Type = [ClassTemplateInstantiation,Struct] vector +# 2157| getVariable().getInitializer(): [Initializer] initializer for ys +# 2157| getExpr(): [ConstructorCall] call to vector +# 2157| Type = [VoidType] void +# 2157| ValueCategory = prvalue +# 2157| getArgument(0): [VariableAccess] x +# 2157| Type = [Class] ClassWithDestructor +# 2157| ValueCategory = prvalue(load) +# 2157| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2157| Type = [Class] ClassWithDestructor +# 2157| ValueCategory = lvalue +# 2157| getChild(1): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2157| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2157| getExpr(): [VariableAccess] ys +# 2157| Type = [ClassTemplateInstantiation,Struct] vector +# 2157| ValueCategory = lvalue +# 2157| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2157| Type = [LValueReferenceType] vector & +# 2157| ValueCategory = prvalue +# 2157| getBeginEndDeclaration(): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2157| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2157| getExpr(): [FunctionCall] call to begin +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__range) +# 2157| Type = [LValueReferenceType] vector & +# 2157| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2157| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2157| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2157| getExpr(): [FunctionCall] call to end +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__range) +# 2157| Type = [LValueReferenceType] vector & +# 2157| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2157| getCondition(): [FunctionCall] call to operator!= +# 2157| Type = [BoolType] bool +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__begin) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +# 2157| getArgument(0): [VariableAccess] (__end) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2157| getUpdate(): [FunctionCall] call to operator++ +# 2157| Type = [LValueReferenceType] iterator & +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__begin) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +# 2157| getChild(5): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2157| Type = [Class] ClassWithDestructor +# 2157| getVariable().getInitializer(): [Initializer] initializer for y +# 2157| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2157| Type = [LValueReferenceType] ClassWithDestructor & +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__begin) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2157| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2157| Type = [Class] ClassWithDestructor +# 2157| ValueCategory = prvalue(load) +# 2157| getStmt(): [BlockStmt] { ... } +# 2158| getStmt(0): [ExprStmt] ExprStmt +# 2158| getExpr(): [FunctionCall] call to set_x +# 2158| Type = [VoidType] void +# 2158| ValueCategory = prvalue +# 2158| getQualifier(): [VariableAccess] y +# 2158| Type = [Class] ClassWithDestructor +# 2158| ValueCategory = lvalue +# 2158| getArgument(0): [CharLiteral] 97 +# 2158| Type = [PlainCharType] char +# 2158| Value = [CharLiteral] 97 +# 2158| ValueCategory = prvalue +# 2159| getStmt(1): [IfStmt] if (...) ... +# 2159| getCondition(): [EQExpr] ... == ... +# 2159| Type = [BoolType] bool +# 2159| ValueCategory = prvalue +# 2159| getLeftOperand(): [FunctionCall] call to get_x +# 2159| Type = [PlainCharType] char +# 2159| ValueCategory = prvalue +# 2159| getQualifier(): [VariableAccess] y +# 2159| Type = [Class] ClassWithDestructor +# 2159| ValueCategory = lvalue +# 2159| getRightOperand(): [CharLiteral] 98 +# 2159| Type = [PlainCharType] char +# 2159| Value = [CharLiteral] 98 +# 2159| ValueCategory = prvalue +# 2159| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2159| Conversion = [IntegralConversion] integral conversion +# 2159| Type = [IntType] int +# 2159| ValueCategory = prvalue +# 2159| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 2159| Conversion = [IntegralConversion] integral conversion +# 2159| Type = [IntType] int +# 2159| Value = [CStyleCast] 98 +# 2159| ValueCategory = prvalue +# 2160| getThen(): [ReturnStmt] return ... +# 2167| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2167| Type = [VoidType] void +# 2167| ValueCategory = prvalue +# 2167| getQualifier(): [VariableAccess] x +# 2167| Type = [Class] ClassWithDestructor +# 2167| ValueCategory = lvalue +# 2157| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +# 2163| getStmt(7): [RangeBasedForStmt] for(...:...) ... +# 2163| getInitialization(): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2163| Type = [ClassTemplateInstantiation,Struct] vector +# 2163| getVariable().getInitializer(): [Initializer] initializer for ys +# 2163| getExpr(): [ConstructorCall] call to vector +# 2163| Type = [VoidType] void +# 2163| ValueCategory = prvalue +# 2163| getArgument(0): [Literal] 1 +# 2163| Type = [IntType] int +# 2163| Value = [Literal] 1 +# 2163| ValueCategory = prvalue +# 2163| getChild(1): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2163| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2163| getExpr(): [VariableAccess] ys +# 2163| Type = [ClassTemplateInstantiation,Struct] vector +# 2163| ValueCategory = lvalue +# 2163| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2163| Type = [LValueReferenceType] vector & +# 2163| ValueCategory = prvalue +# 2163| getBeginEndDeclaration(): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2163| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2163| getExpr(): [FunctionCall] call to begin +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__range) +# 2163| Type = [LValueReferenceType] vector & +# 2163| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2163| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2163| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2163| getExpr(): [FunctionCall] call to end +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__range) +# 2163| Type = [LValueReferenceType] vector & +# 2163| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2163| getCondition(): [FunctionCall] call to operator!= +# 2163| Type = [BoolType] bool +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__begin) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +# 2163| getArgument(0): [VariableAccess] (__end) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2163| getUpdate(): [FunctionCall] call to operator++ +# 2163| Type = [LValueReferenceType] iterator & +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__begin) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +# 2163| getChild(5): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2163| Type = [IntType] int +# 2163| getVariable().getInitializer(): [Initializer] initializer for y +# 2163| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2163| Type = [LValueReferenceType] int & +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__begin) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2163| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2163| Type = [IntType] int +# 2163| ValueCategory = prvalue(load) +# 2163| getStmt(): [BlockStmt] { ... } +# 2164| getStmt(0): [IfStmt] if (...) ... +# 2164| getCondition(): [EQExpr] ... == ... +# 2164| Type = [BoolType] bool +# 2164| ValueCategory = prvalue +# 2164| getLeftOperand(): [VariableAccess] y +# 2164| Type = [IntType] int +# 2164| ValueCategory = prvalue(load) +# 2164| getRightOperand(): [Literal] 1 +# 2164| Type = [IntType] int +# 2164| Value = [Literal] 1 +# 2164| ValueCategory = prvalue +# 2165| getThen(): [ReturnStmt] return ... +# 2167| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2167| Type = [VoidType] void +# 2167| ValueCategory = prvalue +# 2167| getQualifier(): [VariableAccess] x +# 2167| Type = [Class] ClassWithDestructor +# 2167| ValueCategory = lvalue +# 2163| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +# 2167| getStmt(8): [ReturnStmt] return ... +# 2167| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2167| Type = [VoidType] void +# 2167| ValueCategory = prvalue +# 2167| getQualifier(): [VariableAccess] x +# 2167| Type = [Class] ClassWithDestructor +# 2167| ValueCategory = lvalue perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : 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 3dbe2065ff1..4022128e2bb 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -12581,229 +12581,454 @@ ir.cpp: # 2131| v2131_23(void) = AliasedUse : ~m2131_19 # 2131| v2131_24(void) = ExitFunction : -# 2134| bool initialization_with_destructor_bool -# 2134| Block 0 -# 2134| v2134_1(void) = EnterFunction : -# 2134| m2134_2(unknown) = AliasedDefinition : -# 2134| r2134_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2134| r2134_4(bool) = Constant[1] : -# 2134| m2134_5(bool) = Store[initialization_with_destructor_bool] : &:r2134_3, r2134_4 -# 2134| m2134_6(unknown) = Chi : total:m2134_2, partial:m2134_5 -# 2134| v2134_7(void) = ReturnVoid : -# 2134| v2134_8(void) = AliasedUse : ~m2134_6 -# 2134| v2134_9(void) = ExitFunction : +# 2132| char ClassWithDestructor::get_x() +# 2132| Block 0 +# 2132| v2132_1(void) = EnterFunction : +# 2132| m2132_2(unknown) = AliasedDefinition : +# 2132| m2132_3(unknown) = InitializeNonLocal : +# 2132| m2132_4(unknown) = Chi : total:m2132_2, partial:m2132_3 +# 2132| r2132_5(glval) = VariableAddress[#this] : +# 2132| m2132_6(glval) = InitializeParameter[#this] : &:r2132_5 +# 2132| r2132_7(glval) = Load[#this] : &:r2132_5, m2132_6 +# 2132| m2132_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_7 +# 2132| r2132_9(glval) = VariableAddress[#return] : +# 2132| r2132_10(glval) = VariableAddress[#this] : +# 2132| r2132_11(ClassWithDestructor *) = Load[#this] : &:r2132_10, m2132_6 +# 2132| r2132_12(glval) = FieldAddress[x] : r2132_11 +# 2132| r2132_13(char *) = Load[?] : &:r2132_12, ~m2132_8 +# 2132| r2132_14(char) = Load[?] : &:r2132_13, ~m2132_4 +# 2132| m2132_15(char) = Store[#return] : &:r2132_9, r2132_14 +# 2132| v2132_16(void) = ReturnIndirection[#this] : &:r2132_7, m2132_8 +# 2132| r2132_17(glval) = VariableAddress[#return] : +# 2132| v2132_18(void) = ReturnValue : &:r2132_17, m2132_15 +# 2132| v2132_19(void) = AliasedUse : m2132_3 +# 2132| v2132_20(void) = ExitFunction : -# 2136| void initialization_with_destructor(bool, char) -# 2136| Block 0 -# 2136| v2136_1(void) = EnterFunction : -# 2136| m2136_2(unknown) = AliasedDefinition : -# 2136| m2136_3(unknown) = InitializeNonLocal : -# 2136| m2136_4(unknown) = Chi : total:m2136_2, partial:m2136_3 -# 2136| r2136_5(glval) = VariableAddress[b] : -# 2136| m2136_6(bool) = InitializeParameter[b] : &:r2136_5 -# 2136| r2136_7(glval) = VariableAddress[c] : -# 2136| m2136_8(char) = InitializeParameter[c] : &:r2136_7 -# 2137| r2137_1(glval) = VariableAddress[x] : -# 2137| m2137_2(ClassWithDestructor) = Uninitialized[x] : &:r2137_1 -# 2137| r2137_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2137| v2137_4(void) = Call[ClassWithDestructor] : func:r2137_3, this:r2137_1 -# 2137| m2137_5(unknown) = ^CallSideEffect : ~m2136_4 -# 2137| m2137_6(unknown) = Chi : total:m2136_4, partial:m2137_5 -# 2137| m2137_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2137_1 -# 2137| m2137_8(ClassWithDestructor) = Chi : total:m2137_2, partial:m2137_7 -# 2137| r2137_9(glval) = VariableAddress[b] : -# 2137| r2137_10(bool) = Load[b] : &:r2137_9, m2136_6 -# 2137| v2137_11(void) = ConditionalBranch : r2137_10 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2135| bool initialization_with_destructor_bool +# 2135| Block 0 +# 2135| v2135_1(void) = EnterFunction : +# 2135| m2135_2(unknown) = AliasedDefinition : +# 2135| r2135_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2135| r2135_4(bool) = Constant[1] : +# 2135| m2135_5(bool) = Store[initialization_with_destructor_bool] : &:r2135_3, r2135_4 +# 2135| m2135_6(unknown) = Chi : total:m2135_2, partial:m2135_5 +# 2135| v2135_7(void) = ReturnVoid : +# 2135| v2135_8(void) = AliasedUse : ~m2135_6 +# 2135| v2135_9(void) = ExitFunction : -# 2138| Block 1 -# 2138| r2138_1(glval) = VariableAddress[x] : -# 2138| r2138_2(glval) = FunctionAddress[set_x] : -# 2138| r2138_3(char) = Constant[97] : -# 2138| v2138_4(void) = Call[set_x] : func:r2138_2, this:r2138_1, 0:r2138_3 -# 2138| m2138_5(unknown) = ^CallSideEffect : ~m2137_6 -# 2138| m2138_6(unknown) = Chi : total:m2137_6, partial:m2138_5 -# 2138| v2138_7(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, m2137_8 -# 2138| m2138_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 -# 2138| m2138_9(ClassWithDestructor) = Chi : total:m2137_8, partial:m2138_8 -#-----| Goto -> Block 2 +# 2137| void initialization_with_destructor(bool, char) +# 2137| Block 0 +# 2137| v2137_1(void) = EnterFunction : +# 2137| m2137_2(unknown) = AliasedDefinition : +# 2137| m2137_3(unknown) = InitializeNonLocal : +# 2137| m2137_4(unknown) = Chi : total:m2137_2, partial:m2137_3 +# 2137| r2137_5(glval) = VariableAddress[b] : +# 2137| m2137_6(bool) = InitializeParameter[b] : &:r2137_5 +# 2137| r2137_7(glval) = VariableAddress[c] : +# 2137| m2137_8(char) = InitializeParameter[c] : &:r2137_7 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| m2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 +# 2138| r2138_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2138| v2138_4(void) = Call[ClassWithDestructor] : func:r2138_3, this:r2138_1 +# 2138| m2138_5(unknown) = ^CallSideEffect : ~m2137_4 +# 2138| m2138_6(unknown) = Chi : total:m2137_4, partial:m2138_5 +# 2138| m2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 +# 2138| m2138_8(ClassWithDestructor) = Chi : total:m2138_2, partial:m2138_7 +# 2138| r2138_9(glval) = VariableAddress[b] : +# 2138| r2138_10(bool) = Load[b] : &:r2138_9, m2137_6 +# 2138| v2138_11(void) = ConditionalBranch : r2138_10 +#-----| False -> Block 3 +#-----| True -> Block 2 -# 2140| Block 2 -# 2140| m2140_1(unknown) = Phi : from 0:~m2137_6, from 1:~m2138_6 -# 2140| r2140_2(glval) = VariableAddress[x] : -# 2140| m2140_3(ClassWithDestructor) = Uninitialized[x] : &:r2140_2 -# 2140| r2140_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2140| v2140_5(void) = Call[ClassWithDestructor] : func:r2140_4, this:r2140_2 -# 2140| m2140_6(unknown) = ^CallSideEffect : ~m2140_1 -# 2140| m2140_7(unknown) = Chi : total:m2140_1, partial:m2140_6 -# 2140| m2140_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2140_2 -# 2140| m2140_9(ClassWithDestructor) = Chi : total:m2140_3, partial:m2140_8 -# 2140| r2140_10(bool) = Constant[1] : -# 2140| v2140_11(void) = ConditionalBranch : r2140_10 -#-----| False -> Block 10 -#-----| True -> Block 3 +# 2137| Block 1 +# 2137| m2137_9(unknown) = Phi : from 14:~m2159_5, from 19:~m2163_54, from 20:~m2163_38 +# 2137| v2137_10(void) = ReturnVoid : +# 2137| v2137_11(void) = AliasedUse : ~m2137_9 +# 2137| v2137_12(void) = ExitFunction : + +# 2139| Block 2 +# 2139| r2139_1(glval) = VariableAddress[x] : +# 2139| r2139_2(glval) = FunctionAddress[set_x] : +# 2139| r2139_3(char) = Constant[97] : +# 2139| v2139_4(void) = Call[set_x] : func:r2139_2, this:r2139_1, 0:r2139_3 +# 2139| m2139_5(unknown) = ^CallSideEffect : ~m2138_6 +# 2139| m2139_6(unknown) = Chi : total:m2138_6, partial:m2139_5 +# 2139| v2139_7(void) = ^IndirectReadSideEffect[-1] : &:r2139_1, m2138_8 +# 2139| m2139_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_1 +# 2139| m2139_9(ClassWithDestructor) = Chi : total:m2138_8, partial:m2139_8 +#-----| Goto -> Block 3 # 2141| Block 3 -# 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| r2141_2(glval) = FunctionAddress[set_x] : -# 2141| r2141_3(char) = Constant[97] : -# 2141| v2141_4(void) = Call[set_x] : func:r2141_2, this:r2141_1, 0:r2141_3 -# 2141| m2141_5(unknown) = ^CallSideEffect : ~m2140_7 -# 2141| m2141_6(unknown) = Chi : total:m2140_7, partial:m2141_5 -# 2141| v2141_7(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, m2140_9 -# 2141| m2141_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 -# 2141| m2141_9(ClassWithDestructor) = Chi : total:m2140_9, partial:m2141_8 -# 2143| r2143_1(glval) = VariableAddress[x] : -# 2143| m2143_2(ClassWithDestructor) = Uninitialized[x] : &:r2143_1 -# 2143| r2143_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2143| v2143_4(void) = Call[ClassWithDestructor] : func:r2143_3, this:r2143_1 -# 2143| m2143_5(unknown) = ^CallSideEffect : ~m2141_6 -# 2143| m2143_6(unknown) = Chi : total:m2141_6, partial:m2143_5 -# 2143| m2143_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2143_1 -# 2143| m2143_8(ClassWithDestructor) = Chi : total:m2143_2, partial:m2143_7 -# 2143| r2143_9(glval) = VariableAddress[c] : -# 2143| r2143_10(char) = Load[c] : &:r2143_9, m2136_8 -# 2143| r2143_11(int) = Convert : r2143_10 -# 2143| v2143_12(void) = Switch : r2143_11 -#-----| Case[97] -> Block 4 -#-----| Default -> Block 5 +# 2141| m2141_1(unknown) = Phi : from 0:~m2138_6, from 2:~m2139_6 +# 2141| r2141_2(glval) = VariableAddress[x] : +# 2141| m2141_3(ClassWithDestructor) = Uninitialized[x] : &:r2141_2 +# 2141| r2141_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2141| v2141_5(void) = Call[ClassWithDestructor] : func:r2141_4, this:r2141_2 +# 2141| m2141_6(unknown) = ^CallSideEffect : ~m2141_1 +# 2141| m2141_7(unknown) = Chi : total:m2141_1, partial:m2141_6 +# 2141| m2141_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_2 +# 2141| m2141_9(ClassWithDestructor) = Chi : total:m2141_3, partial:m2141_8 +# 2141| r2141_10(bool) = Constant[1] : +# 2141| v2141_11(void) = ConditionalBranch : r2141_10 +#-----| False -> Block 21 +#-----| True -> Block 4 -# 2144| Block 4 -# 2144| v2144_1(void) = NoOp : -# 2145| r2145_1(glval) = VariableAddress[x] : -# 2145| r2145_2(glval) = FunctionAddress[set_x] : -# 2145| r2145_3(char) = Constant[97] : -# 2145| v2145_4(void) = Call[set_x] : func:r2145_2, this:r2145_1, 0:r2145_3 -# 2145| m2145_5(unknown) = ^CallSideEffect : ~m2143_6 -# 2145| m2145_6(unknown) = Chi : total:m2143_6, partial:m2145_5 -# 2145| v2145_7(void) = ^IndirectReadSideEffect[-1] : &:r2145_1, m2143_8 -# 2145| m2145_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2145_1 -# 2145| m2145_9(ClassWithDestructor) = Chi : total:m2143_8, partial:m2145_8 -# 2146| v2146_1(void) = NoOp : -#-----| Goto -> Block 6 +# 2142| Block 4 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(glval) = FunctionAddress[set_x] : +# 2142| r2142_3(char) = Constant[97] : +# 2142| v2142_4(void) = Call[set_x] : func:r2142_2, this:r2142_1, 0:r2142_3 +# 2142| m2142_5(unknown) = ^CallSideEffect : ~m2141_7 +# 2142| m2142_6(unknown) = Chi : total:m2141_7, partial:m2142_5 +# 2142| v2142_7(void) = ^IndirectReadSideEffect[-1] : &:r2142_1, m2141_9 +# 2142| m2142_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_1 +# 2142| m2142_9(ClassWithDestructor) = Chi : total:m2141_9, partial:m2142_8 +# 2144| r2144_1(glval) = VariableAddress[x] : +# 2144| m2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 +# 2144| r2144_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2144| v2144_4(void) = Call[ClassWithDestructor] : func:r2144_3, this:r2144_1 +# 2144| m2144_5(unknown) = ^CallSideEffect : ~m2142_6 +# 2144| m2144_6(unknown) = Chi : total:m2142_6, partial:m2144_5 +# 2144| m2144_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 +# 2144| m2144_8(ClassWithDestructor) = Chi : total:m2144_2, partial:m2144_7 +# 2144| r2144_9(glval) = VariableAddress[c] : +# 2144| r2144_10(char) = Load[c] : &:r2144_9, m2137_8 +# 2144| r2144_11(int) = Convert : r2144_10 +# 2144| v2144_12(void) = Switch : r2144_11 +#-----| Case[97] -> Block 5 +#-----| Default -> Block 6 -# 2147| Block 5 +# 2145| Block 5 +# 2145| v2145_1(void) = NoOp : +# 2146| r2146_1(glval) = VariableAddress[x] : +# 2146| r2146_2(glval) = FunctionAddress[set_x] : +# 2146| r2146_3(char) = Constant[97] : +# 2146| v2146_4(void) = Call[set_x] : func:r2146_2, this:r2146_1, 0:r2146_3 +# 2146| m2146_5(unknown) = ^CallSideEffect : ~m2144_6 +# 2146| m2146_6(unknown) = Chi : total:m2144_6, partial:m2146_5 +# 2146| v2146_7(void) = ^IndirectReadSideEffect[-1] : &:r2146_1, m2144_8 +# 2146| m2146_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 +# 2146| m2146_9(ClassWithDestructor) = Chi : total:m2144_8, partial:m2146_8 # 2147| v2147_1(void) = NoOp : -# 2148| r2148_1(glval) = VariableAddress[x] : -# 2148| r2148_2(glval) = FunctionAddress[set_x] : -# 2148| r2148_3(char) = Constant[98] : -# 2148| v2148_4(void) = Call[set_x] : func:r2148_2, this:r2148_1, 0:r2148_3 -# 2148| m2148_5(unknown) = ^CallSideEffect : ~m2143_6 -# 2148| m2148_6(unknown) = Chi : total:m2143_6, partial:m2148_5 -# 2148| v2148_7(void) = ^IndirectReadSideEffect[-1] : &:r2148_1, m2143_8 -# 2148| m2148_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2148_1 -# 2148| m2148_9(ClassWithDestructor) = Chi : total:m2143_8, partial:m2148_8 -# 2149| v2149_1(void) = NoOp : -#-----| Goto -> Block 6 - -# 2150| Block 6 -# 2150| m2150_1(unknown) = Phi : from 4:~m2145_6, from 5:~m2148_6 -# 2150| v2150_2(void) = NoOp : -# 2152| r2152_1(glval) = VariableAddress[x] : -# 2152| m2152_2(ClassWithDestructor) = Uninitialized[x] : &:r2152_1 -# 2152| r2152_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2152| v2152_4(void) = Call[ClassWithDestructor] : func:r2152_3, this:r2152_1 -# 2152| m2152_5(unknown) = ^CallSideEffect : ~m2150_1 -# 2152| m2152_6(unknown) = Chi : total:m2150_1, partial:m2152_5 -# 2152| m2152_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2152_1 -# 2152| m2152_8(ClassWithDestructor) = Chi : total:m2152_2, partial:m2152_7 -# 2153| r2153_1(glval>) = VariableAddress[ys] : -# 2153| m2153_2(vector) = Uninitialized[ys] : &:r2153_1 -# 2153| r2153_3(glval) = FunctionAddress[vector] : -# 2153| r2153_4(glval) = VariableAddress[#temp2153:40] : -# 2153| r2153_5(glval) = VariableAddress[x] : -# 2153| r2153_6(ClassWithDestructor) = Load[x] : &:r2153_5, m2152_8 -# 2153| m2153_7(ClassWithDestructor) = Store[#temp2153:40] : &:r2153_4, r2153_6 -# 2153| r2153_8(ClassWithDestructor) = Load[#temp2153:40] : &:r2153_4, m2153_7 -# 2153| v2153_9(void) = Call[vector] : func:r2153_3, this:r2153_1, 0:r2153_8 -# 2153| m2153_10(unknown) = ^CallSideEffect : ~m2152_6 -# 2153| m2153_11(unknown) = Chi : total:m2152_6, partial:m2153_10 -# 2153| m2153_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 -# 2153| m2153_13(vector) = Chi : total:m2153_2, partial:m2153_12 -# 2153| r2153_14(glval &>) = VariableAddress[(__range)] : -# 2153| r2153_15(glval>) = VariableAddress[ys] : -# 2153| r2153_16(vector &) = CopyValue : r2153_15 -# 2153| m2153_17(vector &) = Store[(__range)] : &:r2153_14, r2153_16 -# 2153| r2153_18(glval) = VariableAddress[(__begin)] : -# 2153| r2153_19(glval &>) = VariableAddress[(__range)] : -# 2153| r2153_20(vector &) = Load[(__range)] : &:r2153_19, m2153_17 -#-----| r0_1(glval>) = CopyValue : r2153_20 -#-----| r0_2(glval>) = Convert : r0_1 -# 2153| r2153_21(glval) = FunctionAddress[begin] : -# 2153| r2153_22(iterator) = Call[begin] : func:r2153_21, this:r0_2 -# 2153| m2153_23(unknown) = ^CallSideEffect : ~m2153_11 -# 2153| m2153_24(unknown) = Chi : total:m2153_11, partial:m2153_23 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2153_13 -# 2153| m2153_25(iterator) = Store[(__begin)] : &:r2153_18, r2153_22 -# 2153| r2153_26(glval) = VariableAddress[(__end)] : -# 2153| r2153_27(glval &>) = VariableAddress[(__range)] : -# 2153| r2153_28(vector &) = Load[(__range)] : &:r2153_27, m2153_17 -#-----| r0_4(glval>) = CopyValue : r2153_28 -#-----| r0_5(glval>) = Convert : r0_4 -# 2153| r2153_29(glval) = FunctionAddress[end] : -# 2153| r2153_30(iterator) = Call[end] : func:r2153_29, this:r0_5 -# 2153| m2153_31(unknown) = ^CallSideEffect : ~m2153_24 -# 2153| m2153_32(unknown) = Chi : total:m2153_24, partial:m2153_31 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2153_13 -# 2153| m2153_33(iterator) = Store[(__end)] : &:r2153_26, r2153_30 #-----| Goto -> Block 7 -# 2153| Block 7 -# 2153| m2153_34(iterator) = Phi : from 6:m2153_25, from 8:m2153_59 -# 2153| m2153_35(unknown) = Phi : from 6:~m2153_32, from 8:~m2153_56 -# 2153| r2153_36(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2153_36 -# 2153| r2153_37(glval) = FunctionAddress[operator!=] : -# 2153| r2153_38(glval) = VariableAddress[(__end)] : -# 2153| r2153_39(iterator) = Load[(__end)] : &:r2153_38, m2153_33 -# 2153| r2153_40(bool) = Call[operator!=] : func:r2153_37, this:r0_7, 0:r2153_39 -# 2153| m2153_41(unknown) = ^CallSideEffect : ~m2153_35 -# 2153| m2153_42(unknown) = Chi : total:m2153_35, partial:m2153_41 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2153_34 -# 2153| v2153_43(void) = ConditionalBranch : r2153_40 -#-----| False -> Block 9 -#-----| True -> Block 8 +# 2148| Block 6 +# 2148| v2148_1(void) = NoOp : +# 2149| r2149_1(glval) = VariableAddress[x] : +# 2149| r2149_2(glval) = FunctionAddress[set_x] : +# 2149| r2149_3(char) = Constant[98] : +# 2149| v2149_4(void) = Call[set_x] : func:r2149_2, this:r2149_1, 0:r2149_3 +# 2149| m2149_5(unknown) = ^CallSideEffect : ~m2144_6 +# 2149| m2149_6(unknown) = Chi : total:m2144_6, partial:m2149_5 +# 2149| v2149_7(void) = ^IndirectReadSideEffect[-1] : &:r2149_1, m2144_8 +# 2149| m2149_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 +# 2149| m2149_9(ClassWithDestructor) = Chi : total:m2144_8, partial:m2149_8 +# 2150| v2150_1(void) = NoOp : +#-----| Goto -> Block 7 -# 2153| Block 8 -# 2153| r2153_44(glval) = VariableAddress[y] : -# 2153| r2153_45(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2153_45 -# 2153| r2153_46(glval) = FunctionAddress[operator*] : -# 2153| r2153_47(ClassWithDestructor &) = Call[operator*] : func:r2153_46, this:r0_9 -# 2153| m2153_48(unknown) = ^CallSideEffect : ~m2153_42 -# 2153| m2153_49(unknown) = Chi : total:m2153_42, partial:m2153_48 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2153_34 -# 2153| r2153_50(ClassWithDestructor) = Load[?] : &:r2153_47, ~m2153_49 -# 2153| m2153_51(ClassWithDestructor) = Store[y] : &:r2153_44, r2153_50 -# 2154| r2154_1(glval) = VariableAddress[y] : -# 2154| r2154_2(glval) = FunctionAddress[set_x] : -# 2154| r2154_3(char) = Constant[97] : -# 2154| v2154_4(void) = Call[set_x] : func:r2154_2, this:r2154_1, 0:r2154_3 -# 2154| m2154_5(unknown) = ^CallSideEffect : ~m2153_49 -# 2154| m2154_6(unknown) = Chi : total:m2153_49, partial:m2154_5 -# 2154| v2154_7(void) = ^IndirectReadSideEffect[-1] : &:r2154_1, m2153_51 -# 2154| m2154_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 -# 2154| m2154_9(ClassWithDestructor) = Chi : total:m2153_51, partial:m2154_8 -# 2153| r2153_52(glval) = VariableAddress[(__begin)] : -# 2153| r2153_53(glval) = FunctionAddress[operator++] : -# 2153| r2153_54(iterator &) = Call[operator++] : func:r2153_53, this:r2153_52 -# 2153| m2153_55(unknown) = ^CallSideEffect : ~m2154_6 -# 2153| m2153_56(unknown) = Chi : total:m2154_6, partial:m2153_55 -# 2153| v2153_57(void) = ^IndirectReadSideEffect[-1] : &:r2153_52, m2153_34 -# 2153| m2153_58(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2153_52 -# 2153| m2153_59(iterator) = Chi : total:m2153_34, partial:m2153_58 -# 2153| r2153_60(glval) = CopyValue : r2153_54 -#-----| Goto (back edge) -> Block 7 +# 2151| Block 7 +# 2151| m2151_1(unknown) = Phi : from 5:~m2146_6, from 6:~m2149_6 +# 2151| v2151_2(void) = NoOp : +# 2153| r2153_1(glval) = VariableAddress[x] : +# 2153| m2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 +# 2153| r2153_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2153| v2153_4(void) = Call[ClassWithDestructor] : func:r2153_3, this:r2153_1 +# 2153| m2153_5(unknown) = ^CallSideEffect : ~m2151_1 +# 2153| m2153_6(unknown) = Chi : total:m2151_1, partial:m2153_5 +# 2153| m2153_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 +# 2153| m2153_8(ClassWithDestructor) = Chi : total:m2153_2, partial:m2153_7 +# 2154| r2154_1(glval>) = VariableAddress[ys] : +# 2154| m2154_2(vector) = Uninitialized[ys] : &:r2154_1 +# 2154| r2154_3(glval) = FunctionAddress[vector] : +# 2154| r2154_4(glval) = VariableAddress[#temp2154:40] : +# 2154| r2154_5(glval) = VariableAddress[x] : +# 2154| r2154_6(ClassWithDestructor) = Load[x] : &:r2154_5, m2153_8 +# 2154| m2154_7(ClassWithDestructor) = Store[#temp2154:40] : &:r2154_4, r2154_6 +# 2154| r2154_8(ClassWithDestructor) = Load[#temp2154:40] : &:r2154_4, m2154_7 +# 2154| v2154_9(void) = Call[vector] : func:r2154_3, this:r2154_1, 0:r2154_8 +# 2154| m2154_10(unknown) = ^CallSideEffect : ~m2153_6 +# 2154| m2154_11(unknown) = Chi : total:m2153_6, partial:m2154_10 +# 2154| m2154_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 +# 2154| m2154_13(vector) = Chi : total:m2154_2, partial:m2154_12 +# 2154| r2154_14(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_15(glval>) = VariableAddress[ys] : +# 2154| r2154_16(vector &) = CopyValue : r2154_15 +# 2154| m2154_17(vector &) = Store[(__range)] : &:r2154_14, r2154_16 +# 2154| r2154_18(glval) = VariableAddress[(__begin)] : +# 2154| r2154_19(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_20(vector &) = Load[(__range)] : &:r2154_19, m2154_17 +#-----| r0_1(glval>) = CopyValue : r2154_20 +#-----| r0_2(glval>) = Convert : r0_1 +# 2154| r2154_21(glval) = FunctionAddress[begin] : +# 2154| r2154_22(iterator) = Call[begin] : func:r2154_21, this:r0_2 +# 2154| m2154_23(unknown) = ^CallSideEffect : ~m2154_11 +# 2154| m2154_24(unknown) = Chi : total:m2154_11, partial:m2154_23 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2154_13 +# 2154| m2154_25(iterator) = Store[(__begin)] : &:r2154_18, r2154_22 +# 2154| r2154_26(glval) = VariableAddress[(__end)] : +# 2154| r2154_27(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_28(vector &) = Load[(__range)] : &:r2154_27, m2154_17 +#-----| r0_4(glval>) = CopyValue : r2154_28 +#-----| r0_5(glval>) = Convert : r0_4 +# 2154| r2154_29(glval) = FunctionAddress[end] : +# 2154| r2154_30(iterator) = Call[end] : func:r2154_29, this:r0_5 +# 2154| m2154_31(unknown) = ^CallSideEffect : ~m2154_24 +# 2154| m2154_32(unknown) = Chi : total:m2154_24, partial:m2154_31 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2154_13 +# 2154| m2154_33(iterator) = Store[(__end)] : &:r2154_26, r2154_30 +#-----| Goto -> Block 8 -# 2155| Block 9 -# 2155| v2155_1(void) = NoOp : -# 2136| v2136_9(void) = ReturnVoid : -# 2136| v2136_10(void) = AliasedUse : ~m2153_42 -# 2136| v2136_11(void) = ExitFunction : +# 2154| Block 8 +# 2154| m2154_34(iterator) = Phi : from 7:m2154_25, from 9:m2154_59 +# 2154| m2154_35(unknown) = Phi : from 7:~m2154_32, from 9:~m2154_56 +# 2154| r2154_36(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2154_36 +# 2154| r2154_37(glval) = FunctionAddress[operator!=] : +# 2154| r2154_38(glval) = VariableAddress[(__end)] : +# 2154| r2154_39(iterator) = Load[(__end)] : &:r2154_38, m2154_33 +# 2154| r2154_40(bool) = Call[operator!=] : func:r2154_37, this:r0_7, 0:r2154_39 +# 2154| m2154_41(unknown) = ^CallSideEffect : ~m2154_35 +# 2154| m2154_42(unknown) = Chi : total:m2154_35, partial:m2154_41 +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2154_34 +# 2154| v2154_43(void) = ConditionalBranch : r2154_40 +#-----| False -> Block 10 +#-----| True -> Block 9 -# 2136| Block 10 -# 2136| v2136_12(void) = Unreached : +# 2154| Block 9 +# 2154| r2154_44(glval) = VariableAddress[y] : +# 2154| r2154_45(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2154_45 +# 2154| r2154_46(glval) = FunctionAddress[operator*] : +# 2154| r2154_47(ClassWithDestructor &) = Call[operator*] : func:r2154_46, this:r0_9 +# 2154| m2154_48(unknown) = ^CallSideEffect : ~m2154_42 +# 2154| m2154_49(unknown) = Chi : total:m2154_42, partial:m2154_48 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2154_34 +# 2154| r2154_50(ClassWithDestructor) = Load[?] : &:r2154_47, ~m2154_49 +# 2154| m2154_51(ClassWithDestructor) = Store[y] : &:r2154_44, r2154_50 +# 2155| r2155_1(glval) = VariableAddress[y] : +# 2155| r2155_2(glval) = FunctionAddress[set_x] : +# 2155| r2155_3(char) = Constant[97] : +# 2155| v2155_4(void) = Call[set_x] : func:r2155_2, this:r2155_1, 0:r2155_3 +# 2155| m2155_5(unknown) = ^CallSideEffect : ~m2154_49 +# 2155| m2155_6(unknown) = Chi : total:m2154_49, partial:m2155_5 +# 2155| v2155_7(void) = ^IndirectReadSideEffect[-1] : &:r2155_1, m2154_51 +# 2155| m2155_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 +# 2155| m2155_9(ClassWithDestructor) = Chi : total:m2154_51, partial:m2155_8 +# 2154| r2154_52(glval) = VariableAddress[(__begin)] : +# 2154| r2154_53(glval) = FunctionAddress[operator++] : +# 2154| r2154_54(iterator &) = Call[operator++] : func:r2154_53, this:r2154_52 +# 2154| m2154_55(unknown) = ^CallSideEffect : ~m2155_6 +# 2154| m2154_56(unknown) = Chi : total:m2155_6, partial:m2154_55 +# 2154| v2154_57(void) = ^IndirectReadSideEffect[-1] : &:r2154_52, m2154_34 +# 2154| m2154_58(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2154_52 +# 2154| m2154_59(iterator) = Chi : total:m2154_34, partial:m2154_58 +# 2154| r2154_60(glval) = CopyValue : r2154_54 +#-----| Goto (back edge) -> Block 8 + +# 2157| Block 10 +# 2157| r2157_1(glval>) = VariableAddress[ys] : +# 2157| m2157_2(vector) = Uninitialized[ys] : &:r2157_1 +# 2157| r2157_3(glval) = FunctionAddress[vector] : +# 2157| r2157_4(glval) = VariableAddress[#temp2157:40] : +# 2157| r2157_5(glval) = VariableAddress[x] : +# 2157| r2157_6(ClassWithDestructor) = Load[x] : &:r2157_5, m2153_8 +# 2157| m2157_7(ClassWithDestructor) = Store[#temp2157:40] : &:r2157_4, r2157_6 +# 2157| r2157_8(ClassWithDestructor) = Load[#temp2157:40] : &:r2157_4, m2157_7 +# 2157| v2157_9(void) = Call[vector] : func:r2157_3, this:r2157_1, 0:r2157_8 +# 2157| m2157_10(unknown) = ^CallSideEffect : ~m2154_42 +# 2157| m2157_11(unknown) = Chi : total:m2154_42, partial:m2157_10 +# 2157| m2157_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 +# 2157| m2157_13(vector) = Chi : total:m2157_2, partial:m2157_12 +# 2157| r2157_14(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_15(glval>) = VariableAddress[ys] : +# 2157| r2157_16(vector &) = CopyValue : r2157_15 +# 2157| m2157_17(vector &) = Store[(__range)] : &:r2157_14, r2157_16 +# 2157| r2157_18(glval) = VariableAddress[(__begin)] : +# 2157| r2157_19(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_20(vector &) = Load[(__range)] : &:r2157_19, m2157_17 +#-----| r0_11(glval>) = CopyValue : r2157_20 +#-----| r0_12(glval>) = Convert : r0_11 +# 2157| r2157_21(glval) = FunctionAddress[begin] : +# 2157| r2157_22(iterator) = Call[begin] : func:r2157_21, this:r0_12 +# 2157| m2157_23(unknown) = ^CallSideEffect : ~m2157_11 +# 2157| m2157_24(unknown) = Chi : total:m2157_11, partial:m2157_23 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, m2157_13 +# 2157| m2157_25(iterator) = Store[(__begin)] : &:r2157_18, r2157_22 +# 2157| r2157_26(glval) = VariableAddress[(__end)] : +# 2157| r2157_27(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_28(vector &) = Load[(__range)] : &:r2157_27, m2157_17 +#-----| r0_14(glval>) = CopyValue : r2157_28 +#-----| r0_15(glval>) = Convert : r0_14 +# 2157| r2157_29(glval) = FunctionAddress[end] : +# 2157| r2157_30(iterator) = Call[end] : func:r2157_29, this:r0_15 +# 2157| m2157_31(unknown) = ^CallSideEffect : ~m2157_24 +# 2157| m2157_32(unknown) = Chi : total:m2157_24, partial:m2157_31 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2157_13 +# 2157| m2157_33(iterator) = Store[(__end)] : &:r2157_26, r2157_30 +#-----| Goto -> Block 11 + +# 2157| Block 11 +# 2157| m2157_34(iterator) = Phi : from 10:m2157_25, from 12:m2157_51 +# 2157| m2157_35(unknown) = Phi : from 10:~m2157_32, from 12:~m2157_48 +# 2157| r2157_36(glval) = VariableAddress[(__begin)] : +#-----| r0_17(glval) = Convert : r2157_36 +# 2157| r2157_37(glval) = FunctionAddress[operator!=] : +# 2157| r2157_38(glval) = VariableAddress[(__end)] : +# 2157| r2157_39(iterator) = Load[(__end)] : &:r2157_38, m2157_33 +# 2157| r2157_40(bool) = Call[operator!=] : func:r2157_37, this:r0_17, 0:r2157_39 +# 2157| m2157_41(unknown) = ^CallSideEffect : ~m2157_35 +# 2157| m2157_42(unknown) = Chi : total:m2157_35, partial:m2157_41 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, m2157_34 +# 2157| v2157_43(void) = ConditionalBranch : r2157_40 +#-----| False -> Block 15 +#-----| True -> Block 13 + +# 2157| Block 12 +# 2157| r2157_44(glval) = VariableAddress[(__begin)] : +# 2157| r2157_45(glval) = FunctionAddress[operator++] : +# 2157| r2157_46(iterator &) = Call[operator++] : func:r2157_45, this:r2157_44 +# 2157| m2157_47(unknown) = ^CallSideEffect : ~m2159_5 +# 2157| m2157_48(unknown) = Chi : total:m2159_5, partial:m2157_47 +# 2157| v2157_49(void) = ^IndirectReadSideEffect[-1] : &:r2157_44, m2157_34 +# 2157| m2157_50(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2157_44 +# 2157| m2157_51(iterator) = Chi : total:m2157_34, partial:m2157_50 +# 2157| r2157_52(glval) = CopyValue : r2157_46 +#-----| Goto (back edge) -> Block 11 + +# 2157| Block 13 +# 2157| r2157_53(glval) = VariableAddress[y] : +# 2157| r2157_54(glval) = VariableAddress[(__begin)] : +#-----| r0_19(glval) = Convert : r2157_54 +# 2157| r2157_55(glval) = FunctionAddress[operator*] : +# 2157| r2157_56(ClassWithDestructor &) = Call[operator*] : func:r2157_55, this:r0_19 +# 2157| m2157_57(unknown) = ^CallSideEffect : ~m2157_42 +# 2157| m2157_58(unknown) = Chi : total:m2157_42, partial:m2157_57 +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m2157_34 +# 2157| r2157_59(ClassWithDestructor) = Load[?] : &:r2157_56, ~m2157_58 +# 2157| m2157_60(ClassWithDestructor) = Store[y] : &:r2157_53, r2157_59 +# 2158| r2158_1(glval) = VariableAddress[y] : +# 2158| r2158_2(glval) = FunctionAddress[set_x] : +# 2158| r2158_3(char) = Constant[97] : +# 2158| v2158_4(void) = Call[set_x] : func:r2158_2, this:r2158_1, 0:r2158_3 +# 2158| m2158_5(unknown) = ^CallSideEffect : ~m2157_58 +# 2158| m2158_6(unknown) = Chi : total:m2157_58, partial:m2158_5 +# 2158| v2158_7(void) = ^IndirectReadSideEffect[-1] : &:r2158_1, m2157_60 +# 2158| m2158_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 +# 2158| m2158_9(ClassWithDestructor) = Chi : total:m2157_60, partial:m2158_8 +# 2159| r2159_1(glval) = VariableAddress[y] : +# 2159| r2159_2(glval) = FunctionAddress[get_x] : +# 2159| r2159_3(char) = Call[get_x] : func:r2159_2, this:r2159_1 +# 2159| m2159_4(unknown) = ^CallSideEffect : ~m2158_6 +# 2159| m2159_5(unknown) = Chi : total:m2158_6, partial:m2159_4 +# 2159| v2159_6(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, m2158_9 +# 2159| m2159_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 +# 2159| m2159_8(ClassWithDestructor) = Chi : total:m2158_9, partial:m2159_7 +# 2159| r2159_9(int) = Convert : r2159_3 +# 2159| r2159_10(int) = Constant[98] : +# 2159| r2159_11(bool) = CompareEQ : r2159_9, r2159_10 +# 2159| v2159_12(void) = ConditionalBranch : r2159_11 +#-----| False -> Block 12 +#-----| True -> Block 14 + +# 2160| Block 14 +# 2160| v2160_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2163| Block 15 +# 2163| r2163_1(glval>) = VariableAddress[ys] : +# 2163| m2163_2(vector) = Uninitialized[ys] : &:r2163_1 +# 2163| r2163_3(glval) = FunctionAddress[vector] : +# 2163| r2163_4(int) = Constant[1] : +# 2163| v2163_5(void) = Call[vector] : func:r2163_3, this:r2163_1, 0:r2163_4 +# 2163| m2163_6(unknown) = ^CallSideEffect : ~m2157_42 +# 2163| m2163_7(unknown) = Chi : total:m2157_42, partial:m2163_6 +# 2163| m2163_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 +# 2163| m2163_9(vector) = Chi : total:m2163_2, partial:m2163_8 +# 2163| r2163_10(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_11(glval>) = VariableAddress[ys] : +# 2163| r2163_12(vector &) = CopyValue : r2163_11 +# 2163| m2163_13(vector &) = Store[(__range)] : &:r2163_10, r2163_12 +# 2163| r2163_14(glval) = VariableAddress[(__begin)] : +# 2163| r2163_15(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_16(vector &) = Load[(__range)] : &:r2163_15, m2163_13 +#-----| r0_21(glval>) = CopyValue : r2163_16 +#-----| r0_22(glval>) = Convert : r0_21 +# 2163| r2163_17(glval) = FunctionAddress[begin] : +# 2163| r2163_18(iterator) = Call[begin] : func:r2163_17, this:r0_22 +# 2163| m2163_19(unknown) = ^CallSideEffect : ~m2163_7 +# 2163| m2163_20(unknown) = Chi : total:m2163_7, partial:m2163_19 +#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, m2163_9 +# 2163| m2163_21(iterator) = Store[(__begin)] : &:r2163_14, r2163_18 +# 2163| r2163_22(glval) = VariableAddress[(__end)] : +# 2163| r2163_23(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_24(vector &) = Load[(__range)] : &:r2163_23, m2163_13 +#-----| r0_24(glval>) = CopyValue : r2163_24 +#-----| r0_25(glval>) = Convert : r0_24 +# 2163| r2163_25(glval) = FunctionAddress[end] : +# 2163| r2163_26(iterator) = Call[end] : func:r2163_25, this:r0_25 +# 2163| m2163_27(unknown) = ^CallSideEffect : ~m2163_20 +# 2163| m2163_28(unknown) = Chi : total:m2163_20, partial:m2163_27 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, m2163_9 +# 2163| m2163_29(iterator) = Store[(__end)] : &:r2163_22, r2163_26 +#-----| Goto -> Block 16 + +# 2163| Block 16 +# 2163| m2163_30(iterator) = Phi : from 15:m2163_21, from 17:m2163_47 +# 2163| m2163_31(unknown) = Phi : from 15:~m2163_28, from 17:~m2163_44 +# 2163| r2163_32(glval) = VariableAddress[(__begin)] : +#-----| r0_27(glval) = Convert : r2163_32 +# 2163| r2163_33(glval) = FunctionAddress[operator!=] : +# 2163| r2163_34(glval) = VariableAddress[(__end)] : +# 2163| r2163_35(iterator) = Load[(__end)] : &:r2163_34, m2163_29 +# 2163| r2163_36(bool) = Call[operator!=] : func:r2163_33, this:r0_27, 0:r2163_35 +# 2163| m2163_37(unknown) = ^CallSideEffect : ~m2163_31 +# 2163| m2163_38(unknown) = Chi : total:m2163_31, partial:m2163_37 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m2163_30 +# 2163| v2163_39(void) = ConditionalBranch : r2163_36 +#-----| False -> Block 20 +#-----| True -> Block 18 + +# 2163| Block 17 +# 2163| r2163_40(glval) = VariableAddress[(__begin)] : +# 2163| r2163_41(glval) = FunctionAddress[operator++] : +# 2163| r2163_42(iterator &) = Call[operator++] : func:r2163_41, this:r2163_40 +# 2163| m2163_43(unknown) = ^CallSideEffect : ~m2163_54 +# 2163| m2163_44(unknown) = Chi : total:m2163_54, partial:m2163_43 +# 2163| v2163_45(void) = ^IndirectReadSideEffect[-1] : &:r2163_40, m2163_30 +# 2163| m2163_46(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2163_40 +# 2163| m2163_47(iterator) = Chi : total:m2163_30, partial:m2163_46 +# 2163| r2163_48(glval) = CopyValue : r2163_42 +#-----| Goto (back edge) -> Block 16 + +# 2163| Block 18 +# 2163| r2163_49(glval) = VariableAddress[y] : +# 2163| r2163_50(glval) = VariableAddress[(__begin)] : +#-----| r0_29(glval) = Convert : r2163_50 +# 2163| r2163_51(glval) = FunctionAddress[operator*] : +# 2163| r2163_52(int &) = Call[operator*] : func:r2163_51, this:r0_29 +# 2163| m2163_53(unknown) = ^CallSideEffect : ~m2163_38 +# 2163| m2163_54(unknown) = Chi : total:m2163_38, partial:m2163_53 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, m2163_30 +# 2163| r2163_55(int) = Load[?] : &:r2163_52, ~m2163_54 +# 2163| m2163_56(int) = Store[y] : &:r2163_49, r2163_55 +# 2164| r2164_1(glval) = VariableAddress[y] : +# 2164| r2164_2(int) = Load[y] : &:r2164_1, m2163_56 +# 2164| r2164_3(int) = Constant[1] : +# 2164| r2164_4(bool) = CompareEQ : r2164_2, r2164_3 +# 2164| v2164_5(void) = ConditionalBranch : r2164_4 +#-----| False -> Block 17 +#-----| True -> Block 19 + +# 2165| Block 19 +# 2165| v2165_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2167| Block 20 +# 2167| v2167_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2137| Block 21 +# 2137| v2137_13(void) = Unreached : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index cd702fcb265..4d44f118c86 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2129,6 +2129,7 @@ public: ~ClassWithDestructor() { delete x; } void set_x(char y) { *x = y; } + char get_x() { return *x; } }; constexpr bool initialization_with_destructor_bool = true; @@ -2152,6 +2153,17 @@ void initialization_with_destructor(bool b, char c) { ClassWithDestructor x; for(vector ys(x); ClassWithDestructor y : ys) y.set_x('a'); + + for(vector ys(x); ClassWithDestructor y : ys) { + y.set_x('a'); + if (y.get_x() == 'b') + return; + } + + for(vector ys(1); int y : ys) { + if (y == 1) + return; + } } // semmle-extractor-options: -std=c++20 --clang 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 e3b2ea7c275..c42cb501cde 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -761,6 +761,7 @@ | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | +| file://:0:0:0:0 | Address | &:r0_12 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | @@ -768,15 +769,22 @@ | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | +| file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_17 | +| file://:0:0:0:0 | Address | &:r0_17 | | file://:0:0:0:0 | Address | &:r0_18 | | file://:0:0:0:0 | Address | &:r0_18 | | file://:0:0:0:0 | Address | &:r0_19 | | file://:0:0:0:0 | Address | &:r0_19 | +| file://:0:0:0:0 | Address | &:r0_19 | +| file://:0:0:0:0 | Address | &:r0_22 | +| file://:0:0:0:0 | Address | &:r0_25 | +| file://:0:0:0:0 | Address | &:r0_27 | +| file://:0:0:0:0 | Address | &:r0_29 | | file://:0:0:0:0 | Arg(0) | 0:r0_6 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | @@ -874,10 +882,18 @@ | file://:0:0:0:0 | SideEffect | m1080_23 | | file://:0:0:0:0 | SideEffect | m1086_23 | | file://:0:0:0:0 | SideEffect | m1086_23 | -| file://:0:0:0:0 | SideEffect | m2153_13 | -| file://:0:0:0:0 | SideEffect | m2153_13 | -| file://:0:0:0:0 | SideEffect | m2153_34 | -| file://:0:0:0:0 | SideEffect | m2153_34 | +| file://:0:0:0:0 | SideEffect | m2154_13 | +| file://:0:0:0:0 | SideEffect | m2154_13 | +| file://:0:0:0:0 | SideEffect | m2154_34 | +| file://:0:0:0:0 | SideEffect | m2154_34 | +| file://:0:0:0:0 | SideEffect | m2157_13 | +| file://:0:0:0:0 | SideEffect | m2157_13 | +| file://:0:0:0:0 | SideEffect | m2157_34 | +| file://:0:0:0:0 | SideEffect | m2157_34 | +| file://:0:0:0:0 | SideEffect | m2163_9 | +| file://:0:0:0:0 | SideEffect | m2163_9 | +| file://:0:0:0:0 | SideEffect | m2163_30 | +| file://:0:0:0:0 | SideEffect | m2163_30 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -949,9 +965,11 @@ | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_11 | +| file://:0:0:0:0 | Unary | r0_11 | | file://:0:0:0:0 | Unary | r0_12 | | file://:0:0:0:0 | Unary | r0_14 | | file://:0:0:0:0 | Unary | r0_14 | +| file://:0:0:0:0 | Unary | r0_14 | | file://:0:0:0:0 | Unary | r0_17 | | file://:0:0:0:0 | Unary | r0_18 | | file://:0:0:0:0 | Unary | r0_18 | @@ -960,6 +978,8 @@ | file://:0:0:0:0 | Unary | r0_20 | | file://:0:0:0:0 | Unary | r0_21 | | file://:0:0:0:0 | Unary | r0_21 | +| file://:0:0:0:0 | Unary | r0_21 | +| file://:0:0:0:0 | Unary | r0_24 | | ir.c:7:6:7:17 | ChiPartial | partial:m7_3 | | ir.c:7:6:7:17 | ChiTotal | total:m7_2 | | ir.c:7:6:7:17 | SideEffect | ~m10_6 | @@ -10187,193 +10207,388 @@ | ir.cpp:2131:31:2131:31 | Address | &:r2131_11 | | ir.cpp:2131:31:2131:31 | Load | m2131_10 | | ir.cpp:2131:31:2131:31 | StoreValue | r2131_12 | -| ir.cpp:2134:16:2134:50 | Address | &:r2134_3 | -| ir.cpp:2134:16:2134:50 | SideEffect | ~m2134_6 | -| ir.cpp:2134:54:2134:57 | ChiPartial | partial:m2134_5 | -| ir.cpp:2134:54:2134:57 | ChiTotal | total:m2134_2 | -| ir.cpp:2134:54:2134:57 | StoreValue | r2134_4 | -| ir.cpp:2136:6:2136:35 | ChiPartial | partial:m2136_3 | -| ir.cpp:2136:6:2136:35 | ChiTotal | total:m2136_2 | -| ir.cpp:2136:6:2136:35 | SideEffect | ~m2153_42 | -| ir.cpp:2136:42:2136:42 | Address | &:r2136_5 | -| ir.cpp:2136:50:2136:50 | Address | &:r2136_7 | -| ir.cpp:2137:29:2137:29 | Address | &:r2137_1 | -| ir.cpp:2137:29:2137:29 | Address | &:r2137_1 | -| ir.cpp:2137:29:2137:29 | Arg(this) | this:r2137_1 | -| ir.cpp:2137:29:2137:29 | CallTarget | func:r2137_3 | -| ir.cpp:2137:29:2137:29 | ChiPartial | partial:m2137_5 | -| ir.cpp:2137:29:2137:29 | ChiPartial | partial:m2137_7 | -| ir.cpp:2137:29:2137:29 | ChiTotal | total:m2136_4 | -| ir.cpp:2137:29:2137:29 | ChiTotal | total:m2137_2 | -| ir.cpp:2137:29:2137:29 | SideEffect | ~m2136_4 | -| ir.cpp:2137:32:2137:32 | Address | &:r2137_9 | -| ir.cpp:2137:32:2137:32 | Condition | r2137_10 | -| ir.cpp:2137:32:2137:32 | Load | m2136_6 | -| ir.cpp:2138:9:2138:9 | Address | &:r2138_1 | -| ir.cpp:2138:9:2138:9 | Address | &:r2138_1 | -| ir.cpp:2138:9:2138:9 | Arg(this) | this:r2138_1 | -| ir.cpp:2138:9:2138:9 | ChiPartial | partial:m2138_8 | -| ir.cpp:2138:9:2138:9 | ChiTotal | total:m2137_8 | -| ir.cpp:2138:9:2138:9 | SideEffect | m2137_8 | -| ir.cpp:2138:11:2138:15 | CallTarget | func:r2138_2 | -| ir.cpp:2138:11:2138:15 | ChiPartial | partial:m2138_5 | -| ir.cpp:2138:11:2138:15 | ChiTotal | total:m2137_6 | -| ir.cpp:2138:11:2138:15 | SideEffect | ~m2137_6 | -| ir.cpp:2138:17:2138:19 | Arg(0) | 0:r2138_3 | -| ir.cpp:2140:39:2140:39 | Address | &:r2140_2 | -| ir.cpp:2140:39:2140:39 | Address | &:r2140_2 | -| ir.cpp:2140:39:2140:39 | Arg(this) | this:r2140_2 | -| ir.cpp:2140:39:2140:39 | CallTarget | func:r2140_4 | -| ir.cpp:2140:39:2140:39 | ChiPartial | partial:m2140_6 | -| ir.cpp:2140:39:2140:39 | ChiPartial | partial:m2140_8 | -| ir.cpp:2140:39:2140:39 | ChiTotal | total:m2140_1 | -| ir.cpp:2140:39:2140:39 | ChiTotal | total:m2140_3 | -| ir.cpp:2140:39:2140:39 | Phi | from 0:~m2137_6 | -| ir.cpp:2140:39:2140:39 | Phi | from 1:~m2138_6 | -| ir.cpp:2140:39:2140:39 | SideEffect | ~m2140_1 | -| ir.cpp:2140:42:2140:76 | Condition | r2140_10 | -| ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | -| ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | -| ir.cpp:2141:9:2141:9 | Arg(this) | this:r2141_1 | -| ir.cpp:2141:9:2141:9 | ChiPartial | partial:m2141_8 | -| ir.cpp:2141:9:2141:9 | ChiTotal | total:m2140_9 | -| ir.cpp:2141:9:2141:9 | SideEffect | m2140_9 | -| ir.cpp:2141:11:2141:15 | CallTarget | func:r2141_2 | -| ir.cpp:2141:11:2141:15 | ChiPartial | partial:m2141_5 | -| ir.cpp:2141:11:2141:15 | ChiTotal | total:m2140_7 | -| ir.cpp:2141:11:2141:15 | SideEffect | ~m2140_7 | -| ir.cpp:2141:17:2141:19 | Arg(0) | 0:r2141_3 | -| ir.cpp:2143:32:2143:32 | Address | &:r2143_1 | -| ir.cpp:2143:32:2143:32 | Address | &:r2143_1 | -| ir.cpp:2143:32:2143:32 | Arg(this) | this:r2143_1 | -| ir.cpp:2143:32:2143:32 | CallTarget | func:r2143_3 | -| ir.cpp:2143:32:2143:32 | ChiPartial | partial:m2143_5 | -| ir.cpp:2143:32:2143:32 | ChiPartial | partial:m2143_7 | -| ir.cpp:2143:32:2143:32 | ChiTotal | total:m2141_6 | -| ir.cpp:2143:32:2143:32 | ChiTotal | total:m2143_2 | -| ir.cpp:2143:32:2143:32 | SideEffect | ~m2141_6 | -| ir.cpp:2143:35:2143:35 | Address | &:r2143_9 | -| ir.cpp:2143:35:2143:35 | Condition | r2143_11 | -| ir.cpp:2143:35:2143:35 | Load | m2136_8 | -| ir.cpp:2143:35:2143:35 | Unary | r2143_10 | -| ir.cpp:2145:11:2145:11 | Address | &:r2145_1 | -| ir.cpp:2145:11:2145:11 | Address | &:r2145_1 | -| ir.cpp:2145:11:2145:11 | Arg(this) | this:r2145_1 | -| ir.cpp:2145:11:2145:11 | ChiPartial | partial:m2145_8 | -| ir.cpp:2145:11:2145:11 | ChiTotal | total:m2143_8 | -| ir.cpp:2145:11:2145:11 | SideEffect | m2143_8 | -| ir.cpp:2145:13:2145:17 | CallTarget | func:r2145_2 | -| ir.cpp:2145:13:2145:17 | ChiPartial | partial:m2145_5 | -| ir.cpp:2145:13:2145:17 | ChiTotal | total:m2143_6 | -| ir.cpp:2145:13:2145:17 | SideEffect | ~m2143_6 | -| ir.cpp:2145:19:2145:21 | Arg(0) | 0:r2145_3 | -| ir.cpp:2148:11:2148:11 | Address | &:r2148_1 | -| ir.cpp:2148:11:2148:11 | Address | &:r2148_1 | -| ir.cpp:2148:11:2148:11 | Arg(this) | this:r2148_1 | -| ir.cpp:2148:11:2148:11 | ChiPartial | partial:m2148_8 | -| ir.cpp:2148:11:2148:11 | ChiTotal | total:m2143_8 | -| ir.cpp:2148:11:2148:11 | SideEffect | m2143_8 | -| ir.cpp:2148:13:2148:17 | CallTarget | func:r2148_2 | -| ir.cpp:2148:13:2148:17 | ChiPartial | partial:m2148_5 | -| ir.cpp:2148:13:2148:17 | ChiTotal | total:m2143_6 | -| ir.cpp:2148:13:2148:17 | SideEffect | ~m2143_6 | -| ir.cpp:2148:19:2148:21 | Arg(0) | 0:r2148_3 | -| ir.cpp:2150:5:2150:5 | Phi | from 4:~m2145_6 | -| ir.cpp:2150:5:2150:5 | Phi | from 5:~m2148_6 | -| ir.cpp:2152:25:2152:25 | Address | &:r2152_1 | -| ir.cpp:2152:25:2152:25 | Address | &:r2152_1 | -| ir.cpp:2152:25:2152:25 | Arg(this) | this:r2152_1 | -| ir.cpp:2152:25:2152:25 | CallTarget | func:r2152_3 | -| ir.cpp:2152:25:2152:25 | ChiPartial | partial:m2152_5 | -| ir.cpp:2152:25:2152:25 | ChiPartial | partial:m2152_7 | -| ir.cpp:2152:25:2152:25 | ChiTotal | total:m2150_1 | -| ir.cpp:2152:25:2152:25 | ChiTotal | total:m2152_2 | -| ir.cpp:2152:25:2152:25 | SideEffect | ~m2150_1 | -| ir.cpp:2153:5:2153:5 | Address | &:r2153_14 | -| ir.cpp:2153:5:2153:5 | Address | &:r2153_18 | -| ir.cpp:2153:5:2153:5 | Address | &:r2153_26 | -| ir.cpp:2153:37:2153:38 | Address | &:r2153_1 | -| ir.cpp:2153:37:2153:38 | Address | &:r2153_1 | -| ir.cpp:2153:37:2153:38 | Arg(this) | this:r2153_1 | -| ir.cpp:2153:40:2153:40 | Address | &:r2153_4 | -| ir.cpp:2153:40:2153:40 | Address | &:r2153_4 | -| ir.cpp:2153:40:2153:40 | Address | &:r2153_5 | -| ir.cpp:2153:40:2153:40 | Arg(0) | 0:r2153_8 | -| ir.cpp:2153:40:2153:40 | Load | m2152_8 | -| ir.cpp:2153:40:2153:40 | Load | m2153_7 | -| ir.cpp:2153:40:2153:40 | StoreValue | r2153_6 | -| ir.cpp:2153:40:2153:41 | CallTarget | func:r2153_3 | -| ir.cpp:2153:40:2153:41 | ChiPartial | partial:m2153_10 | -| ir.cpp:2153:40:2153:41 | ChiPartial | partial:m2153_12 | -| ir.cpp:2153:40:2153:41 | ChiTotal | total:m2152_6 | -| ir.cpp:2153:40:2153:41 | ChiTotal | total:m2153_2 | -| ir.cpp:2153:40:2153:41 | SideEffect | ~m2152_6 | -| ir.cpp:2153:64:2153:64 | Address | &:r2153_44 | -| ir.cpp:2153:68:2153:68 | Address | &:r2153_19 | -| ir.cpp:2153:68:2153:68 | Address | &:r2153_27 | -| ir.cpp:2153:68:2153:68 | Address | &:r2153_38 | -| ir.cpp:2153:68:2153:68 | Address | &:r2153_47 | -| ir.cpp:2153:68:2153:68 | Address | &:r2153_52 | -| ir.cpp:2153:68:2153:68 | Address | &:r2153_52 | -| ir.cpp:2153:68:2153:68 | Arg(0) | 0:r2153_39 | -| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_2 | -| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_5 | -| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_7 | -| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_9 | -| ir.cpp:2153:68:2153:68 | Arg(this) | this:r2153_52 | -| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_21 | -| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_29 | -| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_37 | -| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_46 | -| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_53 | -| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_23 | -| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_31 | -| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_41 | -| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_48 | -| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_55 | -| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_58 | -| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_11 | -| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_24 | -| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_34 | -| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_35 | -| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_42 | -| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2154_6 | -| ir.cpp:2153:68:2153:68 | Condition | r2153_40 | -| ir.cpp:2153:68:2153:68 | Load | m2153_17 | -| ir.cpp:2153:68:2153:68 | Load | m2153_17 | -| ir.cpp:2153:68:2153:68 | Load | m2153_33 | -| ir.cpp:2153:68:2153:68 | Phi | from 6:m2153_25 | -| ir.cpp:2153:68:2153:68 | Phi | from 6:~m2153_32 | -| ir.cpp:2153:68:2153:68 | Phi | from 8:m2153_59 | -| ir.cpp:2153:68:2153:68 | Phi | from 8:~m2153_56 | -| ir.cpp:2153:68:2153:68 | SideEffect | m2153_34 | -| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_11 | -| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_24 | -| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_35 | -| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_42 | -| ir.cpp:2153:68:2153:68 | SideEffect | ~m2154_6 | -| ir.cpp:2153:68:2153:68 | StoreValue | r2153_22 | -| ir.cpp:2153:68:2153:68 | StoreValue | r2153_30 | -| ir.cpp:2153:68:2153:68 | Unary | r2153_20 | -| ir.cpp:2153:68:2153:68 | Unary | r2153_28 | -| ir.cpp:2153:68:2153:68 | Unary | r2153_36 | -| ir.cpp:2153:68:2153:68 | Unary | r2153_45 | -| ir.cpp:2153:68:2153:68 | Unary | r2153_54 | -| ir.cpp:2153:68:2153:69 | StoreValue | r2153_16 | -| ir.cpp:2153:68:2153:69 | Unary | r2153_15 | -| ir.cpp:2153:68:2153:70 | Load | ~m2153_49 | -| ir.cpp:2153:68:2153:70 | StoreValue | r2153_50 | -| ir.cpp:2154:7:2154:7 | Address | &:r2154_1 | -| ir.cpp:2154:7:2154:7 | Address | &:r2154_1 | -| ir.cpp:2154:7:2154:7 | Arg(this) | this:r2154_1 | -| ir.cpp:2154:7:2154:7 | ChiPartial | partial:m2154_8 | -| ir.cpp:2154:7:2154:7 | ChiTotal | total:m2153_51 | -| ir.cpp:2154:7:2154:7 | SideEffect | m2153_51 | -| ir.cpp:2154:9:2154:13 | CallTarget | func:r2154_2 | -| ir.cpp:2154:9:2154:13 | ChiPartial | partial:m2154_5 | -| ir.cpp:2154:9:2154:13 | ChiTotal | total:m2153_49 | -| ir.cpp:2154:9:2154:13 | SideEffect | ~m2153_49 | -| ir.cpp:2154:15:2154:17 | Arg(0) | 0:r2154_3 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_5 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_5 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_7 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_7 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_17 | +| ir.cpp:2132:10:2132:14 | ChiPartial | partial:m2132_3 | +| ir.cpp:2132:10:2132:14 | ChiTotal | total:m2132_2 | +| ir.cpp:2132:10:2132:14 | Load | m2132_6 | +| ir.cpp:2132:10:2132:14 | Load | m2132_15 | +| ir.cpp:2132:10:2132:14 | SideEffect | m2132_3 | +| ir.cpp:2132:10:2132:14 | SideEffect | m2132_8 | +| ir.cpp:2132:20:2132:29 | Address | &:r2132_9 | +| ir.cpp:2132:27:2132:28 | Load | ~m2132_4 | +| ir.cpp:2132:27:2132:28 | StoreValue | r2132_14 | +| ir.cpp:2132:28:2132:28 | Address | &:r2132_10 | +| ir.cpp:2132:28:2132:28 | Address | &:r2132_12 | +| ir.cpp:2132:28:2132:28 | Address | &:r2132_13 | +| ir.cpp:2132:28:2132:28 | Load | m2132_6 | +| ir.cpp:2132:28:2132:28 | Load | ~m2132_8 | +| ir.cpp:2132:28:2132:28 | Unary | r2132_11 | +| ir.cpp:2135:16:2135:50 | Address | &:r2135_3 | +| ir.cpp:2135:16:2135:50 | SideEffect | ~m2135_6 | +| ir.cpp:2135:54:2135:57 | ChiPartial | partial:m2135_5 | +| ir.cpp:2135:54:2135:57 | ChiTotal | total:m2135_2 | +| ir.cpp:2135:54:2135:57 | StoreValue | r2135_4 | +| ir.cpp:2137:6:2137:35 | ChiPartial | partial:m2137_3 | +| ir.cpp:2137:6:2137:35 | ChiTotal | total:m2137_2 | +| ir.cpp:2137:6:2137:35 | Phi | from 14:~m2159_5 | +| ir.cpp:2137:6:2137:35 | Phi | from 19:~m2163_54 | +| ir.cpp:2137:6:2137:35 | Phi | from 20:~m2163_38 | +| ir.cpp:2137:6:2137:35 | SideEffect | ~m2137_9 | +| ir.cpp:2137:42:2137:42 | Address | &:r2137_5 | +| ir.cpp:2137:50:2137:50 | Address | &:r2137_7 | +| ir.cpp:2138:29:2138:29 | Address | &:r2138_1 | +| ir.cpp:2138:29:2138:29 | Address | &:r2138_1 | +| ir.cpp:2138:29:2138:29 | Arg(this) | this:r2138_1 | +| ir.cpp:2138:29:2138:29 | CallTarget | func:r2138_3 | +| ir.cpp:2138:29:2138:29 | ChiPartial | partial:m2138_5 | +| ir.cpp:2138:29:2138:29 | ChiPartial | partial:m2138_7 | +| ir.cpp:2138:29:2138:29 | ChiTotal | total:m2137_4 | +| ir.cpp:2138:29:2138:29 | ChiTotal | total:m2138_2 | +| ir.cpp:2138:29:2138:29 | SideEffect | ~m2137_4 | +| ir.cpp:2138:32:2138:32 | Address | &:r2138_9 | +| ir.cpp:2138:32:2138:32 | Condition | r2138_10 | +| ir.cpp:2138:32:2138:32 | Load | m2137_6 | +| ir.cpp:2139:9:2139:9 | Address | &:r2139_1 | +| ir.cpp:2139:9:2139:9 | Address | &:r2139_1 | +| ir.cpp:2139:9:2139:9 | Arg(this) | this:r2139_1 | +| ir.cpp:2139:9:2139:9 | ChiPartial | partial:m2139_8 | +| ir.cpp:2139:9:2139:9 | ChiTotal | total:m2138_8 | +| ir.cpp:2139:9:2139:9 | SideEffect | m2138_8 | +| ir.cpp:2139:11:2139:15 | CallTarget | func:r2139_2 | +| ir.cpp:2139:11:2139:15 | ChiPartial | partial:m2139_5 | +| ir.cpp:2139:11:2139:15 | ChiTotal | total:m2138_6 | +| ir.cpp:2139:11:2139:15 | SideEffect | ~m2138_6 | +| ir.cpp:2139:17:2139:19 | Arg(0) | 0:r2139_3 | +| ir.cpp:2141:39:2141:39 | Address | &:r2141_2 | +| ir.cpp:2141:39:2141:39 | Address | &:r2141_2 | +| ir.cpp:2141:39:2141:39 | Arg(this) | this:r2141_2 | +| ir.cpp:2141:39:2141:39 | CallTarget | func:r2141_4 | +| ir.cpp:2141:39:2141:39 | ChiPartial | partial:m2141_6 | +| ir.cpp:2141:39:2141:39 | ChiPartial | partial:m2141_8 | +| ir.cpp:2141:39:2141:39 | ChiTotal | total:m2141_1 | +| ir.cpp:2141:39:2141:39 | ChiTotal | total:m2141_3 | +| ir.cpp:2141:39:2141:39 | Phi | from 0:~m2138_6 | +| ir.cpp:2141:39:2141:39 | Phi | from 2:~m2139_6 | +| ir.cpp:2141:39:2141:39 | SideEffect | ~m2141_1 | +| ir.cpp:2141:42:2141:76 | Condition | r2141_10 | +| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | +| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | +| ir.cpp:2142:9:2142:9 | Arg(this) | this:r2142_1 | +| ir.cpp:2142:9:2142:9 | ChiPartial | partial:m2142_8 | +| ir.cpp:2142:9:2142:9 | ChiTotal | total:m2141_9 | +| ir.cpp:2142:9:2142:9 | SideEffect | m2141_9 | +| ir.cpp:2142:11:2142:15 | CallTarget | func:r2142_2 | +| ir.cpp:2142:11:2142:15 | ChiPartial | partial:m2142_5 | +| ir.cpp:2142:11:2142:15 | ChiTotal | total:m2141_7 | +| ir.cpp:2142:11:2142:15 | SideEffect | ~m2141_7 | +| ir.cpp:2142:17:2142:19 | Arg(0) | 0:r2142_3 | +| ir.cpp:2144:32:2144:32 | Address | &:r2144_1 | +| ir.cpp:2144:32:2144:32 | Address | &:r2144_1 | +| ir.cpp:2144:32:2144:32 | Arg(this) | this:r2144_1 | +| ir.cpp:2144:32:2144:32 | CallTarget | func:r2144_3 | +| ir.cpp:2144:32:2144:32 | ChiPartial | partial:m2144_5 | +| ir.cpp:2144:32:2144:32 | ChiPartial | partial:m2144_7 | +| ir.cpp:2144:32:2144:32 | ChiTotal | total:m2142_6 | +| ir.cpp:2144:32:2144:32 | ChiTotal | total:m2144_2 | +| ir.cpp:2144:32:2144:32 | SideEffect | ~m2142_6 | +| ir.cpp:2144:35:2144:35 | Address | &:r2144_9 | +| ir.cpp:2144:35:2144:35 | Condition | r2144_11 | +| ir.cpp:2144:35:2144:35 | Load | m2137_8 | +| ir.cpp:2144:35:2144:35 | Unary | r2144_10 | +| ir.cpp:2146:11:2146:11 | Address | &:r2146_1 | +| ir.cpp:2146:11:2146:11 | Address | &:r2146_1 | +| ir.cpp:2146:11:2146:11 | Arg(this) | this:r2146_1 | +| ir.cpp:2146:11:2146:11 | ChiPartial | partial:m2146_8 | +| ir.cpp:2146:11:2146:11 | ChiTotal | total:m2144_8 | +| ir.cpp:2146:11:2146:11 | SideEffect | m2144_8 | +| ir.cpp:2146:13:2146:17 | CallTarget | func:r2146_2 | +| ir.cpp:2146:13:2146:17 | ChiPartial | partial:m2146_5 | +| ir.cpp:2146:13:2146:17 | ChiTotal | total:m2144_6 | +| ir.cpp:2146:13:2146:17 | SideEffect | ~m2144_6 | +| ir.cpp:2146:19:2146:21 | Arg(0) | 0:r2146_3 | +| ir.cpp:2149:11:2149:11 | Address | &:r2149_1 | +| ir.cpp:2149:11:2149:11 | Address | &:r2149_1 | +| ir.cpp:2149:11:2149:11 | Arg(this) | this:r2149_1 | +| ir.cpp:2149:11:2149:11 | ChiPartial | partial:m2149_8 | +| ir.cpp:2149:11:2149:11 | ChiTotal | total:m2144_8 | +| ir.cpp:2149:11:2149:11 | SideEffect | m2144_8 | +| ir.cpp:2149:13:2149:17 | CallTarget | func:r2149_2 | +| ir.cpp:2149:13:2149:17 | ChiPartial | partial:m2149_5 | +| ir.cpp:2149:13:2149:17 | ChiTotal | total:m2144_6 | +| ir.cpp:2149:13:2149:17 | SideEffect | ~m2144_6 | +| ir.cpp:2149:19:2149:21 | Arg(0) | 0:r2149_3 | +| ir.cpp:2151:5:2151:5 | Phi | from 5:~m2146_6 | +| ir.cpp:2151:5:2151:5 | Phi | from 6:~m2149_6 | +| ir.cpp:2153:25:2153:25 | Address | &:r2153_1 | +| ir.cpp:2153:25:2153:25 | Address | &:r2153_1 | +| ir.cpp:2153:25:2153:25 | Arg(this) | this:r2153_1 | +| ir.cpp:2153:25:2153:25 | CallTarget | func:r2153_3 | +| ir.cpp:2153:25:2153:25 | ChiPartial | partial:m2153_5 | +| ir.cpp:2153:25:2153:25 | ChiPartial | partial:m2153_7 | +| ir.cpp:2153:25:2153:25 | ChiTotal | total:m2151_1 | +| ir.cpp:2153:25:2153:25 | ChiTotal | total:m2153_2 | +| ir.cpp:2153:25:2153:25 | SideEffect | ~m2151_1 | +| ir.cpp:2154:5:2154:5 | Address | &:r2154_14 | +| ir.cpp:2154:5:2154:5 | Address | &:r2154_18 | +| ir.cpp:2154:5:2154:5 | Address | &:r2154_26 | +| ir.cpp:2154:37:2154:38 | Address | &:r2154_1 | +| ir.cpp:2154:37:2154:38 | Address | &:r2154_1 | +| ir.cpp:2154:37:2154:38 | Arg(this) | this:r2154_1 | +| ir.cpp:2154:40:2154:40 | Address | &:r2154_4 | +| ir.cpp:2154:40:2154:40 | Address | &:r2154_4 | +| ir.cpp:2154:40:2154:40 | Address | &:r2154_5 | +| ir.cpp:2154:40:2154:40 | Arg(0) | 0:r2154_8 | +| ir.cpp:2154:40:2154:40 | Load | m2153_8 | +| ir.cpp:2154:40:2154:40 | Load | m2154_7 | +| ir.cpp:2154:40:2154:40 | StoreValue | r2154_6 | +| ir.cpp:2154:40:2154:41 | CallTarget | func:r2154_3 | +| ir.cpp:2154:40:2154:41 | ChiPartial | partial:m2154_10 | +| ir.cpp:2154:40:2154:41 | ChiPartial | partial:m2154_12 | +| ir.cpp:2154:40:2154:41 | ChiTotal | total:m2153_6 | +| ir.cpp:2154:40:2154:41 | ChiTotal | total:m2154_2 | +| ir.cpp:2154:40:2154:41 | SideEffect | ~m2153_6 | +| ir.cpp:2154:64:2154:64 | Address | &:r2154_44 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_19 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_27 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_38 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_47 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_52 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_52 | +| ir.cpp:2154:68:2154:68 | Arg(0) | 0:r2154_39 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_2 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_5 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_7 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_9 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r2154_52 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_21 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_29 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_37 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_46 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_53 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_23 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_31 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_41 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_48 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_55 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_58 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_11 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_24 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_34 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_35 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_42 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2155_6 | +| ir.cpp:2154:68:2154:68 | Condition | r2154_40 | +| ir.cpp:2154:68:2154:68 | Load | m2154_17 | +| ir.cpp:2154:68:2154:68 | Load | m2154_17 | +| ir.cpp:2154:68:2154:68 | Load | m2154_33 | +| ir.cpp:2154:68:2154:68 | Phi | from 7:m2154_25 | +| ir.cpp:2154:68:2154:68 | Phi | from 7:~m2154_32 | +| ir.cpp:2154:68:2154:68 | Phi | from 9:m2154_59 | +| ir.cpp:2154:68:2154:68 | Phi | from 9:~m2154_56 | +| ir.cpp:2154:68:2154:68 | SideEffect | m2154_34 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_11 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_24 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_35 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_42 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2155_6 | +| ir.cpp:2154:68:2154:68 | StoreValue | r2154_22 | +| ir.cpp:2154:68:2154:68 | StoreValue | r2154_30 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_20 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_28 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_36 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_45 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_54 | +| ir.cpp:2154:68:2154:69 | StoreValue | r2154_16 | +| ir.cpp:2154:68:2154:69 | Unary | r2154_15 | +| ir.cpp:2154:68:2154:70 | Load | ~m2154_49 | +| ir.cpp:2154:68:2154:70 | StoreValue | r2154_50 | +| ir.cpp:2155:7:2155:7 | Address | &:r2155_1 | +| ir.cpp:2155:7:2155:7 | Address | &:r2155_1 | +| ir.cpp:2155:7:2155:7 | Arg(this) | this:r2155_1 | +| ir.cpp:2155:7:2155:7 | ChiPartial | partial:m2155_8 | +| ir.cpp:2155:7:2155:7 | ChiTotal | total:m2154_51 | +| ir.cpp:2155:7:2155:7 | SideEffect | m2154_51 | +| ir.cpp:2155:9:2155:13 | CallTarget | func:r2155_2 | +| ir.cpp:2155:9:2155:13 | ChiPartial | partial:m2155_5 | +| ir.cpp:2155:9:2155:13 | ChiTotal | total:m2154_49 | +| ir.cpp:2155:9:2155:13 | SideEffect | ~m2154_49 | +| ir.cpp:2155:15:2155:17 | Arg(0) | 0:r2155_3 | +| ir.cpp:2157:5:2157:5 | Address | &:r2157_14 | +| ir.cpp:2157:5:2157:5 | Address | &:r2157_18 | +| ir.cpp:2157:5:2157:5 | Address | &:r2157_26 | +| ir.cpp:2157:37:2157:38 | Address | &:r2157_1 | +| ir.cpp:2157:37:2157:38 | Address | &:r2157_1 | +| ir.cpp:2157:37:2157:38 | Arg(this) | this:r2157_1 | +| ir.cpp:2157:40:2157:40 | Address | &:r2157_4 | +| ir.cpp:2157:40:2157:40 | Address | &:r2157_4 | +| ir.cpp:2157:40:2157:40 | Address | &:r2157_5 | +| ir.cpp:2157:40:2157:40 | Arg(0) | 0:r2157_8 | +| ir.cpp:2157:40:2157:40 | Load | m2153_8 | +| ir.cpp:2157:40:2157:40 | Load | m2157_7 | +| ir.cpp:2157:40:2157:40 | StoreValue | r2157_6 | +| ir.cpp:2157:40:2157:41 | CallTarget | func:r2157_3 | +| ir.cpp:2157:40:2157:41 | ChiPartial | partial:m2157_10 | +| ir.cpp:2157:40:2157:41 | ChiPartial | partial:m2157_12 | +| ir.cpp:2157:40:2157:41 | ChiTotal | total:m2154_42 | +| ir.cpp:2157:40:2157:41 | ChiTotal | total:m2157_2 | +| ir.cpp:2157:40:2157:41 | SideEffect | ~m2154_42 | +| ir.cpp:2157:64:2157:64 | Address | &:r2157_53 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_19 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_27 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_38 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_44 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_44 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_56 | +| ir.cpp:2157:68:2157:68 | Arg(0) | 0:r2157_39 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_12 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_15 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_17 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_19 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r2157_44 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_21 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_29 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_37 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_45 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_55 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_23 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_31 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_41 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_47 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_50 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_57 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_11 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_24 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_34 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_35 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_42 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2159_5 | +| ir.cpp:2157:68:2157:68 | Condition | r2157_40 | +| ir.cpp:2157:68:2157:68 | Load | m2157_17 | +| ir.cpp:2157:68:2157:68 | Load | m2157_17 | +| ir.cpp:2157:68:2157:68 | Load | m2157_33 | +| ir.cpp:2157:68:2157:68 | Phi | from 10:m2157_25 | +| ir.cpp:2157:68:2157:68 | Phi | from 10:~m2157_32 | +| ir.cpp:2157:68:2157:68 | Phi | from 12:m2157_51 | +| ir.cpp:2157:68:2157:68 | Phi | from 12:~m2157_48 | +| ir.cpp:2157:68:2157:68 | SideEffect | m2157_34 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_11 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_24 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_35 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_42 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2159_5 | +| ir.cpp:2157:68:2157:68 | StoreValue | r2157_22 | +| ir.cpp:2157:68:2157:68 | StoreValue | r2157_30 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_20 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_28 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_36 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_46 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_54 | +| ir.cpp:2157:68:2157:69 | StoreValue | r2157_16 | +| ir.cpp:2157:68:2157:69 | Unary | r2157_15 | +| ir.cpp:2157:68:2157:70 | Load | ~m2157_58 | +| ir.cpp:2157:68:2157:70 | StoreValue | r2157_59 | +| ir.cpp:2158:7:2158:7 | Address | &:r2158_1 | +| ir.cpp:2158:7:2158:7 | Address | &:r2158_1 | +| ir.cpp:2158:7:2158:7 | Arg(this) | this:r2158_1 | +| ir.cpp:2158:7:2158:7 | ChiPartial | partial:m2158_8 | +| ir.cpp:2158:7:2158:7 | ChiTotal | total:m2157_60 | +| ir.cpp:2158:7:2158:7 | SideEffect | m2157_60 | +| ir.cpp:2158:9:2158:13 | CallTarget | func:r2158_2 | +| ir.cpp:2158:9:2158:13 | ChiPartial | partial:m2158_5 | +| ir.cpp:2158:9:2158:13 | ChiTotal | total:m2157_58 | +| ir.cpp:2158:9:2158:13 | SideEffect | ~m2157_58 | +| ir.cpp:2158:15:2158:17 | Arg(0) | 0:r2158_3 | +| ir.cpp:2159:11:2159:11 | Address | &:r2159_1 | +| ir.cpp:2159:11:2159:11 | Address | &:r2159_1 | +| ir.cpp:2159:11:2159:11 | Arg(this) | this:r2159_1 | +| ir.cpp:2159:11:2159:11 | ChiPartial | partial:m2159_7 | +| ir.cpp:2159:11:2159:11 | ChiTotal | total:m2158_9 | +| ir.cpp:2159:11:2159:11 | SideEffect | m2158_9 | +| ir.cpp:2159:11:2159:19 | Left | r2159_9 | +| ir.cpp:2159:11:2159:26 | Condition | r2159_11 | +| ir.cpp:2159:13:2159:17 | CallTarget | func:r2159_2 | +| ir.cpp:2159:13:2159:17 | ChiPartial | partial:m2159_4 | +| ir.cpp:2159:13:2159:17 | ChiTotal | total:m2158_6 | +| ir.cpp:2159:13:2159:17 | SideEffect | ~m2158_6 | +| ir.cpp:2159:13:2159:17 | Unary | r2159_3 | +| ir.cpp:2159:24:2159:26 | Right | r2159_10 | +| ir.cpp:2163:5:2163:5 | Address | &:r2163_10 | +| ir.cpp:2163:5:2163:5 | Address | &:r2163_14 | +| ir.cpp:2163:5:2163:5 | Address | &:r2163_22 | +| ir.cpp:2163:21:2163:22 | Address | &:r2163_1 | +| ir.cpp:2163:21:2163:22 | Address | &:r2163_1 | +| ir.cpp:2163:21:2163:22 | Arg(this) | this:r2163_1 | +| ir.cpp:2163:24:2163:24 | Arg(0) | 0:r2163_4 | +| ir.cpp:2163:24:2163:25 | CallTarget | func:r2163_3 | +| ir.cpp:2163:24:2163:25 | ChiPartial | partial:m2163_6 | +| ir.cpp:2163:24:2163:25 | ChiPartial | partial:m2163_8 | +| ir.cpp:2163:24:2163:25 | ChiTotal | total:m2157_42 | +| ir.cpp:2163:24:2163:25 | ChiTotal | total:m2163_2 | +| ir.cpp:2163:24:2163:25 | SideEffect | ~m2157_42 | +| ir.cpp:2163:32:2163:32 | Address | &:r2163_49 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_15 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_23 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_34 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_40 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_40 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_52 | +| ir.cpp:2163:36:2163:36 | Arg(0) | 0:r2163_35 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_22 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_25 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_27 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_29 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r2163_40 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_17 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_25 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_33 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_41 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_51 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_19 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_27 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_37 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_43 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_46 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_53 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_7 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_20 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_30 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_31 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_38 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_54 | +| ir.cpp:2163:36:2163:36 | Condition | r2163_36 | +| ir.cpp:2163:36:2163:36 | Load | m2163_13 | +| ir.cpp:2163:36:2163:36 | Load | m2163_13 | +| ir.cpp:2163:36:2163:36 | Load | m2163_29 | +| ir.cpp:2163:36:2163:36 | Phi | from 15:m2163_21 | +| ir.cpp:2163:36:2163:36 | Phi | from 15:~m2163_28 | +| ir.cpp:2163:36:2163:36 | Phi | from 17:m2163_47 | +| ir.cpp:2163:36:2163:36 | Phi | from 17:~m2163_44 | +| ir.cpp:2163:36:2163:36 | SideEffect | m2163_30 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_7 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_20 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_31 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_38 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_54 | +| ir.cpp:2163:36:2163:36 | StoreValue | r2163_18 | +| ir.cpp:2163:36:2163:36 | StoreValue | r2163_26 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_16 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_24 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_32 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_42 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_50 | +| ir.cpp:2163:36:2163:37 | StoreValue | r2163_12 | +| ir.cpp:2163:36:2163:37 | Unary | r2163_11 | +| ir.cpp:2163:36:2163:38 | Load | ~m2163_54 | +| ir.cpp:2163:36:2163:38 | StoreValue | r2163_55 | +| ir.cpp:2164:11:2164:11 | Address | &:r2164_1 | +| ir.cpp:2164:11:2164:11 | Left | r2164_2 | +| ir.cpp:2164:11:2164:11 | Load | m2163_56 | +| ir.cpp:2164:11:2164:16 | Condition | r2164_4 | +| ir.cpp:2164:16:2164:16 | Right | r2164_3 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | 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 6f52c2bc668..313f09530cd 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -11775,197 +11775,396 @@ ir.cpp: # 2131| v2131_21(void) = AliasedUse : ~m? # 2131| v2131_22(void) = ExitFunction : -# 2134| bool initialization_with_destructor_bool -# 2134| Block 0 -# 2134| v2134_1(void) = EnterFunction : -# 2134| mu2134_2(unknown) = AliasedDefinition : -# 2134| r2134_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2134| r2134_4(bool) = Constant[1] : -# 2134| mu2134_5(bool) = Store[initialization_with_destructor_bool] : &:r2134_3, r2134_4 -# 2134| v2134_6(void) = ReturnVoid : -# 2134| v2134_7(void) = AliasedUse : ~m? -# 2134| v2134_8(void) = ExitFunction : +# 2132| char ClassWithDestructor::get_x() +# 2132| Block 0 +# 2132| v2132_1(void) = EnterFunction : +# 2132| mu2132_2(unknown) = AliasedDefinition : +# 2132| mu2132_3(unknown) = InitializeNonLocal : +# 2132| r2132_4(glval) = VariableAddress[#this] : +# 2132| mu2132_5(glval) = InitializeParameter[#this] : &:r2132_4 +# 2132| r2132_6(glval) = Load[#this] : &:r2132_4, ~m? +# 2132| mu2132_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_6 +# 2132| r2132_8(glval) = VariableAddress[#return] : +# 2132| r2132_9(glval) = VariableAddress[#this] : +# 2132| r2132_10(ClassWithDestructor *) = Load[#this] : &:r2132_9, ~m? +# 2132| r2132_11(glval) = FieldAddress[x] : r2132_10 +# 2132| r2132_12(char *) = Load[?] : &:r2132_11, ~m? +# 2132| r2132_13(char) = Load[?] : &:r2132_12, ~m? +# 2132| mu2132_14(char) = Store[#return] : &:r2132_8, r2132_13 +# 2132| v2132_15(void) = ReturnIndirection[#this] : &:r2132_6, ~m? +# 2132| r2132_16(glval) = VariableAddress[#return] : +# 2132| v2132_17(void) = ReturnValue : &:r2132_16, ~m? +# 2132| v2132_18(void) = AliasedUse : ~m? +# 2132| v2132_19(void) = ExitFunction : -# 2136| void initialization_with_destructor(bool, char) -# 2136| Block 0 -# 2136| v2136_1(void) = EnterFunction : -# 2136| mu2136_2(unknown) = AliasedDefinition : -# 2136| mu2136_3(unknown) = InitializeNonLocal : -# 2136| r2136_4(glval) = VariableAddress[b] : -# 2136| mu2136_5(bool) = InitializeParameter[b] : &:r2136_4 -# 2136| r2136_6(glval) = VariableAddress[c] : -# 2136| mu2136_7(char) = InitializeParameter[c] : &:r2136_6 -# 2137| r2137_1(glval) = VariableAddress[x] : -# 2137| mu2137_2(ClassWithDestructor) = Uninitialized[x] : &:r2137_1 -# 2137| r2137_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2137| v2137_4(void) = Call[ClassWithDestructor] : func:r2137_3, this:r2137_1 -# 2137| mu2137_5(unknown) = ^CallSideEffect : ~m? -# 2137| mu2137_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2137_1 -# 2137| r2137_7(glval) = VariableAddress[b] : -# 2137| r2137_8(bool) = Load[b] : &:r2137_7, ~m? -# 2137| v2137_9(void) = ConditionalBranch : r2137_8 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2135| bool initialization_with_destructor_bool +# 2135| Block 0 +# 2135| v2135_1(void) = EnterFunction : +# 2135| mu2135_2(unknown) = AliasedDefinition : +# 2135| r2135_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2135| r2135_4(bool) = Constant[1] : +# 2135| mu2135_5(bool) = Store[initialization_with_destructor_bool] : &:r2135_3, r2135_4 +# 2135| v2135_6(void) = ReturnVoid : +# 2135| v2135_7(void) = AliasedUse : ~m? +# 2135| v2135_8(void) = ExitFunction : -# 2138| Block 1 -# 2138| r2138_1(glval) = VariableAddress[x] : -# 2138| r2138_2(glval) = FunctionAddress[set_x] : -# 2138| r2138_3(char) = Constant[97] : -# 2138| v2138_4(void) = Call[set_x] : func:r2138_2, this:r2138_1, 0:r2138_3 -# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? -# 2138| v2138_6(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, ~m? -# 2138| mu2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 -#-----| Goto -> Block 2 +# 2137| void initialization_with_destructor(bool, char) +# 2137| Block 0 +# 2137| v2137_1(void) = EnterFunction : +# 2137| mu2137_2(unknown) = AliasedDefinition : +# 2137| mu2137_3(unknown) = InitializeNonLocal : +# 2137| r2137_4(glval) = VariableAddress[b] : +# 2137| mu2137_5(bool) = InitializeParameter[b] : &:r2137_4 +# 2137| r2137_6(glval) = VariableAddress[c] : +# 2137| mu2137_7(char) = InitializeParameter[c] : &:r2137_6 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| mu2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 +# 2138| r2138_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2138| v2138_4(void) = Call[ClassWithDestructor] : func:r2138_3, this:r2138_1 +# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? +# 2138| mu2138_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 +# 2138| r2138_7(glval) = VariableAddress[b] : +# 2138| r2138_8(bool) = Load[b] : &:r2138_7, ~m? +# 2138| v2138_9(void) = ConditionalBranch : r2138_8 +#-----| False -> Block 3 +#-----| True -> Block 2 -# 2140| Block 2 -# 2140| r2140_1(glval) = VariableAddress[x] : -# 2140| mu2140_2(ClassWithDestructor) = Uninitialized[x] : &:r2140_1 -# 2140| r2140_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2140| v2140_4(void) = Call[ClassWithDestructor] : func:r2140_3, this:r2140_1 -# 2140| mu2140_5(unknown) = ^CallSideEffect : ~m? -# 2140| mu2140_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2140_1 -# 2140| r2140_7(bool) = Constant[1] : -# 2140| v2140_8(void) = ConditionalBranch : r2140_7 -#-----| False -> Block 4 -#-----| True -> Block 3 +# 2137| Block 1 +# 2137| v2137_8(void) = ReturnVoid : +# 2137| v2137_9(void) = AliasedUse : ~m? +# 2137| v2137_10(void) = ExitFunction : + +# 2139| Block 2 +# 2139| r2139_1(glval) = VariableAddress[x] : +# 2139| r2139_2(glval) = FunctionAddress[set_x] : +# 2139| r2139_3(char) = Constant[97] : +# 2139| v2139_4(void) = Call[set_x] : func:r2139_2, this:r2139_1, 0:r2139_3 +# 2139| mu2139_5(unknown) = ^CallSideEffect : ~m? +# 2139| v2139_6(void) = ^IndirectReadSideEffect[-1] : &:r2139_1, ~m? +# 2139| mu2139_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_1 +#-----| Goto -> Block 3 # 2141| Block 3 -# 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| r2141_2(glval) = FunctionAddress[set_x] : -# 2141| r2141_3(char) = Constant[97] : -# 2141| v2141_4(void) = Call[set_x] : func:r2141_2, this:r2141_1, 0:r2141_3 -# 2141| mu2141_5(unknown) = ^CallSideEffect : ~m? -# 2141| v2141_6(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, ~m? -# 2141| mu2141_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 -#-----| Goto -> Block 4 +# 2141| r2141_1(glval) = VariableAddress[x] : +# 2141| mu2141_2(ClassWithDestructor) = Uninitialized[x] : &:r2141_1 +# 2141| r2141_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2141| v2141_4(void) = Call[ClassWithDestructor] : func:r2141_3, this:r2141_1 +# 2141| mu2141_5(unknown) = ^CallSideEffect : ~m? +# 2141| mu2141_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 +# 2141| r2141_7(bool) = Constant[1] : +# 2141| v2141_8(void) = ConditionalBranch : r2141_7 +#-----| False -> Block 5 +#-----| True -> Block 4 -# 2143| Block 4 -# 2143| r2143_1(glval) = VariableAddress[x] : -# 2143| mu2143_2(ClassWithDestructor) = Uninitialized[x] : &:r2143_1 -# 2143| r2143_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2143| v2143_4(void) = Call[ClassWithDestructor] : func:r2143_3, this:r2143_1 -# 2143| mu2143_5(unknown) = ^CallSideEffect : ~m? -# 2143| mu2143_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2143_1 -# 2143| r2143_7(glval) = VariableAddress[c] : -# 2143| r2143_8(char) = Load[c] : &:r2143_7, ~m? -# 2143| r2143_9(int) = Convert : r2143_8 -# 2143| v2143_10(void) = Switch : r2143_9 -#-----| Case[97] -> Block 5 -#-----| Default -> Block 6 +# 2142| Block 4 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(glval) = FunctionAddress[set_x] : +# 2142| r2142_3(char) = Constant[97] : +# 2142| v2142_4(void) = Call[set_x] : func:r2142_2, this:r2142_1, 0:r2142_3 +# 2142| mu2142_5(unknown) = ^CallSideEffect : ~m? +# 2142| v2142_6(void) = ^IndirectReadSideEffect[-1] : &:r2142_1, ~m? +# 2142| mu2142_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_1 +#-----| Goto -> Block 5 # 2144| Block 5 -# 2144| v2144_1(void) = NoOp : -# 2145| r2145_1(glval) = VariableAddress[x] : -# 2145| r2145_2(glval) = FunctionAddress[set_x] : -# 2145| r2145_3(char) = Constant[97] : -# 2145| v2145_4(void) = Call[set_x] : func:r2145_2, this:r2145_1, 0:r2145_3 -# 2145| mu2145_5(unknown) = ^CallSideEffect : ~m? -# 2145| v2145_6(void) = ^IndirectReadSideEffect[-1] : &:r2145_1, ~m? -# 2145| mu2145_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2145_1 -# 2146| v2146_1(void) = NoOp : -#-----| Goto -> Block 7 +# 2144| r2144_1(glval) = VariableAddress[x] : +# 2144| mu2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 +# 2144| r2144_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2144| v2144_4(void) = Call[ClassWithDestructor] : func:r2144_3, this:r2144_1 +# 2144| mu2144_5(unknown) = ^CallSideEffect : ~m? +# 2144| mu2144_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 +# 2144| r2144_7(glval) = VariableAddress[c] : +# 2144| r2144_8(char) = Load[c] : &:r2144_7, ~m? +# 2144| r2144_9(int) = Convert : r2144_8 +# 2144| v2144_10(void) = Switch : r2144_9 +#-----| Case[97] -> Block 6 +#-----| Default -> Block 7 -# 2147| Block 6 +# 2145| Block 6 +# 2145| v2145_1(void) = NoOp : +# 2146| r2146_1(glval) = VariableAddress[x] : +# 2146| r2146_2(glval) = FunctionAddress[set_x] : +# 2146| r2146_3(char) = Constant[97] : +# 2146| v2146_4(void) = Call[set_x] : func:r2146_2, this:r2146_1, 0:r2146_3 +# 2146| mu2146_5(unknown) = ^CallSideEffect : ~m? +# 2146| v2146_6(void) = ^IndirectReadSideEffect[-1] : &:r2146_1, ~m? +# 2146| mu2146_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 # 2147| v2147_1(void) = NoOp : -# 2148| r2148_1(glval) = VariableAddress[x] : -# 2148| r2148_2(glval) = FunctionAddress[set_x] : -# 2148| r2148_3(char) = Constant[98] : -# 2148| v2148_4(void) = Call[set_x] : func:r2148_2, this:r2148_1, 0:r2148_3 -# 2148| mu2148_5(unknown) = ^CallSideEffect : ~m? -# 2148| v2148_6(void) = ^IndirectReadSideEffect[-1] : &:r2148_1, ~m? -# 2148| mu2148_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2148_1 -# 2149| v2149_1(void) = NoOp : -#-----| Goto -> Block 7 - -# 2150| Block 7 -# 2150| v2150_1(void) = NoOp : -# 2152| r2152_1(glval) = VariableAddress[x] : -# 2152| mu2152_2(ClassWithDestructor) = Uninitialized[x] : &:r2152_1 -# 2152| r2152_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2152| v2152_4(void) = Call[ClassWithDestructor] : func:r2152_3, this:r2152_1 -# 2152| mu2152_5(unknown) = ^CallSideEffect : ~m? -# 2152| mu2152_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2152_1 -# 2153| r2153_1(glval>) = VariableAddress[ys] : -# 2153| mu2153_2(vector) = Uninitialized[ys] : &:r2153_1 -# 2153| r2153_3(glval) = FunctionAddress[vector] : -# 2153| r2153_4(glval) = VariableAddress[#temp2153:40] : -# 2153| r2153_5(glval) = VariableAddress[x] : -# 2153| r2153_6(ClassWithDestructor) = Load[x] : &:r2153_5, ~m? -# 2153| mu2153_7(ClassWithDestructor) = Store[#temp2153:40] : &:r2153_4, r2153_6 -# 2153| r2153_8(ClassWithDestructor) = Load[#temp2153:40] : &:r2153_4, ~m? -# 2153| v2153_9(void) = Call[vector] : func:r2153_3, this:r2153_1, 0:r2153_8 -# 2153| mu2153_10(unknown) = ^CallSideEffect : ~m? -# 2153| mu2153_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 -# 2153| r2153_12(glval &>) = VariableAddress[(__range)] : -# 2153| r2153_13(glval>) = VariableAddress[ys] : -# 2153| r2153_14(vector &) = CopyValue : r2153_13 -# 2153| mu2153_15(vector &) = Store[(__range)] : &:r2153_12, r2153_14 -# 2153| r2153_16(glval) = VariableAddress[(__begin)] : -# 2153| r2153_17(glval &>) = VariableAddress[(__range)] : -# 2153| r2153_18(vector &) = Load[(__range)] : &:r2153_17, ~m? -#-----| r0_1(glval>) = CopyValue : r2153_18 -#-----| r0_2(glval>) = Convert : r0_1 -# 2153| r2153_19(glval) = FunctionAddress[begin] : -# 2153| r2153_20(iterator) = Call[begin] : func:r2153_19, this:r0_2 -# 2153| mu2153_21(unknown) = ^CallSideEffect : ~m? -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2153| mu2153_22(iterator) = Store[(__begin)] : &:r2153_16, r2153_20 -# 2153| r2153_23(glval) = VariableAddress[(__end)] : -# 2153| r2153_24(glval &>) = VariableAddress[(__range)] : -# 2153| r2153_25(vector &) = Load[(__range)] : &:r2153_24, ~m? -#-----| r0_4(glval>) = CopyValue : r2153_25 -#-----| r0_5(glval>) = Convert : r0_4 -# 2153| r2153_26(glval) = FunctionAddress[end] : -# 2153| r2153_27(iterator) = Call[end] : func:r2153_26, this:r0_5 -# 2153| mu2153_28(unknown) = ^CallSideEffect : ~m? -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2153| mu2153_29(iterator) = Store[(__end)] : &:r2153_23, r2153_27 #-----| Goto -> Block 8 -# 2153| Block 8 -# 2153| r2153_30(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2153_30 -# 2153| r2153_31(glval) = FunctionAddress[operator!=] : -# 2153| r2153_32(glval) = VariableAddress[(__end)] : -# 2153| r2153_33(iterator) = Load[(__end)] : &:r2153_32, ~m? -# 2153| r2153_34(bool) = Call[operator!=] : func:r2153_31, this:r0_7, 0:r2153_33 -# 2153| mu2153_35(unknown) = ^CallSideEffect : ~m? +# 2148| Block 7 +# 2148| v2148_1(void) = NoOp : +# 2149| r2149_1(glval) = VariableAddress[x] : +# 2149| r2149_2(glval) = FunctionAddress[set_x] : +# 2149| r2149_3(char) = Constant[98] : +# 2149| v2149_4(void) = Call[set_x] : func:r2149_2, this:r2149_1, 0:r2149_3 +# 2149| mu2149_5(unknown) = ^CallSideEffect : ~m? +# 2149| v2149_6(void) = ^IndirectReadSideEffect[-1] : &:r2149_1, ~m? +# 2149| mu2149_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 +# 2150| v2150_1(void) = NoOp : +#-----| Goto -> Block 8 + +# 2151| Block 8 +# 2151| v2151_1(void) = NoOp : +# 2153| r2153_1(glval) = VariableAddress[x] : +# 2153| mu2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 +# 2153| r2153_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2153| v2153_4(void) = Call[ClassWithDestructor] : func:r2153_3, this:r2153_1 +# 2153| mu2153_5(unknown) = ^CallSideEffect : ~m? +# 2153| mu2153_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 +# 2154| r2154_1(glval>) = VariableAddress[ys] : +# 2154| mu2154_2(vector) = Uninitialized[ys] : &:r2154_1 +# 2154| r2154_3(glval) = FunctionAddress[vector] : +# 2154| r2154_4(glval) = VariableAddress[#temp2154:40] : +# 2154| r2154_5(glval) = VariableAddress[x] : +# 2154| r2154_6(ClassWithDestructor) = Load[x] : &:r2154_5, ~m? +# 2154| mu2154_7(ClassWithDestructor) = Store[#temp2154:40] : &:r2154_4, r2154_6 +# 2154| r2154_8(ClassWithDestructor) = Load[#temp2154:40] : &:r2154_4, ~m? +# 2154| v2154_9(void) = Call[vector] : func:r2154_3, this:r2154_1, 0:r2154_8 +# 2154| mu2154_10(unknown) = ^CallSideEffect : ~m? +# 2154| mu2154_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 +# 2154| r2154_12(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_13(glval>) = VariableAddress[ys] : +# 2154| r2154_14(vector &) = CopyValue : r2154_13 +# 2154| mu2154_15(vector &) = Store[(__range)] : &:r2154_12, r2154_14 +# 2154| r2154_16(glval) = VariableAddress[(__begin)] : +# 2154| r2154_17(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_18(vector &) = Load[(__range)] : &:r2154_17, ~m? +#-----| r0_1(glval>) = CopyValue : r2154_18 +#-----| r0_2(glval>) = Convert : r0_1 +# 2154| r2154_19(glval) = FunctionAddress[begin] : +# 2154| r2154_20(iterator) = Call[begin] : func:r2154_19, this:r0_2 +# 2154| mu2154_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2154| mu2154_22(iterator) = Store[(__begin)] : &:r2154_16, r2154_20 +# 2154| r2154_23(glval) = VariableAddress[(__end)] : +# 2154| r2154_24(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_25(vector &) = Load[(__range)] : &:r2154_24, ~m? +#-----| r0_4(glval>) = CopyValue : r2154_25 +#-----| r0_5(glval>) = Convert : r0_4 +# 2154| r2154_26(glval) = FunctionAddress[end] : +# 2154| r2154_27(iterator) = Call[end] : func:r2154_26, this:r0_5 +# 2154| mu2154_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2154| mu2154_29(iterator) = Store[(__end)] : &:r2154_23, r2154_27 +#-----| Goto -> Block 9 + +# 2154| Block 9 +# 2154| r2154_30(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2154_30 +# 2154| r2154_31(glval) = FunctionAddress[operator!=] : +# 2154| r2154_32(glval) = VariableAddress[(__end)] : +# 2154| r2154_33(iterator) = Load[(__end)] : &:r2154_32, ~m? +# 2154| r2154_34(bool) = Call[operator!=] : func:r2154_31, this:r0_7, 0:r2154_33 +# 2154| mu2154_35(unknown) = ^CallSideEffect : ~m? #-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2153| v2153_36(void) = ConditionalBranch : r2153_34 -#-----| False -> Block 10 -#-----| True -> Block 9 +# 2154| v2154_36(void) = ConditionalBranch : r2154_34 +#-----| False -> Block 11 +#-----| True -> Block 10 -# 2153| Block 9 -# 2153| r2153_37(glval) = VariableAddress[y] : -# 2153| r2153_38(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2153_38 -# 2153| r2153_39(glval) = FunctionAddress[operator*] : -# 2153| r2153_40(ClassWithDestructor &) = Call[operator*] : func:r2153_39, this:r0_9 -# 2153| mu2153_41(unknown) = ^CallSideEffect : ~m? +# 2154| Block 10 +# 2154| r2154_37(glval) = VariableAddress[y] : +# 2154| r2154_38(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2154_38 +# 2154| r2154_39(glval) = FunctionAddress[operator*] : +# 2154| r2154_40(ClassWithDestructor &) = Call[operator*] : func:r2154_39, this:r0_9 +# 2154| mu2154_41(unknown) = ^CallSideEffect : ~m? #-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 2153| r2153_42(ClassWithDestructor) = Load[?] : &:r2153_40, ~m? -# 2153| mu2153_43(ClassWithDestructor) = Store[y] : &:r2153_37, r2153_42 -# 2154| r2154_1(glval) = VariableAddress[y] : -# 2154| r2154_2(glval) = FunctionAddress[set_x] : -# 2154| r2154_3(char) = Constant[97] : -# 2154| v2154_4(void) = Call[set_x] : func:r2154_2, this:r2154_1, 0:r2154_3 -# 2154| mu2154_5(unknown) = ^CallSideEffect : ~m? -# 2154| v2154_6(void) = ^IndirectReadSideEffect[-1] : &:r2154_1, ~m? -# 2154| mu2154_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 -# 2153| r2153_44(glval) = VariableAddress[(__begin)] : -# 2153| r2153_45(glval) = FunctionAddress[operator++] : -# 2153| r2153_46(iterator &) = Call[operator++] : func:r2153_45, this:r2153_44 -# 2153| mu2153_47(unknown) = ^CallSideEffect : ~m? -# 2153| v2153_48(void) = ^IndirectReadSideEffect[-1] : &:r2153_44, ~m? -# 2153| mu2153_49(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2153_44 -# 2153| r2153_50(glval) = CopyValue : r2153_46 -#-----| Goto (back edge) -> Block 8 +# 2154| r2154_42(ClassWithDestructor) = Load[?] : &:r2154_40, ~m? +# 2154| mu2154_43(ClassWithDestructor) = Store[y] : &:r2154_37, r2154_42 +# 2155| r2155_1(glval) = VariableAddress[y] : +# 2155| r2155_2(glval) = FunctionAddress[set_x] : +# 2155| r2155_3(char) = Constant[97] : +# 2155| v2155_4(void) = Call[set_x] : func:r2155_2, this:r2155_1, 0:r2155_3 +# 2155| mu2155_5(unknown) = ^CallSideEffect : ~m? +# 2155| v2155_6(void) = ^IndirectReadSideEffect[-1] : &:r2155_1, ~m? +# 2155| mu2155_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 +# 2154| r2154_44(glval) = VariableAddress[(__begin)] : +# 2154| r2154_45(glval) = FunctionAddress[operator++] : +# 2154| r2154_46(iterator &) = Call[operator++] : func:r2154_45, this:r2154_44 +# 2154| mu2154_47(unknown) = ^CallSideEffect : ~m? +# 2154| v2154_48(void) = ^IndirectReadSideEffect[-1] : &:r2154_44, ~m? +# 2154| mu2154_49(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2154_44 +# 2154| r2154_50(glval) = CopyValue : r2154_46 +#-----| Goto (back edge) -> Block 9 -# 2155| Block 10 -# 2155| v2155_1(void) = NoOp : -# 2136| v2136_8(void) = ReturnVoid : -# 2136| v2136_9(void) = AliasedUse : ~m? -# 2136| v2136_10(void) = ExitFunction : +# 2157| Block 11 +# 2157| r2157_1(glval>) = VariableAddress[ys] : +# 2157| mu2157_2(vector) = Uninitialized[ys] : &:r2157_1 +# 2157| r2157_3(glval) = FunctionAddress[vector] : +# 2157| r2157_4(glval) = VariableAddress[#temp2157:40] : +# 2157| r2157_5(glval) = VariableAddress[x] : +# 2157| r2157_6(ClassWithDestructor) = Load[x] : &:r2157_5, ~m? +# 2157| mu2157_7(ClassWithDestructor) = Store[#temp2157:40] : &:r2157_4, r2157_6 +# 2157| r2157_8(ClassWithDestructor) = Load[#temp2157:40] : &:r2157_4, ~m? +# 2157| v2157_9(void) = Call[vector] : func:r2157_3, this:r2157_1, 0:r2157_8 +# 2157| mu2157_10(unknown) = ^CallSideEffect : ~m? +# 2157| mu2157_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 +# 2157| r2157_12(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_13(glval>) = VariableAddress[ys] : +# 2157| r2157_14(vector &) = CopyValue : r2157_13 +# 2157| mu2157_15(vector &) = Store[(__range)] : &:r2157_12, r2157_14 +# 2157| r2157_16(glval) = VariableAddress[(__begin)] : +# 2157| r2157_17(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_18(vector &) = Load[(__range)] : &:r2157_17, ~m? +#-----| r0_11(glval>) = CopyValue : r2157_18 +#-----| r0_12(glval>) = Convert : r0_11 +# 2157| r2157_19(glval) = FunctionAddress[begin] : +# 2157| r2157_20(iterator) = Call[begin] : func:r2157_19, this:r0_12 +# 2157| mu2157_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m? +# 2157| mu2157_22(iterator) = Store[(__begin)] : &:r2157_16, r2157_20 +# 2157| r2157_23(glval) = VariableAddress[(__end)] : +# 2157| r2157_24(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_25(vector &) = Load[(__range)] : &:r2157_24, ~m? +#-----| r0_14(glval>) = CopyValue : r2157_25 +#-----| r0_15(glval>) = Convert : r0_14 +# 2157| r2157_26(glval) = FunctionAddress[end] : +# 2157| r2157_27(iterator) = Call[end] : func:r2157_26, this:r0_15 +# 2157| mu2157_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2157| mu2157_29(iterator) = Store[(__end)] : &:r2157_23, r2157_27 +#-----| Goto -> Block 12 + +# 2157| Block 12 +# 2157| r2157_30(glval) = VariableAddress[(__begin)] : +#-----| r0_17(glval) = Convert : r2157_30 +# 2157| r2157_31(glval) = FunctionAddress[operator!=] : +# 2157| r2157_32(glval) = VariableAddress[(__end)] : +# 2157| r2157_33(iterator) = Load[(__end)] : &:r2157_32, ~m? +# 2157| r2157_34(bool) = Call[operator!=] : func:r2157_31, this:r0_17, 0:r2157_33 +# 2157| mu2157_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +# 2157| v2157_36(void) = ConditionalBranch : r2157_34 +#-----| False -> Block 16 +#-----| True -> Block 14 + +# 2157| Block 13 +# 2157| r2157_37(glval) = VariableAddress[(__begin)] : +# 2157| r2157_38(glval) = FunctionAddress[operator++] : +# 2157| r2157_39(iterator &) = Call[operator++] : func:r2157_38, this:r2157_37 +# 2157| mu2157_40(unknown) = ^CallSideEffect : ~m? +# 2157| v2157_41(void) = ^IndirectReadSideEffect[-1] : &:r2157_37, ~m? +# 2157| mu2157_42(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2157_37 +# 2157| r2157_43(glval) = CopyValue : r2157_39 +#-----| Goto (back edge) -> Block 12 + +# 2157| Block 14 +# 2157| r2157_44(glval) = VariableAddress[y] : +# 2157| r2157_45(glval) = VariableAddress[(__begin)] : +#-----| r0_19(glval) = Convert : r2157_45 +# 2157| r2157_46(glval) = FunctionAddress[operator*] : +# 2157| r2157_47(ClassWithDestructor &) = Call[operator*] : func:r2157_46, this:r0_19 +# 2157| mu2157_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? +# 2157| r2157_49(ClassWithDestructor) = Load[?] : &:r2157_47, ~m? +# 2157| mu2157_50(ClassWithDestructor) = Store[y] : &:r2157_44, r2157_49 +# 2158| r2158_1(glval) = VariableAddress[y] : +# 2158| r2158_2(glval) = FunctionAddress[set_x] : +# 2158| r2158_3(char) = Constant[97] : +# 2158| v2158_4(void) = Call[set_x] : func:r2158_2, this:r2158_1, 0:r2158_3 +# 2158| mu2158_5(unknown) = ^CallSideEffect : ~m? +# 2158| v2158_6(void) = ^IndirectReadSideEffect[-1] : &:r2158_1, ~m? +# 2158| mu2158_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 +# 2159| r2159_1(glval) = VariableAddress[y] : +# 2159| r2159_2(glval) = FunctionAddress[get_x] : +# 2159| r2159_3(char) = Call[get_x] : func:r2159_2, this:r2159_1 +# 2159| mu2159_4(unknown) = ^CallSideEffect : ~m? +# 2159| v2159_5(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, ~m? +# 2159| mu2159_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 +# 2159| r2159_7(int) = Convert : r2159_3 +# 2159| r2159_8(int) = Constant[98] : +# 2159| r2159_9(bool) = CompareEQ : r2159_7, r2159_8 +# 2159| v2159_10(void) = ConditionalBranch : r2159_9 +#-----| False -> Block 13 +#-----| True -> Block 15 + +# 2160| Block 15 +# 2160| v2160_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2163| Block 16 +# 2163| r2163_1(glval>) = VariableAddress[ys] : +# 2163| mu2163_2(vector) = Uninitialized[ys] : &:r2163_1 +# 2163| r2163_3(glval) = FunctionAddress[vector] : +# 2163| r2163_4(int) = Constant[1] : +# 2163| v2163_5(void) = Call[vector] : func:r2163_3, this:r2163_1, 0:r2163_4 +# 2163| mu2163_6(unknown) = ^CallSideEffect : ~m? +# 2163| mu2163_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 +# 2163| r2163_8(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_9(glval>) = VariableAddress[ys] : +# 2163| r2163_10(vector &) = CopyValue : r2163_9 +# 2163| mu2163_11(vector &) = Store[(__range)] : &:r2163_8, r2163_10 +# 2163| r2163_12(glval) = VariableAddress[(__begin)] : +# 2163| r2163_13(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_14(vector &) = Load[(__range)] : &:r2163_13, ~m? +#-----| r0_21(glval>) = CopyValue : r2163_14 +#-----| r0_22(glval>) = Convert : r0_21 +# 2163| r2163_15(glval) = FunctionAddress[begin] : +# 2163| r2163_16(iterator) = Call[begin] : func:r2163_15, this:r0_22 +# 2163| mu2163_17(unknown) = ^CallSideEffect : ~m? +#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m? +# 2163| mu2163_18(iterator) = Store[(__begin)] : &:r2163_12, r2163_16 +# 2163| r2163_19(glval) = VariableAddress[(__end)] : +# 2163| r2163_20(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_21(vector &) = Load[(__range)] : &:r2163_20, ~m? +#-----| r0_24(glval>) = CopyValue : r2163_21 +#-----| r0_25(glval>) = Convert : r0_24 +# 2163| r2163_22(glval) = FunctionAddress[end] : +# 2163| r2163_23(iterator) = Call[end] : func:r2163_22, this:r0_25 +# 2163| mu2163_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m? +# 2163| mu2163_25(iterator) = Store[(__end)] : &:r2163_19, r2163_23 +#-----| Goto -> Block 17 + +# 2163| Block 17 +# 2163| r2163_26(glval) = VariableAddress[(__begin)] : +#-----| r0_27(glval) = Convert : r2163_26 +# 2163| r2163_27(glval) = FunctionAddress[operator!=] : +# 2163| r2163_28(glval) = VariableAddress[(__end)] : +# 2163| r2163_29(iterator) = Load[(__end)] : &:r2163_28, ~m? +# 2163| r2163_30(bool) = Call[operator!=] : func:r2163_27, this:r0_27, 0:r2163_29 +# 2163| mu2163_31(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 2163| v2163_32(void) = ConditionalBranch : r2163_30 +#-----| False -> Block 21 +#-----| True -> Block 19 + +# 2163| Block 18 +# 2163| r2163_33(glval) = VariableAddress[(__begin)] : +# 2163| r2163_34(glval) = FunctionAddress[operator++] : +# 2163| r2163_35(iterator &) = Call[operator++] : func:r2163_34, this:r2163_33 +# 2163| mu2163_36(unknown) = ^CallSideEffect : ~m? +# 2163| v2163_37(void) = ^IndirectReadSideEffect[-1] : &:r2163_33, ~m? +# 2163| mu2163_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2163_33 +# 2163| r2163_39(glval) = CopyValue : r2163_35 +#-----| Goto (back edge) -> Block 17 + +# 2163| Block 19 +# 2163| r2163_40(glval) = VariableAddress[y] : +# 2163| r2163_41(glval) = VariableAddress[(__begin)] : +#-----| r0_29(glval) = Convert : r2163_41 +# 2163| r2163_42(glval) = FunctionAddress[operator*] : +# 2163| r2163_43(int &) = Call[operator*] : func:r2163_42, this:r0_29 +# 2163| mu2163_44(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m? +# 2163| r2163_45(int) = Load[?] : &:r2163_43, ~m? +# 2163| mu2163_46(int) = Store[y] : &:r2163_40, r2163_45 +# 2164| r2164_1(glval) = VariableAddress[y] : +# 2164| r2164_2(int) = Load[y] : &:r2164_1, ~m? +# 2164| r2164_3(int) = Constant[1] : +# 2164| r2164_4(bool) = CompareEQ : r2164_2, r2164_3 +# 2164| v2164_5(void) = ConditionalBranch : r2164_4 +#-----| False -> Block 18 +#-----| True -> Block 20 + +# 2165| Block 20 +# 2165| v2165_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2167| Block 21 +# 2167| v2167_1(void) = NoOp : +#-----| Goto -> Block 1 perf-regression.cpp: # 6| void Big::Big()