Add IR test for data member structured bindings

This commit is contained in:
Jeroen Ketema
2022-02-23 15:34:51 +01:00
parent ec2567b64b
commit caf0f28547
4 changed files with 569 additions and 0 deletions

View File

@@ -11574,6 +11574,297 @@ ir.cpp:
# 1478| Type = [IntType] int
# 1478| ValueCategory = prvalue(load)
# 1480| getStmt(3): [ReturnStmt] return ...
# 1482| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&)
# 1482| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct &
# 1482| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct()
# 1482| <params>:
# 1482| <initializations>:
# 1482| getInitializer(0): [ConstructorFieldInit] constructor init of field i
# 1482| Type = [IntType] int
# 1482| ValueCategory = prvalue
# 1482| getInitializer(1): [ConstructorFieldInit] constructor init of field d
# 1482| Type = [DoubleType] double
# 1482| ValueCategory = prvalue
# 1482| getInitializer(2): [ConstructorFieldInit] constructor init of field r
# 1482| Type = [LValueReferenceType] int &
# 1482| ValueCategory = prvalue
# 1482| getEntryPoint(): [BlockStmt] { ... }
# 1482| getStmt(0): [ReturnStmt] return ...
# 1482| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&)
# 1482| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct &
# 1482| <initializations>:
# 1482| getInitializer(0): [ConstructorFieldInit] constructor init of field i
# 1482| Type = [IntType] int
# 1482| ValueCategory = prvalue
# 1482| getExpr(): [Literal] Unknown literal
# 1482| Type = [IntType] int
# 1482| ValueCategory = prvalue
# 1482| getInitializer(1): [ConstructorFieldInit] constructor init of field d
# 1482| Type = [DoubleType] double
# 1482| ValueCategory = prvalue
# 1482| getExpr(): [Literal] Unknown literal
# 1482| Type = [DoubleType] double
# 1482| ValueCategory = prvalue
# 1482| getInitializer(2): [ConstructorFieldInit] constructor init of field b
# 1482| Type = [IntType] unsigned int
# 1482| ValueCategory = prvalue
# 1482| getExpr(): [Literal] Unknown literal
# 1482| Type = [IntType] unsigned int
# 1482| ValueCategory = prvalue
# 1482| getInitializer(3): [ConstructorFieldInit] constructor init of field r
# 1482| Type = [LValueReferenceType] int &
# 1482| ValueCategory = prvalue
# 1482| getExpr(): [Literal] Unknown literal
# 1482| Type = [LValueReferenceType] int &
# 1482| ValueCategory = prvalue
# 1482| getEntryPoint(): [BlockStmt] { ... }
# 1482| getStmt(0): [ReturnStmt] return ...
# 1482| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&)
# 1482| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] StructuredBindingDataMemberStruct &&
# 1489| [TopLevelFunction] void data_member_structured_binding()
# 1489| <params>:
# 1489| getEntryPoint(): [BlockStmt] { ... }
# 1490| getStmt(0): [DeclStmt] declaration
# 1490| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s
# 1490| Type = [Struct] StructuredBindingDataMemberStruct
# 1490| getVariable().getInitializer(): [Initializer] initializer for s
# 1490| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct
# 1490| Type = [VoidType] void
# 1490| ValueCategory = prvalue
# 1492| getStmt(1): [BlockStmt] { ... }
# 1493| getStmt(0): [DeclStmt] declaration
# 1493| getDeclarationEntry(0): (no string representation)
# 1493| Type = [Struct] StructuredBindingDataMemberStruct
# 1493| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable)
# 1493| getExpr(): [VariableAccess] s
# 1493| Type = [Struct] StructuredBindingDataMemberStruct
# 1493| ValueCategory = prvalue(load)
# 1493| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i
# 1493| Type = [IntType] int
#-----| getVariable().getInitializer(): [Initializer] initializer for i
# 1493| getExpr(): [ValueFieldAccess] i
# 1493| Type = [IntType] int
# 1493| ValueCategory = lvalue
# 1493| getQualifier(): [VariableAccess] (unnamed local variable)
# 1493| Type = [Struct] StructuredBindingDataMemberStruct
# 1493| ValueCategory = lvalue
# 1493| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d
# 1493| Type = [DoubleType] double
#-----| getVariable().getInitializer(): [Initializer] initializer for d
# 1493| getExpr(): [ValueFieldAccess] d
# 1493| Type = [DoubleType] double
# 1493| ValueCategory = lvalue
# 1493| getQualifier(): [VariableAccess] (unnamed local variable)
# 1493| Type = [Struct] StructuredBindingDataMemberStruct
# 1493| ValueCategory = lvalue
# 1493| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b
# 1493| Type = [IntType] unsigned int
#-----| getVariable().getInitializer(): [Initializer] initializer for b
# 1493| getExpr(): [ValueFieldAccess] b
# 1493| Type = [IntType] unsigned int
# 1493| ValueCategory = lvalue
# 1493| getQualifier(): [VariableAccess] (unnamed local variable)
# 1493| Type = [Struct] StructuredBindingDataMemberStruct
# 1493| ValueCategory = lvalue
# 1493| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r
# 1493| Type = [IntType] int
#-----| getVariable().getInitializer(): [Initializer] initializer for r
# 1493| getExpr(): [ValueFieldAccess] r
# 1493| Type = [LValueReferenceType] int &
# 1493| ValueCategory = prvalue(load)
# 1493| getQualifier(): [VariableAccess] (unnamed local variable)
# 1493| Type = [Struct] StructuredBindingDataMemberStruct
# 1493| ValueCategory = lvalue
# 1493| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 1493| Type = [IntType] int
# 1493| ValueCategory = lvalue
# 1494| getStmt(1): [ExprStmt] ExprStmt
# 1494| getExpr(): [AssignExpr] ... = ...
# 1494| Type = [DoubleType] double
# 1494| ValueCategory = lvalue
# 1494| getLValue(): [VariableAccess] d
# 1494| Type = [DoubleType] double
# 1494| ValueCategory = lvalue
# 1494| getRValue(): [Literal] 4.0
# 1494| Type = [DoubleType] double
# 1494| Value = [Literal] 4.0
# 1494| ValueCategory = prvalue
# 1495| getStmt(2): [DeclStmt] declaration
# 1495| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd
# 1495| Type = [LValueReferenceType] double &
# 1495| getVariable().getInitializer(): [Initializer] initializer for rd
# 1495| getExpr(): [VariableAccess] d
# 1495| Type = [DoubleType] double
# 1495| ValueCategory = lvalue
# 1495| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1495| Type = [LValueReferenceType] double &
# 1495| ValueCategory = prvalue
# 1496| getStmt(3): [DeclStmt] declaration
# 1496| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v
# 1496| Type = [IntType] int
# 1496| getVariable().getInitializer(): [Initializer] initializer for v
# 1496| getExpr(): [VariableAccess] i
# 1496| Type = [IntType] int
# 1496| ValueCategory = prvalue(load)
# 1497| getStmt(4): [ExprStmt] ExprStmt
# 1497| getExpr(): [AssignExpr] ... = ...
# 1497| Type = [IntType] int
# 1497| ValueCategory = lvalue
# 1497| getLValue(): [VariableAccess] r
# 1497| Type = [IntType] int
# 1497| ValueCategory = lvalue
# 1497| getRValue(): [Literal] 5
# 1497| Type = [IntType] int
# 1497| Value = [Literal] 5
# 1497| ValueCategory = prvalue
# 1498| getStmt(5): [DeclStmt] declaration
# 1498| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr
# 1498| Type = [LValueReferenceType] int &
# 1498| getVariable().getInitializer(): [Initializer] initializer for rr
# 1498| getExpr(): [VariableAccess] r
# 1498| Type = [IntType] int
# 1498| ValueCategory = lvalue
# 1498| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1498| Type = [LValueReferenceType] int &
# 1498| ValueCategory = prvalue
# 1499| getStmt(6): [DeclStmt] declaration
# 1499| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w
# 1499| Type = [IntType] int
# 1499| getVariable().getInitializer(): [Initializer] initializer for w
# 1499| getExpr(): [VariableAccess] r
# 1499| Type = [IntType] int
# 1499| ValueCategory = prvalue(load)
# 1502| getStmt(2): [BlockStmt] { ... }
# 1503| getStmt(0): [DeclStmt] declaration
# 1503| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable
# 1503| Type = [Struct] StructuredBindingDataMemberStruct
# 1503| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable
# 1503| getExpr(): [VariableAccess] s
# 1503| Type = [Struct] StructuredBindingDataMemberStruct
# 1503| ValueCategory = prvalue(load)
# 1504| getStmt(1): [DeclStmt] declaration
# 1504| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i
# 1504| Type = [LValueReferenceType] int &
# 1504| getVariable().getInitializer(): [Initializer] initializer for i
# 1504| getExpr(): [ValueFieldAccess] i
# 1504| Type = [IntType] int
# 1504| ValueCategory = lvalue
# 1504| getQualifier(): [VariableAccess] unnamed_local_variable
# 1504| Type = [Struct] StructuredBindingDataMemberStruct
# 1504| ValueCategory = lvalue
# 1504| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1504| Type = [LValueReferenceType] int &
# 1504| ValueCategory = prvalue
# 1505| getStmt(2): [DeclStmt] declaration
# 1505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d
# 1505| Type = [LValueReferenceType] double &
# 1505| getVariable().getInitializer(): [Initializer] initializer for d
# 1505| getExpr(): [ValueFieldAccess] d
# 1505| Type = [DoubleType] double
# 1505| ValueCategory = lvalue
# 1505| getQualifier(): [VariableAccess] unnamed_local_variable
# 1505| Type = [Struct] StructuredBindingDataMemberStruct
# 1505| ValueCategory = lvalue
# 1505| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1505| Type = [LValueReferenceType] double &
# 1505| ValueCategory = prvalue
# 1507| getStmt(3): [DeclStmt] declaration
# 1507| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r
# 1507| Type = [LValueReferenceType] int &
# 1507| getVariable().getInitializer(): [Initializer] initializer for r
# 1507| getExpr(): [ValueFieldAccess] r
# 1507| Type = [LValueReferenceType] int &
# 1507| ValueCategory = prvalue(load)
# 1507| getQualifier(): [VariableAccess] unnamed_local_variable
# 1507| Type = [Struct] StructuredBindingDataMemberStruct
# 1507| ValueCategory = lvalue
# 1507| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1507| Type = [LValueReferenceType] int &
# 1507| ValueCategory = prvalue
# 1507| getExpr(): [ReferenceDereferenceExpr] (reference dereference)
# 1507| Type = [IntType] int
# 1507| ValueCategory = lvalue
# 1508| getStmt(4): [ExprStmt] ExprStmt
# 1508| getExpr(): [AssignExpr] ... = ...
# 1508| Type = [DoubleType] double
# 1508| ValueCategory = lvalue
# 1508| getLValue(): [VariableAccess] d
# 1508| Type = [LValueReferenceType] double &
# 1508| ValueCategory = prvalue(load)
# 1508| getRValue(): [Literal] 4.0
# 1508| Type = [DoubleType] double
# 1508| Value = [Literal] 4.0
# 1508| ValueCategory = prvalue
# 1508| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 1508| Type = [DoubleType] double
# 1508| ValueCategory = lvalue
# 1509| getStmt(5): [DeclStmt] declaration
# 1509| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd
# 1509| Type = [LValueReferenceType] double &
# 1509| getVariable().getInitializer(): [Initializer] initializer for rd
# 1509| getExpr(): [VariableAccess] d
# 1509| Type = [LValueReferenceType] double &
# 1509| ValueCategory = prvalue(load)
# 1509| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1509| Type = [LValueReferenceType] double &
# 1509| ValueCategory = prvalue
# 1509| getExpr(): [ReferenceDereferenceExpr] (reference dereference)
# 1509| Type = [DoubleType] double
# 1509| ValueCategory = lvalue
# 1510| getStmt(6): [DeclStmt] declaration
# 1510| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v
# 1510| Type = [IntType] int
# 1510| getVariable().getInitializer(): [Initializer] initializer for v
# 1510| getExpr(): [VariableAccess] i
# 1510| Type = [LValueReferenceType] int &
# 1510| ValueCategory = prvalue(load)
# 1510| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 1510| Type = [IntType] int
# 1510| ValueCategory = prvalue(load)
# 1511| getStmt(7): [ExprStmt] ExprStmt
# 1511| getExpr(): [AssignExpr] ... = ...
# 1511| Type = [IntType] int
# 1511| ValueCategory = lvalue
# 1511| getLValue(): [VariableAccess] r
# 1511| Type = [LValueReferenceType] int &
# 1511| ValueCategory = prvalue(load)
# 1511| getRValue(): [Literal] 5
# 1511| Type = [IntType] int
# 1511| Value = [Literal] 5
# 1511| ValueCategory = prvalue
# 1511| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 1511| Type = [IntType] int
# 1511| ValueCategory = lvalue
# 1512| getStmt(8): [DeclStmt] declaration
# 1512| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr
# 1512| Type = [LValueReferenceType] int &
# 1512| getVariable().getInitializer(): [Initializer] initializer for rr
# 1512| getExpr(): [VariableAccess] r
# 1512| Type = [LValueReferenceType] int &
# 1512| ValueCategory = prvalue(load)
# 1512| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 1512| Type = [LValueReferenceType] int &
# 1512| ValueCategory = prvalue
# 1512| getExpr(): [ReferenceDereferenceExpr] (reference dereference)
# 1512| Type = [IntType] int
# 1512| ValueCategory = lvalue
# 1513| getStmt(9): [DeclStmt] declaration
# 1513| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w
# 1513| Type = [IntType] int
# 1513| getVariable().getInitializer(): [Initializer] initializer for w
# 1513| getExpr(): [VariableAccess] r
# 1513| Type = [LValueReferenceType] int &
# 1513| ValueCategory = prvalue(load)
# 1513| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 1513| Type = [IntType] int
# 1513| ValueCategory = prvalue(load)
# 1515| getStmt(3): [ReturnStmt] return ...
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| <params>:

View File

@@ -1479,4 +1479,39 @@ void array_structured_binding() {
}
}
struct StructuredBindingDataMemberStruct {
int i = 1;
double d = 2.0;
unsigned int b : 3;
int& r = i;
};
void data_member_structured_binding() {
StructuredBindingDataMemberStruct s;
// structured binding use
{
auto [i, d, b, r] = s;
d = 4.0;
double& rd = d;
int v = i;
r = 5;
int& rr = r;
int w = r;
}
// explicit reference version
{
auto unnamed_local_variable = s;
auto& i = unnamed_local_variable.i;
auto& d = unnamed_local_variable.d;
// no equivalent for b
auto& r = unnamed_local_variable.r;
d = 4.0;
double& rd = d;
int v = i;
r = 5;
int& rr = r;
int w = r;
}
}
// semmle-extractor-options: -std=c++17 --clang

View File

@@ -6734,6 +6734,121 @@
| ir.cpp:1478:17:1478:18 | Load | m1475_7 |
| ir.cpp:1478:17:1478:18 | Load | m1476_5 |
| ir.cpp:1478:17:1478:18 | StoreValue | r1478_4 |
| ir.cpp:1482:8:1482:8 | Address | &:r1482_5 |
| ir.cpp:1482:8:1482:8 | Address | &:r1482_5 |
| ir.cpp:1482:8:1482:8 | Address | &:r1482_7 |
| ir.cpp:1482:8:1482:8 | Address | &:r1482_7 |
| ir.cpp:1482:8:1482:8 | ChiPartial | partial:m1482_3 |
| ir.cpp:1482:8:1482:8 | ChiTotal | total:m1482_2 |
| ir.cpp:1482:8:1482:8 | Load | m1482_6 |
| ir.cpp:1482:8:1482:8 | SideEffect | m1482_3 |
| ir.cpp:1482:8:1482:8 | SideEffect | m1482_8 |
| ir.cpp:1489:6:1489:35 | ChiPartial | partial:m1489_3 |
| ir.cpp:1489:6:1489:35 | ChiTotal | total:m1489_2 |
| ir.cpp:1489:6:1489:35 | SideEffect | ~m1511_6 |
| ir.cpp:1490:39:1490:39 | Address | &:r1490_1 |
| ir.cpp:1490:39:1490:39 | Address | &:r1490_1 |
| ir.cpp:1490:39:1490:39 | Arg(this) | this:r1490_1 |
| ir.cpp:1490:39:1490:39 | CallTarget | func:r1490_3 |
| ir.cpp:1490:39:1490:39 | ChiPartial | partial:m1490_5 |
| ir.cpp:1490:39:1490:39 | ChiPartial | partial:m1490_7 |
| ir.cpp:1490:39:1490:39 | ChiTotal | total:m1489_4 |
| ir.cpp:1490:39:1490:39 | ChiTotal | total:m1490_2 |
| ir.cpp:1490:39:1490:39 | SideEffect | ~m1489_4 |
| ir.cpp:1493:14:1493:14 | Address | &:r1493_1 |
| ir.cpp:1493:15:1493:15 | Address | &:r1493_5 |
| ir.cpp:1493:18:1493:18 | Address | &:r1493_9 |
| ir.cpp:1493:21:1493:21 | Address | &:r1493_13 |
| ir.cpp:1493:24:1493:24 | Address | &:r1493_17 |
| ir.cpp:1493:29:1493:29 | Address | &:r1493_2 |
| ir.cpp:1493:29:1493:29 | Load | m1490_8 |
| ir.cpp:1493:29:1493:29 | StoreValue | r1493_3 |
| ir.cpp:1493:30:1493:30 | Address | &:r1493_19 |
| ir.cpp:1493:30:1493:30 | Load | ~m1493_4 |
| ir.cpp:1493:30:1493:30 | StoreValue | r1493_7 |
| ir.cpp:1493:30:1493:30 | StoreValue | r1493_11 |
| ir.cpp:1493:30:1493:30 | StoreValue | r1493_15 |
| ir.cpp:1493:30:1493:30 | StoreValue | r1493_21 |
| ir.cpp:1493:30:1493:30 | Unary | r1493_6 |
| ir.cpp:1493:30:1493:30 | Unary | r1493_10 |
| ir.cpp:1493:30:1493:30 | Unary | r1493_14 |
| ir.cpp:1493:30:1493:30 | Unary | r1493_18 |
| ir.cpp:1493:30:1493:30 | Unary | r1493_20 |
| ir.cpp:1494:9:1494:9 | Address | &:r1494_2 |
| ir.cpp:1494:13:1494:15 | StoreValue | r1494_1 |
| ir.cpp:1495:17:1495:18 | Address | &:r1495_1 |
| ir.cpp:1495:22:1495:22 | StoreValue | r1495_3 |
| ir.cpp:1495:22:1495:22 | Unary | r1495_2 |
| ir.cpp:1496:13:1496:13 | Address | &:r1496_1 |
| ir.cpp:1496:17:1496:17 | Address | &:r1496_2 |
| ir.cpp:1496:17:1496:17 | Load | m1493_8 |
| ir.cpp:1496:17:1496:17 | StoreValue | r1496_3 |
| ir.cpp:1497:9:1497:9 | Address | &:r1497_2 |
| ir.cpp:1497:13:1497:13 | StoreValue | r1497_1 |
| ir.cpp:1498:14:1498:15 | Address | &:r1498_1 |
| ir.cpp:1498:19:1498:19 | StoreValue | r1498_3 |
| ir.cpp:1498:19:1498:19 | Unary | r1498_2 |
| ir.cpp:1499:13:1499:13 | Address | &:r1499_1 |
| ir.cpp:1499:17:1499:17 | Address | &:r1499_2 |
| ir.cpp:1499:17:1499:17 | Load | m1497_3 |
| ir.cpp:1499:17:1499:17 | StoreValue | r1499_3 |
| ir.cpp:1503:14:1503:35 | Address | &:r1503_1 |
| ir.cpp:1503:39:1503:39 | Address | &:r1503_2 |
| ir.cpp:1503:39:1503:39 | Load | m1490_8 |
| ir.cpp:1503:39:1503:39 | StoreValue | r1503_3 |
| ir.cpp:1504:15:1504:15 | Address | &:r1504_1 |
| ir.cpp:1504:19:1504:40 | Unary | r1504_2 |
| ir.cpp:1504:19:1504:42 | StoreValue | r1504_4 |
| ir.cpp:1504:42:1504:42 | Unary | r1504_3 |
| ir.cpp:1505:15:1505:15 | Address | &:r1505_1 |
| ir.cpp:1505:19:1505:40 | Unary | r1505_2 |
| ir.cpp:1505:19:1505:42 | StoreValue | r1505_4 |
| ir.cpp:1505:42:1505:42 | Unary | r1505_3 |
| ir.cpp:1507:15:1507:15 | Address | &:r1507_1 |
| ir.cpp:1507:19:1507:40 | Unary | r1507_2 |
| ir.cpp:1507:19:1507:42 | StoreValue | r1507_6 |
| ir.cpp:1507:19:1507:42 | Unary | r1507_5 |
| ir.cpp:1507:42:1507:42 | Address | &:r1507_3 |
| ir.cpp:1507:42:1507:42 | Load | ~m1503_4 |
| ir.cpp:1507:42:1507:42 | Unary | r1507_4 |
| ir.cpp:1508:9:1508:9 | Address | &:r1508_2 |
| ir.cpp:1508:9:1508:9 | Address | &:r1508_4 |
| ir.cpp:1508:9:1508:9 | Load | m1505_5 |
| ir.cpp:1508:9:1508:9 | Unary | r1508_3 |
| ir.cpp:1508:9:1508:15 | ChiPartial | partial:m1508_5 |
| ir.cpp:1508:9:1508:15 | ChiTotal | total:m1503_4 |
| ir.cpp:1508:13:1508:15 | StoreValue | r1508_1 |
| ir.cpp:1509:17:1509:18 | Address | &:r1509_1 |
| ir.cpp:1509:22:1509:22 | Address | &:r1509_2 |
| ir.cpp:1509:22:1509:22 | Load | m1505_5 |
| ir.cpp:1509:22:1509:22 | StoreValue | r1509_5 |
| ir.cpp:1509:22:1509:22 | Unary | r1509_3 |
| ir.cpp:1509:22:1509:22 | Unary | r1509_4 |
| ir.cpp:1510:13:1510:13 | Address | &:r1510_1 |
| ir.cpp:1510:17:1510:17 | Address | &:r1510_2 |
| ir.cpp:1510:17:1510:17 | Address | &:r1510_3 |
| ir.cpp:1510:17:1510:17 | Load | m1504_5 |
| ir.cpp:1510:17:1510:17 | Load | ~m1503_4 |
| ir.cpp:1510:17:1510:17 | StoreValue | r1510_4 |
| ir.cpp:1511:9:1511:9 | Address | &:r1511_2 |
| ir.cpp:1511:9:1511:9 | Address | &:r1511_4 |
| ir.cpp:1511:9:1511:9 | Load | m1507_7 |
| ir.cpp:1511:9:1511:9 | Unary | r1511_3 |
| ir.cpp:1511:9:1511:13 | ChiPartial | partial:m1511_5 |
| ir.cpp:1511:9:1511:13 | ChiTotal | total:m1490_6 |
| ir.cpp:1511:13:1511:13 | StoreValue | r1511_1 |
| ir.cpp:1512:14:1512:15 | Address | &:r1512_1 |
| ir.cpp:1512:19:1512:19 | Address | &:r1512_2 |
| ir.cpp:1512:19:1512:19 | Load | m1507_7 |
| ir.cpp:1512:19:1512:19 | StoreValue | r1512_5 |
| ir.cpp:1512:19:1512:19 | Unary | r1512_3 |
| ir.cpp:1512:19:1512:19 | Unary | r1512_4 |
| ir.cpp:1513:13:1513:13 | Address | &:r1513_1 |
| ir.cpp:1513:17:1513:17 | Address | &:r1513_2 |
| ir.cpp:1513:17:1513:17 | Address | &:r1513_3 |
| ir.cpp:1513:17:1513:17 | Load | m1507_7 |
| ir.cpp:1513:17:1513:17 | Load | ~m1511_6 |
| ir.cpp:1513:17:1513:17 | StoreValue | r1513_4 |
| 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 |

View File

@@ -7981,6 +7981,134 @@ ir.cpp:
# 1462| v1462_5(void) = AliasedUse : ~m?
# 1462| v1462_6(void) = ExitFunction :
# 1482| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct()
# 1482| Block 0
# 1482| v1482_1(void) = EnterFunction :
# 1482| mu1482_2(unknown) = AliasedDefinition :
# 1482| mu1482_3(unknown) = InitializeNonLocal :
# 1482| r1482_4(glval<unknown>) = VariableAddress[#this] :
# 1482| mu1482_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1482_4
# 1482| r1482_6(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1482_4, ~m?
# 1482| mu1482_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1482_6
# 1482| v1482_8(void) = NoOp :
# 1482| v1482_9(void) = ReturnIndirection[#this] : &:r1482_6, ~m?
# 1482| v1482_10(void) = ReturnVoid :
# 1482| v1482_11(void) = AliasedUse : ~m?
# 1482| v1482_12(void) = ExitFunction :
# 1489| void data_member_structured_binding()
# 1489| Block 0
# 1489| v1489_1(void) = EnterFunction :
# 1489| mu1489_2(unknown) = AliasedDefinition :
# 1489| mu1489_3(unknown) = InitializeNonLocal :
# 1490| r1490_1(glval<StructuredBindingDataMemberStruct>) = VariableAddress[s] :
# 1490| mu1490_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1490_1
# 1490| r1490_3(glval<unknown>) = FunctionAddress[StructuredBindingDataMemberStruct] :
# 1490| v1490_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1490_3, this:r1490_1
# 1490| mu1490_5(unknown) = ^CallSideEffect : ~m?
# 1490| mu1490_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1490_1
# 1493| r1493_1(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
# 1493| r1493_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[s] :
# 1493| r1493_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1493_2, ~m?
# 1493| mu1493_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1493_1, r1493_3
# 1493| r1493_5(glval<int>) = VariableAddress[i] :
# 1493| r1493_6(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
# 1493| r1493_7(glval<int>) = FieldAddress[i] : r1493_6
# 1493| mu1493_8(int) = Store[i] : &:r1493_5, r1493_7
# 1493| r1493_9(glval<double>) = VariableAddress[d] :
# 1493| r1493_10(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
# 1493| r1493_11(glval<double>) = FieldAddress[d] : r1493_10
# 1493| mu1493_12(double) = Store[d] : &:r1493_9, r1493_11
# 1493| r1493_13(glval<unsigned int>) = VariableAddress[b] :
# 1493| r1493_14(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
# 1493| r1493_15(glval<unsigned int>) = FieldAddress[b] : r1493_14
# 1493| mu1493_16(unsigned int) = Store[b] : &:r1493_13, r1493_15
# 1493| r1493_17(glval<int>) = VariableAddress[r] :
# 1493| r1493_18(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
# 1493| r1493_19(glval<int &>) = FieldAddress[r] : r1493_18
# 1493| r1493_20(int &) = Load[?] : &:r1493_19, ~m?
# 1493| r1493_21(glval<int>) = CopyValue : r1493_20
# 1493| mu1493_22(int) = Store[r] : &:r1493_17, r1493_21
# 1494| r1494_1(double) = Constant[4.0] :
# 1494| r1494_2(glval<double>) = VariableAddress[d] :
# 1494| mu1494_3(double) = Store[d] : &:r1494_2, r1494_1
# 1495| r1495_1(glval<double &>) = VariableAddress[rd] :
# 1495| r1495_2(glval<double>) = VariableAddress[d] :
# 1495| r1495_3(double &) = CopyValue : r1495_2
# 1495| mu1495_4(double &) = Store[rd] : &:r1495_1, r1495_3
# 1496| r1496_1(glval<int>) = VariableAddress[v] :
# 1496| r1496_2(glval<int>) = VariableAddress[i] :
# 1496| r1496_3(int) = Load[i] : &:r1496_2, ~m?
# 1496| mu1496_4(int) = Store[v] : &:r1496_1, r1496_3
# 1497| r1497_1(int) = Constant[5] :
# 1497| r1497_2(glval<int>) = VariableAddress[r] :
# 1497| mu1497_3(int) = Store[r] : &:r1497_2, r1497_1
# 1498| r1498_1(glval<int &>) = VariableAddress[rr] :
# 1498| r1498_2(glval<int>) = VariableAddress[r] :
# 1498| r1498_3(int &) = CopyValue : r1498_2
# 1498| mu1498_4(int &) = Store[rr] : &:r1498_1, r1498_3
# 1499| r1499_1(glval<int>) = VariableAddress[w] :
# 1499| r1499_2(glval<int>) = VariableAddress[r] :
# 1499| r1499_3(int) = Load[r] : &:r1499_2, ~m?
# 1499| mu1499_4(int) = Store[w] : &:r1499_1, r1499_3
# 1503| r1503_1(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] :
# 1503| r1503_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[s] :
# 1503| r1503_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1503_2, ~m?
# 1503| mu1503_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1503_1, r1503_3
# 1504| r1504_1(glval<int &>) = VariableAddress[i] :
# 1504| r1504_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] :
# 1504| r1504_3(glval<int>) = FieldAddress[i] : r1504_2
# 1504| r1504_4(int &) = CopyValue : r1504_3
# 1504| mu1504_5(int &) = Store[i] : &:r1504_1, r1504_4
# 1505| r1505_1(glval<double &>) = VariableAddress[d] :
# 1505| r1505_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] :
# 1505| r1505_3(glval<double>) = FieldAddress[d] : r1505_2
# 1505| r1505_4(double &) = CopyValue : r1505_3
# 1505| mu1505_5(double &) = Store[d] : &:r1505_1, r1505_4
# 1507| r1507_1(glval<int &>) = VariableAddress[r] :
# 1507| r1507_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] :
# 1507| r1507_3(glval<int &>) = FieldAddress[r] : r1507_2
# 1507| r1507_4(int &) = Load[?] : &:r1507_3, ~m?
# 1507| r1507_5(glval<int>) = CopyValue : r1507_4
# 1507| r1507_6(int &) = CopyValue : r1507_5
# 1507| mu1507_7(int &) = Store[r] : &:r1507_1, r1507_6
# 1508| r1508_1(double) = Constant[4.0] :
# 1508| r1508_2(glval<double &>) = VariableAddress[d] :
# 1508| r1508_3(double &) = Load[d] : &:r1508_2, ~m?
# 1508| r1508_4(glval<double>) = CopyValue : r1508_3
# 1508| mu1508_5(double) = Store[?] : &:r1508_4, r1508_1
# 1509| r1509_1(glval<double &>) = VariableAddress[rd] :
# 1509| r1509_2(glval<double &>) = VariableAddress[d] :
# 1509| r1509_3(double &) = Load[d] : &:r1509_2, ~m?
# 1509| r1509_4(glval<double>) = CopyValue : r1509_3
# 1509| r1509_5(double &) = CopyValue : r1509_4
# 1509| mu1509_6(double &) = Store[rd] : &:r1509_1, r1509_5
# 1510| r1510_1(glval<int>) = VariableAddress[v] :
# 1510| r1510_2(glval<int &>) = VariableAddress[i] :
# 1510| r1510_3(int &) = Load[i] : &:r1510_2, ~m?
# 1510| r1510_4(int) = Load[?] : &:r1510_3, ~m?
# 1510| mu1510_5(int) = Store[v] : &:r1510_1, r1510_4
# 1511| r1511_1(int) = Constant[5] :
# 1511| r1511_2(glval<int &>) = VariableAddress[r] :
# 1511| r1511_3(int &) = Load[r] : &:r1511_2, ~m?
# 1511| r1511_4(glval<int>) = CopyValue : r1511_3
# 1511| mu1511_5(int) = Store[?] : &:r1511_4, r1511_1
# 1512| r1512_1(glval<int &>) = VariableAddress[rr] :
# 1512| r1512_2(glval<int &>) = VariableAddress[r] :
# 1512| r1512_3(int &) = Load[r] : &:r1512_2, ~m?
# 1512| r1512_4(glval<int>) = CopyValue : r1512_3
# 1512| r1512_5(int &) = CopyValue : r1512_4
# 1512| mu1512_6(int &) = Store[rr] : &:r1512_1, r1512_5
# 1513| r1513_1(glval<int>) = VariableAddress[w] :
# 1513| r1513_2(glval<int &>) = VariableAddress[r] :
# 1513| r1513_3(int &) = Load[r] : &:r1513_2, ~m?
# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m?
# 1513| mu1513_5(int) = Store[w] : &:r1513_1, r1513_4
# 1515| v1515_1(void) = NoOp :
# 1489| v1489_4(void) = ReturnVoid :
# 1489| v1489_5(void) = AliasedUse : ~m?
# 1489| v1489_6(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0