зеркало из https://github.com/github/codeql.git
Merge pull request #10031 from jketema/block-assign
C++: Handle block assignments
This commit is contained in:
Коммит
dfde5712a3
|
@ -0,0 +1,13 @@
|
|||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Location extends @location_expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
from Expr expr, int kind, int kind_new, Location location
|
||||
where
|
||||
exprs(expr, kind, location) and
|
||||
if expr instanceof @blockassignexpr then kind_new = 0 else kind_new = kind
|
||||
select expr, kind_new, location
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,3 @@
|
|||
description: Support block assignment
|
||||
compatibility: partial
|
||||
exprs.rel: run exprs.qlo
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
category: feature
|
||||
---
|
||||
* Added a `BlockAssignExpr` class, which models a `memcpy`-like operation used in compiler generated copy/move constructors and assignment operations.
|
|
@ -47,6 +47,20 @@ class AssignExpr extends Assignment, @assignexpr {
|
|||
override string toString() { result = "... = ..." }
|
||||
}
|
||||
|
||||
/**
|
||||
* A compiler generated assignment operation that may occur in a compiler generated
|
||||
* copy/move constructor or assignment operator, and which functions like `memcpy`
|
||||
* where the size argument is based on the type of the rvalue of the assignment.
|
||||
*/
|
||||
class BlockAssignExpr extends Assignment, @blockassignexpr {
|
||||
override string getOperator() { result = "=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "BlockAssignExpr" }
|
||||
|
||||
/** Gets a textual representation of this assignment. */
|
||||
override string toString() { result = "... = ..." }
|
||||
}
|
||||
|
||||
/**
|
||||
* A non-overloaded binary assignment operation other than `=`.
|
||||
*
|
||||
|
|
|
@ -1450,8 +1450,6 @@ class TranslatedAssignExpr extends TranslatedNonConstantExpr {
|
|||
result = this.getLeftOperand().getResult()
|
||||
}
|
||||
|
||||
abstract Instruction getStoredValue();
|
||||
|
||||
final TranslatedExpr getLeftOperand() {
|
||||
result = getTranslatedExpr(expr.getLValue().getFullyConverted())
|
||||
}
|
||||
|
@ -1493,6 +1491,75 @@ class TranslatedAssignExpr extends TranslatedNonConstantExpr {
|
|||
}
|
||||
}
|
||||
|
||||
class TranslatedBlockAssignExpr extends TranslatedNonConstantExpr {
|
||||
override BlockAssignExpr expr;
|
||||
|
||||
final override TranslatedElement getChild(int id) {
|
||||
id = 0 and result = this.getLeftOperand()
|
||||
or
|
||||
id = 1 and result = this.getRightOperand()
|
||||
}
|
||||
|
||||
final override Instruction getFirstInstruction() {
|
||||
// The operand evaluation order should since block assignments behave like memcpy.
|
||||
result = this.getLeftOperand().getFirstInstruction()
|
||||
}
|
||||
|
||||
final override Instruction getResult() { result = this.getInstruction(AssignmentStoreTag()) }
|
||||
|
||||
final TranslatedExpr getLeftOperand() {
|
||||
result = getTranslatedExpr(expr.getLValue().getFullyConverted())
|
||||
}
|
||||
|
||||
final TranslatedExpr getRightOperand() {
|
||||
result = getTranslatedExpr(expr.getRValue().getFullyConverted())
|
||||
}
|
||||
|
||||
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
|
||||
tag = LoadTag() and
|
||||
result = this.getInstruction(AssignmentStoreTag()) and
|
||||
kind instanceof GotoEdge
|
||||
or
|
||||
tag = AssignmentStoreTag() and
|
||||
result = this.getParent().getChildSuccessor(this) and
|
||||
kind instanceof GotoEdge
|
||||
}
|
||||
|
||||
override Instruction getChildSuccessor(TranslatedElement child) {
|
||||
child = this.getLeftOperand() and
|
||||
result = this.getRightOperand().getFirstInstruction()
|
||||
or
|
||||
child = this.getRightOperand() and
|
||||
result = this.getInstruction(LoadTag())
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
|
||||
tag = LoadTag() and
|
||||
opcode instanceof Opcode::Load and
|
||||
resultType = getTypeForPRValue(expr.getRValue().getType())
|
||||
or
|
||||
tag = AssignmentStoreTag() and
|
||||
opcode instanceof Opcode::Store and
|
||||
// The frontend specifies that the relevant type is the one of the source.
|
||||
resultType = getTypeForPRValue(expr.getRValue().getType())
|
||||
}
|
||||
|
||||
override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
|
||||
tag = LoadTag() and
|
||||
operandTag instanceof AddressOperandTag and
|
||||
result = this.getRightOperand().getResult()
|
||||
or
|
||||
tag = AssignmentStoreTag() and
|
||||
(
|
||||
operandTag instanceof AddressOperandTag and
|
||||
result = this.getLeftOperand().getResult()
|
||||
or
|
||||
operandTag instanceof StoreValueOperandTag and
|
||||
result = this.getInstruction(LoadTag())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class TranslatedAssignOperation extends TranslatedNonConstantExpr {
|
||||
override AssignOperation expr;
|
||||
|
||||
|
|
|
@ -1302,7 +1302,7 @@ funbind(
|
|||
|
||||
@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr
|
||||
|
||||
@assign_expr = @assignexpr | @assign_op_expr
|
||||
@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr
|
||||
|
||||
/*
|
||||
case @allocator.form of
|
||||
|
@ -1660,6 +1660,7 @@ case @expr.kind of
|
|||
| 332 = @hasuniqueobjectrepresentations
|
||||
| 333 = @builtinbitcast
|
||||
| 334 = @builtinshuffle
|
||||
| 335 = @blockassignexpr
|
||||
;
|
||||
|
||||
@var_args_expr = @vastartexpr
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,2 @@
|
|||
description: Support block assignment
|
||||
compatibility: backwards
|
|
@ -13975,6 +13975,168 @@ ir.cpp:
|
|||
# 1815| Type = [IntType] int
|
||||
# 1815| ValueCategory = prvalue(load)
|
||||
# 1817| getStmt(8): [ReturnStmt] return ...
|
||||
# 1834| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&)
|
||||
# 1834| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const A &
|
||||
# 1834| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&)
|
||||
# 1834| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] A &&
|
||||
#-----| getEntryPoint(): [BlockStmt] { ... }
|
||||
#-----| getStmt(0): [ExprStmt] ExprStmt
|
||||
#-----| getExpr(): [BlockAssignExpr] ... = ...
|
||||
#-----| Type = [VoidType] void
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| getLValue(): [PointerFieldAccess] e
|
||||
#-----| Type = [ArrayType] enum <unnamed>[1]
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getQualifier(): [ThisExpr] this
|
||||
#-----| Type = [PointerType] A *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| getRValue(): [ReferenceFieldAccess] e
|
||||
#-----| Type = [ArrayType] enum <unnamed>[1]
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getQualifier(): [VariableAccess] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] A &&
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [Class] A
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getStmt(1): [ReturnStmt] return ...
|
||||
#-----| getExpr(): [PointerDereferenceExpr] * ...
|
||||
#-----| Type = [Class] A
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getOperand(): [ThisExpr] this
|
||||
#-----| Type = [PointerType] A *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] A &
|
||||
#-----| ValueCategory = prvalue
|
||||
# 1834| [Constructor] void block_assignment::A::A()
|
||||
# 1834| <params>:
|
||||
# 1834| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&)
|
||||
# 1834| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const A &
|
||||
# 1834| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&)
|
||||
# 1834| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] A &&
|
||||
# 1836| [VirtualFunction] void block_assignment::A::f()
|
||||
# 1836| <params>:
|
||||
# 1839| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&)
|
||||
# 1839| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const B &
|
||||
# 1839| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&)
|
||||
# 1839| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] B &&
|
||||
#-----| getEntryPoint(): [BlockStmt] { ... }
|
||||
#-----| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 1839| getExpr(): [FunctionCall] call to operator=
|
||||
# 1839| Type = [LValueReferenceType] A &
|
||||
# 1839| ValueCategory = prvalue
|
||||
# 1839| getQualifier(): [ThisExpr] this
|
||||
# 1839| Type = [PointerType] B *
|
||||
# 1839| ValueCategory = prvalue(load)
|
||||
# 1839| getArgument(0): [PointerDereferenceExpr] * ...
|
||||
# 1839| Type = [Class] A
|
||||
# 1839| ValueCategory = xvalue
|
||||
# 1839| getOperand(): [AddressOfExpr] & ...
|
||||
# 1839| Type = [PointerType] B *
|
||||
# 1839| ValueCategory = prvalue
|
||||
# 1839| getOperand(): [VariableAccess] (unnamed parameter 0)
|
||||
# 1839| Type = [RValueReferenceType] B &&
|
||||
# 1839| ValueCategory = prvalue(load)
|
||||
#-----| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [Struct] B
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getOperand().getFullyConverted(): [CStyleCast] (A *)...
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] A *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| getQualifier().getFullyConverted(): [CStyleCast] (A *)...
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] A *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] A &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [Class] A
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getStmt(1): [ReturnStmt] return ...
|
||||
#-----| getExpr(): [PointerDereferenceExpr] * ...
|
||||
#-----| Type = [Struct] B
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| getOperand(): [ThisExpr] this
|
||||
#-----| Type = [PointerType] B *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] B &
|
||||
#-----| ValueCategory = prvalue
|
||||
# 1839| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&)
|
||||
# 1839| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const B &
|
||||
# 1839| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&)
|
||||
# 1839| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] B &&
|
||||
# 1840| [Constructor] void block_assignment::B::B(block_assignment::A*)
|
||||
# 1840| <params>:
|
||||
# 1840| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
# 1840| Type = [PointerType] A *
|
||||
# 1843| [TopLevelFunction] void block_assignment::foo()
|
||||
# 1843| <params>:
|
||||
# 1843| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1844| getStmt(0): [DeclStmt] declaration
|
||||
# 1844| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v
|
||||
# 1844| Type = [Struct] B
|
||||
# 1844| getVariable().getInitializer(): [Initializer] initializer for v
|
||||
# 1844| getExpr(): [ConstructorCall] call to B
|
||||
# 1844| Type = [VoidType] void
|
||||
# 1844| ValueCategory = prvalue
|
||||
# 1844| getArgument(0): [Literal] 0
|
||||
# 1844| Type = [IntType] int
|
||||
# 1844| Value = [Literal] 0
|
||||
# 1844| ValueCategory = prvalue
|
||||
# 1844| getArgument(0).getFullyConverted(): [CStyleCast] (A *)...
|
||||
# 1844| Conversion = [IntegralToPointerConversion] integral to pointer conversion
|
||||
# 1844| Type = [PointerType] A *
|
||||
# 1844| Value = [CStyleCast] 0
|
||||
# 1844| ValueCategory = prvalue
|
||||
# 1845| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 1845| getExpr(): [FunctionCall] call to operator=
|
||||
# 1845| Type = [LValueReferenceType] B &
|
||||
# 1845| ValueCategory = prvalue
|
||||
# 1845| getQualifier(): [VariableAccess] v
|
||||
# 1845| Type = [Struct] B
|
||||
# 1845| ValueCategory = lvalue
|
||||
# 1845| getArgument(0): [ConstructorCall] call to B
|
||||
# 1845| Type = [VoidType] void
|
||||
# 1845| ValueCategory = prvalue
|
||||
# 1845| getArgument(0): [Literal] 0
|
||||
# 1845| Type = [IntType] int
|
||||
# 1845| Value = [Literal] 0
|
||||
# 1845| ValueCategory = prvalue
|
||||
# 1845| getArgument(0).getFullyConverted(): [CStyleCast] (A *)...
|
||||
# 1845| Conversion = [IntegralToPointerConversion] integral to pointer conversion
|
||||
# 1845| Type = [PointerType] A *
|
||||
# 1845| Value = [CStyleCast] 0
|
||||
# 1845| ValueCategory = prvalue
|
||||
# 1845| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to)
|
||||
# 1845| Type = [LValueReferenceType] B &
|
||||
# 1845| ValueCategory = prvalue
|
||||
# 1845| getExpr(): [TemporaryObjectExpr] temporary object
|
||||
# 1845| Type = [Struct] B
|
||||
# 1845| ValueCategory = lvalue
|
||||
# 1845| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1845| Type = [Struct] B
|
||||
# 1845| ValueCategory = lvalue
|
||||
# 1846| getStmt(2): [ReturnStmt] return ...
|
||||
perf-regression.cpp:
|
||||
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
|
||||
# 4| <params>:
|
||||
|
|
|
@ -1830,4 +1830,20 @@ char *global_string = "global string";
|
|||
|
||||
int global_6 = global_2;
|
||||
|
||||
namespace block_assignment {
|
||||
class A {
|
||||
enum {} e[1];
|
||||
virtual void f();
|
||||
};
|
||||
|
||||
struct B : A {
|
||||
B(A *);
|
||||
};
|
||||
|
||||
void foo() {
|
||||
B v(0);
|
||||
v = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// semmle-extractor-options: -std=c++17 --clang
|
||||
|
|
|
@ -674,6 +674,10 @@
|
|||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_1 |
|
||||
| file://:0:0:0:0 | Address | &:r0_2 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
|
@ -694,6 +698,13 @@
|
|||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_3 |
|
||||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
|
@ -702,6 +713,10 @@
|
|||
| file://:0:0:0:0 | Address | &:r0_5 |
|
||||
| file://:0:0:0:0 | Address | &:r0_6 |
|
||||
| file://:0:0:0:0 | Address | &:r0_7 |
|
||||
| file://:0:0:0:0 | Address | &:r0_7 |
|
||||
| file://:0:0:0:0 | Address | &:r0_8 |
|
||||
| file://:0:0:0:0 | Address | &:r0_8 |
|
||||
| file://:0:0:0:0 | Address | &:r0_8 |
|
||||
| file://:0:0:0:0 | Address | &:r0_8 |
|
||||
| file://:0:0:0:0 | Address | &:r0_8 |
|
||||
| file://:0:0:0:0 | Address | &:r0_8 |
|
||||
|
@ -711,10 +726,15 @@
|
|||
| file://:0:0:0:0 | Address | &:r0_10 |
|
||||
| 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_13 |
|
||||
| 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_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 |
|
||||
|
@ -722,6 +742,7 @@
|
|||
| 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 |
|
||||
| file://:0:0:0:0 | Arg(0) | 0:r0_8 |
|
||||
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
|
||||
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
|
||||
| file://:0:0:0:0 | CallTarget | func:r0_1 |
|
||||
|
@ -734,8 +755,12 @@
|
|||
| file://:0:0:0:0 | ChiPartial | partial:m0_8 |
|
||||
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
|
||||
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
|
||||
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
|
||||
| file://:0:0:0:0 | ChiPartial | partial:m0_13 |
|
||||
| file://:0:0:0:0 | ChiPartial | partial:m0_13 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m0_3 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m754_8 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m763_8 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m1043_10 |
|
||||
|
@ -743,6 +768,8 @@
|
|||
| file://:0:0:0:0 | ChiTotal | total:m1688_3 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m1716_8 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m1716_19 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m1834_8 |
|
||||
| file://:0:0:0:0 | ChiTotal | total:m1839_8 |
|
||||
| file://:0:0:0:0 | Left | r0_2 |
|
||||
| file://:0:0:0:0 | Left | r0_4 |
|
||||
| file://:0:0:0:0 | Left | r0_7 |
|
||||
|
@ -756,6 +783,9 @@
|
|||
| file://:0:0:0:0 | Load | m0_2 |
|
||||
| file://:0:0:0:0 | Load | m0_2 |
|
||||
| file://:0:0:0:0 | Load | m0_2 |
|
||||
| file://:0:0:0:0 | Load | m0_2 |
|
||||
| file://:0:0:0:0 | Load | m0_2 |
|
||||
| file://:0:0:0:0 | Load | m0_2 |
|
||||
| file://:0:0:0:0 | Load | m745_6 |
|
||||
| file://:0:0:0:0 | Load | m754_6 |
|
||||
| file://:0:0:0:0 | Load | m763_6 |
|
||||
|
@ -763,6 +793,10 @@
|
|||
| file://:0:0:0:0 | Load | m1466_4 |
|
||||
| file://:0:0:0:0 | Load | m1685_9 |
|
||||
| file://:0:0:0:0 | Load | m1714_7 |
|
||||
| file://:0:0:0:0 | Load | m1834_6 |
|
||||
| file://:0:0:0:0 | Load | m1834_6 |
|
||||
| file://:0:0:0:0 | Load | m1839_6 |
|
||||
| file://:0:0:0:0 | Load | ~m0_4 |
|
||||
| file://:0:0:0:0 | Load | ~m1444_6 |
|
||||
| file://:0:0:0:0 | Load | ~m1712_10 |
|
||||
| file://:0:0:0:0 | Load | ~m1712_14 |
|
||||
|
@ -779,6 +813,8 @@
|
|||
| file://:0:0:0:0 | SideEffect | m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | m0_14 |
|
||||
| file://:0:0:0:0 | SideEffect | m1078_23 |
|
||||
| file://:0:0:0:0 | SideEffect | m1078_23 |
|
||||
| file://:0:0:0:0 | SideEffect | m1084_23 |
|
||||
|
@ -788,6 +824,7 @@
|
|||
| file://:0:0:0:0 | SideEffect | ~m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m0_4 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m96_8 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m754_8 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m763_8 |
|
||||
|
@ -797,6 +834,7 @@
|
|||
| file://:0:0:0:0 | SideEffect | ~m1077_8 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m1240_4 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m1447_6 |
|
||||
| file://:0:0:0:0 | SideEffect | ~m1839_8 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_1 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_1 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_1 |
|
||||
|
@ -810,8 +848,11 @@
|
|||
| file://:0:0:0:0 | StoreValue | r0_6 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_7 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_9 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_12 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_13 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_13 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_19 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_20 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_22 |
|
||||
| file://:0:0:0:0 | StoreValue | r0_22 |
|
||||
| file://:0:0:0:0 | Unary | r0_1 |
|
||||
|
@ -824,18 +865,27 @@
|
|||
| file://:0:0:0:0 | Unary | r0_6 |
|
||||
| file://:0:0:0:0 | Unary | r0_6 |
|
||||
| file://:0:0:0:0 | Unary | r0_6 |
|
||||
| file://:0:0:0:0 | Unary | r0_6 |
|
||||
| file://:0:0:0:0 | Unary | r0_6 |
|
||||
| file://:0:0:0:0 | Unary | r0_7 |
|
||||
| file://:0:0:0:0 | Unary | r0_7 |
|
||||
| file://:0:0:0:0 | Unary | r0_7 |
|
||||
| file://:0:0:0:0 | Unary | r0_7 |
|
||||
| file://:0:0:0:0 | Unary | r0_8 |
|
||||
| file://:0:0:0:0 | Unary | r0_9 |
|
||||
| file://:0:0:0:0 | Unary | r0_9 |
|
||||
| file://:0:0:0:0 | Unary | r0_9 |
|
||||
| file://:0:0:0:0 | Unary | r0_10 |
|
||||
| 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_12 |
|
||||
| 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 |
|
||||
| file://:0:0:0:0 | Unary | r0_19 |
|
||||
| file://:0:0:0:0 | Unary | r0_20 |
|
||||
| file://:0:0:0:0 | Unary | r0_20 |
|
||||
| file://:0:0:0:0 | Unary | r0_21 |
|
||||
|
@ -8504,6 +8554,93 @@
|
|||
| ir.cpp:1831:16:1831:23 | ChiTotal | total:m1831_2 |
|
||||
| ir.cpp:1831:16:1831:23 | Load | ~m1831_2 |
|
||||
| ir.cpp:1831:16:1831:23 | StoreValue | r1831_5 |
|
||||
| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 |
|
||||
| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 |
|
||||
| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 |
|
||||
| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 |
|
||||
| ir.cpp:1834:11:1834:11 | Address | &:r1834_10 |
|
||||
| ir.cpp:1834:11:1834:11 | ChiPartial | partial:m1834_3 |
|
||||
| ir.cpp:1834:11:1834:11 | ChiTotal | total:m1834_2 |
|
||||
| ir.cpp:1834:11:1834:11 | Load | m0_20 |
|
||||
| ir.cpp:1834:11:1834:11 | Load | m1834_6 |
|
||||
| ir.cpp:1834:11:1834:11 | SideEffect | m0_14 |
|
||||
| ir.cpp:1834:11:1834:11 | SideEffect | m1834_3 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_9 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_12 |
|
||||
| ir.cpp:1839:12:1839:12 | Address | &:r1839_20 |
|
||||
| ir.cpp:1839:12:1839:12 | Arg(this) | this:r0_5 |
|
||||
| ir.cpp:1839:12:1839:12 | CallTarget | func:r1839_11 |
|
||||
| ir.cpp:1839:12:1839:12 | ChiPartial | partial:m1839_3 |
|
||||
| ir.cpp:1839:12:1839:12 | ChiPartial | partial:m1839_17 |
|
||||
| ir.cpp:1839:12:1839:12 | ChiTotal | total:m1839_2 |
|
||||
| ir.cpp:1839:12:1839:12 | ChiTotal | total:m1839_4 |
|
||||
| ir.cpp:1839:12:1839:12 | Load | m0_2 |
|
||||
| ir.cpp:1839:12:1839:12 | Load | m0_21 |
|
||||
| ir.cpp:1839:12:1839:12 | Load | m1839_6 |
|
||||
| ir.cpp:1839:12:1839:12 | Load | m1839_6 |
|
||||
| ir.cpp:1839:12:1839:12 | SideEffect | m0_12 |
|
||||
| ir.cpp:1839:12:1839:12 | SideEffect | ~m1839_4 |
|
||||
| ir.cpp:1839:12:1839:12 | SideEffect | ~m1839_18 |
|
||||
| ir.cpp:1839:12:1839:12 | Unary | r1839_10 |
|
||||
| ir.cpp:1839:12:1839:12 | Unary | r1839_13 |
|
||||
| ir.cpp:1839:12:1839:12 | Unary | r1839_14 |
|
||||
| ir.cpp:1839:12:1839:12 | Unary | r1839_15 |
|
||||
| ir.cpp:1839:12:1839:12 | Unary | r1839_16 |
|
||||
| ir.cpp:1843:10:1843:12 | ChiPartial | partial:m1843_3 |
|
||||
| ir.cpp:1843:10:1843:12 | ChiTotal | total:m1843_2 |
|
||||
| ir.cpp:1843:10:1843:12 | SideEffect | ~m1845_18 |
|
||||
| ir.cpp:1844:11:1844:11 | Address | &:r1844_1 |
|
||||
| ir.cpp:1844:11:1844:11 | Address | &:r1844_1 |
|
||||
| ir.cpp:1844:11:1844:11 | Arg(this) | this:r1844_1 |
|
||||
| ir.cpp:1844:13:1844:13 | Address | &:r1844_4 |
|
||||
| ir.cpp:1844:13:1844:13 | Address | &:r1844_4 |
|
||||
| ir.cpp:1844:13:1844:13 | Arg(0) | 0:r1844_4 |
|
||||
| ir.cpp:1844:13:1844:13 | ChiPartial | partial:m1844_11 |
|
||||
| ir.cpp:1844:13:1844:13 | ChiTotal | total:m1844_7 |
|
||||
| ir.cpp:1844:13:1844:13 | SideEffect | ~m1844_7 |
|
||||
| ir.cpp:1844:13:1844:14 | CallTarget | func:r1844_3 |
|
||||
| ir.cpp:1844:13:1844:14 | ChiPartial | partial:m1844_6 |
|
||||
| ir.cpp:1844:13:1844:14 | ChiPartial | partial:m1844_9 |
|
||||
| ir.cpp:1844:13:1844:14 | ChiTotal | total:m1843_4 |
|
||||
| ir.cpp:1844:13:1844:14 | ChiTotal | total:m1844_2 |
|
||||
| ir.cpp:1844:13:1844:14 | SideEffect | ~m1843_4 |
|
||||
| ir.cpp:1845:9:1845:9 | Address | &:r1845_1 |
|
||||
| ir.cpp:1845:9:1845:9 | Address | &:r1845_1 |
|
||||
| ir.cpp:1845:9:1845:9 | Arg(this) | this:r1845_1 |
|
||||
| ir.cpp:1845:9:1845:9 | ChiPartial | partial:m1845_21 |
|
||||
| ir.cpp:1845:9:1845:9 | ChiTotal | total:m1844_10 |
|
||||
| ir.cpp:1845:9:1845:9 | SideEffect | m1844_10 |
|
||||
| ir.cpp:1845:11:1845:11 | CallTarget | func:r1845_2 |
|
||||
| ir.cpp:1845:11:1845:11 | ChiPartial | partial:m1845_17 |
|
||||
| ir.cpp:1845:11:1845:11 | ChiTotal | total:m1845_14 |
|
||||
| ir.cpp:1845:11:1845:11 | SideEffect | ~m1845_14 |
|
||||
| ir.cpp:1845:11:1845:11 | Unary | r1845_16 |
|
||||
| ir.cpp:1845:13:1845:13 | Address | &:r1845_3 |
|
||||
| ir.cpp:1845:13:1845:13 | Address | &:r1845_3 |
|
||||
| ir.cpp:1845:13:1845:13 | Address | &:r1845_6 |
|
||||
| ir.cpp:1845:13:1845:13 | Address | &:r1845_6 |
|
||||
| ir.cpp:1845:13:1845:13 | Address | &:r1845_15 |
|
||||
| ir.cpp:1845:13:1845:13 | Address | &:r1845_15 |
|
||||
| ir.cpp:1845:13:1845:13 | Arg(0) | 0:r1845_6 |
|
||||
| ir.cpp:1845:13:1845:13 | Arg(0) | 0:r1845_15 |
|
||||
| ir.cpp:1845:13:1845:13 | Arg(this) | this:r1845_3 |
|
||||
| ir.cpp:1845:13:1845:13 | CallTarget | func:r1845_5 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_8 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_11 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_13 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_23 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1844_12 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_4 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_9 |
|
||||
| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_12 |
|
||||
| ir.cpp:1845:13:1845:13 | SideEffect | ~m1844_12 |
|
||||
| ir.cpp:1845:13:1845:13 | SideEffect | ~m1845_9 |
|
||||
| ir.cpp:1845:13:1845:13 | SideEffect | ~m1845_12 |
|
||||
| ir.cpp:1845:13:1845:13 | Unary | r1845_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 |
|
||||
|
|
|
@ -9797,6 +9797,123 @@ ir.cpp:
|
|||
# 1831| v1831_8(void) = AliasedUse : ~m?
|
||||
# 1831| v1831_9(void) = ExitFunction :
|
||||
|
||||
# 1834| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&)
|
||||
# 1834| Block 0
|
||||
# 1834| v1834_1(void) = EnterFunction :
|
||||
# 1834| mu1834_2(unknown) = AliasedDefinition :
|
||||
# 1834| mu1834_3(unknown) = InitializeNonLocal :
|
||||
# 1834| r1834_4(glval<unknown>) = VariableAddress[#this] :
|
||||
# 1834| mu1834_5(glval<A>) = InitializeParameter[#this] : &:r1834_4
|
||||
# 1834| r1834_6(glval<A>) = Load[#this] : &:r1834_4, ~m?
|
||||
# 1834| mu1834_7(A) = InitializeIndirection[#this] : &:r1834_6
|
||||
#-----| r0_1(glval<A &&>) = VariableAddress[(unnamed parameter 0)] :
|
||||
#-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1
|
||||
#-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m?
|
||||
#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3
|
||||
#-----| r0_5(glval<unknown>) = VariableAddress[#this] :
|
||||
#-----| r0_6(A *) = Load[#this] : &:r0_5, ~m?
|
||||
#-----| r0_7(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_6
|
||||
#-----| r0_8(glval<A &&>) = VariableAddress[(unnamed parameter 0)] :
|
||||
#-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, ~m?
|
||||
#-----| r0_10(glval<A>) = CopyValue : r0_9
|
||||
#-----| r0_11(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_10
|
||||
#-----| r0_12(enum <unnamed>[1]) = Load[?] : &:r0_11, ~m?
|
||||
#-----| mu0_13(enum <unnamed>[1]) = Store[?] : &:r0_7, r0_12
|
||||
#-----| r0_14(glval<A &>) = VariableAddress[#return] :
|
||||
#-----| r0_15(glval<unknown>) = VariableAddress[#this] :
|
||||
#-----| r0_16(A *) = Load[#this] : &:r0_15, ~m?
|
||||
#-----| r0_17(glval<A>) = CopyValue : r0_16
|
||||
#-----| r0_18(A &) = CopyValue : r0_17
|
||||
#-----| mu0_19(A &) = Store[#return] : &:r0_14, r0_18
|
||||
# 1834| v1834_8(void) = ReturnIndirection[#this] : &:r1834_6, ~m?
|
||||
#-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m?
|
||||
# 1834| r1834_9(glval<A &>) = VariableAddress[#return] :
|
||||
# 1834| v1834_10(void) = ReturnValue : &:r1834_9, ~m?
|
||||
# 1834| v1834_11(void) = AliasedUse : ~m?
|
||||
# 1834| v1834_12(void) = ExitFunction :
|
||||
|
||||
# 1839| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&)
|
||||
# 1839| Block 0
|
||||
# 1839| v1839_1(void) = EnterFunction :
|
||||
# 1839| mu1839_2(unknown) = AliasedDefinition :
|
||||
# 1839| mu1839_3(unknown) = InitializeNonLocal :
|
||||
# 1839| r1839_4(glval<unknown>) = VariableAddress[#this] :
|
||||
# 1839| mu1839_5(glval<B>) = InitializeParameter[#this] : &:r1839_4
|
||||
# 1839| r1839_6(glval<B>) = Load[#this] : &:r1839_4, ~m?
|
||||
# 1839| mu1839_7(B) = InitializeIndirection[#this] : &:r1839_6
|
||||
#-----| r0_1(glval<B &&>) = VariableAddress[(unnamed parameter 0)] :
|
||||
#-----| mu0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1
|
||||
#-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m?
|
||||
#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3
|
||||
# 1839| r1839_8(glval<unknown>) = VariableAddress[#this] :
|
||||
# 1839| r1839_9(B *) = Load[#this] : &:r1839_8, ~m?
|
||||
#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1839_9
|
||||
# 1839| r1839_10(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 1839| r1839_11(glval<B &&>) = VariableAddress[(unnamed parameter 0)] :
|
||||
# 1839| r1839_12(B &&) = Load[(unnamed parameter 0)] : &:r1839_11, ~m?
|
||||
#-----| r0_6(glval<B>) = CopyValue : r1839_12
|
||||
# 1839| r1839_13(B *) = CopyValue : r0_6
|
||||
#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1839_13
|
||||
# 1839| r1839_14(glval<A>) = CopyValue : r0_7
|
||||
#-----| r0_8(A &) = CopyValue : r1839_14
|
||||
# 1839| r1839_15(A &) = Call[operator=] : func:r1839_10, this:r0_5, 0:r0_8
|
||||
# 1839| mu1839_16(unknown) = ^CallSideEffect : ~m?
|
||||
#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m?
|
||||
#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m?
|
||||
#-----| mu0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5
|
||||
#-----| mu0_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8
|
||||
#-----| r0_13(glval<A>) = CopyValue : r1839_15
|
||||
#-----| r0_14(glval<B &>) = VariableAddress[#return] :
|
||||
#-----| r0_15(glval<unknown>) = VariableAddress[#this] :
|
||||
#-----| r0_16(B *) = Load[#this] : &:r0_15, ~m?
|
||||
#-----| r0_17(glval<B>) = CopyValue : r0_16
|
||||
#-----| r0_18(B &) = CopyValue : r0_17
|
||||
#-----| mu0_19(B &) = Store[#return] : &:r0_14, r0_18
|
||||
# 1839| v1839_17(void) = ReturnIndirection[#this] : &:r1839_6, ~m?
|
||||
#-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m?
|
||||
# 1839| r1839_18(glval<B &>) = VariableAddress[#return] :
|
||||
# 1839| v1839_19(void) = ReturnValue : &:r1839_18, ~m?
|
||||
# 1839| v1839_20(void) = AliasedUse : ~m?
|
||||
# 1839| v1839_21(void) = ExitFunction :
|
||||
|
||||
# 1843| void block_assignment::foo()
|
||||
# 1843| Block 0
|
||||
# 1843| v1843_1(void) = EnterFunction :
|
||||
# 1843| mu1843_2(unknown) = AliasedDefinition :
|
||||
# 1843| mu1843_3(unknown) = InitializeNonLocal :
|
||||
# 1844| r1844_1(glval<B>) = VariableAddress[v] :
|
||||
# 1844| mu1844_2(B) = Uninitialized[v] : &:r1844_1
|
||||
# 1844| r1844_3(glval<unknown>) = FunctionAddress[B] :
|
||||
# 1844| r1844_4(A *) = Constant[0] :
|
||||
# 1844| v1844_5(void) = Call[B] : func:r1844_3, this:r1844_1, 0:r1844_4
|
||||
# 1844| mu1844_6(unknown) = ^CallSideEffect : ~m?
|
||||
# 1844| v1844_7(void) = ^BufferReadSideEffect[0] : &:r1844_4, ~m?
|
||||
# 1844| mu1844_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1
|
||||
# 1844| mu1844_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1844_4
|
||||
# 1845| r1845_1(glval<B>) = VariableAddress[v] :
|
||||
# 1845| r1845_2(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 1845| r1845_3(glval<B>) = VariableAddress[#temp1845:13] :
|
||||
# 1845| mu1845_4(B) = Uninitialized[#temp1845:13] : &:r1845_3
|
||||
# 1845| r1845_5(glval<unknown>) = FunctionAddress[B] :
|
||||
# 1845| r1845_6(A *) = Constant[0] :
|
||||
# 1845| v1845_7(void) = Call[B] : func:r1845_5, this:r1845_3, 0:r1845_6
|
||||
# 1845| mu1845_8(unknown) = ^CallSideEffect : ~m?
|
||||
# 1845| v1845_9(void) = ^BufferReadSideEffect[0] : &:r1845_6, ~m?
|
||||
# 1845| mu1845_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_3
|
||||
# 1845| mu1845_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_6
|
||||
# 1845| r1845_12(B &) = CopyValue : r1845_3
|
||||
# 1845| r1845_13(B &) = Call[operator=] : func:r1845_2, this:r1845_1, 0:r1845_12
|
||||
# 1845| mu1845_14(unknown) = ^CallSideEffect : ~m?
|
||||
# 1845| v1845_15(void) = ^IndirectReadSideEffect[-1] : &:r1845_1, ~m?
|
||||
# 1845| v1845_16(void) = ^BufferReadSideEffect[0] : &:r1845_12, ~m?
|
||||
# 1845| mu1845_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_1
|
||||
# 1845| mu1845_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_12
|
||||
# 1845| r1845_19(glval<B>) = CopyValue : r1845_13
|
||||
# 1846| v1846_1(void) = NoOp :
|
||||
# 1843| v1843_4(void) = ReturnVoid :
|
||||
# 1843| v1843_5(void) = AliasedUse : ~m?
|
||||
# 1843| v1843_6(void) = ExitFunction :
|
||||
|
||||
perf-regression.cpp:
|
||||
# 6| void Big::Big()
|
||||
# 6| Block 0
|
||||
|
|
Загрузка…
Ссылка в новой задаче