From a4456eb13fc8ecbcd0e3165c49343f45fc3bca52 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Feb 2026 18:24:53 +0000 Subject: [PATCH 01/32] C++: IR: Drop the aliased SSA It is expensive, and has little benefit. --- cpp/ql/lib/semmle/code/cpp/ir/IR.qll | 4 +- .../lib/semmle/code/cpp/ir/IRConsistency.ql | 2 +- cpp/ql/lib/semmle/code/cpp/ir/PrintIR.ql | 2 +- cpp/ql/lib/semmle/code/cpp/ir/PrintIR.qll | 2 +- .../lib/semmle/code/cpp/ir/ValueNumbering.qll | 2 +- .../cpp/ir/implementation/aliased_ssa/IR.qll | 92 - .../ir/implementation/aliased_ssa/IRBlock.qll | 405 --- .../aliased_ssa/IRConsistency.ql | 8 - .../aliased_ssa/IRConsistency.qll | 571 ---- .../implementation/aliased_ssa/IRFunction.qll | 69 - .../implementation/aliased_ssa/IRVariable.qll | 334 --- .../aliased_ssa/Instruction.qll | 2331 ----------------- .../ir/implementation/aliased_ssa/Operand.qll | 499 ---- .../ir/implementation/aliased_ssa/PrintIR.ql | 8 - .../ir/implementation/aliased_ssa/PrintIR.qll | 454 ---- .../aliased_ssa/constant/ConstantAnalysis.qll | 59 - .../constant/PrintConstantAnalysis.qll | 11 - .../internal/ConstantAnalysisInternal.qll | 1 - .../aliased_ssa/gvn/PrintValueNumbering.qll | 17 - .../aliased_ssa/gvn/ValueNumbering.qll | 91 - .../gvn/internal/ValueNumberingImports.qll | 3 - .../gvn/internal/ValueNumberingInternal.qll | 373 --- .../aliased_ssa/internal/AliasAnalysis.qll | 524 ---- .../internal/AliasAnalysisImports.qll | 3 - .../internal/AliasAnalysisInternal.qll | 3 - .../internal/AliasConfiguration.qll | 153 -- .../internal/AliasConfigurationInternal.qll | 1 - .../aliased_ssa/internal/AliasedSSA.qll | 1028 -------- .../aliased_ssa/internal/IRBlockImports.qll | 1 - .../internal/IRConsistencyImports.qll | 1 - .../internal/IRFunctionImports.qll | 1 - .../aliased_ssa/internal/IRImports.qll | 3 - .../aliased_ssa/internal/IRInternal.qll | 4 - .../internal/IRVariableImports.qll | 5 - .../internal/InstructionImports.qll | 6 - .../aliased_ssa/internal/OperandImports.qll | 5 - .../aliased_ssa/internal/OperandInternal.qll | 2 - .../internal/PrintAliasAnalysis.qll | 19 - .../aliased_ssa/internal/PrintIRImports.qll | 2 - .../aliased_ssa/internal/PrintSSA.qll | 157 -- .../aliased_ssa/internal/SSAConsistency.ql | 8 - .../aliased_ssa/internal/SSAConsistency.qll | 55 - .../internal/SSAConsistencyImports.qll | 3 - .../aliased_ssa/internal/SSAConstruction.qll | 1420 ---------- .../internal/SSAConstructionImports.qll | 6 - .../internal/SSAConstructionInternal.qll | 8 - .../implementation/internal/TInstruction.qll | 65 +- .../internal/TInstructionInternal.qll | 1 - .../ir/implementation/internal/TOperand.qll | 77 +- .../cpp/ir/internal/ASTValueNumbering.qll | 2 +- 50 files changed, 10 insertions(+), 8891 deletions(-) delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.ql delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.ql delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/PrintConstantAnalysis.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/internal/ConstantAnalysisInternal.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisInternal.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfigurationInternal.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRBlockImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRConsistencyImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRFunctionImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRInternal.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRVariableImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/InstructionImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandInternal.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintAliasAnalysis.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintIRImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.ql delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistencyImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionImports.qll delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll diff --git a/cpp/ql/lib/semmle/code/cpp/ir/IR.qll b/cpp/ql/lib/semmle/code/cpp/ir/IR.qll index 381adad5e418..d3990e17f53a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/IR.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/IR.qll @@ -42,6 +42,4 @@ * be represented as the `IRType` `uint4`, a four-byte unsigned integer. */ -// Most queries should operate on the aliased SSA IR, so that's what we expose -// publicly as the "IR". -import implementation.aliased_ssa.IR +import implementation.unaliased_ssa.IR diff --git a/cpp/ql/lib/semmle/code/cpp/ir/IRConsistency.ql b/cpp/ql/lib/semmle/code/cpp/ir/IRConsistency.ql index 1a1c2e369cc7..371c3d7b836b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/IRConsistency.ql +++ b/cpp/ql/lib/semmle/code/cpp/ir/IRConsistency.ql @@ -5,4 +5,4 @@ * @id cpp/ir-consistency-check */ -import implementation.aliased_ssa.IRConsistency +import implementation.unaliased_ssa.IRConsistency diff --git a/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.ql b/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.ql index 1f6f05458404..9b356291cdfd 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.ql +++ b/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.ql @@ -5,4 +5,4 @@ * @kind graph */ -import implementation.aliased_ssa.PrintIR +import implementation.unaliased_ssa.PrintIR diff --git a/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.qll b/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.qll index 19ba71590897..84592dfd0b0a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/PrintIR.qll @@ -8,4 +8,4 @@ * to dump. */ -import implementation.aliased_ssa.PrintIR +import implementation.unaliased_ssa.PrintIR diff --git a/cpp/ql/lib/semmle/code/cpp/ir/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/ValueNumbering.qll index bd02afc58fba..f6cdc912a124 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/ValueNumbering.qll @@ -1 +1 @@ -import implementation.aliased_ssa.gvn.ValueNumbering +import implementation.unaliased_ssa.gvn.ValueNumbering diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll deleted file mode 100644 index 79873d8366e5..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Provides classes that describe the Intermediate Representation (IR) of the program. - * - * The IR is a representation of the semantics of the program, with very little dependence on the - * syntax that was used to write the program. For example, in C++, the statements `i += 1;`, `i++`, - * and `++i` all have the same semantic effect, but appear in the AST as three different types of - * `Expr` node. In the IR, all three statements are broken down into a sequence of fundamental - * operations similar to: - * - * ``` - * r1(int*) = VariableAddress[i] // Compute the address of variable `i` - * r2(int) = Load &:r1, m0 // Load the value of `i` - * r3(int) = Constant[1] // An integer constant with the value `1` - * r4(int) = Add r2, r3 // Add `1` to the value of `i` - * r5(int) = Store &r1, r4 // Store the new value back into the variable `i` - * ``` - * - * This allows IR-based analysis to focus on the fundamental operations, rather than having to be - * concerned with the various ways of expressing those operations in source code. - * - * The key classes in the IR are: - * - * - `IRFunction` - Contains the IR for an entire function definition, including all of that - * function's `Instruction`s, `IRBlock`s, and `IRVariables`. - * - `Instruction` - A single operation in the IR. An instruction specifies the operation to be - * performed, the operands that produce the inputs to that operation, and the type of the result - * of the operation. Control flows from an `Instruction` to one of a set of successor - * `Instruction`s. - * - `Operand` - An input value of an `Instruction`. All inputs of an `Instruction` are explicitly - * represented as `Operand`s, even if the input was implicit in the source code. An `Operand` has - * a link to the `Instruction` that consumes its value (its "use") and a link to the `Instruction` - * that produces its value (its "definition"). - * - `IRVariable` - A variable accessed by the IR for a particular function. An `IRVariable` is - * created for each variable directly accessed by the function. In addition, `IRVariable`s are - * created to represent certain temporary storage locations that do not have explicitly declared - * variables in the source code, such as the return value of the function. - * - `IRBlock` - A "basic block" in the control flow graph of a function. An `IRBlock` contains a - * sequence of instructions such that control flow can only enter the block at the first - * instruction, and can only leave the block from the last instruction. - * - `IRType` - The type of a value accessed in the IR. Unlike the `Type` class in the AST, `IRType` - * is language-neutral. For example, in C++, `unsigned int`, `char32_t`, and `wchar_t` might all - * be represented as the `IRType` `uint4`, a four-byte unsigned integer. - */ - -import IRFunction -import Instruction -import IRBlock -import IRVariable -import Operand -private import internal.IRImports as Imports -import Imports::EdgeKind -import Imports::IRType -import Imports::MemoryAccessKind - -private newtype TIRPropertyProvider = MkIRPropertyProvider() - -/** - * A class that provides additional properties to be dumped for IR instructions and blocks when using - * the PrintIR module. Libraries that compute additional facts about IR elements can extend the - * single instance of this class to specify the additional properties computed by the library. - */ -class IRPropertyProvider extends TIRPropertyProvider { - /** Gets a textual representation of this element. */ - string toString() { result = "IRPropertyProvider" } - - /** - * Gets the value of the property named `key` for the specified instruction. - */ - string getInstructionProperty(Instruction instruction, string key) { none() } - - /** - * Gets the value of the property named `key` for the specified block. - */ - string getBlockProperty(IRBlock block, string key) { none() } - - /** - * Gets the value of the property named `key` for the specified operand. - */ - string getOperandProperty(Operand operand, string key) { none() } - - /** - * Holds if the instruction `instr` should be included when printing - * the IR instructions. - */ - predicate shouldPrintInstruction(Instruction instr) { any() } - - /** - * Holds if the operand `operand` should be included when printing the an - * instruction's operand list. - */ - predicate shouldPrintOperand(Operand operand) { any() } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll deleted file mode 100644 index 7f7c5cd0a4da..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll +++ /dev/null @@ -1,405 +0,0 @@ -/** - * Provides classes describing basic blocks in the IR of a function. - */ - -private import internal.IRInternal -import Instruction -private import internal.IRBlockImports as Imports -import Imports::EdgeKind -private import Cached -private import codeql.controlflow.BasicBlock as BB - -/** - * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the - * sort keys of the block (derived from its first instruction) - */ -pragma[nomagic] -private predicate blockSortKeys( - IRFunction func, IRBlockBase block, int sortOverride, int sortKey1, int sortKey2 -) { - block.getEnclosingIRFunction() = func and - block.getFirstInstruction().hasSortKeys(sortKey1, sortKey2) and - // Ensure that the block containing `EnterFunction` always comes first. - if block.getFirstInstruction() instanceof EnterFunctionInstruction - then sortOverride = 0 - else sortOverride = 1 -} - -/** - * A basic block in the IR. A basic block consists of a sequence of `Instructions` with the only - * incoming edges at the beginning of the sequence and the only outgoing edges at the end of the - * sequence. - * - * This class does not contain any members that query the predecessor or successor edges of the - * block. This allows different classes that extend `IRBlockBase` to expose different subsets of - * edges (e.g. ignoring unreachable edges). - * - * Most consumers should use the class `IRBlock`. - */ -class IRBlockBase extends TIRBlock { - /** Gets a textual representation of this block. */ - final string toString() { result = getFirstInstruction(this).toString() } - - /** Gets the source location of the first non-`Phi` instruction in this block. */ - final Language::Location getLocation() { result = this.getFirstInstruction().getLocation() } - - /** - * INTERNAL: Do not use. - * - * Gets the zero-based index of the block within its function. - * - * This predicate is used by debugging and printing code only. - */ - int getDisplayIndex() { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(this.getEnclosingFunction()) - ) and - exists(IRFunction func | - this = - rank[result + 1](IRBlock funcBlock, int sortOverride, int sortKey1, int sortKey2 | - blockSortKeys(func, funcBlock, sortOverride, sortKey1, sortKey2) - | - funcBlock order by sortOverride, sortKey1, sortKey2 - ) - ) - } - - /** - * Gets the `index`th non-`Phi` instruction in this block. - */ - final Instruction getInstruction(int index) { result = getInstruction(this, index) } - - /** - * Get the `Phi` instructions that appear at the start of this block. - */ - final PhiInstruction getAPhiInstruction() { - Construction::getPhiInstructionBlockStart(result) = this.getFirstInstruction() - } - - /** - * Gets an instruction in this block. This includes `Phi` instructions. - */ - final Instruction getAnInstruction() { - result = this.getInstruction(_) or - result = this.getAPhiInstruction() - } - - /** - * Gets the first non-`Phi` instruction in this block. - */ - final Instruction getFirstInstruction() { result = getFirstInstruction(this) } - - /** - * Gets the last instruction in this block. - */ - final Instruction getLastInstruction() { - result = this.getInstruction(this.getInstructionCount() - 1) - } - - /** - * Gets the number of non-`Phi` instructions in this block. - */ - final int getInstructionCount() { result = getInstructionCount(this) } - - /** - * Gets the `IRFunction` that contains this block. - */ - final IRFunction getEnclosingIRFunction() { - result = getFirstInstruction(this).getEnclosingIRFunction() - } - - /** - * Gets the `Function` that contains this block. - */ - final Language::Declaration getEnclosingFunction() { - result = getFirstInstruction(this).getEnclosingFunction() - } -} - -/** - * A basic block with additional information about its predecessor and successor edges. Each edge - * corresponds to the control flow between the last instruction of one block and the first - * instruction of another block. - */ -class IRBlock extends IRBlockBase { - /** - * Gets a block to which control flows directly from this block. - */ - final IRBlock getASuccessor() { blockSuccessor(this, result) } - - /** - * Gets a block from which control flows directly to this block. - */ - final IRBlock getAPredecessor() { blockSuccessor(result, this) } - - /** - * Gets the block to which control flows directly from this block along an edge of kind `kind`. - */ - final IRBlock getSuccessor(EdgeKind kind) { blockSuccessor(this, result, kind) } - - /** - * Gets the block to which control flows directly from this block along a back edge of kind - * `kind`. - */ - final IRBlock getBackEdgeSuccessor(EdgeKind kind) { backEdgeSuccessor(this, result, kind) } - - /** - * Holds if this block immediately dominates `block`. - * - * Block `A` immediate dominates block `B` if block `A` strictly dominates block `B` and block `B` - * is a direct successor of block `A`. - */ - final predicate immediatelyDominates(IRBlock block) { blockImmediatelyDominates(this, block) } - - /** - * Holds if this block strictly dominates `block`. - * - * Block `A` strictly dominates block `B` if block `A` dominates block `B` and blocks `A` and `B` - * are not the same block. - */ - final predicate strictlyDominates(IRBlock block) { blockImmediatelyDominates+(this, block) } - - /** - * Holds if this block dominates `block`. - * - * Block `A` dominates block `B` if any control flow path from the entry block of the function to - * block `B` must pass through block `A`. A block always dominates itself. - */ - final predicate dominates(IRBlock block) { this.strictlyDominates(block) or this = block } - - /** - * Gets a block on the dominance frontier of this block. - * - * The dominance frontier of block `A` is the set of blocks `B` such that block `A` does not - * dominate block `B`, but block `A` does dominate an immediate predecessor of block `B`. - */ - pragma[noinline] - final IRBlock dominanceFrontier() { - this.getASuccessor() = result and - not this.immediatelyDominates(result) - or - exists(IRBlock prev | result = prev.dominanceFrontier() | - this.immediatelyDominates(prev) and - not this.immediatelyDominates(result) - ) - } - - /** - * Holds if this block immediately post-dominates `block`. - * - * Block `A` immediate post-dominates block `B` if block `A` strictly post-dominates block `B` and - * block `B` is a direct successor of block `A`. - */ - final predicate immediatelyPostDominates(IRBlock block) { - blockImmediatelyPostDominates(this, block) - } - - /** - * Holds if this block strictly post-dominates `block`. - * - * Block `A` strictly post-dominates block `B` if block `A` post-dominates block `B` and blocks `A` - * and `B` are not the same block. - */ - final predicate strictlyPostDominates(IRBlock block) { - blockImmediatelyPostDominates+(this, block) - } - - /** - * Holds if this block is a post-dominator of `block`. - * - * Block `A` post-dominates block `B` if any control flow path from `B` to the exit block of the - * function must pass through block `A`. A block always post-dominates itself. - */ - final predicate postDominates(IRBlock block) { this.strictlyPostDominates(block) or this = block } - - /** - * Gets a block on the post-dominance frontier of this block. - * - * The post-dominance frontier of block `A` is the set of blocks `B` such that block `A` does not - * post-dominate block `B`, but block `A` does post-dominate an immediate successor of block `B`. - */ - pragma[noinline] - final IRBlock postDominanceFrontier() { - this.getAPredecessor() = result and - not this.immediatelyPostDominates(result) - or - exists(IRBlock prev | result = prev.postDominanceFrontier() | - this.immediatelyPostDominates(prev) and - not this.immediatelyPostDominates(result) - ) - } - - /** - * Holds if this block is reachable from the entry block of its function. - */ - final predicate isReachableFromFunctionEntry() { - this = this.getEnclosingIRFunction().getEntryBlock() or - this.getAPredecessor().isReachableFromFunctionEntry() - } -} - -private predicate startsBasicBlock(Instruction instr) { - not instr instanceof PhiInstruction and - not adjacentInBlock(_, instr) -} - -/** Holds if `i2` follows `i1` in a `IRBlock`. */ -private predicate adjacentInBlock(Instruction i1, Instruction i2) { - // - i2 must be the only successor of i1 - i2 = unique(Instruction i | i = i1.getASuccessor()) and - // - i1 must be the only predecessor of i2 - i1 = unique(Instruction i | i.getASuccessor() = i2) and - // - The edge between the two must be a GotoEdge. We just check that one - // exists since we've already checked that it's unique. - exists(GotoEdge edgeKind | exists(i1.getSuccessor(edgeKind))) and - // - The edge must not be a back edge. This means we get the same back edges - // in the basic-block graph as we do in the raw CFG. - not exists(Construction::getInstructionBackEdgeSuccessor(i1, _)) - // This predicate could be simplified to remove one of the `unique`s if we - // were willing to rely on the CFG being well-formed and thus never having - // more than one successor to an instruction that has a `GotoEdge` out of it. -} - -private predicate isEntryBlock(TIRBlock block) { - block = MkIRBlock(any(EnterFunctionInstruction enter)) -} - -module IRCfg implements BB::CfgSig { - private import codeql.controlflow.SuccessorType - - class ControlFlowNode = Instruction; - - final private class FinalIRBlock = IRBlock; - - class BasicBlock extends FinalIRBlock { - ControlFlowNode getNode(int i) { result = this.getInstruction(i) } - - ControlFlowNode getLastNode() { result = super.getLastInstruction() } - - int length() { result = this.getInstructionCount() } - - BasicBlock getASuccessor() { result = super.getASuccessor() } - - BasicBlock getASuccessor(SuccessorType t) { - exists(EdgeKind k | - result = super.getSuccessor(k) and - t = getAMatchingSuccessorType(k) - ) - } - - predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } - - predicate dominates(BasicBlock bb) { super.dominates(bb) } - - BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } - - predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } - - predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } - - predicate postDominates(BasicBlock bb) { super.postDominates(bb) } - } - - class EntryBasicBlock extends BasicBlock { - EntryBasicBlock() { isEntryBlock(this) } - } - - pragma[nomagic] - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { - bb1.getASuccessor() = bb2 and - bb1 = bb2.getImmediateDominator() and - forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) - } -} - -cached -private module Cached { - cached - newtype TIRBlock = MkIRBlock(Instruction firstInstr) { startsBasicBlock(firstInstr) } - - /** Holds if `i` is the `index`th instruction the block starting with `first`. */ - private Instruction getInstructionFromFirst(Instruction first, int index) = - shortestDistances(startsBasicBlock/1, adjacentInBlock/2)(first, result, index) - - /** Holds if `i` is the `index`th instruction in `block`. */ - cached - Instruction getInstruction(TIRBlock block, int index) { - result = getInstructionFromFirst(getFirstInstruction(block), index) - } - - cached - int getInstructionCount(TIRBlock block) { result = strictcount(getInstruction(block, _)) } - - cached - predicate blockSuccessor(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - exists(Instruction predLast, Instruction succFirst | - predLast = getInstruction(pred, getInstructionCount(pred) - 1) and - succFirst = predLast.getSuccessor(kind) and - succ = MkIRBlock(succFirst) - ) - } - - pragma[noinline] - private predicate blockIdentity(TIRBlock b1, TIRBlock b2) { b1 = b2 } - - pragma[noopt] - cached - predicate backEdgeSuccessor(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - backEdgeSuccessorRaw(pred, succ, kind) - or - // See the QLDoc on `backEdgeSuccessorRaw`. - exists(TIRBlock pred2 | - // Joining with `blockIdentity` is a performance trick to get - // `forwardEdgeRaw` on the RHS of a join, where it's fast. - blockIdentity(pred, pred2) and - forwardEdgeRaw+(pred, pred2) - ) and - blockSuccessor(pred, succ, kind) - } - - /** - * Holds if there is an edge from `pred` to `succ` that is not a back edge. - */ - private predicate forwardEdgeRaw(TIRBlock pred, TIRBlock succ) { - exists(EdgeKind kind | - blockSuccessor(pred, succ, kind) and - not backEdgeSuccessorRaw(pred, succ, kind) - ) - } - - /** - * Holds if the `kind`-edge from `pred` to `succ` is a back edge according to - * `Construction`. - * - * There could be loops of non-back-edges if there is a flaw in the IR - * construction or back-edge detection, and this could cause non-termination - * of subsequent analysis. To prevent that, a subsequent predicate further - * classifies all edges as back edges if they are involved in a loop of - * non-back-edges. - */ - private predicate backEdgeSuccessorRaw(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - exists(Instruction predLast, Instruction succFirst | - predLast = getInstruction(pred, getInstructionCount(pred) - 1) and - succFirst = Construction::getInstructionBackEdgeSuccessor(predLast, kind) and - succ = MkIRBlock(succFirst) - ) - } - - cached - predicate blockSuccessor(TIRBlock pred, TIRBlock succ) { blockSuccessor(pred, succ, _) } - - cached - predicate blockImmediatelyDominates(TIRBlock dominator, TIRBlock block) = - idominance(isEntryBlock/1, blockSuccessor/2)(_, dominator, block) -} - -private Instruction getFirstInstruction(TIRBlock block) { block = MkIRBlock(result) } - -private predicate blockFunctionExit(IRBlock exit) { - exit.getLastInstruction() instanceof ExitFunctionInstruction -} - -private predicate blockPredecessor(IRBlock src, IRBlock pred) { src.getAPredecessor() = pred } - -private predicate blockImmediatelyPostDominates(IRBlock postDominator, IRBlock block) = - idominance(blockFunctionExit/1, blockPredecessor/2)(_, postDominator, block) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.ql b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.ql deleted file mode 100644 index 0b49f422bab9..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Aliased SSA IR Consistency Check - * @description Performs consistency checks on the Intermediate Representation. This query should have no results. - * @kind table - * @id cpp/aliased-ssa-ir-consistency-check - */ - -import IRConsistency diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll deleted file mode 100644 index c29d743dadbf..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll +++ /dev/null @@ -1,571 +0,0 @@ -private import IR -import InstructionConsistency // module is below -import IRTypeConsistency // module is in IRType.qll -import internal.IRConsistencyImports - -module InstructionConsistency { - private import internal.InstructionImports as Imports - private import Imports::OperandTag - private import Imports::Overlap - private import internal.IRInternal - - private newtype TOptionalIRFunction = - TPresentIRFunction(IRFunction irFunc) or - TMissingIRFunction() - - /** - * An `IRFunction` that might not exist. This is used so that we can produce consistency failures - * for IR that also incorrectly lacks a `getEnclosingIRFunction()`. - */ - abstract private class OptionalIRFunction extends TOptionalIRFunction { - abstract string toString(); - - abstract Language::Location getLocation(); - } - - class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction { - private IRFunction irFunc; - - PresentIRFunction() { this = TPresentIRFunction(irFunc) } - - override string toString() { - result = concat(LanguageDebug::getIdentityString(irFunc.getFunction()), "; ") - } - - override Language::Location getLocation() { - // To avoid an overwhelming number of results when the extractor merges functions with the - // same name, just pick a single location. - result = - min(Language::Location loc | loc = irFunc.getLocation() | loc order by loc.toString()) - } - - IRFunction getIRFunction() { result = irFunc } - } - - private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction { - override string toString() { result = "" } - - override Language::Location getLocation() { result instanceof Language::UnknownLocation } - } - - private OptionalIRFunction getInstructionIRFunction(Instruction instr) { - result = TPresentIRFunction(instr.getEnclosingIRFunction()) - or - not exists(instr.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - pragma[inline] - private OptionalIRFunction getInstructionIRFunction(Instruction instr, string irFuncText) { - result = getInstructionIRFunction(instr) and - irFuncText = result.toString() - } - - private OptionalIRFunction getOperandIRFunction(Operand operand) { - result = TPresentIRFunction(operand.getEnclosingIRFunction()) - or - not exists(operand.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - pragma[inline] - private OptionalIRFunction getOperandIRFunction(Operand operand, string irFuncText) { - result = getOperandIRFunction(operand) and - irFuncText = result.toString() - } - - private OptionalIRFunction getBlockIRFunction(IRBlock block) { - result = TPresentIRFunction(block.getEnclosingIRFunction()) - or - not exists(block.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - /** - * Holds if instruction `instr` is missing an expected operand with tag `tag`. - */ - query predicate missingOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag | - instr.getOpcode().hasOperand(tag) and - not exists(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - message = - "Instruction '" + instr.getOpcode().toString() + - "' is missing an expected operand with tag '" + tag.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if instruction `instr` has an unexpected operand with tag `tag`. - */ - query predicate unexpectedOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag | - exists(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - not instr.getOpcode().hasOperand(tag) and - not (instr instanceof CallInstruction and tag instanceof ArgumentOperandTag) and - not ( - instr instanceof BuiltInOperationInstruction and tag instanceof PositionalArgumentOperandTag - ) and - not (instr instanceof InlineAsmInstruction and tag instanceof AsmOperandTag) and - message = - "Instruction '" + instr.toString() + "' has unexpected operand '" + tag.toString() + - "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if instruction `instr` has multiple operands with tag `tag`. - */ - query predicate duplicateOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag, int operandCount | - operandCount = - strictcount(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - operandCount > 1 and - message = - "Instruction has " + operandCount + " operands with tag '" + tag.toString() + "'" + - " in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if `Phi` instruction `instr` is missing an operand corresponding to - * the predecessor block `pred`. - */ - query predicate missingPhiOperand( - PhiInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRBlock pred | - pred = instr.getBlock().getAPredecessor() and - not exists(PhiInputOperand operand | - operand = instr.getAnOperand() and - operand.getPredecessorBlock() = pred - ) and - message = - "Instruction '" + instr.toString() + "' is missing an operand for predecessor block '" + - pred.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - query predicate missingOperandType( - Operand operand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Instruction use | - not exists(operand.getType()) and - use = operand.getUse() and - message = - "Operand '" + operand.toString() + "' of instruction '" + use.getOpcode().toString() + - "' is missing a type in function '$@'." and - irFunc = getOperandIRFunction(operand, irFuncText) - ) - } - - query predicate duplicateChiOperand( - ChiInstruction chi, string message, OptionalIRFunction irFunc, string irFuncText - ) { - chi.getTotal() = chi.getPartial() and - message = - "Chi instruction for " + chi.getPartial().toString() + - " has duplicate operands in function '$@'." and - irFunc = getInstructionIRFunction(chi, irFuncText) - } - - query predicate sideEffectWithoutPrimary( - SideEffectInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(instr.getPrimaryInstruction()) and - message = - "Side effect instruction '" + instr + "' is missing a primary instruction in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if an instruction, other than `ExitFunction`, has no successors. - */ - query predicate instructionWithoutSuccessor( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(instr.getASuccessor()) and - not instr instanceof ExitFunctionInstruction and - // Phi instructions aren't linked into the instruction-level flow graph. - not instr instanceof PhiInstruction and - not instr instanceof UnreachedInstruction and - message = "Instruction '" + instr.toString() + "' has no successors in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if there are multiple edges of the same kind from `source`. - */ - query predicate ambiguousSuccessors( - Instruction source, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(EdgeKind kind, int n | - n = strictcount(Instruction t | source.getSuccessor(kind) = t) and - n > 1 and - message = - "Instruction '" + source.toString() + "' has " + n.toString() + " successors of kind '" + - kind.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(source, irFuncText) - ) - } - - /** - * Holds if `instr` is part of a loop even though the AST of `instr`'s enclosing function - * contains no element that can cause loops. - */ - query predicate unexplainedLoop( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Language::Function f | - exists(IRBlock block | - instr.getBlock() = block and - block.getEnclosingFunction() = f and - block.getASuccessor+() = block - ) and - not Language::hasPotentialLoop(f) and - message = - "Instruction '" + instr.toString() + "' is part of an unexplained loop in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if a `Phi` instruction is present in a block with fewer than two - * predecessors. - */ - query predicate unnecessaryPhiInstruction( - PhiInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int n | - n = count(instr.getBlock().getAPredecessor()) and - n < 2 and - message = - "Instruction '" + instr.toString() + "' is in a block with only " + n.toString() + - " predecessors in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if a memory operand is connected to a definition with an unmodeled result. - */ - query predicate memoryOperandDefinitionIsUnmodeled( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(MemoryOperand operand, Instruction def | - operand = instr.getAnOperand() and - def = operand.getAnyDef() and - not def.isResultModeled() and - message = - "Memory operand definition on instruction '" + instr.toString() + - "' has unmodeled result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if operand `operand` consumes a value that was defined in - * a different function. - */ - query predicate operandAcrossFunctions( - Operand operand, string message, OptionalIRFunction useIRFunc, string useIRFuncText, - OptionalIRFunction defIRFunc, string defIRFuncText - ) { - exists(Instruction useInstr, Instruction defInstr | - operand.getUse() = useInstr and - operand.getAnyDef() = defInstr and - useIRFunc = getInstructionIRFunction(useInstr, useIRFuncText) and - defIRFunc = getInstructionIRFunction(defInstr, defIRFuncText) and - useIRFunc != defIRFunc and - message = - "Operand '" + operand.toString() + "' is used on instruction '" + useInstr.toString() + - "' in function '$@', but is defined on instruction '" + defInstr.toString() + - "' in function '$@'." - ) - } - - /** - * Holds if instruction `instr` is not in exactly one block. - */ - query predicate instructionWithoutUniqueBlock( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int blockCount | - blockCount = count(instr.getBlock()) and - blockCount != 1 and - message = - "Instruction '" + instr.toString() + "' is a member of " + blockCount.toString() + - " blocks in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - private predicate forwardEdge(IRBlock b1, IRBlock b2) { - b1.getASuccessor() = b2 and - not b1.getBackEdgeSuccessor(_) = b2 - } - - /** - * Holds if `f` contains a loop in which no edge is a back edge. - * - * This check ensures we don't have too _few_ back edges. - */ - query predicate containsLoopOfForwardEdges(IRFunction f, string message) { - exists(IRBlock block | - forwardEdge+(block, block) and - block.getEnclosingIRFunction() = f and - message = "Function contains a loop consisting of only forward edges." - ) - } - - /** - * Holds if `block` is reachable from its function entry point but would not - * be reachable by traversing only forward edges. This check is skipped for - * functions containing `goto` statements as the property does not generally - * hold there. - * - * This check ensures we don't have too _many_ back edges. - */ - query predicate lostReachability( - IRBlock block, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRFunction f, IRBlock entry | - entry = f.getEntryBlock() and - entry.getASuccessor+() = block and - not forwardEdge+(entry, block) and - not Language::hasGoto(f.getFunction()) and - message = - "Block '" + block.toString() + - "' is not reachable by traversing only forward edges in function '$@'." and - irFunc = TPresentIRFunction(f) and - irFuncText = irFunc.toString() - ) - } - - /** - * Holds if the number of back edges differs between the `Instruction` graph - * and the `IRBlock` graph. - */ - query predicate backEdgeCountMismatch(OptionalIRFunction irFunc, string message) { - exists(int fromInstr, int fromBlock | - fromInstr = - count(Instruction i1, Instruction i2 | - getInstructionIRFunction(i1) = irFunc and i1.getBackEdgeSuccessor(_) = i2 - ) and - fromBlock = - count(IRBlock b1, IRBlock b2 | - getBlockIRFunction(b1) = irFunc and b1.getBackEdgeSuccessor(_) = b2 - ) and - fromInstr != fromBlock and - message = - "The instruction graph for function '" + irFunc.toString() + "' contains " + - fromInstr.toString() + " back edges, but the block graph contains " + fromBlock.toString() - + " back edges." - ) - } - - /** - * Gets the point in the function at which the specified operand is evaluated. For most operands, - * this is at the instruction that consumes the use. For a `PhiInputOperand`, the effective point - * of evaluation is at the end of the corresponding predecessor block. - */ - private predicate pointOfEvaluation(Operand operand, IRBlock block, int index) { - block = operand.(PhiInputOperand).getPredecessorBlock() and - index = block.getInstructionCount() - or - exists(Instruction use | - use = operand.(NonPhiOperand).getUse() and - block.getInstruction(index) = use - ) - } - - /** - * Holds if `useOperand` has a definition that does not dominate the use. - */ - query predicate useNotDominatedByDefinition( - Operand useOperand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRBlock useBlock, int useIndex, Instruction defInstr, IRBlock defBlock, int defIndex | - pointOfEvaluation(useOperand, useBlock, useIndex) and - defInstr = useOperand.getAnyDef() and - ( - defInstr instanceof PhiInstruction and - defBlock = defInstr.getBlock() and - defIndex = -1 - or - defBlock.getInstruction(defIndex) = defInstr - ) and - not ( - defBlock.strictlyDominates(useBlock) - or - defBlock = useBlock and - defIndex < useIndex - ) and - message = - "Operand '" + useOperand.toString() + - "' is not dominated by its definition in function '$@'." and - irFunc = getOperandIRFunction(useOperand, irFuncText) - ) - } - - query predicate switchInstructionWithoutDefaultEdge( - SwitchInstruction switchInstr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(switchInstr.getDefaultSuccessor()) and - message = - "SwitchInstruction " + switchInstr.toString() + " without a DefaultEdge in function '$@'." and - irFunc = getInstructionIRFunction(switchInstr, irFuncText) - } - - /** - * Holds if `instr` is on the chain of chi/phi instructions for all aliased - * memory. - */ - private predicate isOnAliasedDefinitionChain(Instruction instr) { - instr instanceof AliasedDefinitionInstruction - or - isOnAliasedDefinitionChain(instr.(ChiInstruction).getTotal()) - or - isOnAliasedDefinitionChain(instr.(PhiInstruction).getAnInputOperand().getAnyDef()) - } - - private predicate shouldBeConflated(Instruction instr) { - isOnAliasedDefinitionChain(instr) - or - instr.getOpcode() instanceof Opcode::InitializeNonLocal - } - - query predicate notMarkedAsConflated( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - shouldBeConflated(instr) and - not instr.isResultConflated() and - message = - "Instruction '" + instr.toString() + - "' should be marked as having a conflated result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate wronglyMarkedAsConflated( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - instr.isResultConflated() and - not shouldBeConflated(instr) and - message = - "Instruction '" + instr.toString() + - "' should not be marked as having a conflated result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate invalidOverlap( - MemoryOperand useOperand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Overlap overlap | - overlap = useOperand.getDefinitionOverlap() and - overlap instanceof MayPartiallyOverlap and - message = - "MemoryOperand '" + useOperand.toString() + "' has a `getDefinitionOverlap()` of '" + - overlap.toString() + "'." and - irFunc = getOperandIRFunction(useOperand, irFuncText) - ) - } - - query predicate nonUniqueEnclosingIRFunction( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int irFuncCount | - irFuncCount = count(instr.getEnclosingIRFunction()) and - irFuncCount != 1 and - message = - "Instruction '" + instr.toString() + "' has " + irFuncCount.toString() + - " results for `getEnclosingIRFunction()` in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if the object address operand for the given `FieldAddress` instruction does not have an - * address type. - */ - query predicate fieldAddressOnNonPointer( - FieldAddressInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not instr.getObjectAddressOperand().getIRType() instanceof IRAddressType and - message = - "FieldAddress instruction '" + instr.toString() + - "' has an object address operand that is not an address, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if the `this` argument operand for the given `Call` instruction does not have an address - * type. - */ - query predicate thisArgumentIsNonPointer( - CallInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(ThisArgumentOperand thisOperand | thisOperand = instr.getThisArgumentOperand() | - not thisOperand.getIRType() instanceof IRAddressType - ) and - message = - "Call instruction '" + instr.toString() + - "' has a `this` argument operand that is not an address, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate nonUniqueIRVariable( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(VariableInstruction vi, IRVariable v1, IRVariable v2 | - instr = vi and vi.getIRVariable() = v1 and vi.getIRVariable() = v2 and v1 != v2 - ) and - message = - "Variable instruction '" + instr.toString() + - "' has multiple associated variables, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - or - instr.getOpcode() instanceof Opcode::VariableAddress and - not instr instanceof VariableInstruction and - message = - "Variable address instruction '" + instr.toString() + - "' has no associated variable, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate nonBooleanOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Instruction unary | - unary = instr.(LogicalNotInstruction).getUnary() and - not unary.getResultIRType() instanceof IRBooleanType and - irFunc = getInstructionIRFunction(instr, irFuncText) and - message = - "Logical Not instruction " + instr.toString() + - " with non-Boolean operand, in function '$@'." - ) - or - exists(Instruction cond | - cond = instr.(ConditionalBranchInstruction).getCondition() and - not cond.getResultIRType() instanceof IRBooleanType and - irFunc = getInstructionIRFunction(instr, irFuncText) and - message = - "Conditional branch instruction " + instr.toString() + - " with non-Boolean condition, in function '$@'." - ) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll deleted file mode 100644 index 7fa08f57a006..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Provides the class `IRFunction`, which represents the Intermediate Representation for the - * definition of a function. - */ - -private import internal.IRInternal -private import internal.IRFunctionImports as Imports -import Imports::IRFunctionBase -import Instruction - -/** - * The IR for a function. - */ -class IRFunction extends IRFunctionBase { - /** - * Gets the entry point for this function. - */ - pragma[noinline] - final EnterFunctionInstruction getEnterFunctionInstruction() { - result.getEnclosingIRFunction() = this - } - - /** - * Gets the exit point for this function. - */ - pragma[noinline] - final ExitFunctionInstruction getExitFunctionInstruction() { - result.getEnclosingIRFunction() = this - } - - /** - * Gets the single return instruction for this function. - */ - pragma[noinline] - final ReturnInstruction getReturnInstruction() { result.getEnclosingIRFunction() = this } - - /** - * Gets the variable used to hold the return value of this function. If this - * function does not return a value, this predicate does not hold. - */ - pragma[noinline] - final IRReturnVariable getReturnVariable() { result.getEnclosingIRFunction() = this } - - /** - * Gets the block containing the entry point of this function. - */ - pragma[noinline] - final IRBlock getEntryBlock() { - result.getFirstInstruction() = this.getEnterFunctionInstruction() - } - - /** - * Gets all instructions in this function. - */ - final Instruction getAnInstruction() { result.getEnclosingIRFunction() = this } - - /** - * Gets all blocks in this function. - */ - final IRBlock getABlock() { result.getEnclosingIRFunction() = this } - - /** - * Holds if this function may have incomplete def-use information. - * - * Def-use information may be omitted for a function when it is too expensive - * to compute. - */ - final predicate hasIncompleteSsa() { Construction::hasIncompleteSsa(this) } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll deleted file mode 100644 index 43217ed4c60a..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll +++ /dev/null @@ -1,334 +0,0 @@ -/** - * Provides classes that represent variables accessed by the IR. - */ - -private import internal.IRInternal -import IRFunction -private import internal.IRVariableImports as Imports -import Imports::TempVariableTag -private import Imports::IRUtilities -private import Imports::TTempVariableTag -private import Imports::TIRVariable -private import Imports::IRType - -/** - * A variable referenced by the IR for a function. - * - * The variable may be a user-declared variable (`IRUserVariable`) or a temporary variable generated - * by the AST-to-IR translation (`IRTempVariable`). - */ -abstract private class AbstractIRVariable extends TIRVariable { - Language::Declaration func; - - /** Gets a textual representation of this element. */ - abstract string toString(); - - /** - * Holds if this variable's value cannot be changed within a function. Currently used for string - * literals, but could also apply to `const` global and static variables. - */ - predicate isReadOnly() { none() } - - /** - * Gets the type of the variable. - */ - final Language::Type getType() { this.getLanguageType().hasType(result, false) } - - /** - * Gets the language-neutral type of the variable. - */ - final IRType getIRType() { result = this.getLanguageType().getIRType() } - - /** - * Gets the type of the variable. - */ - abstract Language::LanguageType getLanguageType(); - - /** - * Gets the AST node that declared this variable, or that introduced this - * variable as part of the AST-to-IR translation. - */ - abstract Language::AST getAst(); - - /** - * Gets an identifier string for the variable. This identifier is unique - * within the function. - */ - abstract string getUniqueId(); - - /** - * Gets the source location of this variable. - */ - final Language::Location getLocation() { result = this.getAst().getLocation() } - - /** - * Gets the IR for the function that references this variable. - */ - final IRFunction getEnclosingIRFunction() { result.getFunction() = this.getEnclosingFunction() } - - /** - * Gets the function that references this variable. - */ - final Language::Declaration getEnclosingFunction() { result = func } -} - -/** - * A variable referenced by the IR for a function. - * - * The variable may be a user-declared variable (`IRUserVariable`) or a temporary variable generated - * by the AST-to-IR translation (`IRTempVariable`). - */ -final class IRVariable = AbstractIRVariable; - -/** - * A user-declared variable referenced by the IR for a function. - */ -class IRUserVariable extends AbstractIRVariable, TIRUserVariable { - Language::Variable var; - Language::LanguageType type; - - IRUserVariable() { this = TIRUserVariable(var, type, func) } - - final override string toString() { result = this.getVariable().toString() } - - final override Language::AST getAst() { result = var } - - final override string getUniqueId() { - result = this.getVariable().toString() + " " + this.getVariable().getLocation().toString() - } - - final override Language::LanguageType getLanguageType() { result = type } - - /** - * Gets the original user-declared variable. - */ - Language::Variable getVariable() { result = var } -} - -/** - * A variable (user-declared or temporary) that is allocated on the stack. This includes all - * parameters, non-static local variables, and temporary variables. - */ -abstract private class AbstractIRAutomaticVariable extends AbstractIRVariable { } - -/** - * A variable (user-declared or temporary) that is allocated on the stack. This includes all - * parameters, non-static local variables, and temporary variables. - */ -final class IRAutomaticVariable = AbstractIRAutomaticVariable; - -/** - * A user-declared variable that is allocated on the stack. This includes all parameters and - * non-static local variables. - */ -private class AbstractIRAutomaticUserVariable extends IRUserVariable, AbstractIRAutomaticVariable { - override Language::AutomaticVariable var; - - final override Language::AutomaticVariable getVariable() { result = var } -} - -/** - * A user-declared variable that is allocated on the stack. This includes all parameters and - * non-static local variables. - */ -final class IRAutomaticUserVariable = AbstractIRAutomaticUserVariable; - -/** - * A user-declared variable that is not allocated on the stack. This includes all global variables, - * namespace-scope variables, static fields, and static local variables. - */ -class IRStaticUserVariable extends IRUserVariable { - override Language::StaticVariable var; - - IRStaticUserVariable() { not Language::isVariableAutomatic(var) } - - final override Language::StaticVariable getVariable() { result = var } -} - -/** - * A variable that is not user-declared. This includes temporary variables generated as part of IR - * construction, as well as string literals. - */ -abstract private class AbstractIRGeneratedVariable extends AbstractIRVariable { - Language::AST ast; - Language::LanguageType type; - - final override Language::LanguageType getLanguageType() { result = type } - - final override Language::AST getAst() { result = ast } - - override string toString() { result = this.getBaseString() + this.getLocationString() } - - override string getUniqueId() { none() } - - /** - * INTERNAL: Do not use. - * - * Gets a string containing the source code location of the AST that generated this variable. - * - * This is used by debugging and printing code only. - */ - final string getLocationString() { - result = - ast.getLocation().getStartLine().toString() + ":" + - ast.getLocation().getStartColumn().toString() - } - - /** - * INTERNAL: Do not use. - * - * Gets the string that is combined with the location of the variable to generate the string - * representation of this variable. - * - * This is used by debugging and printing code only. - */ - string getBaseString() { none() } -} - -/** - * A variable that is not user-declared. This includes temporary variables generated as part of IR - * construction, as well as string literals. - */ -final class IRGeneratedVariable = AbstractIRGeneratedVariable; - -/** - * A temporary variable introduced by IR construction. The most common examples are the variable - * generated to hold the return value of a function, or the variable generated to hold the result of - * a condition operator (`a ? b : c`). - */ -class IRTempVariable extends AbstractIRGeneratedVariable, AbstractIRAutomaticVariable, - TIRTempVariable -{ - TempVariableTag tag; - - IRTempVariable() { this = TIRTempVariable(func, ast, tag, type) } - - final override string getUniqueId() { - result = "Temp: " + Construction::getTempVariableUniqueId(this) - } - - /** - * Gets the "tag" object that differentiates this temporary variable from other temporary - * variables generated for the same AST. - */ - final TempVariableTag getTag() { result = tag } - - override string getBaseString() { result = "#temp" } -} - -/** - * A temporary variable generated to hold the return value of a function. - */ -class IRReturnVariable extends IRTempVariable { - IRReturnVariable() { tag = ReturnValueTempVar() } - - final override string toString() { result = "#return" } -} - -/** - * A temporary variable generated to hold the exception thrown by a `ThrowValue` instruction. - */ -class IRThrowVariable extends IRTempVariable { - IRThrowVariable() { tag = ThrowTempVar() } - - final override string getBaseString() { result = "#throw" } -} - -/** - * A temporary variable generated to hold the contents of all arguments passed to the `...` of a - * function that accepts a variable number of arguments. - */ -class IREllipsisVariable extends IRTempVariable, AbstractIRParameter { - IREllipsisVariable() { tag = EllipsisTempVar() } - - final override string toString() { result = "#ellipsis" } - - final override int getIndex() { result = func.(Language::Function).getNumberOfParameters() } -} - -/** - * A temporary variable generated to hold the `this` pointer. - */ -class IRThisVariable extends IRTempVariable, AbstractIRParameter { - IRThisVariable() { tag = ThisTempVar() } - - final override string toString() { result = "#this" } - - final override int getIndex() { result = -1 } -} - -/** - * A variable generated to represent the contents of a string literal. This variable acts much like - * a read-only global variable. - */ -class IRStringLiteral extends AbstractIRGeneratedVariable, TIRStringLiteral { - Language::StringLiteral literal; - - IRStringLiteral() { this = TIRStringLiteral(func, ast, type, literal) } - - final override predicate isReadOnly() { any() } - - final override string getUniqueId() { - result = "String: " + this.getLocationString() + "=" + Language::getStringLiteralText(literal) - } - - final override string getBaseString() { result = "#string" } - - /** - * Gets the AST of the string literal represented by this `IRStringLiteral`. - */ - final Language::StringLiteral getLiteral() { result = literal } -} - -/** - * A variable generated to track whether a specific non-stack variable has been initialized. This is - * used to model the runtime initialization of static local variables in C++, as well as static - * fields in C#. - */ -class IRDynamicInitializationFlag extends AbstractIRGeneratedVariable, TIRDynamicInitializationFlag { - Language::Variable var; - - IRDynamicInitializationFlag() { - this = TIRDynamicInitializationFlag(func, var, type) and ast = var - } - - final override string toString() { result = var.toString() + "#init" } - - /** - * Gets variable whose initialization is guarded by this flag. - */ - final Language::Variable getVariable() { result = var } - - final override string getUniqueId() { - result = - "Init: " + this.getVariable().toString() + " " + this.getVariable().getLocation().toString() - } - - final override string getBaseString() { result = "#init:" + var.toString() + ":" } -} - -/** - * An IR variable which acts like a function parameter, including positional parameters and the - * temporary variables generated for `this` and ellipsis parameters. - */ -abstract private class AbstractIRParameter extends AbstractIRAutomaticVariable { - /** - * Gets the zero-based index of this parameter. The `this` parameter has index -1. - */ - int getIndex() { none() } -} - -/** - * An IR variable which acts like a function parameter, including positional parameters and the - * temporary variables generated for `this` and ellipsis parameters. - */ -final class IRParameter = AbstractIRParameter; - -/** - * An IR variable representing a positional parameter. - */ -class IRPositionalParameter extends AbstractIRParameter, AbstractIRAutomaticUserVariable { - IRPositionalParameter() { this.getVariable() instanceof Language::Parameter } - - final override int getIndex() { result = this.getVariable().(Language::Parameter).getIndex() } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll deleted file mode 100644 index 8d3e960c3f87..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ /dev/null @@ -1,2331 +0,0 @@ -/** - * Provides classes that represent the individual instructions in the IR for a function. - */ - -private import internal.IRInternal -import IRFunction -import IRBlock -import IRVariable -import Operand -private import internal.InstructionImports as Imports -import Imports::EdgeKind -import Imports::IRType -import Imports::MemoryAccessKind -import Imports::Opcode -private import Imports::OperandTag - -/** - * Gets an `Instruction` that is contained in `IRFunction`, and has a location with the specified - * `File` and line number. Used for assigning register names when printing IR. - */ -private Instruction getAnInstructionAtLine(IRFunction irFunc, Language::File file, int line) { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(irFunc.getFunction()) - ) and - exists(Language::Location location | - irFunc = result.getEnclosingIRFunction() and - location = result.getLocation() and - file = location.getFile() and - line = location.getStartLine() - ) -} - -/** - * A single instruction in the IR. - */ -class Instruction extends Construction::TStageInstruction { - Instruction() { - // The base `TStageInstruction` type is a superset of the actual instructions appearing in this - // stage. This call lets the stage filter out the ones that are not reused from raw IR. - Construction::hasInstruction(this) - } - - /** Gets a textual representation of this element. */ - final string toString() { result = this.getOpcode().toString() + ": " + this.getAst().toString() } - - /** - * Gets a string showing the result, opcode, and operands of the instruction, equivalent to what - * would be printed by PrintIR.ql. For example: - * - * `mu0_28(int) = Store r0_26, r0_27` - */ - final string getDumpString() { - result = - this.getResultString() + " = " + this.getOperationString() + " " + this.getOperandsString() - } - - private predicate shouldGenerateDumpStrings() { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(this.getEnclosingFunction()) - ) - } - - /** - * Gets a string describing the operation of this instruction. This includes - * the opcode and the immediate value, if any. For example: - * - * VariableAddress[x] - */ - final string getOperationString() { - this.shouldGenerateDumpStrings() and - if exists(this.getImmediateString()) - then - result = - this.getOperationPrefix() + this.getOpcode().toString() + "[" + this.getImmediateString() + - "]" - else result = this.getOperationPrefix() + this.getOpcode().toString() - } - - /** - * Gets a string describing the immediate value of this instruction, if any. - */ - string getImmediateString() { none() } - - private string getOperationPrefix() { - this.shouldGenerateDumpStrings() and - if this instanceof SideEffectInstruction then result = "^" else result = "" - } - - private string getResultPrefix() { - this.shouldGenerateDumpStrings() and - if this.getResultIRType() instanceof IRVoidType - then result = "v" - else - if this.hasMemoryResult() - then if this.isResultModeled() then result = "m" else result = "mu" - else result = "r" - } - - /** - * Gets the zero-based index of this instruction within its block. This is - * used by debugging and printing code only. - */ - int getDisplayIndexInBlock() { - this.shouldGenerateDumpStrings() and - exists(IRBlock block | - this = block.getInstruction(result) - or - this = - rank[-result - 1](PhiInstruction phiInstr | - phiInstr = block.getAPhiInstruction() - | - phiInstr order by phiInstr.getUniqueId() - ) - ) - } - - private int getLineRank() { - this.shouldGenerateDumpStrings() and - exists(IRFunction enclosing, Language::File file, int line | - this = - rank[result](Instruction instr | - instr = getAnInstructionAtLine(enclosing, file, line) - | - instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() - ) - ) - } - - /** - * Gets a human-readable string that uniquely identifies this instruction - * within the function. This string is used to refer to this instruction when - * printing IR dumps. - * - * Example: `r1_1` - */ - string getResultId() { - this.shouldGenerateDumpStrings() and - result = - this.getResultPrefix() + this.getAst().getLocation().getStartLine() + "_" + this.getLineRank() - } - - /** - * Gets a string describing the result of this instruction, suitable for - * display in IR dumps. This consists of the result ID plus the type of the - * result. - * - * Example: `r1_1(int*)` - */ - final string getResultString() { - this.shouldGenerateDumpStrings() and - result = this.getResultId() + "(" + this.getResultLanguageType().getDumpString() + ")" - } - - /** - * Gets a string describing the operands of this instruction, suitable for - * display in IR dumps. - * - * Example: `func:r3_4, this:r3_5` - */ - string getOperandsString() { - this.shouldGenerateDumpStrings() and - result = - concat(Operand operand | - operand = this.getAnOperand() - | - operand.getDumpString(), ", " order by operand.getDumpSortOrder() - ) - } - - /** - * Gets a string identifier for this function that is unique among all - * instructions in the same function. - * - * This is used for sorting IR output for tests, and is likely to be - * inefficient for any other use. - */ - final string getUniqueId() { result = Construction::getInstructionUniqueId(this) } - - /** - * INTERNAL: Do not use. - * - * Gets two sort keys for this instruction - used to order instructions for printing - * in test outputs. - */ - final predicate hasSortKeys(int key1, int key2) { - Construction::instructionHasSortKeys(this, key1, key2) - } - - /** - * Gets the basic block that contains this instruction. - */ - final IRBlock getBlock() { result.getAnInstruction() = this } - - /** - * Gets the function that contains this instruction. - */ - final Language::Declaration getEnclosingFunction() { - result = this.getEnclosingIRFunction().getFunction() - } - - /** - * Gets the IRFunction object that contains the IR for this instruction. - */ - final IRFunction getEnclosingIRFunction() { - result = Construction::getInstructionEnclosingIRFunction(this) - } - - /** - * Gets the AST that caused this instruction to be generated. - */ - final Language::AST getAst() { result = Construction::getInstructionAst(this) } - - /** - * Gets the location of the source code for this instruction. - */ - final Language::Location getLocation() { result = this.getAst().getLocation() } - - /** - * Gets the `Expr` whose result is computed by this instruction, if any. The `Expr` may be a - * conversion. - */ - final Language::Expr getConvertedResultExpression() { - result = Raw::getInstructionConvertedResultExpression(this) - } - - /** - * Gets the unconverted form of the `Expr` whose result is computed by this instruction, if any. - */ - final Language::Expr getUnconvertedResultExpression() { - result = Raw::getInstructionUnconvertedResultExpression(this) - } - - /** - * Gets the language-specific type of the result produced by this instruction. - * - * Most consumers of the IR should use `getResultIRType()` instead. `getResultIRType()` uses a - * less complex, language-neutral type system in which all semantically equivalent types share the - * same `IRType` instance. For example, in C++, four different `Instruction`s might have three - * different values for `getResultLanguageType()`: `unsigned int`, `char32_t`, and `wchar_t`, - * whereas all four instructions would have the same value for `getResultIRType()`, `uint4`. - */ - final Language::LanguageType getResultLanguageType() { - result = Construction::getInstructionResultType(this) - } - - /** - * Gets the type of the result produced by this instruction. If the instruction does not produce - * a result, its result type will be `IRVoidType`. - */ - final IRType getResultIRType() { result = Construction::getInstructionResultIRType(this) } - - /** - * Gets the type of the result produced by this instruction. If the - * instruction does not produce a result, its result type will be `VoidType`. - * - * If `isGLValue()` holds, then the result type of this instruction should be - * thought of as "pointer to `getResultType()`". - */ - final Language::Type getResultType() { - exists(Language::LanguageType resultType | - resultType = this.getResultLanguageType() and - ( - resultType.hasUnspecifiedType(result, _) - or - not resultType.hasUnspecifiedType(_, _) and result instanceof Language::UnknownType - ) - ) - } - - /** - * Holds if the result produced by this instruction is a glvalue. If this - * holds, the result of the instruction represents the address of a location, - * and the type of the location is given by `getResultType()`. If this does - * not hold, the result of the instruction represents a value whose type is - * given by `getResultType()`. - * - * For example, the statement `y = x;` generates the following IR: - * ``` - * r1_0(glval: int) = VariableAddress[x] - * r1_1(int) = Load r1_0, mu0_1 - * r1_2(glval: int) = VariableAddress[y] - * mu1_3(int) = Store r1_2, r1_1 - * ``` - * - * The result of each `VariableAddress` instruction is a glvalue of type - * `int`, representing the address of the corresponding integer variable. The - * result of the `Load` instruction is a prvalue of type `int`, representing - * the integer value loaded from variable `x`. - */ - final predicate isGLValue() { this.getResultLanguageType().hasType(_, true) } - - /** - * Gets the size of the result produced by this instruction, in bytes. If the - * result does not have a known constant size, this predicate does not hold. - * - * If `this.isGLValue()` holds for this instruction, the value of - * `getResultSize()` will always be the size of a pointer. - */ - final int getResultSize() { result = this.getResultLanguageType().getByteSize() } - - /** - * Gets the opcode that specifies the operation performed by this instruction. - */ - pragma[inline] - final Opcode getOpcode() { Construction::getInstructionOpcode(result, this) } - - /** - * Gets all direct uses of the result of this instruction. The result can be - * an `Operand` for which `isDefinitionInexact` holds. - */ - final Operand getAUse() { result.getAnyDef() = this } - - /** - * Gets all of this instruction's operands. - */ - final Operand getAnOperand() { result.getUse() = this } - - /** - * Holds if this instruction produces a memory result. - */ - final predicate hasMemoryResult() { exists(this.getResultMemoryAccess()) } - - /** - * Gets the kind of memory access performed by this instruction's result. - * Holds only for instructions with a memory result. - */ - pragma[inline] - final MemoryAccessKind getResultMemoryAccess() { - result = this.getOpcode().getWriteMemoryAccess() - } - - /** - * Holds if the memory access performed by this instruction's result will not always write to - * every bit in the memory location. This is most commonly used for memory accesses that may or - * may not actually occur depending on runtime state (for example, the write side effect of an - * output parameter that is not written to on all paths), or for accesses where the memory - * location is a conservative estimate of the memory that might actually be accessed at runtime - * (for example, the global side effects of a function call). - */ - pragma[inline] - final predicate hasResultMayMemoryAccess() { this.getOpcode().hasMayWriteMemoryAccess() } - - /** - * Gets the operand that holds the memory address to which this instruction stores its - * result, if any. For example, in `m3 = Store r1, r2`, the result of `getResultAddressOperand()` - * is `r1`. - */ - final AddressOperand getResultAddressOperand() { - this.getResultMemoryAccess().usesAddressOperand() and - result.getUse() = this - } - - /** - * Gets the instruction that holds the exact memory address to which this instruction stores its - * result, if any. For example, in `m3 = Store r1, r2`, the result of `getResultAddressOperand()` - * is the instruction that defines `r1`. - */ - final Instruction getResultAddress() { result = this.getResultAddressOperand().getDef() } - - /** - * Holds if the result of this instruction is precisely modeled in SSA. Always - * holds for a register result. For a memory result, a modeled result is - * connected to its actual uses. An unmodeled result has no uses. - * - * For example: - * ``` - * int x = 1; - * int *p = &x; - * int y = *p; - * ``` - * In non-aliased SSA, `x` will not be modeled because it has its address - * taken. In that case, `isResultModeled()` would not hold for the result of - * the `Store` to `x`. - */ - final predicate isResultModeled() { - // Register results are always in SSA form. - not this.hasMemoryResult() or - Construction::hasModeledMemoryResult(this) - } - - /** - * Holds if this is an instruction with a memory result that represents a - * conflation of more than one memory allocation. - * - * This happens in practice when dereferencing a pointer that cannot be - * tracked back to a single local allocation. Such memory is instead modeled - * as originating on the `AliasedDefinitionInstruction` at the entry of the - * function. - */ - final predicate isResultConflated() { Construction::hasConflatedMemoryResult(this) } - - /** - * Gets the successor of this instruction along the control flow edge - * specified by `kind`. - */ - final Instruction getSuccessor(EdgeKind kind) { - result = Construction::getInstructionSuccessor(this, kind) - } - - /** - * Gets the a _back-edge successor_ of this instruction along the control - * flow edge specified by `kind`. A back edge in the control-flow graph is - * intuitively the edge that goes back around a loop. If all back edges are - * removed from the control-flow graph, it becomes acyclic. - */ - final Instruction getBackEdgeSuccessor(EdgeKind kind) { - // We don't take these edges from - // `Construction::getInstructionBackEdgeSuccessor` since that relation has - // not been treated to remove any loops that might be left over due to - // flaws in the IR construction or back-edge detection. - exists(IRBlock block | - block = this.getBlock() and - this = block.getLastInstruction() and - result = block.getBackEdgeSuccessor(kind).getFirstInstruction() - ) - } - - /** - * Gets all direct successors of this instruction. - */ - final Instruction getASuccessor() { result = this.getSuccessor(_) } - - /** - * Gets a predecessor of this instruction such that the predecessor reaches - * this instruction along the control flow edge specified by `kind`. - */ - final Instruction getPredecessor(EdgeKind kind) { result.getSuccessor(kind) = this } - - /** - * Gets all direct predecessors of this instruction. - */ - final Instruction getAPredecessor() { result = this.getPredecessor(_) } -} - -/** - * An instruction that refers to a variable. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * variable. For example, it is used for `VariableAddress`, which returns the address of a specific - * variable, and `InitializeParameter`, which returns the value that was passed to the specified - * parameter by the caller. `VariableInstruction` is not used for `Load` or `Store` instructions - * that happen to load from or store to a particular variable; in those cases, the memory location - * being accessed is specified by the `AddressOperand` on the instruction, which may or may not be - * defined by the result of a `VariableAddress` instruction. - */ -class VariableInstruction extends Instruction { - IRVariable var; - - VariableInstruction() { var = Raw::getInstructionVariable(this) } - - override string getImmediateString() { result = var.toString() } - - /** - * Gets the variable that this instruction references. - */ - final IRVariable getIRVariable() { result = var } - - /** - * Gets the AST variable that this instruction's IR variable refers to, if one exists. - */ - final Language::Variable getAstVariable() { result = var.(IRUserVariable).getVariable() } -} - -/** - * An instruction that refers to a field of a class, struct, or union. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * field. For example, it is used for `FieldAddress`, which computes the address of a specific - * field on an object. `FieldInstruction` is not used for `Load` or `Store` instructions that happen - * to load from or store to a particular field; in those cases, the memory location being accessed - * is specified by the `AddressOperand` on the instruction, which may or may not be defined by the - * result of a `FieldAddress` instruction. - */ -class FieldInstruction extends Instruction { - Language::Field field; - - FieldInstruction() { field = Raw::getInstructionField(this) } - - final override string getImmediateString() { result = field.toString() } - - /** - * Gets the field that this instruction references. - */ - final Language::Field getField() { result = field } -} - -/** - * An instruction that refers to a function. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * function. For example, it is used for `FunctionAddress`, which returns the address of a specific - * function. `FunctionInstruction` is not used for `Call` instructions that happen to call a - * particular function; in that case, the function being called is specified by the - * `CallTargetOperand` on the instruction, which may or may not be defined by the result of a - * `FunctionAddress` instruction. - */ -class FunctionInstruction extends Instruction { - Language::Function funcSymbol; - - FunctionInstruction() { funcSymbol = Raw::getInstructionFunction(this) } - - final override string getImmediateString() { result = funcSymbol.toString() } - - /** - * Gets the function that this instruction references. - */ - final Language::Function getFunctionSymbol() { result = funcSymbol } -} - -/** - * An instruction whose result is a compile-time constant value. - */ -class ConstantValueInstruction extends Instruction { - string value; - - ConstantValueInstruction() { value = Raw::getInstructionConstantValue(this) } - - final override string getImmediateString() { result = value } - - /** - * Gets the constant value of this instruction's result. - */ - final string getValue() { result = value } -} - -/** - * An instruction that refers to an argument of a `Call` instruction. - * - * This instruction is used for side effects of a `Call` instruction that read or write memory - * pointed to by one of the arguments of the call. - */ -class IndexedInstruction extends Instruction { - int index; - - IndexedInstruction() { index = Raw::getInstructionIndex(this) } - - final override string getImmediateString() { result = index.toString() } - - /** - * Gets the zero-based index of the argument that this instruction references. - */ - final int getIndex() { result = index } -} - -/** - * An instruction representing the entry point to a function. - * - * Each `IRFunction` has exactly one `EnterFunction` instruction. Execution of the function begins - * at this instruction. This instruction has no predecessors. - */ -class EnterFunctionInstruction extends Instruction { - EnterFunctionInstruction() { this.getOpcode() instanceof Opcode::EnterFunction } -} - -/** - * An instruction that returns the address of a variable. - * - * This instruction returns the address of a local variable, parameter, static field, - * namespace-scope variable, or global variable. For the address of a non-static field of a class, - * struct, or union, see `FieldAddressInstruction`. - */ -class VariableAddressInstruction extends VariableInstruction { - VariableAddressInstruction() { this.getOpcode() instanceof Opcode::VariableAddress } -} - -/** - * An instruction that returns the address of a function. - * - * This instruction returns the address of a function, including non-member functions, static member - * functions, and non-static member functions. - * - * The result has an `IRFunctionAddress` type. - */ -class FunctionAddressInstruction extends FunctionInstruction { - FunctionAddressInstruction() { this.getOpcode() instanceof Opcode::FunctionAddress } -} - -/** - * An instruction that returns the address of a "virtual" delete function. - * - * This function, which does not actually exist in the source code, is used to - * delete objects of a class with a virtual destructor. In that case the deacllocation - * function is selected at runtime based on the dynamic type of the object. So this - * function dynamically dispatches to the correct deallocation function. - * It also should pass in the required extra arguments to the deallocation function - * which may differ dynamically depending on the type of the object. - */ -class VirtualDeleteFunctionAddressInstruction extends Instruction { - VirtualDeleteFunctionAddressInstruction() { - this.getOpcode() instanceof Opcode::VirtualDeleteFunctionAddress - } -} - -/** - * An instruction that initializes a parameter of the enclosing function with the value of the - * corresponding argument passed by the caller. - * - * Each parameter of a function will have exactly one `InitializeParameter` instruction that - * initializes that parameter. - */ -class InitializeParameterInstruction extends VariableInstruction { - InitializeParameterInstruction() { this.getOpcode() instanceof Opcode::InitializeParameter } - - /** - * Gets the parameter initialized by this instruction. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction initializes the parameter with index `index`, or - * if `index` is `-1` and this instruction initializes `this`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.getIRVariable() instanceof IRThisVariable - } -} - -/** - * An instruction that initializes all memory that existed before this function was called. - * - * This instruction provides a definition for memory that, because it was actually allocated and - * initialized elsewhere, would not otherwise have a definition in this function. - */ -class InitializeNonLocalInstruction extends Instruction { - InitializeNonLocalInstruction() { this.getOpcode() instanceof Opcode::InitializeNonLocal } -} - -/** - * An instruction that initializes the memory pointed to by a parameter of the enclosing function - * with the value of that memory on entry to the function. - */ -class InitializeIndirectionInstruction extends VariableInstruction { - InitializeIndirectionInstruction() { this.getOpcode() instanceof Opcode::InitializeIndirection } - - /** - * Gets the parameter initialized by this instruction. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction initializes the memory pointed to by the parameter with - * index `index`, or if `index` is `-1` and this instruction initializes the memory - * pointed to by `this`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.getIRVariable() instanceof IRThisVariable - } -} - -/** - * An instruction that initializes the `this` pointer parameter of the enclosing function. - */ -class InitializeThisInstruction extends Instruction { - InitializeThisInstruction() { this.getOpcode() instanceof Opcode::InitializeThis } -} - -/** - * An instruction that computes the address of a non-static field of an object. - */ -class FieldAddressInstruction extends FieldInstruction { - FieldAddressInstruction() { this.getOpcode() instanceof Opcode::FieldAddress } - - /** - * Gets the operand that provides the address of the object containing the field. - */ - final UnaryOperand getObjectAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the object containing the field. - */ - final Instruction getObjectAddress() { result = this.getObjectAddressOperand().getDef() } -} - -/** - * An instruction that computes the address of the first element of a managed array. - * - * This instruction is used for element access to C# arrays. - */ -class ElementsAddressInstruction extends UnaryInstruction { - ElementsAddressInstruction() { this.getOpcode() instanceof Opcode::ElementsAddress } - - /** - * Gets the operand that provides the address of the array object. - */ - final UnaryOperand getArrayObjectAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the array object. - */ - final Instruction getArrayObjectAddress() { - result = this.getArrayObjectAddressOperand().getDef() - } -} - -/** - * An instruction that produces a well-defined but unknown result and has - * unknown side effects, including side effects that are not conservatively - * modeled in the SSA graph. - * - * This type of instruction appears when there is an `ErrorExpr` in the AST, - * meaning that the extractor could not understand the expression and therefore - * produced a partial AST. Queries that give alerts when some action is _not_ - * taken may want to ignore any function that contains an `ErrorInstruction`. - */ -class ErrorInstruction extends Instruction { - ErrorInstruction() { this.getOpcode() instanceof Opcode::Error } -} - -/** - * An instruction that returns an uninitialized value. - * - * This instruction is used to provide an initial definition for a stack variable that does not have - * an initializer, or whose initializer only partially initializes the variable. - */ -class UninitializedInstruction extends VariableInstruction { - UninitializedInstruction() { this.getOpcode() instanceof Opcode::Uninitialized } - - /** - * Gets the variable that is uninitialized. - */ - final Language::Variable getLocalVariable() { result = var.(IRUserVariable).getVariable() } - - /** - * Gets the operand that provides the address of the location to which the - * uninitialized value will be stored. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the location to - * which the value will be stored, if an exact definition is available. - */ - final Instruction getDestinationAddress() { - result = this.getDestinationAddressOperand().getDef() - } -} - -/** - * An instruction that has no effect. - * - * This instruction is typically inserted to ensure that a particular AST is associated with at - * least one instruction, even when the AST has no semantic effect. - */ -class NoOpInstruction extends Instruction { - NoOpInstruction() { this.getOpcode() instanceof Opcode::NoOp } -} - -/** - * An instruction that returns control to the caller of the function. - * - * This instruction represents the normal (non-exception) return from a function, either from an - * explicit `return` statement or from control flow reaching the end of the function's body. - * - * Each function has exactly one `ReturnInstruction`. Each `return` statement in a function is - * represented as an initialization of the temporary variable that holds the return value, with - * control then flowing to the common `ReturnInstruction` for that function. Exception: A function - * that never returns will not have a `ReturnInstruction`. - * - * The `ReturnInstruction` for a function will have a control-flow successor edge to a block - * containing the `ExitFunction` instruction for that function. - * - * There are two different return instructions: `ReturnValueInstruction`, for returning a value from - * a non-`void`-returning function, and `ReturnVoidInstruction`, for returning from a - * `void`-returning function. - */ -class ReturnInstruction extends Instruction { - ReturnInstruction() { this.getOpcode() instanceof ReturnOpcode } -} - -/** - * An instruction that returns control to the caller of the function, without returning a value. - */ -class ReturnVoidInstruction extends ReturnInstruction { - ReturnVoidInstruction() { this.getOpcode() instanceof Opcode::ReturnVoid } -} - -/** - * An instruction that returns control to the caller of the function, including a return value. - */ -class ReturnValueInstruction extends ReturnInstruction { - ReturnValueInstruction() { this.getOpcode() instanceof Opcode::ReturnValue } - - /** - * Gets the operand that provides the value being returned by the function. - */ - final LoadOperand getReturnValueOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that provides the address of the value being returned by the function. - */ - final AddressOperand getReturnAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value being returned by the function, if an - * exact definition is available. - */ - final Instruction getReturnValue() { result = this.getReturnValueOperand().getDef() } - - /** - * Gets the instruction whose result provides the address of the value being returned by the function. - */ - final Instruction getReturnAddress() { result = this.getReturnAddressOperand().getDef() } -} - -/** - * An instruction that represents the use of the value pointed to by a parameter of the function - * after the function returns control to its caller. - * - * This instruction does not itself return control to the caller. It merely represents the potential - * for a caller to use the memory pointed to by the parameter sometime after the call returns. This - * is the counterpart to the `InitializeIndirection` instruction, which represents the possibility - * that the caller initialized the memory pointed to by the parameter before the call. - */ -class ReturnIndirectionInstruction extends VariableInstruction { - ReturnIndirectionInstruction() { this.getOpcode() instanceof Opcode::ReturnIndirection } - - /** - * Gets the operand that provides the value of the pointed-to memory. - */ - final SideEffectOperand getSideEffectOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value of the pointed-to memory, if an exact - * definition is available. - */ - final Instruction getSideEffect() { result = this.getSideEffectOperand().getDef() } - - /** - * Gets the operand that provides the address of the pointed-to memory. - */ - final AddressOperand getSourceAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the pointed-to memory. - */ - final Instruction getSourceAddress() { result = this.getSourceAddressOperand().getDef() } - - /** - * Gets the parameter for which this instruction reads the final pointed-to value within the - * function. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction is the return indirection for `this`. - */ - final predicate isThisIndirection() { var instanceof IRThisVariable } - - /** - * Holds if this instruction is the return indirection for the parameter with index `index`, or - * if this instruction is the return indirection for `this` and `index` is `-1`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.isThisIndirection() - } -} - -/** - * An instruction that returns a copy of its operand. - * - * There are several different copy instructions, depending on the source and destination of the - * copy operation: - * - `CopyValueInstruction` - Copies a register operand to a register result. - * - `LoadInstruction` - Copies a memory operand to a register result. - * - `StoreInstruction` - Copies a register operand to a memory result. - */ -class CopyInstruction extends Instruction { - CopyInstruction() { this.getOpcode() instanceof CopyOpcode } - - /** - * Gets the operand that provides the input value of the copy. - */ - Operand getSourceValueOperand() { none() } - - /** - * Gets the instruction whose result provides the input value of the copy, if an exact definition - * is available. - */ - final Instruction getSourceValue() { result = this.getSourceValueOperand().getDef() } -} - -/** - * An instruction that returns a register result containing a copy of its register operand. - */ -class CopyValueInstruction extends CopyInstruction, UnaryInstruction { - CopyValueInstruction() { this.getOpcode() instanceof Opcode::CopyValue } - - final override UnaryOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * Gets a string describing the location pointed to by the specified address operand. - */ -private string getAddressOperandDescription(AddressOperand operand) { - result = operand.getDef().(VariableAddressInstruction).getIRVariable().toString() - or - not operand.getDef() instanceof VariableAddressInstruction and - result = "?" -} - -/** - * An instruction that returns a register result containing a copy of its memory operand. - */ -class LoadInstruction extends CopyInstruction { - LoadInstruction() { this.getOpcode() instanceof Opcode::Load } - - final override string getImmediateString() { - result = getAddressOperandDescription(this.getSourceAddressOperand()) - } - - /** - * Gets the operand that provides the address of the value being loaded. - */ - final AddressOperand getSourceAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the value being loaded. - */ - final Instruction getSourceAddress() { result = this.getSourceAddressOperand().getDef() } - - final override LoadOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * An instruction that returns a memory result containing a copy of its register operand. - */ -class StoreInstruction extends CopyInstruction { - StoreInstruction() { this.getOpcode() instanceof Opcode::Store } - - final override string getImmediateString() { - result = getAddressOperandDescription(this.getDestinationAddressOperand()) - } - - /** - * Gets the operand that provides the address of the location to which the value will be stored. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the location to which the value will - * be stored, if an exact definition is available. - */ - final Instruction getDestinationAddress() { - result = this.getDestinationAddressOperand().getDef() - } - - final override StoreValueOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * An instruction that branches to one of two successor instructions based on the value of a Boolean - * operand. - */ -class ConditionalBranchInstruction extends Instruction { - ConditionalBranchInstruction() { this.getOpcode() instanceof Opcode::ConditionalBranch } - - /** - * Gets the operand that provides the Boolean condition controlling the branch. - */ - final ConditionOperand getConditionOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the Boolean condition controlling the branch. - */ - final Instruction getCondition() { result = this.getConditionOperand().getDef() } - - /** - * Gets the instruction to which control will flow if the condition is true. - */ - final Instruction getTrueSuccessor() { result = this.getSuccessor(EdgeKind::trueEdge()) } - - /** - * Gets the instruction to which control will flow if the condition is false. - */ - final Instruction getFalseSuccessor() { result = this.getSuccessor(EdgeKind::falseEdge()) } -} - -/** - * An instruction representing the exit point of a function. - * - * Each `IRFunction` has exactly one `ExitFunction` instruction, unless the function neither returns - * nor throws an exception. Control flows to the `ExitFunction` instruction from both normal returns - * (`ReturnVoid`, `ReturnValue`) and propagated exceptions (`Unwind`). This instruction has no - * successors. - */ -class ExitFunctionInstruction extends Instruction { - ExitFunctionInstruction() { this.getOpcode() instanceof Opcode::ExitFunction } -} - -/** - * An instruction whose result is a constant value. - */ -class ConstantInstruction extends ConstantValueInstruction { - ConstantInstruction() { this.getOpcode() instanceof Opcode::Constant } -} - -/** - * An instruction whose result is a constant value of integer or Boolean type. - */ -class IntegerConstantInstruction extends ConstantInstruction { - IntegerConstantInstruction() { - exists(IRType resultType | resultType = this.getResultIRType() | - resultType instanceof IRIntegerType or resultType instanceof IRBooleanType - ) - } -} - -/** - * An instruction whose result is a constant value of floating-point type. - */ -class FloatConstantInstruction extends ConstantInstruction { - FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType } -} - -/** - * An instruction whose result is a constant value of a pointer type. - */ -class PointerConstantInstruction extends ConstantInstruction { - PointerConstantInstruction() { - exists(IRType resultType | resultType = this.getResultIRType() | - resultType instanceof IRAddressType or resultType instanceof IRFunctionAddressType - ) - } -} - -/** - * An instruction whose result is the address of a string literal. - */ -class StringConstantInstruction extends VariableInstruction { - override IRStringLiteral var; - - final override string getImmediateString() { - result = Language::getStringLiteralText(this.getValue()) - } - - /** - * Gets the string literal whose address is returned by this instruction. - */ - final Language::StringLiteral getValue() { result = var.getLiteral() } -} - -/** - * An instruction whose result is computed from two operands. - */ -class BinaryInstruction extends Instruction { - BinaryInstruction() { this.getOpcode() instanceof BinaryOpcode } - - /** - * Gets the left operand of this binary instruction. - */ - final LeftOperand getLeftOperand() { result = this.getAnOperand() } - - /** - * Gets the right operand of this binary instruction. - */ - final RightOperand getRightOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value of the left operand of this binary - * instruction. - */ - final Instruction getLeft() { result = this.getLeftOperand().getDef() } - - /** - * Gets the instruction whose result provides the value of the right operand of this binary - * instruction. - */ - final Instruction getRight() { result = this.getRightOperand().getDef() } - - /** - * Holds if this instruction's operands are `op1` and `op2`, in either order. - */ - final predicate hasOperands(Operand op1, Operand op2) { - op1 = this.getLeftOperand() and op2 = this.getRightOperand() - or - op1 = this.getRightOperand() and op2 = this.getLeftOperand() - } - - /** - * Gets the instruction whose result provides the value of the left or right - * operand of this binary instruction. - */ - Instruction getAnInput() { result = this.getLeft() or result = this.getRight() } -} - -/** - * An instruction that computes the result of an arithmetic operation. - */ -class ArithmeticInstruction extends Instruction { - ArithmeticInstruction() { this.getOpcode() instanceof ArithmeticOpcode } -} - -/** - * An instruction that performs an arithmetic operation on two numeric operands. - */ -class BinaryArithmeticInstruction extends ArithmeticInstruction, BinaryInstruction { } - -/** - * An instruction whose result is computed by performing an arithmetic operation on a single - * numeric operand. - */ -class UnaryArithmeticInstruction extends ArithmeticInstruction, UnaryInstruction { } - -/** - * An instruction that computes the sum of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point addition is - * performed according to IEEE-754. - */ -class AddInstruction extends BinaryArithmeticInstruction { - AddInstruction() { this.getOpcode() instanceof Opcode::Add } -} - -/** - * An instruction that computes the difference of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point subtraction is performed - * according to IEEE-754. - */ -class SubInstruction extends BinaryArithmeticInstruction { - SubInstruction() { this.getOpcode() instanceof Opcode::Sub } -} - -/** - * An instruction that computes the product of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point multiplication is - * performed according to IEEE-754. - */ -class MulInstruction extends BinaryArithmeticInstruction { - MulInstruction() { this.getOpcode() instanceof Opcode::Mul } -} - -/** - * An instruction that computes the quotient of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * division by zero or integer overflow is undefined. Floating-point division is performed according - * to IEEE-754. - */ -class DivInstruction extends BinaryArithmeticInstruction { - DivInstruction() { this.getOpcode() instanceof Opcode::Div } -} - -/** - * An instruction that computes the remainder of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. The result of - * division by zero or integer overflow is undefined. - */ -class RemInstruction extends BinaryArithmeticInstruction { - RemInstruction() { this.getOpcode() instanceof Opcode::Rem } -} - -/** - * An instruction that negates a single numeric operand. - * - * The operand must have a numeric type, which will also be the result type. The result of integer - * negation uses two's complement, and is computed modulo 2^n. The result of floating-point negation - * is performed according to IEEE-754. - */ -class NegateInstruction extends UnaryArithmeticInstruction { - NegateInstruction() { this.getOpcode() instanceof Opcode::Negate } -} - -/** - * An instruction that computes the result of a bitwise operation. - */ -class BitwiseInstruction extends Instruction { - BitwiseInstruction() { this.getOpcode() instanceof BitwiseOpcode } -} - -/** - * An instruction that performs a bitwise operation on two integer operands. - */ -class BinaryBitwiseInstruction extends BitwiseInstruction, BinaryInstruction { } - -/** - * An instruction that performs a bitwise operation on a single integer operand. - */ -class UnaryBitwiseInstruction extends BitwiseInstruction, UnaryInstruction { } - -/** - * An instruction that computes the bitwise "and" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitAndInstruction extends BinaryBitwiseInstruction { - BitAndInstruction() { this.getOpcode() instanceof Opcode::BitAnd } -} - -/** - * An instruction that computes the bitwise "or" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitOrInstruction extends BinaryBitwiseInstruction { - BitOrInstruction() { this.getOpcode() instanceof Opcode::BitOr } -} - -/** - * An instruction that computes the bitwise "xor" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitXorInstruction extends BinaryBitwiseInstruction { - BitXorInstruction() { this.getOpcode() instanceof Opcode::BitXor } -} - -/** - * An instruction that shifts its left operand to the left by the number of bits specified by its - * right operand. - * - * Both operands must have an integer type. The result has the same type as the left operand. The - * rightmost bits are zero-filled. - */ -class ShiftLeftInstruction extends BinaryBitwiseInstruction { - ShiftLeftInstruction() { this.getOpcode() instanceof Opcode::ShiftLeft } -} - -/** - * An instruction that shifts its left operand to the right by the number of bits specified by its - * right operand. - * - * Both operands must have an integer type. The result has the same type as the left operand. If the - * left operand has an unsigned integer type, the leftmost bits are zero-filled. If the left operand - * has a signed integer type, the leftmost bits are filled by duplicating the most significant bit - * of the left operand. - */ -class ShiftRightInstruction extends BinaryBitwiseInstruction { - ShiftRightInstruction() { this.getOpcode() instanceof Opcode::ShiftRight } -} - -/** - * An instruction that shifts its left operand to the right by the number of bits specified by its - * right operand. - * - * Both operands must have an integer type. The result has the same type as the left operand. - * The leftmost bits are zero-filled. - */ -class UnsignedShiftRightInstruction extends BinaryBitwiseInstruction { - UnsignedShiftRightInstruction() { this.getOpcode() instanceof Opcode::UnsignedShiftRight } -} - -/** - * An instruction that performs a binary arithmetic operation involving at least one pointer - * operand. - */ -class PointerArithmeticInstruction extends BinaryInstruction { - int elementSize; - - PointerArithmeticInstruction() { - this.getOpcode() instanceof PointerArithmeticOpcode and - elementSize = Raw::getInstructionElementSize(this) - } - - final override string getImmediateString() { result = elementSize.toString() } - - /** - * Gets the size of the elements pointed to by the pointer operands, in bytes. - * - * When adding an integer offset to a pointer (`PointerAddInstruction`) or subtracting an integer - * offset from a pointer (`PointerSubInstruction`), the integer offset is multiplied by the - * element size to compute the actual number of bytes added to or subtracted from the pointer - * address. When computing the integer difference between two pointers (`PointerDiffInstruction`), - * the result is computed by computing the difference between the two pointer byte addresses, then - * dividing that byte count by the element size. - */ - final int getElementSize() { result = elementSize } -} - -/** - * An instruction that adds or subtracts an integer offset from a pointer. - */ -class PointerOffsetInstruction extends PointerArithmeticInstruction { - PointerOffsetInstruction() { this.getOpcode() instanceof PointerOffsetOpcode } -} - -/** - * An instruction that adds an integer offset to a pointer. - * - * The result is the byte address computed by adding the value of the right (integer) operand, - * multiplied by the element size, to the value of the left (pointer) operand. The result of pointer - * overflow is undefined. - */ -class PointerAddInstruction extends PointerOffsetInstruction { - PointerAddInstruction() { this.getOpcode() instanceof Opcode::PointerAdd } -} - -/** - * An instruction that subtracts an integer offset from a pointer. - * - * The result is the byte address computed by subtracting the value of the right (integer) operand, - * multiplied by the element size, from the value of the left (pointer) operand. The result of - * pointer underflow is undefined. - */ -class PointerSubInstruction extends PointerOffsetInstruction { - PointerSubInstruction() { this.getOpcode() instanceof Opcode::PointerSub } -} - -/** - * An instruction that computes the difference between two pointers. - * - * Both operands must have the same pointer type. The result must have an integer type whose size is - * the same as that of the pointer operands. The result is computed by subtracting the byte address - * in the right operand from the byte address in the left operand, and dividing by the element size. - * If the difference in byte addresses is not divisible by the element size, the result is - * undefined. - */ -class PointerDiffInstruction extends PointerArithmeticInstruction { - PointerDiffInstruction() { this.getOpcode() instanceof Opcode::PointerDiff } -} - -/** - * An instruction whose result is computed from a single operand. - */ -class UnaryInstruction extends Instruction { - UnaryInstruction() { this.getOpcode() instanceof UnaryOpcode } - - /** - * Gets the sole operand of this instruction. - */ - final UnaryOperand getUnaryOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the sole operand of this instruction. - */ - final Instruction getUnary() { result = this.getUnaryOperand().getDef() } -} - -/** - * An instruction that converts the value of its operand to a value of a different type. - */ -class ConvertInstruction extends UnaryInstruction { - ConvertInstruction() { this.getOpcode() instanceof Opcode::Convert } -} - -/** - * An instruction that converts the address of a polymorphic object to the address of a different - * subobject of the same polymorphic object, returning a null address if the dynamic type of the - * object is not compatible with the result type. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent a C++ `dynamic_cast<>` to a pointer type, or a C# `is` or - * `as` expression. - */ -class CheckedConvertOrNullInstruction extends UnaryInstruction { - CheckedConvertOrNullInstruction() { this.getOpcode() instanceof Opcode::CheckedConvertOrNull } -} - -/** - * An instruction that converts the address of a polymorphic object to the address of a different - * subobject of the same polymorphic object, throwing an exception if the dynamic type of the object - * is not compatible with the result type. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent a C++ `dynamic_cast<>` to a reference type, or a C# cast - * expression. - */ -class CheckedConvertOrThrowInstruction extends UnaryInstruction { - CheckedConvertOrThrowInstruction() { this.getOpcode() instanceof Opcode::CheckedConvertOrThrow } -} - -/** - * An instruction that returns the address of the complete object that contains the subobject - * pointed to by its operand. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent `dynamic_cast` in C++, which returns the pointer to - * the most-derived object. - */ -class CompleteObjectAddressInstruction extends UnaryInstruction { - CompleteObjectAddressInstruction() { this.getOpcode() instanceof Opcode::CompleteObjectAddress } -} - -/** - * An instruction that converts the address of an object to the address of a different subobject of - * the same object, without any type checking at runtime. - */ -class InheritanceConversionInstruction extends UnaryInstruction { - Language::Class baseClass; - Language::Class derivedClass; - - InheritanceConversionInstruction() { - Raw::getInstructionInheritance(this, baseClass, derivedClass) - } - - final override string getImmediateString() { - result = derivedClass.toString() + " : " + baseClass.toString() - } - - /** - * Gets the `ClassDerivation` for the inheritance relationship between - * the base and derived classes. This predicate does not hold if the - * conversion is to an indirect virtual base class. - */ - final Language::ClassDerivation getDerivation() { - result.getBaseClass() = baseClass and result.getDerivedClass() = derivedClass - } - - /** - * Gets the base class of the conversion. This will be either a direct - * base class of the derived class, or a virtual base class of the - * derived class. - */ - final Language::Class getBaseClass() { result = baseClass } - - /** - * Gets the derived class of the conversion. - */ - final Language::Class getDerivedClass() { result = derivedClass } -} - -/** - * An instruction that converts from the address of a derived class to the address of a base class. - */ -class ConvertToBaseInstruction extends InheritanceConversionInstruction { - ConvertToBaseInstruction() { this.getOpcode() instanceof ConvertToBaseOpcode } -} - -/** - * An instruction that converts from the address of a derived class to the address of a direct - * non-virtual base class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToNonVirtualBaseInstruction extends ConvertToBaseInstruction { - ConvertToNonVirtualBaseInstruction() { - this.getOpcode() instanceof Opcode::ConvertToNonVirtualBase - } -} - -/** - * An instruction that converts from the address of a derived class to the address of a virtual base - * class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToVirtualBaseInstruction extends ConvertToBaseInstruction { - ConvertToVirtualBaseInstruction() { this.getOpcode() instanceof Opcode::ConvertToVirtualBase } -} - -/** - * An instruction that converts from the address of a base class to the address of a direct - * non-virtual derived class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToDerivedInstruction extends InheritanceConversionInstruction { - ConvertToDerivedInstruction() { this.getOpcode() instanceof Opcode::ConvertToDerived } -} - -/** - * An instruction that computes the bitwise complement of its operand. - * - * The operand must have an integer type, which will also be the result type. - */ -class BitComplementInstruction extends UnaryBitwiseInstruction { - BitComplementInstruction() { this.getOpcode() instanceof Opcode::BitComplement } -} - -/** - * An instruction that computes the logical complement of its operand. - * - * The operand must have a Boolean type, which will also be the result type. - */ -class LogicalNotInstruction extends UnaryInstruction { - LogicalNotInstruction() { this.getOpcode() instanceof Opcode::LogicalNot } -} - -/** - * An instruction that compares two numeric operands. - */ -class CompareInstruction extends BinaryInstruction { - CompareInstruction() { this.getOpcode() instanceof CompareOpcode } -} - -/** - * An instruction that returns a `true` result if its operands are equal. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if `left == right`, and `false` if `left != right` or the two operands are - * unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareEQInstruction extends CompareInstruction { - CompareEQInstruction() { this.getOpcode() instanceof Opcode::CompareEQ } -} - -/** - * An instruction that returns a `true` result if its operands are not equal. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if `left != right` or if the two operands are unordered, and `false` if - * `left == right`. Floating-point comparison is performed according to IEEE-754. - */ -class CompareNEInstruction extends CompareInstruction { - CompareNEInstruction() { this.getOpcode() instanceof Opcode::CompareNE } -} - -/** - * An instruction that does a relative comparison of two values, such as `<` or `>=`. - */ -class RelationalInstruction extends CompareInstruction { - RelationalInstruction() { this.getOpcode() instanceof RelationalOpcode } - - /** - * Gets the operand on the "greater" (or "greater-or-equal") side - * of this relational instruction, that is, the side that is larger - * if the overall instruction evaluates to `true`; for example on - * `x <= 20` this is the `20`, and on `y > 0` it is `y`. - */ - Instruction getGreater() { none() } - - /** - * Gets the operand on the "lesser" (or "lesser-or-equal") side - * of this relational instruction, that is, the side that is smaller - * if the overall instruction evaluates to `true`; for example on - * `x <= 20` this is `x`, and on `y > 0` it is the `0`. - */ - Instruction getLesser() { none() } - - /** - * Holds if this relational instruction is strict (is not an "or-equal" instruction). - */ - predicate isStrict() { none() } -} - -/** - * An instruction that returns a `true` result if its left operand is less than its right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left < right`, and `false` if `left >= right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareLTInstruction extends RelationalInstruction { - CompareLTInstruction() { this.getOpcode() instanceof Opcode::CompareLT } - - override Instruction getLesser() { result = this.getLeft() } - - override Instruction getGreater() { result = this.getRight() } - - override predicate isStrict() { any() } -} - -/** - * An instruction that returns a `true` result if its left operand is greater than its right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left > right`, and `false` if `left <= right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareGTInstruction extends RelationalInstruction { - CompareGTInstruction() { this.getOpcode() instanceof Opcode::CompareGT } - - override Instruction getLesser() { result = this.getRight() } - - override Instruction getGreater() { result = this.getLeft() } - - override predicate isStrict() { any() } -} - -/** - * An instruction that returns a `true` result if its left operand is less than or equal to its - * right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left <= right`, and `false` if `left > right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareLEInstruction extends RelationalInstruction { - CompareLEInstruction() { this.getOpcode() instanceof Opcode::CompareLE } - - override Instruction getLesser() { result = this.getLeft() } - - override Instruction getGreater() { result = this.getRight() } - - override predicate isStrict() { none() } -} - -/** - * An instruction that returns a `true` result if its left operand is greater than or equal to its - * right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left >= right`, and `false` if `left < right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareGEInstruction extends RelationalInstruction { - CompareGEInstruction() { this.getOpcode() instanceof Opcode::CompareGE } - - override Instruction getLesser() { result = this.getRight() } - - override Instruction getGreater() { result = this.getLeft() } - - override predicate isStrict() { none() } -} - -/** - * An instruction that represents a three-way comparison operator. - */ -class SpaceshipInstruction extends BinaryInstruction { - SpaceshipInstruction() { this.getOpcode() instanceof Opcode::Spaceship } -} - -/** - * An instruction that branches to one of multiple successor instructions based on the value of an - * integer operand. - * - * This instruction will have zero or more successors whose edge kind is `CaseEdge`, each - * representing the branch that will be taken if the controlling expression is within the range - * specified for that case edge. The range of a case edge must be disjoint from the range of each - * other case edge. - * - * The instruction may optionally have a successor edge whose edge kind is `DefaultEdge`, - * representing the branch that will be taken if the controlling expression is not within the range - * of any case edge. - */ -class SwitchInstruction extends Instruction { - SwitchInstruction() { this.getOpcode() instanceof Opcode::Switch } - - /** Gets the operand that provides the integer value controlling the switch. */ - final ConditionOperand getExpressionOperand() { result = this.getAnOperand() } - - /** Gets the instruction whose result provides the integer value controlling the switch. */ - final Instruction getExpression() { result = this.getExpressionOperand().getDef() } - - /** Gets the successor instructions along the case edges of the switch. */ - final Instruction getACaseSuccessor() { exists(CaseEdge edge | result = this.getSuccessor(edge)) } - - /** Gets the successor instruction along the default edge of the switch, if any. */ - final Instruction getDefaultSuccessor() { result = this.getSuccessor(EdgeKind::defaultEdge()) } -} - -/** - * An instruction that calls a function. - */ -class CallInstruction extends Instruction { - CallInstruction() { this.getOpcode() instanceof Opcode::Call } - - final override string getImmediateString() { - result = this.getStaticCallTarget().toString() - or - not exists(this.getStaticCallTarget()) and result = "?" - } - - /** - * Gets the operand the specifies the target function of the call. - */ - final CallTargetOperand getCallTargetOperand() { result = this.getAnOperand() } - - /** - * Gets the `Instruction` that computes the target function of the call. This is usually a - * `FunctionAddress` instruction, but can also be an arbitrary instruction that produces a - * function pointer. - */ - final Instruction getCallTarget() { result = this.getCallTargetOperand().getDef() } - - /** - * Gets all of the argument operands of the call, including the `this` pointer, if any. - */ - final ArgumentOperand getAnArgumentOperand() { result = this.getAnOperand() } - - /** - * Gets the `Function` that the call targets, if this is statically known. - */ - final Language::Function getStaticCallTarget() { - result = this.getCallTarget().(FunctionAddressInstruction).getFunctionSymbol() - } - - /** - * Gets all of the arguments of the call, including the `this` pointer, if any. - */ - final Instruction getAnArgument() { result = this.getAnArgumentOperand().getDef() } - - /** - * Gets the `this` pointer argument operand of the call, if any. - */ - final ThisArgumentOperand getThisArgumentOperand() { result = this.getAnOperand() } - - /** - * Gets the `this` pointer argument of the call, if any. - */ - final Instruction getThisArgument() { result = this.getThisArgumentOperand().getDef() } - - /** - * Gets the argument operand at the specified index. - */ - pragma[noinline] - final PositionalArgumentOperand getPositionalArgumentOperand(int index) { - result = this.getAnOperand() and - result.getIndex() = index - } - - /** - * Gets the argument at the specified index. - */ - pragma[noinline] - final Instruction getPositionalArgument(int index) { - result = this.getPositionalArgumentOperand(index).getDef() - } - - /** - * Gets the argument operand at the specified index, or `this` if `index` is `-1`. - */ - pragma[noinline] - final ArgumentOperand getArgumentOperand(int index) { - index >= 0 and result = this.getPositionalArgumentOperand(index) - or - index = -1 and result = this.getThisArgumentOperand() - } - - /** - * Gets the argument at the specified index, or `this` if `index` is `-1`. - */ - pragma[noinline] - final Instruction getArgument(int index) { result = this.getArgumentOperand(index).getDef() } - - /** - * Gets the number of arguments of the call, including the `this` pointer, if any. - */ - final int getNumberOfArguments() { result = count(this.getAnArgumentOperand()) } - - /** - * Holds if the result is a side effect for the argument at the specified index, or `this` if - * `index` is `-1`. - * - * This helper predicate makes it easy to join on both of these columns at once, avoiding - * pathological join orders in case the argument index should get joined first. - */ - pragma[noinline] - final SideEffectInstruction getAParameterSideEffect(int index) { - this = result.getPrimaryInstruction() and - index = result.(IndexedInstruction).getIndex() - } -} - -/** - * An instruction representing a side effect of a function call. - */ -class SideEffectInstruction extends Instruction { - SideEffectInstruction() { this.getOpcode() instanceof SideEffectOpcode } - - /** - * Gets the instruction whose execution causes this side effect. - */ - final Instruction getPrimaryInstruction() { - result = Construction::getPrimaryInstructionForSideEffect(this) - } -} - -/** - * An instruction representing the side effect of a function call on any memory that might be - * accessed by that call. - */ -class CallSideEffectInstruction extends SideEffectInstruction { - CallSideEffectInstruction() { this.getOpcode() instanceof Opcode::CallSideEffect } -} - -/** - * An instruction representing the side effect of a function call on any memory - * that might be read by that call. - * - * This instruction is emitted instead of `CallSideEffectInstruction` when it is certain that the - * call target cannot write to escaped memory. - */ -class CallReadSideEffectInstruction extends SideEffectInstruction { - CallReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::CallReadSideEffect } -} - -/** - * An instruction representing a read side effect of a function call on a - * specific parameter. - */ -class ReadSideEffectInstruction extends SideEffectInstruction, IndexedInstruction { - ReadSideEffectInstruction() { this.getOpcode() instanceof ReadSideEffectOpcode } - - /** Gets the operand for the value that will be read from this instruction, if known. */ - final SideEffectOperand getSideEffectOperand() { result = this.getAnOperand() } - - /** Gets the value that will be read from this instruction, if known. */ - final Instruction getSideEffect() { result = this.getSideEffectOperand().getDef() } - - /** Gets the operand for the address from which this instruction may read. */ - final AddressOperand getArgumentOperand() { result = this.getAnOperand() } - - /** Gets the address from which this instruction may read. */ - final Instruction getArgumentDef() { result = this.getArgumentOperand().getDef() } -} - -/** - * An instruction representing the read of an indirect parameter within a function call. - */ -class IndirectReadSideEffectInstruction extends ReadSideEffectInstruction { - IndirectReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::IndirectReadSideEffect } -} - -/** - * An instruction representing the read of an indirect buffer parameter within a function call. - */ -class BufferReadSideEffectInstruction extends ReadSideEffectInstruction { - BufferReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::BufferReadSideEffect } -} - -/** - * An instruction representing the read of an indirect buffer parameter within a function call. - */ -class SizedBufferReadSideEffectInstruction extends ReadSideEffectInstruction { - SizedBufferReadSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferReadSideEffect - } - - /** - * Gets the operand that holds the number of bytes read from the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes read from the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing a write side effect of a function call on a - * specific parameter. - */ -class WriteSideEffectInstruction extends SideEffectInstruction, IndexedInstruction { - WriteSideEffectInstruction() { this.getOpcode() instanceof WriteSideEffectOpcode } - - /** - * Get the operand that holds the address of the memory to be written. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the memory to be written. - */ - Instruction getDestinationAddress() { result = this.getDestinationAddressOperand().getDef() } -} - -/** - * An instruction representing the write of an indirect parameter within a function call. - */ -class IndirectMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - IndirectMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::IndirectMustWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. The - * entire buffer is overwritten. - */ -class BufferMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - BufferMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::BufferMustWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. The - * entire buffer is overwritten. - */ -class SizedBufferMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - SizedBufferMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferMustWriteSideEffect - } - - /** - * Gets the operand that holds the number of bytes written to the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes written to the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing the potential write of an indirect parameter within a function call. - * - * Unlike `IndirectWriteSideEffectInstruction`, the location might not be completely overwritten. - * written. - */ -class IndirectMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - IndirectMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::IndirectMayWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. - * - * Unlike `BufferWriteSideEffectInstruction`, the buffer might not be completely overwritten. - */ -class BufferMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - BufferMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::BufferMayWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. - * - * Unlike `BufferWriteSideEffectInstruction`, the buffer might not be completely overwritten. - */ -class SizedBufferMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - SizedBufferMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferMayWriteSideEffect - } - - /** - * Gets the operand that holds the number of bytes written to the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes written to the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing the initial value of newly allocated memory, such as the result of a - * call to `malloc`. - */ -class InitializeDynamicAllocationInstruction extends SideEffectInstruction { - InitializeDynamicAllocationInstruction() { - this.getOpcode() instanceof Opcode::InitializeDynamicAllocation - } - - /** - * Gets the operand that represents the address of the allocation this instruction is initializing. - */ - final AddressOperand getAllocationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the address for the allocation this instruction is initializing. - */ - final Instruction getAllocationAddress() { result = this.getAllocationAddressOperand().getDef() } -} - -/** - * An instruction representing a GNU or MSVC inline assembly statement. - */ -class InlineAsmInstruction extends Instruction { - InlineAsmInstruction() { this.getOpcode() instanceof Opcode::InlineAsm } -} - -/** - * An instruction that throws an exception. - */ -class ThrowInstruction extends Instruction { - ThrowInstruction() { this.getOpcode() instanceof ThrowOpcode } -} - -/** - * An instruction that throws a new exception. - */ -class ThrowValueInstruction extends ThrowInstruction { - ThrowValueInstruction() { this.getOpcode() instanceof Opcode::ThrowValue } - - /** - * Gets the address operand of the exception thrown by this instruction. - */ - final AddressOperand getExceptionAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the address of the exception thrown by this instruction. - */ - final Instruction getExceptionAddress() { result = this.getExceptionAddressOperand().getDef() } - - /** - * Gets the operand for the exception thrown by this instruction. - */ - final LoadOperand getExceptionOperand() { result = this.getAnOperand() } - - /** - * Gets the exception thrown by this instruction. - */ - final Instruction getException() { result = this.getExceptionOperand().getDef() } -} - -/** - * An instruction that re-throws the current exception. - */ -class ReThrowInstruction extends ThrowInstruction { - ReThrowInstruction() { this.getOpcode() instanceof Opcode::ReThrow } -} - -/** - * An instruction that exits the current function by propagating an exception. - */ -class UnwindInstruction extends Instruction { - UnwindInstruction() { this.getOpcode() instanceof Opcode::Unwind } -} - -/** - * An instruction that starts a `catch` handler. - */ -class CatchInstruction extends Instruction { - CatchInstruction() { this.getOpcode() instanceof CatchOpcode } -} - -/** - * An instruction that catches an exception of a specific type. - */ -class CatchByTypeInstruction extends CatchInstruction { - Language::LanguageType exceptionType; - - CatchByTypeInstruction() { - this.getOpcode() instanceof Opcode::CatchByType and - exceptionType = Raw::getInstructionExceptionType(this) - } - - final override string getImmediateString() { result = exceptionType.toString() } - - /** - * Gets the type of exception to be caught. - */ - final Language::LanguageType getExceptionType() { result = exceptionType } -} - -/** - * An instruction that catches any exception. - */ -class CatchAnyInstruction extends CatchInstruction { - CatchAnyInstruction() { this.getOpcode() instanceof Opcode::CatchAny } -} - -/** - * An instruction that initializes all escaped memory. - */ -class AliasedDefinitionInstruction extends Instruction { - AliasedDefinitionInstruction() { this.getOpcode() instanceof Opcode::AliasedDefinition } -} - -/** - * An instruction that consumes all escaped memory on exit from the function. - */ -class AliasedUseInstruction extends Instruction { - AliasedUseInstruction() { this.getOpcode() instanceof Opcode::AliasedUse } -} - -/** - * An instruction representing the choice of one of multiple input values based on control flow. - * - * A `PhiInstruction` is inserted at the beginning of a block whenever two different definitions of - * the same variable reach that block. The `PhiInstruction` will have one operand corresponding to - * each control flow predecessor of the block, with that operand representing the version of the - * variable that flows from that predecessor. The result value of the `PhiInstruction` will be - * a copy of whichever operand corresponds to the actual predecessor that entered the block at - * runtime. - */ -class PhiInstruction extends Instruction { - PhiInstruction() { this.getOpcode() instanceof Opcode::Phi } - - /** - * Gets all of the instruction's `PhiInputOperand`s, representing the values that flow from each predecessor block. - */ - final PhiInputOperand getAnInputOperand() { result = this.getAnOperand() } - - /** - * Gets an instruction that defines the input to one of the operands of this - * instruction. It's possible for more than one operand to have the same - * defining instruction, so this predicate will have the same number of - * results as `getAnInputOperand()` or fewer. - */ - pragma[noinline] - final Instruction getAnInput() { result = this.getAnInputOperand().getDef() } - - /** - * Gets the input operand representing the value that flows from the specified predecessor block. - */ - final PhiInputOperand getInputOperand(IRBlock predecessorBlock) { - result = this.getAnOperand() and - result.getPredecessorBlock() = predecessorBlock - } -} - -/** - * An instruction representing the effect that a write to a memory may have on potential aliases of - * that memory. - * - * A `ChiInstruction` is inserted immediately after an instruction that writes to memory. The - * `ChiInstruction` has two operands. The first operand, given by `getTotalOperand()`, represents - * the previous state of all of the memory that might be aliased by the memory write. The second - * operand, given by `getPartialOperand()`, represents the memory that was actually modified by the - * memory write. The result of the `ChiInstruction` represents the same memory as - * `getTotalOperand()`, updated to include the changes due to the value that was actually stored by - * the memory write. - * - * As an example, suppose that variable `p` and `q` are pointers that may or may not point to the - * same memory: - * ``` - * *p = 5; - * x = *q; - * ``` - * - * The IR would look like: - * ``` - * r1_1 = VariableAddress[p] - * r1_2 = Load r1_1, m0_0 // Load the value of `p` - * r1_3 = Constant[5] - * m1_4 = Store r1_2, r1_3 // Store to `*p` - * m1_5 = ^Chi m0_1, m1_4 // Side effect of the previous Store on aliased memory - * r1_6 = VariableAddress[x] - * r1_7 = VariableAddress[q] - * r1_8 = Load r1_7, m0_2 // Load the value of `q` - * r1_9 = Load r1_8, m1_5 // Load the value of `*q` - * m1_10 = Store r1_6, r1_9 // Store to x - * ``` - * - * Note the `Chi` instruction after the store to `*p`. The indicates that the previous contents of - * aliased memory (`m0_1`) are merged with the new value written by the store (`m1_4`), producing a - * new version of aliased memory (`m1_5`). On the subsequent load from `*q`, the source operand of - * `*q` is `m1_5`, indicating that the store to `*p` may (or may not) have updated the memory - * pointed to by `q`. - * - * For more information about how `Chi` instructions are used to model memory side effects, see - * https://link.springer.com/content/pdf/10.1007%2F3-540-61053-7_66.pdf. - */ -class ChiInstruction extends Instruction { - ChiInstruction() { this.getOpcode() instanceof Opcode::Chi } - - /** - * Gets the operand that represents the previous state of all memory that might be aliased by the - * memory write. - */ - final ChiTotalOperand getTotalOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that represents the previous state of all memory that might be aliased by the - * memory write. - */ - final Instruction getTotal() { result = this.getTotalOperand().getDef() } - - /** - * Gets the operand that represents the new value written by the memory write. - */ - final ChiPartialOperand getPartialOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that represents the new value written by the memory write. - */ - final Instruction getPartial() { result = this.getPartialOperand().getDef() } - - /** - * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. - * This means that the `ChiPartialOperand` will not override the entire memory associated with the - * `ChiTotalOperand`. - */ - final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } -} - -/** - * An instruction that initializes a set of allocations that are each assigned - * the same "virtual variable". - * - * As an example, consider the following snippet: - * ``` - * int a; - * int b; - * int* p; - * if(b) { - * p = &a; - * } else { - * p = &b; - * } - * *p = 5; - * int x = a; - * ``` - * - * Since both the address of `a` and `b` reach `p` at `*p = 5` the IR alias - * analysis will create a region that contains both `a` and `b`. The region - * containing both `a` and `b` are initialized by an `UninitializedGroup` - * instruction in the entry block of the enclosing function. - */ -class UninitializedGroupInstruction extends Instruction { - UninitializedGroupInstruction() { this.getOpcode() instanceof Opcode::UninitializedGroup } - - /** - * Gets an `IRVariable` whose memory is initialized by this instruction, if any. - * Note: Allocations that are not represented as `IRVariable`s (such as - * dynamic allocations) are not returned by this predicate even if this - * instruction initializes such memory. - */ - final IRVariable getAnIRVariable() { - result = Construction::getAnUninitializedGroupVariable(this) - } - - final override string getImmediateString() { - result = strictconcat(this.getAnIRVariable().toString(), ",") - } -} - -/** - * An instruction representing unreachable code. - * - * This instruction is inserted in place of the original target instruction of a `ConditionalBranch` - * or `Switch` instruction where that particular edge is infeasible. - */ -class UnreachedInstruction extends Instruction { - UnreachedInstruction() { this.getOpcode() instanceof Opcode::Unreached } -} - -/** - * An instruction representing a built-in operation. - * - * This is used to represent a variety of intrinsic operations provided by the compiler - * implementation, such as vector arithmetic. - */ -class BuiltInOperationInstruction extends Instruction { - Language::BuiltInOperation operation; - - BuiltInOperationInstruction() { - this.getOpcode() instanceof BuiltInOperationOpcode and - operation = Raw::getInstructionBuiltInOperation(this) - } - - /** - * Gets the language-specific `BuiltInOperation` object that specifies the operation that is - * performed by this instruction. - */ - final Language::BuiltInOperation getBuiltInOperation() { result = operation } -} - -/** - * An instruction representing a built-in operation that does not have a specific opcode. The - * actual operation is specified by the `getBuiltInOperation()` predicate. - */ -class BuiltInInstruction extends BuiltInOperationInstruction { - BuiltInInstruction() { this.getOpcode() instanceof Opcode::BuiltIn } - - final override string getImmediateString() { result = this.getBuiltInOperation().toString() } -} - -/** - * An instruction that returns a `va_list` to access the arguments passed to the `...` parameter. - * - * The operand specifies the address of the `IREllipsisVariable` used to represent the `...` - * parameter. The result is a `va_list` that initially refers to the first argument that was passed - * to the `...` parameter. - */ -class VarArgsStartInstruction extends UnaryInstruction { - VarArgsStartInstruction() { this.getOpcode() instanceof Opcode::VarArgsStart } -} - -/** - * An instruction that cleans up a `va_list` after it is no longer in use. - * - * The operand specifies the address of the `va_list` to clean up. This instruction does not return - * a result. - */ -class VarArgsEndInstruction extends UnaryInstruction { - VarArgsEndInstruction() { this.getOpcode() instanceof Opcode::VarArgsEnd } -} - -/** - * An instruction that returns the address of the argument currently pointed to by a `va_list`. - * - * The operand is the `va_list` that points to the argument. The result is the address of the - * argument. - */ -class VarArgInstruction extends UnaryInstruction { - VarArgInstruction() { this.getOpcode() instanceof Opcode::VarArg } -} - -/** - * An instruction that modifies a `va_list` to point to the next argument that was passed to the - * `...` parameter. - * - * The operand is the current `va_list`. The result is an updated `va_list` that points to the next - * argument of the `...` parameter. - */ -class NextVarArgInstruction extends UnaryInstruction { - NextVarArgInstruction() { this.getOpcode() instanceof Opcode::NextVarArg } -} - -/** - * An instruction that allocates a new object on the managed heap. - * - * This instruction is used to represent the allocation of a new object in C# using the `new` - * expression. This instruction does not invoke a constructor for the object. Instead, there will be - * a subsequent `Call` instruction to invoke the appropriate constructor directory, passing the - * result of the `NewObj` as the `this` argument. - * - * The result is the address of the newly allocated object. - */ -class NewObjInstruction extends Instruction { - NewObjInstruction() { this.getOpcode() instanceof Opcode::NewObj } -} - -/** - * An instruction that returns the type info for its operand. - */ -class TypeidInstruction extends Instruction { - TypeidInstruction() { this.getOpcode() instanceof Opcode::Typeid } -} - -/** - * An instruction that returns the type info for its operand, where the - * operand occurs as an expression in the AST. - */ -class TypeidExprInstruction extends TypeidInstruction, UnaryInstruction { - TypeidExprInstruction() { this.getOpcode() instanceof Opcode::TypeidExpr } -} - -/** - * An instruction that returns the type info for its operand, where the - * operand occurs as a type in the AST. - */ -class TypeidTypeInstruction extends TypeidInstruction { - TypeidTypeInstruction() { this.getOpcode() instanceof Opcode::TypeidType } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll deleted file mode 100644 index c1743acdbae8..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll +++ /dev/null @@ -1,499 +0,0 @@ -/** - * Provides classes that represent the input values of IR instructions. - */ - -private import internal.IRInternal -private import Instruction -private import IRBlock -private import internal.OperandImports as Imports -private import Imports::MemoryAccessKind -private import Imports::IRType -private import Imports::Overlap -private import Imports::OperandTag -private import Imports::TOperand -private import internal.OperandInternal - -/** - * An operand of an `Instruction` in this stage of the IR. Implemented as a union of the branches - * of `TOperand` that are used in this stage. - */ -private class TStageOperand = - TRegisterOperand or TNonSsaMemoryOperand or TPhiOperand or TChiOperand; - -/** - * A known location. Testing `loc instanceof KnownLocation` will account for non existing locations, as - * opposed to testing `not loc isntanceof UnknownLocation` - */ -private class KnownLocation extends Language::Location { - KnownLocation() { not this instanceof Language::UnknownLocation } -} - -/** - * An operand of an `Instruction`. The operand represents a use of the result of one instruction - * (the defining instruction) in another instruction (the use instruction) - */ -class Operand extends TStageOperand { - cached - Operand() { - // Ensure that the operand does not refer to instructions from earlier stages that are unreachable here - exists(Instruction use, Instruction def | this = registerOperand(use, _, def)) - or - exists(Instruction use | this = nonSsaMemoryOperand(use, _)) - or - exists(Instruction use, Instruction def, IRBlock predecessorBlock | - this = phiOperand(use, def, predecessorBlock, _) or - this = reusedPhiOperand(use, def, predecessorBlock, _) - ) - or - this = chiOperand(_, _) - } - - /** Gets a textual representation of this element. */ - string toString() { result = "Operand" } - - /** - * Gets the location of the source code for this operand. - * By default this is where the operand is used, but some subclasses may override this - * using `getAnyDef()` if it makes more sense. - */ - Language::Location getLocation() { result = this.getUse().getLocation() } - - /** - * Gets the function that contains this operand. - */ - final IRFunction getEnclosingIRFunction() { result = this.getUse().getEnclosingIRFunction() } - - /** - * Gets the `Instruction` that consumes this operand. - */ - Instruction getUse() { none() } - - /** - * Gets the `Instruction` whose result is the value of the operand. Unlike - * `getDef`, this also has a result when `isDefinitionInexact` holds, which - * means that the resulting instruction may only _partially_ or _potentially_ - * be the value of this operand. - */ - Instruction getAnyDef() { none() } - - /** - * Gets the `Instruction` whose result is the value of the operand. Unlike - * `getAnyDef`, this also has no result when `isDefinitionInexact` holds, - * which means that the resulting instruction must always be exactly the be - * the value of this operand. - */ - final Instruction getDef() { - result = this.getAnyDef() and - this.getDefinitionOverlap() instanceof MustExactlyOverlap - } - - /** - * Gets the overlap relationship between the operand's definition and its use. - */ - Overlap getDefinitionOverlap() { none() } - - /** - * Holds if the result of the definition instruction does not exactly overlap this use. - */ - final predicate isDefinitionInexact() { - not this.getDefinitionOverlap() instanceof MustExactlyOverlap - } - - /** - * Gets a prefix to use when dumping the operand in an operand list. - */ - string getDumpLabel() { result = "" } - - /** - * Gets a string that uniquely identifies this operand on its use instruction. - */ - string getDumpId() { result = "" } - - /** - * Gets a string describing this operand, suitable for display in IR dumps. This consists of the - * result ID of the instruction consumed by the operand, plus a label identifying the operand - * kind. - * - * For example: `this:r3_5` - */ - final string getDumpString() { - result = this.getDumpLabel() + this.getInexactSpecifier() + this.getDefinitionId() - } - - /** - * Gets a string containing the identifier of the definition of this use, or `m?` if the - * definition is not modeled in SSA. - */ - private string getDefinitionId() { - result = this.getAnyDef().getResultId() - or - not exists(this.getAnyDef()) and result = "m?" - } - - /** - * Gets a string prefix to prepend to the operand's definition ID in an IR dump, specifying whether the operand is - * an exact or inexact use of its definition. For an inexact use, the prefix is "~". For an exact use, the prefix is - * the empty string. - */ - private string getInexactSpecifier() { - if this.isDefinitionInexact() then result = "~" else result = "" - } - - /** - * Get the order in which the operand should be sorted in the operand list. - */ - int getDumpSortOrder() { result = -1 } - - /** - * Gets the type of the value consumed by this operand. This is usually the same as the - * result type of the definition instruction consumed by this operand. For register operands, - * this is always the case. For some memory operands, the operand type may be different from - * the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - Language::LanguageType getLanguageType() { result = this.getAnyDef().getResultLanguageType() } - - /** - * Gets the language-neutral type of the value consumed by this operand. This is usually the same - * as the result type of the definition instruction consumed by this operand. For register - * operands, this is always the case. For some memory operands, the operand type may be different - * from the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - final IRType getIRType() { result = this.getLanguageType().getIRType() } - - /** - * Gets the type of the value consumed by this operand. This is usually the same as the - * result type of the definition instruction consumed by this operand. For register operands, - * this is always the case. For some memory operands, the operand type may be different from - * the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - final Language::Type getType() { this.getLanguageType().hasType(result, _) } - - /** - * Holds if the value consumed by this operand is a glvalue. If this - * holds, the value of the operand represents the address of a location, - * and the type of the location is given by `getType()`. If this does - * not hold, the value of the operand represents a value whose type is - * given by `getType()`. - */ - final predicate isGLValue() { this.getLanguageType().hasType(_, true) } - - /** - * Gets the size of the value consumed by this operand, in bytes. If the operand does not have - * a known constant size, this predicate does not hold. - */ - final int getSize() { result = this.getLanguageType().getByteSize() } -} - -/** - * An operand that consumes a memory result (e.g. the `LoadOperand` on a `Load` instruction). - */ -class MemoryOperand extends Operand { - cached - MemoryOperand() { - this instanceof TNonSsaMemoryOperand or - this instanceof TPhiOperand or - this instanceof TChiOperand - } - - /** - * Gets the kind of memory access performed by the operand. - */ - MemoryAccessKind getMemoryAccess() { result = this.getUse().getOpcode().getReadMemoryAccess() } - - /** - * Holds if the memory access performed by this operand will not always read from every bit in the - * memory location. This is most commonly used for memory accesses that may or may not actually - * occur depending on runtime state (for example, the write side effect of an output parameter - * that is not written to on all paths), or for accesses where the memory location is a - * conservative estimate of the memory that might actually be accessed at runtime (for example, - * the global side effects of a function call). - */ - predicate hasMayReadMemoryAccess() { this.getUse().getOpcode().hasMayReadMemoryAccess() } - - /** - * Returns the operand that holds the memory address from which the current operand loads its - * value, if any. For example, in `r3 = Load r1, m2`, the result of `getAddressOperand()` for `m2` - * is `r1`. - */ - final AddressOperand getAddressOperand() { - this.getMemoryAccess().usesAddressOperand() and - result.getUse() = this.getUse() - } -} - -/** - * An operand that is not an operand of a `PhiInstruction`. - */ -class NonPhiOperand extends Operand { - Instruction useInstr; - OperandTag tag; - - NonPhiOperand() { - this = registerOperand(useInstr, tag, _) or - this = nonSsaMemoryOperand(useInstr, tag) or - this = chiOperand(useInstr, tag) - } - - final override Instruction getUse() { result = useInstr } - - final override string getDumpLabel() { result = tag.getLabel() } - - final override string getDumpId() { result = tag.getId() } - - final override int getDumpSortOrder() { result = tag.getSortOrder() } - - /** - * Gets the `OperandTag` that specifies how this operand is used by its `Instruction`. - */ - final OperandTag getOperandTag() { result = tag } -} - -/** - * An operand that consumes a register (non-memory) result. - */ -class RegisterOperand extends NonPhiOperand, TRegisterOperand { - override RegisterOperandTag tag; - Instruction defInstr; - - cached - RegisterOperand() { this = registerOperand(useInstr, tag, defInstr) } - - final override string toString() { result = tag.toString() } - - // most `RegisterOperands` have a more meaningful location at the definition - // the only exception are specific cases of `ThisArgumentOperand` - override Language::Location getLocation() { result = this.getAnyDef().getLocation() } - - final override Instruction getAnyDef() { result = defInstr } - - final override Overlap getDefinitionOverlap() { - // All register results overlap exactly with their uses. - result instanceof MustExactlyOverlap - } -} - -/** - * A memory operand other than the operand of a `Phi` instruction. - */ -class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, TNonPhiMemoryOperand { - override MemoryOperandTag tag; - - cached - NonPhiMemoryOperand() { - this = nonSsaMemoryOperand(useInstr, tag) - or - this = chiOperand(useInstr, tag) - } - - final override string toString() { result = tag.toString() } - - final override Instruction getAnyDef() { - result = unique(Instruction defInstr | this.hasDefinition(defInstr, _)) - } - - final override Overlap getDefinitionOverlap() { this.hasDefinition(_, result) } - - pragma[noinline] - private predicate hasDefinition(Instruction defInstr, Overlap overlap) { - defInstr = Construction::getMemoryOperandDefinition(useInstr, tag, overlap) and - not Construction::isInCycle(useInstr) and - strictcount(Construction::getMemoryOperandDefinition(useInstr, tag, _)) = 1 - } - - /** - * Holds if the operand totally overlaps with its definition and consumes the - * bit range `[startBitOffset, endBitOffset)` relative to the start address of the definition. - */ - predicate getUsedInterval(int startBitOffset, int endBitOffset) { - Construction::getUsedInterval(this, startBitOffset, endBitOffset) - } -} - -/** - * A memory operand whose type may be different from the type of the result of its definition. - */ -class TypedOperand extends NonPhiMemoryOperand { - override TypedOperandTag tag; - - final override Language::LanguageType getLanguageType() { - result = Construction::getInstructionOperandType(useInstr, tag) - } -} - -/** - * The address operand of an instruction that loads or stores a value from - * memory (e.g. `Load`, `Store`). - */ -class AddressOperand extends RegisterOperand { - override AddressOperandTag tag; -} - -/** - * The buffer size operand of an instruction that represents a read or write of - * a buffer. - */ -class BufferSizeOperand extends RegisterOperand { - override BufferSizeOperandTag tag; -} - -/** - * The source value operand of an instruction that loads a value from memory (e.g. `Load`, - * `ReturnValue`, `ThrowValue`). - */ -class LoadOperand extends TypedOperand { - override LoadOperandTag tag; -} - -/** - * The source value operand of a `Store` instruction. - */ -class StoreValueOperand extends RegisterOperand { - override StoreValueOperandTag tag; -} - -/** - * The sole operand of a unary instruction (e.g. `Convert`, `Negate`, `Copy`). - */ -class UnaryOperand extends RegisterOperand { - override UnaryOperandTag tag; -} - -/** - * The left operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class LeftOperand extends RegisterOperand { - override LeftOperandTag tag; -} - -/** - * The right operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class RightOperand extends RegisterOperand { - override RightOperandTag tag; -} - -/** - * The condition operand of a `ConditionalBranch` or `Switch` instruction. - */ -class ConditionOperand extends RegisterOperand { - override ConditionOperandTag tag; -} - -/** - * The operand representing the target function of an `Call` instruction. - */ -class CallTargetOperand extends RegisterOperand { - override CallTargetOperandTag tag; -} - -/** - * An operand representing an argument to a function call. This includes both - * positional arguments (represented by `PositionalArgumentOperand`) and the - * implicit `this` argument, if any (represented by `ThisArgumentOperand`). - */ -class ArgumentOperand extends RegisterOperand { - override ArgumentOperandTag tag; - - /** Gets the `CallInstruction` for which this is an argument. */ - CallInstruction getCall() { result.getAnArgumentOperand() = this } -} - -/** - * An operand representing the implicit `this` argument to a member function - * call. - */ -class ThisArgumentOperand extends ArgumentOperand { - override ThisArgumentOperandTag tag; - - // in most cases the def location makes more sense, but in some corner cases it - // has an unknown location: in those cases we fall back to the use location - override Language::Location getLocation() { - if this.getAnyDef().getLocation() instanceof KnownLocation - then result = this.getAnyDef().getLocation() - else result = this.getUse().getLocation() - } -} - -/** - * An operand representing an argument to a function call. - */ -class PositionalArgumentOperand extends ArgumentOperand { - override PositionalArgumentOperandTag tag; - - /** - * Gets the zero-based index of the argument. - */ - final int getIndex() { result = tag.getArgIndex() } -} - -/** - * An operand representing memory read as a side effect of evaluating another instruction. - */ -class SideEffectOperand extends TypedOperand { - override SideEffectOperandTag tag; -} - -/** - * An operand of a `PhiInstruction`. - */ -class PhiInputOperand extends MemoryOperand, TPhiOperand { - PhiInstruction useInstr; - Instruction defInstr; - IRBlock predecessorBlock; - Overlap overlap; - - cached - PhiInputOperand() { - this = phiOperand(useInstr, defInstr, predecessorBlock, overlap) - or - this = reusedPhiOperand(useInstr, defInstr, predecessorBlock, overlap) - } - - override string toString() { result = "Phi" } - - final override PhiInstruction getUse() { result = useInstr } - - final override Instruction getAnyDef() { result = defInstr } - - final override Overlap getDefinitionOverlap() { result = overlap } - - final override int getDumpSortOrder() { - result = 11 + this.getPredecessorBlock().getDisplayIndex() - } - - final override string getDumpLabel() { - result = "from " + this.getPredecessorBlock().getDisplayIndex().toString() + ":" - } - - final override string getDumpId() { - result = this.getPredecessorBlock().getDisplayIndex().toString() - } - - /** - * Gets the predecessor block from which this value comes. - */ - final IRBlock getPredecessorBlock() { result = predecessorBlock } - - final override MemoryAccessKind getMemoryAccess() { result instanceof PhiMemoryAccess } -} - -/** - * The total operand of a Chi node, representing the previous value of the memory. - */ -class ChiTotalOperand extends NonPhiMemoryOperand { - override ChiTotalOperandTag tag; - - final override MemoryAccessKind getMemoryAccess() { result instanceof ChiTotalMemoryAccess } -} - -/** - * The partial operand of a Chi node, representing the value being written to part of the memory. - */ -class ChiPartialOperand extends NonPhiMemoryOperand { - override ChiPartialOperandTag tag; - - final override MemoryAccessKind getMemoryAccess() { result instanceof ChiPartialMemoryAccess } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.ql b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.ql deleted file mode 100644 index 6adf2a3978c0..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Print Aliased SSA IR - * @description Outputs a representation of the Aliased SSA IR graph - * @id cpp/print-aliased-ssa-ir - * @kind graph - */ - -import PrintIR diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll deleted file mode 100644 index 41e1a4c3082d..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll +++ /dev/null @@ -1,454 +0,0 @@ -/** - * Outputs a representation of the IR as a control flow graph. - * - * This file contains the actual implementation of `PrintIR.ql`. For test cases and very small - * databases, `PrintIR.ql` can be run directly to dump the IR for the entire database. For most - * uses, however, it is better to write a query that imports `PrintIR.qll`, extends - * `PrintIRConfiguration`, and overrides `shouldPrintDeclaration()` to select a subset of declarations - * to dump. - * - * Anatomy of a printed IR instruction - * - * An instruction: - * - * ``` - * # 2281| v2281_19(void) = Call[~String] : func:r2281_18, this:r2281_17 - * ``` - * - * The prefix `# 2281|` specifies that this instruction was generated by the C++ source code on line 2281. - * Scrolling up in the printed output, one will eventually find the name of the file to which the line - * belongs. - * - * `v2281_19(void)` is the result of the instruction. Here, `v` means this is a void result or operand (so - * there should be no later uses of the result; see below for other possible values). The `2281_19` is a - * unique ID for the result. This is usually just the line number plus a small integer suffix to make it - * unique within the function. The type of the result is `void`. In this case, it is `void`, because - * `~String` returns `void`. The type of the result is usually just the name of the appropriate C++ type, - * but it will sometimes be a type like `glval`, which means result holds a glvalue, which at the - * IR level works like a pointer. In other words, in the source code the type was `int`, but it is really - * more like an `int*`. We see this, for example, in `x = y;`, where `x` is a glvalue. - * - * `Call` is the opcode of the instruction. Common opcodes include: - * - * * Arithmetic operations: `Add`, `Sub`, `Mul`, etc. - * * Memory access operations: `Load`, `Store`. - * * Function calls: `Call`. - * * Literals: `Constant`. - * * Variable addresses: `VariableAddress`. - * * Function entry points: `EnterFunction`. - * * Return from a function: `Return`, `ReturnVoid`. Note that the value being returned is set separately by a - * `Store` to a special `#return` variable. - * * Stack unwinding for C++ function that throw and where the exception escapes the function: `Unwind`. - * * Common exit point for `Unwind` and `Return`: `ExitFunction`. - * * SSA-related opcodes: `Phi`, `Chi`. - * - * `[~String]` denotes additional information. The information might be present earlier in the IR, as is the case - * for `Call`, where it is the name of the called function. This is also the case for `Load` and `Store`, where it - * is the name of the variable that loaded or stored (if known). In the case of `Constant`, `FieldAddress`, and - * `VariableAddress`, the information between brackets does not occur earlier. - * - * `func:r2281_18` and `this:r28281_17` are the operands of the instruction. The `func:` prefix denotes the operand - * that holds the address of the called function. The `this:` prefix denotes the argument to the special `this` - * parameter of an instance member function. `r2281_18`, `r2281_17` are the unique IDs of the operands. Each of these - * matches the ID of a previously seen result, showing where that value came from. The `r` means that these are - * "register" operands (see below). - * - * Result and operand kinds: - * - * Every result and operand is one of these three kinds: - * - * * `r` "register". These operands are not stored in any particular memory location. We can think of them as - * temporary values created during the evaluation of an expression. A register operand almost always has one - * use, often in the same block as its definition. - * * `m` "memory". These operands represents accesses to a specific memory location. The location could be a - * local variable, a global variable, a field of an object, an element of an array, or any memory that we happen - * to have a pointer to. These only occur as the result of a `Store`, the source operand of a `Load` or on the - * SSA instructions (`Phi`, `Chi`). - * * `v` "void". Really just a register operand, but we mark register operands of type void with this special prefix - * so we know that there is no actual value there. - * - * Branches in the IR: - * - * The IR is divided into basic blocks. At the end of each block, there are one or more edges showing the possible - * control flow successors of the block. - * - * ``` - * # 44| v44_3(void) = ConditionalBranch : r44_2 - * #-----| False -> Block 4 - * #-----| True -> Block 3 - * ``` - * Here we have a block that ends with a conditional branch. The two edges show where the control flows to depending - * on whether the condition is true or false. - * - * SSA instructions: - * - * We use `Phi` instructions in SSA to create a single definition for a variable that might be assigned on multiple - * control flow paths. The `Phi` instruction merges the potential values of that variable from each predecessor edge, - * and the resulting definition is then used wherever that variable is accessed later on. - * - * When dealing with aliased memory, we use the `Chi` instruction to create a single definition for memory that might - * or might not have been updated by a store, depending on the actual address that was written to. For example, take: - * - * ```cpp - * int x = 5; - * int y = 7; - * int* p = condition ? &x : &y; - * *p = 6; - * return x; - * ``` - * - * At the point where we store to `*p`, we do not know whether `p` points to `x` or `y`. Thus, we do not know whether - * `return x;` is going to return the value that `x` was originally initialized to (5), or whether it will return 6, - * because it was overwritten by `*p = 6;`. We insert a `Chi` instruction immediately after the store to `*p`: - * - * ``` - * r2(int) = Constant[6] - * r3(int*) = <> - * m4(int) = Store : &r3, r2 // Stores the constant 6 to *p - * m5(unknown) = Chi : total:m1, partial:m4 - * ``` - * The `partial:` operand represents the memory that was just stored. The `total:` operand represents the previous - * contents of all of the memory that `p` might have pointed to (in this case, both `x` and `y`). The result of the - * `Chi` represents the new contents of whatever memory the `total:` operand referred to. We usually do not know exactly - * which parts of that memory were overwritten, but it does model that any of that memory could have been modified, so - * that later instructions do not assume that the memory was unchanged. - */ - -private import internal.IRInternal -private import IR -private import internal.PrintIRImports as Imports -import Imports::IRConfiguration - -private newtype TPrintIRConfiguration = MkPrintIRConfiguration() - -/** - * The query can extend this class to control which declarations are printed. - */ -class PrintIRConfiguration extends TPrintIRConfiguration { - /** Gets a textual representation of this configuration. */ - string toString() { result = "PrintIRConfiguration" } - - /** - * Holds if the IR for `func` should be printed. By default, holds for all - * functions, global and namespace variables, and static local variables. - */ - predicate shouldPrintDeclaration(Language::Declaration decl) { any() } -} - -/** - * Override of `IRConfiguration` to only evaluate debug strings for the functions that are to be dumped. - */ -private class FilteredIRConfiguration extends IRConfiguration { - override predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) { - shouldPrintDeclaration(func) - } -} - -private predicate shouldPrintDeclaration(Language::Declaration decl) { - exists(PrintIRConfiguration config | config.shouldPrintDeclaration(decl)) -} - -private predicate shouldPrintInstruction(Instruction i) { - exists(IRPropertyProvider provider | provider.shouldPrintInstruction(i)) -} - -private predicate shouldPrintOperand(Operand operand) { - exists(IRPropertyProvider provider | provider.shouldPrintOperand(operand)) -} - -private string getAdditionalInstructionProperty(Instruction instr, string key) { - exists(IRPropertyProvider provider | result = provider.getInstructionProperty(instr, key)) -} - -private string getAdditionalBlockProperty(IRBlock block, string key) { - exists(IRPropertyProvider provider | result = provider.getBlockProperty(block, key)) -} - -/** - * Gets the properties of an operand from any active property providers. - */ -private string getAdditionalOperandProperty(Operand operand, string key) { - exists(IRPropertyProvider provider | result = provider.getOperandProperty(operand, key)) -} - -/** - * Gets a string listing the properties of the operand and their corresponding values. If the - * operand has no properties, this predicate has no result. - */ -private string getOperandPropertyListString(Operand operand) { - result = - strictconcat(string key, string value | - value = getAdditionalOperandProperty(operand, key) - | - key + ":" + value, ", " - ) -} - -/** - * Gets a string listing the properties of the operand and their corresponding values. The list is - * surrounded by curly braces. If the operand has no properties, this predicate returns an empty - * string. - */ -private string getOperandPropertyString(Operand operand) { - result = "{" + getOperandPropertyListString(operand) + "}" - or - not exists(getOperandPropertyListString(operand)) and result = "" -} - -private newtype TPrintableIRNode = - TPrintableIRFunction(IRFunction irFunc) { shouldPrintDeclaration(irFunc.getFunction()) } or - TPrintableIRBlock(IRBlock block) { shouldPrintDeclaration(block.getEnclosingFunction()) } or - TPrintableInstruction(Instruction instr) { - shouldPrintInstruction(instr) and shouldPrintDeclaration(instr.getEnclosingFunction()) - } - -/** - * A node to be emitted in the IR graph. - */ -abstract private class PrintableIRNode extends TPrintableIRNode { - abstract string toString(); - - /** - * Gets the location to be emitted for the node. - */ - abstract Language::Location getLocation(); - - /** - * Gets the label to be emitted for the node. - */ - abstract string getLabel(); - - /** - * Gets the order in which the node appears in its parent node. - */ - abstract int getOrder(); - - /** - * Gets the parent of this node. - */ - abstract PrintableIRNode getParent(); - - /** - * Gets the kind of graph represented by this node ("graph" or "tree"). - */ - string getGraphKind() { none() } - - /** - * Holds if this node should always be rendered as text, even in a graphical - * viewer. - */ - predicate forceText() { none() } - - /** - * Gets the value of the node property with the specified key. - */ - string getProperty(string key) { - key = "semmle.label" and result = this.getLabel() - or - key = "semmle.order" and result = this.getOrder().toString() - or - key = "semmle.graphKind" and result = this.getGraphKind() - or - key = "semmle.forceText" and this.forceText() and result = "true" - } -} - -/** - * An IR graph node representing a `IRFunction` object. - */ -private class PrintableIRFunction extends PrintableIRNode, TPrintableIRFunction { - IRFunction irFunc; - - PrintableIRFunction() { this = TPrintableIRFunction(irFunc) } - - override string toString() { result = irFunc.toString() } - - override Language::Location getLocation() { result = irFunc.getLocation() } - - override string getLabel() { - result = Imports::LanguageDebug::getIdentityString(irFunc.getFunction()) - } - - override int getOrder() { - this = - rank[result + 1](PrintableIRFunction orderedFunc, Language::Location location | - location = orderedFunc.getIRFunction().getLocation() - | - orderedFunc - order by - location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), - orderedFunc.getLabel() - ) - } - - final override PrintableIRNode getParent() { none() } - - final IRFunction getIRFunction() { result = irFunc } -} - -/** - * An IR graph node representing an `IRBlock` object. - */ -private class PrintableIRBlock extends PrintableIRNode, TPrintableIRBlock { - IRBlock block; - - PrintableIRBlock() { this = TPrintableIRBlock(block) } - - override string toString() { result = this.getLabel() } - - override Language::Location getLocation() { result = block.getLocation() } - - override string getLabel() { result = "Block " + block.getDisplayIndex().toString() } - - override int getOrder() { result = block.getDisplayIndex() } - - final override string getGraphKind() { result = "tree" } - - final override predicate forceText() { any() } - - final override PrintableIRFunction getParent() { - result.getIRFunction() = block.getEnclosingIRFunction() - } - - override string getProperty(string key) { - result = PrintableIRNode.super.getProperty(key) or - result = getAdditionalBlockProperty(block, key) - } - - final IRBlock getBlock() { result = block } -} - -/** - * An IR graph node representing an `Instruction`. - */ -private class PrintableInstruction extends PrintableIRNode, TPrintableInstruction { - Instruction instr; - - PrintableInstruction() { this = TPrintableInstruction(instr) } - - override string toString() { result = instr.toString() } - - override Language::Location getLocation() { result = instr.getLocation() } - - override string getLabel() { - exists(IRBlock block | - instr = block.getAnInstruction() and - exists( - string resultString, string operationString, string operandsString, int resultWidth, - int operationWidth - | - resultString = instr.getResultString() and - operationString = instr.getOperationString() and - operandsString = this.getOperandsString() and - columnWidths(block, resultWidth, operationWidth) and - result = - resultString + getPaddingString(resultWidth - resultString.length()) + " = " + - operationString + getPaddingString(operationWidth - operationString.length()) + " : " + - operandsString - ) - ) - } - - override int getOrder() { result = instr.getDisplayIndexInBlock() } - - final override PrintableIRBlock getParent() { result.getBlock() = instr.getBlock() } - - final Instruction getInstruction() { result = instr } - - override string getProperty(string key) { - result = PrintableIRNode.super.getProperty(key) or - result = getAdditionalInstructionProperty(instr, key) - } - - /** - * Gets the string representation of the operand list. This is the same as - * `Instruction::getOperandsString()`, except that each operand is annotated with any properties - * provided by active `IRPropertyProvider` instances. - */ - private string getOperandsString() { - result = - concat(Operand operand | - operand = instr.getAnOperand() and - shouldPrintOperand(operand) - | - operand.getDumpString() + getOperandPropertyString(operand), ", " - order by - operand.getDumpSortOrder() - ) - } -} - -private predicate columnWidths(IRBlock block, int resultWidth, int operationWidth) { - resultWidth = max(Instruction instr | instr.getBlock() = block | instr.getResultString().length()) and - operationWidth = - max(Instruction instr | instr.getBlock() = block | instr.getOperationString().length()) -} - -private int maxColumnWidth() { - result = - max(Instruction instr, int width | - width = instr.getResultString().length() or - width = instr.getOperationString().length() or - width = instr.getOperandsString().length() - | - width - ) -} - -private string getPaddingString(int n) { - n = 0 and result = "" - or - n > 0 and n <= maxColumnWidth() and result = getPaddingString(n - 1) + " " -} - -/** - * Holds if `node` belongs to the output graph, and its property `key` has the given `value`. - */ -query predicate nodes(PrintableIRNode node, string key, string value) { - value = node.getProperty(key) -} - -private int getSuccessorIndex(IRBlock pred, IRBlock succ) { - succ = - rank[result + 1](IRBlock aSucc, EdgeKind kind | - aSucc = pred.getSuccessor(kind) - | - aSucc order by kind.toString() - ) -} - -/** - * Holds if the output graph contains an edge from `pred` to `succ`, and that edge's property `key` - * has the given `value`. - */ -query predicate edges(PrintableIRBlock pred, PrintableIRBlock succ, string key, string value) { - exists(IRBlock predBlock, IRBlock succBlock | - predBlock = pred.getBlock() and - succBlock = succ.getBlock() and - ( - key = "semmle.label" and - exists(string kinds | - kinds = - strictconcat(EdgeKind k | - predBlock.getSuccessor(k) = succBlock - | - k.toString(), "|" order by k.toString() - ) - | - if predBlock.getBackEdgeSuccessor(_) = succBlock - then value = kinds + " (back edge)" - else value = kinds - ) - or - key = "semmle.order" and - value = getSuccessorIndex(predBlock, succBlock).toString() - ) - ) -} - -/** - * Holds if `parent` is the parent node of `child` in the output graph. - */ -query predicate parents(PrintableIRNode child, PrintableIRNode parent) { - parent = child.getParent() -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll deleted file mode 100644 index f65799f9a61f..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll +++ /dev/null @@ -1,59 +0,0 @@ -private import internal.ConstantAnalysisInternal -private import semmle.code.cpp.ir.internal.IntegerPartial -private import IR - -language[monotonicAggregates] -int getConstantValue(Instruction instr) { - result = instr.(IntegerConstantInstruction).getValue().toInt() - or - result = getBinaryInstructionValue(instr) - or - result = neg(getConstantValue(instr.(NegateInstruction).getUnary())) - or - result = getConstantValue(instr.(CopyInstruction).getSourceValue()) - or - getConstantValue(instr.(LogicalNotInstruction).getUnary()) != 0 and - result = 0 - or - exists(PhiInstruction phi | - phi = instr and - result = unique(Operand op | op = phi.getAnInputOperand() | getConstantValue(op.getDef())) - ) -} - -pragma[noinline] -private predicate binaryInstructionOperands(BinaryInstruction instr, int left, int right) { - left = getConstantValue(instr.getLeft()) and - right = getConstantValue(instr.getRight()) -} - -pragma[noinline] -private int getBinaryInstructionValue(BinaryInstruction instr) { - exists(int left, int right | binaryInstructionOperands(instr, left, right) | - instr instanceof AddInstruction and result = add(left, right) - or - instr instanceof SubInstruction and result = sub(left, right) - or - instr instanceof MulInstruction and result = mul(left, right) - or - instr instanceof DivInstruction and result = div(left, right) - or - instr instanceof BitOrInstruction and result = bitOr(left, right) - or - instr instanceof BitAndInstruction and result = bitAnd(left, right) - or - instr instanceof BitXorInstruction and result = bitXor(left, right) - or - instr instanceof CompareEQInstruction and result = compareEQ(left, right) - or - instr instanceof CompareNEInstruction and result = compareNE(left, right) - or - instr instanceof CompareLTInstruction and result = compareLT(left, right) - or - instr instanceof CompareGTInstruction and result = compareGT(left, right) - or - instr instanceof CompareLEInstruction and result = compareLE(left, right) - or - instr instanceof CompareGEInstruction and result = compareGE(left, right) - ) -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/PrintConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/PrintConstantAnalysis.qll deleted file mode 100644 index 57a7cf594caf..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/PrintConstantAnalysis.qll +++ /dev/null @@ -1,11 +0,0 @@ -private import internal.ConstantAnalysisInternal -private import semmle.code.cpp.ir.internal.IntegerConstant -private import ConstantAnalysis -import IR - -private class ConstantAnalysisPropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instr, string key) { - key = "ConstantValue" and - result = getValue(getConstantValue(instr)).toString() - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/internal/ConstantAnalysisInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/internal/ConstantAnalysisInternal.qll deleted file mode 100644 index d55844c04712..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/internal/ConstantAnalysisInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.IR as IR diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll deleted file mode 100644 index a7fb1b3c07ef..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll +++ /dev/null @@ -1,17 +0,0 @@ -private import internal.ValueNumberingImports -private import ValueNumbering - -/** - * Provides additional information about value numbering in IR dumps. - */ -class ValueNumberPropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instr, string key) { - exists(ValueNumber vn | - vn = valueNumber(instr) and - key = "valnum" and - if strictcount(vn.getAnInstruction()) > 1 - then result = vn.getDebugString() - else result = "unique" - ) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll deleted file mode 100644 index b436bc8ccf11..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll +++ /dev/null @@ -1,91 +0,0 @@ -private import internal.ValueNumberingInternal -private import internal.ValueNumberingImports - -/** - * The value number assigned to a particular set of instructions that produce equivalent results. - */ -class ValueNumber extends TValueNumber { - final string toString() { result = "GVN" } - - final string getDebugString() { - result = strictconcat(this.getAnInstruction().getResultId(), ", ") - } - - final Language::Location getLocation() { - if - exists(Instruction i | - i = this.getAnInstruction() and not i.getLocation() instanceof Language::UnknownLocation - ) - then - result = - min(Language::Location l | - l = this.getAnInstruction().getLocation() and not l instanceof Language::UnknownLocation - | - l - order by - l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), - l.getEndColumn() - ) - else result instanceof Language::UnknownLocation - } - - /** - * Gets the instructions that have been assigned this value number. This will always produce at - * least one result. - */ - final Instruction getAnInstruction() { this = valueNumber(result) } - - /** - * Gets one of the instructions that was assigned this value number. The chosen instruction is - * deterministic but arbitrary. Intended for use only in debugging. - */ - final Instruction getExampleInstruction() { - result = - min(Instruction instr | - instr = this.getAnInstruction() - | - instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() - ) - } - - /** - * Gets an `Operand` whose definition is exact and has this value number. - */ - pragma[nomagic] - final Operand getAUse() { this = valueNumber(result.getDef()) } - - final string getKind() { - this instanceof TVariableAddressValueNumber and result = "VariableAddress" - or - this instanceof TInitializeParameterValueNumber and result = "InitializeParameter" - or - this instanceof TConstantValueNumber and result = "Constant" - or - this instanceof TStringConstantValueNumber and result = "StringConstant" - or - this instanceof TFieldAddressValueNumber and result = "FieldAddress" - or - this instanceof TBinaryValueNumber and result = "Binary" - or - this instanceof TPointerArithmeticValueNumber and result = "PointerArithmetic" - or - this instanceof TUnaryValueNumber and result = "Unary" - or - this instanceof TInheritanceConversionValueNumber and result = "InheritanceConversion" - or - this instanceof TLoadTotalOverlapValueNumber and result = "LoadTotalOverlap" - or - this instanceof TUniqueValueNumber and result = "Unique" - } -} - -/** - * Gets the value number assigned to `instr`, if any. Returns at most one result. - */ -ValueNumber valueNumber(Instruction instr) { result = tvalueNumber(instr) } - -/** - * Gets the value number assigned to the exact definition of `op`, if any. - * Returns at most one result. - */ -ValueNumber valueNumberOfOperand(Operand op) { result = tvalueNumberOfOperand(op) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingImports.qll deleted file mode 100644 index 8482a5e4b143..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.IR -import semmle.code.cpp.ir.internal.Overlap -import semmle.code.cpp.ir.internal.IRCppLanguage as Language diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll deleted file mode 100644 index f4b5a850a1f8..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ /dev/null @@ -1,373 +0,0 @@ -private import ValueNumberingImports - -newtype TValueNumber = - TVariableAddressValueNumber(IRFunction irFunc, Language::AST ast) { - variableAddressValueNumber(_, irFunc, ast) - } or - TInitializeParameterValueNumber(IRFunction irFunc, Language::AST var) { - initializeParameterValueNumber(_, irFunc, var) - } or - TConstantValueNumber(IRFunction irFunc, IRType type, string value) { - constantValueNumber(_, irFunc, type, value) - } or - TStringConstantValueNumber(IRFunction irFunc, IRType type, string value) { - stringConstantValueNumber(_, irFunc, type, value) - } or - TFieldAddressValueNumber(IRFunction irFunc, Language::Field field, TValueNumber objectAddress) { - fieldAddressValueNumber(_, irFunc, field, objectAddress) - } or - TBinaryValueNumber( - IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand - ) { - binaryValueNumber(_, irFunc, opcode, leftOperand, rightOperand) - } or - TPointerArithmeticValueNumber( - IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, - TValueNumber rightOperand - ) { - pointerArithmeticValueNumber(_, irFunc, opcode, elementSize, leftOperand, rightOperand) - } or - TUnaryValueNumber(IRFunction irFunc, Opcode opcode, TValueNumber operand) { - unaryValueNumber(_, irFunc, opcode, operand) - } or - TInheritanceConversionValueNumber( - IRFunction irFunc, Opcode opcode, Language::Class baseClass, Language::Class derivedClass, - TValueNumber operand - ) { - inheritanceConversionValueNumber(_, irFunc, opcode, baseClass, derivedClass, operand) - } or - TLoadTotalOverlapValueNumber( - IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand - ) { - loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand) - } or - TUniqueValueNumber(Instruction instr) { uniqueValueNumber(instr) } - -/** - * A `ConvertInstruction` which converts data of type `T` to data of type `U` - * where `T` and `U` only differ in specifiers. For example, if `T` is `int` - * and `U` is `const T` this is a conversion from a non-const integer to a - * const integer. - * - * Generally, the value number of a converted value is different from the value - * number of an unconverted value, but conversions which only modify specifiers - * leave the resulting value bitwise identical to the old value. - */ -class TypePreservingConvertInstruction extends ConvertInstruction { - TypePreservingConvertInstruction() { - pragma[only_bind_out](this.getResultType().getUnspecifiedType()) = - pragma[only_bind_out](this.getUnary().getResultType().getUnspecifiedType()) - } -} - -/** - * A `CopyInstruction` whose source operand's value is congruent to the definition of that source - * operand. - * For example: - * ``` - * Point p = { 1, 2 }; - * Point q = p; - * int a = p.x; - * ``` - * The use of `p` on line 2 is linked to the definition of `p` on line 1, and is congruent to that - * definition because it accesses the exact same memory. - * The use of `p.x` on line 3 is linked to the definition of `p` on line 1 as well, but is not - * congruent to that definition because `p.x` accesses only a subset of the memory defined by `p`. - */ -class CongruentCopyInstruction extends CopyInstruction { - CongruentCopyInstruction() { - this.getSourceValueOperand().getDefinitionOverlap() instanceof MustExactlyOverlap - } -} - -class LoadTotalOverlapInstruction extends LoadInstruction { - LoadTotalOverlapInstruction() { - this.getSourceValueOperand().getDefinitionOverlap() instanceof MustTotallyOverlap - } -} - -/** - * Holds if this library knows how to assign a value number to the specified instruction, other than - * a `unique` value number that is never shared by multiple instructions. - */ -private predicate numberableInstruction(Instruction instr) { - instr instanceof VariableAddressInstruction - or - instr instanceof InitializeParameterInstruction - or - instr instanceof ConstantInstruction - or - instr instanceof StringConstantInstruction - or - instr instanceof FieldAddressInstruction - or - instr instanceof BinaryInstruction - or - instr instanceof UnaryInstruction and not instr instanceof CopyInstruction - or - instr instanceof PointerArithmeticInstruction - or - instr instanceof CongruentCopyInstruction - or - instr instanceof LoadTotalOverlapInstruction -} - -private predicate filteredNumberableInstruction(Instruction instr) { - // count rather than strictcount to handle missing AST elements - // separate instanceof and inline casts to avoid failed casts with a count of 0 - instr instanceof VariableAddressInstruction and - count(instr.(VariableAddressInstruction).getIRVariable().getAst()) != 1 - or - instr instanceof ConstantInstruction and - count(instr.getResultIRType()) != 1 - or - instr instanceof FieldAddressInstruction and - count(instr.(FieldAddressInstruction).getField()) != 1 - or - instr instanceof InheritanceConversionInstruction and - ( - count(instr.(InheritanceConversionInstruction).getBaseClass()) != 1 or - count(instr.(InheritanceConversionInstruction).getDerivedClass()) != 1 - ) - or - count(instr.getEnclosingIRFunction()) != 1 -} - -private predicate variableAddressValueNumber( - VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - // The underlying AST element is used as value-numbering key instead of the - // `IRVariable` to work around a problem where a variable or expression with - // multiple types gives rise to multiple `IRVariable`s. - unique( | | instr.getIRVariable().getAst()) = ast -} - -private predicate initializeParameterValueNumber( - InitializeParameterInstruction instr, IRFunction irFunc, Language::AST var -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - // The underlying AST element is used as value-numbering key instead of the - // `IRVariable` to work around a problem where a variable or expression with - // multiple types gives rise to multiple `IRVariable`s. - instr.getIRVariable().getAst() = var -} - -private predicate constantValueNumber( - ConstantInstruction instr, IRFunction irFunc, IRType type, string value -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - unique( | | instr.getResultIRType()) = type and - instr.getValue() = value -} - -private predicate stringConstantValueNumber( - StringConstantInstruction instr, IRFunction irFunc, IRType type, string value -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - instr.getResultIRType() = type and - instr.getValue().getValue() = value -} - -private predicate fieldAddressValueNumber( - FieldAddressInstruction instr, IRFunction irFunc, Language::Field field, - TValueNumber objectAddress -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - unique( | | instr.getField()) = field and - tvalueNumber(instr.getObjectAddress()) = objectAddress -} - -pragma[nomagic] -private predicate binaryValueNumber0( - BinaryInstruction instr, IRFunction irFunc, Opcode opcode, boolean isLeft, - TValueNumber valueNumber -) { - not instr instanceof PointerArithmeticInstruction and - unique( | | instr.getEnclosingIRFunction()) = irFunc and - instr.getOpcode() = opcode and - ( - isLeft = true and - tvalueNumber(instr.getLeft()) = valueNumber - or - isLeft = false and - tvalueNumber(instr.getRight()) = valueNumber - ) -} - -private predicate binaryValueNumber( - BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, - TValueNumber rightOperand -) { - binaryValueNumber0(instr, irFunc, opcode, true, leftOperand) and - binaryValueNumber0(instr, irFunc, opcode, false, rightOperand) -} - -pragma[nomagic] -private predicate pointerArithmeticValueNumber0( - PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, - boolean isLeft, TValueNumber valueNumber -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - instr.getOpcode() = opcode and - instr.getElementSize() = elementSize and - ( - isLeft = true and - tvalueNumber(instr.getLeft()) = valueNumber - or - isLeft = false and - tvalueNumber(instr.getRight()) = valueNumber - ) -} - -private predicate pointerArithmeticValueNumber( - PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, - TValueNumber leftOperand, TValueNumber rightOperand -) { - pointerArithmeticValueNumber0(instr, irFunc, opcode, elementSize, true, leftOperand) and - pointerArithmeticValueNumber0(instr, irFunc, opcode, elementSize, false, rightOperand) -} - -private predicate unaryValueNumber( - UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - not instr instanceof InheritanceConversionInstruction and - not instr instanceof CopyInstruction and - not instr instanceof FieldAddressInstruction and - not instr instanceof TypePreservingConvertInstruction and - instr.getOpcode() = opcode and - tvalueNumber(instr.getUnary()) = operand -} - -private predicate inheritanceConversionValueNumber( - InheritanceConversionInstruction instr, IRFunction irFunc, Opcode opcode, - Language::Class baseClass, Language::Class derivedClass, TValueNumber operand -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - instr.getOpcode() = opcode and - tvalueNumber(instr.getUnary()) = operand and - unique( | | instr.getBaseClass()) = baseClass and - unique( | | instr.getDerivedClass()) = derivedClass -} - -pragma[nomagic] -private predicate loadTotalOverlapValueNumber0( - LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber valueNumber, - boolean isAddress -) { - unique( | | instr.getEnclosingIRFunction()) = irFunc and - instr.getResultIRType() = type and - ( - isAddress = true and - tvalueNumberOfOperand(instr.getSourceAddressOperand()) = valueNumber - or - isAddress = false and - tvalueNumber(instr.getSourceValueOperand().getAnyDef()) = valueNumber - ) -} - -private predicate loadTotalOverlapValueNumber( - LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, - TValueNumber operand -) { - loadTotalOverlapValueNumber0(instr, irFunc, type, operand, true) and - loadTotalOverlapValueNumber0(instr, irFunc, type, memOperand, false) -} - -/** - * Holds if `instr` should be assigned a unique value number because this library does not know how - * to determine if two instances of that instruction are equivalent. - */ -private predicate uniqueValueNumber(Instruction instr) { - not instr.getResultIRType() instanceof IRVoidType and - ( - not numberableInstruction(instr) - or - filteredNumberableInstruction(instr) - ) -} - -/** - * Gets the value number assigned to `instr`, if any. Returns at most one result. - */ -cached -TValueNumber tvalueNumber(Instruction instr) { - result = nonUniqueValueNumber(instr) - or - uniqueValueNumber(instr) and - result = TUniqueValueNumber(instr) -} - -/** - * Gets the value number assigned to the exact definition of `op`, if any. - * Returns at most one result. - */ -TValueNumber tvalueNumberOfOperand(Operand op) { result = tvalueNumber(op.getDef()) } - -/** - * Gets the value number assigned to `instr`, if any, unless that instruction is assigned a unique - * value number. - */ -private TValueNumber nonUniqueValueNumber(Instruction instr) { - exists(IRFunction irFunc | irFunc = instr.getEnclosingIRFunction() | - exists(Language::AST ast | - variableAddressValueNumber(instr, irFunc, ast) and - result = TVariableAddressValueNumber(irFunc, ast) - ) - or - exists(Language::AST var | - initializeParameterValueNumber(instr, irFunc, var) and - result = TInitializeParameterValueNumber(irFunc, var) - ) - or - exists(string value, IRType type | - constantValueNumber(instr, irFunc, type, value) and - result = TConstantValueNumber(irFunc, type, value) - ) - or - exists(IRType type, string value | - stringConstantValueNumber(instr, irFunc, type, value) and - result = TStringConstantValueNumber(irFunc, type, value) - ) - or - exists(Language::Field field, TValueNumber objectAddress | - fieldAddressValueNumber(instr, irFunc, field, objectAddress) and - result = TFieldAddressValueNumber(irFunc, field, objectAddress) - ) - or - exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | - binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and - result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) - ) - or - exists(Opcode opcode, TValueNumber operand | - unaryValueNumber(instr, irFunc, opcode, operand) and - result = TUnaryValueNumber(irFunc, opcode, operand) - ) - or - exists( - Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand - | - inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and - result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) - ) - or - exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | - pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and - result = TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) - ) - or - exists(IRType type, TValueNumber memOperand, TValueNumber operand | - loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and - result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) - ) - or - // The value number of a copy is just the value number of its source value. - result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) - or - // The value number of a type-preserving conversion is just the value - // number of the unconverted value. - result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) - ) -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll deleted file mode 100644 index 5989f9bf0d52..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll +++ /dev/null @@ -1,524 +0,0 @@ -private import AliasAnalysisInternal -private import InputIR -private import AliasAnalysisImports - -private class IntValue = Ints::IntValue; - -/** - * If `instr` is a `SideEffectInstruction`, gets the primary `CallInstruction` that caused the side - * effect. If `instr` is a `CallInstruction`, gets that same `CallInstruction`. - */ -private CallInstruction getPrimaryCall(Instruction instr) { - result = instr - or - result = instr.(SideEffectInstruction).getPrimaryInstruction() -} - -/** - * Holds if `operand` serves as an input argument (or indirection) to `call`, in the position - * specified by `input`. - */ -private predicate isCallInput( - CallInstruction call, Operand operand, AliasModels::FunctionInput input -) { - call = getPrimaryCall(operand.getUse()) and - ( - exists(int index | - input.isParameterOrQualifierAddress(index) and - operand = call.getArgumentOperand(index) - ) - or - exists(int index, ReadSideEffectInstruction read | - input.isParameterDerefOrQualifierObject(index) and - read = call.getAParameterSideEffect(index) and - operand = read.getSideEffectOperand() - ) - ) -} - -/** - * Holds if `instr` serves as a return value or output argument indirection for `call`, in the - * position specified by `output`. - */ -private predicate isCallOutput( - CallInstruction call, Instruction instr, AliasModels::FunctionOutput output -) { - call = getPrimaryCall(instr) and - ( - output.isReturnValue() and instr = call - or - exists(int index, WriteSideEffectInstruction write | - output.isParameterDerefOrQualifierObject(index) and - write = call.getAParameterSideEffect(index) and - instr = write - ) - ) -} - -/** - * Holds if the address in `operand` flows directly to the result of `resultInstr` due to modeled - * address flow through a function call. - */ -private predicate hasAddressFlowThroughCall(Operand operand, Instruction resultInstr) { - exists( - CallInstruction call, AliasModels::FunctionInput input, AliasModels::FunctionOutput output - | - call.getStaticCallTarget().(AliasModels::AliasFunction).hasAddressFlow(input, output) and - isCallInput(call, operand, input) and - isCallOutput(call, resultInstr, output) - ) -} - -/** - * Holds if the operand `tag` of instruction `instr` is used in a way that does - * not result in any address held in that operand from escaping beyond the - * instruction. - */ -private predicate operandIsConsumedWithoutEscaping(Operand operand) { - // The source/destination address of a Load/Store does not escape (but the - // loaded/stored value could). - operand instanceof AddressOperand - or - exists(Instruction instr | - instr = operand.getUse() and - ( - // Neither operand of a Compare escapes. - instr instanceof CompareInstruction - or - // Neither operand of a PointerDiff escapes. - instr instanceof PointerDiffInstruction - or - // Converting an address to a `bool` does not escape the address. - instr.(ConvertInstruction).getResultIRType() instanceof IRBooleanType - or - instr instanceof CallInstruction and - not exists(IREscapeAnalysisConfiguration config | config.useSoundEscapeAnalysis()) - ) - ) - or - // Some standard function arguments never escape - isNeverEscapesArgument(operand) -} - -private predicate operandEscapesDomain(Operand operand) { - not operandIsConsumedWithoutEscaping(operand) and - not operandIsPropagated(operand, _, _) and - not isArgumentForParameter(_, operand, _) and - not isOnlyEscapesViaReturnArgument(operand) and - not operand.getUse() instanceof ReturnValueInstruction and - not operand.getUse() instanceof ReturnIndirectionInstruction -} - -/** - * If the result of instruction `instr` is an integer constant, returns the - * value of that constant. Otherwise, returns unknown. - */ -IntValue getConstantValue(Instruction instr) { - if instr instanceof IntegerConstantInstruction - then result = instr.(IntegerConstantInstruction).getValue().toInt() - else result = Ints::unknown() -} - -/** - * Computes the offset, in bits, by which the result of `instr` differs from the - * pointer argument to `instr`, if that offset is a constant. Otherwise, returns - * unknown. - */ -IntValue getPointerBitOffset(PointerOffsetInstruction instr) { - exists(IntValue bitOffset | - bitOffset = Ints::mul(Ints::mul(getConstantValue(instr.getRight()), instr.getElementSize()), 8) and - ( - instr instanceof PointerAddInstruction and result = bitOffset - or - instr instanceof PointerSubInstruction and result = Ints::neg(bitOffset) - ) - ) -} - -/** - * Holds if any address held in operand `operand` is propagated to the result of `instr`, offset by - * the number of bits in `bitOffset`. If the address is propagated, but the offset is not known to - * be a constant, then `bitOffset` is `unknown()`. - */ -private predicate operandIsPropagated(Operand operand, IntValue bitOffset, Instruction instr) { - // Some functions are known to propagate an argument - hasAddressFlowThroughCall(operand, instr) and - bitOffset = 0 - or - instr = operand.getUse() and - ( - // Converting to a non-virtual base class adds the offset of the base class. - exists(ConvertToNonVirtualBaseInstruction convert | - convert = instr and - bitOffset = Ints::mul(convert.getDerivation().getByteOffset(), 8) - ) - or - // Conversion using dynamic_cast results in an unknown offset - instr instanceof CheckedConvertOrNullInstruction and - bitOffset = Ints::unknown() - or - // Converting to a derived class subtracts the offset of the base class. - exists(ConvertToDerivedInstruction convert | - convert = instr and - bitOffset = Ints::neg(Ints::mul(convert.getDerivation().getByteOffset(), 8)) - ) - or - // Converting to a virtual base class adds an unknown offset. - instr instanceof ConvertToVirtualBaseInstruction and - bitOffset = Ints::unknown() - or - // Conversion to another pointer type propagates the source address. - exists(ConvertInstruction convert, IRType resultType | - convert = instr and - resultType = convert.getResultIRType() and - resultType instanceof IRAddressType and - bitOffset = 0 - ) - or - // Adding an integer to or subtracting an integer from a pointer propagates - // the address with an offset. - exists(PointerOffsetInstruction ptrOffset | - ptrOffset = instr and - operand = ptrOffset.getLeftOperand() and - bitOffset = getPointerBitOffset(ptrOffset) - ) - or - // Computing a field address from a pointer propagates the address plus the - // offset of the field. - bitOffset = Language::getFieldBitOffset(instr.(FieldAddressInstruction).getField()) - or - // A copy propagates the source value. - operand = instr.(CopyInstruction).getSourceValueOperand() and bitOffset = 0 - ) - or - operand = instr.(PhiInstruction).getAnInputOperand() and - // Using `unknown` ensures termination since we cannot keep incrementing a bit offset - // through the back edge of a loop (or through recursion). - bitOffset = Ints::unknown() -} - -private predicate operandEscapesNonReturn(Operand operand) { - exists(Instruction instr | - // The address is propagated to the result of the instruction, and that result itself is returned - operandIsPropagated(operand, _, instr) and resultEscapesNonReturn(instr) - ) - or - // The operand is used in a function call which returns it, and the return value is then returned - exists(CallInstruction ci, Instruction init | - isArgumentForParameter(ci, operand, init) and - ( - resultMayReachReturn(init) and - resultEscapesNonReturn(ci) - or - resultEscapesNonReturn(init) - ) - ) - or - isOnlyEscapesViaReturnArgument(operand) and resultEscapesNonReturn(operand.getUse()) - or - operandEscapesDomain(operand) -} - -private predicate operandMayReachReturn(Operand operand) { - exists(Instruction instr | - // The address is propagated to the result of the instruction, and that result itself is returned - operandIsPropagated(operand, _, instr) and - resultMayReachReturn(instr) - ) - or - // The operand is used in a function call which returns it, and the return value is then returned - exists(CallInstruction ci, Instruction init | - isArgumentForParameter(ci, operand, init) and - resultMayReachReturn(init) and - resultMayReachReturn(ci) - ) - or - // The address is returned - operand.getUse() instanceof ReturnValueInstruction - or - isOnlyEscapesViaReturnArgument(operand) and resultMayReachReturn(operand.getUse()) -} - -private predicate operandReturned(Operand operand, IntValue bitOffset) { - // The address is propagated to the result of the instruction, and that result itself is returned - exists(Instruction instr, IntValue bitOffset1, IntValue bitOffset2 | - operandIsPropagated(operand, bitOffset1, instr) and - resultReturned(instr, bitOffset2) and - bitOffset = Ints::add(bitOffset1, bitOffset2) - ) - or - // The operand is used in a function call which returns it, and the return value is then returned - exists(CallInstruction ci, Instruction init, IntValue bitOffset1, IntValue bitOffset2 | - isArgumentForParameter(ci, operand, init) and - resultReturned(init, bitOffset1) and - resultReturned(ci, bitOffset2) and - bitOffset = Ints::add(bitOffset1, bitOffset2) - ) - or - // The address is returned - operand.getUse() instanceof ReturnValueInstruction and - bitOffset = 0 - or - isOnlyEscapesViaReturnArgument(operand) and - resultReturned(operand.getUse(), _) and - bitOffset = Ints::unknown() -} - -pragma[nomagic] -private predicate initializeParameterInstructionHasVariable( - IRVariable var, InitializeParameterInstruction init -) { - init.getIRVariable() = var -} - -private predicate instructionInitializesThisInFunction( - Language::Function f, InitializeParameterInstruction init -) { - initializeParameterInstructionHasVariable(any(IRThisVariable var), pragma[only_bind_into](init)) and - init.getEnclosingFunction() = f -} - -private predicate isArgumentForParameter( - CallInstruction ci, Operand operand, InitializeParameterInstruction init -) { - exists(Language::Function f | - ci = operand.getUse() and - f = ci.getStaticCallTarget() and - ( - init.getParameter() = f.getParameter(operand.(PositionalArgumentOperand).getIndex()) - or - instructionInitializesThisInFunction(f, init) and - operand instanceof ThisArgumentOperand - ) and - not Language::isFunctionVirtual(f) and - not f instanceof AliasModels::AliasFunction - ) -} - -private predicate isOnlyEscapesViaReturnArgument(Operand operand) { - exists(AliasModels::AliasFunction f | - f = operand.getUse().(CallInstruction).getStaticCallTarget() and - ( - f.parameterEscapesOnlyViaReturn(operand.(PositionalArgumentOperand).getIndex()) - or - f.parameterEscapesOnlyViaReturn(-1) and - operand instanceof ThisArgumentOperand - ) - ) -} - -private predicate isNeverEscapesArgument(Operand operand) { - exists(AliasModels::AliasFunction f | - f = operand.getUse().(CallInstruction).getStaticCallTarget() and - ( - f.parameterNeverEscapes(operand.(PositionalArgumentOperand).getIndex()) - or - f.parameterNeverEscapes(-1) and - operand instanceof ThisArgumentOperand - ) - ) -} - -private predicate resultReturned(Instruction instr, IntValue bitOffset) { - operandReturned(instr.getAUse(), bitOffset) -} - -private predicate resultMayReachReturn(Instruction instr) { operandMayReachReturn(instr.getAUse()) } - -/** - * Holds if any address held in the result of instruction `instr` escapes - * outside the domain of the analysis. - */ -private predicate resultEscapesNonReturn(Instruction instr) { - // The result escapes if it has at least one use that escapes. - operandEscapesNonReturn(instr.getAUse()) - or - // The result also escapes if it is not modeled in SSA, because we do not know where it might be - // used. - not instr.isResultModeled() -} - -/** Holds if `operand` may (transitively) flow to an `AddressOperand`. */ -private predicate consumedAsAddressOperand(Operand operand) { - operand instanceof AddressOperand - or - exists(Operand address | - consumedAsAddressOperand(address) and - operandIsPropagated(operand, _, address.getDef()) - ) -} - -/** - * Holds if `operand` may originate from a base instruction of an allocation, - * and that operand may transitively flow to an `AddressOperand`. - */ -private predicate propagatedFromAllocationBase(Operand operand, Configuration::Allocation allocation) { - consumedAsAddressOperand(operand) and - ( - not exists(Configuration::getOldAllocation(allocation)) and - operand.getDef() = allocation.getABaseInstruction() - or - exists(Operand address | - operandIsPropagated(address, _, operand.getDef()) and - propagatedFromAllocationBase(address, allocation) - ) - ) -} - -private predicate propagatedFromNonAllocationBase(Operand operand) { - exists(Instruction def | - def = operand.getDef() and - not operandIsPropagated(_, _, def) and - not def = any(Configuration::Allocation allocation).getABaseInstruction() - ) - or - exists(Operand address | - operandIsPropagated(address, _, operand.getDef()) and - propagatedFromNonAllocationBase(address) - ) -} - -/** - * Holds if we cannot see all producers of an operand for which allocation also flows into. - */ -private predicate operandConsumesEscaped(Configuration::Allocation allocation) { - exists(AddressOperand address | - propagatedFromAllocationBase(address, allocation) and - propagatedFromNonAllocationBase(address) - ) -} - -/** - * Holds if the address of `allocation` escapes outside the domain of the analysis. This can occur - * either because the allocation's address is taken within the function and escapes, or because the - * allocation is marked as always escaping via `alwaysEscapes()`. - */ -predicate allocationEscapes(Configuration::Allocation allocation) { - allocation.alwaysEscapes() - or - exists(IREscapeAnalysisConfiguration config | config.useSoundEscapeAnalysis() | - resultEscapesNonReturn(allocation.getABaseInstruction()) - or - operandConsumesEscaped(allocation) - ) - or - Configuration::phaseNeedsSoundEscapeAnalysis() and - (resultEscapesNonReturn(allocation.getABaseInstruction()) or operandConsumesEscaped(allocation)) -} - -/** - * Equivalent to `operandIsPropagated()`, but includes interprocedural propagation. - */ -private predicate operandIsPropagatedIncludingByCall( - Operand operand, IntValue bitOffset, Instruction instr -) { - operandIsPropagated(operand, bitOffset, instr) - or - exists(CallInstruction call, Instruction init | - isArgumentForParameter(call, operand, init) and - resultReturned(init, bitOffset) and - instr = call - ) -} - -/** - * Holds if `addrOperand` is at offset `bitOffset` from the value of instruction `base`. The offset - * may be `unknown()`. - */ -private predicate hasBaseAndOffset(AddressOperand addrOperand, Instruction base, IntValue bitOffset) { - base = addrOperand.getDef() and bitOffset = 0 // Base case - or - exists( - Instruction middle, int previousBitOffset, Operand middleOperand, IntValue additionalBitOffset - | - // We already have an offset from `middle`. - hasBaseAndOffset(addrOperand, middle, previousBitOffset) and - // `middle` is propagated from `base`. - operandIsPropagatedIncludingByCall(middleOperand, additionalBitOffset, middle) and - base = middleOperand.getDef() and - bitOffset = Ints::add(previousBitOffset, additionalBitOffset) - ) -} - -/** - * Holds if `addrOperand` is at constant offset `bitOffset` from the value of instruction `base`. - * Only holds for the `base` with the longest chain of propagation to `addrOperand`. - */ -predicate addressOperandBaseAndConstantOffset( - AddressOperand addrOperand, Instruction base, int bitOffset -) { - hasBaseAndOffset(addrOperand, base, bitOffset) and - Ints::hasValue(bitOffset) and - not exists(Instruction previousBase, int previousBitOffset | - hasBaseAndOffset(addrOperand, previousBase, previousBitOffset) and - previousBase = base.getAnOperand().getDef() and - Ints::hasValue(previousBitOffset) - ) -} - -/** - * Gets the allocation into which `addrOperand` points, if known. - */ -Configuration::Allocation getAddressOperandAllocation(AddressOperand addrOperand) { - addressOperandAllocationAndOffset(addrOperand, result, _) -} - -/** - * Holds if `addrOperand` is at offset `bitOffset` from a base instruction of `allocation`. The - * offset may be `unknown()`. - */ -predicate addressOperandAllocationAndOffset( - AddressOperand addrOperand, Configuration::Allocation allocation, IntValue bitOffset -) { - exists(Instruction base | - allocation.getABaseInstruction() = base and - hasBaseAndOffset(addrOperand, base, bitOffset) and - not exists(Instruction previousBase | - hasBaseAndOffset(addrOperand, pragma[only_bind_out](previousBase), _) and - previousBase = base.getAnOperand().getDef() - ) - ) -} - -/** - * Predicates used only for printing annotated IR dumps. These should not be used in production - * queries. - */ -module Print { - string getOperandProperty(Operand operand, string key) { - key = "alloc" and - result = - strictconcat(Configuration::Allocation allocation, IntValue bitOffset | - addressOperandAllocationAndOffset(operand, allocation, bitOffset) - | - allocation.toString() + Ints::getBitOffsetString(bitOffset), ", " - ) - or - key = "prop" and - result = - strictconcat(Instruction destInstr, IntValue bitOffset, string value | - operandIsPropagatedIncludingByCall(operand, bitOffset, destInstr) and - if destInstr = operand.getUse() - then value = "@" + Ints::getBitOffsetString(bitOffset) + "->result" - else value = "@" + Ints::getBitOffsetString(bitOffset) + "->" + destInstr.getResultId() - | - value, ", " - ) - } - - string getInstructionProperty(Instruction instr, string key) { - key = "prop" and - result = - strictconcat(IntValue bitOffset, Operand sourceOperand, string value | - operandIsPropagatedIncludingByCall(sourceOperand, bitOffset, instr) and - if instr = sourceOperand.getUse() - then value = sourceOperand.getDumpId() + Ints::getBitOffsetString(bitOffset) + "->@" - else - value = - sourceOperand.getUse().getResultId() + "." + sourceOperand.getDumpId() + - Ints::getBitOffsetString(bitOffset) + "->@" - | - value, ", " - ) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll deleted file mode 100644 index c4aeaf93cced..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import semmle.code.cpp.ir.implementation.IRConfiguration -import semmle.code.cpp.ir.internal.IntegerConstant as Ints -import semmle.code.cpp.models.interfaces.Alias as AliasModels diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisInternal.qll deleted file mode 100644 index 8a407105080c..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisInternal.qll +++ /dev/null @@ -1,3 +0,0 @@ -import semmle.code.cpp.ir.internal.IRCppLanguage as Language -import semmle.code.cpp.ir.implementation.unaliased_ssa.IR as InputIR -import AliasConfiguration as Configuration diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll deleted file mode 100644 index 8b53e12b8a04..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll +++ /dev/null @@ -1,153 +0,0 @@ -private import AliasConfigurationInternal -private import semmle.code.cpp.ir.implementation.unaliased_ssa.IR -private import cpp -private import AliasAnalysis -private import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SimpleSSA as UnaliasedSsa - -private newtype TAllocation = - TVariableAllocation(IRVariable var) { - // Only model variables that were not already handled in unaliased SSA. - not UnaliasedSsa::canReuseSsaForVariable(var) - } or - TIndirectParameterAllocation(IRAutomaticVariable var) { - exists(InitializeIndirectionInstruction instr | instr.getIRVariable() = var) - } or - TDynamicAllocation(CallInstruction call) { - exists(InitializeDynamicAllocationInstruction instr | instr.getPrimaryInstruction() = call) - } - -/** - * A memory allocation that can be tracked by the AliasedSSA alias analysis. - */ -abstract class Allocation extends TAllocation { - abstract string toString(); - - final string getAllocationString() { result = this.toString() } - - abstract Instruction getABaseInstruction(); - - abstract IRFunction getEnclosingIRFunction(); - - abstract Language::Location getLocation(); - - abstract string getUniqueId(); - - abstract IRType getIRType(); - - abstract predicate isReadOnly(); - - abstract predicate alwaysEscapes(); - - abstract predicate isAlwaysAllocatedOnStack(); - - final predicate isUnaliased() { not allocationEscapes(this) } -} - -class VariableAllocation extends Allocation, TVariableAllocation { - IRVariable var; - - VariableAllocation() { this = TVariableAllocation(var) } - - final override string toString() { result = var.toString() } - - final override VariableInstruction getABaseInstruction() { - result.getIRVariable() = var and - (result instanceof VariableAddressInstruction or result instanceof StringConstantInstruction) - } - - final override IRFunction getEnclosingIRFunction() { result = var.getEnclosingIRFunction() } - - final override Language::Location getLocation() { result = var.getLocation() } - - final override string getUniqueId() { result = var.getUniqueId() } - - final override IRType getIRType() { result = var.getIRType() } - - final override predicate isReadOnly() { var.isReadOnly() } - - final override predicate isAlwaysAllocatedOnStack() { var instanceof IRAutomaticVariable } - - final override predicate alwaysEscapes() { - // All variables with static storage duration have their address escape, even when escape analysis - // is allowed to be unsound. Otherwise, we won't have a definition for any non-escaped global - // variable. Normally, we rely on `AliasedDefinition` to handle that. - not var instanceof IRAutomaticVariable - } - - final IRVariable getIRVariable() { result = var } -} - -class IndirectParameterAllocation extends Allocation, TIndirectParameterAllocation { - IRAutomaticVariable var; - - IndirectParameterAllocation() { this = TIndirectParameterAllocation(var) } - - final override string toString() { result = "*" + var.toString() } - - final override InitializeParameterInstruction getABaseInstruction() { - result.getIRVariable() = var - } - - final override IRFunction getEnclosingIRFunction() { result = var.getEnclosingIRFunction() } - - final override Language::Location getLocation() { result = var.getLocation() } - - final override string getUniqueId() { result = var.getUniqueId() } - - final override IRType getIRType() { result instanceof IRUnknownType } - - final override predicate isReadOnly() { none() } - - final override predicate isAlwaysAllocatedOnStack() { none() } - - final override predicate alwaysEscapes() { none() } - - final IRAutomaticVariable getIRVariable() { result = var } -} - -class DynamicAllocation extends Allocation, TDynamicAllocation { - CallInstruction call; - - DynamicAllocation() { this = TDynamicAllocation(call) } - - final override string toString() { - // This isn't performant, but it's only used in test/dump code right now. - // Dynamic allocations within a function are numbered in the order by start - // line number. This keeps them stable when the function moves within the - // file, or when non-allocating lines are added and removed within the - // function. - exists(int i | - result = "dynamic{" + i.toString() + "}" and - call = - rank[i](CallInstruction rangeCall | - exists(TDynamicAllocation(rangeCall)) and - rangeCall.getEnclosingIRFunction() = call.getEnclosingIRFunction() - | - rangeCall order by rangeCall.getLocation().getStartLine() - ) - ) - } - - final override CallInstruction getABaseInstruction() { result = call } - - final override IRFunction getEnclosingIRFunction() { result = call.getEnclosingIRFunction() } - - final override Language::Location getLocation() { result = call.getLocation() } - - final override string getUniqueId() { result = call.getUniqueId() } - - final override IRType getIRType() { result instanceof IRUnknownType } - - final override predicate isReadOnly() { none() } - - final override predicate isAlwaysAllocatedOnStack() { none() } - - final override predicate alwaysEscapes() { none() } -} - -predicate phaseNeedsSoundEscapeAnalysis() { none() } - -UnaliasedSsa::Allocation getOldAllocation(VariableAllocation allocation) { - UnaliasedSsa::canReuseSsaForVariable(allocation.getIRVariable()) and - result = allocation.getIRVariable() -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfigurationInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfigurationInternal.qll deleted file mode 100644 index bd6c2f4c151a..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfigurationInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import semmle.code.cpp.ir.internal.IRCppLanguage as Language diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll deleted file mode 100644 index 522cd393081e..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ /dev/null @@ -1,1028 +0,0 @@ -import AliasAnalysis -import semmle.code.cpp.Location -import semmle.code.cpp.ir.internal.Overlap -private import semmle.code.cpp.ir.internal.IRCppLanguage as Language -private import semmle.code.cpp.ir.implementation.unaliased_ssa.IR -private import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SSAConstruction as OldSsa -private import semmle.code.cpp.ir.internal.IntegerConstant as Ints -private import semmle.code.cpp.ir.internal.IntegerInterval as Interval -private import semmle.code.cpp.ir.implementation.internal.OperandTag -import AliasConfiguration -private import codeql.util.Boolean - -private class IntValue = Ints::IntValue; - -private predicate isIndirectOrBufferMemoryAccess(MemoryAccessKind kind) { - kind instanceof IndirectMemoryAccess or - kind instanceof BufferMemoryAccess -} - -private predicate hasMemoryAccess( - AddressOperand addrOperand, Allocation var, IntValue startBitOffset, boolean grouped -) { - addressOperandAllocationAndOffset(addrOperand, var, startBitOffset) and - if strictcount(Allocation alloc | addressOperandAllocationAndOffset(addrOperand, alloc, _)) > 1 - then grouped = true - else grouped = false -} - -private predicate hasResultMemoryAccess( - AddressOperand address, Instruction instr, Allocation var, IRType type, - Language::LanguageType languageType, IntValue startBitOffset, IntValue endBitOffset, - boolean isMayAccess, boolean grouped -) { - address = instr.getResultAddressOperand() and - hasMemoryAccess(address, var, startBitOffset, grouped) and - languageType = instr.getResultLanguageType() and - type = languageType.getIRType() and - isIndirectOrBufferMemoryAccess(instr.getResultMemoryAccess()) and - (if instr.hasResultMayMemoryAccess() then isMayAccess = true else isMayAccess = false) and - if exists(type.getByteSize()) - then endBitOffset = Ints::add(startBitOffset, Ints::mul(type.getByteSize(), 8)) - else endBitOffset = Ints::unknown() -} - -private predicate hasOperandMemoryAccess( - AddressOperand address, MemoryOperand operand, Allocation var, IRType type, - Language::LanguageType languageType, IntValue startBitOffset, IntValue endBitOffset, - boolean isMayAccess, boolean grouped -) { - address = operand.getAddressOperand() and - hasMemoryAccess(address, var, startBitOffset, grouped) and - languageType = operand.getLanguageType() and - type = languageType.getIRType() and - isIndirectOrBufferMemoryAccess(operand.getMemoryAccess()) and - (if operand.hasMayReadMemoryAccess() then isMayAccess = true else isMayAccess = false) and - if exists(type.getByteSize()) - then endBitOffset = Ints::add(startBitOffset, Ints::mul(type.getByteSize(), 8)) - else endBitOffset = Ints::unknown() -} - -private Allocation getAnAllocation(AddressOperand address) { - hasResultMemoryAccess(address, _, result, _, _, _, _, _, true) or - hasOperandMemoryAccess(address, _, result, _, _, _, _, _, true) -} - -private module AllocationSet0 = - QlBuiltins::InternSets; - -/** - * A set of allocations containing at least 2 elements. - */ -private class NonSingletonSets extends AllocationSet0::Set { - NonSingletonSets() { strictcount(Allocation var | this.contains(var)) > 1 } - - /** Gets an allocation from this set. */ - Allocation getAnAllocation() { this.contains(result) } - - /** Gets the string representation of this set. */ - string toString() { result = "{" + strictconcat(this.getAnAllocation().toString(), ", ") + "}" } -} - -/** Holds the instersection of `s1` and `s2` is non-empty. */ -private predicate hasOverlappingElement(NonSingletonSets s1, NonSingletonSets s2) { - exists(Allocation var | - s1.contains(var) and - s2.contains(var) - ) -} - -private module AllocationSet = - QlBuiltins::EquivalenceRelation; - -/** - * Holds if `var` is created by the AST element `e`. Furthermore, the value `d` - * represents which branch of the `Allocation` type `var` is from. - */ -private predicate allocationAst(Allocation var, @element e, int d) { - var.(VariableAllocation).getIRVariable().getAst() = e and d = 0 - or - var.(IndirectParameterAllocation).getIRVariable().getAst() = e and d = 1 - or - var.(DynamicAllocation).getABaseInstruction().getAst() = e and d = 2 -} - -/** Holds if `x = y` and `x` is an AST element that creates an `Allocation`. */ -private predicate id(@element x, @element y) { - allocationAst(_, x, _) and - x = y -} - -private predicate idOf(@element x, int y) = equivalenceRelation(id/2)(x, y) - -/** Gets a unique integer representation of `var`. */ -private int getUniqueAllocationId(Allocation var) { - exists(int r, @element e, int d | - allocationAst(var, e, d) and - idOf(e, r) and - result = 3 * r + d - ) -} - -/** - * An equivalence class of a set of allocations. - * - * Any `VariableGroup` will be completely disjunct from any other - * `VariableGroup`. - */ -class VariableGroup extends AllocationSet::EquivalenceClass { - /** Gets the location of this set. */ - final Location getLocation() { result = this.getIRFunction().getLocation() } - - /** Gets the enclosing `IRFunction` of this set. */ - final IRFunction getIRFunction() { - result = unique( | | this.getAnAllocation().getEnclosingIRFunction()) - } - - /** Gets the type of elements contained in this set. */ - final Language::LanguageType getType() { - strictcount(Language::LanguageType langType | - exists(Allocation var | var = this.getAnAllocation() | - hasResultMemoryAccess(_, _, var, _, langType, _, _, _, true) or - hasOperandMemoryAccess(_, _, var, _, langType, _, _, _, true) - ) - ) = 1 and - exists(Allocation var | var = this.getAnAllocation() | - hasResultMemoryAccess(_, _, var, _, result, _, _, _, true) or - hasOperandMemoryAccess(_, _, var, _, result, _, _, _, true) - ) - or - strictcount(Language::LanguageType langType | - exists(Allocation var | var = this.getAnAllocation() | - hasResultMemoryAccess(_, _, var, _, langType, _, _, _, true) or - hasOperandMemoryAccess(_, _, var, _, langType, _, _, _, true) - ) - ) > 1 and - result = any(IRUnknownType type).getCanonicalLanguageType() - } - - /** Gets an allocation of this set. */ - final Allocation getAnAllocation() { - exists(AllocationSet0::Set set | - this = AllocationSet::getEquivalenceClass(set) and - set.contains(result) - ) - } - - /** Gets a unique string representing this set. */ - final private string getUniqueId() { - result = strictconcat(getUniqueAllocationId(this.getAnAllocation()).toString(), ",") - } - - /** - * Gets the order that this set should be initialized in. - * - * Note: This is _not_ the order in which the _members_ of the set should be - * initialized. Rather, it represents the order in which the set should be - * initialized in relation to other sets. That is, if - * ``` - * getInitializationOrder() = 2 - * ``` - * then this set will be initialized as the second (third) set in the - * enclosing function. In order words, the third `UninitializedGroup` - * instruction in the entry block of the enclosing function will initialize - * this set of allocations. - */ - final int getInitializationOrder() { - exists(IRFunction func | - func = this.getIRFunction() and - this = - rank[result + 1](VariableGroup vg, string uniq | - vg.getIRFunction() = func and uniq = vg.getUniqueId() - | - vg order by uniq - ) - ) - } - - string toString() { result = "{" + strictconcat(this.getAnAllocation().toString(), ", ") + "}" } -} - -private newtype TMemoryLocation = - TVariableMemoryLocation( - Allocation var, IRType type, Language::LanguageType languageType, IntValue startBitOffset, - IntValue endBitOffset, boolean isMayAccess - ) { - ( - hasResultMemoryAccess(_, _, var, type, _, startBitOffset, endBitOffset, isMayAccess, false) - or - hasOperandMemoryAccess(_, _, var, type, _, startBitOffset, endBitOffset, isMayAccess, false) - or - // For a stack variable, always create a memory location for the entire variable. - var.isAlwaysAllocatedOnStack() and - type = var.getIRType() and - startBitOffset = 0 and - endBitOffset = type.getByteSize() * 8 and - isMayAccess = false - ) and - languageType = type.getCanonicalLanguageType() - } or - TEntireAllocationMemoryLocation(Allocation var, Boolean isMayAccess) { - var instanceof IndirectParameterAllocation or - var instanceof DynamicAllocation - } or - TGroupedMemoryLocation(VariableGroup vg, Boolean isMayAccess, Boolean isAll) or - TUnknownMemoryLocation(IRFunction irFunc, Boolean isMayAccess) or - TAllNonLocalMemory(IRFunction irFunc, Boolean isMayAccess) or - TAllAliasedMemory(IRFunction irFunc, Boolean isMayAccess) - -/** - * A memory location accessed by a memory operand or memory result. In this implementation, the location is - * one of the following: - * - `VariableMemoryLocation` - A location within a known `IRVariable`, at an offset that is either a constant or is - * unknown. - * - `UnknownMemoryLocation` - A location not known to be within a specific `IRVariable`. - * - * Some of these memory locations will be filtered out for performance reasons before being passed to SSA construction. - */ -abstract class MemoryLocation0 extends TMemoryLocation { - final string toString() { - if this.isMayAccess() - then result = "?" + this.toStringInternal() - else result = this.toStringInternal() - } - - abstract string toStringInternal(); - - abstract VirtualVariable getVirtualVariable(); - - abstract Language::LanguageType getType(); - - abstract string getUniqueId(); - - abstract IRFunction getIRFunction(); - - abstract Location getLocation(); - - final IRType getIRType() { result = this.getType().getIRType() } - - abstract predicate isMayAccess(); - - /** - * Gets an allocation associated with this `MemoryLocation`. - * - * This returns zero or one results in all cases except when `this` is an - * instance of `GroupedMemoryLocation`. When `this` is an instance of - * `GroupedMemoryLocation` this predicate always returns two or more results. - */ - Allocation getAnAllocation() { none() } - - /** - * Holds if the location cannot be overwritten except by definition of a `MemoryLocation` for - * which `def.canDefineReadOnly()` holds. - */ - predicate isReadOnly() { none() } - - /** - * Holds if a definition of this location can be the definition of a read-only use location. - */ - predicate canDefineReadOnly() { none() } - - /** - * Holds if the location always represents memory allocated on the stack (for example, a variable - * with automatic storage duration). - */ - predicate isAlwaysAllocatedOnStack() { none() } - - final predicate canReuseSsa() { none() } -} - -/** - * Represents a set of `MemoryLocation`s that cannot overlap with - * `MemoryLocation`s outside of the set. The `VirtualVariable` will be - * represented by a `MemoryLocation` that totally overlaps all other - * `MemoryLocations` in the set. - */ -abstract class VirtualVariable extends MemoryLocation0 { } - -abstract class AllocationMemoryLocation extends MemoryLocation0 { - Allocation var; - boolean isMayAccess; - - bindingset[isMayAccess] - AllocationMemoryLocation() { any() } - - final override VirtualVariable getVirtualVariable() { - if allocationEscapes(var) - then result = TAllAliasedMemory(var.getEnclosingIRFunction(), false) - else ( - // It may be that the grouped memory location contains an escaping - // allocation. In that case, the virtual variable is still the memory - // location that represents all aliased memory. Thus, we need to - // call `getVirtualVariable` on the grouped memory location. - result = getGroupedMemoryLocation(var, false, false).getVirtualVariable() - or - not exists(getGroupedMemoryLocation(var, false, false)) and - result.(AllocationMemoryLocation).getAnAllocation() = var - ) - } - - final override IRFunction getIRFunction() { result = var.getEnclosingIRFunction() } - - final override Location getLocation() { result = var.getLocation() } - - final override Allocation getAnAllocation() { result = var } - - final override predicate isMayAccess() { isMayAccess = true } - - final override predicate isReadOnly() { var.isReadOnly() } -} - -/** - * An access to memory within a single known `IRVariable`. The variable may be either an unescaped variable - * (with its own `VirtualIRVariable`) or an escaped variable (assigned to `UnknownVirtualVariable`). - */ -class VariableMemoryLocation extends TVariableMemoryLocation, AllocationMemoryLocation { - IRType type; - Language::LanguageType languageType; - IntValue startBitOffset; - IntValue endBitOffset; - - VariableMemoryLocation() { - this = - TVariableMemoryLocation(var, type, languageType, startBitOffset, endBitOffset, isMayAccess) - } - - private string getIntervalString() { - if this.coversEntireVariable() - then result = "" - else result = Interval::getIntervalString(startBitOffset, endBitOffset) - } - - private string getTypeString() { - if this.coversEntireVariable() and type = var.getIRType() - then result = "" - else result = "<" + languageType.toString() + ">" - } - - final override string toStringInternal() { - result = var.toString() + this.getIntervalString() + this.getTypeString() - } - - final override Language::LanguageType getType() { - if - strictcount(Language::LanguageType accessType | - hasResultMemoryAccess(_, _, var, type, accessType, startBitOffset, endBitOffset, _, false) or - hasOperandMemoryAccess(_, _, var, type, accessType, startBitOffset, endBitOffset, _, false) - ) = 1 - then - // All of the accesses have the same `LanguageType`, so just use that. - hasResultMemoryAccess(_, _, var, type, result, startBitOffset, endBitOffset, _, false) or - hasOperandMemoryAccess(_, _, var, type, result, startBitOffset, endBitOffset, _, false) - else - // There is no single type for all accesses, so just use the canonical one for this `IRType`. - result = type.getCanonicalLanguageType() - } - - final IntValue getStartBitOffset() { result = startBitOffset } - - final IntValue getEndBitOffset() { result = endBitOffset } - - final override string getUniqueId() { - result = - var.getUniqueId() + Interval::getIntervalString(startBitOffset, endBitOffset) + "<" + - type.getIdentityString() + ">" - } - - final override predicate isAlwaysAllocatedOnStack() { var.isAlwaysAllocatedOnStack() } - - /** - * Holds if this memory location covers the entire variable. - */ - final predicate coversEntireVariable() { this.varIRTypeHasBitRange(startBitOffset, endBitOffset) } - - pragma[noinline] - private predicate varIRTypeHasBitRange(int start, int end) { - start = 0 and - end = var.getIRType().getByteSize() * 8 - } -} - -/** - * A group of allocations represented as a single memory location. - * - * If `isAll()` holds then this memory location represents all the enclosing - * allocations, and if `isSome()` holds then this memory location represents - * one or more of the enclosing allocations. - * - * For example, consider the following snippet: - * ``` - * int* p; - * int a, b; - * if(b) { - * p = &a; - * } else { - * p = &b; - * } - * *p = 42; - * ``` - * - * The write memory location associated with the write to `*p` writes to a - * grouped memory location representing the _some_ allocation in the set - * `{a, b}`, and the subsequent `Chi` instruction merges the new value of - * `{a, b}` into a memory location that represents _all_ of the allocations - * in the set. - */ -class GroupedMemoryLocation extends TGroupedMemoryLocation, MemoryLocation0 { - VariableGroup vg; - boolean isMayAccess; - boolean isAll; - - GroupedMemoryLocation() { this = TGroupedMemoryLocation(vg, isMayAccess, isAll) } - - final override Location getLocation() { result = vg.getLocation() } - - final override IRFunction getIRFunction() { result = vg.getIRFunction() } - - final override predicate isMayAccess() { isMayAccess = true } - - final override string getUniqueId() { - if this.isAll() - then result = "All{" + strictconcat(vg.getAnAllocation().getUniqueId(), ", ") + "}" - else result = "Some{" + strictconcat(vg.getAnAllocation().getUniqueId(), ", ") + "}" - } - - final override string toStringInternal() { result = this.getUniqueId() } - - final override Language::LanguageType getType() { result = vg.getType() } - - final override VirtualVariable getVirtualVariable() { - if allocationEscapes(this.getAnAllocation()) - then result = TAllAliasedMemory(vg.getIRFunction(), false) - else result = TGroupedMemoryLocation(vg, false, true) - } - - /** Gets an allocation of this memory location. */ - override Allocation getAnAllocation() { result = vg.getAnAllocation() } - - /** Gets the set of allocations associated with this memory location. */ - VariableGroup getGroup() { result = vg } - - /** Holds if this memory location represents all the enclosing allocations. */ - predicate isAll() { isAll = true } - - /** Holds if this memory location represents one or more of the enclosing allocations. */ - predicate isSome() { isAll = false } -} - -private GroupedMemoryLocation getGroupedMemoryLocation( - Allocation alloc, boolean isMayAccess, boolean isAll -) { - result.getAnAllocation() = alloc and - ( - isMayAccess = true and result.isMayAccess() - or - isMayAccess = false and not result.isMayAccess() - ) and - ( - isAll = true and result.isAll() - or - isAll = false and result.isSome() - ) -} - -class EntireAllocationMemoryLocation extends TEntireAllocationMemoryLocation, - AllocationMemoryLocation -{ - EntireAllocationMemoryLocation() { this = TEntireAllocationMemoryLocation(var, isMayAccess) } - - final override string toStringInternal() { result = var.toString() } - - final override Language::LanguageType getType() { - result = any(IRUnknownType unknownType).getCanonicalLanguageType() - } - - final override string getUniqueId() { result = var.getUniqueId() } -} - -class EntireAllocationVirtualVariable extends EntireAllocationMemoryLocation, VirtualVariable { - EntireAllocationVirtualVariable() { - not allocationEscapes(var) and - not this.isMayAccess() - } -} - -/** - * Represents the `MemoryLocation` for an `IRVariable` that acts as its own `VirtualVariable`. Includes any - * `VariableMemoryLocation` that exactly overlaps its entire `IRVariable`, and only if that `IRVariable` does not - * escape. - */ -class VariableVirtualVariable extends VariableMemoryLocation, VirtualVariable { - VariableVirtualVariable() { - not allocationEscapes(var) and - type = var.getIRType() and - this.coversEntireVariable() and - not this.isMayAccess() - } -} - -class GroupedVirtualVariable extends GroupedMemoryLocation, VirtualVariable { - GroupedVirtualVariable() { - forex(Allocation var | var = this.getAnAllocation() | not allocationEscapes(var)) and - not this.isMayAccess() and - this.isAll() - } -} - -/** - * An access to memory that is not known to be confined to a specific `IRVariable`. - */ -class UnknownMemoryLocation extends TUnknownMemoryLocation, MemoryLocation0 { - IRFunction irFunc; - boolean isMayAccess; - - UnknownMemoryLocation() { this = TUnknownMemoryLocation(irFunc, isMayAccess) } - - final override string toStringInternal() { result = "{Unknown}" } - - final override VirtualVariable getVirtualVariable() { result = TAllAliasedMemory(irFunc, false) } - - final override Language::LanguageType getType() { - result = any(IRUnknownType type).getCanonicalLanguageType() - } - - final override IRFunction getIRFunction() { result = irFunc } - - final override Location getLocation() { result = irFunc.getLocation() } - - final override string getUniqueId() { result = "{Unknown}" } - - final override predicate isMayAccess() { isMayAccess = true } -} - -/** - * An access to memory that is not known to be confined to a specific `IRVariable`, but is known to - * not access memory on the current function's stack frame. - */ -class AllNonLocalMemory extends TAllNonLocalMemory, MemoryLocation0 { - IRFunction irFunc; - boolean isMayAccess; - - AllNonLocalMemory() { this = TAllNonLocalMemory(irFunc, isMayAccess) } - - final override string toStringInternal() { result = "{AllNonLocal}" } - - final override AliasedVirtualVariable getVirtualVariable() { result.getIRFunction() = irFunc } - - final override Language::LanguageType getType() { - result = any(IRUnknownType type).getCanonicalLanguageType() - } - - final override IRFunction getIRFunction() { result = irFunc } - - final override Location getLocation() { result = irFunc.getLocation() } - - final override string getUniqueId() { result = "{AllNonLocal}" } - - final override predicate isMayAccess() { isMayAccess = true } - - override predicate canDefineReadOnly() { - // A "must" access that defines all non-local memory appears only on the `InitializeNonLocal` - // instruction, which provides the initial definition for all memory outside of the current - // function's stack frame. This memory includes string literals and other read-only globals, so - // we allow such an access to be the definition for a use of a read-only location. - not this.isMayAccess() - } -} - -/** - * An access to all aliased memory. - */ -class AllAliasedMemory extends TAllAliasedMemory, MemoryLocation0 { - IRFunction irFunc; - boolean isMayAccess; - - AllAliasedMemory() { this = TAllAliasedMemory(irFunc, isMayAccess) } - - final override string toStringInternal() { result = "{AllAliased}" } - - final override Language::LanguageType getType() { - result = any(IRUnknownType type).getCanonicalLanguageType() - } - - final override IRFunction getIRFunction() { result = irFunc } - - final override Location getLocation() { result = irFunc.getLocation() } - - final override string getUniqueId() { result = " " + this.toString() } - - final override VirtualVariable getVirtualVariable() { result = TAllAliasedMemory(irFunc, false) } - - final override predicate isMayAccess() { isMayAccess = true } -} - -/** A virtual variable that groups all escaped memory within a function. */ -class AliasedVirtualVariable extends AllAliasedMemory, VirtualVariable { - AliasedVirtualVariable() { not this.isMayAccess() } -} - -/** - * Gets the overlap relationship between the definition location `def` and the use location `use`. - */ -Overlap getOverlap(MemoryLocation0 def, MemoryLocation0 use) { - exists(Overlap overlap | - // Compute the overlap based only on the extent. - overlap = getExtentOverlap(def, use) and - // Filter out attempts to write to read-only memory. - (def.canDefineReadOnly() or not use.isReadOnly()) and - if def.isMayAccess() - then - // No matter what kind of extent overlap we have, the final overlap is still - // `MayPartiallyOverlap`, because the def might not have written all of the bits of the use - // location. - result instanceof MayPartiallyOverlap - else - if - overlap instanceof MustExactlyOverlap and - (use.isMayAccess() or not def.getIRType() = use.getIRType()) - then - // Can't exactly overlap with a "may" use or a use of a different type. - result instanceof MustTotallyOverlap - else result = overlap - ) -} - -/** - * Gets the overlap relationship between the definition location `def` and the use location `use`, - * based only on the set of memory locations accessed. Handling of "may" accesses and read-only - * locations occurs in `getOverlap()`. - */ -private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { - // The def and the use must have the same virtual variable, or no overlap is possible. - ( - // AllAliasedMemory must totally overlap any location within the same virtual variable. - def.getVirtualVariable() = use.getVirtualVariable() and - def instanceof AllAliasedMemory and - result instanceof MustTotallyOverlap - or - // An UnknownMemoryLocation may partially overlap any Location within the same virtual variable, - // even itself. - def.getVirtualVariable() = use.getVirtualVariable() and - def instanceof UnknownMemoryLocation and - result instanceof MayPartiallyOverlap - or - def.getVirtualVariable() = use.getVirtualVariable() and - def instanceof AllNonLocalMemory and - ( - // AllNonLocalMemory exactly overlaps itself. - use instanceof AllNonLocalMemory and - result instanceof MustExactlyOverlap - or - not use instanceof AllNonLocalMemory and - not use.isAlwaysAllocatedOnStack() and - if use instanceof VariableMemoryLocation - then - // AllNonLocalMemory totally overlaps any non-local variable. - result instanceof MustTotallyOverlap - else - // AllNonLocalMemory may partially overlap any other location within the same virtual - // variable, except a stack variable. - result instanceof MayPartiallyOverlap - ) - or - def.getVirtualVariable() = use.getVirtualVariable() and - def instanceof EntireAllocationMemoryLocation and - ( - // EntireAllocationMemoryLocation exactly overlaps any EntireAllocationMemoryLocation for the - // same allocation. Checking the allocation, rather than the memory location itself, ensures - // that we get the right relationship between the "must" and "may" memory locations for that - // allocation. - // Note that if one of the locations is a "may" access, the overlap will be downgraded to - // `MustTotallyOverlap` or `MayPartialOverlap` in `getOverlap()`. - use.(EntireAllocationMemoryLocation).getAnAllocation() = def.getAnAllocation() and - result instanceof MustExactlyOverlap - or - not use instanceof EntireAllocationMemoryLocation and - if def.getAnAllocation() = use.getAnAllocation() - then - // EntireAllocationMemoryLocation totally overlaps any location within - // the same allocation. - result instanceof MustTotallyOverlap - else ( - // There is no overlap with a location that's known to belong to a - // different allocation, but all other locations may partially overlap. - not exists(use.getAnAllocation()) and - result instanceof MayPartiallyOverlap - ) - ) - or - exists(GroupedMemoryLocation group | - group = def and - def.getVirtualVariable() = use.getVirtualVariable() - | - ( - use instanceof UnknownMemoryLocation or - use instanceof AllAliasedMemory - ) and - result instanceof MayPartiallyOverlap - or - group.isAll() and - ( - group.getAnAllocation() = - [ - use.(EntireAllocationMemoryLocation).getAnAllocation(), - use.(VariableMemoryLocation).getAnAllocation() - ] - or - use.(GroupedMemoryLocation).isSome() - ) and - result instanceof MustTotallyOverlap - or - group.isAll() and - use.(GroupedMemoryLocation).isAll() and - result instanceof MustExactlyOverlap - or - group.isSome() and - ( - use instanceof EntireAllocationMemoryLocation - or - use instanceof VariableMemoryLocation - or - use instanceof GroupedMemoryLocation - ) and - result instanceof MayPartiallyOverlap - ) - or - exists(VariableMemoryLocation defVariableLocation | - defVariableLocation = def and - ( - // A VariableMemoryLocation may partially overlap an unknown location within the same - // virtual variable. - def.getVirtualVariable() = use.getVirtualVariable() and - ( - use instanceof UnknownMemoryLocation or - use instanceof AllAliasedMemory or - use instanceof EntireAllocationMemoryLocation or - use instanceof GroupedMemoryLocation - ) and - result instanceof MayPartiallyOverlap - or - // A VariableMemoryLocation that is not a local variable may partially overlap an - // AllNonLocalMemory within the same virtual variable. - def.getVirtualVariable() = use.getVirtualVariable() and - use instanceof AllNonLocalMemory and - result instanceof MayPartiallyOverlap and - not defVariableLocation.isAlwaysAllocatedOnStack() - or - // A VariableMemoryLocation overlaps another location within the same variable based on the - // relationship of the two offset intervals. - exists(Overlap intervalOverlap | - intervalOverlap = getVariableMemoryLocationOverlap(def, use) and - if intervalOverlap instanceof MustExactlyOverlap - then result instanceof MustExactlyOverlap - else - if defVariableLocation.coversEntireVariable() - then - // The definition covers the entire variable, so assume that it totally overlaps the use, even if the - // interval for the use is unknown or outside the bounds of the variable. - result instanceof MustTotallyOverlap - else - // Just use the overlap relation of the interval. - result = intervalOverlap - ) - ) - ) - ) -} - -/* - * The following predicates compute the overlap relation between `VariableMemoryLocation`s in the - * same `VirtualVariable` as follows: - * 1. In `isRelevantOffset`, compute the set of offsets within each virtual variable (linear in - * the number of VMLs) - * 2. In `isCoveredOffset`, rank the offsets within each virtual variable (linear in the number - * of VMLs) - * 3. In `isCoveredOffset`, compute the set of ranks that each VML with known start and end - * offsets covers (linear in the size of the overlap set) - * 4. In `overlappingVariableMemoryLocations`, compute the set of overlapping pairs of VMLs using a - * join on `isCoveredOffset` (linear in the size of the overlap set) - * 5. In `overlappingIRVariableMemoryLocations`, restrict to only the pairs that share an - * `IRVariable` (linear in the size of the overlap set) - * 5. In `getVariableMemoryLocationOverlap`, compute the precise overlap relation for each - * overlapping pair of VMLs (linear in the size of the overlap set) - */ - -private predicate isRelevantOffset(VirtualVariable vv, IntValue offset) { - exists(VariableMemoryLocation ml | ml.getVirtualVariable() = vv | - ml.getStartBitOffset() = offset - or - ml.getEndBitOffset() = offset - ) -} - -private predicate isRelatableMemoryLocation(VariableMemoryLocation vml) { - vml.getEndBitOffset() != Ints::unknown() and - vml.getStartBitOffset() != Ints::unknown() -} - -private predicate isCoveredOffset(Allocation var, int offsetRank, VariableMemoryLocation vml) { - exists(int startRank, int endRank, VirtualVariable vvar | - vml.getStartBitOffset() = rank[startRank](IntValue offset_ | isRelevantOffset(vvar, offset_)) and - vml.getEndBitOffset() = rank[endRank](IntValue offset_ | isRelevantOffset(vvar, offset_)) and - var = vml.getAnAllocation() and - vvar = vml.getVirtualVariable() and - isRelatableMemoryLocation(vml) and - offsetRank in [startRank .. endRank] - ) -} - -private predicate hasUnknownOffset(Allocation var, VariableMemoryLocation vml) { - vml.getAnAllocation() = var and - ( - vml.getStartBitOffset() = Ints::unknown() or - vml.getEndBitOffset() = Ints::unknown() - ) -} - -private predicate overlappingIRVariableMemoryLocations( - VariableMemoryLocation def, VariableMemoryLocation use -) { - exists(Allocation var, int offsetRank | - isCoveredOffset(var, offsetRank, def) and - isCoveredOffset(var, offsetRank, use) - ) - or - hasUnknownOffset(use.getAnAllocation(), def) - or - hasUnknownOffset(def.getAnAllocation(), use) -} - -private Overlap getVariableMemoryLocationOverlap( - VariableMemoryLocation def, VariableMemoryLocation use -) { - overlappingIRVariableMemoryLocations(def, use) and - result = - Interval::getOverlap(def.getStartBitOffset(), def.getEndBitOffset(), use.getStartBitOffset(), - use.getEndBitOffset()) -} - -/** - * Holds if the def/use information for the result of `instr` can be reused from the previous - * iteration of the IR. - */ -predicate canReuseSsaForOldResult(Instruction instr) { OldSsa::canReuseSsaForMemoryResult(instr) } - -bindingset[result, b] -private boolean unbindBool(boolean b) { result != b.booleanNot() } - -/** Gets the number of overlapping uses of `def`. */ -private int numberOfOverlappingUses(MemoryLocation0 def) { - result = strictcount(MemoryLocation0 use | exists(getOverlap(def, use))) -} - -/** - * Holds if `def` is a busy definition. That is, it has a large number of - * overlapping uses. - */ -predicate isBusyDef(MemoryLocation0 def) { numberOfOverlappingUses(def) > 1024 } - -/** Holds if `use` is a use that overlaps with a busy definition. */ -private predicate useOverlapWithBusyDef(MemoryLocation0 use) { - exists(MemoryLocation0 def | - exists(getOverlap(def, use)) and - isBusyDef(def) - ) -} - -final private class FinalMemoryLocation = MemoryLocation0; - -/** - * A memory location accessed by a memory operand or memory result. In this implementation, the location is - * one of the following: - * - `VariableMemoryLocation` - A location within a known `IRVariable`, at an offset that is either a constant or is - * unknown. - * - `UnknownMemoryLocation` - A location not known to be within a specific `IRVariable`. - * - * Compared to `MemoryLocation0`, this class does not contain memory locations that represent uses of busy definitions. - */ -class MemoryLocation extends FinalMemoryLocation { - MemoryLocation() { not useOverlapWithBusyDef(this) } -} - -bindingset[fun] -pragma[inline_late] -private MemoryLocation getUnknownMemoryLocation(IRFunction fun, boolean isMayAccess) { - result = TUnknownMemoryLocation(fun, isMayAccess) -} - -bindingset[fun] -pragma[inline_late] -private MemoryLocation getAllAliasedMemory(IRFunction fun, boolean isMayAccess) { - result = TAllAliasedMemory(fun, isMayAccess) -} - -bindingset[fun] -pragma[inline_late] -private MemoryLocation getAllNonLocalMemory(IRFunction fun, boolean isMayAccess) { - result = TAllNonLocalMemory(fun, isMayAccess) -} - -MemoryLocation getResultMemoryLocation(Instruction instr) { - not canReuseSsaForOldResult(instr) and - exists(MemoryAccessKind kind, boolean isMayAccess | - kind = instr.getResultMemoryAccess() and - (if instr.hasResultMayMemoryAccess() then isMayAccess = true else isMayAccess = false) and - ( - ( - isIndirectOrBufferMemoryAccess(kind) and - if hasResultMemoryAccess(_, instr, _, _, _, _, _, _, _) - then - exists( - Allocation var, IRType type, IntValue startBitOffset, IntValue endBitOffset, - boolean grouped - | - hasResultMemoryAccess(_, instr, var, type, _, startBitOffset, endBitOffset, isMayAccess, - grouped) - | - // If the instruction is only associated with one allocation we assign it a `VariableMemoryLocation` - if grouped = false - then - result = - TVariableMemoryLocation(var, type, _, startBitOffset, endBitOffset, - unbindBool(isMayAccess)) - else - // And otherwise we assign it a memory location that groups all the relevant memory locations into one. - result = getGroupedMemoryLocation(var, unbindBool(isMayAccess), false) - ) - else result = getUnknownMemoryLocation(instr.getEnclosingIRFunction(), isMayAccess) - ) - or - kind instanceof EntireAllocationMemoryAccess and - result = - TEntireAllocationMemoryLocation(getAddressOperandAllocation(instr.getResultAddressOperand()), - unbindBool(isMayAccess)) - or - kind instanceof EscapedMemoryAccess and - result = getAllAliasedMemory(instr.getEnclosingIRFunction(), isMayAccess) - or - kind instanceof NonLocalMemoryAccess and - result = getAllNonLocalMemory(instr.getEnclosingIRFunction(), isMayAccess) - ) - ) -} - -private MemoryLocation0 getOperandMemoryLocation0(MemoryOperand operand, boolean isMayAccess) { - not canReuseSsaForOldResult(operand.getAnyDef()) and - exists(MemoryAccessKind kind | - kind = operand.getMemoryAccess() and - (if operand.hasMayReadMemoryAccess() then isMayAccess = true else isMayAccess = false) and - ( - ( - isIndirectOrBufferMemoryAccess(kind) and - if hasOperandMemoryAccess(_, operand, _, _, _, _, _, _, _) - then - exists( - Allocation var, IRType type, IntValue startBitOffset, IntValue endBitOffset, - boolean grouped - | - hasOperandMemoryAccess(_, operand, var, type, _, startBitOffset, endBitOffset, - isMayAccess, grouped) - | - // If the operand is only associated with one memory location we assign it a `VariableMemoryLocation` - if grouped = false - then - result = - TVariableMemoryLocation(var, type, _, startBitOffset, endBitOffset, isMayAccess) - else - // And otherwise we assign it a memory location that groups all relevant memory locations into one. - result = getGroupedMemoryLocation(var, isMayAccess, false) - ) - else result = TUnknownMemoryLocation(operand.getEnclosingIRFunction(), isMayAccess) - ) - or - kind instanceof EntireAllocationMemoryAccess and - result = - TEntireAllocationMemoryLocation(getAddressOperandAllocation(operand.getAddressOperand()), - isMayAccess) - or - kind instanceof EscapedMemoryAccess and - result = TAllAliasedMemory(operand.getEnclosingIRFunction(), isMayAccess) - or - kind instanceof NonLocalMemoryAccess and - result = TAllNonLocalMemory(operand.getEnclosingIRFunction(), isMayAccess) - ) - ) -} - -MemoryLocation getOperandMemoryLocation(MemoryOperand operand) { - exists(MemoryLocation0 use0, boolean isMayAccess | - use0 = getOperandMemoryLocation0(operand, isMayAccess) - | - result = use0 - or - // If `use0` overlaps with a busy definition we turn it into a use - // of `UnknownMemoryLocation`. - not use0 instanceof MemoryLocation and - result = TUnknownMemoryLocation(operand.getEnclosingIRFunction(), isMayAccess) - ) -} - -/** Gets the start bit offset of a `MemoryLocation`, if any. */ -int getStartBitOffset(VariableMemoryLocation location) { - result = location.getStartBitOffset() and Ints::hasValue(result) -} - -/** Gets the end bit offset of a `MemoryLocation`, if any. */ -int getEndBitOffset(VariableMemoryLocation location) { - result = location.getEndBitOffset() and Ints::hasValue(result) -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRBlockImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRBlockImports.qll deleted file mode 100644 index d1b46ed35c81..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRBlockImports.qll +++ /dev/null @@ -1 +0,0 @@ -import semmle.code.cpp.ir.implementation.EdgeKind as EdgeKind diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRConsistencyImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRConsistencyImports.qll deleted file mode 100644 index beef0075752a..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRConsistencyImports.qll +++ /dev/null @@ -1 +0,0 @@ -import semmle.code.cpp.ir.internal.IRCppLanguageDebug as LanguageDebug diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRFunctionImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRFunctionImports.qll deleted file mode 100644 index 8ec63b7c1cbd..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRFunctionImports.qll +++ /dev/null @@ -1 +0,0 @@ -import semmle.code.cpp.ir.implementation.internal.IRFunctionBase as IRFunctionBase diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRImports.qll deleted file mode 100644 index 42d6e7db693c..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import semmle.code.cpp.ir.implementation.EdgeKind as EdgeKind -import semmle.code.cpp.ir.implementation.IRType as IRType -import semmle.code.cpp.ir.implementation.MemoryAccessKind as MemoryAccessKind diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRInternal.qll deleted file mode 100644 index 3a7a08accc0d..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRInternal.qll +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cpp.ir.internal.IRCppLanguage as Language -import SSAConstruction as Construction -import semmle.code.cpp.ir.implementation.IRConfiguration as IRConfiguration -import semmle.code.cpp.ir.implementation.raw.internal.IRConstruction::Raw as Raw diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRVariableImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRVariableImports.qll deleted file mode 100644 index 8c60565defc4..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRVariableImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import semmle.code.cpp.ir.implementation.IRType as IRType -import semmle.code.cpp.ir.implementation.TempVariableTag as TempVariableTag -import semmle.code.cpp.ir.internal.IRUtilities as IRUtilities -import semmle.code.cpp.ir.internal.TempVariableTag as TTempVariableTag -import semmle.code.cpp.ir.implementation.internal.TIRVariable as TIRVariable diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/InstructionImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/InstructionImports.qll deleted file mode 100644 index 946fd770e94a..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/InstructionImports.qll +++ /dev/null @@ -1,6 +0,0 @@ -import semmle.code.cpp.ir.implementation.EdgeKind as EdgeKind -import semmle.code.cpp.ir.implementation.IRType as IRType -import semmle.code.cpp.ir.implementation.MemoryAccessKind as MemoryAccessKind -import semmle.code.cpp.ir.implementation.Opcode as Opcode -import semmle.code.cpp.ir.implementation.internal.OperandTag as OperandTag -import semmle.code.cpp.ir.internal.Overlap as Overlap diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandImports.qll deleted file mode 100644 index d0e013d1fba0..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import semmle.code.cpp.ir.implementation.MemoryAccessKind as MemoryAccessKind -import semmle.code.cpp.ir.implementation.IRType as IRType -import semmle.code.cpp.ir.internal.Overlap as Overlap -import semmle.code.cpp.ir.implementation.internal.OperandTag as OperandTag -import semmle.code.cpp.ir.implementation.internal.TOperand as TOperand diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandInternal.qll deleted file mode 100644 index c7a5389901b7..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandInternal.qll +++ /dev/null @@ -1,2 +0,0 @@ -private import semmle.code.cpp.ir.implementation.internal.TOperand -import AliasedSsaOperands diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintAliasAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintAliasAnalysis.qll deleted file mode 100644 index 262088245e8b..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintAliasAnalysis.qll +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Include this module to annotate IR dumps with information computed by `AliasAnalysis.qll`. - */ - -private import AliasAnalysisInternal -private import InputIR -private import AliasAnalysisImports -private import AliasAnalysis -private import semmle.code.cpp.ir.internal.IntegerConstant - -private class AliasPropertyProvider extends IRPropertyProvider { - override string getOperandProperty(Operand operand, string key) { - result = Print::getOperandProperty(operand, key) - } - - override string getInstructionProperty(Instruction instr, string key) { - result = Print::getInstructionProperty(instr, key) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintIRImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintIRImports.qll deleted file mode 100644 index 3d0270b3be53..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintIRImports.qll +++ /dev/null @@ -1,2 +0,0 @@ -import semmle.code.cpp.ir.IRConfiguration as IRConfiguration -import semmle.code.cpp.ir.internal.IRCppLanguageDebug as LanguageDebug diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll deleted file mode 100644 index c74878725128..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll +++ /dev/null @@ -1,157 +0,0 @@ -private import SSAConstructionInternal -private import OldIR -private import Alias -private import SSAConstruction -private import DebugSsa - -bindingset[offset] -private string getKeySuffixForOffset(int offset) { - offset >= 0 and - if offset % 2 = 0 then result = "" else result = "_Chi" -} - -bindingset[offset] -private int getIndexForOffset(int offset) { offset >= 0 and result = offset / 2 } - -/** - * Property provide that dumps the memory access of each result. Useful for debugging SSA - * construction. - */ -class PropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instruction, string key) { - key = "ResultMemoryLocation" and - result = - strictconcat(MemoryLocation loc | - loc = getResultMemoryLocation(instruction) - | - loc.toString(), "," - ) - or - key = "ResultVirtualVariable" and - result = - strictconcat(MemoryLocation loc | - loc = getResultMemoryLocation(instruction) - | - loc.getVirtualVariable().toString(), "," - ) - or - key = "OperandMemoryLocation" and - result = - strictconcat(MemoryLocation loc | - loc = getOperandMemoryLocation(instruction.getAnOperand()) - | - loc.toString(), "," - ) - or - key = "OperandVirtualVariable" and - result = - strictconcat(MemoryLocation loc | - loc = getOperandMemoryLocation(instruction.getAnOperand()) - | - loc.getVirtualVariable().toString(), "," - ) - or - exists(MemoryLocation useLocation, IRBlock defBlock, int defRank, int defOffset | - hasDefinitionAtRank(useLocation, _, defBlock, defRank, defOffset) and - defBlock.getInstruction(getIndexForOffset(defOffset)) = instruction and - key = "DefinitionRank" + getKeySuffixForOffset(defOffset) + "[" + useLocation.toString() + "]" and - result = defRank.toString() - ) - or - exists(MemoryLocation useLocation, IRBlock useBlock, int useRank | - hasUseAtRank(useLocation, useBlock, useRank, instruction) and - key = "UseRank[" + useLocation.toString() + "]" and - result = useRank.toString() - ) - or - exists(MemoryLocation useLocation, IRBlock defBlock, int defRank, int defOffset | - hasDefinitionAtRank(useLocation, _, defBlock, defRank, defOffset) and - defBlock.getInstruction(getIndexForOffset(defOffset)) = instruction and - key = - "DefinitionReachesUse" + getKeySuffixForOffset(defOffset) + "[" + useLocation.toString() + - "]" and - result = - strictconcat(IRBlock useBlock, int useRank, int useIndex | - exists(Instruction useInstruction | - hasUseAtRank(useLocation, useBlock, useRank, useInstruction) and - useBlock.getInstruction(useIndex) = useInstruction and - definitionReachesUse(useLocation, defBlock, defRank, useBlock, useRank) - ) - | - useBlock.getDisplayIndex().toString() + "_" + useIndex, ", " - order by - useBlock.getDisplayIndex(), useIndex - ) - ) - } - - override string getBlockProperty(IRBlock block, string key) { - exists(MemoryLocation useLocation, int defRank, int defIndex | - hasDefinitionAtRank(useLocation, _, block, defRank, defIndex) and - defIndex = -1 and - key = "DefinitionRank(Phi)[" + useLocation.toString() + "]" and - result = defRank.toString() - ) - or - exists(MemoryLocation useLocation, MemoryLocation defLocation, int defRank, int defIndex | - hasDefinitionAtRank(useLocation, defLocation, block, defRank, defIndex) and - defIndex = -1 and - key = "DefinitionReachesUse(Phi)[" + useLocation.toString() + "]" and - result = - strictconcat(IRBlock useBlock, int useRank, int useIndex | - exists(Instruction useInstruction | - hasUseAtRank(useLocation, useBlock, useRank, useInstruction) and - useBlock.getInstruction(useIndex) = useInstruction and - definitionReachesUse(useLocation, block, defRank, useBlock, useRank) and - exists(getOverlap(defLocation, useLocation)) - ) - | - useBlock.getDisplayIndex().toString() + "_" + useIndex, ", " - order by - useBlock.getDisplayIndex(), useIndex - ) - ) - or - exists( - MemoryLocation useLocation, IRBlock predBlock, IRBlock defBlock, int defIndex, Overlap overlap - | - hasPhiOperandDefinition(_, useLocation, block, predBlock, defBlock, defIndex) and - key = - "PhiUse[" + useLocation.toString() + " from " + predBlock.getDisplayIndex().toString() + "]" and - result = - defBlock.getDisplayIndex().toString() + "_" + defIndex + " (" + overlap.toString() + ")" - ) - or - key = "LiveOnEntry" and - result = - strictconcat(MemoryLocation useLocation | - locationLiveOnEntryToBlock(useLocation, block) - | - useLocation.toString(), ", " order by useLocation.toString() - ) - or - key = "LiveOnExit" and - result = - strictconcat(MemoryLocation useLocation | - locationLiveOnExitFromBlock(useLocation, block) - | - useLocation.toString(), ", " order by useLocation.toString() - ) - or - key = "DefsLiveOnEntry" and - result = - strictconcat(MemoryLocation defLocation | - definitionLiveOnEntryToBlock(defLocation, block) - | - defLocation.toString(), ", " order by defLocation.toString() - ) - or - key = "DefsLiveOnExit" and - result = - strictconcat(MemoryLocation defLocation | - definitionLiveOnExitFromBlock(defLocation, block) - | - defLocation.toString(), ", " order by defLocation.toString() - ) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.ql b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.ql deleted file mode 100644 index 3379f4530a1f..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Aliased SSA Consistency Check - * @description Performs consistency checks on the SSA construction. This query should have no results. - * @kind table - * @id cpp/aliased-ssa-consistency-check - */ - -import SSAConsistency diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll deleted file mode 100644 index 0fb108f0b564..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll +++ /dev/null @@ -1,55 +0,0 @@ -import SsaConsistency -import SSAConsistencyImports - -module SsaConsistency { - /** - * Holds if a `MemoryOperand` has more than one `MemoryLocation` assigned by alias analysis. - */ - query predicate multipleOperandMemoryLocations( - OldIR::MemoryOperand operand, string message, OldIR::IRFunction func, string funcText - ) { - exists(int locationCount | - locationCount = strictcount(Alias::getOperandMemoryLocation(operand)) and - locationCount > 1 and - func = operand.getEnclosingIRFunction() and - funcText = LanguageDebug::getIdentityString(func.getFunction()) and - message = - operand.getUse().toString() + " " + "Operand has " + locationCount.toString() + - " memory accesses in function '$@': " + - strictconcat(Alias::getOperandMemoryLocation(operand).toString(), ", ") - ) - } - - /** - * Holds if a `MemoryLocation` does not have an associated `VirtualVariable`. - */ - query predicate missingVirtualVariableForMemoryLocation( - Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText - ) { - not exists(location.getVirtualVariable()) and - func = location.getIRFunction() and - funcText = LanguageDebug::getIdentityString(func.getFunction()) and - message = "Memory location has no virtual variable in function '$@'." - } - - /** - * Holds if a `MemoryLocation` is a member of more than one `VirtualVariable`. - */ - query predicate multipleVirtualVariablesForMemoryLocation( - Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText - ) { - exists(int vvarCount | - vvarCount = strictcount(location.getVirtualVariable()) and - vvarCount > 1 and - func = location.getIRFunction() and - funcText = LanguageDebug::getIdentityString(func.getFunction()) and - message = - "Memory location has " + vvarCount.toString() + " virtual variables in function '$@': (" + - concat(Alias::VirtualVariable vvar | - vvar = location.getVirtualVariable() - | - vvar.toString(), ", " - ) + ")." - ) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistencyImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistencyImports.qll deleted file mode 100644 index b09678e0f7e0..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistencyImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import semmle.code.cpp.ir.implementation.raw.IR as OldIR -import AliasedSSA as Alias -import semmle.code.cpp.ir.internal.IRCppLanguageDebug as LanguageDebug diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll deleted file mode 100644 index 1a1eb6a1876f..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll +++ /dev/null @@ -1,1420 +0,0 @@ -import SSAConstructionInternal -private import SSAConstructionImports as Imports -private import Imports::Opcode -private import Imports::OperandTag -private import Imports::Overlap -private import Imports::TInstruction -private import Imports::RawIR as RawIR -private import SsaInstructions -private import SsaOperands -private import NewIR - -private class OldBlock = Reachability::ReachableBlock; - -private class OldInstruction = Reachability::ReachableInstruction; - -import Cached - -/** - * Holds if `instruction` is the first instruction that may be followed by - * an `UninitializedGroup` instruction, and the enclosing function of - * `instruction` is `func`. - */ -private predicate isFirstInstructionBeforeUninitializedGroup( - Instruction instruction, IRFunction func -) { - instruction = getChi(any(OldIR::InitializeNonLocalInstruction init)) and - func = instruction.getEnclosingIRFunction() -} - -/** Gets the `i`'th `UninitializedGroup` instruction in `func`. */ -private UninitializedGroupInstruction getInitGroupInstruction(int i, IRFunction func) { - exists(Alias::VariableGroup vg | - vg.getIRFunction() = func and - vg.getInitializationOrder() = i and - result = uninitializedGroup(vg) - ) -} - -/** - * Holds if `instruction` is the last instruction in the chain of `UninitializedGroup` - * instructions in `func`. The chain of instructions may be empty in which case - * `instruction` satisfies - * ``` - * isFirstInstructionBeforeUninitializedGroup(instruction, func) - * ``` - */ -predicate isLastInstructionForUninitializedGroups(Instruction instruction, IRFunction func) { - exists(int i | - instruction = getInitGroupInstruction(i, func) and - not exists(getChi(instruction)) and - not exists(getInitGroupInstruction(i + 1, func)) - ) - or - exists(int i | - instruction = getChi(getInitGroupInstruction(i, func)) and - not exists(getInitGroupInstruction(i + 1, func)) - ) - or - isFirstInstructionBeforeUninitializedGroup(instruction, func) and - not exists(getInitGroupInstruction(0, func)) -} - -cached -private module Cached { - cached - predicate hasPhiInstructionCached( - OldInstruction blockStartInstr, Alias::MemoryLocation defLocation - ) { - exists(OldBlock oldBlock | - definitionHasPhiNode(defLocation, oldBlock) and - blockStartInstr = oldBlock.getFirstInstruction() - ) - } - - cached - predicate hasChiInstructionCached(OldInstruction primaryInstruction) { - hasChiNode(_, primaryInstruction) - } - - cached - predicate hasChiNodeAfterUninitializedGroup(UninitializedGroupInstruction initGroup) { - hasChiNodeAfterUninitializedGroup(_, initGroup) - } - - cached - predicate hasUnreachedInstructionCached(IRFunction irFunc) { - exists(OldIR::Instruction oldInstruction | - irFunc = oldInstruction.getEnclosingIRFunction() and - ( - Reachability::isInfeasibleInstructionSuccessor(oldInstruction, _) - or - oldInstruction.getOpcode() instanceof Opcode::Unreached - ) - ) - } - - class TStageInstruction = - TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction or - TUninitializedGroupInstruction; - - /** - * If `oldInstruction` is a `Phi` instruction that has exactly one reachable predecessor block, - * this predicate returns the `PhiInputOperand` corresponding to that predecessor block. - * Otherwise, this predicate does not hold. - */ - private OldIR::PhiInputOperand getDegeneratePhiOperand(OldInstruction oldInstruction) { - result = - unique(OldIR::PhiInputOperand operand | - operand = oldInstruction.(OldIR::PhiInstruction).getAnInputOperand() and - operand.getPredecessorBlock() instanceof OldBlock - ) - } - - cached - predicate hasInstruction(TStageInstruction instr) { - instr instanceof TRawInstruction and instr instanceof OldInstruction - or - instr = phiInstruction(_, _) - or - instr = reusedPhiInstruction(_) and - // Check that the phi instruction is *not* degenerate, but we can't use - // getDegeneratePhiOperand in the first stage with phi instructions - not exists( - unique(OldIR::PhiInputOperand operand | - operand = instr.(OldIR::PhiInstruction).getAnInputOperand() and - operand.getPredecessorBlock() instanceof OldBlock - ) - ) - or - instr instanceof TChiInstruction - or - instr instanceof TUninitializedGroupInstruction - or - instr instanceof TUnreachedInstruction - } - - cached - IRBlock getNewBlock(OldBlock oldBlock) { - exists(Instruction newEnd, OldIR::Instruction oldEnd | - ( - result.getLastInstruction() = newEnd and - not newEnd instanceof ChiInstruction - or - newEnd = result.getLastInstruction().(ChiInstruction).getAPredecessor() // does this work? - ) and - ( - oldBlock.getLastInstruction() = oldEnd and - not oldEnd instanceof OldIR::ChiInstruction - or - oldEnd = oldBlock.getLastInstruction().(OldIR::ChiInstruction).getAPredecessor() // does this work? - ) and - oldEnd = getNewInstruction(newEnd) - ) - } - - /** - * Gets the block from the old IR that corresponds to `newBlock`. - */ - private OldBlock getOldBlock(IRBlock newBlock) { getNewBlock(result) = newBlock } - - /** - * Holds if this iteration of SSA can model the def/use information for the result of - * `oldInstruction`, either because alias analysis has determined a memory location for that - * result, or because a previous iteration of the IR already computed that def/use information - * completely. - */ - private predicate canModelResultForOldInstruction(OldInstruction oldInstruction) { - // We're modeling the result's memory location ourselves. - exists(Alias::getResultMemoryLocation(oldInstruction)) - or - // This result was already modeled by a previous iteration of SSA. - Alias::canReuseSsaForOldResult(oldInstruction) - } - - cached - predicate hasModeledMemoryResult(Instruction instruction) { - canModelResultForOldInstruction(getOldInstruction(instruction)) or - instruction instanceof PhiInstruction or // Phis always have modeled results - instruction instanceof ChiInstruction or // Chis always have modeled results - instruction instanceof UninitializedGroupInstruction // Group initializers always have modeled results - } - - cached - predicate hasConflatedMemoryResult(Instruction instruction) { - instruction instanceof AliasedDefinitionInstruction - or - instruction.getOpcode() instanceof Opcode::InitializeNonLocal - or - // Chi instructions track virtual variables, and therefore a chi instruction is - // conflated if it's associated with the aliased virtual variable. - exists(Instruction input | instruction = getChi(input) | - Alias::getResultMemoryLocation(input).getVirtualVariable() instanceof - Alias::AliasedVirtualVariable - or - // A chi following an `UninitializedGroupInstruction` only happens when the virtual - // variable of the grouped memory location is `{AllAliasedMemory}`. - exists(Alias::GroupedMemoryLocation gml | - input = uninitializedGroup(gml.getGroup()) and - gml.getVirtualVariable() instanceof Alias::AliasedVirtualVariable - ) - ) - or - // Phi instructions track locations, and therefore a phi instruction is - // conflated if it's associated with a conflated location. - exists(Alias::MemoryLocation location | - instruction = getPhi(_, location) and - not exists(location.getAnAllocation()) - ) - } - - pragma[noopt] - private predicate hasMemoryOperandDefinition( - OldInstruction oldInstruction, OldIR::NonPhiMemoryOperand oldOperand, Overlap overlap, - Instruction instr - ) { - oldOperand = oldInstruction.getAnOperand() and - oldOperand instanceof OldIR::NonPhiMemoryOperand and - exists( - OldBlock useBlock, int useRank, Alias::MemoryLocation useLocation, - Alias::MemoryLocation defLocation, OldBlock defBlock, int defRank, int defOffset, - Alias::MemoryLocation actualDefLocation - | - useLocation = Alias::getOperandMemoryLocation(oldOperand) and - hasUseAtRank(useLocation, useBlock, useRank, oldInstruction) and - definitionReachesUse(useLocation, defBlock, defRank, useBlock, useRank) and - hasDefinitionAtRank(useLocation, defLocation, defBlock, defRank, defOffset) and - instr = getDefinitionOrChiInstruction(defBlock, defOffset, defLocation, actualDefLocation) and - overlap = Alias::getOverlap(actualDefLocation, useLocation) - ) - } - - /** - * Gets the new definition instruction for `oldOperand` based on `oldOperand`'s definition in the - * old IR. Usually, this will just get the old definition of `oldOperand` and map it to the - * corresponding new instruction. However, if the old definition of `oldOperand` is a `Phi` - * instruction that is now degenerate due all but one of its predecessor branches being - * unreachable, this predicate will recurse through any degenerate `Phi` instructions to find the - * true definition. - */ - private Instruction getNewDefinitionFromOldSsa(OldIR::MemoryOperand oldOperand, Overlap overlap) { - exists(Overlap originalOverlap | - originalOverlap = oldOperand.getDefinitionOverlap() and - ( - result = getNewInstruction(oldOperand.getAnyDef()) and - overlap = originalOverlap - or - exists(OldIR::PhiInputOperand phiOperand, Overlap phiOperandOverlap | - phiOperand = getDegeneratePhiOperand(oldOperand.getAnyDef()) and - result = getNewDefinitionFromOldSsa(phiOperand, phiOperandOverlap) and - overlap = - combineOverlap(pragma[only_bind_out](phiOperandOverlap), - pragma[only_bind_out](originalOverlap)) - ) - ) - ) - } - - cached - private Instruction getMemoryOperandDefinition0( - Instruction instruction, MemoryOperandTag tag, Overlap overlap - ) { - exists(OldInstruction oldInstruction, OldIR::NonPhiMemoryOperand oldOperand | - oldInstruction = getOldInstruction(instruction) and - oldOperand = oldInstruction.getAnOperand() and - tag = oldOperand.getOperandTag() and - hasMemoryOperandDefinition(oldInstruction, oldOperand, overlap, result) - ) - or - ( - instruction = getChi(getOldInstruction(result)) - or - instruction = getChi(result.(UninitializedGroupInstruction)) - ) and - tag instanceof ChiPartialOperandTag and - overlap instanceof MustExactlyOverlap - or - tag instanceof ChiTotalOperandTag and - result = getChiInstructionTotalOperand(instruction) and - overlap instanceof MustExactlyOverlap - } - - cached - Instruction getMemoryOperandDefinition( - Instruction instruction, MemoryOperandTag tag, Overlap overlap - ) { - // getMemoryOperandDefinition0 currently has a bug where it can match with multiple overlaps. - // This predicate ensures that the chosen overlap is the most conservative if there's any doubt. - result = getMemoryOperandDefinition0(instruction, tag, overlap) and - not ( - overlap instanceof MustExactlyOverlap and - exists(MustTotallyOverlap o | exists(getMemoryOperandDefinition0(instruction, tag, o))) - ) - or - exists(OldIR::NonPhiMemoryOperand oldOperand | - result = getNewDefinitionFromOldSsa(oldOperand, overlap) and - oldOperand.getUse() = instruction and - tag = oldOperand.getOperandTag() - ) - } - - /** - * Holds if `operand` totally overlaps with its definition and consumes the bit range - * `[startBitOffset, endBitOffset)`. - */ - cached - predicate getUsedInterval(NonPhiMemoryOperand operand, int startBitOffset, int endBitOffset) { - exists(Alias::MemoryLocation location, OldIR::NonPhiMemoryOperand oldOperand | - oldOperand = operand.getUse().(OldInstruction).getAnOperand() and - location = Alias::getOperandMemoryLocation(oldOperand) and - startBitOffset = Alias::getStartBitOffset(location) and - endBitOffset = Alias::getEndBitOffset(location) - ) - } - - /** - * Holds if the `ChiPartialOperand` only partially overlaps with the `ChiTotalOperand`. - * This means that the `ChiPartialOperand` will not override the entire memory associated - * with the `ChiTotalOperand`. - */ - cached - predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) { - exists(Alias::MemoryLocation location, OldInstruction oldInstruction | - oldInstruction = getOldInstruction(chi.getPartial()) and - location = Alias::getResultMemoryLocation(oldInstruction) - | - Alias::getStartBitOffset(location) != 0 or - Alias::getEndBitOffset(location) != 8 * location.getType().getByteSize() - ) - } - - cached - IRVariable getAnUninitializedGroupVariable(UninitializedGroupInstruction init) { - exists(Alias::VariableGroup vg | - init = uninitializedGroup(vg) and - result = vg.getAnAllocation().getABaseInstruction().(VariableInstruction).getIRVariable() - ) - } - - /** - * Holds if `instr` is part of a cycle in the operand graph that doesn't go - * through a phi instruction and therefore should be impossible. - * - * For performance reasons, this predicate is not implemented (never holds) - * for the SSA stages of the IR. - */ - cached - predicate isInCycle(Instruction instr) { none() } - - cached - Language::LanguageType getInstructionOperandType(Instruction instr, TypedOperandTag tag) { - exists(OldInstruction oldInstruction, OldIR::TypedOperand oldOperand | - oldInstruction = getOldInstruction(instr) and - oldOperand = oldInstruction.getAnOperand() and - tag = oldOperand.getOperandTag() and - result = oldOperand.getLanguageType() - ) - } - - /** - * Gets the new definition instruction for the operand of `instr` that flows from the block - * `newPredecessorBlock`, based on that operand's definition in the old IR. - */ - private Instruction getNewPhiOperandDefinitionFromOldSsa( - Instruction instr, IRBlock newPredecessorBlock, Overlap overlap - ) { - exists(OldIR::PhiInstruction oldPhi, OldIR::PhiInputOperand oldOperand | - oldPhi = getOldInstruction(instr) and - oldOperand = oldPhi.getInputOperand(getOldBlock(newPredecessorBlock)) and - result = getNewDefinitionFromOldSsa(oldOperand, overlap) - ) - } - - pragma[noopt] - cached - Instruction getPhiOperandDefinition( - Instruction instr, IRBlock newPredecessorBlock, Overlap overlap - ) { - exists( - Alias::MemoryLocation defLocation, Alias::MemoryLocation useLocation, OldBlock phiBlock, - OldBlock predBlock, OldBlock defBlock, int defOffset, Alias::MemoryLocation actualDefLocation - | - hasPhiOperandDefinition(defLocation, useLocation, phiBlock, predBlock, defBlock, defOffset) and - instr = getPhi(phiBlock, useLocation) and - newPredecessorBlock = getNewBlock(predBlock) and - result = getDefinitionOrChiInstruction(defBlock, defOffset, defLocation, actualDefLocation) and - overlap = Alias::getOverlap(actualDefLocation, useLocation) - ) - or - result = getNewPhiOperandDefinitionFromOldSsa(instr, newPredecessorBlock, overlap) - } - - private ChiInstruction getChiAfterUninitializedGroup(int i, IRFunction func) { - result = - rank[i + 1](VariableGroup vg, UninitializedGroupInstruction initGroup, ChiInstruction chi, - int r | - initGroup.getEnclosingIRFunction() = func and - chi = getChi(initGroup) and - initGroup = uninitializedGroup(vg) and - r = vg.getInitializationOrder() - | - chi order by r - ) - } - - cached - Instruction getChiInstructionTotalOperand(ChiInstruction chiInstr) { - exists( - Alias::VirtualVariable vvar, OldInstruction oldInstr, OldBlock defBlock, int defRank, - int defOffset, OldBlock useBlock, int useRank - | - chiInstr = getChi(oldInstr) and - vvar = Alias::getResultMemoryLocation(oldInstr).getVirtualVariable() and - hasDefinitionAtRank(vvar, _, defBlock, defRank, defOffset) and - hasUseAtRank(vvar, useBlock, useRank, oldInstr) and - definitionReachesUse(vvar, defBlock, defRank, useBlock, useRank) and - result = getDefinitionOrChiInstruction(defBlock, defOffset, vvar, _) - ) - or - exists(UninitializedGroupInstruction initGroup, IRFunction func | - chiInstr = getChi(initGroup) and - func = initGroup.getEnclosingIRFunction() - | - chiInstr = getChiAfterUninitializedGroup(0, func) and - isFirstInstructionBeforeUninitializedGroup(result, func) - or - exists(int i | - chiInstr = getChiAfterUninitializedGroup(i + 1, func) and - result = getChiAfterUninitializedGroup(i, func) - ) - ) - } - - cached - Instruction getPhiInstructionBlockStart(PhiInstruction instr) { - exists(OldBlock oldBlock | - ( - instr = getPhi(oldBlock, _) - or - // Any `Phi` that we propagated from the previous iteration stays in the same block. - getOldInstruction(instr).getBlock() = oldBlock - ) and - result = getNewInstruction(oldBlock.getFirstInstruction()) - ) - } - - private UninitializedGroupInstruction firstInstructionToUninitializedGroup( - Instruction instruction, EdgeKind kind - ) { - exists(IRFunction func | - isFirstInstructionBeforeUninitializedGroup(instruction, func) and - result = getInitGroupInstruction(0, func) and - kind instanceof GotoEdge - ) - } - - private Instruction getNextUninitializedGroupInstruction(Instruction instruction, EdgeKind kind) { - exists(int i, IRFunction func | - func = instruction.getEnclosingIRFunction() and - instruction = getInitGroupInstruction(i, func) and - kind instanceof GotoEdge - | - if hasChiNodeAfterUninitializedGroup(_, instruction) - then result = getChi(instruction) - else result = getInitGroupInstruction(i + 1, func) - ) - or - exists(int i, IRFunction func, UninitializedGroupInstruction initGroup | - func = instruction.getEnclosingIRFunction() and - instruction = getChi(initGroup) and - initGroup = getInitGroupInstruction(i, func) and - kind instanceof GotoEdge - | - result = getInitGroupInstruction(i + 1, func) - ) - } - - private Instruction getInstructionSuccessorAfterUninitializedGroup0( - Instruction instruction, EdgeKind kind - ) { - if hasChiNode(_, getOldInstruction(instruction)) - then - result = getChi(getOldInstruction(instruction)) and - kind instanceof GotoEdge - else - exists(OldInstruction oldInstruction | - ( - oldInstruction = getOldInstruction(instruction) - or - instruction = getChi(oldInstruction) - ) and - ( - if Reachability::isInfeasibleInstructionSuccessor(oldInstruction, kind) - then result = unreachedInstruction(instruction.getEnclosingIRFunction()) - else result = getNewInstruction(oldInstruction.getSuccessor(kind)) - ) - ) - } - - private Instruction getInstructionSuccessorAfterUninitializedGroup( - Instruction instruction, EdgeKind kind - ) { - exists(IRFunction func, Instruction firstBeforeUninitializedGroup | - isLastInstructionForUninitializedGroups(instruction, func) and - isFirstInstructionBeforeUninitializedGroup(firstBeforeUninitializedGroup, func) and - result = getInstructionSuccessorAfterUninitializedGroup0(firstBeforeUninitializedGroup, kind) - ) - } - - /** - * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, - * that node is its successor in the new successor relation, and the Chi node's successors are - * the new instructions generated from the successors of the old instruction. - * - * Furthermore, the entry block is augmented with `UninitializedGroup` instructions and `Chi` - * instructions. For example, consider this example: - * ```cpp - * int x, y; - * int* p; - * if(b) { - * p = &x; - * escape(&x); - * } else { - * p = &y; - * } - * *p = 42; - * - * int z, w; - * int* q; - * if(b) { - * q = &z; - * } else { - * q = &w; - * } - * *q = 43; - * ``` - * - * the unaliased IR for the entry block of this snippet is: - * ``` - * v1(void) = EnterFunction : - * m1(unknown) = AliasedDefinition : - * m2(unknown) = InitializeNonLocal : - * r1(glval) = VariableAddress[b] : - * m3(bool) = InitializeParameter[b] : &:r1 - * r2(glval) = VariableAddress[x] : - * m4(int) = Uninitialized[x] : &:r2 - * r3(glval) = VariableAddress[y] : - * m5(int) = Uninitialized[y] : &:r3 - * r4(glval) = VariableAddress[p] : - * m6(int *) = Uninitialized[p] : &:r4 - * r5(glval) = VariableAddress[b] : - * r6(bool) = Load[b] : &:r5, m3 - * v2(void) = ConditionalBranch : r6 - * ``` - * and we need to transform this to aliased IR by inserting an `UninitializedGroup` - * instruction for every `VariableGroup` memory location in the function. Furthermore, - * if the `VariableGroup` memory location contains an allocation that escapes we need - * to insert a `Chi` that writes the memory produced by `UninitializedGroup` into - * `{AllAliasedMemory}`. For the above snippet we then end up with: - * ``` - * v1(void) = EnterFunction : - * m2(unknown) = AliasedDefinition : - * m3(unknown) = InitializeNonLocal : - * m4(unknown) = Chi : total:m2, partial:m3 - * m5(int) = UninitializedGroup[x,y] : - * m6(unknown) = Chi : total:m4, partial:m5 - * m7(int) = UninitializedGroup[w,z] : - * r1(glval) = VariableAddress[b] : - * m8(bool) = InitializeParameter[b] : &:r1 - * r2(glval) = VariableAddress[x] : - * m10(int) = Uninitialized[x] : &:r2 - * m11(unknown) = Chi : total:m6, partial:m10 - * r3(glval) = VariableAddress[y] : - * m12(int) = Uninitialized[y] : &:r3 - * m13(unknown) = Chi : total:m11, partial:m12 - * r4(glval) = VariableAddress[p] : - * m14(int *) = Uninitialized[p] : &:r4 - * r5(glval) = VariableAddress[b] : - * r6(bool) = Load[b] : &:r5, m8 - * v2(void) = ConditionalBranch : r6 - * ``` - * - * Here, the group `{x, y}` contains an allocation that escapes (`x`), so there - * is a `Chi` after the `UninitializedGroup` that initializes the memory for the - * `VariableGroup` containing `x`. None of the allocations in `{w, z}` escape so - * there is no `Chi` following that the `UninitializedGroup` that initializes the - * memory of `{w, z}`. - */ - cached - Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { - result = firstInstructionToUninitializedGroup(instruction, kind) - or - result = getNextUninitializedGroupInstruction(instruction, kind) - or - result = getInstructionSuccessorAfterUninitializedGroup(instruction, kind) - or - not isFirstInstructionBeforeUninitializedGroup(instruction, _) and - result = getInstructionSuccessorAfterUninitializedGroup0(instruction, kind) - } - - cached - Instruction getInstructionBackEdgeSuccessor(Instruction instruction, EdgeKind kind) { - exists(OldInstruction oldInstruction | - not Reachability::isInfeasibleInstructionSuccessor(oldInstruction, kind) and - // There is only one case for the translation into `result` because the - // SSA construction never inserts extra instructions _before_ an existing - // instruction. - getOldInstruction(result) = oldInstruction.getBackEdgeSuccessor(kind) and - // There are two cases for the translation into `instruction` because the - // SSA construction might have inserted a chi node _after_ - // `oldInstruction`, in which case the back edge should come out of the - // chi node instead. - if hasChiNode(_, oldInstruction) - then instruction = getChi(oldInstruction) - else instruction = getNewInstruction(oldInstruction) - ) - } - - cached - Language::AST getInstructionAst(Instruction instr) { - result = getOldInstruction(instr).getAst() - or - exists(RawIR::Instruction blockStartInstr | - instr = phiInstruction(blockStartInstr, _) and - result = blockStartInstr.getAst() - ) - or - exists(RawIR::Instruction primaryInstr | - instr = chiInstruction(primaryInstr) and - result = primaryInstr.getAst() - ) - or - exists(IRFunctionBase irFunc | - instr = unreachedInstruction(irFunc) and result = irFunc.getFunction() - ) - or - exists(Alias::VariableGroup vg | - instr = uninitializedGroup(vg) and - result = vg.getIRFunction().getFunction() - ) - or - exists(UninitializedGroupInstruction initGroup | - instr = chiInstruction(initGroup) and - result = getInstructionAst(initGroup) - ) - } - - cached - Language::LanguageType getInstructionResultType(Instruction instr) { - result = instr.(RawIR::Instruction).getResultLanguageType() - or - exists(Alias::MemoryLocation defLocation | - instr = phiInstruction(_, defLocation) and - result = defLocation.getType() - ) - or - exists(Instruction primaryInstr, Alias::VirtualVariable vvar | - instr = chiInstruction(primaryInstr) and result = vvar.getType() - | - hasChiNode(vvar, primaryInstr) - or - hasChiNodeAfterUninitializedGroup(vvar, primaryInstr) - ) - or - exists(Alias::VariableGroup vg | - instr = uninitializedGroup(vg) and - result = vg.getType() - ) - or - instr = reusedPhiInstruction(_) and - result = instr.(OldInstruction).getResultLanguageType() - or - instr = unreachedInstruction(_) and result = Language::getVoidType() - } - - cached - IRType getInstructionResultIRType(Instruction instr) { - result = instr.getResultLanguageType().getIRType() - } - - /** - * Holds if `opcode` is the opcode that specifies the operation performed by `instr`. - * - * The parameters are ordered such that they produce a clean join (with no need for reordering) - * in the characteristic predicates of the `Instruction` subclasses. - */ - cached - predicate getInstructionOpcode(Opcode opcode, Instruction instr) { - opcode = getOldInstruction(instr).getOpcode() - or - instr = phiInstruction(_, _) and opcode instanceof Opcode::Phi - or - instr = chiInstruction(_) and opcode instanceof Opcode::Chi - or - instr = uninitializedGroup(_) and opcode instanceof Opcode::UninitializedGroup - or - instr = unreachedInstruction(_) and opcode instanceof Opcode::Unreached - } - - cached - IRFunctionBase getInstructionEnclosingIRFunction(Instruction instr) { - result = getOldInstruction(instr).getEnclosingIRFunction() - or - exists(OldInstruction blockStartInstr | - instr = phiInstruction(blockStartInstr, _) and - result = blockStartInstr.getEnclosingIRFunction() - ) - or - exists(Instruction primaryInstr | - instr = chiInstruction(primaryInstr) and result = primaryInstr.getEnclosingIRFunction() - ) - or - exists(Alias::VariableGroup vg | - instr = uninitializedGroup(vg) and - result = vg.getIRFunction() - ) - or - instr = unreachedInstruction(result) - } - - cached - Instruction getPrimaryInstructionForSideEffect(Instruction instruction) { - exists(OldIR::SideEffectInstruction oldInstruction | - oldInstruction = getOldInstruction(instruction) and - result = getNewInstruction(oldInstruction.getPrimaryInstruction()) - ) - or - exists(OldIR::Instruction oldInstruction | - instruction = getChi(oldInstruction) and - result = getNewInstruction(oldInstruction) - ) - or - instruction = getChi(result.(UninitializedGroupInstruction)) - } - - /** - * Holds if the def-use information for `f` may have been omitted because it - * was too expensive to compute. This happens if one of the memory allocations - * in `f` is a busy definition (i.e., it has many different overlapping uses). - */ - pragma[nomagic] - cached - predicate hasIncompleteSsa(IRFunction f) { - exists(Alias::MemoryLocation0 defLocation | - Alias::isBusyDef(pragma[only_bind_into](defLocation)) and - defLocation.getIRFunction() = f - ) - } -} - -private Instruction getNewInstruction(OldInstruction instr) { getOldInstruction(result) = instr } - -private OldInstruction getOldInstruction(Instruction instr) { instr = result } - -private ChiInstruction getChi(Instruction primaryInstr) { result = chiInstruction(primaryInstr) } - -private PhiInstruction getPhi(OldBlock defBlock, Alias::MemoryLocation defLocation) { - result = phiInstruction(defBlock.getFirstInstruction(), defLocation) -} - -/** - * Holds if instruction `def` needs to have a `Chi` instruction inserted after it, to account for a partial definition - * of a virtual variable. The `Chi` instruction provides a definition of the entire virtual variable of which the - * original definition location is a member. - */ -private predicate hasChiNode(Alias::VirtualVariable vvar, OldInstruction def) { - exists(Alias::MemoryLocation defLocation | - defLocation = Alias::getResultMemoryLocation(def) and - defLocation.getVirtualVariable() = vvar and - // If the definition totally (or exactly) overlaps the virtual variable, then there's no need for a `Chi` - // instruction. - Alias::getOverlap(defLocation, vvar) instanceof MayPartiallyOverlap - ) -} - -private predicate hasChiNodeAfterUninitializedGroup( - Alias::AliasedVirtualVariable vvar, UninitializedGroupInstruction initGroup -) { - exists(Alias::GroupedMemoryLocation defLocation | - initGroup = uninitializedGroup(defLocation.getGroup()) and - defLocation.getVirtualVariable() = vvar and - Alias::getOverlap(defLocation, vvar) instanceof MayPartiallyOverlap - ) -} - -private import PhiInsertion - -/** - * Module to handle insertion of `Phi` instructions at the correct blocks. We insert a `Phi` instruction at the - * beginning of a block for a given location when that block is on the dominance frontier of a definition of the - * location and there is a use of that location reachable from that block without an intervening definition of the - * location. - * Within the approach outlined above, we treat a location slightly differently depending on whether or not it is a - * virtual variable. For a virtual variable, we will insert a `Phi` instruction on the dominance frontier if there is - * a use of any member location of that virtual variable that is reachable from the `Phi` instruction. For a location - * that is not a virtual variable, we insert a `Phi` instruction only if there is an exactly-overlapping use of the - * location reachable from the `Phi` instruction. This ensures that we insert a `Phi` instruction for a non-virtual - * variable only if doing so would allow dataflow analysis to get a more precise result than if we just used a `Phi` - * instruction for the virtual variable as a whole. - */ -private module PhiInsertion { - /** - * Holds if `phiBlock` is a block in the dominance frontier of a block that has a definition of the - * memory location `defLocation`. - */ - pragma[noinline] - private predicate dominanceFrontierOfDefinition( - Alias::MemoryLocation defLocation, OldBlock phiBlock - ) { - exists(OldBlock defBlock | - phiBlock = Dominance::getDominanceFrontier(defBlock) and - definitionHasDefinitionInBlock(defLocation, defBlock) - ) - } - - /** - * Holds if a `Phi` instruction needs to be inserted for location `defLocation` at the beginning of block `phiBlock`. - */ - predicate definitionHasPhiNode(Alias::MemoryLocation defLocation, OldBlock phiBlock) { - dominanceFrontierOfDefinition(defLocation, phiBlock) and - /* We can also eliminate those nodes where the definition is not live on any incoming edge */ - definitionLiveOnEntryToBlock(defLocation, phiBlock) - } - - /** - * Holds if the memory location `defLocation` has a definition in block `block`, either because of an existing - * instruction, a `Phi` node, or a `Chi` node. - */ - private predicate definitionHasDefinitionInBlock(Alias::MemoryLocation defLocation, OldBlock block) { - definitionHasPhiNode(defLocation, block) - or - exists(OldInstruction def, Alias::MemoryLocation resultLocation | - def.getBlock() = block and - resultLocation = Alias::getResultMemoryLocation(def) and - ( - defLocation = resultLocation - or - // For a virtual variable, any definition of a member location will either generate a `Chi` node that defines - // the virtual variable, or will totally overlap the virtual variable. Either way, treat this as a definition of - // the virtual variable. - defLocation = resultLocation.getVirtualVariable() - ) - ) - } - - /** - * Holds if there is a use at (`block`, `index`) that could consume the result of a `Phi` instruction for - * `defLocation`. - */ - private predicate definitionHasUse(Alias::MemoryLocation defLocation, OldBlock block, int index) { - exists(OldInstruction use | - block.getInstruction(index) = use and - if defLocation instanceof Alias::VirtualVariable - then ( - exists(Alias::MemoryLocation useLocation | - // For a virtual variable, any use of a location that is a member of the virtual variable counts as a use. - useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and - defLocation = useLocation.getVirtualVariable() - ) - or - // A `Chi` instruction consumes the enclosing virtual variable of its use location. - hasChiNode(defLocation, use) - ) else ( - // For other locations, only an exactly-overlapping use of the same location counts as a use. - defLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and - Alias::getOverlap(defLocation, defLocation) instanceof MustExactlyOverlap - ) - ) - } - - /** - * Holds if the location `defLocation` is redefined at (`block`, `index`). A location is considered "redefined" if - * there is a definition that would prevent a previous definition of `defLocation` from being consumed as the operand - * of a `Phi` node that occurs after the redefinition. - */ - private predicate definitionHasRedefinition( - Alias::MemoryLocation defLocation, OldBlock block, int index - ) { - exists(OldInstruction redef, Alias::MemoryLocation redefLocation | - block.getInstruction(index) = redef and - redefLocation = Alias::getResultMemoryLocation(redef) and - if defLocation instanceof Alias::VirtualVariable - then - // For a virtual variable, the definition may be consumed by any use of a location that is a member of the - // virtual variable. Thus, the definition is live until a subsequent redefinition of the entire virtual - // variable. - exists(Overlap overlap | - overlap = Alias::getOverlap(redefLocation, defLocation) and - not overlap instanceof MayPartiallyOverlap - ) - else - // For other locations, the definition may only be consumed by an exactly-overlapping use of the same location. - // Thus, the definition is live until a subsequent definition of any location that may overlap the original - // definition location. - exists(Alias::getOverlap(redefLocation, defLocation)) - ) - } - - /** - * Holds if the definition `defLocation` is live on entry to block `block`. The definition is live if there is at - * least one use of that definition before any intervening instruction that redefines the definition location. - */ - predicate definitionLiveOnEntryToBlock(Alias::MemoryLocation defLocation, OldBlock block) { - exists(int firstAccess | - definitionHasUse(defLocation, block, firstAccess) and - firstAccess = - min(int index | - definitionHasUse(defLocation, block, index) - or - definitionHasRedefinition(defLocation, block, index) - ) - ) - or - definitionLiveOnExitFromBlock(defLocation, block) and - not definitionHasRedefinition(defLocation, block, _) - } - - /** - * Holds if the definition `defLocation` is live on exit from block `block`. The definition is live on exit if it is - * live on entry to any of the successors of `block`. - */ - pragma[noinline] - predicate definitionLiveOnExitFromBlock(Alias::MemoryLocation defLocation, OldBlock block) { - definitionLiveOnEntryToBlock(defLocation, block.getAFeasibleSuccessor()) - } -} - -private import DefUse - -/** - * Module containing the predicates that connect uses to their reaching definition. The reaching definitions are - * computed separately for each unique use `MemoryLocation`. An instruction is treated as a definition of a use location - * if the defined location overlaps the use location in any way. Thus, a single instruction may serve as a definition - * for multiple use locations, since a single definition location may overlap many use locations. - * - * Definitions and uses are identified by a block and an integer "offset". An offset of -1 indicates the definition - * from a `Phi` instruction at the beginning of the block. An offset of 2*i indicates a definition or use on the - * instruction at index `i` in the block. An offset of 2*i+1 indicates a definition or use on the `Chi` instruction that - * will be inserted immediately after the instruction at index `i` in the block. - * - * For a given use location, each definition and use is also assigned a "rank" within its block. The rank is simply the - * one-based index of that definition or use within the list of definitions and uses of that location within the block, - * ordered by offset. The rank allows the various reachability predicates to be computed more efficiently than they - * would if based solely on offset, since the set of possible ranks is dense while the set of possible offsets is - * potentially very sparse. - */ -module DefUse { - bindingset[index, block] - pragma[inline_late] - private int getNonChiOffset(int index, OldBlock block) { - exists(OldIR::IRFunction func, Instruction i, OldBlock entryBlock | - func = block.getEnclosingIRFunction() and - i = block.getInstruction(index) and - entryBlock = func.getEntryBlock() - | - if - block = entryBlock and - not i instanceof InitializeNonLocalInstruction and - not i instanceof AliasedDefinitionInstruction - then result = 2 * (index + count(VariableGroup vg | vg.getIRFunction() = func)) - else result = 2 * index - ) - } - - bindingset[index, block] - pragma[inline_late] - private int getChiOffset(int index, OldBlock block) { result = getNonChiOffset(index, block) + 1 } - - /** - * Gets the `Instruction` for the definition at offset `defOffset` in block `defBlock`. - */ - private Instruction getDefinitionOrChiInstruction0( - OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, - Alias::MemoryLocation actualDefLocation - ) { - exists(OldInstruction oldInstr, int oldOffset | oldInstr = defBlock.getInstruction(oldOffset) | - // An odd offset corresponds to the `Chi` instruction. - defOffset = getChiOffset(oldOffset, defBlock) and - result = getChi(oldInstr) and - ( - defLocation = Alias::getResultMemoryLocation(oldInstr) or - defLocation = Alias::getResultMemoryLocation(oldInstr).getVirtualVariable() - ) and - actualDefLocation = defLocation.getVirtualVariable() - or - // An even offset corresponds to the original instruction. - defOffset = getNonChiOffset(oldOffset, defBlock) and - result = getNewInstruction(oldInstr) and - ( - defLocation = Alias::getResultMemoryLocation(oldInstr) or - defLocation = Alias::getResultMemoryLocation(oldInstr).getVirtualVariable() - ) and - actualDefLocation = defLocation - ) - or - defOffset = -1 and - hasDefinition(_, defLocation, defBlock, defOffset) and - result = getPhi(defBlock, defLocation) and - actualDefLocation = defLocation - or - exists( - Alias::VariableGroup vg, int index, UninitializedGroupInstruction initGroup, - Alias::GroupedMemoryLocation gml - | - // Add 3 to account for the function prologue: - // v1(void) = EnterFunction - // m1(unknown) = AliasedDefinition - // m2(unknown) = InitializeNonLocal - index = 3 + vg.getInitializationOrder() and - not gml.isMayAccess() and - gml.isSome() and - gml.getGroup() = vg and - vg.getIRFunction().getEntryBlock() = defBlock and - initGroup = uninitializedGroup(vg) and - (defLocation = gml or defLocation = gml.getVirtualVariable()) - | - result = initGroup and - defOffset = 2 * index and - actualDefLocation = defLocation - or - result = getChi(initGroup) and - defOffset = 2 * index + 1 and - actualDefLocation = defLocation.getVirtualVariable() - ) - } - - private ChiInstruction remapGetDefinitionOrChiInstruction(Instruction oldResult) { - exists(IRFunction func | - isFirstInstructionBeforeUninitializedGroup(oldResult, func) and - isLastInstructionForUninitializedGroups(result, func) - ) - } - - Instruction getDefinitionOrChiInstruction( - OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, - Alias::MemoryLocation actualDefLocation - ) { - exists(Instruction oldResult | - oldResult = - getDefinitionOrChiInstruction0(defBlock, defOffset, defLocation, actualDefLocation) and - ( - result = remapGetDefinitionOrChiInstruction(oldResult) - or - not exists(remapGetDefinitionOrChiInstruction(oldResult)) and - result = oldResult - ) - ) - } - - /** - * Gets the rank index of a hypothetical use one instruction past the end of - * the block. This index can be used to determine if a definition reaches the - * end of the block, even if the definition is the last instruction in the - * block. - */ - private int exitRank(Alias::MemoryLocation useLocation, OldBlock block) { - result = max(int rankIndex | defUseRank(useLocation, block, rankIndex, _)) + 1 - } - - /** - * Holds if a definition that overlaps `useLocation` at (`defBlock`, `defRank`) reaches the use of `useLocation` at - * (`useBlock`, `useRank`) without any intervening definitions that overlap `useLocation`, where `defBlock` and - * `useBlock` are the same block. - */ - private predicate definitionReachesUseWithinBlock( - Alias::MemoryLocation useLocation, OldBlock defBlock, int defRank, OldBlock useBlock, - int useRank - ) { - defBlock = useBlock and - hasDefinitionAtRank(useLocation, _, defBlock, defRank, _) and - hasUseAtRank(useLocation, useBlock, useRank, _) and - definitionReachesRank(useLocation, defBlock, defRank, useRank) - } - - /** - * Holds if a definition that overlaps `useLocation` at (`defBlock`, `defRank`) reaches the use of `useLocation` at - * (`useBlock`, `useRank`) without any intervening definitions that overlap `useLocation`. - */ - predicate definitionReachesUse( - Alias::MemoryLocation useLocation, OldBlock defBlock, int defRank, OldBlock useBlock, - int useRank - ) { - hasUseAtRank(useLocation, useBlock, useRank, _) and - ( - definitionReachesUseWithinBlock(useLocation, defBlock, defRank, useBlock, useRank) - or - definitionReachesEndOfBlock(useLocation, defBlock, defRank, useBlock.getAFeasiblePredecessor()) and - not definitionReachesUseWithinBlock(useLocation, useBlock, _, useBlock, useRank) - ) - } - - /** - * Holds if the definition that overlaps `useLocation` at `(block, defRank)` reaches the rank - * index `reachesRank` in block `block`. - */ - private predicate definitionReachesRank( - Alias::MemoryLocation useLocation, OldBlock block, int defRank, int reachesRank - ) { - // The def always reaches the next use, even if there is also a def on the - // use instruction. - hasDefinitionAtRank(useLocation, _, block, defRank, _) and - reachesRank = defRank + 1 - or - // If the def reached the previous rank, it also reaches the current rank, - // unless there was another def at the previous rank. - exists(int prevRank | - reachesRank = prevRank + 1 and - definitionReachesRank(useLocation, block, defRank, prevRank) and - not prevRank = exitRank(useLocation, block) and - not hasDefinitionAtRank(useLocation, _, block, prevRank, _) - ) - } - - /** - * Holds if the definition that overlaps `useLocation` at `(defBlock, defRank)` reaches the end of - * block `block` without any intervening definitions that overlap `useLocation`. - */ - predicate definitionReachesEndOfBlock( - Alias::MemoryLocation useLocation, OldBlock defBlock, int defRank, OldBlock block - ) { - hasDefinitionAtRank(useLocation, _, defBlock, defRank, _) and - ( - // If we're looking at the def's own block, just see if it reaches the exit - // rank of the block. - block = defBlock and - locationLiveOnExitFromBlock(useLocation, defBlock) and - definitionReachesRank(useLocation, defBlock, defRank, exitRank(useLocation, defBlock)) - or - exists(OldBlock idom | - definitionReachesEndOfBlock(useLocation, defBlock, defRank, idom) and - noDefinitionsSinceIDominator(useLocation, idom, block) - ) - ) - } - - pragma[noinline] - private predicate noDefinitionsSinceIDominator( - Alias::MemoryLocation useLocation, OldBlock idom, OldBlock block - ) { - Dominance::blockImmediatelyDominates(idom, block) and // It is sufficient to traverse the dominator graph, cf. discussion above. - locationLiveOnExitFromBlock(useLocation, block) and - not hasDefinition(useLocation, _, block, _) - } - - /** - * Holds if the specified `useLocation` is live on entry to `block`. This holds if there is a use of `useLocation` - * that is reachable from the start of `block` without passing through a definition that overlaps `useLocation`. - * Note that even a partially-overlapping definition blocks liveness, because such a definition will insert a `Chi` - * instruction whose result totally overlaps the location. - */ - predicate locationLiveOnEntryToBlock(Alias::MemoryLocation useLocation, OldBlock block) { - definitionHasPhiNode(useLocation, block) - or - exists(int firstAccess | - hasUse(useLocation, block, firstAccess, _) and - firstAccess = - min(int offset | - hasUse(useLocation, block, offset, _) - or - hasNonPhiDefinition(useLocation, _, block, offset) - ) - ) - or - locationLiveOnExitFromBlock(useLocation, block) and - not hasNonPhiDefinition(useLocation, _, block, _) - } - - /** - * Holds if the specified `useLocation` is live on exit from `block`. - */ - pragma[noinline] - predicate locationLiveOnExitFromBlock(Alias::MemoryLocation useLocation, OldBlock block) { - locationLiveOnEntryToBlock(useLocation, block.getAFeasibleSuccessor()) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`. - * This predicate does not include definitions for Phi nodes. - */ - private predicate hasNonPhiDefinition( - Alias::MemoryLocation useLocation, Alias::MemoryLocation defLocation, OldBlock block, int offset - ) { - exists(OldInstruction def, Overlap overlap, int index | - defLocation = Alias::getResultMemoryLocation(def) and - block.getInstruction(index) = def and - overlap = Alias::getOverlap(defLocation, useLocation) and - if overlap instanceof MayPartiallyOverlap - then offset = getChiOffset(index, block) // The use will be connected to the definition on the `Chi` instruction. - else offset = getNonChiOffset(index, block) // The use will be connected to the definition on the original instruction. - ) - or - exists(UninitializedGroupInstruction initGroup, int index, Overlap overlap, VariableGroup vg | - initGroup.getEnclosingIRFunction().getEntryBlock() = getNewBlock(block) and - vg = defLocation.(Alias::GroupedMemoryLocation).getGroup() and - // EnterFunction + AliasedDefinition + InitializeNonLocal + index - index = 3 + vg.getInitializationOrder() and - initGroup = uninitializedGroup(vg) and - overlap = Alias::getOverlap(defLocation, useLocation) and - if overlap instanceof MayPartiallyOverlap and hasChiNodeAfterUninitializedGroup(initGroup) - then offset = 2 * index + 1 // The use will be connected to the definition on the `Chi` instruction. - else offset = 2 * index // The use will be connected to the definition on the original instruction. - ) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`. - * This predicate includes definitions for Phi nodes (at offset -1). - */ - private predicate hasDefinition( - Alias::MemoryLocation useLocation, Alias::MemoryLocation defLocation, OldBlock block, int offset - ) { - ( - // If there is a Phi node for the use location itself, treat that as a definition at offset -1. - offset = -1 and - if definitionHasPhiNode(useLocation, block) - then defLocation = useLocation - else ( - definitionHasPhiNode(defLocation, block) and - defLocation = useLocation.getVirtualVariable() and - // Handle the unusual case where a virtual variable does not overlap one of its member - // locations. For example, a definition of the virtual variable representing all aliased - // memory does not overlap a use of a string literal, because the contents of a string - // literal can never be redefined. The string literal's location could still be a member of - // the `AliasedVirtualVariable` due to something like: - // ``` - // char s[10]; - // strcpy(s, p); - // const char* p = b ? "SomeLiteral" : s; - // return p[3]; - // ``` - // In the above example, `p[3]` may access either the string literal or the local variable - // `s`, so both of those locations must be members of the `AliasedVirtualVariable`. - exists(Alias::getOverlap(defLocation, useLocation)) - ) - ) - or - hasNonPhiDefinition(useLocation, defLocation, block, offset) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`. - * `rankIndex` is the rank of the definition as computed by `defUseRank()`. - */ - predicate hasDefinitionAtRank( - Alias::MemoryLocation useLocation, Alias::MemoryLocation defLocation, OldBlock block, - int rankIndex, int offset - ) { - hasDefinition(useLocation, defLocation, block, offset) and - defUseRank(useLocation, block, rankIndex, offset) - } - - /** - * Holds if there is a use of `useLocation` on instruction `use` at offset `offset` in block `block`. - */ - private predicate hasUse( - Alias::MemoryLocation useLocation, OldBlock block, int offset, OldInstruction use - ) { - exists(int index | - block.getInstruction(index) = use and - ( - // A direct use of the location. - useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and - offset = getNonChiOffset(index, block) - or - // A `Chi` instruction will include a use of the virtual variable. - hasChiNode(useLocation, use) and offset = getChiOffset(index, block) - ) - ) - } - - /** - * Holds if there is a use of memory location `useLocation` on instruction `use` in block `block`. `rankIndex` is the - * rank of the use use as computed by `defUseRank`. - */ - predicate hasUseAtRank( - Alias::MemoryLocation useLocation, OldBlock block, int rankIndex, OldInstruction use - ) { - exists(int offset | - hasUse(useLocation, block, offset, use) and - defUseRank(useLocation, block, rankIndex, offset) - ) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`, or - * a use of `useLocation` at offset `offset` in block `block`. `rankIndex` is the sequence number of the definition - * or use within `block`, counting only uses of `useLocation` and definitions that overlap `useLocation`. - */ - private predicate defUseRank( - Alias::MemoryLocation useLocation, OldBlock block, int rankIndex, int offset - ) { - offset = - rank[rankIndex](int j | - hasDefinition(useLocation, _, block, j) or hasUse(useLocation, block, j, _) - ) - } - - /** - * Holds if the `Phi` instruction for location `useLocation` at the beginning of block `phiBlock` has an operand along - * the incoming edge from `predBlock`, where that operand's definition is at offset `defOffset` in block `defBlock`. - */ - pragma[noopt] - predicate hasPhiOperandDefinition( - Alias::MemoryLocation defLocation, Alias::MemoryLocation useLocation, OldBlock phiBlock, - OldBlock predBlock, OldBlock defBlock, int defOffset - ) { - exists(int defRank | - definitionHasPhiNode(useLocation, phiBlock) and - predBlock = phiBlock.getAFeasiblePredecessor() and - definitionReachesEndOfBlock(useLocation, defBlock, defRank, predBlock) and - hasDefinitionAtRank(useLocation, defLocation, defBlock, defRank, defOffset) and - exists(Alias::getOverlap(defLocation, useLocation)) - ) - } -} - -predicate canReuseSsaForMemoryResult(Instruction instruction) { - exists(OldInstruction oldInstruction | - oldInstruction = getOldInstruction(instruction) and - ( - // The previous iteration said it was reusable, so we should mark it as reusable as well. - Alias::canReuseSsaForOldResult(oldInstruction) - or - // The current alias analysis says it is reusable. - Alias::getResultMemoryLocation(oldInstruction).canReuseSsa() - ) - ) - or - exists(Alias::MemoryLocation defLocation | - // This is a `Phi` for a reusable location, so the result of the `Phi` is reusable as well. - instruction = phiInstruction(_, defLocation) and - defLocation.canReuseSsa() - ) - // We don't support reusing SSA for any location that could create a `Chi` instruction. -} - -/** - * Expose some of the internal predicates to PrintSSA.qll. We do this by publicly importing those modules in the - * `DebugSsa` module, which is then imported by PrintSSA. - */ -module DebugSsa { - import PhiInsertion - import DefUse -} - -import CachedForDebugging - -cached -private module CachedForDebugging { - cached - string getTempVariableUniqueId(IRTempVariable var) { - result = getOldTempVariable(var).getUniqueId() - } - - cached - string getInstructionUniqueId(Instruction instr) { - exists(OldInstruction oldInstr | - oldInstr = getOldInstruction(instr) and - result = "NonSSA: " + oldInstr.getUniqueId() - ) - or - exists(Alias::MemoryLocation location, OldBlock phiBlock, string specificity | - instr = getPhi(phiBlock, location) and - result = - "Phi Block(" + phiBlock.getFirstInstruction().getUniqueId() + ")[" + specificity + "]: " + - location.getUniqueId() and - if location instanceof Alias::VirtualVariable - then - // Sort Phi nodes for virtual variables before Phi nodes for member locations. - specificity = "g" - else specificity = "s" - ) - or - instr = unreachedInstruction(_) and - result = "Unreached" - } - - private OldIR::IRTempVariable getOldTempVariable(IRTempVariable var) { - result.getEnclosingFunction() = var.getEnclosingFunction() and - result.getAst() = var.getAst() and - result.getTag() = var.getTag() - } - - cached - predicate instructionHasSortKeys(Instruction instr, int key1, int key2) { - exists(OldInstruction oldInstr | - oldInstr = getOldInstruction(instr) and - oldInstr.hasSortKeys(key1, key2) - ) - or - instr instanceof TUnreachedInstruction and - key1 = maxValue() and - key2 = maxValue() - } - - /** - * Returns the value of the maximum representable integer. - */ - cached - int maxValue() { result = 2147483647 } -} - -/** - * Provides the portion of the parameterized IR interface that is used to construct the SSA stages - * of the IR. The raw stage of the IR does not expose these predicates. - * These predicates are all just aliases for predicates defined in the `Cached` module. This ensures - * that all of SSA construction will be evaluated in the same stage. - */ -module Ssa { - class MemoryLocation = Alias::MemoryLocation; - - predicate hasPhiInstruction = Cached::hasPhiInstructionCached/2; - - predicate hasChiInstruction = Cached::hasChiInstructionCached/1; - - predicate hasChiNodeAfterUninitializedGroup = Cached::hasChiNodeAfterUninitializedGroup/1; - - predicate hasUnreachedInstruction = Cached::hasUnreachedInstructionCached/1; - - class VariableGroup = Alias::VariableGroup; -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionImports.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionImports.qll deleted file mode 100644 index 219180d9f4d3..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionImports.qll +++ /dev/null @@ -1,6 +0,0 @@ -import semmle.code.cpp.ir.implementation.Opcode as Opcode -import semmle.code.cpp.ir.implementation.internal.OperandTag as OperandTag -import semmle.code.cpp.ir.internal.Overlap as Overlap -import semmle.code.cpp.ir.implementation.internal.TInstruction as TInstruction -import semmle.code.cpp.ir.implementation.raw.IR as RawIR -import semmle.code.cpp.ir.implementation.internal.TOperand as TOperand diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll deleted file mode 100644 index b6cb4ea3d209..000000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll +++ /dev/null @@ -1,8 +0,0 @@ -import semmle.code.cpp.ir.implementation.unaliased_ssa.IR as OldIR -import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.reachability.ReachableBlock as Reachability -import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.reachability.Dominance as Dominance -import semmle.code.cpp.ir.implementation.aliased_ssa.IR as NewIR -import semmle.code.cpp.ir.implementation.internal.TInstruction::AliasedSsaInstructions as SsaInstructions -import semmle.code.cpp.ir.internal.IRCppLanguage as Language -import AliasedSSA as Alias -import semmle.code.cpp.ir.implementation.internal.TOperand::AliasedSsaOperands as SsaOperands diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll index 72ff5485a523..f02cdf09f25c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll @@ -31,24 +31,7 @@ newtype TInstruction = TUnaliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { UnaliasedSsa::Ssa::hasUnreachedInstruction(irFunc) } or - TUnaliasedSsaUninitializedGroupInstruction(UnaliasedSsa::Ssa::VariableGroup vg) or - TAliasedSsaPhiInstruction( - TRawInstruction blockStartInstr, AliasedSsa::Ssa::MemoryLocation memoryLocation - ) { - AliasedSsa::Ssa::hasPhiInstruction(blockStartInstr, memoryLocation) - } or - TAliasedSsaChiInstruction(TRawInstruction primaryInstruction) { - AliasedSsa::Ssa::hasChiInstruction(primaryInstruction) - } or - TAliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { - AliasedSsa::Ssa::hasUnreachedInstruction(irFunc) - } or - TAliasedSsaUninitializedGroupInstruction(AliasedSsa::Ssa::VariableGroup vg) or - TAliasedSsaChiAfterUninitializedGroupInstruction( - TAliasedSsaUninitializedGroupInstruction initGroup - ) { - AliasedSsa::Ssa::hasChiNodeAfterUninitializedGroup(initGroup) - } + TUnaliasedSsaUninitializedGroupInstruction(UnaliasedSsa::Ssa::VariableGroup vg) /** * Provides wrappers for the constructors of each branch of `TInstruction` that is used by the @@ -89,49 +72,3 @@ module UnaliasedSsaInstructions { // compiler realize that certain expressions in `SSAConstruction` are unsatisfiable. TRawOrUninitializedGroupInstruction uninitializedGroup(VariableGroup vg) { none() } } - -/** - * Provides wrappers for the constructors of each branch of `TInstruction` that is used by the - * aliased SSA stage. - * These wrappers are not parameterized because it is not possible to invoke an IPA constructor via - * a class alias. - */ -module AliasedSsaInstructions { - class TPhiInstruction = TAliasedSsaPhiInstruction or TUnaliasedSsaPhiInstruction; - - TPhiInstruction phiInstruction( - TRawInstruction blockStartInstr, AliasedSsa::Ssa::MemoryLocation memoryLocation - ) { - result = TAliasedSsaPhiInstruction(blockStartInstr, memoryLocation) - } - - TPhiInstruction reusedPhiInstruction(TRawInstruction blockStartInstr) { - result = TUnaliasedSsaPhiInstruction(blockStartInstr, _) - } - - class TChiInstruction = - TAliasedSsaChiInstruction or TAliasedSsaChiAfterUninitializedGroupInstruction; - - class TRawOrInitialzieGroupInstruction = - TRawInstruction or TAliasedSsaUninitializedGroupInstruction; - - TChiInstruction chiInstruction(TRawOrInitialzieGroupInstruction primaryInstruction) { - result = TAliasedSsaChiInstruction(primaryInstruction) - or - result = TAliasedSsaChiAfterUninitializedGroupInstruction(primaryInstruction) - } - - class TUnreachedInstruction = TAliasedSsaUnreachedInstruction; - - TUnreachedInstruction unreachedInstruction(IRFunctionBase irFunc) { - result = TAliasedSsaUnreachedInstruction(irFunc) - } - - class VariableGroup = AliasedSsa::Ssa::VariableGroup; - - class TUninitializedGroupInstruction = TAliasedSsaUninitializedGroupInstruction; - - TUninitializedGroupInstruction uninitializedGroup(VariableGroup vg) { - result = TAliasedSsaUninitializedGroupInstruction(vg) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll index b81eca5aafe7..15258e776f33 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll @@ -1,4 +1,3 @@ import semmle.code.cpp.ir.internal.IRCppLanguage as Language import semmle.code.cpp.ir.implementation.raw.internal.IRConstruction as IRConstruction import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SSAConstruction as UnaliasedSsa -import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SSAConstruction as AliasedSsa diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll index 6989cfde765f..4415b3eb351b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll @@ -2,25 +2,19 @@ private import TInstruction private import OperandTag private import semmle.code.cpp.ir.implementation.raw.internal.IRConstruction as RawConstruction private import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SSAConstruction as UnaliasedConstruction -private import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SSAConstruction as AliasedConstruction private import semmle.code.cpp.ir.implementation.raw.IR as Raw private import semmle.code.cpp.ir.implementation.unaliased_ssa.IR as Unaliased -private import semmle.code.cpp.ir.implementation.aliased_ssa.IR as Aliased private import semmle.code.cpp.ir.internal.Overlap /** * Provides the newtype used to represent operands across all phases of the IR. */ private module Internal { - private class TAliasedChiInstruction = - TAliasedSsaChiInstruction or TAliasedSsaChiAfterUninitializedGroupInstruction; - /** * An IR operand. `TOperand` is shared across all phases of the IR. There are branches of this * type for operands created directly from the AST (`TRegisterOperand` and `TNonSSAMemoryOperand`), - * for operands computed by each stage of SSA construction (`T*PhiOperand` and - * `TAliasedChiOperand`), and a placehold branch for operands that do not exist in a given - * stage of IR construction (`TNoOperand`). + * for operands computed by each stage of SSA construction (`T*PhiOperand`), and a placehold branch + * for operands that do not exist in a given stage of IR construction (`TNoOperand`). */ cached newtype TOperand = @@ -41,21 +35,7 @@ private module Internal { Unaliased::PhiInstruction useInstr, Unaliased::IRBlock predecessorBlock, Overlap overlap ) { exists(UnaliasedConstruction::getPhiOperandDefinition(useInstr, predecessorBlock, overlap)) - } or - //// ALIASED - //// - // Until we share SSA, these will be all the phis there are. With SSA - // sharing, these will add to the ones that are already there. - // If we share SSA, be careful with the case where we remove all possible - // indirect writes to a variable because they're dead code. In that case it's - // important that we use the same definition of "is variable aliased" across - // the phases. - TAliasedPhiOperand( - TAliasedSsaPhiInstruction useInstr, Aliased::IRBlock predecessorBlock, Overlap overlap - ) { - exists(AliasedConstruction::getPhiOperandDefinition(useInstr, predecessorBlock, overlap)) - } or - TAliasedChiOperand(TAliasedChiInstruction useInstr, ChiOperandTag tag) { any() } + } } /** @@ -160,54 +140,3 @@ module UnaliasedSsaOperands { */ TChiOperand chiOperand(Unaliased::Instruction useInstr, ChiOperandTag tag) { none() } } - -/** - * Provides wrappers for the constructors of each branch of `TOperand` that is used by the - * aliased SSA stage. - * These wrappers are not parameterized because it is not possible to invoke an IPA constructor via - * a class alias. - */ -module AliasedSsaOperands { - import Shared - - class TPhiOperand = Internal::TAliasedPhiOperand or Internal::TUnaliasedPhiOperand; - - class TChiOperand = Internal::TAliasedChiOperand; - - class TNonPhiMemoryOperand = TNonSsaMemoryOperand or TChiOperand; - - /** - * Returns the Phi operand with the specified parameters. - */ - TPhiOperand phiOperand( - Aliased::PhiInstruction useInstr, Aliased::Instruction defInstr, - Aliased::IRBlock predecessorBlock, Overlap overlap - ) { - defInstr = AliasedConstruction::getPhiOperandDefinition(useInstr, predecessorBlock, overlap) and - result = Internal::TAliasedPhiOperand(useInstr, predecessorBlock, overlap) - } - - /** - * Returns the Phi operand with the specified parameters. - */ - TPhiOperand reusedPhiOperand( - Aliased::PhiInstruction useInstr, Aliased::Instruction defInstr, - Aliased::IRBlock predecessorBlock, Overlap overlap - ) { - exists(Unaliased::IRBlock oldBlock | - predecessorBlock = AliasedConstruction::getNewBlock(oldBlock) and - result = Internal::TUnaliasedPhiOperand(useInstr, oldBlock, _) and - defInstr = AliasedConstruction::getPhiOperandDefinition(useInstr, predecessorBlock, overlap) - ) - } - - private class TChiInstruction = - TAliasedSsaChiInstruction or TAliasedSsaChiAfterUninitializedGroupInstruction; - - /** - * Returns the Chi operand with the specified parameters. - */ - TChiOperand chiOperand(TChiInstruction useInstr, ChiOperandTag tag) { - result = Internal::TAliasedChiOperand(useInstr, tag) - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll index 4a40c90a1dd9..a35208ae7393 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll @@ -31,7 +31,7 @@ */ import cpp -private import semmle.code.cpp.ir.implementation.aliased_ssa.gvn.internal.ValueNumberingInternal +private import semmle.code.cpp.ir.implementation.unaliased_ssa.gvn.internal.ValueNumberingInternal private import semmle.code.cpp.ir.IR /** From f7ed2c72470e8cb37a2b5ed80dac1701822fd8f3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Feb 2026 19:39:45 +0000 Subject: [PATCH 02/32] C++: Remove aliased SSA tests Aliased SSA is being removed. --- .../ir/ssa/aliased_ssa_consistency.expected | 32 - .../ir/ssa/aliased_ssa_consistency.ql | 2 - .../aliased_ssa_consistency_unsound.expected | 32 - .../ssa/aliased_ssa_consistency_unsound.qlref | 1 - .../ir/ssa/aliased_ssa_ir.expected | 2264 ----------------- .../library-tests/ir/ssa/aliased_ssa_ir.ql | 6 - .../ir/ssa/aliased_ssa_ir_unsound.expected | 2264 ----------------- .../ir/ssa/aliased_ssa_ir_unsound.qlref | 1 - .../ir/ssa/aliased_ssa_overlap.expected | 526 ---- .../ir/ssa/aliased_ssa_overlap.ql | 5 - .../ssa/aliased_ssa_ssa_consistency.expected | 3 - .../ir/ssa/aliased_ssa_ssa_consistency.ql | 2 - ...iased_ssa_ssa_consistency_unsound.expected | 3 - .../aliased_ssa_ssa_consistency_unsound.qlref | 1 - 14 files changed, 5142 deletions(-) delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.ql delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.qlref delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.ql delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.qlref delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.ql delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.expected delete mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.qlref diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.expected deleted file mode 100644 index 91def5d38710..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.expected +++ /dev/null @@ -1,32 +0,0 @@ -missingOperand -unexpectedOperand -duplicateOperand -missingPhiOperand -missingOperandType -duplicateChiOperand -sideEffectWithoutPrimary -instructionWithoutSuccessor -ambiguousSuccessors -unexplainedLoop -unnecessaryPhiInstruction -memoryOperandDefinitionIsUnmodeled -operandAcrossFunctions -instructionWithoutUniqueBlock -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -containsLoopOfForwardEdges -missingIRType -multipleIRTypes -lostReachability -backEdgeCountMismatch -useNotDominatedByDefinition -switchInstructionWithoutDefaultEdge -notMarkedAsConflated -wronglyMarkedAsConflated -invalidOverlap -nonUniqueEnclosingIRFunction -fieldAddressOnNonPointer -thisArgumentIsNonPointer -nonUniqueIRVariable -nonBooleanOperand -missingCppType diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.ql b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.ql deleted file mode 100644 index 847991163c85..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency.ql +++ /dev/null @@ -1,2 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.IRConsistency -import semmle.code.cpp.ir.implementation.UseSoundEscapeAnalysis diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.expected deleted file mode 100644 index 91def5d38710..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.expected +++ /dev/null @@ -1,32 +0,0 @@ -missingOperand -unexpectedOperand -duplicateOperand -missingPhiOperand -missingOperandType -duplicateChiOperand -sideEffectWithoutPrimary -instructionWithoutSuccessor -ambiguousSuccessors -unexplainedLoop -unnecessaryPhiInstruction -memoryOperandDefinitionIsUnmodeled -operandAcrossFunctions -instructionWithoutUniqueBlock -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -containsLoopOfForwardEdges -missingIRType -multipleIRTypes -lostReachability -backEdgeCountMismatch -useNotDominatedByDefinition -switchInstructionWithoutDefaultEdge -notMarkedAsConflated -wronglyMarkedAsConflated -invalidOverlap -nonUniqueEnclosingIRFunction -fieldAddressOnNonPointer -thisArgumentIsNonPointer -nonUniqueIRVariable -nonBooleanOperand -missingCppType diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.qlref b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.qlref deleted file mode 100644 index 0c9100ea0432..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_consistency_unsound.qlref +++ /dev/null @@ -1 +0,0 @@ -semmle/code/cpp/ir/IRConsistency.ql \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected deleted file mode 100644 index 4a7e70ae106c..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ /dev/null @@ -1,2264 +0,0 @@ -ssa.c: -# 2| void named_designators() -# 2| Block 0 -# 2| v2_1(void) = EnterFunction : -# 2| m2_2(unknown) = AliasedDefinition : -# 2| m2_3(unknown) = InitializeNonLocal : -# 2| m2_4(unknown) = Chi : total:m2_2, partial:m2_3 -# 3| r3_1(glval) = VariableAddress[foo] : -# 3| m3_2(Foo) = Uninitialized[foo] : &:r3_1 -# 3| r3_3(glval) = FieldAddress[x] : r3_1 -# 3| r3_4(int) = Constant[0] : -# 3| r3_5(glval) = PointerAdd[4] : r3_3, r3_4 -# 3| r3_6(int) = Constant[1234] : -# 3| m3_7(int) = Store[?] : &:r3_5, r3_6 -# 3| m3_8(Foo) = Chi : total:m3_2, partial:m3_7 -# 3| r3_9(int) = Constant[1] : -# 3| r3_10(glval) = PointerAdd[4] : r3_3, r3_9 -# 3| r3_11(int) = Constant[0] : -# 3| m3_12(int) = Store[?] : &:r3_10, r3_11 -# 3| m3_13(Foo) = Chi : total:m3_8, partial:m3_12 -# 3| r3_14(glval) = FieldAddress[x] : r3_1 -# 3| r3_15(int) = Constant[0] : -# 3| r3_16(glval) = PointerAdd[4] : r3_14, r3_15 -# 3| r3_17(int) = Constant[0] : -# 3| m3_18(int) = Store[?] : &:r3_16, r3_17 -# 3| m3_19(Foo) = Chi : total:m3_13, partial:m3_18 -# 3| r3_20(int) = Constant[1] : -# 3| r3_21(glval) = PointerAdd[4] : r3_14, r3_20 -# 3| r3_22(int) = Constant[5678] : -# 3| m3_23(int) = Store[?] : &:r3_21, r3_22 -# 3| m3_24(Foo) = Chi : total:m3_19, partial:m3_23 -# 4| v4_1(void) = NoOp : -# 2| v2_5(void) = ReturnVoid : -# 2| v2_6(void) = AliasedUse : m2_3 -# 2| v2_7(void) = ExitFunction : - -# 6| void repeated_designators() -# 6| Block 0 -# 6| v6_1(void) = EnterFunction : -# 6| m6_2(unknown) = AliasedDefinition : -# 6| m6_3(unknown) = InitializeNonLocal : -# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 -# 7| r7_1(glval) = VariableAddress[x] : -# 7| m7_2(int[1]) = Uninitialized[x] : &:r7_1 -# 7| r7_3(int) = Constant[0] : -# 7| r7_4(glval) = PointerAdd[4] : r7_1, r7_3 -# 7| r7_5(int) = Constant[1234] : -# 7| m7_6(int) = Store[?] : &:r7_4, r7_5 -# 7| r7_7(int) = Constant[0] : -# 7| r7_8(glval) = PointerAdd[4] : r7_1, r7_7 -# 7| r7_9(int) = Constant[5678] : -# 7| m7_10(int) = Store[?] : &:r7_8, r7_9 -# 8| v8_1(void) = NoOp : -# 6| v6_5(void) = ReturnVoid : -# 6| v6_6(void) = AliasedUse : m6_3 -# 6| v6_7(void) = ExitFunction : - -# 11| void named_designators_2() -# 11| Block 0 -# 11| v11_1(void) = EnterFunction : -# 11| m11_2(unknown) = AliasedDefinition : -# 11| m11_3(unknown) = InitializeNonLocal : -# 11| m11_4(unknown) = Chi : total:m11_2, partial:m11_3 -# 12| r12_1(glval) = VariableAddress[foo] : -# 12| m12_2(Foo2) = Uninitialized[foo] : &:r12_1 -# 12| r12_3(glval) = FieldAddress[x] : r12_1 -# 12| r12_4(int) = Constant[1234] : -# 12| m12_5(int) = Store[?] : &:r12_3, r12_4 -# 12| m12_6(Foo2) = Chi : total:m12_2, partial:m12_5 -# 12| r12_7(glval) = FieldAddress[y] : r12_1 -# 12| r12_8(int) = Constant[5678] : -# 12| m12_9(int) = Store[?] : &:r12_7, r12_8 -# 12| m12_10(Foo2) = Chi : total:m12_6, partial:m12_9 -# 14| r14_1(glval) = VariableAddress[foo_swapped] : -# 14| m14_2(Foo2) = Uninitialized[foo_swapped] : &:r14_1 -# 14| r14_3(glval) = FieldAddress[x] : r14_1 -# 14| r14_4(int) = Constant[1234] : -# 14| m14_5(int) = Store[?] : &:r14_3, r14_4 -# 14| m14_6(Foo2) = Chi : total:m14_2, partial:m14_5 -# 14| r14_7(glval) = FieldAddress[y] : r14_1 -# 14| r14_8(int) = Constant[5678] : -# 14| m14_9(int) = Store[?] : &:r14_7, r14_8 -# 14| m14_10(Foo2) = Chi : total:m14_6, partial:m14_9 -# 15| v15_1(void) = NoOp : -# 11| v11_5(void) = ReturnVoid : -# 11| v11_6(void) = AliasedUse : m11_3 -# 11| v11_7(void) = ExitFunction : - -# 17| void non_repeated_designators() -# 17| Block 0 -# 17| v17_1(void) = EnterFunction : -# 17| m17_2(unknown) = AliasedDefinition : -# 17| m17_3(unknown) = InitializeNonLocal : -# 17| m17_4(unknown) = Chi : total:m17_2, partial:m17_3 -# 18| r18_1(glval) = VariableAddress[x] : -# 18| m18_2(int[2]) = Uninitialized[x] : &:r18_1 -# 18| r18_3(int) = Constant[0] : -# 18| r18_4(glval) = PointerAdd[4] : r18_1, r18_3 -# 18| r18_5(int) = Constant[1234] : -# 18| m18_6(int) = Store[?] : &:r18_4, r18_5 -# 18| m18_7(int[2]) = Chi : total:m18_2, partial:m18_6 -# 18| r18_8(int) = Constant[1] : -# 18| r18_9(glval) = PointerAdd[4] : r18_1, r18_8 -# 18| r18_10(int) = Constant[5678] : -# 18| m18_11(int) = Store[?] : &:r18_9, r18_10 -# 18| m18_12(int[2]) = Chi : total:m18_7, partial:m18_11 -# 20| r20_1(glval) = VariableAddress[y] : -# 20| m20_2(int[2]) = Uninitialized[y] : &:r20_1 -# 20| r20_3(int) = Constant[0] : -# 20| r20_4(glval) = PointerAdd[4] : r20_1, r20_3 -# 20| r20_5(int) = Constant[5678] : -# 20| m20_6(int) = Store[?] : &:r20_4, r20_5 -# 20| m20_7(int[2]) = Chi : total:m20_2, partial:m20_6 -# 20| r20_8(int) = Constant[1] : -# 20| r20_9(glval) = PointerAdd[4] : r20_1, r20_8 -# 20| r20_10(int) = Constant[1234] : -# 20| m20_11(int) = Store[?] : &:r20_9, r20_10 -# 20| m20_12(int[2]) = Chi : total:m20_7, partial:m20_11 -# 21| v21_1(void) = NoOp : -# 17| v17_5(void) = ReturnVoid : -# 17| v17_6(void) = AliasedUse : m17_3 -# 17| v17_7(void) = ExitFunction : - -# 28| void test_foo_array_and_int() -# 28| Block 0 -# 28| v28_1(void) = EnterFunction : -# 28| m28_2(unknown) = AliasedDefinition : -# 28| m28_3(unknown) = InitializeNonLocal : -# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 -# 29| r29_1(glval) = VariableAddress[f] : -# 29| m29_2(Foo_array_and_int) = Uninitialized[f] : &:r29_1 -# 29| r29_3(glval) = FieldAddress[x] : r29_1 -# 29| r29_4(int) = Constant[0] : -# 29| r29_5(glval) = PointerAdd[4] : r29_3, r29_4 -# 29| r29_6(int) = Constant[0] : -# 29| m29_7(int) = Store[?] : &:r29_5, r29_6 -# 29| m29_8(Foo_array_and_int) = Chi : total:m29_2, partial:m29_7 -# 29| r29_9(int) = Constant[1] : -# 29| r29_10(glval) = PointerAdd[4] : r29_3, r29_9 -# 29| r29_11(int) = Constant[1] : -# 29| m29_12(int) = Store[?] : &:r29_10, r29_11 -# 29| m29_13(Foo_array_and_int) = Chi : total:m29_8, partial:m29_12 -# 29| r29_14(glval) = FieldAddress[x] : r29_1 -# 29| r29_15(int) = Constant[0] : -# 29| r29_16(glval) = PointerAdd[4] : r29_14, r29_15 -# 29| r29_17(int) = Constant[42] : -# 29| m29_18(int) = Store[?] : &:r29_16, r29_17 -# 29| m29_19(Foo_array_and_int) = Chi : total:m29_13, partial:m29_18 -# 29| r29_20(int) = Constant[1] : -# 29| r29_21(glval) = PointerAdd[4] : r29_14, r29_20 -# 29| r29_22(int) = Constant[0] : -# 29| m29_23(int) = Store[?] : &:r29_21, r29_22 -# 29| m29_24(Foo_array_and_int) = Chi : total:m29_19, partial:m29_23 -# 29| r29_25(glval) = FieldAddress[y] : r29_1 -# 29| r29_26(int) = Constant[42] : -# 29| m29_27(int) = Store[?] : &:r29_25, r29_26 -# 29| m29_28(Foo_array_and_int) = Chi : total:m29_24, partial:m29_27 -# 30| v30_1(void) = NoOp : -# 28| v28_5(void) = ReturnVoid : -# 28| v28_6(void) = AliasedUse : m28_3 -# 28| v28_7(void) = ExitFunction : - -ssa.cpp: -# 13| int ChiPhiNode(Point*, bool, bool) -# 13| Block 0 -# 13| v13_1(void) = EnterFunction : -# 13| m13_2(unknown) = AliasedDefinition : -# 13| m13_3(unknown) = InitializeNonLocal : -# 13| m13_4(unknown) = Chi : total:m13_2, partial:m13_3 -# 13| r13_5(glval) = VariableAddress[p] : -# 13| m13_6(Point *) = InitializeParameter[p] : &:r13_5 -# 13| r13_7(Point *) = Load[p] : &:r13_5, m13_6 -# 13| m13_8(unknown) = InitializeIndirection[p] : &:r13_7 -# 13| r13_9(glval) = VariableAddress[which1] : -# 13| m13_10(bool) = InitializeParameter[which1] : &:r13_9 -# 13| r13_11(glval) = VariableAddress[which2] : -# 13| m13_12(bool) = InitializeParameter[which2] : &:r13_11 -# 14| r14_1(glval) = VariableAddress[which1] : -# 14| r14_2(bool) = Load[which1] : &:r14_1, m13_10 -# 14| v14_3(void) = ConditionalBranch : r14_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 15| Block 1 -# 15| r15_1(glval) = VariableAddress[p] : -# 15| r15_2(Point *) = Load[p] : &:r15_1, m13_6 -# 15| r15_3(glval) = FieldAddress[x] : r15_2 -# 15| r15_4(int) = Load[?] : &:r15_3, ~m13_8 -# 15| r15_5(int) = Constant[1] : -# 15| r15_6(int) = Add : r15_4, r15_5 -# 15| m15_7(int) = Store[?] : &:r15_3, r15_6 -# 15| m15_8(unknown) = Chi : total:m13_8, partial:m15_7 -#-----| Goto -> Block 3 - -# 18| Block 2 -# 18| r18_1(glval) = VariableAddress[p] : -# 18| r18_2(Point *) = Load[p] : &:r18_1, m13_6 -# 18| r18_3(glval) = FieldAddress[y] : r18_2 -# 18| r18_4(int) = Load[?] : &:r18_3, ~m13_8 -# 18| r18_5(int) = Constant[1] : -# 18| r18_6(int) = Add : r18_4, r18_5 -# 18| m18_7(int) = Store[?] : &:r18_3, r18_6 -# 18| m18_8(unknown) = Chi : total:m13_8, partial:m18_7 -#-----| Goto -> Block 3 - -# 21| Block 3 -# 21| m21_1(int) = Phi : from 1:~m13_8, from 2:m18_7 -# 21| m21_2(int) = Phi : from 1:m15_7, from 2:~m13_8 -# 21| m21_3(unknown) = Phi : from 1:m15_8, from 2:m18_8 -# 21| r21_4(glval) = VariableAddress[which2] : -# 21| r21_5(bool) = Load[which2] : &:r21_4, m13_12 -# 21| v21_6(void) = ConditionalBranch : r21_5 -#-----| False -> Block 5 -#-----| True -> Block 4 - -# 22| Block 4 -# 22| r22_1(glval) = VariableAddress[p] : -# 22| r22_2(Point *) = Load[p] : &:r22_1, m13_6 -# 22| r22_3(glval) = FieldAddress[x] : r22_2 -# 22| r22_4(int) = Load[?] : &:r22_3, m21_2 -# 22| r22_5(int) = Constant[1] : -# 22| r22_6(int) = Add : r22_4, r22_5 -# 22| m22_7(int) = Store[?] : &:r22_3, r22_6 -# 22| m22_8(unknown) = Chi : total:m21_3, partial:m22_7 -#-----| Goto -> Block 6 - -# 25| Block 5 -# 25| r25_1(glval) = VariableAddress[p] : -# 25| r25_2(Point *) = Load[p] : &:r25_1, m13_6 -# 25| r25_3(glval) = FieldAddress[y] : r25_2 -# 25| r25_4(int) = Load[?] : &:r25_3, m21_1 -# 25| r25_5(int) = Constant[1] : -# 25| r25_6(int) = Add : r25_4, r25_5 -# 25| m25_7(int) = Store[?] : &:r25_3, r25_6 -# 25| m25_8(unknown) = Chi : total:m21_3, partial:m25_7 -#-----| Goto -> Block 6 - -# 28| Block 6 -# 28| m28_1(int) = Phi : from 4:m21_1, from 5:m25_7 -# 28| m28_2(int) = Phi : from 4:m22_7, from 5:m21_2 -# 28| m28_3(unknown) = Phi : from 4:m22_8, from 5:m25_8 -# 28| r28_4(glval) = VariableAddress[#return] : -# 28| r28_5(glval) = VariableAddress[p] : -# 28| r28_6(Point *) = Load[p] : &:r28_5, m13_6 -# 28| r28_7(glval) = FieldAddress[x] : r28_6 -# 28| r28_8(int) = Load[?] : &:r28_7, m28_2 -# 28| r28_9(glval) = VariableAddress[p] : -# 28| r28_10(Point *) = Load[p] : &:r28_9, m13_6 -# 28| r28_11(glval) = FieldAddress[y] : r28_10 -# 28| r28_12(int) = Load[?] : &:r28_11, m28_1 -# 28| r28_13(int) = Add : r28_8, r28_12 -# 28| m28_14(int) = Store[#return] : &:r28_4, r28_13 -# 13| v13_13(void) = ReturnIndirection[p] : &:r13_7, m28_3 -# 13| r13_14(glval) = VariableAddress[#return] : -# 13| v13_15(void) = ReturnValue : &:r13_14, m28_14 -# 13| v13_16(void) = AliasedUse : m13_3 -# 13| v13_17(void) = ExitFunction : - -# 31| int UnreachableViaGoto() -# 31| Block 0 -# 31| v31_1(void) = EnterFunction : -# 31| m31_2(unknown) = AliasedDefinition : -# 31| m31_3(unknown) = InitializeNonLocal : -# 31| m31_4(unknown) = Chi : total:m31_2, partial:m31_3 -# 32| v32_1(void) = NoOp : -# 34| v34_1(void) = NoOp : -# 35| r35_1(glval) = VariableAddress[#return] : -# 35| r35_2(int) = Constant[0] : -# 35| m35_3(int) = Store[#return] : &:r35_1, r35_2 -# 31| r31_5(glval) = VariableAddress[#return] : -# 31| v31_6(void) = ReturnValue : &:r31_5, m35_3 -# 31| v31_7(void) = AliasedUse : m31_3 -# 31| v31_8(void) = ExitFunction : - -# 38| int UnreachableIf(bool) -# 38| Block 0 -# 38| v38_1(void) = EnterFunction : -# 38| m38_2(unknown) = AliasedDefinition : -# 38| m38_3(unknown) = InitializeNonLocal : -# 38| m38_4(unknown) = Chi : total:m38_2, partial:m38_3 -# 38| r38_5(glval) = VariableAddress[b] : -# 38| m38_6(bool) = InitializeParameter[b] : &:r38_5 -# 39| r39_1(glval) = VariableAddress[x] : -# 39| r39_2(int) = Constant[5] : -# 39| m39_3(int) = Store[x] : &:r39_1, r39_2 -# 40| r40_1(glval) = VariableAddress[y] : -# 40| r40_2(int) = Constant[10] : -# 40| m40_3(int) = Store[y] : &:r40_1, r40_2 -# 41| r41_1(glval) = VariableAddress[b] : -# 41| r41_2(bool) = Load[b] : &:r41_1, m38_6 -# 41| v41_3(void) = ConditionalBranch : r41_2 -#-----| False -> Block 4 -#-----| True -> Block 2 - -# 38| Block 1 -# 38| m38_7(int) = Phi : from 3:m46_3, from 5:m51_3 -# 38| r38_8(glval) = VariableAddress[#return] : -# 38| v38_9(void) = ReturnValue : &:r38_8, m38_7 -# 38| v38_10(void) = AliasedUse : m38_3 -# 38| v38_11(void) = ExitFunction : - -# 42| Block 2 -# 42| r42_1(glval) = VariableAddress[x] : -# 42| r42_2(int) = Load[x] : &:r42_1, m39_3 -# 42| r42_3(glval) = VariableAddress[y] : -# 42| r42_4(int) = Load[y] : &:r42_3, m40_3 -# 42| r42_5(bool) = CompareEQ : r42_2, r42_4 -# 42| v42_6(void) = ConditionalBranch : r42_5 -#-----| False -> Block 3 -#-----| True -> Block 6 - -# 46| Block 3 -# 46| r46_1(glval) = VariableAddress[#return] : -# 46| r46_2(int) = Constant[0] : -# 46| m46_3(int) = Store[#return] : &:r46_1, r46_2 -#-----| Goto -> Block 1 - -# 50| Block 4 -# 50| r50_1(glval) = VariableAddress[x] : -# 50| r50_2(int) = Load[x] : &:r50_1, m39_3 -# 50| r50_3(glval) = VariableAddress[y] : -# 50| r50_4(int) = Load[y] : &:r50_3, m40_3 -# 50| r50_5(bool) = CompareLT : r50_2, r50_4 -# 50| v50_6(void) = ConditionalBranch : r50_5 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 51| Block 5 -# 51| r51_1(glval) = VariableAddress[#return] : -# 51| r51_2(int) = Constant[0] : -# 51| m51_3(int) = Store[#return] : &:r51_1, r51_2 -#-----| Goto -> Block 1 - -# 38| Block 6 -# 38| v38_12(void) = Unreached : - -# 59| int DoWhileFalse() -# 59| Block 0 -# 59| v59_1(void) = EnterFunction : -# 59| m59_2(unknown) = AliasedDefinition : -# 59| m59_3(unknown) = InitializeNonLocal : -# 59| m59_4(unknown) = Chi : total:m59_2, partial:m59_3 -# 60| r60_1(glval) = VariableAddress[i] : -# 60| r60_2(int) = Constant[0] : -# 60| m60_3(int) = Store[i] : &:r60_1, r60_2 -# 62| r62_1(glval) = VariableAddress[i] : -# 62| r62_2(int) = Load[i] : &:r62_1, m60_3 -# 62| r62_3(int) = Constant[1] : -# 62| r62_4(int) = Add : r62_2, r62_3 -# 62| m62_5(int) = Store[i] : &:r62_1, r62_4 -# 63| r63_1(bool) = Constant[0] : -# 63| v63_2(void) = ConditionalBranch : r63_1 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 65| Block 1 -# 65| r65_1(glval) = VariableAddress[#return] : -# 65| r65_2(glval) = VariableAddress[i] : -# 65| r65_3(int) = Load[i] : &:r65_2, m62_5 -# 65| m65_4(int) = Store[#return] : &:r65_1, r65_3 -# 59| r59_5(glval) = VariableAddress[#return] : -# 59| v59_6(void) = ReturnValue : &:r59_5, m65_4 -# 59| v59_7(void) = AliasedUse : m59_3 -# 59| v59_8(void) = ExitFunction : - -# 59| Block 2 -# 59| v59_9(void) = Unreached : - -# 68| void chiNodeAtEndOfLoop(int, char*) -# 68| Block 0 -# 68| v68_1(void) = EnterFunction : -# 68| m68_2(unknown) = AliasedDefinition : -# 68| m68_3(unknown) = InitializeNonLocal : -# 68| m68_4(unknown) = Chi : total:m68_2, partial:m68_3 -# 68| r68_5(glval) = VariableAddress[n] : -# 68| m68_6(int) = InitializeParameter[n] : &:r68_5 -# 68| r68_7(glval) = VariableAddress[p] : -# 68| m68_8(char *) = InitializeParameter[p] : &:r68_7 -# 68| r68_9(char *) = Load[p] : &:r68_7, m68_8 -# 68| m68_10(unknown) = InitializeIndirection[p] : &:r68_9 -#-----| Goto -> Block 1 - -# 69| Block 1 -# 69| m69_1(unknown) = Phi : from 0:m68_10, from 2:m70_10 -# 69| m69_2(char *) = Phi : from 0:m68_8, from 2:m70_6 -# 69| m69_3(int) = Phi : from 0:m68_6, from 2:m69_8 -# 69| r69_4(glval) = VariableAddress[n] : -# 69| r69_5(int) = Load[n] : &:r69_4, m69_3 -# 69| r69_6(int) = Constant[1] : -# 69| r69_7(int) = Sub : r69_5, r69_6 -# 69| m69_8(int) = Store[n] : &:r69_4, r69_7 -# 69| r69_9(int) = CopyValue : r69_5 -# 69| r69_10(int) = Constant[0] : -# 69| r69_11(bool) = CompareGT : r69_9, r69_10 -# 69| v69_12(void) = ConditionalBranch : r69_11 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 70| Block 2 -# 70| r70_1(char) = Constant[0] : -# 70| r70_2(glval) = VariableAddress[p] : -# 70| r70_3(char *) = Load[p] : &:r70_2, m69_2 -# 70| r70_4(int) = Constant[1] : -# 70| r70_5(char *) = PointerAdd[1] : r70_3, r70_4 -# 70| m70_6(char *) = Store[p] : &:r70_2, r70_5 -# 70| r70_7(char *) = CopyValue : r70_3 -# 70| r70_8(glval) = CopyValue : r70_7 -# 70| m70_9(char) = Store[?] : &:r70_8, r70_1 -# 70| m70_10(unknown) = Chi : total:m69_1, partial:m70_9 -#-----| Goto (back edge) -> Block 1 - -# 71| Block 3 -# 71| v71_1(void) = NoOp : -# 68| v68_11(void) = ReturnIndirection[p] : &:r68_9, m69_1 -# 68| v68_12(void) = ReturnVoid : -# 68| v68_13(void) = AliasedUse : m68_3 -# 68| v68_14(void) = ExitFunction : - -# 75| void ScalarPhi(bool) -# 75| Block 0 -# 75| v75_1(void) = EnterFunction : -# 75| m75_2(unknown) = AliasedDefinition : -# 75| m75_3(unknown) = InitializeNonLocal : -# 75| m75_4(unknown) = Chi : total:m75_2, partial:m75_3 -# 75| r75_5(glval) = VariableAddress[b] : -# 75| m75_6(bool) = InitializeParameter[b] : &:r75_5 -# 76| r76_1(glval) = VariableAddress[x] : -# 76| r76_2(int) = Constant[0] : -# 76| m76_3(int) = Store[x] : &:r76_1, r76_2 -# 77| r77_1(glval) = VariableAddress[y] : -# 77| r77_2(int) = Constant[1] : -# 77| m77_3(int) = Store[y] : &:r77_1, r77_2 -# 78| r78_1(glval) = VariableAddress[z] : -# 78| r78_2(int) = Constant[2] : -# 78| m78_3(int) = Store[z] : &:r78_1, r78_2 -# 79| r79_1(glval) = VariableAddress[b] : -# 79| r79_2(bool) = Load[b] : &:r79_1, m75_6 -# 79| v79_3(void) = ConditionalBranch : r79_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 80| Block 1 -# 80| r80_1(int) = Constant[3] : -# 80| r80_2(glval) = VariableAddress[x] : -# 80| m80_3(int) = Store[x] : &:r80_2, r80_1 -# 81| r81_1(int) = Constant[4] : -# 81| r81_2(glval) = VariableAddress[y] : -# 81| m81_3(int) = Store[y] : &:r81_2, r81_1 -#-----| Goto -> Block 3 - -# 84| Block 2 -# 84| r84_1(int) = Constant[5] : -# 84| r84_2(glval) = VariableAddress[x] : -# 84| m84_3(int) = Store[x] : &:r84_2, r84_1 -#-----| Goto -> Block 3 - -# 86| Block 3 -# 86| m86_1(int) = Phi : from 1:m81_3, from 2:m77_3 -# 86| m86_2(int) = Phi : from 1:m80_3, from 2:m84_3 -# 86| r86_3(glval) = VariableAddress[x_merge] : -# 86| r86_4(glval) = VariableAddress[x] : -# 86| r86_5(int) = Load[x] : &:r86_4, m86_2 -# 86| m86_6(int) = Store[x_merge] : &:r86_3, r86_5 -# 87| r87_1(glval) = VariableAddress[y_merge] : -# 87| r87_2(glval) = VariableAddress[y] : -# 87| r87_3(int) = Load[y] : &:r87_2, m86_1 -# 87| m87_4(int) = Store[y_merge] : &:r87_1, r87_3 -# 88| r88_1(glval) = VariableAddress[z_merge] : -# 88| r88_2(glval) = VariableAddress[z] : -# 88| r88_3(int) = Load[z] : &:r88_2, m78_3 -# 88| m88_4(int) = Store[z_merge] : &:r88_1, r88_3 -# 89| v89_1(void) = NoOp : -# 75| v75_7(void) = ReturnVoid : -# 75| v75_8(void) = AliasedUse : m75_3 -# 75| v75_9(void) = ExitFunction : - -# 91| void MustExactlyOverlap(Point) -# 91| Block 0 -# 91| v91_1(void) = EnterFunction : -# 91| m91_2(unknown) = AliasedDefinition : -# 91| m91_3(unknown) = InitializeNonLocal : -# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3 -# 91| r91_5(glval) = VariableAddress[a] : -# 91| m91_6(Point) = InitializeParameter[a] : &:r91_5 -# 92| r92_1(glval) = VariableAddress[b] : -# 92| r92_2(glval) = VariableAddress[a] : -# 92| r92_3(Point) = Load[a] : &:r92_2, m91_6 -# 92| m92_4(Point) = Store[b] : &:r92_1, r92_3 -# 93| v93_1(void) = NoOp : -# 91| v91_7(void) = ReturnVoid : -# 91| v91_8(void) = AliasedUse : m91_3 -# 91| v91_9(void) = ExitFunction : - -# 95| void MustExactlyOverlapEscaped(Point) -# 95| Block 0 -# 95| v95_1(void) = EnterFunction : -# 95| m95_2(unknown) = AliasedDefinition : -# 95| m95_3(unknown) = InitializeNonLocal : -# 95| m95_4(unknown) = Chi : total:m95_2, partial:m95_3 -# 95| r95_5(glval) = VariableAddress[a] : -# 95| m95_6(Point) = InitializeParameter[a] : &:r95_5 -# 95| m95_7(unknown) = Chi : total:m95_4, partial:m95_6 -# 96| r96_1(glval) = VariableAddress[b] : -# 96| r96_2(glval) = VariableAddress[a] : -# 96| r96_3(Point) = Load[a] : &:r96_2, m95_6 -# 96| m96_4(Point) = Store[b] : &:r96_1, r96_3 -# 97| r97_1(glval) = FunctionAddress[Escape] : -# 97| r97_2(glval) = VariableAddress[a] : -# 97| r97_3(Point *) = CopyValue : r97_2 -# 97| r97_4(void *) = Convert : r97_3 -# 97| v97_5(void) = Call[Escape] : func:r97_1, 0:r97_4 -# 97| m97_6(unknown) = ^CallSideEffect : ~m95_7 -# 97| m97_7(unknown) = Chi : total:m95_7, partial:m97_6 -# 97| v97_8(void) = ^BufferReadSideEffect[0] : &:r97_4, ~m97_7 -# 97| m97_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r97_4 -# 97| m97_10(unknown) = Chi : total:m97_7, partial:m97_9 -# 98| v98_1(void) = NoOp : -# 95| v95_8(void) = ReturnVoid : -# 95| v95_9(void) = AliasedUse : ~m97_7 -# 95| v95_10(void) = ExitFunction : - -# 100| void MustTotallyOverlap(Point) -# 100| Block 0 -# 100| v100_1(void) = EnterFunction : -# 100| m100_2(unknown) = AliasedDefinition : -# 100| m100_3(unknown) = InitializeNonLocal : -# 100| m100_4(unknown) = Chi : total:m100_2, partial:m100_3 -# 100| r100_5(glval) = VariableAddress[a] : -# 100| m100_6(Point) = InitializeParameter[a] : &:r100_5 -# 101| r101_1(glval) = VariableAddress[x] : -# 101| r101_2(glval) = VariableAddress[a] : -# 101| r101_3(glval) = FieldAddress[x] : r101_2 -# 101| r101_4(int) = Load[?] : &:r101_3, ~m100_6 -# 101| m101_5(int) = Store[x] : &:r101_1, r101_4 -# 102| r102_1(glval) = VariableAddress[y] : -# 102| r102_2(glval) = VariableAddress[a] : -# 102| r102_3(glval) = FieldAddress[y] : r102_2 -# 102| r102_4(int) = Load[?] : &:r102_3, ~m100_6 -# 102| m102_5(int) = Store[y] : &:r102_1, r102_4 -# 103| v103_1(void) = NoOp : -# 100| v100_7(void) = ReturnVoid : -# 100| v100_8(void) = AliasedUse : m100_3 -# 100| v100_9(void) = ExitFunction : - -# 105| void MustTotallyOverlapEscaped(Point) -# 105| Block 0 -# 105| v105_1(void) = EnterFunction : -# 105| m105_2(unknown) = AliasedDefinition : -# 105| m105_3(unknown) = InitializeNonLocal : -# 105| m105_4(unknown) = Chi : total:m105_2, partial:m105_3 -# 105| r105_5(glval) = VariableAddress[a] : -# 105| m105_6(Point) = InitializeParameter[a] : &:r105_5 -# 105| m105_7(unknown) = Chi : total:m105_4, partial:m105_6 -# 106| r106_1(glval) = VariableAddress[x] : -# 106| r106_2(glval) = VariableAddress[a] : -# 106| r106_3(glval) = FieldAddress[x] : r106_2 -# 106| r106_4(int) = Load[?] : &:r106_3, ~m105_6 -# 106| m106_5(int) = Store[x] : &:r106_1, r106_4 -# 107| r107_1(glval) = VariableAddress[y] : -# 107| r107_2(glval) = VariableAddress[a] : -# 107| r107_3(glval) = FieldAddress[y] : r107_2 -# 107| r107_4(int) = Load[?] : &:r107_3, ~m105_6 -# 107| m107_5(int) = Store[y] : &:r107_1, r107_4 -# 108| r108_1(glval) = FunctionAddress[Escape] : -# 108| r108_2(glval) = VariableAddress[a] : -# 108| r108_3(Point *) = CopyValue : r108_2 -# 108| r108_4(void *) = Convert : r108_3 -# 108| v108_5(void) = Call[Escape] : func:r108_1, 0:r108_4 -# 108| m108_6(unknown) = ^CallSideEffect : ~m105_7 -# 108| m108_7(unknown) = Chi : total:m105_7, partial:m108_6 -# 108| v108_8(void) = ^BufferReadSideEffect[0] : &:r108_4, ~m108_7 -# 108| m108_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r108_4 -# 108| m108_10(unknown) = Chi : total:m108_7, partial:m108_9 -# 109| v109_1(void) = NoOp : -# 105| v105_8(void) = ReturnVoid : -# 105| v105_9(void) = AliasedUse : ~m108_7 -# 105| v105_10(void) = ExitFunction : - -# 111| void MayPartiallyOverlap(int, int) -# 111| Block 0 -# 111| v111_1(void) = EnterFunction : -# 111| m111_2(unknown) = AliasedDefinition : -# 111| m111_3(unknown) = InitializeNonLocal : -# 111| m111_4(unknown) = Chi : total:m111_2, partial:m111_3 -# 111| r111_5(glval) = VariableAddress[x] : -# 111| m111_6(int) = InitializeParameter[x] : &:r111_5 -# 111| r111_7(glval) = VariableAddress[y] : -# 111| m111_8(int) = InitializeParameter[y] : &:r111_7 -# 112| r112_1(glval) = VariableAddress[a] : -# 112| m112_2(Point) = Uninitialized[a] : &:r112_1 -# 112| r112_3(glval) = FieldAddress[x] : r112_1 -# 112| r112_4(glval) = VariableAddress[x] : -# 112| r112_5(int) = Load[x] : &:r112_4, m111_6 -# 112| m112_6(int) = Store[?] : &:r112_3, r112_5 -# 112| m112_7(Point) = Chi : total:m112_2, partial:m112_6 -# 112| r112_8(glval) = FieldAddress[y] : r112_1 -# 112| r112_9(glval) = VariableAddress[y] : -# 112| r112_10(int) = Load[y] : &:r112_9, m111_8 -# 112| m112_11(int) = Store[?] : &:r112_8, r112_10 -# 112| m112_12(Point) = Chi : total:m112_7, partial:m112_11 -# 113| r113_1(glval) = VariableAddress[b] : -# 113| r113_2(glval) = VariableAddress[a] : -# 113| r113_3(Point) = Load[a] : &:r113_2, m112_12 -# 113| m113_4(Point) = Store[b] : &:r113_1, r113_3 -# 114| v114_1(void) = NoOp : -# 111| v111_9(void) = ReturnVoid : -# 111| v111_10(void) = AliasedUse : m111_3 -# 111| v111_11(void) = ExitFunction : - -# 116| void MayPartiallyOverlapEscaped(int, int) -# 116| Block 0 -# 116| v116_1(void) = EnterFunction : -# 116| m116_2(unknown) = AliasedDefinition : -# 116| m116_3(unknown) = InitializeNonLocal : -# 116| m116_4(unknown) = Chi : total:m116_2, partial:m116_3 -# 116| r116_5(glval) = VariableAddress[x] : -# 116| m116_6(int) = InitializeParameter[x] : &:r116_5 -# 116| r116_7(glval) = VariableAddress[y] : -# 116| m116_8(int) = InitializeParameter[y] : &:r116_7 -# 117| r117_1(glval) = VariableAddress[a] : -# 117| m117_2(Point) = Uninitialized[a] : &:r117_1 -# 117| m117_3(unknown) = Chi : total:m116_4, partial:m117_2 -# 117| r117_4(glval) = FieldAddress[x] : r117_1 -# 117| r117_5(glval) = VariableAddress[x] : -# 117| r117_6(int) = Load[x] : &:r117_5, m116_6 -# 117| m117_7(int) = Store[?] : &:r117_4, r117_6 -# 117| m117_8(unknown) = Chi : total:m117_3, partial:m117_7 -# 117| r117_9(glval) = FieldAddress[y] : r117_1 -# 117| r117_10(glval) = VariableAddress[y] : -# 117| r117_11(int) = Load[y] : &:r117_10, m116_8 -# 117| m117_12(int) = Store[?] : &:r117_9, r117_11 -# 117| m117_13(unknown) = Chi : total:m117_8, partial:m117_12 -# 118| r118_1(glval) = VariableAddress[b] : -# 118| r118_2(glval) = VariableAddress[a] : -# 118| r118_3(Point) = Load[a] : &:r118_2, ~m117_13 -# 118| m118_4(Point) = Store[b] : &:r118_1, r118_3 -# 119| r119_1(glval) = FunctionAddress[Escape] : -# 119| r119_2(glval) = VariableAddress[a] : -# 119| r119_3(Point *) = CopyValue : r119_2 -# 119| r119_4(void *) = Convert : r119_3 -# 119| v119_5(void) = Call[Escape] : func:r119_1, 0:r119_4 -# 119| m119_6(unknown) = ^CallSideEffect : ~m117_13 -# 119| m119_7(unknown) = Chi : total:m117_13, partial:m119_6 -# 119| v119_8(void) = ^BufferReadSideEffect[0] : &:r119_4, ~m119_7 -# 119| m119_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r119_4 -# 119| m119_10(unknown) = Chi : total:m119_7, partial:m119_9 -# 120| v120_1(void) = NoOp : -# 116| v116_9(void) = ReturnVoid : -# 116| v116_10(void) = AliasedUse : ~m119_7 -# 116| v116_11(void) = ExitFunction : - -# 122| void MergeMustExactlyOverlap(bool, int, int) -# 122| Block 0 -# 122| v122_1(void) = EnterFunction : -# 122| m122_2(unknown) = AliasedDefinition : -# 122| m122_3(unknown) = InitializeNonLocal : -# 122| m122_4(unknown) = Chi : total:m122_2, partial:m122_3 -# 122| r122_5(glval) = VariableAddress[c] : -# 122| m122_6(bool) = InitializeParameter[c] : &:r122_5 -# 122| r122_7(glval) = VariableAddress[x1] : -# 122| m122_8(int) = InitializeParameter[x1] : &:r122_7 -# 122| r122_9(glval) = VariableAddress[x2] : -# 122| m122_10(int) = InitializeParameter[x2] : &:r122_9 -# 123| r123_1(glval) = VariableAddress[a] : -# 123| m123_2(Point) = Uninitialized[a] : &:r123_1 -# 123| r123_3(glval) = FieldAddress[x] : r123_1 -# 123| r123_4(int) = Constant[0] : -# 123| m123_5(int) = Store[?] : &:r123_3, r123_4 -# 123| m123_6(Point) = Chi : total:m123_2, partial:m123_5 -# 123| r123_7(glval) = FieldAddress[y] : r123_1 -# 123| r123_8(int) = Constant[0] : -# 123| m123_9(int) = Store[?] : &:r123_7, r123_8 -# 123| m123_10(Point) = Chi : total:m123_6, partial:m123_9 -# 124| r124_1(glval) = VariableAddress[c] : -# 124| r124_2(bool) = Load[c] : &:r124_1, m122_6 -# 124| v124_3(void) = ConditionalBranch : r124_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 125| Block 1 -# 125| r125_1(glval) = VariableAddress[x1] : -# 125| r125_2(int) = Load[x1] : &:r125_1, m122_8 -# 125| r125_3(glval) = VariableAddress[a] : -# 125| r125_4(glval) = FieldAddress[x] : r125_3 -# 125| m125_5(int) = Store[?] : &:r125_4, r125_2 -# 125| m125_6(Point) = Chi : total:m123_10, partial:m125_5 -#-----| Goto -> Block 3 - -# 128| Block 2 -# 128| r128_1(glval) = VariableAddress[x2] : -# 128| r128_2(int) = Load[x2] : &:r128_1, m122_10 -# 128| r128_3(glval) = VariableAddress[a] : -# 128| r128_4(glval) = FieldAddress[x] : r128_3 -# 128| m128_5(int) = Store[?] : &:r128_4, r128_2 -# 128| m128_6(Point) = Chi : total:m123_10, partial:m128_5 -#-----| Goto -> Block 3 - -# 130| Block 3 -# 130| m130_1(int) = Phi : from 1:m125_5, from 2:m128_5 -# 130| m130_2(Point) = Phi : from 1:m125_6, from 2:m128_6 -# 130| r130_3(glval) = VariableAddress[x] : -# 130| r130_4(glval) = VariableAddress[a] : -# 130| r130_5(glval) = FieldAddress[x] : r130_4 -# 130| r130_6(int) = Load[?] : &:r130_5, m130_1 -# 130| m130_7(int) = Store[x] : &:r130_3, r130_6 -# 131| r131_1(glval) = VariableAddress[b] : -# 131| r131_2(glval) = VariableAddress[a] : -# 131| r131_3(Point) = Load[a] : &:r131_2, m130_2 -# 131| m131_4(Point) = Store[b] : &:r131_1, r131_3 -# 132| v132_1(void) = NoOp : -# 122| v122_11(void) = ReturnVoid : -# 122| v122_12(void) = AliasedUse : m122_3 -# 122| v122_13(void) = ExitFunction : - -# 134| void MergeMustExactlyWithMustTotallyOverlap(bool, Point, int) -# 134| Block 0 -# 134| v134_1(void) = EnterFunction : -# 134| m134_2(unknown) = AliasedDefinition : -# 134| m134_3(unknown) = InitializeNonLocal : -# 134| m134_4(unknown) = Chi : total:m134_2, partial:m134_3 -# 134| r134_5(glval) = VariableAddress[c] : -# 134| m134_6(bool) = InitializeParameter[c] : &:r134_5 -# 134| r134_7(glval) = VariableAddress[p] : -# 134| m134_8(Point) = InitializeParameter[p] : &:r134_7 -# 134| r134_9(glval) = VariableAddress[x1] : -# 134| m134_10(int) = InitializeParameter[x1] : &:r134_9 -# 135| r135_1(glval) = VariableAddress[a] : -# 135| m135_2(Point) = Uninitialized[a] : &:r135_1 -# 135| r135_3(glval) = FieldAddress[x] : r135_1 -# 135| r135_4(int) = Constant[0] : -# 135| m135_5(int) = Store[?] : &:r135_3, r135_4 -# 135| m135_6(Point) = Chi : total:m135_2, partial:m135_5 -# 135| r135_7(glval) = FieldAddress[y] : r135_1 -# 135| r135_8(int) = Constant[0] : -# 135| m135_9(int) = Store[?] : &:r135_7, r135_8 -# 135| m135_10(Point) = Chi : total:m135_6, partial:m135_9 -# 136| r136_1(glval) = VariableAddress[c] : -# 136| r136_2(bool) = Load[c] : &:r136_1, m134_6 -# 136| v136_3(void) = ConditionalBranch : r136_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 137| Block 1 -# 137| r137_1(glval) = VariableAddress[x1] : -# 137| r137_2(int) = Load[x1] : &:r137_1, m134_10 -# 137| r137_3(glval) = VariableAddress[a] : -# 137| r137_4(glval) = FieldAddress[x] : r137_3 -# 137| m137_5(int) = Store[?] : &:r137_4, r137_2 -# 137| m137_6(Point) = Chi : total:m135_10, partial:m137_5 -#-----| Goto -> Block 3 - -# 140| Block 2 -# 140| r140_1(glval) = VariableAddress[p] : -# 140| r140_2(Point) = Load[p] : &:r140_1, m134_8 -# 140| r140_3(glval) = VariableAddress[a] : -# 140| m140_4(Point) = Store[a] : &:r140_3, r140_2 -#-----| Goto -> Block 3 - -# 142| Block 3 -# 142| m142_1(int) = Phi : from 1:m137_5, from 2:~m140_4 -# 142| m142_2(Point) = Phi : from 1:m137_6, from 2:m140_4 -# 142| r142_3(glval) = VariableAddress[x] : -# 142| r142_4(glval) = VariableAddress[a] : -# 142| r142_5(glval) = FieldAddress[x] : r142_4 -# 142| r142_6(int) = Load[?] : &:r142_5, m142_1 -# 142| m142_7(int) = Store[x] : &:r142_3, r142_6 -# 143| v143_1(void) = NoOp : -# 134| v134_11(void) = ReturnVoid : -# 134| v134_12(void) = AliasedUse : m134_3 -# 134| v134_13(void) = ExitFunction : - -# 145| void MergeMustExactlyWithMayPartiallyOverlap(bool, Point, int) -# 145| Block 0 -# 145| v145_1(void) = EnterFunction : -# 145| m145_2(unknown) = AliasedDefinition : -# 145| m145_3(unknown) = InitializeNonLocal : -# 145| m145_4(unknown) = Chi : total:m145_2, partial:m145_3 -# 145| r145_5(glval) = VariableAddress[c] : -# 145| m145_6(bool) = InitializeParameter[c] : &:r145_5 -# 145| r145_7(glval) = VariableAddress[p] : -# 145| m145_8(Point) = InitializeParameter[p] : &:r145_7 -# 145| r145_9(glval) = VariableAddress[x1] : -# 145| m145_10(int) = InitializeParameter[x1] : &:r145_9 -# 146| r146_1(glval) = VariableAddress[a] : -# 146| m146_2(Point) = Uninitialized[a] : &:r146_1 -# 146| r146_3(glval) = FieldAddress[x] : r146_1 -# 146| r146_4(int) = Constant[0] : -# 146| m146_5(int) = Store[?] : &:r146_3, r146_4 -# 146| m146_6(Point) = Chi : total:m146_2, partial:m146_5 -# 146| r146_7(glval) = FieldAddress[y] : r146_1 -# 146| r146_8(int) = Constant[0] : -# 146| m146_9(int) = Store[?] : &:r146_7, r146_8 -# 146| m146_10(Point) = Chi : total:m146_6, partial:m146_9 -# 147| r147_1(glval) = VariableAddress[c] : -# 147| r147_2(bool) = Load[c] : &:r147_1, m145_6 -# 147| v147_3(void) = ConditionalBranch : r147_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 148| Block 1 -# 148| r148_1(glval) = VariableAddress[x1] : -# 148| r148_2(int) = Load[x1] : &:r148_1, m145_10 -# 148| r148_3(glval) = VariableAddress[a] : -# 148| r148_4(glval) = FieldAddress[x] : r148_3 -# 148| m148_5(int) = Store[?] : &:r148_4, r148_2 -# 148| m148_6(Point) = Chi : total:m146_10, partial:m148_5 -#-----| Goto -> Block 3 - -# 151| Block 2 -# 151| r151_1(glval) = VariableAddress[p] : -# 151| r151_2(Point) = Load[p] : &:r151_1, m145_8 -# 151| r151_3(glval) = VariableAddress[a] : -# 151| m151_4(Point) = Store[a] : &:r151_3, r151_2 -#-----| Goto -> Block 3 - -# 153| Block 3 -# 153| m153_1(Point) = Phi : from 1:m148_6, from 2:m151_4 -# 153| r153_2(glval) = VariableAddress[b] : -# 153| r153_3(glval) = VariableAddress[a] : -# 153| r153_4(Point) = Load[a] : &:r153_3, m153_1 -# 153| m153_5(Point) = Store[b] : &:r153_2, r153_4 -# 154| v154_1(void) = NoOp : -# 145| v145_11(void) = ReturnVoid : -# 145| v145_12(void) = AliasedUse : m145_3 -# 145| v145_13(void) = ExitFunction : - -# 156| void MergeMustTotallyOverlapWithMayPartiallyOverlap(bool, Rect, int) -# 156| Block 0 -# 156| v156_1(void) = EnterFunction : -# 156| m156_2(unknown) = AliasedDefinition : -# 156| m156_3(unknown) = InitializeNonLocal : -# 156| m156_4(unknown) = Chi : total:m156_2, partial:m156_3 -# 156| r156_5(glval) = VariableAddress[c] : -# 156| m156_6(bool) = InitializeParameter[c] : &:r156_5 -# 156| r156_7(glval) = VariableAddress[r] : -# 156| m156_8(Rect) = InitializeParameter[r] : &:r156_7 -# 156| r156_9(glval) = VariableAddress[x1] : -# 156| m156_10(int) = InitializeParameter[x1] : &:r156_9 -# 157| r157_1(glval) = VariableAddress[a] : -# 157| m157_2(Rect) = Uninitialized[a] : &:r157_1 -# 157| r157_3(glval) = FieldAddress[topLeft] : r157_1 -# 157| r157_4(Point) = Constant[0] : -# 157| m157_5(Point) = Store[?] : &:r157_3, r157_4 -# 157| m157_6(Rect) = Chi : total:m157_2, partial:m157_5 -# 157| r157_7(glval) = FieldAddress[bottomRight] : r157_1 -# 157| r157_8(Point) = Constant[0] : -# 157| m157_9(Point) = Store[?] : &:r157_7, r157_8 -# 157| m157_10(Rect) = Chi : total:m157_6, partial:m157_9 -# 158| r158_1(glval) = VariableAddress[c] : -# 158| r158_2(bool) = Load[c] : &:r158_1, m156_6 -# 158| v158_3(void) = ConditionalBranch : r158_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 159| Block 1 -# 159| r159_1(glval) = VariableAddress[x1] : -# 159| r159_2(int) = Load[x1] : &:r159_1, m156_10 -# 159| r159_3(glval) = VariableAddress[a] : -# 159| r159_4(glval) = FieldAddress[topLeft] : r159_3 -# 159| r159_5(glval) = FieldAddress[x] : r159_4 -# 159| m159_6(int) = Store[?] : &:r159_5, r159_2 -# 159| m159_7(Rect) = Chi : total:m157_10, partial:m159_6 -#-----| Goto -> Block 3 - -# 162| Block 2 -# 162| r162_1(glval) = VariableAddress[r] : -# 162| r162_2(Rect) = Load[r] : &:r162_1, m156_8 -# 162| r162_3(glval) = VariableAddress[a] : -# 162| m162_4(Rect) = Store[a] : &:r162_3, r162_2 -#-----| Goto -> Block 3 - -# 164| Block 3 -# 164| m164_1(Rect) = Phi : from 1:m159_7, from 2:m162_4 -# 164| r164_2(glval) = VariableAddress[b] : -# 164| r164_3(glval) = VariableAddress[a] : -# 164| r164_4(glval) = FieldAddress[topLeft] : r164_3 -# 164| r164_5(Point) = Load[?] : &:r164_4, ~m164_1 -# 164| m164_6(Point) = Store[b] : &:r164_2, r164_5 -# 165| v165_1(void) = NoOp : -# 156| v156_11(void) = ReturnVoid : -# 156| v156_12(void) = AliasedUse : m156_3 -# 156| v156_13(void) = ExitFunction : - -# 171| void WrapperStruct(Wrapper) -# 171| Block 0 -# 171| v171_1(void) = EnterFunction : -# 171| m171_2(unknown) = AliasedDefinition : -# 171| m171_3(unknown) = InitializeNonLocal : -# 171| m171_4(unknown) = Chi : total:m171_2, partial:m171_3 -# 171| r171_5(glval) = VariableAddress[w] : -# 171| m171_6(Wrapper) = InitializeParameter[w] : &:r171_5 -# 172| r172_1(glval) = VariableAddress[x] : -# 172| r172_2(glval) = VariableAddress[w] : -# 172| r172_3(Wrapper) = Load[w] : &:r172_2, m171_6 -# 172| m172_4(Wrapper) = Store[x] : &:r172_1, r172_3 -# 173| r173_1(glval) = VariableAddress[a] : -# 173| r173_2(glval) = VariableAddress[w] : -# 173| r173_3(glval) = FieldAddress[f] : r173_2 -# 173| r173_4(int) = Load[?] : &:r173_3, ~m171_6 -# 173| m173_5(int) = Store[a] : &:r173_1, r173_4 -# 174| r174_1(int) = Constant[5] : -# 174| r174_2(glval) = VariableAddress[w] : -# 174| r174_3(glval) = FieldAddress[f] : r174_2 -# 174| m174_4(int) = Store[?] : &:r174_3, r174_1 -# 175| r175_1(glval) = VariableAddress[w] : -# 175| r175_2(glval) = FieldAddress[f] : r175_1 -# 175| r175_3(int) = Load[?] : &:r175_2, m174_4 -# 175| r175_4(glval) = VariableAddress[a] : -# 175| m175_5(int) = Store[a] : &:r175_4, r175_3 -# 176| r176_1(glval) = VariableAddress[w] : -# 176| r176_2(Wrapper) = Load[w] : &:r176_1, ~m174_4 -# 176| r176_3(glval) = VariableAddress[x] : -# 176| m176_4(Wrapper) = Store[x] : &:r176_3, r176_2 -# 177| v177_1(void) = NoOp : -# 171| v171_7(void) = ReturnVoid : -# 171| v171_8(void) = AliasedUse : m171_3 -# 171| v171_9(void) = ExitFunction : - -# 179| int AsmStmt(int*) -# 179| Block 0 -# 179| v179_1(void) = EnterFunction : -# 179| m179_2(unknown) = AliasedDefinition : -# 179| m179_3(unknown) = InitializeNonLocal : -# 179| m179_4(unknown) = Chi : total:m179_2, partial:m179_3 -# 179| r179_5(glval) = VariableAddress[p] : -# 179| m179_6(int *) = InitializeParameter[p] : &:r179_5 -# 179| r179_7(int *) = Load[p] : &:r179_5, m179_6 -# 179| m179_8(unknown) = InitializeIndirection[p] : &:r179_7 -# 180| m180_1(unknown) = InlineAsm : ~m179_4 -# 180| m180_2(unknown) = Chi : total:m179_4, partial:m180_1 -# 181| r181_1(glval) = VariableAddress[#return] : -# 181| r181_2(glval) = VariableAddress[p] : -# 181| r181_3(int *) = Load[p] : &:r181_2, m179_6 -# 181| r181_4(int) = Load[?] : &:r181_3, ~m179_8 -# 181| m181_5(int) = Store[#return] : &:r181_1, r181_4 -# 179| v179_9(void) = ReturnIndirection[p] : &:r179_7, m179_8 -# 179| r179_10(glval) = VariableAddress[#return] : -# 179| v179_11(void) = ReturnValue : &:r179_10, m181_5 -# 179| v179_12(void) = AliasedUse : ~m180_2 -# 179| v179_13(void) = ExitFunction : - -# 184| void AsmStmtWithOutputs(unsigned int&, unsigned int&, unsigned int&, unsigned int&) -# 184| Block 0 -# 184| v184_1(void) = EnterFunction : -# 184| m184_2(unknown) = AliasedDefinition : -# 184| m184_3(unknown) = InitializeNonLocal : -# 184| m184_4(unknown) = Chi : total:m184_2, partial:m184_3 -# 184| r184_5(glval) = VariableAddress[a] : -# 184| m184_6(unsigned int &) = InitializeParameter[a] : &:r184_5 -# 184| r184_7(unsigned int &) = Load[a] : &:r184_5, m184_6 -# 184| m184_8(unknown) = InitializeIndirection[a] : &:r184_7 -# 184| m184_9(unknown) = Chi : total:m184_4, partial:m184_8 -# 184| r184_10(glval) = VariableAddress[b] : -# 184| m184_11(unsigned int &) = InitializeParameter[b] : &:r184_10 -# 184| r184_12(unsigned int &) = Load[b] : &:r184_10, m184_11 -# 184| m184_13(unknown) = InitializeIndirection[b] : &:r184_12 -# 184| m184_14(unknown) = Chi : total:m184_9, partial:m184_13 -# 184| r184_15(glval) = VariableAddress[c] : -# 184| m184_16(unsigned int &) = InitializeParameter[c] : &:r184_15 -# 184| r184_17(unsigned int &) = Load[c] : &:r184_15, m184_16 -# 184| m184_18(unknown) = InitializeIndirection[c] : &:r184_17 -# 184| r184_19(glval) = VariableAddress[d] : -# 184| m184_20(unsigned int &) = InitializeParameter[d] : &:r184_19 -# 184| r184_21(unsigned int &) = Load[d] : &:r184_19, m184_20 -# 184| m184_22(unknown) = InitializeIndirection[d] : &:r184_21 -# 189| r189_1(glval) = VariableAddress[a] : -# 189| r189_2(unsigned int &) = Load[a] : &:r189_1, m184_6 -# 189| r189_3(glval) = CopyValue : r189_2 -# 189| r189_4(glval) = VariableAddress[b] : -# 189| r189_5(unsigned int &) = Load[b] : &:r189_4, m184_11 -# 189| r189_6(glval) = CopyValue : r189_5 -# 190| r190_1(glval) = VariableAddress[c] : -# 190| r190_2(unsigned int &) = Load[c] : &:r190_1, m184_16 -# 190| r190_3(unsigned int) = Load[?] : &:r190_2, ~m184_18 -# 190| r190_4(glval) = VariableAddress[d] : -# 190| r190_5(unsigned int &) = Load[d] : &:r190_4, m184_20 -# 190| r190_6(unsigned int) = Load[?] : &:r190_5, ~m184_22 -# 186| m186_1(unknown) = InlineAsm : ~m184_14, 0:r189_3, 1:r189_6, 2:r190_3, 3:r190_6 -# 186| m186_2(unknown) = Chi : total:m184_14, partial:m186_1 -# 192| v192_1(void) = NoOp : -# 184| v184_23(void) = ReturnIndirection[a] : &:r184_7, ~m186_2 -# 184| v184_24(void) = ReturnIndirection[b] : &:r184_12, ~m186_2 -# 184| v184_25(void) = ReturnIndirection[c] : &:r184_17, m184_18 -# 184| v184_26(void) = ReturnIndirection[d] : &:r184_21, m184_22 -# 184| v184_27(void) = ReturnVoid : -# 184| v184_28(void) = AliasedUse : ~m186_2 -# 184| v184_29(void) = ExitFunction : - -# 198| int PureFunctions(char*, char*, int) -# 198| Block 0 -# 198| v198_1(void) = EnterFunction : -# 198| m198_2(unknown) = AliasedDefinition : -# 198| m198_3(unknown) = InitializeNonLocal : -# 198| m198_4(unknown) = Chi : total:m198_2, partial:m198_3 -# 198| r198_5(glval) = VariableAddress[str1] : -# 198| m198_6(char *) = InitializeParameter[str1] : &:r198_5 -# 198| r198_7(char *) = Load[str1] : &:r198_5, m198_6 -# 198| m198_8(unknown) = InitializeIndirection[str1] : &:r198_7 -# 198| r198_9(glval) = VariableAddress[str2] : -# 198| m198_10(char *) = InitializeParameter[str2] : &:r198_9 -# 198| r198_11(char *) = Load[str2] : &:r198_9, m198_10 -# 198| m198_12(unknown) = InitializeIndirection[str2] : &:r198_11 -# 198| r198_13(glval) = VariableAddress[x] : -# 198| m198_14(int) = InitializeParameter[x] : &:r198_13 -# 199| r199_1(glval) = VariableAddress[ret] : -# 199| r199_2(glval) = FunctionAddress[strcmp] : -# 199| r199_3(glval) = VariableAddress[str1] : -# 199| r199_4(char *) = Load[str1] : &:r199_3, m198_6 -# 199| r199_5(char *) = Convert : r199_4 -# 199| r199_6(glval) = VariableAddress[str2] : -# 199| r199_7(char *) = Load[str2] : &:r199_6, m198_10 -# 199| r199_8(char *) = Convert : r199_7 -# 199| r199_9(int) = Call[strcmp] : func:r199_2, 0:r199_5, 1:r199_8 -# 199| v199_10(void) = ^BufferReadSideEffect[0] : &:r199_5, ~m198_8 -# 199| v199_11(void) = ^BufferReadSideEffect[1] : &:r199_8, ~m198_12 -# 199| m199_12(int) = Store[ret] : &:r199_1, r199_9 -# 200| r200_1(glval) = FunctionAddress[strlen] : -# 200| r200_2(glval) = VariableAddress[str1] : -# 200| r200_3(char *) = Load[str1] : &:r200_2, m198_6 -# 200| r200_4(char *) = Convert : r200_3 -# 200| r200_5(int) = Call[strlen] : func:r200_1, 0:r200_4 -# 200| v200_6(void) = ^BufferReadSideEffect[0] : &:r200_4, ~m198_8 -# 200| r200_7(glval) = VariableAddress[ret] : -# 200| r200_8(int) = Load[ret] : &:r200_7, m199_12 -# 200| r200_9(int) = Add : r200_8, r200_5 -# 200| m200_10(int) = Store[ret] : &:r200_7, r200_9 -# 201| r201_1(glval) = FunctionAddress[abs] : -# 201| r201_2(glval) = VariableAddress[x] : -# 201| r201_3(int) = Load[x] : &:r201_2, m198_14 -# 201| r201_4(int) = Call[abs] : func:r201_1, 0:r201_3 -# 201| r201_5(glval) = VariableAddress[ret] : -# 201| r201_6(int) = Load[ret] : &:r201_5, m200_10 -# 201| r201_7(int) = Add : r201_6, r201_4 -# 201| m201_8(int) = Store[ret] : &:r201_5, r201_7 -# 202| r202_1(glval) = VariableAddress[#return] : -# 202| r202_2(glval) = VariableAddress[ret] : -# 202| r202_3(int) = Load[ret] : &:r202_2, m201_8 -# 202| m202_4(int) = Store[#return] : &:r202_1, r202_3 -# 198| v198_15(void) = ReturnIndirection[str1] : &:r198_7, m198_8 -# 198| v198_16(void) = ReturnIndirection[str2] : &:r198_11, m198_12 -# 198| r198_17(glval) = VariableAddress[#return] : -# 198| v198_18(void) = ReturnValue : &:r198_17, m202_4 -# 198| v198_19(void) = AliasedUse : m198_3 -# 198| v198_20(void) = ExitFunction : - -# 207| int ModeledCallTarget(int) -# 207| Block 0 -# 207| v207_1(void) = EnterFunction : -# 207| m207_2(unknown) = AliasedDefinition : -# 207| m207_3(unknown) = InitializeNonLocal : -# 207| m207_4(unknown) = Chi : total:m207_2, partial:m207_3 -# 207| r207_5(glval) = VariableAddress[x] : -# 207| m207_6(int) = InitializeParameter[x] : &:r207_5 -# 208| r208_1(glval) = VariableAddress[y] : -# 208| m208_2(int) = Uninitialized[y] : &:r208_1 -# 209| r209_1(glval) = FunctionAddress[memcpy] : -# 209| r209_2(glval) = VariableAddress[y] : -# 209| r209_3(int *) = CopyValue : r209_2 -# 209| r209_4(void *) = Convert : r209_3 -# 209| r209_5(glval) = VariableAddress[x] : -# 209| r209_6(int *) = CopyValue : r209_5 -# 209| r209_7(void *) = Convert : r209_6 -# 209| r209_8(int) = Constant[4] : -# 209| r209_9(void *) = Call[memcpy] : func:r209_1, 0:r209_4, 1:r209_7, 2:r209_8 -# 209| v209_10(void) = ^SizedBufferReadSideEffect[1] : &:r209_7, r209_8, ~m207_6 -# 209| m209_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r209_4, r209_8 -# 209| m209_12(int) = Chi : total:m208_2, partial:m209_11 -# 210| r210_1(glval) = VariableAddress[#return] : -# 210| r210_2(glval) = VariableAddress[y] : -# 210| r210_3(int) = Load[y] : &:r210_2, m209_12 -# 210| m210_4(int) = Store[#return] : &:r210_1, r210_3 -# 207| r207_7(glval) = VariableAddress[#return] : -# 207| v207_8(void) = ReturnValue : &:r207_7, m210_4 -# 207| v207_9(void) = AliasedUse : m207_3 -# 207| v207_10(void) = ExitFunction : - -# 213| void InitArray() -# 213| Block 0 -# 213| v213_1(void) = EnterFunction : -# 213| m213_2(unknown) = AliasedDefinition : -# 213| m213_3(unknown) = InitializeNonLocal : -# 213| m213_4(unknown) = Chi : total:m213_2, partial:m213_3 -# 214| r214_1(glval) = VariableAddress[a_pad] : -# 214| r214_2(glval) = StringConstant[""] : -# 214| r214_3(char[32]) = Load[?] : &:r214_2, ~m213_3 -# 214| m214_4(char[32]) = Store[a_pad] : &:r214_1, r214_3 -# 215| r215_1(glval) = VariableAddress[a_nopad] : -# 215| r215_2(glval) = StringConstant["foo"] : -# 215| r215_3(char[4]) = Load[?] : &:r215_2, ~m213_3 -# 215| m215_4(char[4]) = Store[a_nopad] : &:r215_1, r215_3 -# 216| r216_1(glval) = VariableAddress[a_infer] : -# 216| r216_2(glval) = StringConstant["blah"] : -# 216| r216_3(char[5]) = Load[?] : &:r216_2, ~m213_3 -# 216| m216_4(char[5]) = Store[a_infer] : &:r216_1, r216_3 -# 217| r217_1(glval) = VariableAddress[b] : -# 217| m217_2(char[2]) = Uninitialized[b] : &:r217_1 -# 218| r218_1(glval) = VariableAddress[c] : -# 218| m218_2(char[2]) = Uninitialized[c] : &:r218_1 -# 218| r218_3(int) = Constant[0] : -# 218| r218_4(glval) = PointerAdd[1] : r218_1, r218_3 -# 218| r218_5(unknown[2]) = Constant[0] : -# 218| m218_6(unknown[2]) = Store[?] : &:r218_4, r218_5 -# 219| r219_1(glval) = VariableAddress[d] : -# 219| m219_2(char[2]) = Uninitialized[d] : &:r219_1 -# 219| r219_3(int) = Constant[0] : -# 219| r219_4(glval) = PointerAdd[1] : r219_1, r219_3 -# 219| r219_5(char) = Constant[0] : -# 219| m219_6(char) = Store[?] : &:r219_4, r219_5 -# 219| m219_7(char[2]) = Chi : total:m219_2, partial:m219_6 -# 219| r219_8(int) = Constant[1] : -# 219| r219_9(glval) = PointerAdd[1] : r219_1, r219_8 -# 219| r219_10(char) = Constant[0] : -# 219| m219_11(char) = Store[?] : &:r219_9, r219_10 -# 219| m219_12(char[2]) = Chi : total:m219_7, partial:m219_11 -# 220| r220_1(glval) = VariableAddress[e] : -# 220| m220_2(char[2]) = Uninitialized[e] : &:r220_1 -# 220| r220_3(int) = Constant[0] : -# 220| r220_4(glval) = PointerAdd[1] : r220_1, r220_3 -# 220| r220_5(char) = Constant[0] : -# 220| m220_6(char) = Store[?] : &:r220_4, r220_5 -# 220| m220_7(char[2]) = Chi : total:m220_2, partial:m220_6 -# 220| r220_8(int) = Constant[1] : -# 220| r220_9(glval) = PointerAdd[1] : r220_1, r220_8 -# 220| r220_10(char) = Constant[1] : -# 220| m220_11(char) = Store[?] : &:r220_9, r220_10 -# 220| m220_12(char[2]) = Chi : total:m220_7, partial:m220_11 -# 221| r221_1(glval) = VariableAddress[f] : -# 221| m221_2(char[3]) = Uninitialized[f] : &:r221_1 -# 221| r221_3(int) = Constant[0] : -# 221| r221_4(glval) = PointerAdd[1] : r221_1, r221_3 -# 221| r221_5(char) = Constant[0] : -# 221| m221_6(char) = Store[?] : &:r221_4, r221_5 -# 221| m221_7(char[3]) = Chi : total:m221_2, partial:m221_6 -# 221| r221_8(int) = Constant[1] : -# 221| r221_9(glval) = PointerAdd[1] : r221_1, r221_8 -# 221| r221_10(unknown[2]) = Constant[0] : -# 221| m221_11(unknown[2]) = Store[?] : &:r221_9, r221_10 -# 221| m221_12(char[3]) = Chi : total:m221_7, partial:m221_11 -# 222| v222_1(void) = NoOp : -# 213| v213_5(void) = ReturnVoid : -# 213| v213_6(void) = AliasedUse : m213_3 -# 213| v213_7(void) = ExitFunction : - -# 226| char StringLiteralAliasing() -# 226| Block 0 -# 226| v226_1(void) = EnterFunction : -# 226| m226_2(unknown) = AliasedDefinition : -# 226| m226_3(unknown) = InitializeNonLocal : -# 226| m226_4(unknown) = Chi : total:m226_2, partial:m226_3 -# 227| r227_1(glval) = FunctionAddress[ExternalFunc] : -# 227| v227_2(void) = Call[ExternalFunc] : func:r227_1 -# 227| m227_3(unknown) = ^CallSideEffect : ~m226_4 -# 227| m227_4(unknown) = Chi : total:m226_4, partial:m227_3 -# 229| r229_1(glval) = VariableAddress[s] : -# 229| r229_2(glval) = StringConstant["Literal"] : -# 229| r229_3(char *) = Convert : r229_2 -# 229| m229_4(char *) = Store[s] : &:r229_1, r229_3 -# 230| r230_1(glval) = VariableAddress[#return] : -# 230| r230_2(glval) = VariableAddress[s] : -# 230| r230_3(char *) = Load[s] : &:r230_2, m229_4 -# 230| r230_4(int) = Constant[2] : -# 230| r230_5(glval) = PointerAdd[1] : r230_3, r230_4 -# 230| r230_6(char) = Load[?] : &:r230_5, ~m226_3 -# 230| m230_7(char) = Store[#return] : &:r230_1, r230_6 -# 226| r226_5(glval) = VariableAddress[#return] : -# 226| v226_6(void) = ReturnValue : &:r226_5, m230_7 -# 226| v226_7(void) = AliasedUse : ~m227_4 -# 226| v226_8(void) = ExitFunction : - -# 235| void Constructible::Constructible(int) -# 235| Block 0 -# 235| v235_1(void) = EnterFunction : -# 235| m235_2(unknown) = AliasedDefinition : -# 235| m235_3(unknown) = InitializeNonLocal : -# 235| m235_4(unknown) = Chi : total:m235_2, partial:m235_3 -# 235| r235_5(glval) = VariableAddress[#this] : -# 235| m235_6(glval) = InitializeParameter[#this] : &:r235_5 -# 235| r235_7(glval) = Load[#this] : &:r235_5, m235_6 -# 235| m235_8(Constructible) = InitializeIndirection[#this] : &:r235_7 -# 235| r235_9(glval) = VariableAddress[x] : -# 235| m235_10(int) = InitializeParameter[x] : &:r235_9 -# 235| v235_11(void) = NoOp : -# 235| v235_12(void) = ReturnIndirection[#this] : &:r235_7, m235_8 -# 235| v235_13(void) = ReturnVoid : -# 235| v235_14(void) = AliasedUse : m235_3 -# 235| v235_15(void) = ExitFunction : - -# 236| void Constructible::g() -# 236| Block 0 -# 236| v236_1(void) = EnterFunction : -# 236| m236_2(unknown) = AliasedDefinition : -# 236| m236_3(unknown) = InitializeNonLocal : -# 236| m236_4(unknown) = Chi : total:m236_2, partial:m236_3 -# 236| r236_5(glval) = VariableAddress[#this] : -# 236| m236_6(glval) = InitializeParameter[#this] : &:r236_5 -# 236| r236_7(glval) = Load[#this] : &:r236_5, m236_6 -# 236| m236_8(Constructible) = InitializeIndirection[#this] : &:r236_7 -# 236| v236_9(void) = NoOp : -# 236| v236_10(void) = ReturnIndirection[#this] : &:r236_7, m236_8 -# 236| v236_11(void) = ReturnVoid : -# 236| v236_12(void) = AliasedUse : m236_3 -# 236| v236_13(void) = ExitFunction : - -# 239| void ExplicitConstructorCalls() -# 239| Block 0 -# 239| v239_1(void) = EnterFunction : -# 239| m239_2(unknown) = AliasedDefinition : -# 239| m239_3(unknown) = InitializeNonLocal : -# 239| m239_4(unknown) = Chi : total:m239_2, partial:m239_3 -# 240| r240_1(glval) = VariableAddress[c] : -# 240| m240_2(Constructible) = Uninitialized[c] : &:r240_1 -# 240| r240_3(glval) = FunctionAddress[Constructible] : -# 240| r240_4(int) = Constant[1] : -# 240| v240_5(void) = Call[Constructible] : func:r240_3, this:r240_1, 0:r240_4 -# 240| m240_6(unknown) = ^CallSideEffect : ~m239_4 -# 240| m240_7(unknown) = Chi : total:m239_4, partial:m240_6 -# 240| m240_8(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r240_1 -# 240| m240_9(Constructible) = Chi : total:m240_2, partial:m240_8 -# 241| r241_1(glval) = VariableAddress[c] : -# 241| r241_2(glval) = FunctionAddress[g] : -# 241| v241_3(void) = Call[g] : func:r241_2, this:r241_1 -# 241| m241_4(unknown) = ^CallSideEffect : ~m240_7 -# 241| m241_5(unknown) = Chi : total:m240_7, partial:m241_4 -# 241| v241_6(void) = ^IndirectReadSideEffect[-1] : &:r241_1, m240_9 -# 241| m241_7(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r241_1 -# 241| m241_8(Constructible) = Chi : total:m240_9, partial:m241_7 -# 242| r242_1(glval) = VariableAddress[c] : -# 242| r242_2(glval) = FunctionAddress[g] : -# 242| v242_3(void) = Call[g] : func:r242_2, this:r242_1 -# 242| m242_4(unknown) = ^CallSideEffect : ~m241_5 -# 242| m242_5(unknown) = Chi : total:m241_5, partial:m242_4 -# 242| v242_6(void) = ^IndirectReadSideEffect[-1] : &:r242_1, m241_8 -# 242| m242_7(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r242_1 -# 242| m242_8(Constructible) = Chi : total:m241_8, partial:m242_7 -# 243| r243_1(glval) = VariableAddress[c2] : -# 243| m243_2(Constructible) = Uninitialized[c2] : &:r243_1 -# 243| r243_3(glval) = FunctionAddress[Constructible] : -# 243| r243_4(int) = Constant[2] : -# 243| v243_5(void) = Call[Constructible] : func:r243_3, this:r243_1, 0:r243_4 -# 243| m243_6(unknown) = ^CallSideEffect : ~m242_5 -# 243| m243_7(unknown) = Chi : total:m242_5, partial:m243_6 -# 243| m243_8(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r243_1 -# 243| m243_9(Constructible) = Chi : total:m243_2, partial:m243_8 -# 244| r244_1(glval) = VariableAddress[c2] : -# 244| r244_2(glval) = FunctionAddress[g] : -# 244| v244_3(void) = Call[g] : func:r244_2, this:r244_1 -# 244| m244_4(unknown) = ^CallSideEffect : ~m243_7 -# 244| m244_5(unknown) = Chi : total:m243_7, partial:m244_4 -# 244| v244_6(void) = ^IndirectReadSideEffect[-1] : &:r244_1, m243_9 -# 244| m244_7(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r244_1 -# 244| m244_8(Constructible) = Chi : total:m243_9, partial:m244_7 -# 245| v245_1(void) = NoOp : -# 239| v239_5(void) = ReturnVoid : -# 239| v239_6(void) = AliasedUse : ~m244_5 -# 239| v239_7(void) = ExitFunction : - -# 247| char* VoidStarIndirectParameters(char*, int) -# 247| Block 0 -# 247| v247_1(void) = EnterFunction : -# 247| m247_2(unknown) = AliasedDefinition : -# 247| m247_3(unknown) = InitializeNonLocal : -# 247| m247_4(unknown) = Chi : total:m247_2, partial:m247_3 -# 247| r247_5(glval) = VariableAddress[src] : -# 247| m247_6(char *) = InitializeParameter[src] : &:r247_5 -# 247| r247_7(char *) = Load[src] : &:r247_5, m247_6 -# 247| m247_8(unknown) = InitializeIndirection[src] : &:r247_7 -# 247| r247_9(glval) = VariableAddress[size] : -# 247| m247_10(int) = InitializeParameter[size] : &:r247_9 -# 248| r248_1(glval) = VariableAddress[dst] : -# 248| r248_2(glval) = FunctionAddress[operator new[]] : -# 248| r248_3(glval) = VariableAddress[size] : -# 248| r248_4(int) = Load[size] : &:r248_3, m247_10 -# 248| r248_5(unsigned long) = Convert : r248_4 -# 248| r248_6(unsigned long) = Constant[1] : -# 248| r248_7(unsigned long) = Mul : r248_5, r248_6 -# 248| r248_8(void *) = Call[operator new[]] : func:r248_2, 0:r248_7 -# 248| m248_9(unknown) = ^CallSideEffect : ~m247_4 -# 248| m248_10(unknown) = Chi : total:m247_4, partial:m248_9 -# 248| m248_11(unknown) = ^InitializeDynamicAllocation : &:r248_8 -# 248| r248_12(char *) = Convert : r248_8 -# 248| m248_13(char *) = Store[dst] : &:r248_1, r248_12 -# 249| r249_1(char) = Constant[97] : -# 249| r249_2(glval) = VariableAddress[src] : -# 249| r249_3(char *) = Load[src] : &:r249_2, m247_6 -# 249| r249_4(glval) = CopyValue : r249_3 -# 249| m249_5(char) = Store[?] : &:r249_4, r249_1 -# 249| m249_6(unknown) = Chi : total:m247_8, partial:m249_5 -# 250| r250_1(glval) = FunctionAddress[memcpy] : -# 250| r250_2(glval) = VariableAddress[dst] : -# 250| r250_3(char *) = Load[dst] : &:r250_2, m248_13 -# 250| r250_4(void *) = Convert : r250_3 -# 250| r250_5(glval) = VariableAddress[src] : -# 250| r250_6(char *) = Load[src] : &:r250_5, m247_6 -# 250| r250_7(void *) = Convert : r250_6 -# 250| r250_8(glval) = VariableAddress[size] : -# 250| r250_9(int) = Load[size] : &:r250_8, m247_10 -# 250| r250_10(void *) = Call[memcpy] : func:r250_1, 0:r250_4, 1:r250_7, 2:r250_9 -# 250| v250_11(void) = ^SizedBufferReadSideEffect[1] : &:r250_7, r250_9, ~m249_6 -# 250| m250_12(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r250_4, r250_9 -# 250| m250_13(unknown) = Chi : total:m248_11, partial:m250_12 -# 251| r251_1(glval) = VariableAddress[#return] : -# 251| r251_2(glval) = VariableAddress[dst] : -# 251| r251_3(char *) = Load[dst] : &:r251_2, m248_13 -# 251| m251_4(char *) = Store[#return] : &:r251_1, r251_3 -# 247| v247_11(void) = ReturnIndirection[src] : &:r247_7, m249_6 -# 247| r247_12(glval) = VariableAddress[#return] : -# 247| v247_13(void) = ReturnValue : &:r247_12, m251_4 -# 247| v247_14(void) = AliasedUse : ~m248_10 -# 247| v247_15(void) = ExitFunction : - -# 254| char StringLiteralAliasing2(bool) -# 254| Block 0 -# 254| v254_1(void) = EnterFunction : -# 254| m254_2(unknown) = AliasedDefinition : -# 254| m254_3(unknown) = InitializeNonLocal : -# 254| m254_4(unknown) = Chi : total:m254_2, partial:m254_3 -# 254| r254_5(glval) = VariableAddress[b] : -# 254| m254_6(bool) = InitializeParameter[b] : &:r254_5 -# 255| r255_1(glval) = VariableAddress[b] : -# 255| r255_2(bool) = Load[b] : &:r255_1, m254_6 -# 255| v255_3(void) = ConditionalBranch : r255_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 256| Block 1 -# 256| r256_1(glval) = FunctionAddress[ExternalFunc] : -# 256| v256_2(void) = Call[ExternalFunc] : func:r256_1 -# 256| m256_3(unknown) = ^CallSideEffect : ~m254_4 -# 256| m256_4(unknown) = Chi : total:m254_4, partial:m256_3 -#-----| Goto -> Block 3 - -# 259| Block 2 -# 259| r259_1(glval) = FunctionAddress[ExternalFunc] : -# 259| v259_2(void) = Call[ExternalFunc] : func:r259_1 -# 259| m259_3(unknown) = ^CallSideEffect : ~m254_4 -# 259| m259_4(unknown) = Chi : total:m254_4, partial:m259_3 -#-----| Goto -> Block 3 - -# 262| Block 3 -# 262| m262_1(unknown) = Phi : from 1:~m256_4, from 2:~m259_4 -# 262| r262_2(glval) = VariableAddress[s] : -# 262| r262_3(glval) = StringConstant["Literal"] : -# 262| r262_4(char *) = Convert : r262_3 -# 262| m262_5(char *) = Store[s] : &:r262_2, r262_4 -# 263| r263_1(glval) = VariableAddress[#return] : -# 263| r263_2(glval) = VariableAddress[s] : -# 263| r263_3(char *) = Load[s] : &:r263_2, m262_5 -# 263| r263_4(int) = Constant[2] : -# 263| r263_5(glval) = PointerAdd[1] : r263_3, r263_4 -# 263| r263_6(char) = Load[?] : &:r263_5, ~m254_3 -# 263| m263_7(char) = Store[#return] : &:r263_1, r263_6 -# 254| r254_7(glval) = VariableAddress[#return] : -# 254| v254_8(void) = ReturnValue : &:r254_7, m263_7 -# 254| v254_9(void) = AliasedUse : ~m262_1 -# 254| v254_10(void) = ExitFunction : - -# 268| void* MallocAliasing(void*, int) -# 268| Block 0 -# 268| v268_1(void) = EnterFunction : -# 268| m268_2(unknown) = AliasedDefinition : -# 268| m268_3(unknown) = InitializeNonLocal : -# 268| m268_4(unknown) = Chi : total:m268_2, partial:m268_3 -# 268| r268_5(glval) = VariableAddress[s] : -# 268| m268_6(void *) = InitializeParameter[s] : &:r268_5 -# 268| r268_7(void *) = Load[s] : &:r268_5, m268_6 -# 268| m268_8(unknown) = InitializeIndirection[s] : &:r268_7 -# 268| r268_9(glval) = VariableAddress[size] : -# 268| m268_10(int) = InitializeParameter[size] : &:r268_9 -# 269| r269_1(glval) = VariableAddress[buf] : -# 269| r269_2(glval) = FunctionAddress[malloc] : -# 269| r269_3(glval) = VariableAddress[size] : -# 269| r269_4(int) = Load[size] : &:r269_3, m268_10 -# 269| r269_5(void *) = Call[malloc] : func:r269_2, 0:r269_4 -# 269| m269_6(unknown) = ^CallSideEffect : ~m268_4 -# 269| m269_7(unknown) = Chi : total:m268_4, partial:m269_6 -# 269| m269_8(unknown) = ^InitializeDynamicAllocation : &:r269_5 -# 269| m269_9(void *) = Store[buf] : &:r269_1, r269_5 -# 270| r270_1(glval) = FunctionAddress[memcpy] : -# 270| r270_2(glval) = VariableAddress[buf] : -# 270| r270_3(void *) = Load[buf] : &:r270_2, m269_9 -# 270| r270_4(glval) = VariableAddress[s] : -# 270| r270_5(void *) = Load[s] : &:r270_4, m268_6 -# 270| r270_6(glval) = VariableAddress[size] : -# 270| r270_7(int) = Load[size] : &:r270_6, m268_10 -# 270| r270_8(void *) = Call[memcpy] : func:r270_1, 0:r270_3, 1:r270_5, 2:r270_7 -# 270| v270_9(void) = ^SizedBufferReadSideEffect[1] : &:r270_5, r270_7, ~m268_8 -# 270| m270_10(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r270_3, r270_7 -# 270| m270_11(unknown) = Chi : total:m269_8, partial:m270_10 -# 271| r271_1(glval) = VariableAddress[#return] : -# 271| r271_2(glval) = VariableAddress[buf] : -# 271| r271_3(void *) = Load[buf] : &:r271_2, m269_9 -# 271| m271_4(void *) = Store[#return] : &:r271_1, r271_3 -# 268| v268_11(void) = ReturnIndirection[s] : &:r268_7, m268_8 -# 268| r268_12(glval) = VariableAddress[#return] : -# 268| v268_13(void) = ReturnValue : &:r268_12, m271_4 -# 268| v268_14(void) = AliasedUse : ~m269_7 -# 268| v268_15(void) = ExitFunction : - -# 275| void EscapedButNotConflated(bool, Point, int) -# 275| Block 0 -# 275| v275_1(void) = EnterFunction : -# 275| m275_2(unknown) = AliasedDefinition : -# 275| m275_3(unknown) = InitializeNonLocal : -# 275| m275_4(unknown) = Chi : total:m275_2, partial:m275_3 -# 275| r275_5(glval) = VariableAddress[c] : -# 275| m275_6(bool) = InitializeParameter[c] : &:r275_5 -# 275| r275_7(glval) = VariableAddress[p] : -# 275| m275_8(Point) = InitializeParameter[p] : &:r275_7 -# 275| r275_9(glval) = VariableAddress[x1] : -# 275| m275_10(int) = InitializeParameter[x1] : &:r275_9 -# 276| r276_1(glval) = VariableAddress[a] : -# 276| m276_2(Point) = Uninitialized[a] : &:r276_1 -# 276| m276_3(unknown) = Chi : total:m275_4, partial:m276_2 -# 276| r276_4(glval) = FieldAddress[x] : r276_1 -# 276| r276_5(int) = Constant[0] : -# 276| m276_6(int) = Store[?] : &:r276_4, r276_5 -# 276| m276_7(unknown) = Chi : total:m276_3, partial:m276_6 -# 276| r276_8(glval) = FieldAddress[y] : r276_1 -# 276| r276_9(int) = Constant[0] : -# 276| m276_10(int) = Store[?] : &:r276_8, r276_9 -# 276| m276_11(unknown) = Chi : total:m276_7, partial:m276_10 -# 277| r277_1(glval) = VariableAddress[a] : -# 277| r277_2(Point *) = CopyValue : r277_1 -# 277| r277_3(glval) = VariableAddress[pp] : -# 277| m277_4(Point *) = Store[pp] : &:r277_3, r277_2 -# 277| m277_5(unknown) = Chi : total:m276_11, partial:m277_4 -# 278| r278_1(glval) = VariableAddress[c] : -# 278| r278_2(bool) = Load[c] : &:r278_1, m275_6 -# 278| v278_3(void) = ConditionalBranch : r278_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 279| Block 1 -# 279| r279_1(glval) = VariableAddress[x1] : -# 279| r279_2(int) = Load[x1] : &:r279_1, m275_10 -# 279| r279_3(glval) = VariableAddress[a] : -# 279| r279_4(glval) = FieldAddress[x] : r279_3 -# 279| m279_5(int) = Store[?] : &:r279_4, r279_2 -# 279| m279_6(unknown) = Chi : total:m277_5, partial:m279_5 -#-----| Goto -> Block 2 - -# 281| Block 2 -# 281| m281_1(int) = Phi : from 0:m276_6, from 1:m279_5 -# 281| m281_2(unknown) = Phi : from 0:~m277_5, from 1:~m279_6 -# 281| r281_3(glval) = VariableAddress[x] : -# 281| r281_4(glval) = VariableAddress[a] : -# 281| r281_5(glval) = FieldAddress[x] : r281_4 -# 281| r281_6(int) = Load[?] : &:r281_5, m281_1 -# 281| m281_7(int) = Store[x] : &:r281_3, r281_6 -# 282| v282_1(void) = NoOp : -# 275| v275_11(void) = ReturnVoid : -# 275| v275_12(void) = AliasedUse : ~m281_2 -# 275| v275_13(void) = ExitFunction : - -# 286| void A::A(int) -# 286| Block 0 -# 286| v286_1(void) = EnterFunction : -# 286| m286_2(unknown) = AliasedDefinition : -# 286| m286_3(unknown) = InitializeNonLocal : -# 286| m286_4(unknown) = Chi : total:m286_2, partial:m286_3 -# 286| r286_5(glval) = VariableAddress[#this] : -# 286| m286_6(glval) = InitializeParameter[#this] : &:r286_5 -# 286| r286_7(glval) = Load[#this] : &:r286_5, m286_6 -# 286| m286_8(A) = InitializeIndirection[#this] : &:r286_7 -# 286| r286_9(glval) = VariableAddress[x] : -# 286| m286_10(int) = InitializeParameter[x] : &:r286_9 -# 286| v286_11(void) = NoOp : -# 286| v286_12(void) = ReturnIndirection[#this] : &:r286_7, m286_8 -# 286| v286_13(void) = ReturnVoid : -# 286| v286_14(void) = AliasedUse : m286_3 -# 286| v286_15(void) = ExitFunction : - -# 287| void A::A(A*) -# 287| Block 0 -# 287| v287_1(void) = EnterFunction : -# 287| m287_2(unknown) = AliasedDefinition : -# 287| m287_3(unknown) = InitializeNonLocal : -# 287| m287_4(unknown) = Chi : total:m287_2, partial:m287_3 -# 287| r287_5(glval) = VariableAddress[#this] : -# 287| m287_6(glval) = InitializeParameter[#this] : &:r287_5 -# 287| r287_7(glval) = Load[#this] : &:r287_5, m287_6 -# 287| m287_8(A) = InitializeIndirection[#this] : &:r287_7 -# 287| r287_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 287| m287_10(A *) = InitializeParameter[(unnamed parameter 0)] : &:r287_9 -# 287| r287_11(A *) = Load[(unnamed parameter 0)] : &:r287_9, m287_10 -# 287| m287_12(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r287_11 -# 287| v287_13(void) = NoOp : -# 287| v287_14(void) = ReturnIndirection[#this] : &:r287_7, m287_8 -# 287| v287_15(void) = ReturnIndirection[(unnamed parameter 0)] : &:r287_11, m287_12 -# 287| v287_16(void) = ReturnVoid : -# 287| v287_17(void) = AliasedUse : m287_3 -# 287| v287_18(void) = ExitFunction : - -# 288| void A::A() -# 288| Block 0 -# 288| v288_1(void) = EnterFunction : -# 288| m288_2(unknown) = AliasedDefinition : -# 288| m288_3(unknown) = InitializeNonLocal : -# 288| m288_4(unknown) = Chi : total:m288_2, partial:m288_3 -# 288| r288_5(glval) = VariableAddress[#this] : -# 288| m288_6(glval) = InitializeParameter[#this] : &:r288_5 -# 288| r288_7(glval) = Load[#this] : &:r288_5, m288_6 -# 288| m288_8(A) = InitializeIndirection[#this] : &:r288_7 -# 288| v288_9(void) = NoOp : -# 288| v288_10(void) = ReturnIndirection[#this] : &:r288_7, m288_8 -# 288| v288_11(void) = ReturnVoid : -# 288| v288_12(void) = AliasedUse : m288_3 -# 288| v288_13(void) = ExitFunction : - -# 291| Point* NewAliasing(int) -# 291| Block 0 -# 291| v291_1(void) = EnterFunction : -# 291| m291_2(unknown) = AliasedDefinition : -# 291| m291_3(unknown) = InitializeNonLocal : -# 291| m291_4(unknown) = Chi : total:m291_2, partial:m291_3 -# 291| r291_5(glval) = VariableAddress[x] : -# 291| m291_6(int) = InitializeParameter[x] : &:r291_5 -# 292| r292_1(glval) = VariableAddress[p] : -# 292| r292_2(glval) = FunctionAddress[operator new] : -# 292| r292_3(unsigned long) = Constant[8] : -# 292| r292_4(void *) = Call[operator new] : func:r292_2, 0:r292_3 -# 292| m292_5(unknown) = ^CallSideEffect : ~m291_4 -# 292| m292_6(unknown) = Chi : total:m291_4, partial:m292_5 -# 292| m292_7(unknown) = ^InitializeDynamicAllocation : &:r292_4 -# 292| r292_8(Point *) = Convert : r292_4 -# 292| m292_9(Point *) = Store[p] : &:r292_1, r292_8 -# 293| r293_1(glval) = VariableAddress[q] : -# 293| r293_2(glval) = FunctionAddress[operator new] : -# 293| r293_3(unsigned long) = Constant[8] : -# 293| r293_4(void *) = Call[operator new] : func:r293_2, 0:r293_3 -# 293| m293_5(unknown) = ^CallSideEffect : ~m292_6 -# 293| m293_6(unknown) = Chi : total:m292_6, partial:m293_5 -# 293| m293_7(unknown) = ^InitializeDynamicAllocation : &:r293_4 -# 293| r293_8(Point *) = Convert : r293_4 -# 293| m293_9(Point *) = Store[q] : &:r293_1, r293_8 -# 294| r294_1(glval) = VariableAddress[j] : -# 294| r294_2(glval) = FunctionAddress[operator new] : -# 294| r294_3(unsigned long) = Constant[4] : -# 294| r294_4(void *) = Call[operator new] : func:r294_2, 0:r294_3 -# 294| m294_5(unknown) = ^CallSideEffect : ~m293_6 -# 294| m294_6(unknown) = Chi : total:m293_6, partial:m294_5 -# 294| m294_7(unknown) = ^InitializeDynamicAllocation : &:r294_4 -# 294| r294_8(A *) = Convert : r294_4 -# 294| r294_9(glval) = FunctionAddress[A] : -# 294| r294_10(glval) = FunctionAddress[operator new] : -# 294| r294_11(unsigned long) = Constant[4] : -# 294| r294_12(void *) = Call[operator new] : func:r294_10, 0:r294_11 -# 294| m294_13(unknown) = ^CallSideEffect : ~m294_6 -# 294| m294_14(unknown) = Chi : total:m294_6, partial:m294_13 -# 294| m294_15(unknown) = ^InitializeDynamicAllocation : &:r294_12 -# 294| r294_16(A *) = Convert : r294_12 -# 294| r294_17(glval) = FunctionAddress[A] : -# 294| r294_18(glval) = VariableAddress[x] : -# 294| r294_19(int) = Load[x] : &:r294_18, m291_6 -# 294| v294_20(void) = Call[A] : func:r294_17, this:r294_16, 0:r294_19 -# 294| m294_21(unknown) = ^CallSideEffect : ~m294_14 -# 294| m294_22(unknown) = Chi : total:m294_14, partial:m294_21 -# 294| m294_23(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_16 -# 294| m294_24(unknown) = Chi : total:m294_15, partial:m294_23 -# 294| v294_25(void) = Call[A] : func:r294_9, this:r294_8, 0:r294_16 -# 294| m294_26(unknown) = ^CallSideEffect : ~m294_22 -# 294| m294_27(unknown) = Chi : total:m294_22, partial:m294_26 -# 294| v294_28(void) = ^BufferReadSideEffect[0] : &:r294_16, ~m294_24 -# 294| m294_29(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_8 -# 294| m294_30(unknown) = Chi : total:m294_7, partial:m294_29 -# 294| m294_31(unknown) = ^BufferMayWriteSideEffect[0] : &:r294_16 -# 294| m294_32(unknown) = Chi : total:m294_24, partial:m294_31 -# 294| r294_33(glval) = FieldAddress[i] : r294_8 -# 294| r294_34(int) = Load[?] : &:r294_33, ~m294_30 -# 294| m294_35(int) = Store[j] : &:r294_1, r294_34 -# 295| r295_1(glval) = VariableAddress[a] : -# 295| r295_2(glval) = FunctionAddress[operator new] : -# 295| r295_3(unsigned long) = Constant[4] : -# 295| r295_4(void *) = Call[operator new] : func:r295_2, 0:r295_3 -# 295| m295_5(unknown) = ^CallSideEffect : ~m294_27 -# 295| m295_6(unknown) = Chi : total:m294_27, partial:m295_5 -# 295| m295_7(unknown) = ^InitializeDynamicAllocation : &:r295_4 -# 295| r295_8(A *) = Convert : r295_4 -# 295| r295_9(glval) = FunctionAddress[A] : -# 295| v295_10(void) = Call[A] : func:r295_9, this:r295_8 -# 295| m295_11(unknown) = ^CallSideEffect : ~m295_6 -# 295| m295_12(unknown) = Chi : total:m295_6, partial:m295_11 -# 295| m295_13(A) = ^IndirectMayWriteSideEffect[-1] : &:r295_8 -# 295| m295_14(unknown) = Chi : total:m295_7, partial:m295_13 -# 295| m295_15(A *) = Store[a] : &:r295_1, r295_8 -# 296| r296_1(glval) = VariableAddress[#return] : -# 296| r296_2(glval) = VariableAddress[p] : -# 296| r296_3(Point *) = Load[p] : &:r296_2, m292_9 -# 296| m296_4(Point *) = Store[#return] : &:r296_1, r296_3 -# 291| r291_7(glval) = VariableAddress[#return] : -# 291| v291_8(void) = ReturnValue : &:r291_7, m296_4 -# 291| v291_9(void) = AliasedUse : ~m295_12 -# 291| v291_10(void) = ExitFunction : - -# 301| int main(int, char**) -# 301| Block 0 -# 301| v301_1(void) = EnterFunction : -# 301| m301_2(unknown) = AliasedDefinition : -# 301| m301_3(unknown) = InitializeNonLocal : -# 301| m301_4(unknown) = Chi : total:m301_2, partial:m301_3 -# 301| r301_5(glval) = VariableAddress[argc] : -# 301| m301_6(int) = InitializeParameter[argc] : &:r301_5 -# 301| r301_7(glval) = VariableAddress[argv] : -# 301| m301_8(char **) = InitializeParameter[argv] : &:r301_7 -# 301| r301_9(char **) = Load[argv] : &:r301_7, m301_8 -# 301| m301_10(unknown) = InitializeIndirection[argv] : &:r301_9 -# 301| m301_11(unknown) = Chi : total:m301_4, partial:m301_10 -# 302| r302_1(glval) = FunctionAddress[unknownFunction] : -# 302| r302_2(glval) = VariableAddress[argc] : -# 302| r302_3(int) = Load[argc] : &:r302_2, m301_6 -# 302| r302_4(glval) = VariableAddress[argv] : -# 302| r302_5(char **) = Load[argv] : &:r302_4, m301_8 -# 302| v302_6(void) = Call[unknownFunction] : func:r302_1, 0:r302_3, 1:r302_5 -# 302| m302_7(unknown) = ^CallSideEffect : ~m301_11 -# 302| m302_8(unknown) = Chi : total:m301_11, partial:m302_7 -# 302| v302_9(void) = ^BufferReadSideEffect[1] : &:r302_5, ~m302_8 -# 302| m302_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r302_5 -# 302| m302_11(unknown) = Chi : total:m302_8, partial:m302_10 -# 303| r303_1(glval) = FunctionAddress[unknownFunction] : -# 303| r303_2(glval) = VariableAddress[argc] : -# 303| r303_3(int) = Load[argc] : &:r303_2, m301_6 -# 303| r303_4(glval) = VariableAddress[argv] : -# 303| r303_5(char **) = Load[argv] : &:r303_4, m301_8 -# 303| v303_6(void) = Call[unknownFunction] : func:r303_1, 0:r303_3, 1:r303_5 -# 303| m303_7(unknown) = ^CallSideEffect : ~m302_11 -# 303| m303_8(unknown) = Chi : total:m302_11, partial:m303_7 -# 303| v303_9(void) = ^BufferReadSideEffect[1] : &:r303_5, ~m303_8 -# 303| m303_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r303_5 -# 303| m303_11(unknown) = Chi : total:m303_8, partial:m303_10 -# 304| r304_1(glval) = VariableAddress[#return] : -# 304| r304_2(glval) = VariableAddress[argv] : -# 304| r304_3(char **) = Load[argv] : &:r304_2, m301_8 -# 304| r304_4(char *) = Load[?] : &:r304_3, ~m303_11 -# 304| r304_5(char) = Load[?] : &:r304_4, ~m303_11 -# 304| r304_6(int) = Convert : r304_5 -# 304| m304_7(int) = Store[#return] : &:r304_1, r304_6 -# 301| v301_12(void) = ReturnIndirection[argv] : &:r301_9, ~m303_11 -# 301| r301_13(glval) = VariableAddress[#return] : -# 301| v301_14(void) = ReturnValue : &:r301_13, m304_7 -# 301| v301_15(void) = AliasedUse : ~m303_11 -# 301| v301_16(void) = ExitFunction : - -# 310| void ThisAliasTest::setX(int) -# 310| Block 0 -# 310| v310_1(void) = EnterFunction : -# 310| m310_2(unknown) = AliasedDefinition : -# 310| m310_3(unknown) = InitializeNonLocal : -# 310| m310_4(unknown) = Chi : total:m310_2, partial:m310_3 -# 310| r310_5(glval) = VariableAddress[#this] : -# 310| m310_6(glval) = InitializeParameter[#this] : &:r310_5 -# 310| r310_7(glval) = Load[#this] : &:r310_5, m310_6 -# 310| m310_8(ThisAliasTest) = InitializeIndirection[#this] : &:r310_7 -# 310| r310_9(glval) = VariableAddress[arg] : -# 310| m310_10(int) = InitializeParameter[arg] : &:r310_9 -# 311| r311_1(glval) = VariableAddress[arg] : -# 311| r311_2(int) = Load[arg] : &:r311_1, m310_10 -# 311| r311_3(glval) = VariableAddress[#this] : -# 311| r311_4(ThisAliasTest *) = Load[#this] : &:r311_3, m310_6 -# 311| r311_5(glval) = FieldAddress[x] : r311_4 -# 311| m311_6(int) = Store[?] : &:r311_5, r311_2 -# 311| m311_7(unknown) = Chi : total:m310_8, partial:m311_6 -# 312| v312_1(void) = NoOp : -# 310| v310_11(void) = ReturnIndirection[#this] : &:r310_7, m311_7 -# 310| v310_12(void) = ReturnVoid : -# 310| v310_13(void) = AliasedUse : m310_3 -# 310| v310_14(void) = ExitFunction : - -# 319| void DoubleIndirectionEscapes(char*) -# 319| Block 0 -# 319| v319_1(void) = EnterFunction : -# 319| m319_2(unknown) = AliasedDefinition : -# 319| m319_3(unknown) = InitializeNonLocal : -# 319| m319_4(unknown) = Chi : total:m319_2, partial:m319_3 -# 319| r319_5(glval) = VariableAddress[s] : -# 319| m319_6(char *) = InitializeParameter[s] : &:r319_5 -# 319| r319_7(char *) = Load[s] : &:r319_5, m319_6 -# 319| m319_8(unknown) = InitializeIndirection[s] : &:r319_7 -# 321| r321_1(glval) = VariableAddress[buffer] : -# 321| m321_2(char[1024]) = Uninitialized[buffer] : &:r321_1 -# 321| m321_3(unknown) = Chi : total:m319_4, partial:m321_2 -# 322| r322_1(glval) = VariableAddress[ptr1] : -# 322| m322_2(char *) = Uninitialized[ptr1] : &:r322_1 -# 322| m322_3(unknown) = Chi : total:m321_3, partial:m322_2 -# 322| r322_4(glval) = VariableAddress[ptr2] : -# 322| m322_5(char **) = Uninitialized[ptr2] : &:r322_4 -# 323| r323_1(glval) = VariableAddress[ptr3] : -# 323| m323_2(char *) = Uninitialized[ptr3] : &:r323_1 -# 323| r323_3(glval) = VariableAddress[ptr4] : -# 323| m323_4(char **) = Uninitialized[ptr4] : &:r323_3 -# 325| r325_1(glval) = VariableAddress[buffer] : -# 325| r325_2(char *) = Convert : r325_1 -# 325| r325_3(glval) = VariableAddress[ptr1] : -# 325| m325_4(char *) = Store[ptr1] : &:r325_3, r325_2 -# 325| m325_5(unknown) = Chi : total:m322_3, partial:m325_4 -# 326| r326_1(glval) = VariableAddress[ptr1] : -# 326| r326_2(char **) = CopyValue : r326_1 -# 326| r326_3(glval) = VariableAddress[ptr2] : -# 326| m326_4(char **) = Store[ptr2] : &:r326_3, r326_2 -# 327| r327_1(glval) = FunctionAddress[memcpy] : -# 327| r327_2(glval) = VariableAddress[ptr2] : -# 327| r327_3(char **) = Load[ptr2] : &:r327_2, m326_4 -# 327| r327_4(char *) = Load[?] : &:r327_3, m325_4 -# 327| r327_5(void *) = Convert : r327_4 -# 327| r327_6(glval) = VariableAddress[s] : -# 327| r327_7(char *) = Load[s] : &:r327_6, m319_6 -# 327| r327_8(void *) = Convert : r327_7 -# 327| r327_9(int) = Constant[1024] : -# 327| r327_10(void *) = Call[memcpy] : func:r327_1, 0:r327_5, 1:r327_8, 2:r327_9 -# 327| v327_11(void) = ^SizedBufferReadSideEffect[1] : &:r327_8, r327_9, ~m319_8 -# 327| m327_12(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r327_5, r327_9 -# 327| m327_13(unknown) = Chi : total:m325_5, partial:m327_12 -# 329| r329_1(glval) = FunctionAddress[sink] : -# 329| r329_2(glval) = VariableAddress[buffer] : -# 329| r329_3(char *) = Convert : r329_2 -# 329| v329_4(void) = Call[sink] : func:r329_1, 0:r329_3 -# 329| m329_5(unknown) = ^CallSideEffect : ~m327_13 -# 329| m329_6(unknown) = Chi : total:m327_13, partial:m329_5 -# 329| v329_7(void) = ^BufferReadSideEffect[0] : &:r329_3, ~m329_6 -# 329| m329_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r329_3 -# 329| m329_9(unknown) = Chi : total:m329_6, partial:m329_8 -# 330| r330_1(glval) = FunctionAddress[sink] : -# 330| r330_2(glval) = VariableAddress[ptr1] : -# 330| r330_3(char *) = Load[ptr1] : &:r330_2, ~m329_6 -# 330| v330_4(void) = Call[sink] : func:r330_1, 0:r330_3 -# 330| m330_5(unknown) = ^CallSideEffect : ~m329_9 -# 330| m330_6(unknown) = Chi : total:m329_9, partial:m330_5 -# 330| v330_7(void) = ^BufferReadSideEffect[0] : &:r330_3, ~m330_6 -# 330| m330_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r330_3 -# 330| m330_9(unknown) = Chi : total:m330_6, partial:m330_8 -# 331| r331_1(glval) = FunctionAddress[sink] : -# 331| r331_2(glval) = VariableAddress[ptr2] : -# 331| r331_3(char **) = Load[ptr2] : &:r331_2, m326_4 -# 331| v331_4(void) = Call[sink] : func:r331_1, 0:r331_3 -# 331| m331_5(unknown) = ^CallSideEffect : ~m330_9 -# 331| m331_6(unknown) = Chi : total:m330_9, partial:m331_5 -# 331| v331_7(void) = ^BufferReadSideEffect[0] : &:r331_3, ~m331_6 -# 331| m331_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r331_3 -# 331| m331_9(unknown) = Chi : total:m331_6, partial:m331_8 -# 332| r332_1(glval) = FunctionAddress[sink] : -# 332| r332_2(glval) = VariableAddress[ptr2] : -# 332| r332_3(char **) = Load[ptr2] : &:r332_2, m326_4 -# 332| r332_4(char *) = Load[?] : &:r332_3, ~m331_9 -# 332| v332_5(void) = Call[sink] : func:r332_1, 0:r332_4 -# 332| m332_6(unknown) = ^CallSideEffect : ~m331_9 -# 332| m332_7(unknown) = Chi : total:m331_9, partial:m332_6 -# 332| v332_8(void) = ^BufferReadSideEffect[0] : &:r332_4, ~m332_7 -# 332| m332_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r332_4 -# 332| m332_10(unknown) = Chi : total:m332_7, partial:m332_9 -# 333| v333_1(void) = NoOp : -# 319| v319_9(void) = ReturnIndirection[s] : &:r319_7, m319_8 -# 319| v319_10(void) = ReturnVoid : -# 319| v319_11(void) = AliasedUse : ~m332_10 -# 319| v319_12(void) = ExitFunction : - -# 335| int UnreachablePhiOperand(int, int) -# 335| Block 0 -# 335| v335_1(void) = EnterFunction : -# 335| m335_2(unknown) = AliasedDefinition : -# 335| m335_3(unknown) = InitializeNonLocal : -# 335| m335_4(unknown) = Chi : total:m335_2, partial:m335_3 -# 335| r335_5(glval) = VariableAddress[x] : -# 335| m335_6(int) = InitializeParameter[x] : &:r335_5 -# 335| r335_7(glval) = VariableAddress[y] : -# 335| m335_8(int) = InitializeParameter[y] : &:r335_7 -# 336| r336_1(glval) = VariableAddress[b] : -# 336| r336_2(bool) = Constant[1] : -# 336| m336_3(bool) = Store[b] : &:r336_1, r336_2 -# 337| r337_1(glval) = VariableAddress[ret] : -# 337| m337_2(int) = Uninitialized[ret] : &:r337_1 -# 339| r339_1(glval) = VariableAddress[b] : -# 339| r339_2(bool) = Load[b] : &:r339_1, m336_3 -# 339| v339_3(void) = ConditionalBranch : r339_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 340| Block 1 -# 340| r340_1(glval) = VariableAddress[x] : -# 340| r340_2(int) = Load[x] : &:r340_1, m335_6 -# 340| r340_3(glval) = VariableAddress[ret] : -# 340| m340_4(int) = Store[ret] : &:r340_3, r340_2 -# 345| r345_1(glval) = VariableAddress[#return] : -# 345| r345_2(glval) = VariableAddress[ret] : -# 345| r345_3(int) = Load[ret] : &:r345_2, m340_4 -# 345| m345_4(int) = Store[#return] : &:r345_1, r345_3 -# 335| r335_9(glval) = VariableAddress[#return] : -# 335| v335_10(void) = ReturnValue : &:r335_9, m345_4 -# 335| v335_11(void) = AliasedUse : m335_3 -# 335| v335_12(void) = ExitFunction : - -# 335| Block 2 -# 335| v335_13(void) = Unreached : - -# 348| int UnreachablePhiOperand2(int, int, int, bool) -# 348| Block 0 -# 348| v348_1(void) = EnterFunction : -# 348| m348_2(unknown) = AliasedDefinition : -# 348| m348_3(unknown) = InitializeNonLocal : -# 348| m348_4(unknown) = Chi : total:m348_2, partial:m348_3 -# 348| r348_5(glval) = VariableAddress[x] : -# 348| m348_6(int) = InitializeParameter[x] : &:r348_5 -# 348| r348_7(glval) = VariableAddress[y] : -# 348| m348_8(int) = InitializeParameter[y] : &:r348_7 -# 348| r348_9(glval) = VariableAddress[z] : -# 348| m348_10(int) = InitializeParameter[z] : &:r348_9 -# 348| r348_11(glval) = VariableAddress[b1] : -# 348| m348_12(bool) = InitializeParameter[b1] : &:r348_11 -# 349| r349_1(glval) = VariableAddress[b2] : -# 349| r349_2(bool) = Constant[1] : -# 349| m349_3(bool) = Store[b2] : &:r349_1, r349_2 -# 350| r350_1(glval) = VariableAddress[ret] : -# 350| m350_2(int) = Uninitialized[ret] : &:r350_1 -# 352| r352_1(glval) = VariableAddress[b1] : -# 352| r352_2(bool) = Load[b1] : &:r352_1, m348_12 -# 352| v352_3(void) = ConditionalBranch : r352_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 353| Block 1 -# 353| r353_1(glval) = VariableAddress[x] : -# 353| r353_2(int) = Load[x] : &:r353_1, m348_6 -# 353| r353_3(glval) = VariableAddress[ret] : -# 353| m353_4(int) = Store[ret] : &:r353_3, r353_2 -#-----| Goto -> Block 4 - -# 355| Block 2 -# 355| r355_1(glval) = VariableAddress[b2] : -# 355| r355_2(bool) = Load[b2] : &:r355_1, m349_3 -# 355| v355_3(void) = ConditionalBranch : r355_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 356| Block 3 -# 356| r356_1(glval) = VariableAddress[y] : -# 356| r356_2(int) = Load[y] : &:r356_1, m348_8 -# 356| r356_3(glval) = VariableAddress[ret] : -# 356| m356_4(int) = Store[ret] : &:r356_3, r356_2 -#-----| Goto -> Block 4 - -# 362| Block 4 -# 362| m362_1(int) = Phi : from 1:m353_4, from 3:m356_4 -# 362| r362_2(glval) = VariableAddress[#return] : -# 362| r362_3(glval) = VariableAddress[ret] : -# 362| r362_4(int) = Load[ret] : &:r362_3, m362_1 -# 362| m362_5(int) = Store[#return] : &:r362_2, r362_4 -# 348| r348_13(glval) = VariableAddress[#return] : -# 348| v348_14(void) = ReturnValue : &:r348_13, m362_5 -# 348| v348_15(void) = AliasedUse : m348_3 -# 348| v348_16(void) = ExitFunction : - -# 348| Block 5 -# 348| v348_17(void) = Unreached : - -# 365| int DegeneratePhi(int, int, bool) -# 365| Block 0 -# 365| v365_1(void) = EnterFunction : -# 365| m365_2(unknown) = AliasedDefinition : -# 365| m365_3(unknown) = InitializeNonLocal : -# 365| m365_4(unknown) = Chi : total:m365_2, partial:m365_3 -# 365| r365_5(glval) = VariableAddress[x] : -# 365| m365_6(int) = InitializeParameter[x] : &:r365_5 -# 365| r365_7(glval) = VariableAddress[y] : -# 365| m365_8(int) = InitializeParameter[y] : &:r365_7 -# 365| r365_9(glval) = VariableAddress[b1] : -# 365| m365_10(bool) = InitializeParameter[b1] : &:r365_9 -# 366| r366_1(glval) = VariableAddress[b2] : -# 366| r366_2(bool) = Constant[1] : -# 366| m366_3(bool) = Store[b2] : &:r366_1, r366_2 -# 367| r367_1(glval) = VariableAddress[ret1] : -# 367| m367_2(int) = Uninitialized[ret1] : &:r367_1 -# 368| r368_1(glval) = VariableAddress[ret2] : -# 368| r368_2(glval) = VariableAddress[x] : -# 368| r368_3(int) = Load[x] : &:r368_2, m365_6 -# 368| m368_4(int) = Store[ret2] : &:r368_1, r368_3 -# 370| r370_1(glval) = VariableAddress[b1] : -# 370| r370_2(bool) = Load[b1] : &:r370_1, m365_10 -# 370| v370_3(void) = ConditionalBranch : r370_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 371| Block 1 -# 371| r371_1(glval) = VariableAddress[x] : -# 371| r371_2(int) = Load[x] : &:r371_1, m365_6 -# 371| r371_3(glval) = VariableAddress[ret1] : -# 371| m371_4(int) = Store[ret1] : &:r371_3, r371_2 -#-----| Goto -> Block 4 - -# 373| Block 2 -# 373| r373_1(glval) = VariableAddress[b2] : -# 373| r373_2(bool) = Load[b2] : &:r373_1, m366_3 -# 373| v373_3(void) = ConditionalBranch : r373_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 374| Block 3 -# 374| r374_1(glval) = VariableAddress[x] : -# 374| r374_2(int) = Load[x] : &:r374_1, m365_6 -# 374| r374_3(glval) = VariableAddress[ret1] : -# 374| m374_4(int) = Store[ret1] : &:r374_3, r374_2 -#-----| Goto -> Block 4 - -# 380| Block 4 -# 380| m380_1(int) = Phi : from 1:m368_4, from 3:m368_4 -# 380| m380_2(int) = Phi : from 1:m371_4, from 3:m374_4 -# 380| r380_3(glval) = VariableAddress[#return] : -# 380| r380_4(glval) = VariableAddress[ret1] : -# 380| r380_5(int) = Load[ret1] : &:r380_4, m380_2 -# 380| r380_6(glval) = VariableAddress[ret2] : -# 380| r380_7(int) = Load[ret2] : &:r380_6, m380_1 -# 380| r380_8(int) = Add : r380_5, r380_7 -# 380| m380_9(int) = Store[#return] : &:r380_3, r380_8 -# 365| r365_11(glval) = VariableAddress[#return] : -# 365| v365_12(void) = ReturnValue : &:r365_11, m380_9 -# 365| v365_13(void) = AliasedUse : m365_3 -# 365| v365_14(void) = ExitFunction : - -# 365| Block 5 -# 365| v365_15(void) = Unreached : - -# 383| int FusedBlockPhiOperand(int, int, int, bool) -# 383| Block 0 -# 383| v383_1(void) = EnterFunction : -# 383| m383_2(unknown) = AliasedDefinition : -# 383| m383_3(unknown) = InitializeNonLocal : -# 383| m383_4(unknown) = Chi : total:m383_2, partial:m383_3 -# 383| r383_5(glval) = VariableAddress[x] : -# 383| m383_6(int) = InitializeParameter[x] : &:r383_5 -# 383| r383_7(glval) = VariableAddress[y] : -# 383| m383_8(int) = InitializeParameter[y] : &:r383_7 -# 383| r383_9(glval) = VariableAddress[z] : -# 383| m383_10(int) = InitializeParameter[z] : &:r383_9 -# 383| r383_11(glval) = VariableAddress[b1] : -# 383| m383_12(bool) = InitializeParameter[b1] : &:r383_11 -# 384| r384_1(glval) = VariableAddress[b2] : -# 384| r384_2(bool) = Constant[1] : -# 384| m384_3(bool) = Store[b2] : &:r384_1, r384_2 -# 385| r385_1(glval) = VariableAddress[ret] : -# 385| m385_2(int) = Uninitialized[ret] : &:r385_1 -# 387| r387_1(glval) = VariableAddress[b1] : -# 387| r387_2(bool) = Load[b1] : &:r387_1, m383_12 -# 387| v387_3(void) = ConditionalBranch : r387_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 388| Block 1 -# 388| r388_1(glval) = VariableAddress[x] : -# 388| r388_2(int) = Load[x] : &:r388_1, m383_6 -# 388| r388_3(glval) = VariableAddress[ret] : -# 388| m388_4(int) = Store[ret] : &:r388_3, r388_2 -#-----| Goto -> Block 4 - -# 390| Block 2 -# 390| r390_1(glval) = VariableAddress[b2] : -# 390| r390_2(bool) = Load[b2] : &:r390_1, m384_3 -# 390| v390_3(void) = ConditionalBranch : r390_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 391| Block 3 -# 391| r391_1(glval) = VariableAddress[y] : -# 391| r391_2(int) = Load[y] : &:r391_1, m383_8 -# 391| r391_3(glval) = VariableAddress[ret] : -# 391| m391_4(int) = Store[ret] : &:r391_3, r391_2 -# 395| v395_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 398| Block 4 -# 398| m398_1(int) = Phi : from 1:m388_4, from 3:m391_4 -# 398| r398_2(glval) = VariableAddress[#return] : -# 398| r398_3(glval) = VariableAddress[ret] : -# 398| r398_4(int) = Load[ret] : &:r398_3, m398_1 -# 398| m398_5(int) = Store[#return] : &:r398_2, r398_4 -# 383| r383_13(glval) = VariableAddress[#return] : -# 383| v383_14(void) = ReturnValue : &:r383_13, m398_5 -# 383| v383_15(void) = AliasedUse : m383_3 -# 383| v383_16(void) = ExitFunction : - -# 383| Block 5 -# 383| v383_17(void) = Unreached : - -# 401| void vla(int, int, int, bool) -# 401| Block 0 -# 401| v401_1(void) = EnterFunction : -# 401| m401_2(unknown) = AliasedDefinition : -# 401| m401_3(unknown) = InitializeNonLocal : -# 401| m401_4(unknown) = Chi : total:m401_2, partial:m401_3 -# 401| r401_5(glval) = VariableAddress[n1] : -# 401| m401_6(int) = InitializeParameter[n1] : &:r401_5 -# 401| r401_7(glval) = VariableAddress[n2] : -# 401| m401_8(int) = InitializeParameter[n2] : &:r401_7 -# 401| r401_9(glval) = VariableAddress[n3] : -# 401| m401_10(int) = InitializeParameter[n3] : &:r401_9 -# 401| r401_11(glval) = VariableAddress[b1] : -# 401| m401_12(bool) = InitializeParameter[b1] : &:r401_11 -# 402| r402_1(glval) = VariableAddress[b] : -# 402| m402_2(int[]) = Uninitialized[b] : &:r402_1 -# 402| r402_3(glval) = VariableAddress[n1] : -# 402| r402_4(int) = Load[n1] : &:r402_3, m401_6 -# 402| v402_5(void) = NoOp : -# 403| r403_1(glval) = VariableAddress[c] : -# 403| m403_2(int[][]) = Uninitialized[c] : &:r403_1 -# 403| m403_3(unknown) = Chi : total:m401_4, partial:m403_2 -# 403| r403_4(glval) = VariableAddress[n1] : -# 403| r403_5(int) = Load[n1] : &:r403_4, m401_6 -# 403| r403_6(glval) = VariableAddress[n2] : -# 403| r403_7(int) = Load[n2] : &:r403_6, m401_8 -# 403| v403_8(void) = NoOp : -# 405| r405_1(int) = Constant[0] : -# 405| r405_2(glval) = VariableAddress[b] : -# 405| r405_3(int *) = Convert : r405_2 -# 405| r405_4(glval) = CopyValue : r405_3 -# 405| m405_5(int) = Store[?] : &:r405_4, r405_1 -# 405| m405_6(int[]) = Chi : total:m402_2, partial:m405_5 -# 406| r406_1(int) = Constant[1] : -# 406| r406_2(glval) = VariableAddress[b] : -# 406| r406_3(int *) = Convert : r406_2 -# 406| r406_4(int) = Constant[0] : -# 406| r406_5(glval) = PointerAdd[4] : r406_3, r406_4 -# 406| m406_6(int) = Store[?] : &:r406_5, r406_1 -# 406| m406_7(int[]) = Chi : total:m405_6, partial:m406_6 -# 408| r408_1(int) = Constant[0] : -# 408| r408_2(glval) = VariableAddress[c] : -# 408| r408_3(int(*)[]) = Convert : r408_2 -# 408| r408_4(int) = Constant[1] : -# 408| r408_5(int(*)[]) = PointerAdd : r408_3, r408_4 -# 408| r408_6(glval) = CopyValue : r408_5 -# 408| r408_7(int *) = Convert : r408_6 -# 408| r408_8(glval) = CopyValue : r408_7 -# 408| m408_9(int) = Store[?] : &:r408_8, r408_1 -# 408| m408_10(unknown) = Chi : total:m403_3, partial:m408_9 -# 410| r410_1(glval) = VariableAddress[b1] : -# 410| r410_2(bool) = Load[b1] : &:r410_1, m401_12 -# 410| v410_3(void) = ConditionalBranch : r410_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 411| Block 1 -# 411| r411_1(glval) = VariableAddress[b] : -# 411| m411_2(int[]) = Uninitialized[b] : &:r411_1 -# 411| r411_3(glval) = VariableAddress[n1] : -# 411| r411_4(int) = Load[n1] : &:r411_3, m401_6 -# 411| v411_5(void) = NoOp : -#-----| Goto -> Block 3 - -# 413| Block 2 -# 413| r413_1(glval) = VariableAddress[b] : -# 413| m413_2(int[]) = Uninitialized[b] : &:r413_1 -# 413| r413_3(glval) = VariableAddress[n2] : -# 413| r413_4(int) = Load[n2] : &:r413_3, m401_8 -# 413| v413_5(void) = NoOp : -#-----| Goto -> Block 3 - -# 415| Block 3 -# 415| v415_1(void) = NoOp : -# 401| v401_13(void) = ReturnVoid : -# 401| v401_14(void) = AliasedUse : ~m408_10 -# 401| v401_15(void) = ExitFunction : - -# 417| void nested_array_designators() -# 417| Block 0 -# 417| v417_1(void) = EnterFunction : -# 417| m417_2(unknown) = AliasedDefinition : -# 417| m417_3(unknown) = InitializeNonLocal : -# 417| m417_4(unknown) = Chi : total:m417_2, partial:m417_3 -# 418| r418_1(glval) = VariableAddress[x] : -# 418| m418_2(int[1][2]) = Uninitialized[x] : &:r418_1 -# 418| r418_3(int) = Constant[0] : -# 418| r418_4(glval) = PointerAdd[8] : r418_1, r418_3 -# 418| r418_5(int) = Constant[0] : -# 418| r418_6(glval) = PointerAdd[4] : r418_4, r418_5 -# 418| r418_7(int) = Constant[1234] : -# 418| m418_8(int) = Store[?] : &:r418_6, r418_7 -# 418| m418_9(int[1][2]) = Chi : total:m418_2, partial:m418_8 -# 418| r418_10(int) = Constant[1] : -# 418| r418_11(glval) = PointerAdd[4] : r418_4, r418_10 -# 418| r418_12(int) = Constant[0] : -# 418| m418_13(int) = Store[?] : &:r418_11, r418_12 -# 418| m418_14(int[1][2]) = Chi : total:m418_9, partial:m418_13 -# 418| r418_15(int) = Constant[0] : -# 418| r418_16(glval) = PointerAdd[8] : r418_1, r418_15 -# 418| r418_17(int) = Constant[0] : -# 418| r418_18(glval) = PointerAdd[4] : r418_16, r418_17 -# 418| r418_19(int) = Constant[0] : -# 418| m418_20(int) = Store[?] : &:r418_18, r418_19 -# 418| m418_21(int[1][2]) = Chi : total:m418_14, partial:m418_20 -# 418| r418_22(int) = Constant[1] : -# 418| r418_23(glval) = PointerAdd[4] : r418_16, r418_22 -# 418| r418_24(int) = Constant[5678] : -# 418| m418_25(int) = Store[?] : &:r418_23, r418_24 -# 418| m418_26(int[1][2]) = Chi : total:m418_21, partial:m418_25 -# 419| v419_1(void) = NoOp : -# 417| v417_5(void) = ReturnVoid : -# 417| v417_6(void) = AliasedUse : m417_3 -# 417| v417_7(void) = ExitFunction : - -# 423| int noreturnTest(int) -# 423| Block 0 -# 423| v423_1(void) = EnterFunction : -# 423| m423_2(unknown) = AliasedDefinition : -# 423| m423_3(unknown) = InitializeNonLocal : -# 423| m423_4(unknown) = Chi : total:m423_2, partial:m423_3 -# 423| r423_5(glval) = VariableAddress[x] : -# 423| m423_6(int) = InitializeParameter[x] : &:r423_5 -# 424| r424_1(glval) = VariableAddress[x] : -# 424| r424_2(int) = Load[x] : &:r424_1, m423_6 -# 424| r424_3(int) = Constant[10] : -# 424| r424_4(bool) = CompareLT : r424_2, r424_3 -# 424| v424_5(void) = ConditionalBranch : r424_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 425| Block 1 -# 425| r425_1(glval) = VariableAddress[#return] : -# 425| r425_2(glval) = VariableAddress[x] : -# 425| r425_3(int) = Load[x] : &:r425_2, m423_6 -# 425| m425_4(int) = Store[#return] : &:r425_1, r425_3 -# 423| r423_7(glval) = VariableAddress[#return] : -# 423| v423_8(void) = ReturnValue : &:r423_7, m425_4 -# 423| v423_9(void) = AliasedUse : m423_3 -# 423| v423_10(void) = ExitFunction : - -# 427| Block 2 -# 427| r427_1(glval) = FunctionAddress[noreturnFunc] : -# 427| v427_2(void) = Call[noreturnFunc] : func:r427_1 -# 427| m427_3(unknown) = ^CallSideEffect : ~m423_4 -# 427| m427_4(unknown) = Chi : total:m423_4, partial:m427_3 -# 423| v423_11(void) = Unreached : - -# 431| int noreturnTest2(int) -# 431| Block 0 -# 431| v431_1(void) = EnterFunction : -# 431| m431_2(unknown) = AliasedDefinition : -# 431| m431_3(unknown) = InitializeNonLocal : -# 431| m431_4(unknown) = Chi : total:m431_2, partial:m431_3 -# 431| r431_5(glval) = VariableAddress[x] : -# 431| m431_6(int) = InitializeParameter[x] : &:r431_5 -# 432| r432_1(glval) = VariableAddress[x] : -# 432| r432_2(int) = Load[x] : &:r432_1, m431_6 -# 432| r432_3(int) = Constant[10] : -# 432| r432_4(bool) = CompareLT : r432_2, r432_3 -# 432| v432_5(void) = ConditionalBranch : r432_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 433| Block 1 -# 433| r433_1(glval) = FunctionAddress[noreturnFunc] : -# 433| v433_2(void) = Call[noreturnFunc] : func:r433_1 -# 433| m433_3(unknown) = ^CallSideEffect : ~m431_4 -# 433| m433_4(unknown) = Chi : total:m431_4, partial:m433_3 -# 431| v431_7(void) = Unreached : - -# 435| Block 2 -# 435| r435_1(glval) = VariableAddress[#return] : -# 435| r435_2(glval) = VariableAddress[x] : -# 435| r435_3(int) = Load[x] : &:r435_2, m431_6 -# 435| m435_4(int) = Store[#return] : &:r435_1, r435_3 -# 431| r431_8(glval) = VariableAddress[#return] : -# 431| v431_9(void) = ReturnValue : &:r431_8, m435_4 -# 431| v431_10(void) = AliasedUse : m431_3 -# 431| v431_11(void) = ExitFunction : - -# 438| void Conditional(bool, int, int) -# 438| Block 0 -# 438| v438_1(void) = EnterFunction : -# 438| m438_2(unknown) = AliasedDefinition : -# 438| m438_3(unknown) = InitializeNonLocal : -# 438| m438_4(unknown) = Chi : total:m438_2, partial:m438_3 -# 438| r438_5(glval) = VariableAddress[a] : -# 438| m438_6(bool) = InitializeParameter[a] : &:r438_5 -# 438| r438_7(glval) = VariableAddress[x] : -# 438| m438_8(int) = InitializeParameter[x] : &:r438_7 -# 438| r438_9(glval) = VariableAddress[y] : -# 438| m438_10(int) = InitializeParameter[y] : &:r438_9 -# 439| r439_1(glval) = VariableAddress[z] : -# 439| r439_2(glval) = VariableAddress[a] : -# 439| r439_3(bool) = Load[a] : &:r439_2, m438_6 -# 439| v439_4(void) = ConditionalBranch : r439_3 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 439| Block 1 -# 439| m439_5(int) = Phi : from 2:m439_12, from 3:m439_16 -# 439| r439_6(glval) = VariableAddress[#temp439:13] : -# 439| r439_7(int) = Load[#temp439:13] : &:r439_6, m439_5 -# 439| m439_8(int) = Store[z] : &:r439_1, r439_7 -# 440| v440_1(void) = NoOp : -# 438| v438_11(void) = ReturnVoid : -# 438| v438_12(void) = AliasedUse : m438_3 -# 438| v438_13(void) = ExitFunction : - -# 439| Block 2 -# 439| r439_9(glval) = VariableAddress[x] : -# 439| r439_10(int) = Load[x] : &:r439_9, m438_8 -# 439| r439_11(glval) = VariableAddress[#temp439:13] : -# 439| m439_12(int) = Store[#temp439:13] : &:r439_11, r439_10 -#-----| Goto -> Block 1 - -# 439| Block 3 -# 439| r439_13(glval) = VariableAddress[y] : -# 439| r439_14(int) = Load[y] : &:r439_13, m438_10 -# 439| r439_15(glval) = VariableAddress[#temp439:13] : -# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14 -#-----| Goto -> Block 1 - -# 442| void NonEscapingParams(void*, void*) -# 442| Block 0 -# 442| v442_1(void) = EnterFunction : -# 442| m442_2(unknown) = AliasedDefinition : -# 442| m442_3(unknown) = InitializeNonLocal : -# 442| m442_4(unknown) = Chi : total:m442_2, partial:m442_3 -# 442| r442_5(glval) = VariableAddress[a] : -# 442| m442_6(void *) = InitializeParameter[a] : &:r442_5 -# 442| r442_7(void *) = Load[a] : &:r442_5, m442_6 -# 442| m442_8(unknown) = InitializeIndirection[a] : &:r442_7 -# 442| r442_9(glval) = VariableAddress[b] : -# 442| m442_10(void *) = InitializeParameter[b] : &:r442_9 -# 442| r442_11(void *) = Load[b] : &:r442_9, m442_10 -# 442| m442_12(unknown) = InitializeIndirection[b] : &:r442_11 -# 444| v444_1(void) = NoOp : -# 442| v442_13(void) = ReturnIndirection[a] : &:r442_7, m442_8 -# 442| v442_14(void) = ReturnIndirection[b] : &:r442_11, m442_12 -# 442| v442_15(void) = ReturnVoid : -# 442| v442_16(void) = AliasedUse : m442_3 -# 442| v442_17(void) = ExitFunction : - -# 446| void EscapingParams(void*, void*) -# 446| Block 0 -# 446| v446_1(void) = EnterFunction : -# 446| m446_2(unknown) = AliasedDefinition : -# 446| m446_3(unknown) = InitializeNonLocal : -# 446| m446_4(unknown) = Chi : total:m446_2, partial:m446_3 -# 446| r446_5(glval) = VariableAddress[a] : -# 446| m446_6(void *) = InitializeParameter[a] : &:r446_5 -# 446| r446_7(void *) = Load[a] : &:r446_5, m446_6 -# 446| m446_8(unknown) = InitializeIndirection[a] : &:r446_7 -# 446| m446_9(unknown) = Chi : total:m446_4, partial:m446_8 -# 446| r446_10(glval) = VariableAddress[b] : -# 446| m446_11(void *) = InitializeParameter[b] : &:r446_10 -# 446| r446_12(void *) = Load[b] : &:r446_10, m446_11 -# 446| m446_13(unknown) = InitializeIndirection[b] : &:r446_12 -# 446| m446_14(unknown) = Chi : total:m446_9, partial:m446_13 -# 448| r448_1(glval) = FunctionAddress[Escape] : -# 448| r448_2(glval) = VariableAddress[a] : -# 448| r448_3(void *) = Load[a] : &:r448_2, m446_6 -# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3 -# 448| m448_5(unknown) = ^CallSideEffect : ~m446_14 -# 448| m448_6(unknown) = Chi : total:m446_14, partial:m448_5 -# 448| v448_7(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m448_6 -# 448| m448_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3 -# 448| m448_9(unknown) = Chi : total:m448_6, partial:m448_8 -# 449| r449_1(glval) = FunctionAddress[Escape] : -# 449| r449_2(glval) = VariableAddress[b] : -# 449| r449_3(void *) = Load[b] : &:r449_2, m446_11 -# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3 -# 449| m449_5(unknown) = ^CallSideEffect : ~m448_9 -# 449| m449_6(unknown) = Chi : total:m448_9, partial:m449_5 -# 449| v449_7(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m449_6 -# 449| m449_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3 -# 449| m449_9(unknown) = Chi : total:m449_6, partial:m449_8 -# 450| v450_1(void) = NoOp : -# 446| v446_15(void) = ReturnIndirection[a] : &:r446_7, ~m449_9 -# 446| v446_16(void) = ReturnIndirection[b] : &:r446_12, ~m449_9 -# 446| v446_17(void) = ReturnVoid : -# 446| v446_18(void) = AliasedUse : ~m449_9 -# 446| v446_19(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.ql b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.ql deleted file mode 100644 index d8b68d0d72ef..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.ql +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @kind graph - */ - -import semmle.code.cpp.ir.implementation.aliased_ssa.PrintIR -import semmle.code.cpp.ir.implementation.UseSoundEscapeAnalysis diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected deleted file mode 100644 index 4a7e70ae106c..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected +++ /dev/null @@ -1,2264 +0,0 @@ -ssa.c: -# 2| void named_designators() -# 2| Block 0 -# 2| v2_1(void) = EnterFunction : -# 2| m2_2(unknown) = AliasedDefinition : -# 2| m2_3(unknown) = InitializeNonLocal : -# 2| m2_4(unknown) = Chi : total:m2_2, partial:m2_3 -# 3| r3_1(glval) = VariableAddress[foo] : -# 3| m3_2(Foo) = Uninitialized[foo] : &:r3_1 -# 3| r3_3(glval) = FieldAddress[x] : r3_1 -# 3| r3_4(int) = Constant[0] : -# 3| r3_5(glval) = PointerAdd[4] : r3_3, r3_4 -# 3| r3_6(int) = Constant[1234] : -# 3| m3_7(int) = Store[?] : &:r3_5, r3_6 -# 3| m3_8(Foo) = Chi : total:m3_2, partial:m3_7 -# 3| r3_9(int) = Constant[1] : -# 3| r3_10(glval) = PointerAdd[4] : r3_3, r3_9 -# 3| r3_11(int) = Constant[0] : -# 3| m3_12(int) = Store[?] : &:r3_10, r3_11 -# 3| m3_13(Foo) = Chi : total:m3_8, partial:m3_12 -# 3| r3_14(glval) = FieldAddress[x] : r3_1 -# 3| r3_15(int) = Constant[0] : -# 3| r3_16(glval) = PointerAdd[4] : r3_14, r3_15 -# 3| r3_17(int) = Constant[0] : -# 3| m3_18(int) = Store[?] : &:r3_16, r3_17 -# 3| m3_19(Foo) = Chi : total:m3_13, partial:m3_18 -# 3| r3_20(int) = Constant[1] : -# 3| r3_21(glval) = PointerAdd[4] : r3_14, r3_20 -# 3| r3_22(int) = Constant[5678] : -# 3| m3_23(int) = Store[?] : &:r3_21, r3_22 -# 3| m3_24(Foo) = Chi : total:m3_19, partial:m3_23 -# 4| v4_1(void) = NoOp : -# 2| v2_5(void) = ReturnVoid : -# 2| v2_6(void) = AliasedUse : m2_3 -# 2| v2_7(void) = ExitFunction : - -# 6| void repeated_designators() -# 6| Block 0 -# 6| v6_1(void) = EnterFunction : -# 6| m6_2(unknown) = AliasedDefinition : -# 6| m6_3(unknown) = InitializeNonLocal : -# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 -# 7| r7_1(glval) = VariableAddress[x] : -# 7| m7_2(int[1]) = Uninitialized[x] : &:r7_1 -# 7| r7_3(int) = Constant[0] : -# 7| r7_4(glval) = PointerAdd[4] : r7_1, r7_3 -# 7| r7_5(int) = Constant[1234] : -# 7| m7_6(int) = Store[?] : &:r7_4, r7_5 -# 7| r7_7(int) = Constant[0] : -# 7| r7_8(glval) = PointerAdd[4] : r7_1, r7_7 -# 7| r7_9(int) = Constant[5678] : -# 7| m7_10(int) = Store[?] : &:r7_8, r7_9 -# 8| v8_1(void) = NoOp : -# 6| v6_5(void) = ReturnVoid : -# 6| v6_6(void) = AliasedUse : m6_3 -# 6| v6_7(void) = ExitFunction : - -# 11| void named_designators_2() -# 11| Block 0 -# 11| v11_1(void) = EnterFunction : -# 11| m11_2(unknown) = AliasedDefinition : -# 11| m11_3(unknown) = InitializeNonLocal : -# 11| m11_4(unknown) = Chi : total:m11_2, partial:m11_3 -# 12| r12_1(glval) = VariableAddress[foo] : -# 12| m12_2(Foo2) = Uninitialized[foo] : &:r12_1 -# 12| r12_3(glval) = FieldAddress[x] : r12_1 -# 12| r12_4(int) = Constant[1234] : -# 12| m12_5(int) = Store[?] : &:r12_3, r12_4 -# 12| m12_6(Foo2) = Chi : total:m12_2, partial:m12_5 -# 12| r12_7(glval) = FieldAddress[y] : r12_1 -# 12| r12_8(int) = Constant[5678] : -# 12| m12_9(int) = Store[?] : &:r12_7, r12_8 -# 12| m12_10(Foo2) = Chi : total:m12_6, partial:m12_9 -# 14| r14_1(glval) = VariableAddress[foo_swapped] : -# 14| m14_2(Foo2) = Uninitialized[foo_swapped] : &:r14_1 -# 14| r14_3(glval) = FieldAddress[x] : r14_1 -# 14| r14_4(int) = Constant[1234] : -# 14| m14_5(int) = Store[?] : &:r14_3, r14_4 -# 14| m14_6(Foo2) = Chi : total:m14_2, partial:m14_5 -# 14| r14_7(glval) = FieldAddress[y] : r14_1 -# 14| r14_8(int) = Constant[5678] : -# 14| m14_9(int) = Store[?] : &:r14_7, r14_8 -# 14| m14_10(Foo2) = Chi : total:m14_6, partial:m14_9 -# 15| v15_1(void) = NoOp : -# 11| v11_5(void) = ReturnVoid : -# 11| v11_6(void) = AliasedUse : m11_3 -# 11| v11_7(void) = ExitFunction : - -# 17| void non_repeated_designators() -# 17| Block 0 -# 17| v17_1(void) = EnterFunction : -# 17| m17_2(unknown) = AliasedDefinition : -# 17| m17_3(unknown) = InitializeNonLocal : -# 17| m17_4(unknown) = Chi : total:m17_2, partial:m17_3 -# 18| r18_1(glval) = VariableAddress[x] : -# 18| m18_2(int[2]) = Uninitialized[x] : &:r18_1 -# 18| r18_3(int) = Constant[0] : -# 18| r18_4(glval) = PointerAdd[4] : r18_1, r18_3 -# 18| r18_5(int) = Constant[1234] : -# 18| m18_6(int) = Store[?] : &:r18_4, r18_5 -# 18| m18_7(int[2]) = Chi : total:m18_2, partial:m18_6 -# 18| r18_8(int) = Constant[1] : -# 18| r18_9(glval) = PointerAdd[4] : r18_1, r18_8 -# 18| r18_10(int) = Constant[5678] : -# 18| m18_11(int) = Store[?] : &:r18_9, r18_10 -# 18| m18_12(int[2]) = Chi : total:m18_7, partial:m18_11 -# 20| r20_1(glval) = VariableAddress[y] : -# 20| m20_2(int[2]) = Uninitialized[y] : &:r20_1 -# 20| r20_3(int) = Constant[0] : -# 20| r20_4(glval) = PointerAdd[4] : r20_1, r20_3 -# 20| r20_5(int) = Constant[5678] : -# 20| m20_6(int) = Store[?] : &:r20_4, r20_5 -# 20| m20_7(int[2]) = Chi : total:m20_2, partial:m20_6 -# 20| r20_8(int) = Constant[1] : -# 20| r20_9(glval) = PointerAdd[4] : r20_1, r20_8 -# 20| r20_10(int) = Constant[1234] : -# 20| m20_11(int) = Store[?] : &:r20_9, r20_10 -# 20| m20_12(int[2]) = Chi : total:m20_7, partial:m20_11 -# 21| v21_1(void) = NoOp : -# 17| v17_5(void) = ReturnVoid : -# 17| v17_6(void) = AliasedUse : m17_3 -# 17| v17_7(void) = ExitFunction : - -# 28| void test_foo_array_and_int() -# 28| Block 0 -# 28| v28_1(void) = EnterFunction : -# 28| m28_2(unknown) = AliasedDefinition : -# 28| m28_3(unknown) = InitializeNonLocal : -# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 -# 29| r29_1(glval) = VariableAddress[f] : -# 29| m29_2(Foo_array_and_int) = Uninitialized[f] : &:r29_1 -# 29| r29_3(glval) = FieldAddress[x] : r29_1 -# 29| r29_4(int) = Constant[0] : -# 29| r29_5(glval) = PointerAdd[4] : r29_3, r29_4 -# 29| r29_6(int) = Constant[0] : -# 29| m29_7(int) = Store[?] : &:r29_5, r29_6 -# 29| m29_8(Foo_array_and_int) = Chi : total:m29_2, partial:m29_7 -# 29| r29_9(int) = Constant[1] : -# 29| r29_10(glval) = PointerAdd[4] : r29_3, r29_9 -# 29| r29_11(int) = Constant[1] : -# 29| m29_12(int) = Store[?] : &:r29_10, r29_11 -# 29| m29_13(Foo_array_and_int) = Chi : total:m29_8, partial:m29_12 -# 29| r29_14(glval) = FieldAddress[x] : r29_1 -# 29| r29_15(int) = Constant[0] : -# 29| r29_16(glval) = PointerAdd[4] : r29_14, r29_15 -# 29| r29_17(int) = Constant[42] : -# 29| m29_18(int) = Store[?] : &:r29_16, r29_17 -# 29| m29_19(Foo_array_and_int) = Chi : total:m29_13, partial:m29_18 -# 29| r29_20(int) = Constant[1] : -# 29| r29_21(glval) = PointerAdd[4] : r29_14, r29_20 -# 29| r29_22(int) = Constant[0] : -# 29| m29_23(int) = Store[?] : &:r29_21, r29_22 -# 29| m29_24(Foo_array_and_int) = Chi : total:m29_19, partial:m29_23 -# 29| r29_25(glval) = FieldAddress[y] : r29_1 -# 29| r29_26(int) = Constant[42] : -# 29| m29_27(int) = Store[?] : &:r29_25, r29_26 -# 29| m29_28(Foo_array_and_int) = Chi : total:m29_24, partial:m29_27 -# 30| v30_1(void) = NoOp : -# 28| v28_5(void) = ReturnVoid : -# 28| v28_6(void) = AliasedUse : m28_3 -# 28| v28_7(void) = ExitFunction : - -ssa.cpp: -# 13| int ChiPhiNode(Point*, bool, bool) -# 13| Block 0 -# 13| v13_1(void) = EnterFunction : -# 13| m13_2(unknown) = AliasedDefinition : -# 13| m13_3(unknown) = InitializeNonLocal : -# 13| m13_4(unknown) = Chi : total:m13_2, partial:m13_3 -# 13| r13_5(glval) = VariableAddress[p] : -# 13| m13_6(Point *) = InitializeParameter[p] : &:r13_5 -# 13| r13_7(Point *) = Load[p] : &:r13_5, m13_6 -# 13| m13_8(unknown) = InitializeIndirection[p] : &:r13_7 -# 13| r13_9(glval) = VariableAddress[which1] : -# 13| m13_10(bool) = InitializeParameter[which1] : &:r13_9 -# 13| r13_11(glval) = VariableAddress[which2] : -# 13| m13_12(bool) = InitializeParameter[which2] : &:r13_11 -# 14| r14_1(glval) = VariableAddress[which1] : -# 14| r14_2(bool) = Load[which1] : &:r14_1, m13_10 -# 14| v14_3(void) = ConditionalBranch : r14_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 15| Block 1 -# 15| r15_1(glval) = VariableAddress[p] : -# 15| r15_2(Point *) = Load[p] : &:r15_1, m13_6 -# 15| r15_3(glval) = FieldAddress[x] : r15_2 -# 15| r15_4(int) = Load[?] : &:r15_3, ~m13_8 -# 15| r15_5(int) = Constant[1] : -# 15| r15_6(int) = Add : r15_4, r15_5 -# 15| m15_7(int) = Store[?] : &:r15_3, r15_6 -# 15| m15_8(unknown) = Chi : total:m13_8, partial:m15_7 -#-----| Goto -> Block 3 - -# 18| Block 2 -# 18| r18_1(glval) = VariableAddress[p] : -# 18| r18_2(Point *) = Load[p] : &:r18_1, m13_6 -# 18| r18_3(glval) = FieldAddress[y] : r18_2 -# 18| r18_4(int) = Load[?] : &:r18_3, ~m13_8 -# 18| r18_5(int) = Constant[1] : -# 18| r18_6(int) = Add : r18_4, r18_5 -# 18| m18_7(int) = Store[?] : &:r18_3, r18_6 -# 18| m18_8(unknown) = Chi : total:m13_8, partial:m18_7 -#-----| Goto -> Block 3 - -# 21| Block 3 -# 21| m21_1(int) = Phi : from 1:~m13_8, from 2:m18_7 -# 21| m21_2(int) = Phi : from 1:m15_7, from 2:~m13_8 -# 21| m21_3(unknown) = Phi : from 1:m15_8, from 2:m18_8 -# 21| r21_4(glval) = VariableAddress[which2] : -# 21| r21_5(bool) = Load[which2] : &:r21_4, m13_12 -# 21| v21_6(void) = ConditionalBranch : r21_5 -#-----| False -> Block 5 -#-----| True -> Block 4 - -# 22| Block 4 -# 22| r22_1(glval) = VariableAddress[p] : -# 22| r22_2(Point *) = Load[p] : &:r22_1, m13_6 -# 22| r22_3(glval) = FieldAddress[x] : r22_2 -# 22| r22_4(int) = Load[?] : &:r22_3, m21_2 -# 22| r22_5(int) = Constant[1] : -# 22| r22_6(int) = Add : r22_4, r22_5 -# 22| m22_7(int) = Store[?] : &:r22_3, r22_6 -# 22| m22_8(unknown) = Chi : total:m21_3, partial:m22_7 -#-----| Goto -> Block 6 - -# 25| Block 5 -# 25| r25_1(glval) = VariableAddress[p] : -# 25| r25_2(Point *) = Load[p] : &:r25_1, m13_6 -# 25| r25_3(glval) = FieldAddress[y] : r25_2 -# 25| r25_4(int) = Load[?] : &:r25_3, m21_1 -# 25| r25_5(int) = Constant[1] : -# 25| r25_6(int) = Add : r25_4, r25_5 -# 25| m25_7(int) = Store[?] : &:r25_3, r25_6 -# 25| m25_8(unknown) = Chi : total:m21_3, partial:m25_7 -#-----| Goto -> Block 6 - -# 28| Block 6 -# 28| m28_1(int) = Phi : from 4:m21_1, from 5:m25_7 -# 28| m28_2(int) = Phi : from 4:m22_7, from 5:m21_2 -# 28| m28_3(unknown) = Phi : from 4:m22_8, from 5:m25_8 -# 28| r28_4(glval) = VariableAddress[#return] : -# 28| r28_5(glval) = VariableAddress[p] : -# 28| r28_6(Point *) = Load[p] : &:r28_5, m13_6 -# 28| r28_7(glval) = FieldAddress[x] : r28_6 -# 28| r28_8(int) = Load[?] : &:r28_7, m28_2 -# 28| r28_9(glval) = VariableAddress[p] : -# 28| r28_10(Point *) = Load[p] : &:r28_9, m13_6 -# 28| r28_11(glval) = FieldAddress[y] : r28_10 -# 28| r28_12(int) = Load[?] : &:r28_11, m28_1 -# 28| r28_13(int) = Add : r28_8, r28_12 -# 28| m28_14(int) = Store[#return] : &:r28_4, r28_13 -# 13| v13_13(void) = ReturnIndirection[p] : &:r13_7, m28_3 -# 13| r13_14(glval) = VariableAddress[#return] : -# 13| v13_15(void) = ReturnValue : &:r13_14, m28_14 -# 13| v13_16(void) = AliasedUse : m13_3 -# 13| v13_17(void) = ExitFunction : - -# 31| int UnreachableViaGoto() -# 31| Block 0 -# 31| v31_1(void) = EnterFunction : -# 31| m31_2(unknown) = AliasedDefinition : -# 31| m31_3(unknown) = InitializeNonLocal : -# 31| m31_4(unknown) = Chi : total:m31_2, partial:m31_3 -# 32| v32_1(void) = NoOp : -# 34| v34_1(void) = NoOp : -# 35| r35_1(glval) = VariableAddress[#return] : -# 35| r35_2(int) = Constant[0] : -# 35| m35_3(int) = Store[#return] : &:r35_1, r35_2 -# 31| r31_5(glval) = VariableAddress[#return] : -# 31| v31_6(void) = ReturnValue : &:r31_5, m35_3 -# 31| v31_7(void) = AliasedUse : m31_3 -# 31| v31_8(void) = ExitFunction : - -# 38| int UnreachableIf(bool) -# 38| Block 0 -# 38| v38_1(void) = EnterFunction : -# 38| m38_2(unknown) = AliasedDefinition : -# 38| m38_3(unknown) = InitializeNonLocal : -# 38| m38_4(unknown) = Chi : total:m38_2, partial:m38_3 -# 38| r38_5(glval) = VariableAddress[b] : -# 38| m38_6(bool) = InitializeParameter[b] : &:r38_5 -# 39| r39_1(glval) = VariableAddress[x] : -# 39| r39_2(int) = Constant[5] : -# 39| m39_3(int) = Store[x] : &:r39_1, r39_2 -# 40| r40_1(glval) = VariableAddress[y] : -# 40| r40_2(int) = Constant[10] : -# 40| m40_3(int) = Store[y] : &:r40_1, r40_2 -# 41| r41_1(glval) = VariableAddress[b] : -# 41| r41_2(bool) = Load[b] : &:r41_1, m38_6 -# 41| v41_3(void) = ConditionalBranch : r41_2 -#-----| False -> Block 4 -#-----| True -> Block 2 - -# 38| Block 1 -# 38| m38_7(int) = Phi : from 3:m46_3, from 5:m51_3 -# 38| r38_8(glval) = VariableAddress[#return] : -# 38| v38_9(void) = ReturnValue : &:r38_8, m38_7 -# 38| v38_10(void) = AliasedUse : m38_3 -# 38| v38_11(void) = ExitFunction : - -# 42| Block 2 -# 42| r42_1(glval) = VariableAddress[x] : -# 42| r42_2(int) = Load[x] : &:r42_1, m39_3 -# 42| r42_3(glval) = VariableAddress[y] : -# 42| r42_4(int) = Load[y] : &:r42_3, m40_3 -# 42| r42_5(bool) = CompareEQ : r42_2, r42_4 -# 42| v42_6(void) = ConditionalBranch : r42_5 -#-----| False -> Block 3 -#-----| True -> Block 6 - -# 46| Block 3 -# 46| r46_1(glval) = VariableAddress[#return] : -# 46| r46_2(int) = Constant[0] : -# 46| m46_3(int) = Store[#return] : &:r46_1, r46_2 -#-----| Goto -> Block 1 - -# 50| Block 4 -# 50| r50_1(glval) = VariableAddress[x] : -# 50| r50_2(int) = Load[x] : &:r50_1, m39_3 -# 50| r50_3(glval) = VariableAddress[y] : -# 50| r50_4(int) = Load[y] : &:r50_3, m40_3 -# 50| r50_5(bool) = CompareLT : r50_2, r50_4 -# 50| v50_6(void) = ConditionalBranch : r50_5 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 51| Block 5 -# 51| r51_1(glval) = VariableAddress[#return] : -# 51| r51_2(int) = Constant[0] : -# 51| m51_3(int) = Store[#return] : &:r51_1, r51_2 -#-----| Goto -> Block 1 - -# 38| Block 6 -# 38| v38_12(void) = Unreached : - -# 59| int DoWhileFalse() -# 59| Block 0 -# 59| v59_1(void) = EnterFunction : -# 59| m59_2(unknown) = AliasedDefinition : -# 59| m59_3(unknown) = InitializeNonLocal : -# 59| m59_4(unknown) = Chi : total:m59_2, partial:m59_3 -# 60| r60_1(glval) = VariableAddress[i] : -# 60| r60_2(int) = Constant[0] : -# 60| m60_3(int) = Store[i] : &:r60_1, r60_2 -# 62| r62_1(glval) = VariableAddress[i] : -# 62| r62_2(int) = Load[i] : &:r62_1, m60_3 -# 62| r62_3(int) = Constant[1] : -# 62| r62_4(int) = Add : r62_2, r62_3 -# 62| m62_5(int) = Store[i] : &:r62_1, r62_4 -# 63| r63_1(bool) = Constant[0] : -# 63| v63_2(void) = ConditionalBranch : r63_1 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 65| Block 1 -# 65| r65_1(glval) = VariableAddress[#return] : -# 65| r65_2(glval) = VariableAddress[i] : -# 65| r65_3(int) = Load[i] : &:r65_2, m62_5 -# 65| m65_4(int) = Store[#return] : &:r65_1, r65_3 -# 59| r59_5(glval) = VariableAddress[#return] : -# 59| v59_6(void) = ReturnValue : &:r59_5, m65_4 -# 59| v59_7(void) = AliasedUse : m59_3 -# 59| v59_8(void) = ExitFunction : - -# 59| Block 2 -# 59| v59_9(void) = Unreached : - -# 68| void chiNodeAtEndOfLoop(int, char*) -# 68| Block 0 -# 68| v68_1(void) = EnterFunction : -# 68| m68_2(unknown) = AliasedDefinition : -# 68| m68_3(unknown) = InitializeNonLocal : -# 68| m68_4(unknown) = Chi : total:m68_2, partial:m68_3 -# 68| r68_5(glval) = VariableAddress[n] : -# 68| m68_6(int) = InitializeParameter[n] : &:r68_5 -# 68| r68_7(glval) = VariableAddress[p] : -# 68| m68_8(char *) = InitializeParameter[p] : &:r68_7 -# 68| r68_9(char *) = Load[p] : &:r68_7, m68_8 -# 68| m68_10(unknown) = InitializeIndirection[p] : &:r68_9 -#-----| Goto -> Block 1 - -# 69| Block 1 -# 69| m69_1(unknown) = Phi : from 0:m68_10, from 2:m70_10 -# 69| m69_2(char *) = Phi : from 0:m68_8, from 2:m70_6 -# 69| m69_3(int) = Phi : from 0:m68_6, from 2:m69_8 -# 69| r69_4(glval) = VariableAddress[n] : -# 69| r69_5(int) = Load[n] : &:r69_4, m69_3 -# 69| r69_6(int) = Constant[1] : -# 69| r69_7(int) = Sub : r69_5, r69_6 -# 69| m69_8(int) = Store[n] : &:r69_4, r69_7 -# 69| r69_9(int) = CopyValue : r69_5 -# 69| r69_10(int) = Constant[0] : -# 69| r69_11(bool) = CompareGT : r69_9, r69_10 -# 69| v69_12(void) = ConditionalBranch : r69_11 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 70| Block 2 -# 70| r70_1(char) = Constant[0] : -# 70| r70_2(glval) = VariableAddress[p] : -# 70| r70_3(char *) = Load[p] : &:r70_2, m69_2 -# 70| r70_4(int) = Constant[1] : -# 70| r70_5(char *) = PointerAdd[1] : r70_3, r70_4 -# 70| m70_6(char *) = Store[p] : &:r70_2, r70_5 -# 70| r70_7(char *) = CopyValue : r70_3 -# 70| r70_8(glval) = CopyValue : r70_7 -# 70| m70_9(char) = Store[?] : &:r70_8, r70_1 -# 70| m70_10(unknown) = Chi : total:m69_1, partial:m70_9 -#-----| Goto (back edge) -> Block 1 - -# 71| Block 3 -# 71| v71_1(void) = NoOp : -# 68| v68_11(void) = ReturnIndirection[p] : &:r68_9, m69_1 -# 68| v68_12(void) = ReturnVoid : -# 68| v68_13(void) = AliasedUse : m68_3 -# 68| v68_14(void) = ExitFunction : - -# 75| void ScalarPhi(bool) -# 75| Block 0 -# 75| v75_1(void) = EnterFunction : -# 75| m75_2(unknown) = AliasedDefinition : -# 75| m75_3(unknown) = InitializeNonLocal : -# 75| m75_4(unknown) = Chi : total:m75_2, partial:m75_3 -# 75| r75_5(glval) = VariableAddress[b] : -# 75| m75_6(bool) = InitializeParameter[b] : &:r75_5 -# 76| r76_1(glval) = VariableAddress[x] : -# 76| r76_2(int) = Constant[0] : -# 76| m76_3(int) = Store[x] : &:r76_1, r76_2 -# 77| r77_1(glval) = VariableAddress[y] : -# 77| r77_2(int) = Constant[1] : -# 77| m77_3(int) = Store[y] : &:r77_1, r77_2 -# 78| r78_1(glval) = VariableAddress[z] : -# 78| r78_2(int) = Constant[2] : -# 78| m78_3(int) = Store[z] : &:r78_1, r78_2 -# 79| r79_1(glval) = VariableAddress[b] : -# 79| r79_2(bool) = Load[b] : &:r79_1, m75_6 -# 79| v79_3(void) = ConditionalBranch : r79_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 80| Block 1 -# 80| r80_1(int) = Constant[3] : -# 80| r80_2(glval) = VariableAddress[x] : -# 80| m80_3(int) = Store[x] : &:r80_2, r80_1 -# 81| r81_1(int) = Constant[4] : -# 81| r81_2(glval) = VariableAddress[y] : -# 81| m81_3(int) = Store[y] : &:r81_2, r81_1 -#-----| Goto -> Block 3 - -# 84| Block 2 -# 84| r84_1(int) = Constant[5] : -# 84| r84_2(glval) = VariableAddress[x] : -# 84| m84_3(int) = Store[x] : &:r84_2, r84_1 -#-----| Goto -> Block 3 - -# 86| Block 3 -# 86| m86_1(int) = Phi : from 1:m81_3, from 2:m77_3 -# 86| m86_2(int) = Phi : from 1:m80_3, from 2:m84_3 -# 86| r86_3(glval) = VariableAddress[x_merge] : -# 86| r86_4(glval) = VariableAddress[x] : -# 86| r86_5(int) = Load[x] : &:r86_4, m86_2 -# 86| m86_6(int) = Store[x_merge] : &:r86_3, r86_5 -# 87| r87_1(glval) = VariableAddress[y_merge] : -# 87| r87_2(glval) = VariableAddress[y] : -# 87| r87_3(int) = Load[y] : &:r87_2, m86_1 -# 87| m87_4(int) = Store[y_merge] : &:r87_1, r87_3 -# 88| r88_1(glval) = VariableAddress[z_merge] : -# 88| r88_2(glval) = VariableAddress[z] : -# 88| r88_3(int) = Load[z] : &:r88_2, m78_3 -# 88| m88_4(int) = Store[z_merge] : &:r88_1, r88_3 -# 89| v89_1(void) = NoOp : -# 75| v75_7(void) = ReturnVoid : -# 75| v75_8(void) = AliasedUse : m75_3 -# 75| v75_9(void) = ExitFunction : - -# 91| void MustExactlyOverlap(Point) -# 91| Block 0 -# 91| v91_1(void) = EnterFunction : -# 91| m91_2(unknown) = AliasedDefinition : -# 91| m91_3(unknown) = InitializeNonLocal : -# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3 -# 91| r91_5(glval) = VariableAddress[a] : -# 91| m91_6(Point) = InitializeParameter[a] : &:r91_5 -# 92| r92_1(glval) = VariableAddress[b] : -# 92| r92_2(glval) = VariableAddress[a] : -# 92| r92_3(Point) = Load[a] : &:r92_2, m91_6 -# 92| m92_4(Point) = Store[b] : &:r92_1, r92_3 -# 93| v93_1(void) = NoOp : -# 91| v91_7(void) = ReturnVoid : -# 91| v91_8(void) = AliasedUse : m91_3 -# 91| v91_9(void) = ExitFunction : - -# 95| void MustExactlyOverlapEscaped(Point) -# 95| Block 0 -# 95| v95_1(void) = EnterFunction : -# 95| m95_2(unknown) = AliasedDefinition : -# 95| m95_3(unknown) = InitializeNonLocal : -# 95| m95_4(unknown) = Chi : total:m95_2, partial:m95_3 -# 95| r95_5(glval) = VariableAddress[a] : -# 95| m95_6(Point) = InitializeParameter[a] : &:r95_5 -# 95| m95_7(unknown) = Chi : total:m95_4, partial:m95_6 -# 96| r96_1(glval) = VariableAddress[b] : -# 96| r96_2(glval) = VariableAddress[a] : -# 96| r96_3(Point) = Load[a] : &:r96_2, m95_6 -# 96| m96_4(Point) = Store[b] : &:r96_1, r96_3 -# 97| r97_1(glval) = FunctionAddress[Escape] : -# 97| r97_2(glval) = VariableAddress[a] : -# 97| r97_3(Point *) = CopyValue : r97_2 -# 97| r97_4(void *) = Convert : r97_3 -# 97| v97_5(void) = Call[Escape] : func:r97_1, 0:r97_4 -# 97| m97_6(unknown) = ^CallSideEffect : ~m95_7 -# 97| m97_7(unknown) = Chi : total:m95_7, partial:m97_6 -# 97| v97_8(void) = ^BufferReadSideEffect[0] : &:r97_4, ~m97_7 -# 97| m97_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r97_4 -# 97| m97_10(unknown) = Chi : total:m97_7, partial:m97_9 -# 98| v98_1(void) = NoOp : -# 95| v95_8(void) = ReturnVoid : -# 95| v95_9(void) = AliasedUse : ~m97_7 -# 95| v95_10(void) = ExitFunction : - -# 100| void MustTotallyOverlap(Point) -# 100| Block 0 -# 100| v100_1(void) = EnterFunction : -# 100| m100_2(unknown) = AliasedDefinition : -# 100| m100_3(unknown) = InitializeNonLocal : -# 100| m100_4(unknown) = Chi : total:m100_2, partial:m100_3 -# 100| r100_5(glval) = VariableAddress[a] : -# 100| m100_6(Point) = InitializeParameter[a] : &:r100_5 -# 101| r101_1(glval) = VariableAddress[x] : -# 101| r101_2(glval) = VariableAddress[a] : -# 101| r101_3(glval) = FieldAddress[x] : r101_2 -# 101| r101_4(int) = Load[?] : &:r101_3, ~m100_6 -# 101| m101_5(int) = Store[x] : &:r101_1, r101_4 -# 102| r102_1(glval) = VariableAddress[y] : -# 102| r102_2(glval) = VariableAddress[a] : -# 102| r102_3(glval) = FieldAddress[y] : r102_2 -# 102| r102_4(int) = Load[?] : &:r102_3, ~m100_6 -# 102| m102_5(int) = Store[y] : &:r102_1, r102_4 -# 103| v103_1(void) = NoOp : -# 100| v100_7(void) = ReturnVoid : -# 100| v100_8(void) = AliasedUse : m100_3 -# 100| v100_9(void) = ExitFunction : - -# 105| void MustTotallyOverlapEscaped(Point) -# 105| Block 0 -# 105| v105_1(void) = EnterFunction : -# 105| m105_2(unknown) = AliasedDefinition : -# 105| m105_3(unknown) = InitializeNonLocal : -# 105| m105_4(unknown) = Chi : total:m105_2, partial:m105_3 -# 105| r105_5(glval) = VariableAddress[a] : -# 105| m105_6(Point) = InitializeParameter[a] : &:r105_5 -# 105| m105_7(unknown) = Chi : total:m105_4, partial:m105_6 -# 106| r106_1(glval) = VariableAddress[x] : -# 106| r106_2(glval) = VariableAddress[a] : -# 106| r106_3(glval) = FieldAddress[x] : r106_2 -# 106| r106_4(int) = Load[?] : &:r106_3, ~m105_6 -# 106| m106_5(int) = Store[x] : &:r106_1, r106_4 -# 107| r107_1(glval) = VariableAddress[y] : -# 107| r107_2(glval) = VariableAddress[a] : -# 107| r107_3(glval) = FieldAddress[y] : r107_2 -# 107| r107_4(int) = Load[?] : &:r107_3, ~m105_6 -# 107| m107_5(int) = Store[y] : &:r107_1, r107_4 -# 108| r108_1(glval) = FunctionAddress[Escape] : -# 108| r108_2(glval) = VariableAddress[a] : -# 108| r108_3(Point *) = CopyValue : r108_2 -# 108| r108_4(void *) = Convert : r108_3 -# 108| v108_5(void) = Call[Escape] : func:r108_1, 0:r108_4 -# 108| m108_6(unknown) = ^CallSideEffect : ~m105_7 -# 108| m108_7(unknown) = Chi : total:m105_7, partial:m108_6 -# 108| v108_8(void) = ^BufferReadSideEffect[0] : &:r108_4, ~m108_7 -# 108| m108_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r108_4 -# 108| m108_10(unknown) = Chi : total:m108_7, partial:m108_9 -# 109| v109_1(void) = NoOp : -# 105| v105_8(void) = ReturnVoid : -# 105| v105_9(void) = AliasedUse : ~m108_7 -# 105| v105_10(void) = ExitFunction : - -# 111| void MayPartiallyOverlap(int, int) -# 111| Block 0 -# 111| v111_1(void) = EnterFunction : -# 111| m111_2(unknown) = AliasedDefinition : -# 111| m111_3(unknown) = InitializeNonLocal : -# 111| m111_4(unknown) = Chi : total:m111_2, partial:m111_3 -# 111| r111_5(glval) = VariableAddress[x] : -# 111| m111_6(int) = InitializeParameter[x] : &:r111_5 -# 111| r111_7(glval) = VariableAddress[y] : -# 111| m111_8(int) = InitializeParameter[y] : &:r111_7 -# 112| r112_1(glval) = VariableAddress[a] : -# 112| m112_2(Point) = Uninitialized[a] : &:r112_1 -# 112| r112_3(glval) = FieldAddress[x] : r112_1 -# 112| r112_4(glval) = VariableAddress[x] : -# 112| r112_5(int) = Load[x] : &:r112_4, m111_6 -# 112| m112_6(int) = Store[?] : &:r112_3, r112_5 -# 112| m112_7(Point) = Chi : total:m112_2, partial:m112_6 -# 112| r112_8(glval) = FieldAddress[y] : r112_1 -# 112| r112_9(glval) = VariableAddress[y] : -# 112| r112_10(int) = Load[y] : &:r112_9, m111_8 -# 112| m112_11(int) = Store[?] : &:r112_8, r112_10 -# 112| m112_12(Point) = Chi : total:m112_7, partial:m112_11 -# 113| r113_1(glval) = VariableAddress[b] : -# 113| r113_2(glval) = VariableAddress[a] : -# 113| r113_3(Point) = Load[a] : &:r113_2, m112_12 -# 113| m113_4(Point) = Store[b] : &:r113_1, r113_3 -# 114| v114_1(void) = NoOp : -# 111| v111_9(void) = ReturnVoid : -# 111| v111_10(void) = AliasedUse : m111_3 -# 111| v111_11(void) = ExitFunction : - -# 116| void MayPartiallyOverlapEscaped(int, int) -# 116| Block 0 -# 116| v116_1(void) = EnterFunction : -# 116| m116_2(unknown) = AliasedDefinition : -# 116| m116_3(unknown) = InitializeNonLocal : -# 116| m116_4(unknown) = Chi : total:m116_2, partial:m116_3 -# 116| r116_5(glval) = VariableAddress[x] : -# 116| m116_6(int) = InitializeParameter[x] : &:r116_5 -# 116| r116_7(glval) = VariableAddress[y] : -# 116| m116_8(int) = InitializeParameter[y] : &:r116_7 -# 117| r117_1(glval) = VariableAddress[a] : -# 117| m117_2(Point) = Uninitialized[a] : &:r117_1 -# 117| m117_3(unknown) = Chi : total:m116_4, partial:m117_2 -# 117| r117_4(glval) = FieldAddress[x] : r117_1 -# 117| r117_5(glval) = VariableAddress[x] : -# 117| r117_6(int) = Load[x] : &:r117_5, m116_6 -# 117| m117_7(int) = Store[?] : &:r117_4, r117_6 -# 117| m117_8(unknown) = Chi : total:m117_3, partial:m117_7 -# 117| r117_9(glval) = FieldAddress[y] : r117_1 -# 117| r117_10(glval) = VariableAddress[y] : -# 117| r117_11(int) = Load[y] : &:r117_10, m116_8 -# 117| m117_12(int) = Store[?] : &:r117_9, r117_11 -# 117| m117_13(unknown) = Chi : total:m117_8, partial:m117_12 -# 118| r118_1(glval) = VariableAddress[b] : -# 118| r118_2(glval) = VariableAddress[a] : -# 118| r118_3(Point) = Load[a] : &:r118_2, ~m117_13 -# 118| m118_4(Point) = Store[b] : &:r118_1, r118_3 -# 119| r119_1(glval) = FunctionAddress[Escape] : -# 119| r119_2(glval) = VariableAddress[a] : -# 119| r119_3(Point *) = CopyValue : r119_2 -# 119| r119_4(void *) = Convert : r119_3 -# 119| v119_5(void) = Call[Escape] : func:r119_1, 0:r119_4 -# 119| m119_6(unknown) = ^CallSideEffect : ~m117_13 -# 119| m119_7(unknown) = Chi : total:m117_13, partial:m119_6 -# 119| v119_8(void) = ^BufferReadSideEffect[0] : &:r119_4, ~m119_7 -# 119| m119_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r119_4 -# 119| m119_10(unknown) = Chi : total:m119_7, partial:m119_9 -# 120| v120_1(void) = NoOp : -# 116| v116_9(void) = ReturnVoid : -# 116| v116_10(void) = AliasedUse : ~m119_7 -# 116| v116_11(void) = ExitFunction : - -# 122| void MergeMustExactlyOverlap(bool, int, int) -# 122| Block 0 -# 122| v122_1(void) = EnterFunction : -# 122| m122_2(unknown) = AliasedDefinition : -# 122| m122_3(unknown) = InitializeNonLocal : -# 122| m122_4(unknown) = Chi : total:m122_2, partial:m122_3 -# 122| r122_5(glval) = VariableAddress[c] : -# 122| m122_6(bool) = InitializeParameter[c] : &:r122_5 -# 122| r122_7(glval) = VariableAddress[x1] : -# 122| m122_8(int) = InitializeParameter[x1] : &:r122_7 -# 122| r122_9(glval) = VariableAddress[x2] : -# 122| m122_10(int) = InitializeParameter[x2] : &:r122_9 -# 123| r123_1(glval) = VariableAddress[a] : -# 123| m123_2(Point) = Uninitialized[a] : &:r123_1 -# 123| r123_3(glval) = FieldAddress[x] : r123_1 -# 123| r123_4(int) = Constant[0] : -# 123| m123_5(int) = Store[?] : &:r123_3, r123_4 -# 123| m123_6(Point) = Chi : total:m123_2, partial:m123_5 -# 123| r123_7(glval) = FieldAddress[y] : r123_1 -# 123| r123_8(int) = Constant[0] : -# 123| m123_9(int) = Store[?] : &:r123_7, r123_8 -# 123| m123_10(Point) = Chi : total:m123_6, partial:m123_9 -# 124| r124_1(glval) = VariableAddress[c] : -# 124| r124_2(bool) = Load[c] : &:r124_1, m122_6 -# 124| v124_3(void) = ConditionalBranch : r124_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 125| Block 1 -# 125| r125_1(glval) = VariableAddress[x1] : -# 125| r125_2(int) = Load[x1] : &:r125_1, m122_8 -# 125| r125_3(glval) = VariableAddress[a] : -# 125| r125_4(glval) = FieldAddress[x] : r125_3 -# 125| m125_5(int) = Store[?] : &:r125_4, r125_2 -# 125| m125_6(Point) = Chi : total:m123_10, partial:m125_5 -#-----| Goto -> Block 3 - -# 128| Block 2 -# 128| r128_1(glval) = VariableAddress[x2] : -# 128| r128_2(int) = Load[x2] : &:r128_1, m122_10 -# 128| r128_3(glval) = VariableAddress[a] : -# 128| r128_4(glval) = FieldAddress[x] : r128_3 -# 128| m128_5(int) = Store[?] : &:r128_4, r128_2 -# 128| m128_6(Point) = Chi : total:m123_10, partial:m128_5 -#-----| Goto -> Block 3 - -# 130| Block 3 -# 130| m130_1(int) = Phi : from 1:m125_5, from 2:m128_5 -# 130| m130_2(Point) = Phi : from 1:m125_6, from 2:m128_6 -# 130| r130_3(glval) = VariableAddress[x] : -# 130| r130_4(glval) = VariableAddress[a] : -# 130| r130_5(glval) = FieldAddress[x] : r130_4 -# 130| r130_6(int) = Load[?] : &:r130_5, m130_1 -# 130| m130_7(int) = Store[x] : &:r130_3, r130_6 -# 131| r131_1(glval) = VariableAddress[b] : -# 131| r131_2(glval) = VariableAddress[a] : -# 131| r131_3(Point) = Load[a] : &:r131_2, m130_2 -# 131| m131_4(Point) = Store[b] : &:r131_1, r131_3 -# 132| v132_1(void) = NoOp : -# 122| v122_11(void) = ReturnVoid : -# 122| v122_12(void) = AliasedUse : m122_3 -# 122| v122_13(void) = ExitFunction : - -# 134| void MergeMustExactlyWithMustTotallyOverlap(bool, Point, int) -# 134| Block 0 -# 134| v134_1(void) = EnterFunction : -# 134| m134_2(unknown) = AliasedDefinition : -# 134| m134_3(unknown) = InitializeNonLocal : -# 134| m134_4(unknown) = Chi : total:m134_2, partial:m134_3 -# 134| r134_5(glval) = VariableAddress[c] : -# 134| m134_6(bool) = InitializeParameter[c] : &:r134_5 -# 134| r134_7(glval) = VariableAddress[p] : -# 134| m134_8(Point) = InitializeParameter[p] : &:r134_7 -# 134| r134_9(glval) = VariableAddress[x1] : -# 134| m134_10(int) = InitializeParameter[x1] : &:r134_9 -# 135| r135_1(glval) = VariableAddress[a] : -# 135| m135_2(Point) = Uninitialized[a] : &:r135_1 -# 135| r135_3(glval) = FieldAddress[x] : r135_1 -# 135| r135_4(int) = Constant[0] : -# 135| m135_5(int) = Store[?] : &:r135_3, r135_4 -# 135| m135_6(Point) = Chi : total:m135_2, partial:m135_5 -# 135| r135_7(glval) = FieldAddress[y] : r135_1 -# 135| r135_8(int) = Constant[0] : -# 135| m135_9(int) = Store[?] : &:r135_7, r135_8 -# 135| m135_10(Point) = Chi : total:m135_6, partial:m135_9 -# 136| r136_1(glval) = VariableAddress[c] : -# 136| r136_2(bool) = Load[c] : &:r136_1, m134_6 -# 136| v136_3(void) = ConditionalBranch : r136_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 137| Block 1 -# 137| r137_1(glval) = VariableAddress[x1] : -# 137| r137_2(int) = Load[x1] : &:r137_1, m134_10 -# 137| r137_3(glval) = VariableAddress[a] : -# 137| r137_4(glval) = FieldAddress[x] : r137_3 -# 137| m137_5(int) = Store[?] : &:r137_4, r137_2 -# 137| m137_6(Point) = Chi : total:m135_10, partial:m137_5 -#-----| Goto -> Block 3 - -# 140| Block 2 -# 140| r140_1(glval) = VariableAddress[p] : -# 140| r140_2(Point) = Load[p] : &:r140_1, m134_8 -# 140| r140_3(glval) = VariableAddress[a] : -# 140| m140_4(Point) = Store[a] : &:r140_3, r140_2 -#-----| Goto -> Block 3 - -# 142| Block 3 -# 142| m142_1(int) = Phi : from 1:m137_5, from 2:~m140_4 -# 142| m142_2(Point) = Phi : from 1:m137_6, from 2:m140_4 -# 142| r142_3(glval) = VariableAddress[x] : -# 142| r142_4(glval) = VariableAddress[a] : -# 142| r142_5(glval) = FieldAddress[x] : r142_4 -# 142| r142_6(int) = Load[?] : &:r142_5, m142_1 -# 142| m142_7(int) = Store[x] : &:r142_3, r142_6 -# 143| v143_1(void) = NoOp : -# 134| v134_11(void) = ReturnVoid : -# 134| v134_12(void) = AliasedUse : m134_3 -# 134| v134_13(void) = ExitFunction : - -# 145| void MergeMustExactlyWithMayPartiallyOverlap(bool, Point, int) -# 145| Block 0 -# 145| v145_1(void) = EnterFunction : -# 145| m145_2(unknown) = AliasedDefinition : -# 145| m145_3(unknown) = InitializeNonLocal : -# 145| m145_4(unknown) = Chi : total:m145_2, partial:m145_3 -# 145| r145_5(glval) = VariableAddress[c] : -# 145| m145_6(bool) = InitializeParameter[c] : &:r145_5 -# 145| r145_7(glval) = VariableAddress[p] : -# 145| m145_8(Point) = InitializeParameter[p] : &:r145_7 -# 145| r145_9(glval) = VariableAddress[x1] : -# 145| m145_10(int) = InitializeParameter[x1] : &:r145_9 -# 146| r146_1(glval) = VariableAddress[a] : -# 146| m146_2(Point) = Uninitialized[a] : &:r146_1 -# 146| r146_3(glval) = FieldAddress[x] : r146_1 -# 146| r146_4(int) = Constant[0] : -# 146| m146_5(int) = Store[?] : &:r146_3, r146_4 -# 146| m146_6(Point) = Chi : total:m146_2, partial:m146_5 -# 146| r146_7(glval) = FieldAddress[y] : r146_1 -# 146| r146_8(int) = Constant[0] : -# 146| m146_9(int) = Store[?] : &:r146_7, r146_8 -# 146| m146_10(Point) = Chi : total:m146_6, partial:m146_9 -# 147| r147_1(glval) = VariableAddress[c] : -# 147| r147_2(bool) = Load[c] : &:r147_1, m145_6 -# 147| v147_3(void) = ConditionalBranch : r147_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 148| Block 1 -# 148| r148_1(glval) = VariableAddress[x1] : -# 148| r148_2(int) = Load[x1] : &:r148_1, m145_10 -# 148| r148_3(glval) = VariableAddress[a] : -# 148| r148_4(glval) = FieldAddress[x] : r148_3 -# 148| m148_5(int) = Store[?] : &:r148_4, r148_2 -# 148| m148_6(Point) = Chi : total:m146_10, partial:m148_5 -#-----| Goto -> Block 3 - -# 151| Block 2 -# 151| r151_1(glval) = VariableAddress[p] : -# 151| r151_2(Point) = Load[p] : &:r151_1, m145_8 -# 151| r151_3(glval) = VariableAddress[a] : -# 151| m151_4(Point) = Store[a] : &:r151_3, r151_2 -#-----| Goto -> Block 3 - -# 153| Block 3 -# 153| m153_1(Point) = Phi : from 1:m148_6, from 2:m151_4 -# 153| r153_2(glval) = VariableAddress[b] : -# 153| r153_3(glval) = VariableAddress[a] : -# 153| r153_4(Point) = Load[a] : &:r153_3, m153_1 -# 153| m153_5(Point) = Store[b] : &:r153_2, r153_4 -# 154| v154_1(void) = NoOp : -# 145| v145_11(void) = ReturnVoid : -# 145| v145_12(void) = AliasedUse : m145_3 -# 145| v145_13(void) = ExitFunction : - -# 156| void MergeMustTotallyOverlapWithMayPartiallyOverlap(bool, Rect, int) -# 156| Block 0 -# 156| v156_1(void) = EnterFunction : -# 156| m156_2(unknown) = AliasedDefinition : -# 156| m156_3(unknown) = InitializeNonLocal : -# 156| m156_4(unknown) = Chi : total:m156_2, partial:m156_3 -# 156| r156_5(glval) = VariableAddress[c] : -# 156| m156_6(bool) = InitializeParameter[c] : &:r156_5 -# 156| r156_7(glval) = VariableAddress[r] : -# 156| m156_8(Rect) = InitializeParameter[r] : &:r156_7 -# 156| r156_9(glval) = VariableAddress[x1] : -# 156| m156_10(int) = InitializeParameter[x1] : &:r156_9 -# 157| r157_1(glval) = VariableAddress[a] : -# 157| m157_2(Rect) = Uninitialized[a] : &:r157_1 -# 157| r157_3(glval) = FieldAddress[topLeft] : r157_1 -# 157| r157_4(Point) = Constant[0] : -# 157| m157_5(Point) = Store[?] : &:r157_3, r157_4 -# 157| m157_6(Rect) = Chi : total:m157_2, partial:m157_5 -# 157| r157_7(glval) = FieldAddress[bottomRight] : r157_1 -# 157| r157_8(Point) = Constant[0] : -# 157| m157_9(Point) = Store[?] : &:r157_7, r157_8 -# 157| m157_10(Rect) = Chi : total:m157_6, partial:m157_9 -# 158| r158_1(glval) = VariableAddress[c] : -# 158| r158_2(bool) = Load[c] : &:r158_1, m156_6 -# 158| v158_3(void) = ConditionalBranch : r158_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 159| Block 1 -# 159| r159_1(glval) = VariableAddress[x1] : -# 159| r159_2(int) = Load[x1] : &:r159_1, m156_10 -# 159| r159_3(glval) = VariableAddress[a] : -# 159| r159_4(glval) = FieldAddress[topLeft] : r159_3 -# 159| r159_5(glval) = FieldAddress[x] : r159_4 -# 159| m159_6(int) = Store[?] : &:r159_5, r159_2 -# 159| m159_7(Rect) = Chi : total:m157_10, partial:m159_6 -#-----| Goto -> Block 3 - -# 162| Block 2 -# 162| r162_1(glval) = VariableAddress[r] : -# 162| r162_2(Rect) = Load[r] : &:r162_1, m156_8 -# 162| r162_3(glval) = VariableAddress[a] : -# 162| m162_4(Rect) = Store[a] : &:r162_3, r162_2 -#-----| Goto -> Block 3 - -# 164| Block 3 -# 164| m164_1(Rect) = Phi : from 1:m159_7, from 2:m162_4 -# 164| r164_2(glval) = VariableAddress[b] : -# 164| r164_3(glval) = VariableAddress[a] : -# 164| r164_4(glval) = FieldAddress[topLeft] : r164_3 -# 164| r164_5(Point) = Load[?] : &:r164_4, ~m164_1 -# 164| m164_6(Point) = Store[b] : &:r164_2, r164_5 -# 165| v165_1(void) = NoOp : -# 156| v156_11(void) = ReturnVoid : -# 156| v156_12(void) = AliasedUse : m156_3 -# 156| v156_13(void) = ExitFunction : - -# 171| void WrapperStruct(Wrapper) -# 171| Block 0 -# 171| v171_1(void) = EnterFunction : -# 171| m171_2(unknown) = AliasedDefinition : -# 171| m171_3(unknown) = InitializeNonLocal : -# 171| m171_4(unknown) = Chi : total:m171_2, partial:m171_3 -# 171| r171_5(glval) = VariableAddress[w] : -# 171| m171_6(Wrapper) = InitializeParameter[w] : &:r171_5 -# 172| r172_1(glval) = VariableAddress[x] : -# 172| r172_2(glval) = VariableAddress[w] : -# 172| r172_3(Wrapper) = Load[w] : &:r172_2, m171_6 -# 172| m172_4(Wrapper) = Store[x] : &:r172_1, r172_3 -# 173| r173_1(glval) = VariableAddress[a] : -# 173| r173_2(glval) = VariableAddress[w] : -# 173| r173_3(glval) = FieldAddress[f] : r173_2 -# 173| r173_4(int) = Load[?] : &:r173_3, ~m171_6 -# 173| m173_5(int) = Store[a] : &:r173_1, r173_4 -# 174| r174_1(int) = Constant[5] : -# 174| r174_2(glval) = VariableAddress[w] : -# 174| r174_3(glval) = FieldAddress[f] : r174_2 -# 174| m174_4(int) = Store[?] : &:r174_3, r174_1 -# 175| r175_1(glval) = VariableAddress[w] : -# 175| r175_2(glval) = FieldAddress[f] : r175_1 -# 175| r175_3(int) = Load[?] : &:r175_2, m174_4 -# 175| r175_4(glval) = VariableAddress[a] : -# 175| m175_5(int) = Store[a] : &:r175_4, r175_3 -# 176| r176_1(glval) = VariableAddress[w] : -# 176| r176_2(Wrapper) = Load[w] : &:r176_1, ~m174_4 -# 176| r176_3(glval) = VariableAddress[x] : -# 176| m176_4(Wrapper) = Store[x] : &:r176_3, r176_2 -# 177| v177_1(void) = NoOp : -# 171| v171_7(void) = ReturnVoid : -# 171| v171_8(void) = AliasedUse : m171_3 -# 171| v171_9(void) = ExitFunction : - -# 179| int AsmStmt(int*) -# 179| Block 0 -# 179| v179_1(void) = EnterFunction : -# 179| m179_2(unknown) = AliasedDefinition : -# 179| m179_3(unknown) = InitializeNonLocal : -# 179| m179_4(unknown) = Chi : total:m179_2, partial:m179_3 -# 179| r179_5(glval) = VariableAddress[p] : -# 179| m179_6(int *) = InitializeParameter[p] : &:r179_5 -# 179| r179_7(int *) = Load[p] : &:r179_5, m179_6 -# 179| m179_8(unknown) = InitializeIndirection[p] : &:r179_7 -# 180| m180_1(unknown) = InlineAsm : ~m179_4 -# 180| m180_2(unknown) = Chi : total:m179_4, partial:m180_1 -# 181| r181_1(glval) = VariableAddress[#return] : -# 181| r181_2(glval) = VariableAddress[p] : -# 181| r181_3(int *) = Load[p] : &:r181_2, m179_6 -# 181| r181_4(int) = Load[?] : &:r181_3, ~m179_8 -# 181| m181_5(int) = Store[#return] : &:r181_1, r181_4 -# 179| v179_9(void) = ReturnIndirection[p] : &:r179_7, m179_8 -# 179| r179_10(glval) = VariableAddress[#return] : -# 179| v179_11(void) = ReturnValue : &:r179_10, m181_5 -# 179| v179_12(void) = AliasedUse : ~m180_2 -# 179| v179_13(void) = ExitFunction : - -# 184| void AsmStmtWithOutputs(unsigned int&, unsigned int&, unsigned int&, unsigned int&) -# 184| Block 0 -# 184| v184_1(void) = EnterFunction : -# 184| m184_2(unknown) = AliasedDefinition : -# 184| m184_3(unknown) = InitializeNonLocal : -# 184| m184_4(unknown) = Chi : total:m184_2, partial:m184_3 -# 184| r184_5(glval) = VariableAddress[a] : -# 184| m184_6(unsigned int &) = InitializeParameter[a] : &:r184_5 -# 184| r184_7(unsigned int &) = Load[a] : &:r184_5, m184_6 -# 184| m184_8(unknown) = InitializeIndirection[a] : &:r184_7 -# 184| m184_9(unknown) = Chi : total:m184_4, partial:m184_8 -# 184| r184_10(glval) = VariableAddress[b] : -# 184| m184_11(unsigned int &) = InitializeParameter[b] : &:r184_10 -# 184| r184_12(unsigned int &) = Load[b] : &:r184_10, m184_11 -# 184| m184_13(unknown) = InitializeIndirection[b] : &:r184_12 -# 184| m184_14(unknown) = Chi : total:m184_9, partial:m184_13 -# 184| r184_15(glval) = VariableAddress[c] : -# 184| m184_16(unsigned int &) = InitializeParameter[c] : &:r184_15 -# 184| r184_17(unsigned int &) = Load[c] : &:r184_15, m184_16 -# 184| m184_18(unknown) = InitializeIndirection[c] : &:r184_17 -# 184| r184_19(glval) = VariableAddress[d] : -# 184| m184_20(unsigned int &) = InitializeParameter[d] : &:r184_19 -# 184| r184_21(unsigned int &) = Load[d] : &:r184_19, m184_20 -# 184| m184_22(unknown) = InitializeIndirection[d] : &:r184_21 -# 189| r189_1(glval) = VariableAddress[a] : -# 189| r189_2(unsigned int &) = Load[a] : &:r189_1, m184_6 -# 189| r189_3(glval) = CopyValue : r189_2 -# 189| r189_4(glval) = VariableAddress[b] : -# 189| r189_5(unsigned int &) = Load[b] : &:r189_4, m184_11 -# 189| r189_6(glval) = CopyValue : r189_5 -# 190| r190_1(glval) = VariableAddress[c] : -# 190| r190_2(unsigned int &) = Load[c] : &:r190_1, m184_16 -# 190| r190_3(unsigned int) = Load[?] : &:r190_2, ~m184_18 -# 190| r190_4(glval) = VariableAddress[d] : -# 190| r190_5(unsigned int &) = Load[d] : &:r190_4, m184_20 -# 190| r190_6(unsigned int) = Load[?] : &:r190_5, ~m184_22 -# 186| m186_1(unknown) = InlineAsm : ~m184_14, 0:r189_3, 1:r189_6, 2:r190_3, 3:r190_6 -# 186| m186_2(unknown) = Chi : total:m184_14, partial:m186_1 -# 192| v192_1(void) = NoOp : -# 184| v184_23(void) = ReturnIndirection[a] : &:r184_7, ~m186_2 -# 184| v184_24(void) = ReturnIndirection[b] : &:r184_12, ~m186_2 -# 184| v184_25(void) = ReturnIndirection[c] : &:r184_17, m184_18 -# 184| v184_26(void) = ReturnIndirection[d] : &:r184_21, m184_22 -# 184| v184_27(void) = ReturnVoid : -# 184| v184_28(void) = AliasedUse : ~m186_2 -# 184| v184_29(void) = ExitFunction : - -# 198| int PureFunctions(char*, char*, int) -# 198| Block 0 -# 198| v198_1(void) = EnterFunction : -# 198| m198_2(unknown) = AliasedDefinition : -# 198| m198_3(unknown) = InitializeNonLocal : -# 198| m198_4(unknown) = Chi : total:m198_2, partial:m198_3 -# 198| r198_5(glval) = VariableAddress[str1] : -# 198| m198_6(char *) = InitializeParameter[str1] : &:r198_5 -# 198| r198_7(char *) = Load[str1] : &:r198_5, m198_6 -# 198| m198_8(unknown) = InitializeIndirection[str1] : &:r198_7 -# 198| r198_9(glval) = VariableAddress[str2] : -# 198| m198_10(char *) = InitializeParameter[str2] : &:r198_9 -# 198| r198_11(char *) = Load[str2] : &:r198_9, m198_10 -# 198| m198_12(unknown) = InitializeIndirection[str2] : &:r198_11 -# 198| r198_13(glval) = VariableAddress[x] : -# 198| m198_14(int) = InitializeParameter[x] : &:r198_13 -# 199| r199_1(glval) = VariableAddress[ret] : -# 199| r199_2(glval) = FunctionAddress[strcmp] : -# 199| r199_3(glval) = VariableAddress[str1] : -# 199| r199_4(char *) = Load[str1] : &:r199_3, m198_6 -# 199| r199_5(char *) = Convert : r199_4 -# 199| r199_6(glval) = VariableAddress[str2] : -# 199| r199_7(char *) = Load[str2] : &:r199_6, m198_10 -# 199| r199_8(char *) = Convert : r199_7 -# 199| r199_9(int) = Call[strcmp] : func:r199_2, 0:r199_5, 1:r199_8 -# 199| v199_10(void) = ^BufferReadSideEffect[0] : &:r199_5, ~m198_8 -# 199| v199_11(void) = ^BufferReadSideEffect[1] : &:r199_8, ~m198_12 -# 199| m199_12(int) = Store[ret] : &:r199_1, r199_9 -# 200| r200_1(glval) = FunctionAddress[strlen] : -# 200| r200_2(glval) = VariableAddress[str1] : -# 200| r200_3(char *) = Load[str1] : &:r200_2, m198_6 -# 200| r200_4(char *) = Convert : r200_3 -# 200| r200_5(int) = Call[strlen] : func:r200_1, 0:r200_4 -# 200| v200_6(void) = ^BufferReadSideEffect[0] : &:r200_4, ~m198_8 -# 200| r200_7(glval) = VariableAddress[ret] : -# 200| r200_8(int) = Load[ret] : &:r200_7, m199_12 -# 200| r200_9(int) = Add : r200_8, r200_5 -# 200| m200_10(int) = Store[ret] : &:r200_7, r200_9 -# 201| r201_1(glval) = FunctionAddress[abs] : -# 201| r201_2(glval) = VariableAddress[x] : -# 201| r201_3(int) = Load[x] : &:r201_2, m198_14 -# 201| r201_4(int) = Call[abs] : func:r201_1, 0:r201_3 -# 201| r201_5(glval) = VariableAddress[ret] : -# 201| r201_6(int) = Load[ret] : &:r201_5, m200_10 -# 201| r201_7(int) = Add : r201_6, r201_4 -# 201| m201_8(int) = Store[ret] : &:r201_5, r201_7 -# 202| r202_1(glval) = VariableAddress[#return] : -# 202| r202_2(glval) = VariableAddress[ret] : -# 202| r202_3(int) = Load[ret] : &:r202_2, m201_8 -# 202| m202_4(int) = Store[#return] : &:r202_1, r202_3 -# 198| v198_15(void) = ReturnIndirection[str1] : &:r198_7, m198_8 -# 198| v198_16(void) = ReturnIndirection[str2] : &:r198_11, m198_12 -# 198| r198_17(glval) = VariableAddress[#return] : -# 198| v198_18(void) = ReturnValue : &:r198_17, m202_4 -# 198| v198_19(void) = AliasedUse : m198_3 -# 198| v198_20(void) = ExitFunction : - -# 207| int ModeledCallTarget(int) -# 207| Block 0 -# 207| v207_1(void) = EnterFunction : -# 207| m207_2(unknown) = AliasedDefinition : -# 207| m207_3(unknown) = InitializeNonLocal : -# 207| m207_4(unknown) = Chi : total:m207_2, partial:m207_3 -# 207| r207_5(glval) = VariableAddress[x] : -# 207| m207_6(int) = InitializeParameter[x] : &:r207_5 -# 208| r208_1(glval) = VariableAddress[y] : -# 208| m208_2(int) = Uninitialized[y] : &:r208_1 -# 209| r209_1(glval) = FunctionAddress[memcpy] : -# 209| r209_2(glval) = VariableAddress[y] : -# 209| r209_3(int *) = CopyValue : r209_2 -# 209| r209_4(void *) = Convert : r209_3 -# 209| r209_5(glval) = VariableAddress[x] : -# 209| r209_6(int *) = CopyValue : r209_5 -# 209| r209_7(void *) = Convert : r209_6 -# 209| r209_8(int) = Constant[4] : -# 209| r209_9(void *) = Call[memcpy] : func:r209_1, 0:r209_4, 1:r209_7, 2:r209_8 -# 209| v209_10(void) = ^SizedBufferReadSideEffect[1] : &:r209_7, r209_8, ~m207_6 -# 209| m209_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r209_4, r209_8 -# 209| m209_12(int) = Chi : total:m208_2, partial:m209_11 -# 210| r210_1(glval) = VariableAddress[#return] : -# 210| r210_2(glval) = VariableAddress[y] : -# 210| r210_3(int) = Load[y] : &:r210_2, m209_12 -# 210| m210_4(int) = Store[#return] : &:r210_1, r210_3 -# 207| r207_7(glval) = VariableAddress[#return] : -# 207| v207_8(void) = ReturnValue : &:r207_7, m210_4 -# 207| v207_9(void) = AliasedUse : m207_3 -# 207| v207_10(void) = ExitFunction : - -# 213| void InitArray() -# 213| Block 0 -# 213| v213_1(void) = EnterFunction : -# 213| m213_2(unknown) = AliasedDefinition : -# 213| m213_3(unknown) = InitializeNonLocal : -# 213| m213_4(unknown) = Chi : total:m213_2, partial:m213_3 -# 214| r214_1(glval) = VariableAddress[a_pad] : -# 214| r214_2(glval) = StringConstant[""] : -# 214| r214_3(char[32]) = Load[?] : &:r214_2, ~m213_3 -# 214| m214_4(char[32]) = Store[a_pad] : &:r214_1, r214_3 -# 215| r215_1(glval) = VariableAddress[a_nopad] : -# 215| r215_2(glval) = StringConstant["foo"] : -# 215| r215_3(char[4]) = Load[?] : &:r215_2, ~m213_3 -# 215| m215_4(char[4]) = Store[a_nopad] : &:r215_1, r215_3 -# 216| r216_1(glval) = VariableAddress[a_infer] : -# 216| r216_2(glval) = StringConstant["blah"] : -# 216| r216_3(char[5]) = Load[?] : &:r216_2, ~m213_3 -# 216| m216_4(char[5]) = Store[a_infer] : &:r216_1, r216_3 -# 217| r217_1(glval) = VariableAddress[b] : -# 217| m217_2(char[2]) = Uninitialized[b] : &:r217_1 -# 218| r218_1(glval) = VariableAddress[c] : -# 218| m218_2(char[2]) = Uninitialized[c] : &:r218_1 -# 218| r218_3(int) = Constant[0] : -# 218| r218_4(glval) = PointerAdd[1] : r218_1, r218_3 -# 218| r218_5(unknown[2]) = Constant[0] : -# 218| m218_6(unknown[2]) = Store[?] : &:r218_4, r218_5 -# 219| r219_1(glval) = VariableAddress[d] : -# 219| m219_2(char[2]) = Uninitialized[d] : &:r219_1 -# 219| r219_3(int) = Constant[0] : -# 219| r219_4(glval) = PointerAdd[1] : r219_1, r219_3 -# 219| r219_5(char) = Constant[0] : -# 219| m219_6(char) = Store[?] : &:r219_4, r219_5 -# 219| m219_7(char[2]) = Chi : total:m219_2, partial:m219_6 -# 219| r219_8(int) = Constant[1] : -# 219| r219_9(glval) = PointerAdd[1] : r219_1, r219_8 -# 219| r219_10(char) = Constant[0] : -# 219| m219_11(char) = Store[?] : &:r219_9, r219_10 -# 219| m219_12(char[2]) = Chi : total:m219_7, partial:m219_11 -# 220| r220_1(glval) = VariableAddress[e] : -# 220| m220_2(char[2]) = Uninitialized[e] : &:r220_1 -# 220| r220_3(int) = Constant[0] : -# 220| r220_4(glval) = PointerAdd[1] : r220_1, r220_3 -# 220| r220_5(char) = Constant[0] : -# 220| m220_6(char) = Store[?] : &:r220_4, r220_5 -# 220| m220_7(char[2]) = Chi : total:m220_2, partial:m220_6 -# 220| r220_8(int) = Constant[1] : -# 220| r220_9(glval) = PointerAdd[1] : r220_1, r220_8 -# 220| r220_10(char) = Constant[1] : -# 220| m220_11(char) = Store[?] : &:r220_9, r220_10 -# 220| m220_12(char[2]) = Chi : total:m220_7, partial:m220_11 -# 221| r221_1(glval) = VariableAddress[f] : -# 221| m221_2(char[3]) = Uninitialized[f] : &:r221_1 -# 221| r221_3(int) = Constant[0] : -# 221| r221_4(glval) = PointerAdd[1] : r221_1, r221_3 -# 221| r221_5(char) = Constant[0] : -# 221| m221_6(char) = Store[?] : &:r221_4, r221_5 -# 221| m221_7(char[3]) = Chi : total:m221_2, partial:m221_6 -# 221| r221_8(int) = Constant[1] : -# 221| r221_9(glval) = PointerAdd[1] : r221_1, r221_8 -# 221| r221_10(unknown[2]) = Constant[0] : -# 221| m221_11(unknown[2]) = Store[?] : &:r221_9, r221_10 -# 221| m221_12(char[3]) = Chi : total:m221_7, partial:m221_11 -# 222| v222_1(void) = NoOp : -# 213| v213_5(void) = ReturnVoid : -# 213| v213_6(void) = AliasedUse : m213_3 -# 213| v213_7(void) = ExitFunction : - -# 226| char StringLiteralAliasing() -# 226| Block 0 -# 226| v226_1(void) = EnterFunction : -# 226| m226_2(unknown) = AliasedDefinition : -# 226| m226_3(unknown) = InitializeNonLocal : -# 226| m226_4(unknown) = Chi : total:m226_2, partial:m226_3 -# 227| r227_1(glval) = FunctionAddress[ExternalFunc] : -# 227| v227_2(void) = Call[ExternalFunc] : func:r227_1 -# 227| m227_3(unknown) = ^CallSideEffect : ~m226_4 -# 227| m227_4(unknown) = Chi : total:m226_4, partial:m227_3 -# 229| r229_1(glval) = VariableAddress[s] : -# 229| r229_2(glval) = StringConstant["Literal"] : -# 229| r229_3(char *) = Convert : r229_2 -# 229| m229_4(char *) = Store[s] : &:r229_1, r229_3 -# 230| r230_1(glval) = VariableAddress[#return] : -# 230| r230_2(glval) = VariableAddress[s] : -# 230| r230_3(char *) = Load[s] : &:r230_2, m229_4 -# 230| r230_4(int) = Constant[2] : -# 230| r230_5(glval) = PointerAdd[1] : r230_3, r230_4 -# 230| r230_6(char) = Load[?] : &:r230_5, ~m226_3 -# 230| m230_7(char) = Store[#return] : &:r230_1, r230_6 -# 226| r226_5(glval) = VariableAddress[#return] : -# 226| v226_6(void) = ReturnValue : &:r226_5, m230_7 -# 226| v226_7(void) = AliasedUse : ~m227_4 -# 226| v226_8(void) = ExitFunction : - -# 235| void Constructible::Constructible(int) -# 235| Block 0 -# 235| v235_1(void) = EnterFunction : -# 235| m235_2(unknown) = AliasedDefinition : -# 235| m235_3(unknown) = InitializeNonLocal : -# 235| m235_4(unknown) = Chi : total:m235_2, partial:m235_3 -# 235| r235_5(glval) = VariableAddress[#this] : -# 235| m235_6(glval) = InitializeParameter[#this] : &:r235_5 -# 235| r235_7(glval) = Load[#this] : &:r235_5, m235_6 -# 235| m235_8(Constructible) = InitializeIndirection[#this] : &:r235_7 -# 235| r235_9(glval) = VariableAddress[x] : -# 235| m235_10(int) = InitializeParameter[x] : &:r235_9 -# 235| v235_11(void) = NoOp : -# 235| v235_12(void) = ReturnIndirection[#this] : &:r235_7, m235_8 -# 235| v235_13(void) = ReturnVoid : -# 235| v235_14(void) = AliasedUse : m235_3 -# 235| v235_15(void) = ExitFunction : - -# 236| void Constructible::g() -# 236| Block 0 -# 236| v236_1(void) = EnterFunction : -# 236| m236_2(unknown) = AliasedDefinition : -# 236| m236_3(unknown) = InitializeNonLocal : -# 236| m236_4(unknown) = Chi : total:m236_2, partial:m236_3 -# 236| r236_5(glval) = VariableAddress[#this] : -# 236| m236_6(glval) = InitializeParameter[#this] : &:r236_5 -# 236| r236_7(glval) = Load[#this] : &:r236_5, m236_6 -# 236| m236_8(Constructible) = InitializeIndirection[#this] : &:r236_7 -# 236| v236_9(void) = NoOp : -# 236| v236_10(void) = ReturnIndirection[#this] : &:r236_7, m236_8 -# 236| v236_11(void) = ReturnVoid : -# 236| v236_12(void) = AliasedUse : m236_3 -# 236| v236_13(void) = ExitFunction : - -# 239| void ExplicitConstructorCalls() -# 239| Block 0 -# 239| v239_1(void) = EnterFunction : -# 239| m239_2(unknown) = AliasedDefinition : -# 239| m239_3(unknown) = InitializeNonLocal : -# 239| m239_4(unknown) = Chi : total:m239_2, partial:m239_3 -# 240| r240_1(glval) = VariableAddress[c] : -# 240| m240_2(Constructible) = Uninitialized[c] : &:r240_1 -# 240| r240_3(glval) = FunctionAddress[Constructible] : -# 240| r240_4(int) = Constant[1] : -# 240| v240_5(void) = Call[Constructible] : func:r240_3, this:r240_1, 0:r240_4 -# 240| m240_6(unknown) = ^CallSideEffect : ~m239_4 -# 240| m240_7(unknown) = Chi : total:m239_4, partial:m240_6 -# 240| m240_8(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r240_1 -# 240| m240_9(Constructible) = Chi : total:m240_2, partial:m240_8 -# 241| r241_1(glval) = VariableAddress[c] : -# 241| r241_2(glval) = FunctionAddress[g] : -# 241| v241_3(void) = Call[g] : func:r241_2, this:r241_1 -# 241| m241_4(unknown) = ^CallSideEffect : ~m240_7 -# 241| m241_5(unknown) = Chi : total:m240_7, partial:m241_4 -# 241| v241_6(void) = ^IndirectReadSideEffect[-1] : &:r241_1, m240_9 -# 241| m241_7(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r241_1 -# 241| m241_8(Constructible) = Chi : total:m240_9, partial:m241_7 -# 242| r242_1(glval) = VariableAddress[c] : -# 242| r242_2(glval) = FunctionAddress[g] : -# 242| v242_3(void) = Call[g] : func:r242_2, this:r242_1 -# 242| m242_4(unknown) = ^CallSideEffect : ~m241_5 -# 242| m242_5(unknown) = Chi : total:m241_5, partial:m242_4 -# 242| v242_6(void) = ^IndirectReadSideEffect[-1] : &:r242_1, m241_8 -# 242| m242_7(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r242_1 -# 242| m242_8(Constructible) = Chi : total:m241_8, partial:m242_7 -# 243| r243_1(glval) = VariableAddress[c2] : -# 243| m243_2(Constructible) = Uninitialized[c2] : &:r243_1 -# 243| r243_3(glval) = FunctionAddress[Constructible] : -# 243| r243_4(int) = Constant[2] : -# 243| v243_5(void) = Call[Constructible] : func:r243_3, this:r243_1, 0:r243_4 -# 243| m243_6(unknown) = ^CallSideEffect : ~m242_5 -# 243| m243_7(unknown) = Chi : total:m242_5, partial:m243_6 -# 243| m243_8(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r243_1 -# 243| m243_9(Constructible) = Chi : total:m243_2, partial:m243_8 -# 244| r244_1(glval) = VariableAddress[c2] : -# 244| r244_2(glval) = FunctionAddress[g] : -# 244| v244_3(void) = Call[g] : func:r244_2, this:r244_1 -# 244| m244_4(unknown) = ^CallSideEffect : ~m243_7 -# 244| m244_5(unknown) = Chi : total:m243_7, partial:m244_4 -# 244| v244_6(void) = ^IndirectReadSideEffect[-1] : &:r244_1, m243_9 -# 244| m244_7(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r244_1 -# 244| m244_8(Constructible) = Chi : total:m243_9, partial:m244_7 -# 245| v245_1(void) = NoOp : -# 239| v239_5(void) = ReturnVoid : -# 239| v239_6(void) = AliasedUse : ~m244_5 -# 239| v239_7(void) = ExitFunction : - -# 247| char* VoidStarIndirectParameters(char*, int) -# 247| Block 0 -# 247| v247_1(void) = EnterFunction : -# 247| m247_2(unknown) = AliasedDefinition : -# 247| m247_3(unknown) = InitializeNonLocal : -# 247| m247_4(unknown) = Chi : total:m247_2, partial:m247_3 -# 247| r247_5(glval) = VariableAddress[src] : -# 247| m247_6(char *) = InitializeParameter[src] : &:r247_5 -# 247| r247_7(char *) = Load[src] : &:r247_5, m247_6 -# 247| m247_8(unknown) = InitializeIndirection[src] : &:r247_7 -# 247| r247_9(glval) = VariableAddress[size] : -# 247| m247_10(int) = InitializeParameter[size] : &:r247_9 -# 248| r248_1(glval) = VariableAddress[dst] : -# 248| r248_2(glval) = FunctionAddress[operator new[]] : -# 248| r248_3(glval) = VariableAddress[size] : -# 248| r248_4(int) = Load[size] : &:r248_3, m247_10 -# 248| r248_5(unsigned long) = Convert : r248_4 -# 248| r248_6(unsigned long) = Constant[1] : -# 248| r248_7(unsigned long) = Mul : r248_5, r248_6 -# 248| r248_8(void *) = Call[operator new[]] : func:r248_2, 0:r248_7 -# 248| m248_9(unknown) = ^CallSideEffect : ~m247_4 -# 248| m248_10(unknown) = Chi : total:m247_4, partial:m248_9 -# 248| m248_11(unknown) = ^InitializeDynamicAllocation : &:r248_8 -# 248| r248_12(char *) = Convert : r248_8 -# 248| m248_13(char *) = Store[dst] : &:r248_1, r248_12 -# 249| r249_1(char) = Constant[97] : -# 249| r249_2(glval) = VariableAddress[src] : -# 249| r249_3(char *) = Load[src] : &:r249_2, m247_6 -# 249| r249_4(glval) = CopyValue : r249_3 -# 249| m249_5(char) = Store[?] : &:r249_4, r249_1 -# 249| m249_6(unknown) = Chi : total:m247_8, partial:m249_5 -# 250| r250_1(glval) = FunctionAddress[memcpy] : -# 250| r250_2(glval) = VariableAddress[dst] : -# 250| r250_3(char *) = Load[dst] : &:r250_2, m248_13 -# 250| r250_4(void *) = Convert : r250_3 -# 250| r250_5(glval) = VariableAddress[src] : -# 250| r250_6(char *) = Load[src] : &:r250_5, m247_6 -# 250| r250_7(void *) = Convert : r250_6 -# 250| r250_8(glval) = VariableAddress[size] : -# 250| r250_9(int) = Load[size] : &:r250_8, m247_10 -# 250| r250_10(void *) = Call[memcpy] : func:r250_1, 0:r250_4, 1:r250_7, 2:r250_9 -# 250| v250_11(void) = ^SizedBufferReadSideEffect[1] : &:r250_7, r250_9, ~m249_6 -# 250| m250_12(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r250_4, r250_9 -# 250| m250_13(unknown) = Chi : total:m248_11, partial:m250_12 -# 251| r251_1(glval) = VariableAddress[#return] : -# 251| r251_2(glval) = VariableAddress[dst] : -# 251| r251_3(char *) = Load[dst] : &:r251_2, m248_13 -# 251| m251_4(char *) = Store[#return] : &:r251_1, r251_3 -# 247| v247_11(void) = ReturnIndirection[src] : &:r247_7, m249_6 -# 247| r247_12(glval) = VariableAddress[#return] : -# 247| v247_13(void) = ReturnValue : &:r247_12, m251_4 -# 247| v247_14(void) = AliasedUse : ~m248_10 -# 247| v247_15(void) = ExitFunction : - -# 254| char StringLiteralAliasing2(bool) -# 254| Block 0 -# 254| v254_1(void) = EnterFunction : -# 254| m254_2(unknown) = AliasedDefinition : -# 254| m254_3(unknown) = InitializeNonLocal : -# 254| m254_4(unknown) = Chi : total:m254_2, partial:m254_3 -# 254| r254_5(glval) = VariableAddress[b] : -# 254| m254_6(bool) = InitializeParameter[b] : &:r254_5 -# 255| r255_1(glval) = VariableAddress[b] : -# 255| r255_2(bool) = Load[b] : &:r255_1, m254_6 -# 255| v255_3(void) = ConditionalBranch : r255_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 256| Block 1 -# 256| r256_1(glval) = FunctionAddress[ExternalFunc] : -# 256| v256_2(void) = Call[ExternalFunc] : func:r256_1 -# 256| m256_3(unknown) = ^CallSideEffect : ~m254_4 -# 256| m256_4(unknown) = Chi : total:m254_4, partial:m256_3 -#-----| Goto -> Block 3 - -# 259| Block 2 -# 259| r259_1(glval) = FunctionAddress[ExternalFunc] : -# 259| v259_2(void) = Call[ExternalFunc] : func:r259_1 -# 259| m259_3(unknown) = ^CallSideEffect : ~m254_4 -# 259| m259_4(unknown) = Chi : total:m254_4, partial:m259_3 -#-----| Goto -> Block 3 - -# 262| Block 3 -# 262| m262_1(unknown) = Phi : from 1:~m256_4, from 2:~m259_4 -# 262| r262_2(glval) = VariableAddress[s] : -# 262| r262_3(glval) = StringConstant["Literal"] : -# 262| r262_4(char *) = Convert : r262_3 -# 262| m262_5(char *) = Store[s] : &:r262_2, r262_4 -# 263| r263_1(glval) = VariableAddress[#return] : -# 263| r263_2(glval) = VariableAddress[s] : -# 263| r263_3(char *) = Load[s] : &:r263_2, m262_5 -# 263| r263_4(int) = Constant[2] : -# 263| r263_5(glval) = PointerAdd[1] : r263_3, r263_4 -# 263| r263_6(char) = Load[?] : &:r263_5, ~m254_3 -# 263| m263_7(char) = Store[#return] : &:r263_1, r263_6 -# 254| r254_7(glval) = VariableAddress[#return] : -# 254| v254_8(void) = ReturnValue : &:r254_7, m263_7 -# 254| v254_9(void) = AliasedUse : ~m262_1 -# 254| v254_10(void) = ExitFunction : - -# 268| void* MallocAliasing(void*, int) -# 268| Block 0 -# 268| v268_1(void) = EnterFunction : -# 268| m268_2(unknown) = AliasedDefinition : -# 268| m268_3(unknown) = InitializeNonLocal : -# 268| m268_4(unknown) = Chi : total:m268_2, partial:m268_3 -# 268| r268_5(glval) = VariableAddress[s] : -# 268| m268_6(void *) = InitializeParameter[s] : &:r268_5 -# 268| r268_7(void *) = Load[s] : &:r268_5, m268_6 -# 268| m268_8(unknown) = InitializeIndirection[s] : &:r268_7 -# 268| r268_9(glval) = VariableAddress[size] : -# 268| m268_10(int) = InitializeParameter[size] : &:r268_9 -# 269| r269_1(glval) = VariableAddress[buf] : -# 269| r269_2(glval) = FunctionAddress[malloc] : -# 269| r269_3(glval) = VariableAddress[size] : -# 269| r269_4(int) = Load[size] : &:r269_3, m268_10 -# 269| r269_5(void *) = Call[malloc] : func:r269_2, 0:r269_4 -# 269| m269_6(unknown) = ^CallSideEffect : ~m268_4 -# 269| m269_7(unknown) = Chi : total:m268_4, partial:m269_6 -# 269| m269_8(unknown) = ^InitializeDynamicAllocation : &:r269_5 -# 269| m269_9(void *) = Store[buf] : &:r269_1, r269_5 -# 270| r270_1(glval) = FunctionAddress[memcpy] : -# 270| r270_2(glval) = VariableAddress[buf] : -# 270| r270_3(void *) = Load[buf] : &:r270_2, m269_9 -# 270| r270_4(glval) = VariableAddress[s] : -# 270| r270_5(void *) = Load[s] : &:r270_4, m268_6 -# 270| r270_6(glval) = VariableAddress[size] : -# 270| r270_7(int) = Load[size] : &:r270_6, m268_10 -# 270| r270_8(void *) = Call[memcpy] : func:r270_1, 0:r270_3, 1:r270_5, 2:r270_7 -# 270| v270_9(void) = ^SizedBufferReadSideEffect[1] : &:r270_5, r270_7, ~m268_8 -# 270| m270_10(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r270_3, r270_7 -# 270| m270_11(unknown) = Chi : total:m269_8, partial:m270_10 -# 271| r271_1(glval) = VariableAddress[#return] : -# 271| r271_2(glval) = VariableAddress[buf] : -# 271| r271_3(void *) = Load[buf] : &:r271_2, m269_9 -# 271| m271_4(void *) = Store[#return] : &:r271_1, r271_3 -# 268| v268_11(void) = ReturnIndirection[s] : &:r268_7, m268_8 -# 268| r268_12(glval) = VariableAddress[#return] : -# 268| v268_13(void) = ReturnValue : &:r268_12, m271_4 -# 268| v268_14(void) = AliasedUse : ~m269_7 -# 268| v268_15(void) = ExitFunction : - -# 275| void EscapedButNotConflated(bool, Point, int) -# 275| Block 0 -# 275| v275_1(void) = EnterFunction : -# 275| m275_2(unknown) = AliasedDefinition : -# 275| m275_3(unknown) = InitializeNonLocal : -# 275| m275_4(unknown) = Chi : total:m275_2, partial:m275_3 -# 275| r275_5(glval) = VariableAddress[c] : -# 275| m275_6(bool) = InitializeParameter[c] : &:r275_5 -# 275| r275_7(glval) = VariableAddress[p] : -# 275| m275_8(Point) = InitializeParameter[p] : &:r275_7 -# 275| r275_9(glval) = VariableAddress[x1] : -# 275| m275_10(int) = InitializeParameter[x1] : &:r275_9 -# 276| r276_1(glval) = VariableAddress[a] : -# 276| m276_2(Point) = Uninitialized[a] : &:r276_1 -# 276| m276_3(unknown) = Chi : total:m275_4, partial:m276_2 -# 276| r276_4(glval) = FieldAddress[x] : r276_1 -# 276| r276_5(int) = Constant[0] : -# 276| m276_6(int) = Store[?] : &:r276_4, r276_5 -# 276| m276_7(unknown) = Chi : total:m276_3, partial:m276_6 -# 276| r276_8(glval) = FieldAddress[y] : r276_1 -# 276| r276_9(int) = Constant[0] : -# 276| m276_10(int) = Store[?] : &:r276_8, r276_9 -# 276| m276_11(unknown) = Chi : total:m276_7, partial:m276_10 -# 277| r277_1(glval) = VariableAddress[a] : -# 277| r277_2(Point *) = CopyValue : r277_1 -# 277| r277_3(glval) = VariableAddress[pp] : -# 277| m277_4(Point *) = Store[pp] : &:r277_3, r277_2 -# 277| m277_5(unknown) = Chi : total:m276_11, partial:m277_4 -# 278| r278_1(glval) = VariableAddress[c] : -# 278| r278_2(bool) = Load[c] : &:r278_1, m275_6 -# 278| v278_3(void) = ConditionalBranch : r278_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 279| Block 1 -# 279| r279_1(glval) = VariableAddress[x1] : -# 279| r279_2(int) = Load[x1] : &:r279_1, m275_10 -# 279| r279_3(glval) = VariableAddress[a] : -# 279| r279_4(glval) = FieldAddress[x] : r279_3 -# 279| m279_5(int) = Store[?] : &:r279_4, r279_2 -# 279| m279_6(unknown) = Chi : total:m277_5, partial:m279_5 -#-----| Goto -> Block 2 - -# 281| Block 2 -# 281| m281_1(int) = Phi : from 0:m276_6, from 1:m279_5 -# 281| m281_2(unknown) = Phi : from 0:~m277_5, from 1:~m279_6 -# 281| r281_3(glval) = VariableAddress[x] : -# 281| r281_4(glval) = VariableAddress[a] : -# 281| r281_5(glval) = FieldAddress[x] : r281_4 -# 281| r281_6(int) = Load[?] : &:r281_5, m281_1 -# 281| m281_7(int) = Store[x] : &:r281_3, r281_6 -# 282| v282_1(void) = NoOp : -# 275| v275_11(void) = ReturnVoid : -# 275| v275_12(void) = AliasedUse : ~m281_2 -# 275| v275_13(void) = ExitFunction : - -# 286| void A::A(int) -# 286| Block 0 -# 286| v286_1(void) = EnterFunction : -# 286| m286_2(unknown) = AliasedDefinition : -# 286| m286_3(unknown) = InitializeNonLocal : -# 286| m286_4(unknown) = Chi : total:m286_2, partial:m286_3 -# 286| r286_5(glval) = VariableAddress[#this] : -# 286| m286_6(glval) = InitializeParameter[#this] : &:r286_5 -# 286| r286_7(glval) = Load[#this] : &:r286_5, m286_6 -# 286| m286_8(A) = InitializeIndirection[#this] : &:r286_7 -# 286| r286_9(glval) = VariableAddress[x] : -# 286| m286_10(int) = InitializeParameter[x] : &:r286_9 -# 286| v286_11(void) = NoOp : -# 286| v286_12(void) = ReturnIndirection[#this] : &:r286_7, m286_8 -# 286| v286_13(void) = ReturnVoid : -# 286| v286_14(void) = AliasedUse : m286_3 -# 286| v286_15(void) = ExitFunction : - -# 287| void A::A(A*) -# 287| Block 0 -# 287| v287_1(void) = EnterFunction : -# 287| m287_2(unknown) = AliasedDefinition : -# 287| m287_3(unknown) = InitializeNonLocal : -# 287| m287_4(unknown) = Chi : total:m287_2, partial:m287_3 -# 287| r287_5(glval) = VariableAddress[#this] : -# 287| m287_6(glval) = InitializeParameter[#this] : &:r287_5 -# 287| r287_7(glval) = Load[#this] : &:r287_5, m287_6 -# 287| m287_8(A) = InitializeIndirection[#this] : &:r287_7 -# 287| r287_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 287| m287_10(A *) = InitializeParameter[(unnamed parameter 0)] : &:r287_9 -# 287| r287_11(A *) = Load[(unnamed parameter 0)] : &:r287_9, m287_10 -# 287| m287_12(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r287_11 -# 287| v287_13(void) = NoOp : -# 287| v287_14(void) = ReturnIndirection[#this] : &:r287_7, m287_8 -# 287| v287_15(void) = ReturnIndirection[(unnamed parameter 0)] : &:r287_11, m287_12 -# 287| v287_16(void) = ReturnVoid : -# 287| v287_17(void) = AliasedUse : m287_3 -# 287| v287_18(void) = ExitFunction : - -# 288| void A::A() -# 288| Block 0 -# 288| v288_1(void) = EnterFunction : -# 288| m288_2(unknown) = AliasedDefinition : -# 288| m288_3(unknown) = InitializeNonLocal : -# 288| m288_4(unknown) = Chi : total:m288_2, partial:m288_3 -# 288| r288_5(glval) = VariableAddress[#this] : -# 288| m288_6(glval) = InitializeParameter[#this] : &:r288_5 -# 288| r288_7(glval) = Load[#this] : &:r288_5, m288_6 -# 288| m288_8(A) = InitializeIndirection[#this] : &:r288_7 -# 288| v288_9(void) = NoOp : -# 288| v288_10(void) = ReturnIndirection[#this] : &:r288_7, m288_8 -# 288| v288_11(void) = ReturnVoid : -# 288| v288_12(void) = AliasedUse : m288_3 -# 288| v288_13(void) = ExitFunction : - -# 291| Point* NewAliasing(int) -# 291| Block 0 -# 291| v291_1(void) = EnterFunction : -# 291| m291_2(unknown) = AliasedDefinition : -# 291| m291_3(unknown) = InitializeNonLocal : -# 291| m291_4(unknown) = Chi : total:m291_2, partial:m291_3 -# 291| r291_5(glval) = VariableAddress[x] : -# 291| m291_6(int) = InitializeParameter[x] : &:r291_5 -# 292| r292_1(glval) = VariableAddress[p] : -# 292| r292_2(glval) = FunctionAddress[operator new] : -# 292| r292_3(unsigned long) = Constant[8] : -# 292| r292_4(void *) = Call[operator new] : func:r292_2, 0:r292_3 -# 292| m292_5(unknown) = ^CallSideEffect : ~m291_4 -# 292| m292_6(unknown) = Chi : total:m291_4, partial:m292_5 -# 292| m292_7(unknown) = ^InitializeDynamicAllocation : &:r292_4 -# 292| r292_8(Point *) = Convert : r292_4 -# 292| m292_9(Point *) = Store[p] : &:r292_1, r292_8 -# 293| r293_1(glval) = VariableAddress[q] : -# 293| r293_2(glval) = FunctionAddress[operator new] : -# 293| r293_3(unsigned long) = Constant[8] : -# 293| r293_4(void *) = Call[operator new] : func:r293_2, 0:r293_3 -# 293| m293_5(unknown) = ^CallSideEffect : ~m292_6 -# 293| m293_6(unknown) = Chi : total:m292_6, partial:m293_5 -# 293| m293_7(unknown) = ^InitializeDynamicAllocation : &:r293_4 -# 293| r293_8(Point *) = Convert : r293_4 -# 293| m293_9(Point *) = Store[q] : &:r293_1, r293_8 -# 294| r294_1(glval) = VariableAddress[j] : -# 294| r294_2(glval) = FunctionAddress[operator new] : -# 294| r294_3(unsigned long) = Constant[4] : -# 294| r294_4(void *) = Call[operator new] : func:r294_2, 0:r294_3 -# 294| m294_5(unknown) = ^CallSideEffect : ~m293_6 -# 294| m294_6(unknown) = Chi : total:m293_6, partial:m294_5 -# 294| m294_7(unknown) = ^InitializeDynamicAllocation : &:r294_4 -# 294| r294_8(A *) = Convert : r294_4 -# 294| r294_9(glval) = FunctionAddress[A] : -# 294| r294_10(glval) = FunctionAddress[operator new] : -# 294| r294_11(unsigned long) = Constant[4] : -# 294| r294_12(void *) = Call[operator new] : func:r294_10, 0:r294_11 -# 294| m294_13(unknown) = ^CallSideEffect : ~m294_6 -# 294| m294_14(unknown) = Chi : total:m294_6, partial:m294_13 -# 294| m294_15(unknown) = ^InitializeDynamicAllocation : &:r294_12 -# 294| r294_16(A *) = Convert : r294_12 -# 294| r294_17(glval) = FunctionAddress[A] : -# 294| r294_18(glval) = VariableAddress[x] : -# 294| r294_19(int) = Load[x] : &:r294_18, m291_6 -# 294| v294_20(void) = Call[A] : func:r294_17, this:r294_16, 0:r294_19 -# 294| m294_21(unknown) = ^CallSideEffect : ~m294_14 -# 294| m294_22(unknown) = Chi : total:m294_14, partial:m294_21 -# 294| m294_23(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_16 -# 294| m294_24(unknown) = Chi : total:m294_15, partial:m294_23 -# 294| v294_25(void) = Call[A] : func:r294_9, this:r294_8, 0:r294_16 -# 294| m294_26(unknown) = ^CallSideEffect : ~m294_22 -# 294| m294_27(unknown) = Chi : total:m294_22, partial:m294_26 -# 294| v294_28(void) = ^BufferReadSideEffect[0] : &:r294_16, ~m294_24 -# 294| m294_29(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_8 -# 294| m294_30(unknown) = Chi : total:m294_7, partial:m294_29 -# 294| m294_31(unknown) = ^BufferMayWriteSideEffect[0] : &:r294_16 -# 294| m294_32(unknown) = Chi : total:m294_24, partial:m294_31 -# 294| r294_33(glval) = FieldAddress[i] : r294_8 -# 294| r294_34(int) = Load[?] : &:r294_33, ~m294_30 -# 294| m294_35(int) = Store[j] : &:r294_1, r294_34 -# 295| r295_1(glval) = VariableAddress[a] : -# 295| r295_2(glval) = FunctionAddress[operator new] : -# 295| r295_3(unsigned long) = Constant[4] : -# 295| r295_4(void *) = Call[operator new] : func:r295_2, 0:r295_3 -# 295| m295_5(unknown) = ^CallSideEffect : ~m294_27 -# 295| m295_6(unknown) = Chi : total:m294_27, partial:m295_5 -# 295| m295_7(unknown) = ^InitializeDynamicAllocation : &:r295_4 -# 295| r295_8(A *) = Convert : r295_4 -# 295| r295_9(glval) = FunctionAddress[A] : -# 295| v295_10(void) = Call[A] : func:r295_9, this:r295_8 -# 295| m295_11(unknown) = ^CallSideEffect : ~m295_6 -# 295| m295_12(unknown) = Chi : total:m295_6, partial:m295_11 -# 295| m295_13(A) = ^IndirectMayWriteSideEffect[-1] : &:r295_8 -# 295| m295_14(unknown) = Chi : total:m295_7, partial:m295_13 -# 295| m295_15(A *) = Store[a] : &:r295_1, r295_8 -# 296| r296_1(glval) = VariableAddress[#return] : -# 296| r296_2(glval) = VariableAddress[p] : -# 296| r296_3(Point *) = Load[p] : &:r296_2, m292_9 -# 296| m296_4(Point *) = Store[#return] : &:r296_1, r296_3 -# 291| r291_7(glval) = VariableAddress[#return] : -# 291| v291_8(void) = ReturnValue : &:r291_7, m296_4 -# 291| v291_9(void) = AliasedUse : ~m295_12 -# 291| v291_10(void) = ExitFunction : - -# 301| int main(int, char**) -# 301| Block 0 -# 301| v301_1(void) = EnterFunction : -# 301| m301_2(unknown) = AliasedDefinition : -# 301| m301_3(unknown) = InitializeNonLocal : -# 301| m301_4(unknown) = Chi : total:m301_2, partial:m301_3 -# 301| r301_5(glval) = VariableAddress[argc] : -# 301| m301_6(int) = InitializeParameter[argc] : &:r301_5 -# 301| r301_7(glval) = VariableAddress[argv] : -# 301| m301_8(char **) = InitializeParameter[argv] : &:r301_7 -# 301| r301_9(char **) = Load[argv] : &:r301_7, m301_8 -# 301| m301_10(unknown) = InitializeIndirection[argv] : &:r301_9 -# 301| m301_11(unknown) = Chi : total:m301_4, partial:m301_10 -# 302| r302_1(glval) = FunctionAddress[unknownFunction] : -# 302| r302_2(glval) = VariableAddress[argc] : -# 302| r302_3(int) = Load[argc] : &:r302_2, m301_6 -# 302| r302_4(glval) = VariableAddress[argv] : -# 302| r302_5(char **) = Load[argv] : &:r302_4, m301_8 -# 302| v302_6(void) = Call[unknownFunction] : func:r302_1, 0:r302_3, 1:r302_5 -# 302| m302_7(unknown) = ^CallSideEffect : ~m301_11 -# 302| m302_8(unknown) = Chi : total:m301_11, partial:m302_7 -# 302| v302_9(void) = ^BufferReadSideEffect[1] : &:r302_5, ~m302_8 -# 302| m302_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r302_5 -# 302| m302_11(unknown) = Chi : total:m302_8, partial:m302_10 -# 303| r303_1(glval) = FunctionAddress[unknownFunction] : -# 303| r303_2(glval) = VariableAddress[argc] : -# 303| r303_3(int) = Load[argc] : &:r303_2, m301_6 -# 303| r303_4(glval) = VariableAddress[argv] : -# 303| r303_5(char **) = Load[argv] : &:r303_4, m301_8 -# 303| v303_6(void) = Call[unknownFunction] : func:r303_1, 0:r303_3, 1:r303_5 -# 303| m303_7(unknown) = ^CallSideEffect : ~m302_11 -# 303| m303_8(unknown) = Chi : total:m302_11, partial:m303_7 -# 303| v303_9(void) = ^BufferReadSideEffect[1] : &:r303_5, ~m303_8 -# 303| m303_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r303_5 -# 303| m303_11(unknown) = Chi : total:m303_8, partial:m303_10 -# 304| r304_1(glval) = VariableAddress[#return] : -# 304| r304_2(glval) = VariableAddress[argv] : -# 304| r304_3(char **) = Load[argv] : &:r304_2, m301_8 -# 304| r304_4(char *) = Load[?] : &:r304_3, ~m303_11 -# 304| r304_5(char) = Load[?] : &:r304_4, ~m303_11 -# 304| r304_6(int) = Convert : r304_5 -# 304| m304_7(int) = Store[#return] : &:r304_1, r304_6 -# 301| v301_12(void) = ReturnIndirection[argv] : &:r301_9, ~m303_11 -# 301| r301_13(glval) = VariableAddress[#return] : -# 301| v301_14(void) = ReturnValue : &:r301_13, m304_7 -# 301| v301_15(void) = AliasedUse : ~m303_11 -# 301| v301_16(void) = ExitFunction : - -# 310| void ThisAliasTest::setX(int) -# 310| Block 0 -# 310| v310_1(void) = EnterFunction : -# 310| m310_2(unknown) = AliasedDefinition : -# 310| m310_3(unknown) = InitializeNonLocal : -# 310| m310_4(unknown) = Chi : total:m310_2, partial:m310_3 -# 310| r310_5(glval) = VariableAddress[#this] : -# 310| m310_6(glval) = InitializeParameter[#this] : &:r310_5 -# 310| r310_7(glval) = Load[#this] : &:r310_5, m310_6 -# 310| m310_8(ThisAliasTest) = InitializeIndirection[#this] : &:r310_7 -# 310| r310_9(glval) = VariableAddress[arg] : -# 310| m310_10(int) = InitializeParameter[arg] : &:r310_9 -# 311| r311_1(glval) = VariableAddress[arg] : -# 311| r311_2(int) = Load[arg] : &:r311_1, m310_10 -# 311| r311_3(glval) = VariableAddress[#this] : -# 311| r311_4(ThisAliasTest *) = Load[#this] : &:r311_3, m310_6 -# 311| r311_5(glval) = FieldAddress[x] : r311_4 -# 311| m311_6(int) = Store[?] : &:r311_5, r311_2 -# 311| m311_7(unknown) = Chi : total:m310_8, partial:m311_6 -# 312| v312_1(void) = NoOp : -# 310| v310_11(void) = ReturnIndirection[#this] : &:r310_7, m311_7 -# 310| v310_12(void) = ReturnVoid : -# 310| v310_13(void) = AliasedUse : m310_3 -# 310| v310_14(void) = ExitFunction : - -# 319| void DoubleIndirectionEscapes(char*) -# 319| Block 0 -# 319| v319_1(void) = EnterFunction : -# 319| m319_2(unknown) = AliasedDefinition : -# 319| m319_3(unknown) = InitializeNonLocal : -# 319| m319_4(unknown) = Chi : total:m319_2, partial:m319_3 -# 319| r319_5(glval) = VariableAddress[s] : -# 319| m319_6(char *) = InitializeParameter[s] : &:r319_5 -# 319| r319_7(char *) = Load[s] : &:r319_5, m319_6 -# 319| m319_8(unknown) = InitializeIndirection[s] : &:r319_7 -# 321| r321_1(glval) = VariableAddress[buffer] : -# 321| m321_2(char[1024]) = Uninitialized[buffer] : &:r321_1 -# 321| m321_3(unknown) = Chi : total:m319_4, partial:m321_2 -# 322| r322_1(glval) = VariableAddress[ptr1] : -# 322| m322_2(char *) = Uninitialized[ptr1] : &:r322_1 -# 322| m322_3(unknown) = Chi : total:m321_3, partial:m322_2 -# 322| r322_4(glval) = VariableAddress[ptr2] : -# 322| m322_5(char **) = Uninitialized[ptr2] : &:r322_4 -# 323| r323_1(glval) = VariableAddress[ptr3] : -# 323| m323_2(char *) = Uninitialized[ptr3] : &:r323_1 -# 323| r323_3(glval) = VariableAddress[ptr4] : -# 323| m323_4(char **) = Uninitialized[ptr4] : &:r323_3 -# 325| r325_1(glval) = VariableAddress[buffer] : -# 325| r325_2(char *) = Convert : r325_1 -# 325| r325_3(glval) = VariableAddress[ptr1] : -# 325| m325_4(char *) = Store[ptr1] : &:r325_3, r325_2 -# 325| m325_5(unknown) = Chi : total:m322_3, partial:m325_4 -# 326| r326_1(glval) = VariableAddress[ptr1] : -# 326| r326_2(char **) = CopyValue : r326_1 -# 326| r326_3(glval) = VariableAddress[ptr2] : -# 326| m326_4(char **) = Store[ptr2] : &:r326_3, r326_2 -# 327| r327_1(glval) = FunctionAddress[memcpy] : -# 327| r327_2(glval) = VariableAddress[ptr2] : -# 327| r327_3(char **) = Load[ptr2] : &:r327_2, m326_4 -# 327| r327_4(char *) = Load[?] : &:r327_3, m325_4 -# 327| r327_5(void *) = Convert : r327_4 -# 327| r327_6(glval) = VariableAddress[s] : -# 327| r327_7(char *) = Load[s] : &:r327_6, m319_6 -# 327| r327_8(void *) = Convert : r327_7 -# 327| r327_9(int) = Constant[1024] : -# 327| r327_10(void *) = Call[memcpy] : func:r327_1, 0:r327_5, 1:r327_8, 2:r327_9 -# 327| v327_11(void) = ^SizedBufferReadSideEffect[1] : &:r327_8, r327_9, ~m319_8 -# 327| m327_12(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r327_5, r327_9 -# 327| m327_13(unknown) = Chi : total:m325_5, partial:m327_12 -# 329| r329_1(glval) = FunctionAddress[sink] : -# 329| r329_2(glval) = VariableAddress[buffer] : -# 329| r329_3(char *) = Convert : r329_2 -# 329| v329_4(void) = Call[sink] : func:r329_1, 0:r329_3 -# 329| m329_5(unknown) = ^CallSideEffect : ~m327_13 -# 329| m329_6(unknown) = Chi : total:m327_13, partial:m329_5 -# 329| v329_7(void) = ^BufferReadSideEffect[0] : &:r329_3, ~m329_6 -# 329| m329_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r329_3 -# 329| m329_9(unknown) = Chi : total:m329_6, partial:m329_8 -# 330| r330_1(glval) = FunctionAddress[sink] : -# 330| r330_2(glval) = VariableAddress[ptr1] : -# 330| r330_3(char *) = Load[ptr1] : &:r330_2, ~m329_6 -# 330| v330_4(void) = Call[sink] : func:r330_1, 0:r330_3 -# 330| m330_5(unknown) = ^CallSideEffect : ~m329_9 -# 330| m330_6(unknown) = Chi : total:m329_9, partial:m330_5 -# 330| v330_7(void) = ^BufferReadSideEffect[0] : &:r330_3, ~m330_6 -# 330| m330_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r330_3 -# 330| m330_9(unknown) = Chi : total:m330_6, partial:m330_8 -# 331| r331_1(glval) = FunctionAddress[sink] : -# 331| r331_2(glval) = VariableAddress[ptr2] : -# 331| r331_3(char **) = Load[ptr2] : &:r331_2, m326_4 -# 331| v331_4(void) = Call[sink] : func:r331_1, 0:r331_3 -# 331| m331_5(unknown) = ^CallSideEffect : ~m330_9 -# 331| m331_6(unknown) = Chi : total:m330_9, partial:m331_5 -# 331| v331_7(void) = ^BufferReadSideEffect[0] : &:r331_3, ~m331_6 -# 331| m331_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r331_3 -# 331| m331_9(unknown) = Chi : total:m331_6, partial:m331_8 -# 332| r332_1(glval) = FunctionAddress[sink] : -# 332| r332_2(glval) = VariableAddress[ptr2] : -# 332| r332_3(char **) = Load[ptr2] : &:r332_2, m326_4 -# 332| r332_4(char *) = Load[?] : &:r332_3, ~m331_9 -# 332| v332_5(void) = Call[sink] : func:r332_1, 0:r332_4 -# 332| m332_6(unknown) = ^CallSideEffect : ~m331_9 -# 332| m332_7(unknown) = Chi : total:m331_9, partial:m332_6 -# 332| v332_8(void) = ^BufferReadSideEffect[0] : &:r332_4, ~m332_7 -# 332| m332_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r332_4 -# 332| m332_10(unknown) = Chi : total:m332_7, partial:m332_9 -# 333| v333_1(void) = NoOp : -# 319| v319_9(void) = ReturnIndirection[s] : &:r319_7, m319_8 -# 319| v319_10(void) = ReturnVoid : -# 319| v319_11(void) = AliasedUse : ~m332_10 -# 319| v319_12(void) = ExitFunction : - -# 335| int UnreachablePhiOperand(int, int) -# 335| Block 0 -# 335| v335_1(void) = EnterFunction : -# 335| m335_2(unknown) = AliasedDefinition : -# 335| m335_3(unknown) = InitializeNonLocal : -# 335| m335_4(unknown) = Chi : total:m335_2, partial:m335_3 -# 335| r335_5(glval) = VariableAddress[x] : -# 335| m335_6(int) = InitializeParameter[x] : &:r335_5 -# 335| r335_7(glval) = VariableAddress[y] : -# 335| m335_8(int) = InitializeParameter[y] : &:r335_7 -# 336| r336_1(glval) = VariableAddress[b] : -# 336| r336_2(bool) = Constant[1] : -# 336| m336_3(bool) = Store[b] : &:r336_1, r336_2 -# 337| r337_1(glval) = VariableAddress[ret] : -# 337| m337_2(int) = Uninitialized[ret] : &:r337_1 -# 339| r339_1(glval) = VariableAddress[b] : -# 339| r339_2(bool) = Load[b] : &:r339_1, m336_3 -# 339| v339_3(void) = ConditionalBranch : r339_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 340| Block 1 -# 340| r340_1(glval) = VariableAddress[x] : -# 340| r340_2(int) = Load[x] : &:r340_1, m335_6 -# 340| r340_3(glval) = VariableAddress[ret] : -# 340| m340_4(int) = Store[ret] : &:r340_3, r340_2 -# 345| r345_1(glval) = VariableAddress[#return] : -# 345| r345_2(glval) = VariableAddress[ret] : -# 345| r345_3(int) = Load[ret] : &:r345_2, m340_4 -# 345| m345_4(int) = Store[#return] : &:r345_1, r345_3 -# 335| r335_9(glval) = VariableAddress[#return] : -# 335| v335_10(void) = ReturnValue : &:r335_9, m345_4 -# 335| v335_11(void) = AliasedUse : m335_3 -# 335| v335_12(void) = ExitFunction : - -# 335| Block 2 -# 335| v335_13(void) = Unreached : - -# 348| int UnreachablePhiOperand2(int, int, int, bool) -# 348| Block 0 -# 348| v348_1(void) = EnterFunction : -# 348| m348_2(unknown) = AliasedDefinition : -# 348| m348_3(unknown) = InitializeNonLocal : -# 348| m348_4(unknown) = Chi : total:m348_2, partial:m348_3 -# 348| r348_5(glval) = VariableAddress[x] : -# 348| m348_6(int) = InitializeParameter[x] : &:r348_5 -# 348| r348_7(glval) = VariableAddress[y] : -# 348| m348_8(int) = InitializeParameter[y] : &:r348_7 -# 348| r348_9(glval) = VariableAddress[z] : -# 348| m348_10(int) = InitializeParameter[z] : &:r348_9 -# 348| r348_11(glval) = VariableAddress[b1] : -# 348| m348_12(bool) = InitializeParameter[b1] : &:r348_11 -# 349| r349_1(glval) = VariableAddress[b2] : -# 349| r349_2(bool) = Constant[1] : -# 349| m349_3(bool) = Store[b2] : &:r349_1, r349_2 -# 350| r350_1(glval) = VariableAddress[ret] : -# 350| m350_2(int) = Uninitialized[ret] : &:r350_1 -# 352| r352_1(glval) = VariableAddress[b1] : -# 352| r352_2(bool) = Load[b1] : &:r352_1, m348_12 -# 352| v352_3(void) = ConditionalBranch : r352_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 353| Block 1 -# 353| r353_1(glval) = VariableAddress[x] : -# 353| r353_2(int) = Load[x] : &:r353_1, m348_6 -# 353| r353_3(glval) = VariableAddress[ret] : -# 353| m353_4(int) = Store[ret] : &:r353_3, r353_2 -#-----| Goto -> Block 4 - -# 355| Block 2 -# 355| r355_1(glval) = VariableAddress[b2] : -# 355| r355_2(bool) = Load[b2] : &:r355_1, m349_3 -# 355| v355_3(void) = ConditionalBranch : r355_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 356| Block 3 -# 356| r356_1(glval) = VariableAddress[y] : -# 356| r356_2(int) = Load[y] : &:r356_1, m348_8 -# 356| r356_3(glval) = VariableAddress[ret] : -# 356| m356_4(int) = Store[ret] : &:r356_3, r356_2 -#-----| Goto -> Block 4 - -# 362| Block 4 -# 362| m362_1(int) = Phi : from 1:m353_4, from 3:m356_4 -# 362| r362_2(glval) = VariableAddress[#return] : -# 362| r362_3(glval) = VariableAddress[ret] : -# 362| r362_4(int) = Load[ret] : &:r362_3, m362_1 -# 362| m362_5(int) = Store[#return] : &:r362_2, r362_4 -# 348| r348_13(glval) = VariableAddress[#return] : -# 348| v348_14(void) = ReturnValue : &:r348_13, m362_5 -# 348| v348_15(void) = AliasedUse : m348_3 -# 348| v348_16(void) = ExitFunction : - -# 348| Block 5 -# 348| v348_17(void) = Unreached : - -# 365| int DegeneratePhi(int, int, bool) -# 365| Block 0 -# 365| v365_1(void) = EnterFunction : -# 365| m365_2(unknown) = AliasedDefinition : -# 365| m365_3(unknown) = InitializeNonLocal : -# 365| m365_4(unknown) = Chi : total:m365_2, partial:m365_3 -# 365| r365_5(glval) = VariableAddress[x] : -# 365| m365_6(int) = InitializeParameter[x] : &:r365_5 -# 365| r365_7(glval) = VariableAddress[y] : -# 365| m365_8(int) = InitializeParameter[y] : &:r365_7 -# 365| r365_9(glval) = VariableAddress[b1] : -# 365| m365_10(bool) = InitializeParameter[b1] : &:r365_9 -# 366| r366_1(glval) = VariableAddress[b2] : -# 366| r366_2(bool) = Constant[1] : -# 366| m366_3(bool) = Store[b2] : &:r366_1, r366_2 -# 367| r367_1(glval) = VariableAddress[ret1] : -# 367| m367_2(int) = Uninitialized[ret1] : &:r367_1 -# 368| r368_1(glval) = VariableAddress[ret2] : -# 368| r368_2(glval) = VariableAddress[x] : -# 368| r368_3(int) = Load[x] : &:r368_2, m365_6 -# 368| m368_4(int) = Store[ret2] : &:r368_1, r368_3 -# 370| r370_1(glval) = VariableAddress[b1] : -# 370| r370_2(bool) = Load[b1] : &:r370_1, m365_10 -# 370| v370_3(void) = ConditionalBranch : r370_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 371| Block 1 -# 371| r371_1(glval) = VariableAddress[x] : -# 371| r371_2(int) = Load[x] : &:r371_1, m365_6 -# 371| r371_3(glval) = VariableAddress[ret1] : -# 371| m371_4(int) = Store[ret1] : &:r371_3, r371_2 -#-----| Goto -> Block 4 - -# 373| Block 2 -# 373| r373_1(glval) = VariableAddress[b2] : -# 373| r373_2(bool) = Load[b2] : &:r373_1, m366_3 -# 373| v373_3(void) = ConditionalBranch : r373_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 374| Block 3 -# 374| r374_1(glval) = VariableAddress[x] : -# 374| r374_2(int) = Load[x] : &:r374_1, m365_6 -# 374| r374_3(glval) = VariableAddress[ret1] : -# 374| m374_4(int) = Store[ret1] : &:r374_3, r374_2 -#-----| Goto -> Block 4 - -# 380| Block 4 -# 380| m380_1(int) = Phi : from 1:m368_4, from 3:m368_4 -# 380| m380_2(int) = Phi : from 1:m371_4, from 3:m374_4 -# 380| r380_3(glval) = VariableAddress[#return] : -# 380| r380_4(glval) = VariableAddress[ret1] : -# 380| r380_5(int) = Load[ret1] : &:r380_4, m380_2 -# 380| r380_6(glval) = VariableAddress[ret2] : -# 380| r380_7(int) = Load[ret2] : &:r380_6, m380_1 -# 380| r380_8(int) = Add : r380_5, r380_7 -# 380| m380_9(int) = Store[#return] : &:r380_3, r380_8 -# 365| r365_11(glval) = VariableAddress[#return] : -# 365| v365_12(void) = ReturnValue : &:r365_11, m380_9 -# 365| v365_13(void) = AliasedUse : m365_3 -# 365| v365_14(void) = ExitFunction : - -# 365| Block 5 -# 365| v365_15(void) = Unreached : - -# 383| int FusedBlockPhiOperand(int, int, int, bool) -# 383| Block 0 -# 383| v383_1(void) = EnterFunction : -# 383| m383_2(unknown) = AliasedDefinition : -# 383| m383_3(unknown) = InitializeNonLocal : -# 383| m383_4(unknown) = Chi : total:m383_2, partial:m383_3 -# 383| r383_5(glval) = VariableAddress[x] : -# 383| m383_6(int) = InitializeParameter[x] : &:r383_5 -# 383| r383_7(glval) = VariableAddress[y] : -# 383| m383_8(int) = InitializeParameter[y] : &:r383_7 -# 383| r383_9(glval) = VariableAddress[z] : -# 383| m383_10(int) = InitializeParameter[z] : &:r383_9 -# 383| r383_11(glval) = VariableAddress[b1] : -# 383| m383_12(bool) = InitializeParameter[b1] : &:r383_11 -# 384| r384_1(glval) = VariableAddress[b2] : -# 384| r384_2(bool) = Constant[1] : -# 384| m384_3(bool) = Store[b2] : &:r384_1, r384_2 -# 385| r385_1(glval) = VariableAddress[ret] : -# 385| m385_2(int) = Uninitialized[ret] : &:r385_1 -# 387| r387_1(glval) = VariableAddress[b1] : -# 387| r387_2(bool) = Load[b1] : &:r387_1, m383_12 -# 387| v387_3(void) = ConditionalBranch : r387_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 388| Block 1 -# 388| r388_1(glval) = VariableAddress[x] : -# 388| r388_2(int) = Load[x] : &:r388_1, m383_6 -# 388| r388_3(glval) = VariableAddress[ret] : -# 388| m388_4(int) = Store[ret] : &:r388_3, r388_2 -#-----| Goto -> Block 4 - -# 390| Block 2 -# 390| r390_1(glval) = VariableAddress[b2] : -# 390| r390_2(bool) = Load[b2] : &:r390_1, m384_3 -# 390| v390_3(void) = ConditionalBranch : r390_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 391| Block 3 -# 391| r391_1(glval) = VariableAddress[y] : -# 391| r391_2(int) = Load[y] : &:r391_1, m383_8 -# 391| r391_3(glval) = VariableAddress[ret] : -# 391| m391_4(int) = Store[ret] : &:r391_3, r391_2 -# 395| v395_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 398| Block 4 -# 398| m398_1(int) = Phi : from 1:m388_4, from 3:m391_4 -# 398| r398_2(glval) = VariableAddress[#return] : -# 398| r398_3(glval) = VariableAddress[ret] : -# 398| r398_4(int) = Load[ret] : &:r398_3, m398_1 -# 398| m398_5(int) = Store[#return] : &:r398_2, r398_4 -# 383| r383_13(glval) = VariableAddress[#return] : -# 383| v383_14(void) = ReturnValue : &:r383_13, m398_5 -# 383| v383_15(void) = AliasedUse : m383_3 -# 383| v383_16(void) = ExitFunction : - -# 383| Block 5 -# 383| v383_17(void) = Unreached : - -# 401| void vla(int, int, int, bool) -# 401| Block 0 -# 401| v401_1(void) = EnterFunction : -# 401| m401_2(unknown) = AliasedDefinition : -# 401| m401_3(unknown) = InitializeNonLocal : -# 401| m401_4(unknown) = Chi : total:m401_2, partial:m401_3 -# 401| r401_5(glval) = VariableAddress[n1] : -# 401| m401_6(int) = InitializeParameter[n1] : &:r401_5 -# 401| r401_7(glval) = VariableAddress[n2] : -# 401| m401_8(int) = InitializeParameter[n2] : &:r401_7 -# 401| r401_9(glval) = VariableAddress[n3] : -# 401| m401_10(int) = InitializeParameter[n3] : &:r401_9 -# 401| r401_11(glval) = VariableAddress[b1] : -# 401| m401_12(bool) = InitializeParameter[b1] : &:r401_11 -# 402| r402_1(glval) = VariableAddress[b] : -# 402| m402_2(int[]) = Uninitialized[b] : &:r402_1 -# 402| r402_3(glval) = VariableAddress[n1] : -# 402| r402_4(int) = Load[n1] : &:r402_3, m401_6 -# 402| v402_5(void) = NoOp : -# 403| r403_1(glval) = VariableAddress[c] : -# 403| m403_2(int[][]) = Uninitialized[c] : &:r403_1 -# 403| m403_3(unknown) = Chi : total:m401_4, partial:m403_2 -# 403| r403_4(glval) = VariableAddress[n1] : -# 403| r403_5(int) = Load[n1] : &:r403_4, m401_6 -# 403| r403_6(glval) = VariableAddress[n2] : -# 403| r403_7(int) = Load[n2] : &:r403_6, m401_8 -# 403| v403_8(void) = NoOp : -# 405| r405_1(int) = Constant[0] : -# 405| r405_2(glval) = VariableAddress[b] : -# 405| r405_3(int *) = Convert : r405_2 -# 405| r405_4(glval) = CopyValue : r405_3 -# 405| m405_5(int) = Store[?] : &:r405_4, r405_1 -# 405| m405_6(int[]) = Chi : total:m402_2, partial:m405_5 -# 406| r406_1(int) = Constant[1] : -# 406| r406_2(glval) = VariableAddress[b] : -# 406| r406_3(int *) = Convert : r406_2 -# 406| r406_4(int) = Constant[0] : -# 406| r406_5(glval) = PointerAdd[4] : r406_3, r406_4 -# 406| m406_6(int) = Store[?] : &:r406_5, r406_1 -# 406| m406_7(int[]) = Chi : total:m405_6, partial:m406_6 -# 408| r408_1(int) = Constant[0] : -# 408| r408_2(glval) = VariableAddress[c] : -# 408| r408_3(int(*)[]) = Convert : r408_2 -# 408| r408_4(int) = Constant[1] : -# 408| r408_5(int(*)[]) = PointerAdd : r408_3, r408_4 -# 408| r408_6(glval) = CopyValue : r408_5 -# 408| r408_7(int *) = Convert : r408_6 -# 408| r408_8(glval) = CopyValue : r408_7 -# 408| m408_9(int) = Store[?] : &:r408_8, r408_1 -# 408| m408_10(unknown) = Chi : total:m403_3, partial:m408_9 -# 410| r410_1(glval) = VariableAddress[b1] : -# 410| r410_2(bool) = Load[b1] : &:r410_1, m401_12 -# 410| v410_3(void) = ConditionalBranch : r410_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 411| Block 1 -# 411| r411_1(glval) = VariableAddress[b] : -# 411| m411_2(int[]) = Uninitialized[b] : &:r411_1 -# 411| r411_3(glval) = VariableAddress[n1] : -# 411| r411_4(int) = Load[n1] : &:r411_3, m401_6 -# 411| v411_5(void) = NoOp : -#-----| Goto -> Block 3 - -# 413| Block 2 -# 413| r413_1(glval) = VariableAddress[b] : -# 413| m413_2(int[]) = Uninitialized[b] : &:r413_1 -# 413| r413_3(glval) = VariableAddress[n2] : -# 413| r413_4(int) = Load[n2] : &:r413_3, m401_8 -# 413| v413_5(void) = NoOp : -#-----| Goto -> Block 3 - -# 415| Block 3 -# 415| v415_1(void) = NoOp : -# 401| v401_13(void) = ReturnVoid : -# 401| v401_14(void) = AliasedUse : ~m408_10 -# 401| v401_15(void) = ExitFunction : - -# 417| void nested_array_designators() -# 417| Block 0 -# 417| v417_1(void) = EnterFunction : -# 417| m417_2(unknown) = AliasedDefinition : -# 417| m417_3(unknown) = InitializeNonLocal : -# 417| m417_4(unknown) = Chi : total:m417_2, partial:m417_3 -# 418| r418_1(glval) = VariableAddress[x] : -# 418| m418_2(int[1][2]) = Uninitialized[x] : &:r418_1 -# 418| r418_3(int) = Constant[0] : -# 418| r418_4(glval) = PointerAdd[8] : r418_1, r418_3 -# 418| r418_5(int) = Constant[0] : -# 418| r418_6(glval) = PointerAdd[4] : r418_4, r418_5 -# 418| r418_7(int) = Constant[1234] : -# 418| m418_8(int) = Store[?] : &:r418_6, r418_7 -# 418| m418_9(int[1][2]) = Chi : total:m418_2, partial:m418_8 -# 418| r418_10(int) = Constant[1] : -# 418| r418_11(glval) = PointerAdd[4] : r418_4, r418_10 -# 418| r418_12(int) = Constant[0] : -# 418| m418_13(int) = Store[?] : &:r418_11, r418_12 -# 418| m418_14(int[1][2]) = Chi : total:m418_9, partial:m418_13 -# 418| r418_15(int) = Constant[0] : -# 418| r418_16(glval) = PointerAdd[8] : r418_1, r418_15 -# 418| r418_17(int) = Constant[0] : -# 418| r418_18(glval) = PointerAdd[4] : r418_16, r418_17 -# 418| r418_19(int) = Constant[0] : -# 418| m418_20(int) = Store[?] : &:r418_18, r418_19 -# 418| m418_21(int[1][2]) = Chi : total:m418_14, partial:m418_20 -# 418| r418_22(int) = Constant[1] : -# 418| r418_23(glval) = PointerAdd[4] : r418_16, r418_22 -# 418| r418_24(int) = Constant[5678] : -# 418| m418_25(int) = Store[?] : &:r418_23, r418_24 -# 418| m418_26(int[1][2]) = Chi : total:m418_21, partial:m418_25 -# 419| v419_1(void) = NoOp : -# 417| v417_5(void) = ReturnVoid : -# 417| v417_6(void) = AliasedUse : m417_3 -# 417| v417_7(void) = ExitFunction : - -# 423| int noreturnTest(int) -# 423| Block 0 -# 423| v423_1(void) = EnterFunction : -# 423| m423_2(unknown) = AliasedDefinition : -# 423| m423_3(unknown) = InitializeNonLocal : -# 423| m423_4(unknown) = Chi : total:m423_2, partial:m423_3 -# 423| r423_5(glval) = VariableAddress[x] : -# 423| m423_6(int) = InitializeParameter[x] : &:r423_5 -# 424| r424_1(glval) = VariableAddress[x] : -# 424| r424_2(int) = Load[x] : &:r424_1, m423_6 -# 424| r424_3(int) = Constant[10] : -# 424| r424_4(bool) = CompareLT : r424_2, r424_3 -# 424| v424_5(void) = ConditionalBranch : r424_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 425| Block 1 -# 425| r425_1(glval) = VariableAddress[#return] : -# 425| r425_2(glval) = VariableAddress[x] : -# 425| r425_3(int) = Load[x] : &:r425_2, m423_6 -# 425| m425_4(int) = Store[#return] : &:r425_1, r425_3 -# 423| r423_7(glval) = VariableAddress[#return] : -# 423| v423_8(void) = ReturnValue : &:r423_7, m425_4 -# 423| v423_9(void) = AliasedUse : m423_3 -# 423| v423_10(void) = ExitFunction : - -# 427| Block 2 -# 427| r427_1(glval) = FunctionAddress[noreturnFunc] : -# 427| v427_2(void) = Call[noreturnFunc] : func:r427_1 -# 427| m427_3(unknown) = ^CallSideEffect : ~m423_4 -# 427| m427_4(unknown) = Chi : total:m423_4, partial:m427_3 -# 423| v423_11(void) = Unreached : - -# 431| int noreturnTest2(int) -# 431| Block 0 -# 431| v431_1(void) = EnterFunction : -# 431| m431_2(unknown) = AliasedDefinition : -# 431| m431_3(unknown) = InitializeNonLocal : -# 431| m431_4(unknown) = Chi : total:m431_2, partial:m431_3 -# 431| r431_5(glval) = VariableAddress[x] : -# 431| m431_6(int) = InitializeParameter[x] : &:r431_5 -# 432| r432_1(glval) = VariableAddress[x] : -# 432| r432_2(int) = Load[x] : &:r432_1, m431_6 -# 432| r432_3(int) = Constant[10] : -# 432| r432_4(bool) = CompareLT : r432_2, r432_3 -# 432| v432_5(void) = ConditionalBranch : r432_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 433| Block 1 -# 433| r433_1(glval) = FunctionAddress[noreturnFunc] : -# 433| v433_2(void) = Call[noreturnFunc] : func:r433_1 -# 433| m433_3(unknown) = ^CallSideEffect : ~m431_4 -# 433| m433_4(unknown) = Chi : total:m431_4, partial:m433_3 -# 431| v431_7(void) = Unreached : - -# 435| Block 2 -# 435| r435_1(glval) = VariableAddress[#return] : -# 435| r435_2(glval) = VariableAddress[x] : -# 435| r435_3(int) = Load[x] : &:r435_2, m431_6 -# 435| m435_4(int) = Store[#return] : &:r435_1, r435_3 -# 431| r431_8(glval) = VariableAddress[#return] : -# 431| v431_9(void) = ReturnValue : &:r431_8, m435_4 -# 431| v431_10(void) = AliasedUse : m431_3 -# 431| v431_11(void) = ExitFunction : - -# 438| void Conditional(bool, int, int) -# 438| Block 0 -# 438| v438_1(void) = EnterFunction : -# 438| m438_2(unknown) = AliasedDefinition : -# 438| m438_3(unknown) = InitializeNonLocal : -# 438| m438_4(unknown) = Chi : total:m438_2, partial:m438_3 -# 438| r438_5(glval) = VariableAddress[a] : -# 438| m438_6(bool) = InitializeParameter[a] : &:r438_5 -# 438| r438_7(glval) = VariableAddress[x] : -# 438| m438_8(int) = InitializeParameter[x] : &:r438_7 -# 438| r438_9(glval) = VariableAddress[y] : -# 438| m438_10(int) = InitializeParameter[y] : &:r438_9 -# 439| r439_1(glval) = VariableAddress[z] : -# 439| r439_2(glval) = VariableAddress[a] : -# 439| r439_3(bool) = Load[a] : &:r439_2, m438_6 -# 439| v439_4(void) = ConditionalBranch : r439_3 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 439| Block 1 -# 439| m439_5(int) = Phi : from 2:m439_12, from 3:m439_16 -# 439| r439_6(glval) = VariableAddress[#temp439:13] : -# 439| r439_7(int) = Load[#temp439:13] : &:r439_6, m439_5 -# 439| m439_8(int) = Store[z] : &:r439_1, r439_7 -# 440| v440_1(void) = NoOp : -# 438| v438_11(void) = ReturnVoid : -# 438| v438_12(void) = AliasedUse : m438_3 -# 438| v438_13(void) = ExitFunction : - -# 439| Block 2 -# 439| r439_9(glval) = VariableAddress[x] : -# 439| r439_10(int) = Load[x] : &:r439_9, m438_8 -# 439| r439_11(glval) = VariableAddress[#temp439:13] : -# 439| m439_12(int) = Store[#temp439:13] : &:r439_11, r439_10 -#-----| Goto -> Block 1 - -# 439| Block 3 -# 439| r439_13(glval) = VariableAddress[y] : -# 439| r439_14(int) = Load[y] : &:r439_13, m438_10 -# 439| r439_15(glval) = VariableAddress[#temp439:13] : -# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14 -#-----| Goto -> Block 1 - -# 442| void NonEscapingParams(void*, void*) -# 442| Block 0 -# 442| v442_1(void) = EnterFunction : -# 442| m442_2(unknown) = AliasedDefinition : -# 442| m442_3(unknown) = InitializeNonLocal : -# 442| m442_4(unknown) = Chi : total:m442_2, partial:m442_3 -# 442| r442_5(glval) = VariableAddress[a] : -# 442| m442_6(void *) = InitializeParameter[a] : &:r442_5 -# 442| r442_7(void *) = Load[a] : &:r442_5, m442_6 -# 442| m442_8(unknown) = InitializeIndirection[a] : &:r442_7 -# 442| r442_9(glval) = VariableAddress[b] : -# 442| m442_10(void *) = InitializeParameter[b] : &:r442_9 -# 442| r442_11(void *) = Load[b] : &:r442_9, m442_10 -# 442| m442_12(unknown) = InitializeIndirection[b] : &:r442_11 -# 444| v444_1(void) = NoOp : -# 442| v442_13(void) = ReturnIndirection[a] : &:r442_7, m442_8 -# 442| v442_14(void) = ReturnIndirection[b] : &:r442_11, m442_12 -# 442| v442_15(void) = ReturnVoid : -# 442| v442_16(void) = AliasedUse : m442_3 -# 442| v442_17(void) = ExitFunction : - -# 446| void EscapingParams(void*, void*) -# 446| Block 0 -# 446| v446_1(void) = EnterFunction : -# 446| m446_2(unknown) = AliasedDefinition : -# 446| m446_3(unknown) = InitializeNonLocal : -# 446| m446_4(unknown) = Chi : total:m446_2, partial:m446_3 -# 446| r446_5(glval) = VariableAddress[a] : -# 446| m446_6(void *) = InitializeParameter[a] : &:r446_5 -# 446| r446_7(void *) = Load[a] : &:r446_5, m446_6 -# 446| m446_8(unknown) = InitializeIndirection[a] : &:r446_7 -# 446| m446_9(unknown) = Chi : total:m446_4, partial:m446_8 -# 446| r446_10(glval) = VariableAddress[b] : -# 446| m446_11(void *) = InitializeParameter[b] : &:r446_10 -# 446| r446_12(void *) = Load[b] : &:r446_10, m446_11 -# 446| m446_13(unknown) = InitializeIndirection[b] : &:r446_12 -# 446| m446_14(unknown) = Chi : total:m446_9, partial:m446_13 -# 448| r448_1(glval) = FunctionAddress[Escape] : -# 448| r448_2(glval) = VariableAddress[a] : -# 448| r448_3(void *) = Load[a] : &:r448_2, m446_6 -# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3 -# 448| m448_5(unknown) = ^CallSideEffect : ~m446_14 -# 448| m448_6(unknown) = Chi : total:m446_14, partial:m448_5 -# 448| v448_7(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m448_6 -# 448| m448_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3 -# 448| m448_9(unknown) = Chi : total:m448_6, partial:m448_8 -# 449| r449_1(glval) = FunctionAddress[Escape] : -# 449| r449_2(glval) = VariableAddress[b] : -# 449| r449_3(void *) = Load[b] : &:r449_2, m446_11 -# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3 -# 449| m449_5(unknown) = ^CallSideEffect : ~m448_9 -# 449| m449_6(unknown) = Chi : total:m448_9, partial:m449_5 -# 449| v449_7(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m449_6 -# 449| m449_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3 -# 449| m449_9(unknown) = Chi : total:m449_6, partial:m449_8 -# 450| v450_1(void) = NoOp : -# 446| v446_15(void) = ReturnIndirection[a] : &:r446_7, ~m449_9 -# 446| v446_16(void) = ReturnIndirection[b] : &:r446_12, ~m449_9 -# 446| v446_17(void) = ReturnVoid : -# 446| v446_18(void) = AliasedUse : ~m449_9 -# 446| v446_19(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.qlref b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.qlref deleted file mode 100644 index 7d4b2950a35a..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.qlref +++ /dev/null @@ -1 +0,0 @@ -semmle/code/cpp/ir/PrintIR.ql \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected deleted file mode 100644 index 3a9abfc7f782..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected +++ /dev/null @@ -1,526 +0,0 @@ -| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo | MustExactlyOverlap | -| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo[0..4) | MustTotallyOverlap | -| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo[4..8) | MustTotallyOverlap | -| ssa.c:3:14:3:16 | foo[0..4) | ssa.c:3:14:3:16 | foo | MayPartiallyOverlap | -| ssa.c:3:14:3:16 | foo[0..4) | ssa.c:3:14:3:16 | foo[0..4) | MustExactlyOverlap | -| ssa.c:3:14:3:16 | foo[4..8) | ssa.c:3:14:3:16 | foo | MayPartiallyOverlap | -| ssa.c:3:14:3:16 | foo[4..8) | ssa.c:3:14:3:16 | foo[4..8) | MustExactlyOverlap | -| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustExactlyOverlap | -| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustTotallyOverlap | -| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustTotallyOverlap | -| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustExactlyOverlap | -| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo | MustExactlyOverlap | -| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo[0..4) | MustTotallyOverlap | -| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo[4..8) | MustTotallyOverlap | -| ssa.c:12:15:12:17 | foo[0..4) | ssa.c:12:15:12:17 | foo | MayPartiallyOverlap | -| ssa.c:12:15:12:17 | foo[0..4) | ssa.c:12:15:12:17 | foo[0..4) | MustExactlyOverlap | -| ssa.c:12:15:12:17 | foo[4..8) | ssa.c:12:15:12:17 | foo | MayPartiallyOverlap | -| ssa.c:12:15:12:17 | foo[4..8) | ssa.c:12:15:12:17 | foo[4..8) | MustExactlyOverlap | -| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped | MustExactlyOverlap | -| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped[0..4) | MustTotallyOverlap | -| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped[4..8) | MustTotallyOverlap | -| ssa.c:14:15:14:25 | foo_swapped[0..4) | ssa.c:14:15:14:25 | foo_swapped | MayPartiallyOverlap | -| ssa.c:14:15:14:25 | foo_swapped[0..4) | ssa.c:14:15:14:25 | foo_swapped[0..4) | MustExactlyOverlap | -| ssa.c:14:15:14:25 | foo_swapped[4..8) | ssa.c:14:15:14:25 | foo_swapped | MayPartiallyOverlap | -| ssa.c:14:15:14:25 | foo_swapped[4..8) | ssa.c:14:15:14:25 | foo_swapped[4..8) | MustExactlyOverlap | -| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x | MustExactlyOverlap | -| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x[0..4) | MustTotallyOverlap | -| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x[4..8) | MustTotallyOverlap | -| ssa.c:18:7:18:7 | x[0..4) | ssa.c:18:7:18:7 | x | MayPartiallyOverlap | -| ssa.c:18:7:18:7 | x[0..4) | ssa.c:18:7:18:7 | x[0..4) | MustExactlyOverlap | -| ssa.c:18:7:18:7 | x[4..8) | ssa.c:18:7:18:7 | x | MayPartiallyOverlap | -| ssa.c:18:7:18:7 | x[4..8) | ssa.c:18:7:18:7 | x[4..8) | MustExactlyOverlap | -| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y | MustExactlyOverlap | -| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y[0..4) | MustTotallyOverlap | -| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y[4..8) | MustTotallyOverlap | -| ssa.c:20:7:20:7 | y[0..4) | ssa.c:20:7:20:7 | y | MayPartiallyOverlap | -| ssa.c:20:7:20:7 | y[0..4) | ssa.c:20:7:20:7 | y[0..4) | MustExactlyOverlap | -| ssa.c:20:7:20:7 | y[4..8) | ssa.c:20:7:20:7 | y | MayPartiallyOverlap | -| ssa.c:20:7:20:7 | y[4..8) | ssa.c:20:7:20:7 | y[4..8) | MustExactlyOverlap | -| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f | MustExactlyOverlap | -| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[0..4) | MustTotallyOverlap | -| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[4..8) | MustTotallyOverlap | -| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[8..12) | MustTotallyOverlap | -| ssa.c:29:28:29:28 | f[0..4) | ssa.c:29:28:29:28 | f | MayPartiallyOverlap | -| ssa.c:29:28:29:28 | f[0..4) | ssa.c:29:28:29:28 | f[0..4) | MustExactlyOverlap | -| ssa.c:29:28:29:28 | f[4..8) | ssa.c:29:28:29:28 | f | MayPartiallyOverlap | -| ssa.c:29:28:29:28 | f[4..8) | ssa.c:29:28:29:28 | f[4..8) | MustExactlyOverlap | -| ssa.c:29:28:29:28 | f[8..12) | ssa.c:29:28:29:28 | f | MayPartiallyOverlap | -| ssa.c:29:28:29:28 | f[8..12) | ssa.c:29:28:29:28 | f[8..12) | MustExactlyOverlap | -| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p | MustExactlyOverlap | -| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[0..4) | MustTotallyOverlap | -| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[4..8) | MustTotallyOverlap | -| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | ?*p | MustTotallyOverlap | -| ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p[0..4) | MustExactlyOverlap | -| ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p[4..8) | MustExactlyOverlap | -| ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[0..4) | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[4..8) | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p | MustExactlyOverlap | -| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p[?..?) | MustTotallyOverlap | -| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | ?*p | MustTotallyOverlap | -| ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | -| ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | a | MayPartiallyOverlap | -| ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | ?a[0..?) | MustTotallyOverlap | -| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | a | MustExactlyOverlap | -| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | a[0..?) | MustTotallyOverlap | -| ssa.cpp:95:38:95:38 | a[0..?) | ssa.cpp:95:38:95:38 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:95:38:95:38 | a[0..?) | ssa.cpp:95:38:95:38 | a | MayPartiallyOverlap | -| ssa.cpp:95:38:95:38 | a[0..?) | ssa.cpp:95:38:95:38 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a | MustExactlyOverlap | -| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:100:31:100:31 | a[0..4) | ssa.cpp:100:31:100:31 | a | MayPartiallyOverlap | -| ssa.cpp:100:31:100:31 | a[0..4) | ssa.cpp:100:31:100:31 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:100:31:100:31 | a[4..8) | ssa.cpp:100:31:100:31 | a | MayPartiallyOverlap | -| ssa.cpp:100:31:100:31 | a[4..8) | ssa.cpp:100:31:100:31 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a[0..4) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a[4..8) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | ?a[0..?) | MustTotallyOverlap | -| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a | MustExactlyOverlap | -| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[0..?) | MustTotallyOverlap | -| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a[0..4) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a[4..8) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a | MustExactlyOverlap | -| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:112:9:112:9 | a[0..4) | ssa.cpp:112:9:112:9 | a | MayPartiallyOverlap | -| ssa.cpp:112:9:112:9 | a[0..4) | ssa.cpp:112:9:112:9 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:112:9:112:9 | a[4..8) | ssa.cpp:112:9:112:9 | a | MayPartiallyOverlap | -| ssa.cpp:112:9:112:9 | a[4..8) | ssa.cpp:112:9:112:9 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a[0..4) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a[4..8) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | ?a[0..?) | MustTotallyOverlap | -| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a | MustExactlyOverlap | -| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[0..?) | MustTotallyOverlap | -| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a[0..4) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a[4..8) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | -| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a | MustExactlyOverlap | -| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:123:9:123:9 | a[0..4) | ssa.cpp:123:9:123:9 | a | MayPartiallyOverlap | -| ssa.cpp:123:9:123:9 | a[0..4) | ssa.cpp:123:9:123:9 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:123:9:123:9 | a[4..8) | ssa.cpp:123:9:123:9 | a | MayPartiallyOverlap | -| ssa.cpp:123:9:123:9 | a[4..8) | ssa.cpp:123:9:123:9 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a | MustExactlyOverlap | -| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:135:9:135:9 | a[0..4) | ssa.cpp:135:9:135:9 | a | MayPartiallyOverlap | -| ssa.cpp:135:9:135:9 | a[0..4) | ssa.cpp:135:9:135:9 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:135:9:135:9 | a[4..8) | ssa.cpp:135:9:135:9 | a | MayPartiallyOverlap | -| ssa.cpp:135:9:135:9 | a[4..8) | ssa.cpp:135:9:135:9 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a | MustExactlyOverlap | -| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:146:9:146:9 | a[0..4) | ssa.cpp:146:9:146:9 | a | MayPartiallyOverlap | -| ssa.cpp:146:9:146:9 | a[0..4) | ssa.cpp:146:9:146:9 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:146:9:146:9 | a[4..8) | ssa.cpp:146:9:146:9 | a | MayPartiallyOverlap | -| ssa.cpp:146:9:146:9 | a[4..8) | ssa.cpp:146:9:146:9 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a | MustExactlyOverlap | -| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[0..8) | MustTotallyOverlap | -| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[8..16) | MustTotallyOverlap | -| ssa.cpp:157:8:157:8 | a[0..4) | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap | -| ssa.cpp:157:8:157:8 | a[0..4) | ssa.cpp:157:8:157:8 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:157:8:157:8 | a[0..4) | ssa.cpp:157:8:157:8 | a[0..8) | MayPartiallyOverlap | -| ssa.cpp:157:8:157:8 | a[0..8) | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap | -| ssa.cpp:157:8:157:8 | a[0..8) | ssa.cpp:157:8:157:8 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:157:8:157:8 | a[0..8) | ssa.cpp:157:8:157:8 | a[0..8) | MustExactlyOverlap | -| ssa.cpp:157:8:157:8 | a[8..16) | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap | -| ssa.cpp:157:8:157:8 | a[8..16) | ssa.cpp:157:8:157:8 | a[8..16) | MustExactlyOverlap | -| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap | -| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustTotallyOverlap | -| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustTotallyOverlap | -| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap | -| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p | MustExactlyOverlap | -| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p[0..4) | MustTotallyOverlap | -| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | ?*p | MustTotallyOverlap | -| ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | -| ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p[0..4) | MustExactlyOverlap | -| ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | -| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | -| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p[0..4) | MayPartiallyOverlap | -| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | -| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap | -| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c[0..4) | MustTotallyOverlap | -| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | ?*c | MustTotallyOverlap | -| ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | -| ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c[0..4) | MustExactlyOverlap | -| ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | -| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | -| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c[0..4) | MayPartiallyOverlap | -| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | -| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d | MustExactlyOverlap | -| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d[0..4) | MustTotallyOverlap | -| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | ?*d | MustTotallyOverlap | -| ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | -| ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d[0..4) | MustExactlyOverlap | -| ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | -| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | -| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d[0..4) | MayPartiallyOverlap | -| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1 | MustExactlyOverlap | -| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MustTotallyOverlap | -| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | ?*str1 | MustTotallyOverlap | -| ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2 | MustExactlyOverlap | -| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MustTotallyOverlap | -| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | ?*str2 | MustTotallyOverlap | -| ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | -| ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x | MustExactlyOverlap | -| ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x[0..?) | MustTotallyOverlap | -| ssa.cpp:207:27:207:27 | x[0..?) | ssa.cpp:207:27:207:27 | x | MayPartiallyOverlap | -| ssa.cpp:207:27:207:27 | x[0..?) | ssa.cpp:207:27:207:27 | x[0..?) | MayPartiallyOverlap | -| ssa.cpp:208:7:208:7 | y | ssa.cpp:208:7:208:7 | y | MustExactlyOverlap | -| ssa.cpp:208:7:208:7 | y | ssa.cpp:208:7:208:7 | y[0..?) | MustTotallyOverlap | -| ssa.cpp:208:7:208:7 | y[0..?) | ssa.cpp:208:7:208:7 | y | MayPartiallyOverlap | -| ssa.cpp:208:7:208:7 | y[0..?) | ssa.cpp:208:7:208:7 | y[0..?) | MayPartiallyOverlap | -| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustExactlyOverlap | -| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustTotallyOverlap | -| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustTotallyOverlap | -| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustExactlyOverlap | -| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d | MustExactlyOverlap | -| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d[0..1) | MustTotallyOverlap | -| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d[1..2) | MustTotallyOverlap | -| ssa.cpp:219:10:219:10 | d[0..1) | ssa.cpp:219:10:219:10 | d | MayPartiallyOverlap | -| ssa.cpp:219:10:219:10 | d[0..1) | ssa.cpp:219:10:219:10 | d[0..1) | MustExactlyOverlap | -| ssa.cpp:219:10:219:10 | d[1..2) | ssa.cpp:219:10:219:10 | d | MayPartiallyOverlap | -| ssa.cpp:219:10:219:10 | d[1..2) | ssa.cpp:219:10:219:10 | d[1..2) | MustExactlyOverlap | -| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e | MustExactlyOverlap | -| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e[0..1) | MustTotallyOverlap | -| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e[1..2) | MustTotallyOverlap | -| ssa.cpp:220:10:220:10 | e[0..1) | ssa.cpp:220:10:220:10 | e | MayPartiallyOverlap | -| ssa.cpp:220:10:220:10 | e[0..1) | ssa.cpp:220:10:220:10 | e[0..1) | MustExactlyOverlap | -| ssa.cpp:220:10:220:10 | e[1..2) | ssa.cpp:220:10:220:10 | e | MayPartiallyOverlap | -| ssa.cpp:220:10:220:10 | e[1..2) | ssa.cpp:220:10:220:10 | e[1..2) | MustExactlyOverlap | -| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f | MustExactlyOverlap | -| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f[0..1) | MustTotallyOverlap | -| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f[1..3) | MustTotallyOverlap | -| ssa.cpp:221:10:221:10 | f[0..1) | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap | -| ssa.cpp:221:10:221:10 | f[0..1) | ssa.cpp:221:10:221:10 | f[0..1) | MustExactlyOverlap | -| ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap | -| ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f[1..3) | MustExactlyOverlap | -| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | *#this | MustExactlyOverlap | -| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | ?*#this | MustTotallyOverlap | -| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | *#this | MayPartiallyOverlap | -| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | *#this | MustExactlyOverlap | -| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | ?*#this | MustTotallyOverlap | -| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | *#this | MayPartiallyOverlap | -| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | ?c | MayPartiallyOverlap | -| ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | c | MayPartiallyOverlap | -| ssa.cpp:240:17:240:17 | c | ssa.cpp:240:17:240:17 | ?c | MustTotallyOverlap | -| ssa.cpp:240:17:240:17 | c | ssa.cpp:240:17:240:17 | c | MustExactlyOverlap | -| ssa.cpp:243:17:243:18 | ?c2 | ssa.cpp:243:17:243:18 | ?c2 | MayPartiallyOverlap | -| ssa.cpp:243:17:243:18 | ?c2 | ssa.cpp:243:17:243:18 | c2 | MayPartiallyOverlap | -| ssa.cpp:243:17:243:18 | c2 | ssa.cpp:243:17:243:18 | ?c2 | MustTotallyOverlap | -| ssa.cpp:243:17:243:18 | c2 | ssa.cpp:243:17:243:18 | c2 | MustExactlyOverlap | -| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src | MustExactlyOverlap | -| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..1) | MustTotallyOverlap | -| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..?) | MustTotallyOverlap | -| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | ?*src | MustTotallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..1) | MustExactlyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MustTotallyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MustExactlyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MustTotallyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s | MustExactlyOverlap | -| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s[0..?) | MustTotallyOverlap | -| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | ?*s | MustTotallyOverlap | -| ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MustTotallyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MustExactlyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MustTotallyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MayPartiallyOverlap | -| ssa.cpp:274:8:274:9 | pp | ssa.cpp:274:8:274:9 | pp | MustExactlyOverlap | -| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a | MustExactlyOverlap | -| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a[0..4) | MustTotallyOverlap | -| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a[4..8) | MustTotallyOverlap | -| ssa.cpp:276:9:276:9 | a[0..4) | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap | -| ssa.cpp:276:9:276:9 | a[0..4) | ssa.cpp:276:9:276:9 | a[0..4) | MustExactlyOverlap | -| ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap | -| ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a[4..8) | MustExactlyOverlap | -| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | *#this | MustExactlyOverlap | -| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | ?*#this | MustTotallyOverlap | -| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | *#this | MayPartiallyOverlap | -| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | *#this | MustExactlyOverlap | -| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | ?*#this | MustTotallyOverlap | -| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | *#this | MayPartiallyOverlap | -| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MustExactlyOverlap | -| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MustTotallyOverlap | -| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MayPartiallyOverlap | -| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MayPartiallyOverlap | -| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | *#this | MustExactlyOverlap | -| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | ?*#this | MustTotallyOverlap | -| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | *#this | MayPartiallyOverlap | -| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MustTotallyOverlap | -| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MustExactlyOverlap | -| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MayPartiallyOverlap | -| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MayPartiallyOverlap | -| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MustTotallyOverlap | -| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MustExactlyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MustTotallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MustTotallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MustExactlyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MustTotallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MustTotallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MustExactlyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MustTotallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MustTotallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MustTotallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MustExactlyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MustTotallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MustTotallyOverlap | -| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MustTotallyOverlap | -| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MustExactlyOverlap | -| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv | MustExactlyOverlap | -| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MustTotallyOverlap | -| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MustTotallyOverlap | -| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv | MustTotallyOverlap | -| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MustTotallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv[0..8) | MustExactlyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this | MustExactlyOverlap | -| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MustTotallyOverlap | -| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | ?*#this | MustTotallyOverlap | -| ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | -| ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this[0..4) | MustExactlyOverlap | -| ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | -| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MayPartiallyOverlap | -| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s | MustExactlyOverlap | -| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s[0..?) | MustTotallyOverlap | -| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | ?*s | MustTotallyOverlap | -| ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | -| ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MayPartiallyOverlap | -| ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | buffer | MayPartiallyOverlap | -| ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | buffer[0..?) | MayPartiallyOverlap | -| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MustTotallyOverlap | -| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | buffer | MustExactlyOverlap | -| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | buffer[0..?) | MustTotallyOverlap | -| ssa.cpp:321:7:321:12 | buffer[0..?) | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MayPartiallyOverlap | -| ssa.cpp:321:7:321:12 | buffer[0..?) | ssa.cpp:321:7:321:12 | buffer | MayPartiallyOverlap | -| ssa.cpp:321:7:321:12 | buffer[0..?) | ssa.cpp:321:7:321:12 | buffer[0..?) | MayPartiallyOverlap | -| ssa.cpp:322:8:322:11 | ?ptr1[0..?) | ssa.cpp:322:8:322:11 | ?ptr1[0..?) | MayPartiallyOverlap | -| ssa.cpp:322:8:322:11 | ?ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1 | MayPartiallyOverlap | -| ssa.cpp:322:8:322:11 | ?ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1[0..?) | MayPartiallyOverlap | -| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ?ptr1[0..?) | MustTotallyOverlap | -| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ptr1 | MustExactlyOverlap | -| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ptr1[0..?) | MustTotallyOverlap | -| ssa.cpp:322:8:322:11 | ptr1[0..?) | ssa.cpp:322:8:322:11 | ?ptr1[0..?) | MayPartiallyOverlap | -| ssa.cpp:322:8:322:11 | ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1 | MayPartiallyOverlap | -| ssa.cpp:322:8:322:11 | ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1[0..?) | MayPartiallyOverlap | -| ssa.cpp:402:7:402:7 | b | ssa.cpp:402:7:402:7 | b | MustExactlyOverlap | -| ssa.cpp:402:7:402:7 | b | ssa.cpp:402:7:402:7 | b[0..4) | MustTotallyOverlap | -| ssa.cpp:402:7:402:7 | b[0..4) | ssa.cpp:402:7:402:7 | b | MayPartiallyOverlap | -| ssa.cpp:402:7:402:7 | b[0..4) | ssa.cpp:402:7:402:7 | b[0..4) | MustExactlyOverlap | -| ssa.cpp:403:7:403:7 | c | ssa.cpp:403:7:403:7 | c | MustExactlyOverlap | -| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x | MustExactlyOverlap | -| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x[0..4) | MustTotallyOverlap | -| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x[4..8) | MustTotallyOverlap | -| ssa.cpp:418:7:418:7 | x[0..4) | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap | -| ssa.cpp:418:7:418:7 | x[0..4) | ssa.cpp:418:7:418:7 | x[0..4) | MustExactlyOverlap | -| ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap | -| ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x[4..8) | MustExactlyOverlap | -| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | *a | MustExactlyOverlap | -| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | ?*a | MustTotallyOverlap | -| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | *a | MayPartiallyOverlap | -| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | ?*a | MayPartiallyOverlap | -| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | *b | MustExactlyOverlap | -| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | ?*b | MustTotallyOverlap | -| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | *b | MayPartiallyOverlap | -| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?) | MustTotallyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MustTotallyOverlap | -| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?) | MustTotallyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MustTotallyOverlap | -| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql deleted file mode 100644 index 2616b21f3203..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql +++ /dev/null @@ -1,5 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasedSSA - -from AllocationMemoryLocation def, AllocationMemoryLocation use, Overlap ovr -where ovr = getOverlap(def, use) -select def, use, ovr diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.expected deleted file mode 100644 index 21782bd5ef14..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleOperandMemoryLocations -missingVirtualVariableForMemoryLocation -multipleVirtualVariablesForMemoryLocation diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.ql b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.ql deleted file mode 100644 index b9d034043386..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency.ql +++ /dev/null @@ -1,2 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SSAConsistency -import semmle.code.cpp.ir.implementation.UseSoundEscapeAnalysis diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.expected deleted file mode 100644 index 21782bd5ef14..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleOperandMemoryLocations -missingVirtualVariableForMemoryLocation -multipleVirtualVariablesForMemoryLocation diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.qlref b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.qlref deleted file mode 100644 index d0a29f0641af..000000000000 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ssa_consistency_unsound.qlref +++ /dev/null @@ -1 +0,0 @@ -semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.ql \ No newline at end of file From dea070441f033775b7f57244533483b29338b526 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 17 Feb 2026 00:54:53 +0000 Subject: [PATCH 03/32] C++: Use unaliased SSA in constant_func.ql test --- cpp/ql/test/library-tests/ir/constant_func/constant_func.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/ir/constant_func/constant_func.ql b/cpp/ql/test/library-tests/ir/constant_func/constant_func.ql index 8e25ba0e5d47..c5834fff87e7 100644 --- a/cpp/ql/test/library-tests/ir/constant_func/constant_func.ql +++ b/cpp/ql/test/library-tests/ir/constant_func/constant_func.ql @@ -1,6 +1,6 @@ import cpp import semmle.code.cpp.ir.IR -import semmle.code.cpp.ir.implementation.aliased_ssa.constant.ConstantAnalysis +import semmle.code.cpp.ir.implementation.unaliased_ssa.constant.ConstantAnalysis import semmle.code.cpp.ir.internal.IntegerConstant from IRFunction irFunc, int value From ea2d3fceb6155fd52be06b03ccada78f031baa3c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 18 Feb 2026 15:57:21 +0000 Subject: [PATCH 04/32] C++: Accept changes in constant_func test --- cpp/ql/test/library-tests/ir/constant_func/constant_func.cpp | 5 +++++ .../library-tests/ir/constant_func/constant_func.expected | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/constant_func/constant_func.cpp b/cpp/ql/test/library-tests/ir/constant_func/constant_func.cpp index eb5bc7d22dba..42297ab77d46 100644 --- a/cpp/ql/test/library-tests/ir/constant_func/constant_func.cpp +++ b/cpp/ql/test/library-tests/ir/constant_func/constant_func.cpp @@ -38,6 +38,11 @@ int UnreachableViaGoto() { return 0; } +/* +The unaliased IR uses the raw IR's dead code elimination and constant +analysis, so it isn't able to tell that the `return 1`s are dead code, +and thus doesn't know that this always returns the same value. +*/ int UnreachableIf(bool b) { int x = 5; int y = 10; diff --git a/cpp/ql/test/library-tests/ir/constant_func/constant_func.expected b/cpp/ql/test/library-tests/ir/constant_func/constant_func.expected index 3cba189a0ab1..05d0f684489f 100644 --- a/cpp/ql/test/library-tests/ir/constant_func/constant_func.expected +++ b/cpp/ql/test/library-tests/ir/constant_func/constant_func.expected @@ -2,5 +2,4 @@ | constant_func.cpp:5:5:5:21 | IR: ReturnConstantPhi | 7 | | constant_func.cpp:25:5:25:25 | IR: ReturnConstantPhiLoop | 7 | | constant_func.cpp:34:5:34:22 | IR: UnreachableViaGoto | 0 | -| constant_func.cpp:41:5:41:17 | IR: UnreachableIf | 0 | -| constant_func.cpp:62:5:62:16 | IR: DoWhileFalse | 1 | +| constant_func.cpp:67:5:67:16 | IR: DoWhileFalse | 1 | From 12faa37ca11cb63db97fc45627370279c823aa94 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 18 Feb 2026 22:25:58 +0000 Subject: [PATCH 05/32] C++: Update ssa_escape.ql test now we don't have aliased SSA --- .../test/library-tests/ir/escape/ssa_escape.expected | 12 ++++++++++++ cpp/ql/test/library-tests/ir/escape/ssa_escape.ql | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/escape/ssa_escape.expected b/cpp/ql/test/library-tests/ir/escape/ssa_escape.expected index e69de29bb2d1..0107eff4c1fd 100644 --- a/cpp/ql/test/library-tests/ir/escape/ssa_escape.expected +++ b/cpp/ql/test/library-tests/ir/escape/ssa_escape.expected @@ -0,0 +1,12 @@ +| escape.cpp:154:9:154:21 | no_ssa_addrOf | +| escape.cpp:157:9:157:20 | no_ssa_refTo | +| escape.cpp:160:9:160:32 | no_ssa_refToArrayElement | +| escape.cpp:163:9:163:25 | no_ssa_refToArray | +| escape.cpp:172:9:172:24 | no_ssa_passByPtr | +| escape.cpp:175:9:175:24 | no_ssa_passByRef | +| escape.cpp:178:9:178:28 | no_ssa_passByPtr_ret | +| escape.cpp:181:9:181:28 | no_ssa_passByRef_ret | +| escape.cpp:196:9:196:25 | no_ssa_passByPtr4 | +| escape.cpp:197:9:197:25 | no_ssa_passByPtr5 | +| escape.cpp:204:9:204:25 | no_ssa_passByRef7 | +| escape.cpp:207:7:207:14 | no_ssa_c | diff --git a/cpp/ql/test/library-tests/ir/escape/ssa_escape.ql b/cpp/ql/test/library-tests/ir/escape/ssa_escape.ql index e1693ba3f382..cd679812e0fa 100644 --- a/cpp/ql/test/library-tests/ir/escape/ssa_escape.ql +++ b/cpp/ql/test/library-tests/ir/escape/ssa_escape.ql @@ -1,13 +1,13 @@ import cpp -import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasAnalysis -import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasConfiguration +import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.AliasAnalysis +import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.AliasConfiguration import semmle.code.cpp.ir.implementation.unaliased_ssa.IR import semmle.code.cpp.ir.implementation.UseSoundEscapeAnalysis -class InterestingAllocation extends VariableAllocation { +class InterestingAllocation extends Allocation { IRUserVariable userVar; - InterestingAllocation() { userVar = this.getIRVariable() } + InterestingAllocation() { userVar = this } final predicate shouldEscape() { userVar.getVariable().getName().matches("no_%") } } From 9f7a41172fa9b1341a21649656db228a7ccaacb2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 18 Feb 2026 22:31:04 +0000 Subject: [PATCH 06/32] C++: Rename aliased_ir.ql to unaliased_ir.ql --- .../{aliased_ir.expected => unaliased_ir.expected} | 0 .../ir/no-function-calls/{aliased_ir.ql => unaliased_ir.ql} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename cpp/ql/test/library-tests/ir/no-function-calls/{aliased_ir.expected => unaliased_ir.expected} (100%) rename cpp/ql/test/library-tests/ir/no-function-calls/{aliased_ir.ql => unaliased_ir.ql} (100%) diff --git a/cpp/ql/test/library-tests/ir/no-function-calls/aliased_ir.expected b/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.expected similarity index 100% rename from cpp/ql/test/library-tests/ir/no-function-calls/aliased_ir.expected rename to cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.expected diff --git a/cpp/ql/test/library-tests/ir/no-function-calls/aliased_ir.ql b/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.ql similarity index 100% rename from cpp/ql/test/library-tests/ir/no-function-calls/aliased_ir.ql rename to cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.ql From 7f860a7a235a1fc4d936f24298aead0441e50f44 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 18 Feb 2026 22:31:43 +0000 Subject: [PATCH 07/32] C++: Update unaliased_ir.ql to use the unaliased IR --- .../no-function-calls/unaliased_ir.expected | 41 ++++++++----------- .../ir/no-function-calls/unaliased_ir.ql | 2 +- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.expected b/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.expected index 6b1c7a76a62b..91c485ecfdc0 100644 --- a/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.expected @@ -2,37 +2,32 @@ test.cpp: # 5| void foo(int*) # 5| Block 0 # 5| v5_1(void) = EnterFunction : -# 5| m5_2(unknown) = AliasedDefinition : -# 5| m5_3(unknown) = InitializeNonLocal : -# 5| m5_4(unknown) = Chi : total:m5_2, partial:m5_3 -# 5| r5_5(glval) = VariableAddress[x] : -# 5| m5_6(int *) = InitializeParameter[x] : &:r5_5 -# 5| r5_7(int *) = Load[x] : &:r5_5, m5_6 -# 5| m5_8(unknown) = InitializeIndirection[x] : &:r5_7 -# 5| m5_9(unknown) = Chi : total:m5_4, partial:m5_8 +# 5| mu5_2(unknown) = AliasedDefinition : +# 5| mu5_3(unknown) = InitializeNonLocal : +# 5| r5_4(glval) = VariableAddress[x] : +# 5| m5_5(int *) = InitializeParameter[x] : &:r5_4 +# 5| r5_6(int *) = Load[x] : &:r5_4, m5_5 +# 5| mu5_7(unknown) = InitializeIndirection[x] : &:r5_6 # 6| r6_1(glval) = FunctionAddress[operator delete] : # 6| r6_2(glval) = VariableAddress[x] : -# 6| r6_3(int *) = Load[x] : &:r6_2, m5_6 +# 6| r6_3(int *) = Load[x] : &:r6_2, m5_5 # 6| v6_4(void) = Call[operator delete] : func:r6_1, 0:r6_3 -# 6| m6_5(unknown) = ^CallSideEffect : ~m5_9 -# 6| m6_6(unknown) = Chi : total:m5_9, partial:m6_5 +# 6| mu6_5(unknown) = ^CallSideEffect : ~m? # 7| v7_1(void) = NoOp : -# 5| v5_10(void) = ReturnIndirection[x] : &:r5_7, ~m6_6 -# 5| v5_11(void) = ReturnVoid : -# 5| v5_12(void) = AliasedUse : ~m6_6 -# 5| v5_13(void) = ExitFunction : +# 5| v5_8(void) = ReturnIndirection[x] : &:r5_6, ~m? +# 5| v5_9(void) = ReturnVoid : +# 5| v5_10(void) = AliasedUse : ~m? +# 5| v5_11(void) = ExitFunction : # 11| void jazz() # 11| Block 0 # 11| v11_1(void) = EnterFunction : -# 11| m11_2(unknown) = AliasedDefinition : -# 11| m11_3(unknown) = InitializeNonLocal : -# 11| m11_4(unknown) = Chi : total:m11_2, partial:m11_3 +# 11| mu11_2(unknown) = AliasedDefinition : +# 11| mu11_3(unknown) = InitializeNonLocal : # 12| r12_1(glval) = FunctionAddress[bar] : # 12| v12_2(void) = Call[bar] : func:r12_1 -# 12| m12_3(unknown) = ^CallSideEffect : ~m11_4 -# 12| m12_4(unknown) = Chi : total:m11_4, partial:m12_3 +# 12| mu12_3(unknown) = ^CallSideEffect : ~m? # 13| v13_1(void) = NoOp : -# 11| v11_5(void) = ReturnVoid : -# 11| v11_6(void) = AliasedUse : ~m12_4 -# 11| v11_7(void) = ExitFunction : +# 11| v11_4(void) = ReturnVoid : +# 11| v11_5(void) = AliasedUse : ~m? +# 11| v11_6(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.ql b/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.ql index 0488fd09dbed..671834318ca4 100644 --- a/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.ql +++ b/cpp/ql/test/library-tests/ir/no-function-calls/unaliased_ir.ql @@ -3,7 +3,7 @@ */ private import cpp -private import semmle.code.cpp.ir.implementation.aliased_ssa.PrintIR +private import semmle.code.cpp.ir.implementation.unaliased_ssa.PrintIR private import PrintConfig private class PrintConfig extends PrintIRConfiguration { From bf10623c2405d6c77bda3c5550667ddb3f385c69 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 17:33:45 +0000 Subject: [PATCH 08/32] C++: Accept changes in controlflow/Ssa_Lt following removal of aliased SSA --- .../library-tests/controlflow/controlflow/SsaLt.expected | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/controlflow/controlflow/SsaLt.expected b/cpp/ql/test/library-tests/controlflow/controlflow/SsaLt.expected index 2535eee7184c..35c1c7aec9c6 100644 --- a/cpp/ql/test/library-tests/controlflow/controlflow/SsaLt.expected +++ b/cpp/ql/test/library-tests/controlflow/controlflow/SsaLt.expected @@ -11,6 +11,7 @@ | test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | < | test.c:17:12:17:12 | 0 | 50 | 52 | | test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | < | test.c:17:12:17:12 | 0 | 53 | 53 | | test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | < | test.c:17:12:17:12 | 0 | 53 | 55 | +| test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | < | test.c:17:12:17:12 | 0 | 56 | 63 | | test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | < | test.c:17:12:17:12 | 0 | 59 | 61 | | test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | < | test.c:17:12:17:12 | 0 | 64 | 71 | | test.c:2:31:72:1 | { ... } | test.c:2:14:2:14 | x | > | test.c:7:13:7:13 | 0 | 7 | 9 | @@ -22,6 +23,7 @@ | test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | < | test.c:34:15:34:15 | 0 | 50 | 52 | | test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | < | test.c:34:15:34:15 | 0 | 53 | 53 | | test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | < | test.c:34:15:34:15 | 0 | 53 | 55 | +| test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | < | test.c:34:15:34:15 | 0 | 56 | 63 | | test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | < | test.c:34:15:34:15 | 0 | 59 | 61 | | test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | < | test.c:34:15:34:15 | 0 | 64 | 71 | | test.c:34:11:34:11 | x | test.c:2:14:2:14 | x | > | test.c:34:15:34:15 | 0 | 34 | 36 | @@ -31,17 +33,20 @@ | test.c:42:16:42:16 | j | test.c:3:9:3:9 | j | > | test.c:42:20:42:21 | 10 | 50 | 52 | | test.c:42:16:42:16 | j | test.c:3:9:3:9 | j | > | test.c:42:20:42:21 | 10 | 53 | 53 | | test.c:42:16:42:16 | j | test.c:3:9:3:9 | j | > | test.c:42:20:42:21 | 10 | 53 | 55 | +| test.c:42:16:42:16 | j | test.c:3:9:3:9 | j | > | test.c:42:20:42:21 | 10 | 56 | 63 | | test.c:42:16:42:16 | j | test.c:3:9:3:9 | j | > | test.c:42:20:42:21 | 10 | 59 | 61 | | test.c:42:16:42:16 | j | test.c:3:9:3:9 | j | > | test.c:42:20:42:21 | 10 | 64 | 71 | -| test.c:47:5:47:10 | ... += ... | test.c:2:28:2:28 | z | < | test.c:52:16:52:16 | 0 | 50 | 50 | | test.c:47:5:47:10 | ... += ... | test.c:2:28:2:28 | z | < | test.c:52:16:52:16 | 0 | 59 | 61 | | test.c:47:5:47:10 | ... += ... | test.c:2:28:2:28 | z | > | test.c:52:16:52:16 | 0 | 53 | 53 | | test.c:47:5:47:10 | ... += ... | test.c:2:28:2:28 | z | > | test.c:52:16:52:16 | 0 | 53 | 55 | +| test.c:47:5:47:10 | ... += ... | test.c:2:28:2:28 | z | > | test.c:52:16:52:16 | 0 | 56 | 63 | | test.c:50:16:50:16 | j | test.c:3:9:3:9 | j | < | test.c:50:20:50:21 | 10 | 50 | 50 | | test.c:50:16:50:16 | j | test.c:3:9:3:9 | j | < | test.c:50:20:50:21 | 10 | 50 | 52 | | test.c:50:16:50:16 | j | test.c:3:9:3:9 | j | < | test.c:50:20:50:21 | 10 | 53 | 53 | | test.c:50:16:50:16 | j | test.c:3:9:3:9 | j | < | test.c:50:20:50:21 | 10 | 53 | 55 | +| test.c:50:16:50:16 | j | test.c:3:9:3:9 | j | < | test.c:50:20:50:21 | 10 | 56 | 63 | | test.c:50:16:50:16 | j | test.c:3:9:3:9 | j | < | test.c:50:20:50:21 | 10 | 59 | 61 | +| test.c:51:9:51:14 | ... = ... | test.c:4:10:4:10 | y | < | test.c:53:20:53:20 | 0 | 56 | 63 | | test.c:51:9:51:14 | ... = ... | test.c:4:10:4:10 | y | > | test.c:53:20:53:20 | 0 | 53 | 55 | | test.c:74:19:89:1 | { ... } | test.c:74:16:74:16 | a | > | test.c:79:17:79:19 | 100 | 79 | 81 | | test.cpp:9:19:9:19 | i | test.cpp:9:12:9:12 | i | < | test.cpp:9:23:9:24 | 10 | 9 | 9 | From 6decc7fd1e62fd96aa2810116ad0c237fbff2868 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 17:48:10 +0000 Subject: [PATCH 09/32] C++: Accept changes in controlflow/guards following removal of aliased SSA --- .../controlflow/guards/GuardsCompare.expected | 28 ---- .../controlflow/guards/GuardsControl.expected | 6 +- .../controlflow/guards/GuardsEnsure.expected | 143 +++--------------- 3 files changed, 30 insertions(+), 147 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 4d78c4016dab..a9318980831a 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -628,50 +628,22 @@ | test.cpp:145:23:145:29 | ... != ... | a == 42+0 when ... != ... is false | | test.cpp:151:8:151:13 | ... < ... | 10 < a+1 when ... < ... is false | | test.cpp:151:8:151:13 | ... < ... | 10 >= a+1 when ... < ... is true | -| test.cpp:151:8:151:13 | ... < ... | ... < ... != 0 when ... < ... is true | -| test.cpp:151:8:151:13 | ... < ... | ... < ... != 1 when ... < ... is false | -| test.cpp:151:8:151:13 | ... < ... | ... < ... == 0 when ... < ... is false | -| test.cpp:151:8:151:13 | ... < ... | ... < ... == 1 when ... < ... is true | | test.cpp:151:8:151:13 | ... < ... | a < 10 when ... < ... is true | | test.cpp:151:8:151:13 | ... < ... | a < 10+0 when ... < ... is true | | test.cpp:151:8:151:13 | ... < ... | a >= 10 when ... < ... is false | | test.cpp:151:8:151:13 | ... < ... | a >= 10+0 when ... < ... is false | -| test.cpp:151:8:151:13 | ... < ... | b != 0 when ... < ... is true | -| test.cpp:151:8:151:13 | ... < ... | b != 1 when ... < ... is false | -| test.cpp:151:8:151:13 | ... < ... | b == 0 when ... < ... is false | -| test.cpp:151:8:151:13 | ... < ... | b == 1 when ... < ... is true | -| test.cpp:152:7:152:8 | ! ... | 10 < a+1 when ! ... is true | -| test.cpp:152:7:152:8 | ! ... | 10 >= a+1 when ! ... is false | | test.cpp:152:7:152:8 | ! ... | ! ... != 0 when ! ... is true | | test.cpp:152:7:152:8 | ! ... | ! ... != 1 when ! ... is false | | test.cpp:152:7:152:8 | ! ... | ! ... == 0 when ! ... is false | | test.cpp:152:7:152:8 | ! ... | ! ... == 1 when ! ... is true | -| test.cpp:152:7:152:8 | ! ... | ... < ... != 0 when ! ... is false | -| test.cpp:152:7:152:8 | ! ... | ... < ... != 1 when ! ... is true | -| test.cpp:152:7:152:8 | ! ... | ... < ... == 0 when ! ... is true | -| test.cpp:152:7:152:8 | ! ... | ... < ... == 1 when ! ... is false | -| test.cpp:152:7:152:8 | ! ... | a < 10 when ! ... is false | -| test.cpp:152:7:152:8 | ! ... | a < 10+0 when ! ... is false | -| test.cpp:152:7:152:8 | ! ... | a >= 10 when ! ... is true | -| test.cpp:152:7:152:8 | ! ... | a >= 10+0 when ! ... is true | | test.cpp:152:7:152:8 | ! ... | b != 0 when ! ... is false | | test.cpp:152:7:152:8 | ! ... | b != 1 when ! ... is true | | test.cpp:152:7:152:8 | ! ... | b == 0 when ! ... is true | | test.cpp:152:7:152:8 | ! ... | b == 1 when ! ... is false | -| test.cpp:152:8:152:8 | b | 10 < a+1 when b is false | -| test.cpp:152:8:152:8 | b | 10 >= a+1 when b is true | | test.cpp:152:8:152:8 | b | ! ... != 0 when b is false | | test.cpp:152:8:152:8 | b | ! ... != 1 when b is true | | test.cpp:152:8:152:8 | b | ! ... == 0 when b is true | | test.cpp:152:8:152:8 | b | ! ... == 1 when b is false | -| test.cpp:152:8:152:8 | b | ... < ... != 0 when b is true | -| test.cpp:152:8:152:8 | b | ... < ... != 1 when b is false | -| test.cpp:152:8:152:8 | b | ... < ... == 0 when b is false | -| test.cpp:152:8:152:8 | b | ... < ... == 1 when b is true | -| test.cpp:152:8:152:8 | b | a < 10 when b is true | -| test.cpp:152:8:152:8 | b | a < 10+0 when b is true | -| test.cpp:152:8:152:8 | b | a >= 10 when b is false | -| test.cpp:152:8:152:8 | b | a >= 10+0 when b is false | | test.cpp:152:8:152:8 | b | b != 0 when b is true | | test.cpp:152:8:152:8 | b | b != 1 when b is false | | test.cpp:152:8:152:8 | b | b == 0 when b is false | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected index 947fffd95f6f..86c3ba3e38ba 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected @@ -14,6 +14,7 @@ | test.c:26:11:26:15 | ... > ... | false | test.c:42:29:44:16 | { ... } | | test.c:26:11:26:15 | ... > ... | false | test.c:45:13:45:20 | if (...) ... | | test.c:26:11:26:15 | ... > ... | false | test.c:45:23:47:22 | { ... } | +| test.c:26:11:26:15 | ... > ... | false | test.c:48:20:55:13 | { ... } | | test.c:26:11:26:15 | ... > ... | false | test.c:51:14:53:21 | { ... } | | test.c:26:11:26:15 | ... > ... | false | test.c:56:5:58:14 | label ...: | | test.c:26:11:26:15 | ... > ... | false | test.c:58:19:58:23 | y | @@ -27,6 +28,7 @@ | test.c:34:16:34:21 | ... < ... | false | test.c:42:29:44:16 | { ... } | | test.c:34:16:34:21 | ... < ... | false | test.c:45:13:45:20 | if (...) ... | | test.c:34:16:34:21 | ... < ... | false | test.c:45:23:47:22 | { ... } | +| test.c:34:16:34:21 | ... < ... | false | test.c:48:20:55:13 | { ... } | | test.c:34:16:34:21 | ... < ... | false | test.c:51:14:53:21 | { ... } | | test.c:34:16:34:21 | ... < ... | false | test.c:56:5:58:14 | label ...: | | test.c:34:16:34:21 | ... < ... | false | test.c:58:19:58:23 | y | @@ -37,11 +39,13 @@ | test.c:42:16:42:21 | ... < ... | true | test.c:42:29:44:16 | { ... } | | test.c:42:16:42:21 | ... < ... | true | test.c:45:13:45:20 | if (...) ... | | test.c:42:16:42:21 | ... < ... | true | test.c:45:23:47:22 | { ... } | +| test.c:42:16:42:21 | ... < ... | true | test.c:48:20:55:13 | { ... } | | test.c:42:16:42:21 | ... < ... | true | test.c:51:14:53:21 | { ... } | -| test.c:44:12:44:16 | ... > ... | false | test.c:42:5:42:26 | label ...: | | test.c:44:12:44:16 | ... > ... | false | test.c:51:14:53:21 | { ... } | | test.c:44:12:44:16 | ... > ... | true | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | true | test.c:45:23:47:22 | { ... } | +| test.c:44:12:44:16 | ... > ... | true | test.c:48:20:55:13 | { ... } | +| test.c:45:16:45:20 | ... > ... | false | test.c:48:20:55:13 | { ... } | | test.c:45:16:45:20 | ... > ... | true | test.c:45:23:47:22 | { ... } | | test.c:58:9:58:9 | x | not 0 | test.c:58:19:58:23 | y | | test.c:58:9:58:9 | x | not 0 | test.c:62:9:62:16 | return ... | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index 5a364e3deaad..e7d5be8b012c 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -23,6 +23,7 @@ binary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:42:29:44:16 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:45:23:47:22 | { ... } | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:48:20:55:13 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:51:14:53:21 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:56:5:58:14 | label ...: | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:58:19:58:23 | y | @@ -40,6 +41,7 @@ binary | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:42:29:44:16 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:45:23:47:22 | { ... } | +| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:48:20:55:13 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:51:14:53:21 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:56:5:58:14 | label ...: | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:58:19:58:23 | y | @@ -53,6 +55,7 @@ binary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:42:29:44:16 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:45:23:47:22 | { ... } | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:48:20:55:13 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:51:14:53:21 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:56:5:58:14 | label ...: | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:58:19:58:23 | y | @@ -65,6 +68,7 @@ binary | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:42:29:44:16 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:45:23:47:22 | { ... } | +| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:48:20:55:13 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:51:14:53:21 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:56:5:58:14 | label ...: | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:58:19:58:23 | y | @@ -75,22 +79,26 @@ binary | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:42:29:44:16 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:45:23:47:22 | { ... } | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:48:20:55:13 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:51:14:53:21 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:42:5:42:26 | label ...: | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:42:29:44:16 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:45:23:47:22 | { ... } | +| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:48:20:55:13 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:51:14:53:21 | { ... } | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | test.c:42:5:42:26 | label ...: | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | test.c:51:14:53:21 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | test.c:45:23:47:22 | { ... } | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | test.c:48:20:55:13 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | test.c:45:23:47:22 | { ... } | -| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | test.c:42:5:42:26 | label ...: | +| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | test.c:48:20:55:13 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | test.c:51:14:53:21 | { ... } | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | < | test.c:45:20:45:20 | 0 | 1 | test.c:48:20:55:13 | { ... } | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | test.c:45:20:45:20 | 0 | 1 | test.c:45:23:47:22 | { ... } | | test.c:45:16:45:20 | ... > ... | test.c:45:20:45:20 | 0 | < | test.c:45:16:45:16 | y | 0 | test.c:45:23:47:22 | { ... } | +| test.c:45:16:45:20 | ... > ... | test.c:45:20:45:20 | 0 | >= | test.c:45:16:45:16 | y | 0 | test.c:48:20:55:13 | { ... } | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | test.c:58:19:58:23 | y | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | test.c:62:9:62:16 | return ... | | test.c:58:9:58:14 | ... == ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | test.c:58:19:58:23 | y | @@ -217,10 +225,6 @@ binary | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | test.cpp:145:36:146:9 | { ... } | | test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:151:8:151:13 | ... < ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:7:152:8 | ! ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:8:152:8 | b | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:158:12:158:17 | ... != ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:158:12:158:17 | ... != ... | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } | @@ -265,40 +269,14 @@ binary | test.cpp:232:9:232:18 | ... == ... | test.cpp:232:14:232:18 | 0 | == | test.cpp:232:9:232:9 | b | 0 | test.cpp:232:21:233:13 | { ... } | | test.cpp:235:9:235:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:235:20:236:13 | { ... } | | test.cpp:235:9:235:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:235:20:236:13 | { ... } | | test.cpp:238:9:238:17 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:238:20:239:13 | { ... } | | test.cpp:238:9:238:17 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:238:20:239:13 | { ... } | -| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:238:20:239:13 | { ... } | -| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:238:20:239:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:22:241:30 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:22:241:30 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:35:241:43 | ms | @@ -307,32 +285,16 @@ binary | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:35:241:43 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:35:241:43 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:7 | a | != | test.cpp:247:12:247:12 | b | 0 | test.cpp:247:21:249:3 | { ... } | @@ -529,6 +491,7 @@ unary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:42:29:44:16 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:45:23:47:22 | { ... } | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:48:20:55:13 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:51:14:53:21 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:56:5:58:14 | label ...: | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:58:19:58:23 | y | @@ -546,6 +509,7 @@ unary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:42:29:44:16 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:45:23:47:22 | { ... } | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:48:20:55:13 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:51:14:53:21 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:56:5:58:14 | label ...: | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:58:19:58:23 | y | @@ -561,6 +525,7 @@ unary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:42:29:44:16 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:45:23:47:22 | { ... } | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:48:20:55:13 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:51:14:53:21 | { ... } | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:56:5:58:14 | label ...: | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:58:19:58:23 | y | @@ -575,6 +540,7 @@ unary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:42:29:44:16 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:45:13:45:20 | if (...) ... | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:45:23:47:22 | { ... } | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:48:20:55:13 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:51:14:53:21 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:56:5:58:14 | label ...: | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:58:19:58:23 | y | @@ -588,6 +554,7 @@ unary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:42:29:44:16 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:45:23:47:22 | { ... } | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:48:20:55:13 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:51:14:53:21 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:56:5:58:14 | label ...: | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:58:19:58:23 | y | @@ -600,6 +567,7 @@ unary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:42:29:44:16 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:45:23:47:22 | { ... } | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:48:20:55:13 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:51:14:53:21 | { ... } | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:56:5:58:14 | label ...: | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:58:19:58:23 | y | @@ -610,31 +578,37 @@ unary | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:42:29:44:16 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:45:13:45:20 | if (...) ... | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:45:23:47:22 | { ... } | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:48:20:55:13 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:51:14:53:21 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:42:5:42:26 | label ...: | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:42:29:44:16 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:45:23:47:22 | { ... } | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:48:20:55:13 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:51:14:53:21 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:42:5:42:26 | label ...: | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:42:29:44:16 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:45:23:47:22 | { ... } | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:48:20:55:13 | { ... } | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:51:14:53:21 | { ... } | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | test.c:42:5:42:26 | label ...: | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | test.c:51:14:53:21 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | test.c:45:23:47:22 | { ... } | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | test.c:48:20:55:13 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | test.c:45:23:47:22 | { ... } | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | test.c:42:5:42:26 | label ...: | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | test.c:48:20:55:13 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | test.c:51:14:53:21 | { ... } | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | test.c:42:5:42:26 | label ...: | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | test.c:51:14:53:21 | { ... } | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | test.c:45:23:47:22 | { ... } | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | test.c:48:20:55:13 | { ... } | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | < | 1 | test.c:48:20:55:13 | { ... } | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | 1 | test.c:45:23:47:22 | { ... } | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 0 | test.c:45:23:47:22 | { ... } | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 1 | test.c:48:20:55:13 | { ... } | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 0 | test.c:48:20:55:13 | { ... } | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 1 | test.c:45:23:47:22 | { ... } | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | test.c:58:19:58:23 | y | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | test.c:62:9:62:16 | return ... | @@ -912,20 +886,10 @@ unary | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | == | 1 | test.cpp:145:36:146:9 | { ... } | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | test.cpp:145:36:146:9 | { ... } | | test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:151:8:151:13 | ... < ... | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:151:8:151:13 | ... < ... | test.cpp:152:8:152:8 | b | == | 0 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | != | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | == | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | == | 0 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } | -| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | != | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | == | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } | @@ -1121,25 +1085,8 @@ unary | test.cpp:235:9:235:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:235:20:236:13 | { ... } | | test.cpp:235:9:235:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:235:20:236:13 | { ... } | | test.cpp:235:9:235:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:235:20:236:13 | { ... } | -| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:235:20:236:13 | { ... } | | test.cpp:238:9:238:17 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:238:20:239:13 | { ... } | | test.cpp:238:9:238:17 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:238:20:239:13 | { ... } | -| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:238:20:239:13 | { ... } | -| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:238:20:239:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:22:241:30 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | @@ -1149,25 +1096,6 @@ unary | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:22:241:30 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:22:241:30 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | @@ -1178,17 +1106,6 @@ unary | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | @@ -1197,20 +1114,10 @@ unary | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | -| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms | | test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | -| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:35:241:43 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:35:241:43 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:35:241:43 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } | From 59ed64458d1327701d67b463ce9f94c387e29a45 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 17:50:28 +0000 Subject: [PATCH 10/32] C++: Accept changes in controlflow/guards-ir following removal of aliased SSA --- .../controlflow/guards-ir/tests.expected | 93 +++++++++++++------ 1 file changed, 67 insertions(+), 26 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index 62cecc059154..ea032f57a5e9 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -322,6 +322,7 @@ astGuardsControl | test.c:26:11:26:15 | ... > ... | false | 42 | 44 | | test.c:26:11:26:15 | ... > ... | false | 45 | 45 | | test.c:26:11:26:15 | ... > ... | false | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | false | 48 | 55 | | test.c:26:11:26:15 | ... > ... | false | 51 | 53 | | test.c:26:11:26:15 | ... > ... | false | 56 | 58 | | test.c:26:11:26:15 | ... > ... | false | 58 | 58 | @@ -334,6 +335,7 @@ astGuardsControl | test.c:34:16:34:21 | ... < ... | false | 42 | 44 | | test.c:34:16:34:21 | ... < ... | false | 45 | 45 | | test.c:34:16:34:21 | ... < ... | false | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | false | 48 | 55 | | test.c:34:16:34:21 | ... < ... | false | 51 | 53 | | test.c:34:16:34:21 | ... < ... | false | 56 | 58 | | test.c:34:16:34:21 | ... < ... | false | 58 | 58 | @@ -344,11 +346,13 @@ astGuardsControl | test.c:42:16:42:21 | ... < ... | true | 42 | 44 | | test.c:42:16:42:21 | ... < ... | true | 45 | 45 | | test.c:42:16:42:21 | ... < ... | true | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | true | 48 | 55 | | test.c:42:16:42:21 | ... < ... | true | 51 | 53 | -| test.c:44:12:44:16 | ... > ... | false | 42 | 42 | | test.c:44:12:44:16 | ... > ... | false | 51 | 53 | | test.c:44:12:44:16 | ... > ... | true | 45 | 45 | | test.c:44:12:44:16 | ... > ... | true | 45 | 47 | +| test.c:44:12:44:16 | ... > ... | true | 48 | 55 | +| test.c:45:16:45:20 | ... > ... | false | 48 | 55 | | test.c:45:16:45:20 | ... > ... | true | 45 | 47 | | test.c:58:9:58:14 | ... == ... | false | 58 | 58 | | test.c:58:9:58:14 | ... == ... | false | 62 | 62 | @@ -433,6 +437,7 @@ astGuardsEnsure | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 42 | 44 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 45 | 45 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 48 | 55 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 51 | 53 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 56 | 58 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 58 | 58 | @@ -448,6 +453,7 @@ astGuardsEnsure | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 42 | 44 | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 45 | 45 | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 48 | 55 | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 51 | 53 | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 56 | 58 | | test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 58 | 58 | @@ -460,6 +466,7 @@ astGuardsEnsure | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 42 | 44 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 45 | 45 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 48 | 55 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 51 | 53 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 56 | 58 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 58 | 58 | @@ -471,6 +478,7 @@ astGuardsEnsure | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 42 | 44 | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 45 | 45 | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 48 | 55 | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 51 | 53 | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 56 | 58 | | test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 58 | 58 | @@ -481,22 +489,26 @@ astGuardsEnsure | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 42 | 44 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 45 | 45 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 48 | 55 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 51 | 53 | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 42 | 42 | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 42 | 44 | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 45 | 45 | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 48 | 55 | | test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 51 | 53 | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | 42 | 42 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | 45 | 47 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | 48 | 55 | | test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | 45 | 47 | -| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | 42 | 42 | +| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | 48 | 55 | | test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | 51 | 53 | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | < | test.c:45:20:45:20 | 0 | 1 | 48 | 55 | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | test.c:45:20:45:20 | 0 | 1 | 45 | 47 | | test.c:45:16:45:20 | ... > ... | test.c:45:20:45:20 | 0 | < | test.c:45:16:45:16 | y | 0 | 45 | 47 | +| test.c:45:16:45:20 | ... > ... | test.c:45:20:45:20 | 0 | >= | test.c:45:16:45:16 | y | 0 | 48 | 55 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | 58 | 58 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | 62 | 62 | | test.c:58:9:58:14 | ... == ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | 58 | 58 | @@ -617,6 +629,7 @@ astGuardsEnsure_const | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 44 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 45 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 48 | 55 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 51 | 53 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 56 | 58 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 58 | @@ -630,6 +643,7 @@ astGuardsEnsure_const | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 44 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 45 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 48 | 55 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 51 | 53 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 56 | 58 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 58 | @@ -643,6 +657,7 @@ astGuardsEnsure_const | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 44 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 45 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 48 | 55 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 51 | 53 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 56 | 58 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 58 | @@ -654,6 +669,7 @@ astGuardsEnsure_const | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 44 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 45 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 48 | 55 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 51 | 53 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 56 | 58 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 58 | @@ -664,21 +680,25 @@ astGuardsEnsure_const | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 42 | 44 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 45 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 48 | 55 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 51 | 53 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 42 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 44 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 45 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 48 | 55 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 47 | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 42 | 42 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 48 | 55 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 51 | 53 | -| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 42 | 42 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 47 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 48 | 55 | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 0 | 45 | 47 | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 1 | 48 | 55 | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 0 | 48 | 55 | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 1 | 45 | 47 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | @@ -1167,6 +1187,7 @@ irGuardsControl | test.c:26:11:26:15 | CompareGT: ... > ... | false | 43 | 43 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 45 | 45 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | false | 49 | 49 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 52 | 52 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 56 | 56 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 58 | 58 | @@ -1182,6 +1203,7 @@ irGuardsControl | test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 43 | 43 | | test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 45 | 45 | | test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 46 | 46 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 49 | 49 | | test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 52 | 52 | | test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 56 | 56 | | test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 58 | 58 | @@ -1194,6 +1216,7 @@ irGuardsControl | test.c:34:16:34:21 | CompareLT: ... < ... | false | 43 | 43 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 45 | 45 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | false | 49 | 49 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 52 | 52 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 56 | 56 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 58 | 58 | @@ -1206,33 +1229,36 @@ irGuardsControl | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 43 | 43 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 45 | 45 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 46 | 46 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 49 | 49 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 52 | 52 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 56 | 56 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 58 | 58 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 59 | 59 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 62 | 62 | | test.c:34:16:34:21 | ConditionalBranch: ... < ... | true | 35 | 35 | -| test.c:42:16:42:21 | CompareLT: ... < ... | true | 2 | 2 | +| test.c:42:16:42:21 | CompareLT: ... < ... | true | 42 | 42 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | true | 49 | 49 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 52 | 52 | -| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 2 | 2 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 42 | 42 | | test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 43 | 43 | | test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 45 | 45 | | test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 46 | 46 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 49 | 49 | | test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | false | 52 | 52 | -| test.c:44:12:44:16 | CompareGT: ... > ... | true | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | true | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | true | 46 | 46 | +| test.c:44:12:44:16 | CompareGT: ... > ... | true | 49 | 49 | | test.c:44:12:44:16 | ConditionalBranch: ... > ... | false | 52 | 52 | -| test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 2 | 2 | | test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 45 | 45 | | test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 46 | 46 | -| test.c:45:16:45:20 | CompareGT: ... > ... | false | 2 | 2 | +| test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 49 | 49 | +| test.c:45:16:45:20 | CompareGT: ... > ... | false | 49 | 49 | | test.c:45:16:45:20 | CompareGT: ... > ... | true | 46 | 46 | -| test.c:45:16:45:20 | ConditionalBranch: ... > ... | false | 2 | 2 | +| test.c:45:16:45:20 | ConditionalBranch: ... > ... | false | 49 | 49 | | test.c:45:16:45:20 | ConditionalBranch: ... > ... | true | 46 | 46 | | test.c:58:9:58:14 | CompareEQ: ... == ... | false | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | false | 62 | 62 | @@ -1362,6 +1388,7 @@ irGuardsEnsure | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 43 | 43 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 45 | 45 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 49 | 49 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 52 | 52 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 56 | 56 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | test.c:26:15:26:15 | Constant: 0 | 1 | 58 | 58 | @@ -1378,6 +1405,7 @@ irGuardsEnsure | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 43 | 43 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 45 | 45 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 49 | 49 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 52 | 52 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 56 | 56 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:15:26:15 | Constant: 0 | >= | test.c:26:11:26:11 | Load: x | 0 | 58 | 58 | @@ -1390,6 +1418,7 @@ irGuardsEnsure | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 43 | 43 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 45 | 45 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 49 | 49 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 52 | 52 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 56 | 56 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | test.c:34:20:34:21 | Constant: 10 | 0 | 58 | 58 | @@ -1401,34 +1430,37 @@ irGuardsEnsure | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 43 | 43 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 45 | 45 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 49 | 49 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 52 | 52 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 56 | 56 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 58 | 58 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | >= | test.c:34:16:34:16 | Load: j | 1 | 35 | 35 | -| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 2 | 2 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 42 | 42 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 49 | 49 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 52 | 52 | -| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 2 | 2 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 42 | 42 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 49 | 49 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | test.c:44:16:44:16 | Constant: 0 | 1 | 52 | 52 | -| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 46 | 46 | -| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 2 | 2 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 49 | 49 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 46 | 46 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 49 | 49 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | >= | test.c:44:12:44:12 | Load: z | 0 | 52 | 52 | -| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | < | test.c:45:20:45:20 | Constant: (long)... | 1 | 2 | 2 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | < | test.c:45:20:45:20 | Constant: (long)... | 1 | 49 | 49 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | test.c:45:20:45:20 | Constant: (long)... | 1 | 46 | 46 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:20:45:20 | Constant: (long)... | < | test.c:45:16:45:16 | Load: y | 0 | 46 | 46 | -| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:20:45:20 | Constant: (long)... | >= | test.c:45:16:45:16 | Load: y | 0 | 2 | 2 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:20:45:20 | Constant: (long)... | >= | test.c:45:16:45:16 | Load: y | 0 | 49 | 49 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | test.c:58:14:58:14 | Constant: 0 | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | test.c:58:14:58:14 | Constant: 0 | 0 | 62 | 62 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:14:58:14 | Constant: 0 | != | test.c:58:9:58:9 | Load: x | 0 | 58 | 58 | @@ -1574,6 +1606,7 @@ irGuardsEnsure_const | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 43 | 43 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 45 | 45 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 49 | 49 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 52 | 52 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 56 | 56 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 58 | 58 | @@ -1590,6 +1623,7 @@ irGuardsEnsure_const | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 43 | 43 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 45 | 45 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 49 | 49 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 52 | 52 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 56 | 56 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 58 | 58 | @@ -1604,6 +1638,7 @@ irGuardsEnsure_const | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 43 | 43 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 45 | 45 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 49 | 49 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 52 | 52 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 56 | 56 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 58 | 58 | @@ -1617,6 +1652,7 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 43 | 43 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 45 | 45 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 49 | 49 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 52 | 52 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 56 | 56 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 58 | 58 | @@ -1629,6 +1665,7 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 43 | 43 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 45 | 45 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 49 | 49 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 52 | 52 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 56 | 56 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 58 | 58 | @@ -1640,44 +1677,48 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 43 | 43 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 45 | 45 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 49 | 49 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 52 | 52 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 56 | 56 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 58 | 58 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 1 | 35 | 35 | -| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 2 | 2 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 42 | 42 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 49 | 49 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 52 | 52 | -| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 2 | 2 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 42 | 42 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 49 | 49 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 52 | 52 | -| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 2 | 2 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 42 | 42 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 49 | 49 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | 1 | 52 | 52 | -| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 46 | 46 | -| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 2 | 2 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 49 | 49 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 46 | 46 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 49 | 49 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 0 | 52 | 52 | -| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 46 | 46 | -| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | < | 1 | 2 | 2 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 49 | 49 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | < | 1 | 49 | 49 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | 1 | 46 | 46 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | != | 0 | 46 | 46 | -| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | != | 1 | 2 | 2 | -| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | == | 0 | 2 | 2 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | != | 1 | 49 | 49 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | == | 0 | 49 | 49 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | == | 1 | 46 | 46 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | From 36188102ad0236013567656c95f8817ccf726d1f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 17:56:30 +0000 Subject: [PATCH 11/32] C++: Fix dataflow/dataflow-tests following removal of aliased SSA --- .../library-tests/dataflow/dataflow-tests/BarrierGuard.cpp | 4 ++-- .../dataflow/dataflow-tests/test-source-sink.expected | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp index 5cddd92d27b3..48a89ec2c229 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp @@ -48,7 +48,7 @@ struct XY { void bg_stackstruct(XY s1, XY s2) { s1.x = source(); if (guarded(s1.x)) { - sink(s1.x); // $ SPURIOUS: ast + sink(s1.x); // $ SPURIOUS: ast,ir } else if (guarded(s1.y)) { sink(s1.x); // $ ast,ir } else if (guarded(s2.y)) { @@ -59,7 +59,7 @@ void bg_stackstruct(XY s1, XY s2) { void bg_structptr(XY *p1, XY *p2) { // $ ast-def=p1 ast-def=p2 ir-def=*p1 ir-def=*p2 p1->x = source(); if (guarded(p1->x)) { - sink(p1->x); // $ SPURIOUS: ast + sink(p1->x); // $ SPURIOUS: ast,ir } else if (guarded(p1->y)) { sink(p1->x); // $ ast,ir } else if (guarded(p2->x)) { diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 03a106208a5b..5c4eb75d864a 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -183,8 +183,10 @@ irFlow | BarrierGuard.cpp:21:17:21:22 | source | BarrierGuard.cpp:25:10:25:15 | source | | BarrierGuard.cpp:29:16:29:21 | source | BarrierGuard.cpp:31:10:31:15 | source | | BarrierGuard.cpp:29:16:29:21 | source | BarrierGuard.cpp:33:10:33:15 | source | +| BarrierGuard.cpp:49:10:49:15 | call to source | BarrierGuard.cpp:51:13:51:13 | x | | BarrierGuard.cpp:49:10:49:15 | call to source | BarrierGuard.cpp:53:13:53:13 | x | | BarrierGuard.cpp:49:10:49:15 | call to source | BarrierGuard.cpp:55:13:55:13 | x | +| BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:62:14:62:14 | x | | BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:64:14:64:14 | x | | BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:66:14:66:14 | x | | BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:170:10:170:10 | x | From dbf497e28da575b2951a836c6b8c38bbe562e3b7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 18:19:16 +0000 Subject: [PATCH 12/32] C++: Fix valuenumbering/GlobalValueNumbering following removal of aliased SSA --- .../GlobalValueNumbering/ast_ir_gvn.expected | 19 +- .../GlobalValueNumbering/ir_gvn.expected | 990 +++++++++--------- .../GlobalValueNumbering/ir_gvn.ql | 2 +- 3 files changed, 470 insertions(+), 541 deletions(-) diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ast_ir_gvn.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ast_ir_gvn.expected index 2e8aecd11a6b..87c3422500e4 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ast_ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ast_ir_gvn.expected @@ -5,9 +5,8 @@ | test.cpp:16:3:16:3 | GVN | 16:c3-c3 17:c3-c3 | | test.cpp:16:7:16:8 | GVN | 16:c7-c8 17:c7-c8 | | test.cpp:16:7:16:13 | GVN | 16:c7-c13 17:c7-c13 | -| test.cpp:16:7:16:24 | GVN | 16:c7-c24 17:c7-c24 18:c7-c7 | | test.cpp:16:12:16:13 | GVN | 16:c12-c13 17:c12-c13 | -| test.cpp:16:17:16:24 | GVN | 16:c17-c24 17:c17-c24 | +| test.cpp:17:7:17:24 | GVN | 17:c7-c24 18:c7-c7 | | test.cpp:29:3:29:3 | GVN | 29:c3-c3 31:c3-c3 | | test.cpp:29:7:29:8 | GVN | 29:c7-c8 31:c7-c8 | | test.cpp:29:7:29:13 | GVN | 29:c7-c13 31:c7-c13 | @@ -16,16 +15,11 @@ | test.cpp:43:3:43:3 | GVN | 43:c3-c3 45:c3-c3 | | test.cpp:43:7:43:8 | GVN | 43:c7-c8 45:c7-c8 | | test.cpp:43:7:43:13 | GVN | 43:c7-c13 45:c7-c13 | -| test.cpp:43:7:43:24 | GVN | 43:c7-c24 45:c7-c24 46:c7-c7 | | test.cpp:43:12:43:13 | GVN | 43:c12-c13 45:c12-c13 | -| test.cpp:43:17:43:24 | GVN | 43:c17-c24 45:c17-c24 | | test.cpp:44:3:44:5 | GVN | 44:c3-c5 44:c4-c5 | -| test.cpp:53:10:53:13 | GVN | 53:c10-c13 56:c21-c24 | -| test.cpp:53:10:53:13 | GVN | 53:c10-c13 56:c21-c24 | +| test.cpp:45:7:45:24 | GVN | 45:c7-c24 46:c7-c7 | | test.cpp:53:11:53:13 | GVN | 53:c11-c13 56:c22-c24 | | test.cpp:53:18:53:21 | GVN | 53:c18-c21 56:c39-c42 59:c17-c20 | -| test.cpp:56:13:56:16 | GVN | 56:c13-c16 56:c31-c34 59:c9-c12 | -| test.cpp:56:13:56:16 | GVN | 56:c13-c16 56:c31-c34 59:c9-c12 | | test.cpp:56:14:56:16 | GVN | 56:c14-c16 56:c32-c34 56:c47-c49 59:c10-c12 | | test.cpp:62:5:62:10 | GVN | 62:c5-c10 65:c10-c15 | | test.cpp:77:20:77:28 | GVN | 77:c20-c28 79:c7-c7 | @@ -33,14 +27,7 @@ | test.cpp:92:11:92:16 | GVN | 92:c11-c16 92:c15-c16 93:c10-c10 | | test.cpp:105:11:105:12 | GVN | 105:c11-c12 106:c33-c34 | | test.cpp:105:11:105:12 | GVN | 105:c11-c12 106:c33-c34 107:c11-c12 | -| test.cpp:105:15:105:15 | GVN | 105:c15-c15 107:c15-c15 109:c10-c10 | +| test.cpp:107:15:107:15 | GVN | 107:c15-c15 109:c10-c10 | | test.cpp:113:3:113:5 | GVN | 113:c3-c5 115:c3-c5 | | test.cpp:125:11:125:12 | GVN | 125:c11-c12 126:c11-c12 128:c3-c4 129:c11-c12 | -| test.cpp:125:15:125:15 | GVN | 125:c15-c15 126:c15-c15 | -| test.cpp:128:11:128:11 | GVN | 128:c11-c11 129:c15-c15 | -| test.cpp:136:11:136:18 | GVN | 136:c11-c18 137:c11-c18 139:c3-c10 | -| test.cpp:136:21:136:21 | GVN | 136:c21-c21 137:c21-c21 | | test.cpp:144:11:144:12 | GVN | 144:c11-c12 145:c11-c12 147:c3-c4 149:c11-c12 | -| test.cpp:144:15:144:15 | GVN | 144:c15-c15 149:c15-c15 | -| test.cpp:153:11:153:18 | GVN | 153:c11-c18 154:c11-c18 156:c3-c10 | -| test.cpp:153:21:153:21 | GVN | 153:c21-c21 154:c21-c21 | diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected index 4688c5b75285..6e9b633bbc7b 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected @@ -2,20 +2,18 @@ test.cpp: # 1| void test00(int, int) # 1| Block 0 # 1| v1_1(void) = EnterFunction : -# 1| m1_2(unknown) = AliasedDefinition : +# 1| mu1_2(unknown) = AliasedDefinition : # 1| valnum = unique -# 1| m1_3(unknown) = InitializeNonLocal : +# 1| mu1_3(unknown) = InitializeNonLocal : # 1| valnum = unique -# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 -# 1| valnum = unique -# 1| r1_5(glval) = VariableAddress[p0] : -# 1| valnum = r1_5, r5_1, r6_1 -# 1| m1_6(int) = InitializeParameter[p0] : &:r1_5 -# 1| valnum = m1_6, r5_2, r6_2 -# 1| r1_7(glval) = VariableAddress[p1] : -# 1| valnum = r1_7, r5_3, r6_3 -# 1| m1_8(int) = InitializeParameter[p1] : &:r1_7 -# 1| valnum = m1_8, r5_4, r6_4 +# 1| r1_4(glval) = VariableAddress[p0] : +# 1| valnum = r1_4, r5_1, r6_1 +# 1| m1_5(int) = InitializeParameter[p0] : &:r1_4 +# 1| valnum = m1_5, r5_2, r6_2 +# 1| r1_6(glval) = VariableAddress[p1] : +# 1| valnum = r1_6, r5_3, r6_3 +# 1| m1_7(int) = InitializeParameter[p1] : &:r1_6 +# 1| valnum = m1_7, r5_4, r6_4 # 2| r2_1(glval) = VariableAddress[x] : # 2| valnum = r2_1, r5_6, r6_6, r7_1 # 2| m2_2(int) = Uninitialized[x] : &:r2_1 @@ -29,13 +27,13 @@ test.cpp: # 3| m3_2(unsigned char) = Uninitialized[b] : &:r3_1 # 3| valnum = unique # 5| r5_1(glval) = VariableAddress[p0] : -# 5| valnum = r1_5, r5_1, r6_1 -# 5| r5_2(int) = Load[p0] : &:r5_1, m1_6 -# 5| valnum = m1_6, r5_2, r6_2 +# 5| valnum = r1_4, r5_1, r6_1 +# 5| r5_2(int) = Load[p0] : &:r5_1, m1_5 +# 5| valnum = m1_5, r5_2, r6_2 # 5| r5_3(glval) = VariableAddress[p1] : -# 5| valnum = r1_7, r5_3, r6_3 -# 5| r5_4(int) = Load[p1] : &:r5_3, m1_8 -# 5| valnum = m1_8, r5_4, r6_4 +# 5| valnum = r1_6, r5_3, r6_3 +# 5| r5_4(int) = Load[p1] : &:r5_3, m1_7 +# 5| valnum = m1_7, r5_4, r6_4 # 5| r5_5(int) = Add : r5_2, r5_4 # 5| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2 # 5| r5_6(glval) = VariableAddress[x] : @@ -43,13 +41,13 @@ test.cpp: # 5| m5_7(int) = Store[x] : &:r5_6, r5_5 # 5| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2 # 6| r6_1(glval) = VariableAddress[p0] : -# 6| valnum = r1_5, r5_1, r6_1 -# 6| r6_2(int) = Load[p0] : &:r6_1, m1_6 -# 6| valnum = m1_6, r5_2, r6_2 +# 6| valnum = r1_4, r5_1, r6_1 +# 6| r6_2(int) = Load[p0] : &:r6_1, m1_5 +# 6| valnum = m1_5, r5_2, r6_2 # 6| r6_3(glval) = VariableAddress[p1] : -# 6| valnum = r1_7, r5_3, r6_3 -# 6| r6_4(int) = Load[p1] : &:r6_3, m1_8 -# 6| valnum = m1_8, r5_4, r6_4 +# 6| valnum = r1_6, r5_3, r6_3 +# 6| r6_4(int) = Load[p1] : &:r6_3, m1_7 +# 6| valnum = m1_7, r5_4, r6_4 # 6| r6_5(int) = Add : r6_2, r6_4 # 6| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2 # 6| r6_6(glval) = VariableAddress[x] : @@ -65,44 +63,40 @@ test.cpp: # 7| m7_4(int) = Store[y] : &:r7_3, r7_2 # 7| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2 # 8| v8_1(void) = NoOp : -# 1| v1_9(void) = ReturnVoid : -# 1| v1_10(void) = AliasedUse : m1_3 -# 1| v1_11(void) = ExitFunction : +# 1| v1_8(void) = ReturnVoid : +# 1| v1_9(void) = AliasedUse : ~m? +# 1| v1_10(void) = ExitFunction : # 10| int global01 # 10| Block 0 # 10| v10_1(void) = EnterFunction : -# 10| m10_2(unknown) = AliasedDefinition : +# 10| mu10_2(unknown) = AliasedDefinition : # 10| valnum = unique # 10| r10_3(glval) = VariableAddress[global01] : # 10| valnum = unique # 10| r10_4(int) = Constant[1] : -# 10| valnum = m10_5, r10_4 -# 10| m10_5(int) = Store[global01] : &:r10_3, r10_4 -# 10| valnum = m10_5, r10_4 -# 10| m10_6(unknown) = Chi : total:m10_2, partial:m10_5 -# 10| valnum = unique -# 10| v10_7(void) = ReturnVoid : -# 10| v10_8(void) = AliasedUse : ~m10_6 -# 10| v10_9(void) = ExitFunction : +# 10| valnum = mu10_5, r10_4 +# 10| mu10_5(int) = Store[global01] : &:r10_3, r10_4 +# 10| valnum = mu10_5, r10_4 +# 10| v10_6(void) = ReturnVoid : +# 10| v10_7(void) = AliasedUse : ~m? +# 10| v10_8(void) = ExitFunction : # 12| void test01(int, int) # 12| Block 0 # 12| v12_1(void) = EnterFunction : -# 12| m12_2(unknown) = AliasedDefinition : -# 12| valnum = unique -# 12| m12_3(unknown) = InitializeNonLocal : +# 12| mu12_2(unknown) = AliasedDefinition : # 12| valnum = unique -# 12| m12_4(unknown) = Chi : total:m12_2, partial:m12_3 +# 12| mu12_3(unknown) = InitializeNonLocal : # 12| valnum = unique -# 12| r12_5(glval) = VariableAddress[p0] : -# 12| valnum = r12_5, r16_1, r17_1 -# 12| m12_6(int) = InitializeParameter[p0] : &:r12_5 -# 12| valnum = m12_6, r16_2, r17_2 -# 12| r12_7(glval) = VariableAddress[p1] : -# 12| valnum = r12_7, r16_3, r17_3 -# 12| m12_8(int) = InitializeParameter[p1] : &:r12_7 -# 12| valnum = m12_8, r16_4, r17_4 +# 12| r12_4(glval) = VariableAddress[p0] : +# 12| valnum = r12_4, r16_1, r17_1 +# 12| m12_5(int) = InitializeParameter[p0] : &:r12_4 +# 12| valnum = m12_5, r16_2, r17_2 +# 12| r12_6(glval) = VariableAddress[p1] : +# 12| valnum = r12_6, r16_3, r17_3 +# 12| m12_7(int) = InitializeParameter[p1] : &:r12_6 +# 12| valnum = m12_7, r16_4, r17_4 # 13| r13_1(glval) = VariableAddress[x] : # 13| valnum = r13_1, r16_9, r17_9, r18_1 # 13| m13_2(int) = Uninitialized[x] : &:r13_1 @@ -116,92 +110,88 @@ test.cpp: # 14| m14_2(unsigned char) = Uninitialized[b] : &:r14_1 # 14| valnum = unique # 16| r16_1(glval) = VariableAddress[p0] : -# 16| valnum = r12_5, r16_1, r17_1 -# 16| r16_2(int) = Load[p0] : &:r16_1, m12_6 -# 16| valnum = m12_6, r16_2, r17_2 +# 16| valnum = r12_4, r16_1, r17_1 +# 16| r16_2(int) = Load[p0] : &:r16_1, m12_5 +# 16| valnum = m12_5, r16_2, r17_2 # 16| r16_3(glval) = VariableAddress[p1] : -# 16| valnum = r12_7, r16_3, r17_3 -# 16| r16_4(int) = Load[p1] : &:r16_3, m12_8 -# 16| valnum = m12_8, r16_4, r17_4 +# 16| valnum = r12_6, r16_3, r17_3 +# 16| r16_4(int) = Load[p1] : &:r16_3, m12_7 +# 16| valnum = m12_7, r16_4, r17_4 # 16| r16_5(int) = Add : r16_2, r16_4 # 16| valnum = r16_5, r17_5 # 16| r16_6(glval) = VariableAddress[global01] : # 16| valnum = r16_6, r17_6 -# 16| r16_7(int) = Load[global01] : &:r16_6, ~m12_3 -# 16| valnum = r16_7, r17_7 +# 16| r16_7(int) = Load[global01] : &:r16_6, ~m? +# 16| valnum = unique # 16| r16_8(int) = Add : r16_5, r16_7 -# 16| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2 +# 16| valnum = m16_10, r16_8 # 16| r16_9(glval) = VariableAddress[x] : # 16| valnum = r13_1, r16_9, r17_9, r18_1 # 16| m16_10(int) = Store[x] : &:r16_9, r16_8 -# 16| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2 +# 16| valnum = m16_10, r16_8 # 17| r17_1(glval) = VariableAddress[p0] : -# 17| valnum = r12_5, r16_1, r17_1 -# 17| r17_2(int) = Load[p0] : &:r17_1, m12_6 -# 17| valnum = m12_6, r16_2, r17_2 +# 17| valnum = r12_4, r16_1, r17_1 +# 17| r17_2(int) = Load[p0] : &:r17_1, m12_5 +# 17| valnum = m12_5, r16_2, r17_2 # 17| r17_3(glval) = VariableAddress[p1] : -# 17| valnum = r12_7, r16_3, r17_3 -# 17| r17_4(int) = Load[p1] : &:r17_3, m12_8 -# 17| valnum = m12_8, r16_4, r17_4 +# 17| valnum = r12_6, r16_3, r17_3 +# 17| r17_4(int) = Load[p1] : &:r17_3, m12_7 +# 17| valnum = m12_7, r16_4, r17_4 # 17| r17_5(int) = Add : r17_2, r17_4 # 17| valnum = r16_5, r17_5 # 17| r17_6(glval) = VariableAddress[global01] : # 17| valnum = r16_6, r17_6 -# 17| r17_7(int) = Load[global01] : &:r17_6, ~m12_3 -# 17| valnum = r16_7, r17_7 +# 17| r17_7(int) = Load[global01] : &:r17_6, ~m? +# 17| valnum = unique # 17| r17_8(int) = Add : r17_5, r17_7 -# 17| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2 +# 17| valnum = m17_10, m18_4, r17_8, r18_2 # 17| r17_9(glval) = VariableAddress[x] : # 17| valnum = r13_1, r16_9, r17_9, r18_1 # 17| m17_10(int) = Store[x] : &:r17_9, r17_8 -# 17| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2 +# 17| valnum = m17_10, m18_4, r17_8, r18_2 # 18| r18_1(glval) = VariableAddress[x] : # 18| valnum = r13_1, r16_9, r17_9, r18_1 # 18| r18_2(int) = Load[x] : &:r18_1, m17_10 -# 18| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2 +# 18| valnum = m17_10, m18_4, r17_8, r18_2 # 18| r18_3(glval) = VariableAddress[y] : # 18| valnum = r13_3, r18_3 # 18| m18_4(int) = Store[y] : &:r18_3, r18_2 -# 18| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2 +# 18| valnum = m17_10, m18_4, r17_8, r18_2 # 19| v19_1(void) = NoOp : -# 12| v12_9(void) = ReturnVoid : -# 12| v12_10(void) = AliasedUse : m12_3 -# 12| v12_11(void) = ExitFunction : +# 12| v12_8(void) = ReturnVoid : +# 12| v12_9(void) = AliasedUse : ~m? +# 12| v12_10(void) = ExitFunction : # 21| int global02 # 21| Block 0 # 21| v21_1(void) = EnterFunction : -# 21| m21_2(unknown) = AliasedDefinition : +# 21| mu21_2(unknown) = AliasedDefinition : # 21| valnum = unique # 21| r21_3(glval) = VariableAddress[global02] : # 21| valnum = unique # 21| r21_4(int) = Constant[2] : -# 21| valnum = m21_5, r21_4 -# 21| m21_5(int) = Store[global02] : &:r21_3, r21_4 -# 21| valnum = m21_5, r21_4 -# 21| m21_6(unknown) = Chi : total:m21_2, partial:m21_5 -# 21| valnum = unique -# 21| v21_7(void) = ReturnVoid : -# 21| v21_8(void) = AliasedUse : ~m21_6 -# 21| v21_9(void) = ExitFunction : +# 21| valnum = mu21_5, r21_4 +# 21| mu21_5(int) = Store[global02] : &:r21_3, r21_4 +# 21| valnum = mu21_5, r21_4 +# 21| v21_6(void) = ReturnVoid : +# 21| v21_7(void) = AliasedUse : ~m? +# 21| v21_8(void) = ExitFunction : # 25| void test02(int, int) # 25| Block 0 # 25| v25_1(void) = EnterFunction : -# 25| m25_2(unknown) = AliasedDefinition : -# 25| valnum = unique -# 25| m25_3(unknown) = InitializeNonLocal : +# 25| mu25_2(unknown) = AliasedDefinition : # 25| valnum = unique -# 25| m25_4(unknown) = Chi : total:m25_2, partial:m25_3 +# 25| mu25_3(unknown) = InitializeNonLocal : # 25| valnum = unique -# 25| r25_5(glval) = VariableAddress[p0] : -# 25| valnum = r25_5, r29_1, r31_1 -# 25| m25_6(int) = InitializeParameter[p0] : &:r25_5 -# 25| valnum = m25_6, r29_2, r31_2 -# 25| r25_7(glval) = VariableAddress[p1] : -# 25| valnum = r25_7, r29_3, r31_3 -# 25| m25_8(int) = InitializeParameter[p1] : &:r25_7 -# 25| valnum = m25_8, r29_4, r31_4 +# 25| r25_4(glval) = VariableAddress[p0] : +# 25| valnum = r25_4, r29_1, r31_1 +# 25| m25_5(int) = InitializeParameter[p0] : &:r25_4 +# 25| valnum = m25_5, r29_2, r31_2 +# 25| r25_6(glval) = VariableAddress[p1] : +# 25| valnum = r25_6, r29_3, r31_3 +# 25| m25_7(int) = InitializeParameter[p1] : &:r25_6 +# 25| valnum = m25_7, r29_4, r31_4 # 26| r26_1(glval) = VariableAddress[x] : # 26| valnum = r26_1, r29_9, r31_9, r32_1 # 26| m26_2(int) = Uninitialized[x] : &:r26_1 @@ -215,18 +205,18 @@ test.cpp: # 27| m27_2(unsigned char) = Uninitialized[b] : &:r27_1 # 27| valnum = unique # 29| r29_1(glval) = VariableAddress[p0] : -# 29| valnum = r25_5, r29_1, r31_1 -# 29| r29_2(int) = Load[p0] : &:r29_1, m25_6 -# 29| valnum = m25_6, r29_2, r31_2 +# 29| valnum = r25_4, r29_1, r31_1 +# 29| r29_2(int) = Load[p0] : &:r29_1, m25_5 +# 29| valnum = m25_5, r29_2, r31_2 # 29| r29_3(glval) = VariableAddress[p1] : -# 29| valnum = r25_7, r29_3, r31_3 -# 29| r29_4(int) = Load[p1] : &:r29_3, m25_8 -# 29| valnum = m25_8, r29_4, r31_4 +# 29| valnum = r25_6, r29_3, r31_3 +# 29| r29_4(int) = Load[p1] : &:r29_3, m25_7 +# 29| valnum = m25_7, r29_4, r31_4 # 29| r29_5(int) = Add : r29_2, r29_4 # 29| valnum = r29_5, r31_5 # 29| r29_6(glval) = VariableAddress[global02] : # 29| valnum = r29_6, r31_6 -# 29| r29_7(int) = Load[global02] : &:r29_6, ~m25_3 +# 29| r29_7(int) = Load[global02] : &:r29_6, ~m? # 29| valnum = unique # 29| r29_8(int) = Add : r29_5, r29_7 # 29| valnum = m29_10, r29_8 @@ -237,23 +227,21 @@ test.cpp: # 30| r30_1(glval) = FunctionAddress[change_global02] : # 30| valnum = unique # 30| v30_2(void) = Call[change_global02] : func:r30_1 -# 30| m30_3(unknown) = ^CallSideEffect : ~m25_4 -# 30| valnum = unique -# 30| m30_4(unknown) = Chi : total:m25_4, partial:m30_3 +# 30| mu30_3(unknown) = ^CallSideEffect : ~m? # 30| valnum = unique # 31| r31_1(glval) = VariableAddress[p0] : -# 31| valnum = r25_5, r29_1, r31_1 -# 31| r31_2(int) = Load[p0] : &:r31_1, m25_6 -# 31| valnum = m25_6, r29_2, r31_2 +# 31| valnum = r25_4, r29_1, r31_1 +# 31| r31_2(int) = Load[p0] : &:r31_1, m25_5 +# 31| valnum = m25_5, r29_2, r31_2 # 31| r31_3(glval) = VariableAddress[p1] : -# 31| valnum = r25_7, r29_3, r31_3 -# 31| r31_4(int) = Load[p1] : &:r31_3, m25_8 -# 31| valnum = m25_8, r29_4, r31_4 +# 31| valnum = r25_6, r29_3, r31_3 +# 31| r31_4(int) = Load[p1] : &:r31_3, m25_7 +# 31| valnum = m25_7, r29_4, r31_4 # 31| r31_5(int) = Add : r31_2, r31_4 # 31| valnum = r29_5, r31_5 # 31| r31_6(glval) = VariableAddress[global02] : # 31| valnum = r29_6, r31_6 -# 31| r31_7(int) = Load[global02] : &:r31_6, ~m30_4 +# 31| r31_7(int) = Load[global02] : &:r31_6, ~m? # 31| valnum = unique # 31| r31_8(int) = Add : r31_5, r31_7 # 31| valnum = m31_10, m32_4, r31_8, r32_2 @@ -270,51 +258,47 @@ test.cpp: # 32| m32_4(int) = Store[y] : &:r32_3, r32_2 # 32| valnum = m31_10, m32_4, r31_8, r32_2 # 33| v33_1(void) = NoOp : -# 25| v25_9(void) = ReturnVoid : -# 25| v25_10(void) = AliasedUse : ~m30_4 -# 25| v25_11(void) = ExitFunction : +# 25| v25_8(void) = ReturnVoid : +# 25| v25_9(void) = AliasedUse : ~m? +# 25| v25_10(void) = ExitFunction : # 35| int global03 # 35| Block 0 # 35| v35_1(void) = EnterFunction : -# 35| m35_2(unknown) = AliasedDefinition : +# 35| mu35_2(unknown) = AliasedDefinition : # 35| valnum = unique # 35| r35_3(glval) = VariableAddress[global03] : # 35| valnum = unique # 35| r35_4(int) = Constant[3] : -# 35| valnum = m35_5, r35_4 -# 35| m35_5(int) = Store[global03] : &:r35_3, r35_4 -# 35| valnum = m35_5, r35_4 -# 35| m35_6(unknown) = Chi : total:m35_2, partial:m35_5 -# 35| valnum = unique -# 35| v35_7(void) = ReturnVoid : -# 35| v35_8(void) = AliasedUse : ~m35_6 -# 35| v35_9(void) = ExitFunction : +# 35| valnum = mu35_5, r35_4 +# 35| mu35_5(int) = Store[global03] : &:r35_3, r35_4 +# 35| valnum = mu35_5, r35_4 +# 35| v35_6(void) = ReturnVoid : +# 35| v35_7(void) = AliasedUse : ~m? +# 35| v35_8(void) = ExitFunction : # 39| void test03(int, int, int*) # 39| Block 0 # 39| v39_1(void) = EnterFunction : -# 39| m39_2(unknown) = AliasedDefinition : -# 39| valnum = unique -# 39| m39_3(unknown) = InitializeNonLocal : +# 39| mu39_2(unknown) = AliasedDefinition : # 39| valnum = unique -# 39| m39_4(unknown) = Chi : total:m39_2, partial:m39_3 +# 39| mu39_3(unknown) = InitializeNonLocal : # 39| valnum = unique -# 39| r39_5(glval) = VariableAddress[p0] : -# 39| valnum = r39_5, r43_1, r45_1 -# 39| m39_6(int) = InitializeParameter[p0] : &:r39_5 -# 39| valnum = m39_6, r43_2, r45_2 -# 39| r39_7(glval) = VariableAddress[p1] : -# 39| valnum = r39_7, r43_3, r45_3 -# 39| m39_8(int) = InitializeParameter[p1] : &:r39_7 -# 39| valnum = m39_8, r43_4, r45_4 -# 39| r39_9(glval) = VariableAddress[p2] : -# 39| valnum = r39_9, r44_2 -# 39| m39_10(int *) = InitializeParameter[p2] : &:r39_9 -# 39| valnum = m39_10, r39_11, r44_3, r44_4 -# 39| r39_11(int *) = Load[p2] : &:r39_9, m39_10 -# 39| valnum = m39_10, r39_11, r44_3, r44_4 -# 39| m39_12(unknown) = InitializeIndirection[p2] : &:r39_11 +# 39| r39_4(glval) = VariableAddress[p0] : +# 39| valnum = r39_4, r43_1, r45_1 +# 39| m39_5(int) = InitializeParameter[p0] : &:r39_4 +# 39| valnum = m39_5, r43_2, r45_2 +# 39| r39_6(glval) = VariableAddress[p1] : +# 39| valnum = r39_6, r43_3, r45_3 +# 39| m39_7(int) = InitializeParameter[p1] : &:r39_6 +# 39| valnum = m39_7, r43_4, r45_4 +# 39| r39_8(glval) = VariableAddress[p2] : +# 39| valnum = r39_8, r44_2 +# 39| m39_9(int *) = InitializeParameter[p2] : &:r39_8 +# 39| valnum = m39_9, r39_10, r44_3, r44_4 +# 39| r39_10(int *) = Load[p2] : &:r39_8, m39_9 +# 39| valnum = m39_9, r39_10, r44_3, r44_4 +# 39| mu39_11(unknown) = InitializeIndirection[p2] : &:r39_10 # 39| valnum = unique # 40| r40_1(glval) = VariableAddress[x] : # 40| valnum = r40_1, r43_9, r45_9, r46_1 @@ -329,95 +313,91 @@ test.cpp: # 41| m41_2(unsigned char) = Uninitialized[b] : &:r41_1 # 41| valnum = unique # 43| r43_1(glval) = VariableAddress[p0] : -# 43| valnum = r39_5, r43_1, r45_1 -# 43| r43_2(int) = Load[p0] : &:r43_1, m39_6 -# 43| valnum = m39_6, r43_2, r45_2 +# 43| valnum = r39_4, r43_1, r45_1 +# 43| r43_2(int) = Load[p0] : &:r43_1, m39_5 +# 43| valnum = m39_5, r43_2, r45_2 # 43| r43_3(glval) = VariableAddress[p1] : -# 43| valnum = r39_7, r43_3, r45_3 -# 43| r43_4(int) = Load[p1] : &:r43_3, m39_8 -# 43| valnum = m39_8, r43_4, r45_4 +# 43| valnum = r39_6, r43_3, r45_3 +# 43| r43_4(int) = Load[p1] : &:r43_3, m39_7 +# 43| valnum = m39_7, r43_4, r45_4 # 43| r43_5(int) = Add : r43_2, r43_4 # 43| valnum = r43_5, r45_5 # 43| r43_6(glval) = VariableAddress[global03] : # 43| valnum = r43_6, r45_6 -# 43| r43_7(int) = Load[global03] : &:r43_6, ~m39_3 -# 43| valnum = r43_7, r45_7 +# 43| r43_7(int) = Load[global03] : &:r43_6, ~m? +# 43| valnum = unique # 43| r43_8(int) = Add : r43_5, r43_7 -# 43| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2 +# 43| valnum = m43_10, r43_8 # 43| r43_9(glval) = VariableAddress[x] : # 43| valnum = r40_1, r43_9, r45_9, r46_1 # 43| m43_10(int) = Store[x] : &:r43_9, r43_8 -# 43| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2 +# 43| valnum = m43_10, r43_8 # 44| r44_1(int) = Constant[0] : -# 44| valnum = m44_5, r44_1 +# 44| valnum = mu44_5, r44_1 # 44| r44_2(glval) = VariableAddress[p2] : -# 44| valnum = r39_9, r44_2 -# 44| r44_3(int *) = Load[p2] : &:r44_2, m39_10 -# 44| valnum = m39_10, r39_11, r44_3, r44_4 +# 44| valnum = r39_8, r44_2 +# 44| r44_3(int *) = Load[p2] : &:r44_2, m39_9 +# 44| valnum = m39_9, r39_10, r44_3, r44_4 # 44| r44_4(glval) = CopyValue : r44_3 -# 44| valnum = m39_10, r39_11, r44_3, r44_4 -# 44| m44_5(int) = Store[?] : &:r44_4, r44_1 -# 44| valnum = m44_5, r44_1 -# 44| m44_6(unknown) = Chi : total:m39_12, partial:m44_5 -# 44| valnum = unique +# 44| valnum = m39_9, r39_10, r44_3, r44_4 +# 44| mu44_5(int) = Store[?] : &:r44_4, r44_1 +# 44| valnum = mu44_5, r44_1 # 45| r45_1(glval) = VariableAddress[p0] : -# 45| valnum = r39_5, r43_1, r45_1 -# 45| r45_2(int) = Load[p0] : &:r45_1, m39_6 -# 45| valnum = m39_6, r43_2, r45_2 +# 45| valnum = r39_4, r43_1, r45_1 +# 45| r45_2(int) = Load[p0] : &:r45_1, m39_5 +# 45| valnum = m39_5, r43_2, r45_2 # 45| r45_3(glval) = VariableAddress[p1] : -# 45| valnum = r39_7, r43_3, r45_3 -# 45| r45_4(int) = Load[p1] : &:r45_3, m39_8 -# 45| valnum = m39_8, r43_4, r45_4 +# 45| valnum = r39_6, r43_3, r45_3 +# 45| r45_4(int) = Load[p1] : &:r45_3, m39_7 +# 45| valnum = m39_7, r43_4, r45_4 # 45| r45_5(int) = Add : r45_2, r45_4 # 45| valnum = r43_5, r45_5 # 45| r45_6(glval) = VariableAddress[global03] : # 45| valnum = r43_6, r45_6 -# 45| r45_7(int) = Load[global03] : &:r45_6, ~m39_3 -# 45| valnum = r43_7, r45_7 +# 45| r45_7(int) = Load[global03] : &:r45_6, ~m? +# 45| valnum = unique # 45| r45_8(int) = Add : r45_5, r45_7 -# 45| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2 +# 45| valnum = m45_10, m46_4, r45_8, r46_2 # 45| r45_9(glval) = VariableAddress[x] : # 45| valnum = r40_1, r43_9, r45_9, r46_1 # 45| m45_10(int) = Store[x] : &:r45_9, r45_8 -# 45| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2 +# 45| valnum = m45_10, m46_4, r45_8, r46_2 # 46| r46_1(glval) = VariableAddress[x] : # 46| valnum = r40_1, r43_9, r45_9, r46_1 # 46| r46_2(int) = Load[x] : &:r46_1, m45_10 -# 46| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2 +# 46| valnum = m45_10, m46_4, r45_8, r46_2 # 46| r46_3(glval) = VariableAddress[y] : # 46| valnum = r40_3, r46_3 # 46| m46_4(int) = Store[y] : &:r46_3, r46_2 -# 46| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2 +# 46| valnum = m45_10, m46_4, r45_8, r46_2 # 47| v47_1(void) = NoOp : -# 39| v39_13(void) = ReturnIndirection[p2] : &:r39_11, m44_6 -# 39| v39_14(void) = ReturnVoid : -# 39| v39_15(void) = AliasedUse : m39_3 -# 39| v39_16(void) = ExitFunction : +# 39| v39_12(void) = ReturnIndirection[p2] : &:r39_10, ~m? +# 39| v39_13(void) = ReturnVoid : +# 39| v39_14(void) = AliasedUse : ~m? +# 39| v39_15(void) = ExitFunction : # 49| unsigned int my_strspn(char const*, char const*) # 49| Block 0 # 49| v49_1(void) = EnterFunction : -# 49| m49_2(unknown) = AliasedDefinition : -# 49| valnum = unique -# 49| m49_3(unknown) = InitializeNonLocal : +# 49| mu49_2(unknown) = AliasedDefinition : # 49| valnum = unique -# 49| m49_4(unknown) = Chi : total:m49_2, partial:m49_3 +# 49| mu49_3(unknown) = InitializeNonLocal : # 49| valnum = unique -# 49| r49_5(glval) = VariableAddress[str] : -# 49| valnum = r49_5, r53_2, r56_6 -# 49| m49_6(char *) = InitializeParameter[str] : &:r49_5 -# 49| valnum = m49_6, r49_7, r53_3, r56_7 -# 49| r49_7(char *) = Load[str] : &:r49_5, m49_6 -# 49| valnum = m49_6, r49_7, r53_3, r56_7 -# 49| m49_8(unknown) = InitializeIndirection[str] : &:r49_7 +# 49| r49_4(glval) = VariableAddress[str] : +# 49| valnum = r49_4, r53_2, r56_6 +# 49| m49_5(char *) = InitializeParameter[str] : &:r49_4 +# 49| valnum = m49_5, r49_6, r53_3, r56_7 +# 49| r49_6(char *) = Load[str] : &:r49_4, m49_5 +# 49| valnum = m49_5, r49_6, r53_3, r56_7 +# 49| mu49_7(unknown) = InitializeIndirection[str] : &:r49_6 # 49| valnum = unique -# 49| r49_9(glval) = VariableAddress[chars] : -# 49| valnum = r49_9, r55_1 -# 49| m49_10(char *) = InitializeParameter[chars] : &:r49_9 -# 49| valnum = m49_10, m55_4, r49_11, r55_2 -# 49| r49_11(char *) = Load[chars] : &:r49_9, m49_10 -# 49| valnum = m49_10, m55_4, r49_11, r55_2 -# 49| m49_12(unknown) = InitializeIndirection[chars] : &:r49_11 +# 49| r49_8(glval) = VariableAddress[chars] : +# 49| valnum = r49_8, r55_1 +# 49| m49_9(char *) = InitializeParameter[chars] : &:r49_8 +# 49| valnum = m49_9, m55_4, r49_10, r55_2 +# 49| r49_10(char *) = Load[chars] : &:r49_8, m49_9 +# 49| valnum = m49_9, m55_4, r49_10, r55_2 +# 49| mu49_11(unknown) = InitializeIndirection[chars] : &:r49_10 # 49| valnum = unique # 50| r50_1(glval) = VariableAddress[ptr] : # 50| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 @@ -435,13 +415,13 @@ test.cpp: # 53| m53_1(unsigned int) = Phi : from 0:m51_3, from 8:m62_5 # 53| valnum = m53_1, m65_4, r62_2, r65_3 # 53| r53_2(glval) = VariableAddress[str] : -# 53| valnum = r49_5, r53_2, r56_6 -# 53| r53_3(char *) = Load[str] : &:r53_2, m49_6 -# 53| valnum = m49_6, r49_7, r53_3, r56_7 -# 53| r53_4(char) = Load[?] : &:r53_3, ~m49_8 -# 53| valnum = r53_4, r56_8 +# 53| valnum = r49_4, r53_2, r56_6 +# 53| r53_3(char *) = Load[str] : &:r53_2, m49_5 +# 53| valnum = m49_5, r49_6, r53_3, r56_7 +# 53| r53_4(char) = Load[?] : &:r53_3, ~m? +# 53| valnum = unique # 53| r53_5(int) = Convert : r53_4 -# 53| valnum = r53_5, r56_9 +# 53| valnum = unique # 53| r53_6(int) = Constant[0] : # 53| valnum = r53_6, r56_16, r59_5 # 53| r53_7(bool) = CompareNE : r53_5, r53_6 @@ -452,13 +432,13 @@ test.cpp: # 55| Block 2 # 55| r55_1(glval) = VariableAddress[chars] : -# 55| valnum = r49_9, r55_1 -# 55| r55_2(char *) = Load[chars] : &:r55_1, m49_10 -# 55| valnum = m49_10, m55_4, r49_11, r55_2 +# 55| valnum = r49_8, r55_1 +# 55| r55_2(char *) = Load[chars] : &:r55_1, m49_9 +# 55| valnum = m49_9, m55_4, r49_10, r55_2 # 55| r55_3(glval) = VariableAddress[ptr] : # 55| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 55| m55_4(char *) = Store[ptr] : &:r55_3, r55_2 -# 55| valnum = m49_10, m55_4, r49_11, r55_2 +# 55| valnum = m49_9, m55_4, r49_10, r55_2 #-----| Goto -> Block 3 # 56| Block 3 @@ -468,18 +448,18 @@ test.cpp: # 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 56| r56_3(char *) = Load[ptr] : &:r56_2, m56_1 # 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2 -# 56| r56_4(char) = Load[?] : &:r56_3, ~m49_12 -# 56| valnum = r56_14, r56_4, r59_3 +# 56| r56_4(char) = Load[?] : &:r56_3, ~m? +# 56| valnum = unique # 56| r56_5(int) = Convert : r56_4 -# 56| valnum = r56_15, r56_5, r59_4 +# 56| valnum = unique # 56| r56_6(glval) = VariableAddress[str] : -# 56| valnum = r49_5, r53_2, r56_6 -# 56| r56_7(char *) = Load[str] : &:r56_6, m49_6 -# 56| valnum = m49_6, r49_7, r53_3, r56_7 -# 56| r56_8(char) = Load[?] : &:r56_7, ~m49_8 -# 56| valnum = r53_4, r56_8 +# 56| valnum = r49_4, r53_2, r56_6 +# 56| r56_7(char *) = Load[str] : &:r56_6, m49_5 +# 56| valnum = m49_5, r49_6, r53_3, r56_7 +# 56| r56_8(char) = Load[?] : &:r56_7, ~m? +# 56| valnum = unique # 56| r56_9(int) = Convert : r56_8 -# 56| valnum = r53_5, r56_9 +# 56| valnum = unique # 56| r56_10(bool) = CompareNE : r56_5, r56_9 # 56| valnum = unique # 56| v56_11(void) = ConditionalBranch : r56_10 @@ -491,10 +471,10 @@ test.cpp: # 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 56| r56_13(char *) = Load[ptr] : &:r56_12, m56_1 # 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2 -# 56| r56_14(char) = Load[?] : &:r56_13, ~m49_12 -# 56| valnum = r56_14, r56_4, r59_3 +# 56| r56_14(char) = Load[?] : &:r56_13, ~m? +# 56| valnum = unique # 56| r56_15(int) = Convert : r56_14 -# 56| valnum = r56_15, r56_5, r59_4 +# 56| valnum = unique # 56| r56_16(int) = Constant[0] : # 56| valnum = r53_6, r56_16, r59_5 # 56| r56_17(bool) = CompareNE : r56_15, r56_16 @@ -521,10 +501,10 @@ test.cpp: # 59| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 59| r59_2(char *) = Load[ptr] : &:r59_1, m56_1 # 59| valnum = m56_1, r56_13, r56_20, r56_3, r59_2 -# 59| r59_3(char) = Load[?] : &:r59_2, ~m49_12 -# 59| valnum = r56_14, r56_4, r59_3 +# 59| r59_3(char) = Load[?] : &:r59_2, ~m? +# 59| valnum = unique # 59| r59_4(int) = Convert : r59_3 -# 59| valnum = r56_15, r56_5, r59_4 +# 59| valnum = unique # 59| r59_5(int) = Constant[0] : # 59| valnum = r53_6, r56_16, r59_5 # 59| r59_6(bool) = CompareEQ : r59_4, r59_5 @@ -553,75 +533,71 @@ test.cpp: # 63| Block 9 # 63| v63_1(void) = NoOp : # 65| r65_1(glval) = VariableAddress[#return] : -# 65| valnum = r49_15, r65_1 +# 65| valnum = r49_14, r65_1 # 65| r65_2(glval) = VariableAddress[result] : # 65| valnum = r51_1, r62_1, r65_2 # 65| r65_3(unsigned int) = Load[result] : &:r65_2, m53_1 # 65| valnum = m53_1, m65_4, r62_2, r65_3 # 65| m65_4(unsigned int) = Store[#return] : &:r65_1, r65_3 # 65| valnum = m53_1, m65_4, r62_2, r65_3 -# 49| v49_13(void) = ReturnIndirection[str] : &:r49_7, m49_8 -# 49| v49_14(void) = ReturnIndirection[chars] : &:r49_11, m49_12 -# 49| r49_15(glval) = VariableAddress[#return] : -# 49| valnum = r49_15, r65_1 -# 49| v49_16(void) = ReturnValue : &:r49_15, m65_4 -# 49| v49_17(void) = AliasedUse : m49_3 -# 49| v49_18(void) = ExitFunction : +# 49| v49_12(void) = ReturnIndirection[str] : &:r49_6, ~m? +# 49| v49_13(void) = ReturnIndirection[chars] : &:r49_10, ~m? +# 49| r49_14(glval) = VariableAddress[#return] : +# 49| valnum = r49_14, r65_1 +# 49| v49_15(void) = ReturnValue : &:r49_14, m65_4 +# 49| v49_16(void) = AliasedUse : ~m? +# 49| v49_17(void) = ExitFunction : # 75| void test04(two_values*) # 75| Block 0 # 75| v75_1(void) = EnterFunction : -# 75| m75_2(unknown) = AliasedDefinition : -# 75| valnum = unique -# 75| m75_3(unknown) = InitializeNonLocal : +# 75| mu75_2(unknown) = AliasedDefinition : # 75| valnum = unique -# 75| m75_4(unknown) = Chi : total:m75_2, partial:m75_3 +# 75| mu75_3(unknown) = InitializeNonLocal : # 75| valnum = unique -# 75| r75_5(glval) = VariableAddress[vals] : -# 75| valnum = r75_5, r79_4, r79_9 -# 75| m75_6(two_values *) = InitializeParameter[vals] : &:r75_5 -# 75| valnum = m75_6, r75_7, r79_10, r79_5 -# 75| r75_7(two_values *) = Load[vals] : &:r75_5, m75_6 -# 75| valnum = m75_6, r75_7, r79_10, r79_5 -# 75| m75_8(unknown) = InitializeIndirection[vals] : &:r75_7 +# 75| r75_4(glval) = VariableAddress[vals] : +# 75| valnum = r75_4, r79_4, r79_9 +# 75| m75_5(two_values *) = InitializeParameter[vals] : &:r75_4 +# 75| valnum = m75_5, r75_6, r79_10, r79_5 +# 75| r75_6(two_values *) = Load[vals] : &:r75_4, m75_5 +# 75| valnum = m75_5, r75_6, r79_10, r79_5 +# 75| mu75_7(unknown) = InitializeIndirection[vals] : &:r75_6 # 75| valnum = unique # 77| r77_1(glval) = VariableAddress[v] : -# 77| valnum = r77_1, r79_1, r80_6 +# 77| valnum = r77_1, r79_1, r80_5 # 77| r77_2(glval) = FunctionAddress[getAValue] : # 77| valnum = unique # 77| r77_3(int) = Call[getAValue] : func:r77_2 # 77| valnum = unique -# 77| m77_4(unknown) = ^CallSideEffect : ~m75_4 +# 77| mu77_4(unknown) = ^CallSideEffect : ~m? # 77| valnum = unique -# 77| m77_5(unknown) = Chi : total:m75_4, partial:m77_4 -# 77| valnum = unique -# 77| r77_6(signed short) = Convert : r77_3 -# 77| valnum = m77_7, r77_6, r79_2 -# 77| m77_7(signed short) = Store[v] : &:r77_1, r77_6 -# 77| valnum = m77_7, r77_6, r79_2 +# 77| r77_5(signed short) = Convert : r77_3 +# 77| valnum = m77_6, r77_5, r79_2 +# 77| m77_6(signed short) = Store[v] : &:r77_1, r77_5 +# 77| valnum = m77_6, r77_5, r79_2 # 79| r79_1(glval) = VariableAddress[v] : -# 79| valnum = r77_1, r79_1, r80_6 -# 79| r79_2(signed short) = Load[v] : &:r79_1, m77_7 -# 79| valnum = m77_7, r77_6, r79_2 +# 79| valnum = r77_1, r79_1, r80_5 +# 79| r79_2(signed short) = Load[v] : &:r79_1, m77_6 +# 79| valnum = m77_6, r77_5, r79_2 # 79| r79_3(int) = Convert : r79_2 # 79| valnum = unique # 79| r79_4(glval) = VariableAddress[vals] : -# 79| valnum = r75_5, r79_4, r79_9 -# 79| r79_5(two_values *) = Load[vals] : &:r79_4, m75_6 -# 79| valnum = m75_6, r75_7, r79_10, r79_5 +# 79| valnum = r75_4, r79_4, r79_9 +# 79| r79_5(two_values *) = Load[vals] : &:r79_4, m75_5 +# 79| valnum = m75_5, r75_6, r79_10, r79_5 # 79| r79_6(glval) = FieldAddress[val1] : r79_5 # 79| valnum = unique -# 79| r79_7(signed short) = Load[?] : &:r79_6, ~m75_8 +# 79| r79_7(signed short) = Load[?] : &:r79_6, ~m? # 79| valnum = unique # 79| r79_8(int) = Convert : r79_7 # 79| valnum = unique # 79| r79_9(glval) = VariableAddress[vals] : -# 79| valnum = r75_5, r79_4, r79_9 -# 79| r79_10(two_values *) = Load[vals] : &:r79_9, m75_6 -# 79| valnum = m75_6, r75_7, r79_10, r79_5 +# 79| valnum = r75_4, r79_4, r79_9 +# 79| r79_10(two_values *) = Load[vals] : &:r79_9, m75_5 +# 79| valnum = m75_5, r75_6, r79_10, r79_5 # 79| r79_11(glval) = FieldAddress[val2] : r79_10 # 79| valnum = unique -# 79| r79_12(signed short) = Load[?] : &:r79_11, ~m75_8 +# 79| r79_12(signed short) = Load[?] : &:r79_11, ~m? # 79| valnum = unique # 79| r79_13(int) = Convert : r79_12 # 79| valnum = unique @@ -638,60 +614,54 @@ test.cpp: # 80| valnum = unique # 80| r80_2(int) = Call[getAValue] : func:r80_1 # 80| valnum = unique -# 80| m80_3(unknown) = ^CallSideEffect : ~m77_5 -# 80| valnum = unique -# 80| m80_4(unknown) = Chi : total:m77_5, partial:m80_3 +# 80| mu80_3(unknown) = ^CallSideEffect : ~m? # 80| valnum = unique -# 80| r80_5(signed short) = Convert : r80_2 -# 80| valnum = m80_7, r80_5 -# 80| r80_6(glval) = VariableAddress[v] : -# 80| valnum = r77_1, r79_1, r80_6 -# 80| m80_7(signed short) = Store[v] : &:r80_6, r80_5 -# 80| valnum = m80_7, r80_5 +# 80| r80_4(signed short) = Convert : r80_2 +# 80| valnum = m80_6, r80_4 +# 80| r80_5(glval) = VariableAddress[v] : +# 80| valnum = r77_1, r79_1, r80_5 +# 80| m80_6(signed short) = Store[v] : &:r80_5, r80_4 +# 80| valnum = m80_6, r80_4 #-----| Goto -> Block 2 # 82| Block 2 -# 82| m82_1(unknown) = Phi : from 0:~m77_5, from 1:~m80_4 -# 82| valnum = unique -# 82| v82_2(void) = NoOp : -# 75| v75_9(void) = ReturnIndirection[vals] : &:r75_7, m75_8 -# 75| v75_10(void) = ReturnVoid : -# 75| v75_11(void) = AliasedUse : ~m82_1 -# 75| v75_12(void) = ExitFunction : +# 82| v82_1(void) = NoOp : +# 75| v75_8(void) = ReturnIndirection[vals] : &:r75_6, ~m? +# 75| v75_9(void) = ReturnVoid : +# 75| v75_10(void) = AliasedUse : ~m? +# 75| v75_11(void) = ExitFunction : # 84| void test05(int, int, void*) # 84| Block 0 # 84| v84_1(void) = EnterFunction : -# 84| m84_2(unknown) = AliasedDefinition : +# 84| mu84_2(unknown) = AliasedDefinition : # 84| valnum = unique -# 84| m84_3(unknown) = InitializeNonLocal : +# 84| mu84_3(unknown) = InitializeNonLocal : # 84| valnum = unique -# 84| m84_4(unknown) = Chi : total:m84_2, partial:m84_3 -# 84| valnum = unique -# 84| r84_5(glval) = VariableAddress[x] : -# 84| valnum = r84_5, r88_11 -# 84| m84_6(int) = InitializeParameter[x] : &:r84_5 -# 84| valnum = m84_6, m88_14, r88_12 -# 84| r84_7(glval) = VariableAddress[y] : -# 84| valnum = r84_7, r88_15 -# 84| m84_8(int) = InitializeParameter[y] : &:r84_7 -# 84| valnum = m84_8, m88_18, r88_16 -# 84| r84_9(glval) = VariableAddress[p] : -# 84| valnum = r84_9, r88_1 -# 84| m84_10(void *) = InitializeParameter[p] : &:r84_9 -# 84| valnum = m84_10, r84_11, r88_2 -# 84| r84_11(void *) = Load[p] : &:r84_9, m84_10 -# 84| valnum = m84_10, r84_11, r88_2 -# 84| m84_12(unknown) = InitializeIndirection[p] : &:r84_11 +# 84| r84_4(glval) = VariableAddress[x] : +# 84| valnum = r84_4, r88_11 +# 84| m84_5(int) = InitializeParameter[x] : &:r84_4 +# 84| valnum = m84_5, m88_14, r88_12 +# 84| r84_6(glval) = VariableAddress[y] : +# 84| valnum = r84_6, r88_15 +# 84| m84_7(int) = InitializeParameter[y] : &:r84_6 +# 84| valnum = m84_7, m88_18, r88_16 +# 84| r84_8(glval) = VariableAddress[p] : +# 84| valnum = r84_8, r88_1 +# 84| m84_9(void *) = InitializeParameter[p] : &:r84_8 +# 84| valnum = m84_9, r84_10, r88_2 +# 84| r84_10(void *) = Load[p] : &:r84_8, m84_9 +# 84| valnum = m84_9, r84_10, r88_2 +# 84| mu84_11(unknown) = InitializeIndirection[p] : &:r84_10 # 84| valnum = unique # 86| r86_1(glval) = VariableAddress[v] : # 86| valnum = r86_1, r88_9 # 86| m86_2(int) = Uninitialized[v] : &:r86_1 # 86| valnum = unique # 88| r88_1(glval) = VariableAddress[p] : -# 88| valnum = r84_9, r88_1 -# 88| r88_2(void *) = Load[p] : &:r88_1, m84_10 -# 88| valnum = m84_10, r84_11, r88_2 +# 88| valnum = r84_8, r88_1 +# 88| r88_2(void *) = Load[p] : &:r88_1, m84_9 +# 88| valnum = m84_9, r84_10, r88_2 # 88| r88_3(void *) = Constant[0] : # 88| valnum = unique # 88| r88_4(bool) = CompareNE : r88_2, r88_3 @@ -712,41 +682,39 @@ test.cpp: # 88| m88_10(int) = Store[v] : &:r88_9, r88_8 # 88| valnum = m88_10, m88_6, r88_8 # 89| v89_1(void) = NoOp : -# 84| v84_13(void) = ReturnIndirection[p] : &:r84_11, m84_12 -# 84| v84_14(void) = ReturnVoid : -# 84| v84_15(void) = AliasedUse : m84_3 -# 84| v84_16(void) = ExitFunction : +# 84| v84_12(void) = ReturnIndirection[p] : &:r84_10, ~m? +# 84| v84_13(void) = ReturnVoid : +# 84| v84_14(void) = AliasedUse : ~m? +# 84| v84_15(void) = ExitFunction : # 88| Block 2 # 88| r88_11(glval) = VariableAddress[x] : -# 88| valnum = r84_5, r88_11 -# 88| r88_12(int) = Load[x] : &:r88_11, m84_6 -# 88| valnum = m84_6, m88_14, r88_12 +# 88| valnum = r84_4, r88_11 +# 88| r88_12(int) = Load[x] : &:r88_11, m84_5 +# 88| valnum = m84_5, m88_14, r88_12 # 88| r88_13(glval) = VariableAddress[#temp88:7] : # 88| valnum = r88_13, r88_17, r88_7 # 88| m88_14(int) = Store[#temp88:7] : &:r88_13, r88_12 -# 88| valnum = m84_6, m88_14, r88_12 +# 88| valnum = m84_5, m88_14, r88_12 #-----| Goto -> Block 1 # 88| Block 3 # 88| r88_15(glval) = VariableAddress[y] : -# 88| valnum = r84_7, r88_15 -# 88| r88_16(int) = Load[y] : &:r88_15, m84_8 -# 88| valnum = m84_8, m88_18, r88_16 +# 88| valnum = r84_6, r88_15 +# 88| r88_16(int) = Load[y] : &:r88_15, m84_7 +# 88| valnum = m84_7, m88_18, r88_16 # 88| r88_17(glval) = VariableAddress[#temp88:7] : # 88| valnum = r88_13, r88_17, r88_7 # 88| m88_18(int) = Store[#temp88:7] : &:r88_17, r88_16 -# 88| valnum = m84_8, m88_18, r88_16 +# 88| valnum = m84_7, m88_18, r88_16 #-----| Goto -> Block 1 # 91| int regression_test00() # 91| Block 0 # 91| v91_1(void) = EnterFunction : -# 91| m91_2(unknown) = AliasedDefinition : -# 91| valnum = unique -# 91| m91_3(unknown) = InitializeNonLocal : +# 91| mu91_2(unknown) = AliasedDefinition : # 91| valnum = unique -# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3 +# 91| mu91_3(unknown) = InitializeNonLocal : # 91| valnum = unique # 92| r92_1(glval) = VariableAddress[x] : # 92| valnum = r92_1, r92_3, r93_2 @@ -761,56 +729,54 @@ test.cpp: # 92| m92_6(int) = Store[x] : &:r92_1, r92_5 # 92| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3 # 93| r93_1(glval) = VariableAddress[#return] : -# 93| valnum = r91_5, r93_1 +# 93| valnum = r91_4, r93_1 # 93| r93_2(glval) = VariableAddress[x] : # 93| valnum = r92_1, r92_3, r93_2 # 93| r93_3(int) = Load[x] : &:r93_2, m92_6 # 93| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3 # 93| m93_4(int) = Store[#return] : &:r93_1, r93_3 # 93| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3 -# 91| r91_5(glval) = VariableAddress[#return] : -# 91| valnum = r91_5, r93_1 -# 91| v91_6(void) = ReturnValue : &:r91_5, m93_4 -# 91| v91_7(void) = AliasedUse : m91_3 -# 91| v91_8(void) = ExitFunction : +# 91| r91_4(glval) = VariableAddress[#return] : +# 91| valnum = r91_4, r93_1 +# 91| v91_5(void) = ReturnValue : &:r91_4, m93_4 +# 91| v91_6(void) = AliasedUse : ~m? +# 91| v91_7(void) = ExitFunction : # 104| int inheritanceConversions(Derived*) # 104| Block 0 # 104| v104_1(void) = EnterFunction : -# 104| m104_2(unknown) = AliasedDefinition : -# 104| valnum = unique -# 104| m104_3(unknown) = InitializeNonLocal : +# 104| mu104_2(unknown) = AliasedDefinition : # 104| valnum = unique -# 104| m104_4(unknown) = Chi : total:m104_2, partial:m104_3 +# 104| mu104_3(unknown) = InitializeNonLocal : # 104| valnum = unique -# 104| r104_5(glval) = VariableAddress[pd] : -# 104| valnum = r104_5, r105_2, r106_2 -# 104| m104_6(Derived *) = InitializeParameter[pd] : &:r104_5 -# 104| valnum = m104_6, r104_7, r105_3, r106_3 -# 104| r104_7(Derived *) = Load[pd] : &:r104_5, m104_6 -# 104| valnum = m104_6, r104_7, r105_3, r106_3 -# 104| m104_8(unknown) = InitializeIndirection[pd] : &:r104_7 +# 104| r104_4(glval) = VariableAddress[pd] : +# 104| valnum = r104_4, r105_2, r106_2 +# 104| m104_5(Derived *) = InitializeParameter[pd] : &:r104_4 +# 104| valnum = m104_5, r104_6, r105_3, r106_3 +# 104| r104_6(Derived *) = Load[pd] : &:r104_4, m104_5 +# 104| valnum = m104_5, r104_6, r105_3, r106_3 +# 104| mu104_7(unknown) = InitializeIndirection[pd] : &:r104_6 # 104| valnum = unique # 105| r105_1(glval) = VariableAddress[x] : # 105| valnum = unique # 105| r105_2(glval) = VariableAddress[pd] : -# 105| valnum = r104_5, r105_2, r106_2 -# 105| r105_3(Derived *) = Load[pd] : &:r105_2, m104_6 -# 105| valnum = m104_6, r104_7, r105_3, r106_3 +# 105| valnum = r104_4, r105_2, r106_2 +# 105| r105_3(Derived *) = Load[pd] : &:r105_2, m104_5 +# 105| valnum = m104_5, r104_6, r105_3, r106_3 # 105| r105_4(Base *) = ConvertToNonVirtualBase[Derived : Base] : r105_3 # 105| valnum = m106_5, r105_4, r106_4, r107_3 # 105| r105_5(glval) = FieldAddress[b] : r105_4 # 105| valnum = r105_5, r107_4 -# 105| r105_6(int) = Load[?] : &:r105_5, ~m104_8 -# 105| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3 +# 105| r105_6(int) = Load[?] : &:r105_5, ~m? +# 105| valnum = m105_7, r105_6 # 105| m105_7(int) = Store[x] : &:r105_1, r105_6 -# 105| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3 +# 105| valnum = m105_7, r105_6 # 106| r106_1(glval) = VariableAddress[pb] : # 106| valnum = r106_1, r107_2 # 106| r106_2(glval) = VariableAddress[pd] : -# 106| valnum = r104_5, r105_2, r106_2 -# 106| r106_3(Derived *) = Load[pd] : &:r106_2, m104_6 -# 106| valnum = m104_6, r104_7, r105_3, r106_3 +# 106| valnum = r104_4, r105_2, r106_2 +# 106| r106_3(Derived *) = Load[pd] : &:r106_2, m104_5 +# 106| valnum = m104_5, r104_6, r105_3, r106_3 # 106| r106_4(Base *) = ConvertToNonVirtualBase[Derived : Base] : r106_3 # 106| valnum = m106_5, r105_4, r106_4, r107_3 # 106| m106_5(Base *) = Store[pb] : &:r106_1, r106_4 @@ -823,33 +789,31 @@ test.cpp: # 107| valnum = m106_5, r105_4, r106_4, r107_3 # 107| r107_4(glval) = FieldAddress[b] : r107_3 # 107| valnum = r105_5, r107_4 -# 107| r107_5(int) = Load[?] : &:r107_4, ~m104_8 -# 107| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3 +# 107| r107_5(int) = Load[?] : &:r107_4, ~m? +# 107| valnum = m107_6, m109_4, r107_5, r109_3 # 107| m107_6(int) = Store[y] : &:r107_1, r107_5 -# 107| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3 +# 107| valnum = m107_6, m109_4, r107_5, r109_3 # 109| r109_1(glval) = VariableAddress[#return] : -# 109| valnum = r104_10, r109_1 +# 109| valnum = r104_9, r109_1 # 109| r109_2(glval) = VariableAddress[y] : # 109| valnum = r107_1, r109_2 # 109| r109_3(int) = Load[y] : &:r109_2, m107_6 -# 109| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3 +# 109| valnum = m107_6, m109_4, r107_5, r109_3 # 109| m109_4(int) = Store[#return] : &:r109_1, r109_3 -# 109| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3 -# 104| v104_9(void) = ReturnIndirection[pd] : &:r104_7, m104_8 -# 104| r104_10(glval) = VariableAddress[#return] : -# 104| valnum = r104_10, r109_1 -# 104| v104_11(void) = ReturnValue : &:r104_10, m109_4 -# 104| v104_12(void) = AliasedUse : m104_3 -# 104| v104_13(void) = ExitFunction : +# 109| valnum = m107_6, m109_4, r107_5, r109_3 +# 104| v104_8(void) = ReturnIndirection[pd] : &:r104_6, ~m? +# 104| r104_9(glval) = VariableAddress[#return] : +# 104| valnum = r104_9, r109_1 +# 104| v104_10(void) = ReturnValue : &:r104_9, m109_4 +# 104| v104_11(void) = AliasedUse : ~m? +# 104| v104_12(void) = ExitFunction : # 112| void test06() # 112| Block 0 # 112| v112_1(void) = EnterFunction : -# 112| m112_2(unknown) = AliasedDefinition : +# 112| mu112_2(unknown) = AliasedDefinition : # 112| valnum = unique -# 112| m112_3(unknown) = InitializeNonLocal : -# 112| valnum = unique -# 112| m112_4(unknown) = Chi : total:m112_2, partial:m112_3 +# 112| mu112_3(unknown) = InitializeNonLocal : # 112| valnum = unique # 113| r113_1(glval) = StringConstant["a"] : # 113| valnum = r113_1, r115_1 @@ -860,315 +824,295 @@ test.cpp: # 116| r116_1(glval) = StringConstant["c"] : # 116| valnum = unique # 117| v117_1(void) = NoOp : -# 112| v112_5(void) = ReturnVoid : -# 112| v112_6(void) = AliasedUse : m112_3 -# 112| v112_7(void) = ExitFunction : +# 112| v112_4(void) = ReturnVoid : +# 112| v112_5(void) = AliasedUse : ~m? +# 112| v112_6(void) = ExitFunction : # 124| void test_read_arg_same(A*, int) # 124| Block 0 # 124| v124_1(void) = EnterFunction : -# 124| m124_2(unknown) = AliasedDefinition : -# 124| valnum = unique -# 124| m124_3(unknown) = InitializeNonLocal : +# 124| mu124_2(unknown) = AliasedDefinition : # 124| valnum = unique -# 124| m124_4(unknown) = Chi : total:m124_2, partial:m124_3 +# 124| mu124_3(unknown) = InitializeNonLocal : # 124| valnum = unique -# 124| r124_5(glval) = VariableAddress[pa] : -# 124| valnum = r124_5, r125_2, r126_2, r128_3, r129_2 -# 124| m124_6(A *) = InitializeParameter[pa] : &:r124_5 -# 124| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3 -# 124| r124_7(A *) = Load[pa] : &:r124_5, m124_6 -# 124| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3 -# 124| m124_8(unknown) = InitializeIndirection[pa] : &:r124_7 +# 124| r124_4(glval) = VariableAddress[pa] : +# 124| valnum = r124_4, r125_2, r126_2, r128_3, r129_2 +# 124| m124_5(A *) = InitializeParameter[pa] : &:r124_4 +# 124| valnum = m124_5, r124_6, r125_3, r126_3, r128_4, r129_3 +# 124| r124_6(A *) = Load[pa] : &:r124_4, m124_5 +# 124| valnum = m124_5, r124_6, r125_3, r126_3, r128_4, r129_3 +# 124| mu124_7(unknown) = InitializeIndirection[pa] : &:r124_6 # 124| valnum = unique -# 124| r124_9(glval) = VariableAddress[n] : -# 124| valnum = r124_9, r128_1 -# 124| m124_10(int) = InitializeParameter[n] : &:r124_9 -# 124| valnum = m124_10, m128_6, m129_6, r128_2, r129_5 +# 124| r124_8(glval) = VariableAddress[n] : +# 124| valnum = r124_8, r128_1 +# 124| m124_9(int) = InitializeParameter[n] : &:r124_8 +# 124| valnum = m124_9, mu128_6, r128_2 # 125| r125_1(glval) = VariableAddress[b] : # 125| valnum = unique # 125| r125_2(glval) = VariableAddress[pa] : -# 125| valnum = r124_5, r125_2, r126_2, r128_3, r129_2 -# 125| r125_3(A *) = Load[pa] : &:r125_2, m124_6 -# 125| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3 +# 125| valnum = r124_4, r125_2, r126_2, r128_3, r129_2 +# 125| r125_3(A *) = Load[pa] : &:r125_2, m124_5 +# 125| valnum = m124_5, r124_6, r125_3, r126_3, r128_4, r129_3 # 125| r125_4(glval) = FieldAddress[x] : r125_3 # 125| valnum = r125_4, r126_4, r128_5, r129_4 -# 125| r125_5(int) = Load[?] : &:r125_4, ~m124_8 -# 125| valnum = m125_6, m126_6, r125_5, r126_5 +# 125| r125_5(int) = Load[?] : &:r125_4, ~m? +# 125| valnum = m125_6, r125_5 # 125| m125_6(int) = Store[b] : &:r125_1, r125_5 -# 125| valnum = m125_6, m126_6, r125_5, r126_5 +# 125| valnum = m125_6, r125_5 # 126| r126_1(glval) = VariableAddress[c] : # 126| valnum = unique # 126| r126_2(glval) = VariableAddress[pa] : -# 126| valnum = r124_5, r125_2, r126_2, r128_3, r129_2 -# 126| r126_3(A *) = Load[pa] : &:r126_2, m124_6 -# 126| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3 +# 126| valnum = r124_4, r125_2, r126_2, r128_3, r129_2 +# 126| r126_3(A *) = Load[pa] : &:r126_2, m124_5 +# 126| valnum = m124_5, r124_6, r125_3, r126_3, r128_4, r129_3 # 126| r126_4(glval) = FieldAddress[x] : r126_3 # 126| valnum = r125_4, r126_4, r128_5, r129_4 -# 126| r126_5(int) = Load[?] : &:r126_4, ~m124_8 -# 126| valnum = m125_6, m126_6, r125_5, r126_5 +# 126| r126_5(int) = Load[?] : &:r126_4, ~m? +# 126| valnum = m126_6, r126_5 # 126| m126_6(int) = Store[c] : &:r126_1, r126_5 -# 126| valnum = m125_6, m126_6, r125_5, r126_5 +# 126| valnum = m126_6, r126_5 # 128| r128_1(glval) = VariableAddress[n] : -# 128| valnum = r124_9, r128_1 -# 128| r128_2(int) = Load[n] : &:r128_1, m124_10 -# 128| valnum = m124_10, m128_6, m129_6, r128_2, r129_5 +# 128| valnum = r124_8, r128_1 +# 128| r128_2(int) = Load[n] : &:r128_1, m124_9 +# 128| valnum = m124_9, mu128_6, r128_2 # 128| r128_3(glval) = VariableAddress[pa] : -# 128| valnum = r124_5, r125_2, r126_2, r128_3, r129_2 -# 128| r128_4(A *) = Load[pa] : &:r128_3, m124_6 -# 128| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3 +# 128| valnum = r124_4, r125_2, r126_2, r128_3, r129_2 +# 128| r128_4(A *) = Load[pa] : &:r128_3, m124_5 +# 128| valnum = m124_5, r124_6, r125_3, r126_3, r128_4, r129_3 # 128| r128_5(glval) = FieldAddress[x] : r128_4 # 128| valnum = r125_4, r126_4, r128_5, r129_4 -# 128| m128_6(int) = Store[?] : &:r128_5, r128_2 -# 128| valnum = m124_10, m128_6, m129_6, r128_2, r129_5 -# 128| m128_7(unknown) = Chi : total:m124_8, partial:m128_6 -# 128| valnum = unique +# 128| mu128_6(int) = Store[?] : &:r128_5, r128_2 +# 128| valnum = m124_9, mu128_6, r128_2 # 129| r129_1(glval) = VariableAddress[d] : # 129| valnum = unique # 129| r129_2(glval) = VariableAddress[pa] : -# 129| valnum = r124_5, r125_2, r126_2, r128_3, r129_2 -# 129| r129_3(A *) = Load[pa] : &:r129_2, m124_6 -# 129| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3 +# 129| valnum = r124_4, r125_2, r126_2, r128_3, r129_2 +# 129| r129_3(A *) = Load[pa] : &:r129_2, m124_5 +# 129| valnum = m124_5, r124_6, r125_3, r126_3, r128_4, r129_3 # 129| r129_4(glval) = FieldAddress[x] : r129_3 # 129| valnum = r125_4, r126_4, r128_5, r129_4 -# 129| r129_5(int) = Load[?] : &:r129_4, m128_6 -# 129| valnum = m124_10, m128_6, m129_6, r128_2, r129_5 +# 129| r129_5(int) = Load[?] : &:r129_4, ~m? +# 129| valnum = m129_6, r129_5 # 129| m129_6(int) = Store[d] : &:r129_1, r129_5 -# 129| valnum = m124_10, m128_6, m129_6, r128_2, r129_5 +# 129| valnum = m129_6, r129_5 # 130| v130_1(void) = NoOp : -# 124| v124_11(void) = ReturnIndirection[pa] : &:r124_7, m128_7 -# 124| v124_12(void) = ReturnVoid : -# 124| v124_13(void) = AliasedUse : m124_3 -# 124| v124_14(void) = ExitFunction : +# 124| v124_10(void) = ReturnIndirection[pa] : &:r124_6, ~m? +# 124| v124_11(void) = ReturnVoid : +# 124| v124_12(void) = AliasedUse : ~m? +# 124| v124_13(void) = ExitFunction : # 135| void test_read_global_same() # 135| Block 0 # 135| v135_1(void) = EnterFunction : -# 135| m135_2(unknown) = AliasedDefinition : -# 135| valnum = unique -# 135| m135_3(unknown) = InitializeNonLocal : +# 135| mu135_2(unknown) = AliasedDefinition : # 135| valnum = unique -# 135| m135_4(unknown) = Chi : total:m135_2, partial:m135_3 +# 135| mu135_3(unknown) = InitializeNonLocal : # 135| valnum = unique # 136| r136_1(glval) = VariableAddress[b] : # 136| valnum = unique # 136| r136_2(glval) = VariableAddress[global_a] : # 136| valnum = r136_2, r137_2, r139_3, r140_2 -# 136| r136_3(A *) = Load[global_a] : &:r136_2, ~m135_3 -# 136| valnum = r136_3, r137_3, r139_4 +# 136| r136_3(A *) = Load[global_a] : &:r136_2, ~m? +# 136| valnum = unique # 136| r136_4(glval) = FieldAddress[x] : r136_3 -# 136| valnum = r136_4, r137_4, r139_5 -# 136| r136_5(int) = Load[?] : &:r136_4, ~m135_4 -# 136| valnum = m136_6, m137_6, r136_5, r137_5 +# 136| valnum = unique +# 136| r136_5(int) = Load[?] : &:r136_4, ~m? +# 136| valnum = m136_6, r136_5 # 136| m136_6(int) = Store[b] : &:r136_1, r136_5 -# 136| valnum = m136_6, m137_6, r136_5, r137_5 +# 136| valnum = m136_6, r136_5 # 137| r137_1(glval) = VariableAddress[c] : # 137| valnum = unique # 137| r137_2(glval) = VariableAddress[global_a] : # 137| valnum = r136_2, r137_2, r139_3, r140_2 -# 137| r137_3(A *) = Load[global_a] : &:r137_2, ~m135_3 -# 137| valnum = r136_3, r137_3, r139_4 +# 137| r137_3(A *) = Load[global_a] : &:r137_2, ~m? +# 137| valnum = unique # 137| r137_4(glval) = FieldAddress[x] : r137_3 -# 137| valnum = r136_4, r137_4, r139_5 -# 137| r137_5(int) = Load[?] : &:r137_4, ~m135_4 -# 137| valnum = m136_6, m137_6, r136_5, r137_5 +# 137| valnum = unique +# 137| r137_5(int) = Load[?] : &:r137_4, ~m? +# 137| valnum = m137_6, r137_5 # 137| m137_6(int) = Store[c] : &:r137_1, r137_5 -# 137| valnum = m136_6, m137_6, r136_5, r137_5 +# 137| valnum = m137_6, r137_5 # 139| r139_1(glval) = VariableAddress[global_n] : # 139| valnum = unique -# 139| r139_2(int) = Load[global_n] : &:r139_1, ~m135_3 -# 139| valnum = m139_6, r139_2 +# 139| r139_2(int) = Load[global_n] : &:r139_1, ~m? +# 139| valnum = mu139_6, r139_2 # 139| r139_3(glval) = VariableAddress[global_a] : # 139| valnum = r136_2, r137_2, r139_3, r140_2 -# 139| r139_4(A *) = Load[global_a] : &:r139_3, ~m135_3 -# 139| valnum = r136_3, r137_3, r139_4 +# 139| r139_4(A *) = Load[global_a] : &:r139_3, ~m? +# 139| valnum = unique # 139| r139_5(glval) = FieldAddress[x] : r139_4 -# 139| valnum = r136_4, r137_4, r139_5 -# 139| m139_6(int) = Store[?] : &:r139_5, r139_2 -# 139| valnum = m139_6, r139_2 -# 139| m139_7(unknown) = Chi : total:m135_4, partial:m139_6 # 139| valnum = unique +# 139| mu139_6(int) = Store[?] : &:r139_5, r139_2 +# 139| valnum = mu139_6, r139_2 # 140| r140_1(glval) = VariableAddress[d] : # 140| valnum = unique # 140| r140_2(glval) = VariableAddress[global_a] : # 140| valnum = r136_2, r137_2, r139_3, r140_2 -# 140| r140_3(A *) = Load[global_a] : &:r140_2, ~m139_7 +# 140| r140_3(A *) = Load[global_a] : &:r140_2, ~m? # 140| valnum = unique # 140| r140_4(glval) = FieldAddress[x] : r140_3 # 140| valnum = unique -# 140| r140_5(int) = Load[?] : &:r140_4, ~m139_7 +# 140| r140_5(int) = Load[?] : &:r140_4, ~m? # 140| valnum = m140_6, r140_5 # 140| m140_6(int) = Store[d] : &:r140_1, r140_5 # 140| valnum = m140_6, r140_5 # 141| v141_1(void) = NoOp : -# 135| v135_5(void) = ReturnVoid : -# 135| v135_6(void) = AliasedUse : ~m139_7 -# 135| v135_7(void) = ExitFunction : +# 135| v135_4(void) = ReturnVoid : +# 135| v135_5(void) = AliasedUse : ~m? +# 135| v135_6(void) = ExitFunction : # 143| void test_read_arg_different(A*) # 143| Block 0 # 143| v143_1(void) = EnterFunction : -# 143| m143_2(unknown) = AliasedDefinition : +# 143| mu143_2(unknown) = AliasedDefinition : # 143| valnum = unique -# 143| m143_3(unknown) = InitializeNonLocal : +# 143| mu143_3(unknown) = InitializeNonLocal : # 143| valnum = unique -# 143| m143_4(unknown) = Chi : total:m143_2, partial:m143_3 -# 143| valnum = unique -# 143| r143_5(glval) = VariableAddress[pa] : -# 143| valnum = r143_5, r144_2, r145_2, r147_3, r149_2 -# 143| m143_6(A *) = InitializeParameter[pa] : &:r143_5 -# 143| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3 -# 143| r143_7(A *) = Load[pa] : &:r143_5, m143_6 -# 143| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3 -# 143| m143_8(unknown) = InitializeIndirection[pa] : &:r143_7 +# 143| r143_4(glval) = VariableAddress[pa] : +# 143| valnum = r143_4, r144_2, r145_2, r147_3, r149_2 +# 143| m143_5(A *) = InitializeParameter[pa] : &:r143_4 +# 143| valnum = m143_5, r143_6, r144_3, r145_3, r147_4, r149_3 +# 143| r143_6(A *) = Load[pa] : &:r143_4, m143_5 +# 143| valnum = m143_5, r143_6, r144_3, r145_3, r147_4, r149_3 +# 143| mu143_7(unknown) = InitializeIndirection[pa] : &:r143_6 # 143| valnum = unique # 144| r144_1(glval) = VariableAddress[b] : # 144| valnum = unique # 144| r144_2(glval) = VariableAddress[pa] : -# 144| valnum = r143_5, r144_2, r145_2, r147_3, r149_2 -# 144| r144_3(A *) = Load[pa] : &:r144_2, m143_6 -# 144| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3 +# 144| valnum = r143_4, r144_2, r145_2, r147_3, r149_2 +# 144| r144_3(A *) = Load[pa] : &:r144_2, m143_5 +# 144| valnum = m143_5, r143_6, r144_3, r145_3, r147_4, r149_3 # 144| r144_4(glval) = FieldAddress[x] : r144_3 # 144| valnum = r144_4, r149_4 -# 144| r144_5(int) = Load[?] : &:r144_4, ~m143_8 -# 144| valnum = m144_6, m149_6, r144_5, r149_5 +# 144| r144_5(int) = Load[?] : &:r144_4, ~m? +# 144| valnum = m144_6, r144_5 # 144| m144_6(int) = Store[b] : &:r144_1, r144_5 -# 144| valnum = m144_6, m149_6, r144_5, r149_5 +# 144| valnum = m144_6, r144_5 # 145| r145_1(glval) = VariableAddress[c] : # 145| valnum = unique # 145| r145_2(glval) = VariableAddress[pa] : -# 145| valnum = r143_5, r144_2, r145_2, r147_3, r149_2 -# 145| r145_3(A *) = Load[pa] : &:r145_2, m143_6 -# 145| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3 +# 145| valnum = r143_4, r144_2, r145_2, r147_3, r149_2 +# 145| r145_3(A *) = Load[pa] : &:r145_2, m143_5 +# 145| valnum = m143_5, r143_6, r144_3, r145_3, r147_4, r149_3 # 145| r145_4(glval) = FieldAddress[y] : r145_3 # 145| valnum = r145_4, r147_5 -# 145| r145_5(int) = Load[?] : &:r145_4, ~m143_8 +# 145| r145_5(int) = Load[?] : &:r145_4, ~m? # 145| valnum = m145_6, r145_5 # 145| m145_6(int) = Store[c] : &:r145_1, r145_5 # 145| valnum = m145_6, r145_5 # 147| r147_1(glval) = VariableAddress[global_n] : # 147| valnum = unique -# 147| r147_2(int) = Load[global_n] : &:r147_1, ~m143_3 -# 147| valnum = m147_6, r147_2 +# 147| r147_2(int) = Load[global_n] : &:r147_1, ~m? +# 147| valnum = mu147_6, r147_2 # 147| r147_3(glval) = VariableAddress[pa] : -# 147| valnum = r143_5, r144_2, r145_2, r147_3, r149_2 -# 147| r147_4(A *) = Load[pa] : &:r147_3, m143_6 -# 147| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3 +# 147| valnum = r143_4, r144_2, r145_2, r147_3, r149_2 +# 147| r147_4(A *) = Load[pa] : &:r147_3, m143_5 +# 147| valnum = m143_5, r143_6, r144_3, r145_3, r147_4, r149_3 # 147| r147_5(glval) = FieldAddress[y] : r147_4 # 147| valnum = r145_4, r147_5 -# 147| m147_6(int) = Store[?] : &:r147_5, r147_2 -# 147| valnum = m147_6, r147_2 -# 147| m147_7(unknown) = Chi : total:m143_8, partial:m147_6 -# 147| valnum = unique +# 147| mu147_6(int) = Store[?] : &:r147_5, r147_2 +# 147| valnum = mu147_6, r147_2 # 149| r149_1(glval) = VariableAddress[d] : # 149| valnum = unique # 149| r149_2(glval) = VariableAddress[pa] : -# 149| valnum = r143_5, r144_2, r145_2, r147_3, r149_2 -# 149| r149_3(A *) = Load[pa] : &:r149_2, m143_6 -# 149| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3 +# 149| valnum = r143_4, r144_2, r145_2, r147_3, r149_2 +# 149| r149_3(A *) = Load[pa] : &:r149_2, m143_5 +# 149| valnum = m143_5, r143_6, r144_3, r145_3, r147_4, r149_3 # 149| r149_4(glval) = FieldAddress[x] : r149_3 # 149| valnum = r144_4, r149_4 -# 149| r149_5(int) = Load[?] : &:r149_4, ~m143_8 -# 149| valnum = m144_6, m149_6, r144_5, r149_5 +# 149| r149_5(int) = Load[?] : &:r149_4, ~m? +# 149| valnum = m149_6, r149_5 # 149| m149_6(int) = Store[d] : &:r149_1, r149_5 -# 149| valnum = m144_6, m149_6, r144_5, r149_5 +# 149| valnum = m149_6, r149_5 # 150| v150_1(void) = NoOp : -# 143| v143_9(void) = ReturnIndirection[pa] : &:r143_7, m147_7 -# 143| v143_10(void) = ReturnVoid : -# 143| v143_11(void) = AliasedUse : m143_3 -# 143| v143_12(void) = ExitFunction : +# 143| v143_8(void) = ReturnIndirection[pa] : &:r143_6, ~m? +# 143| v143_9(void) = ReturnVoid : +# 143| v143_10(void) = AliasedUse : ~m? +# 143| v143_11(void) = ExitFunction : # 152| void test_read_global_different(int) # 152| Block 0 # 152| v152_1(void) = EnterFunction : -# 152| m152_2(unknown) = AliasedDefinition : -# 152| valnum = unique -# 152| m152_3(unknown) = InitializeNonLocal : +# 152| mu152_2(unknown) = AliasedDefinition : # 152| valnum = unique -# 152| m152_4(unknown) = Chi : total:m152_2, partial:m152_3 +# 152| mu152_3(unknown) = InitializeNonLocal : # 152| valnum = unique -# 152| r152_5(glval) = VariableAddress[n] : -# 152| valnum = r152_5, r156_1 -# 152| m152_6(int) = InitializeParameter[n] : &:r152_5 -# 152| valnum = m152_6, m156_6, r156_2 +# 152| r152_4(glval) = VariableAddress[n] : +# 152| valnum = r152_4, r156_1 +# 152| m152_5(int) = InitializeParameter[n] : &:r152_4 +# 152| valnum = m152_5, mu156_6, r156_2 # 153| r153_1(glval) = VariableAddress[b] : # 153| valnum = unique # 153| r153_2(glval) = VariableAddress[global_a] : # 153| valnum = r153_2, r154_2, r156_3, r158_2 -# 153| r153_3(A *) = Load[global_a] : &:r153_2, ~m152_3 -# 153| valnum = r153_3, r154_3, r156_4 +# 153| r153_3(A *) = Load[global_a] : &:r153_2, ~m? +# 153| valnum = unique # 153| r153_4(glval) = FieldAddress[x] : r153_3 -# 153| valnum = r153_4, r154_4 -# 153| r153_5(int) = Load[?] : &:r153_4, ~m152_4 -# 153| valnum = m153_6, m154_6, r153_5, r154_5 +# 153| valnum = unique +# 153| r153_5(int) = Load[?] : &:r153_4, ~m? +# 153| valnum = m153_6, r153_5 # 153| m153_6(int) = Store[b] : &:r153_1, r153_5 -# 153| valnum = m153_6, m154_6, r153_5, r154_5 +# 153| valnum = m153_6, r153_5 # 154| r154_1(glval) = VariableAddress[c] : # 154| valnum = unique # 154| r154_2(glval) = VariableAddress[global_a] : # 154| valnum = r153_2, r154_2, r156_3, r158_2 -# 154| r154_3(A *) = Load[global_a] : &:r154_2, ~m152_3 -# 154| valnum = r153_3, r154_3, r156_4 +# 154| r154_3(A *) = Load[global_a] : &:r154_2, ~m? +# 154| valnum = unique # 154| r154_4(glval) = FieldAddress[x] : r154_3 -# 154| valnum = r153_4, r154_4 -# 154| r154_5(int) = Load[?] : &:r154_4, ~m152_4 -# 154| valnum = m153_6, m154_6, r153_5, r154_5 +# 154| valnum = unique +# 154| r154_5(int) = Load[?] : &:r154_4, ~m? +# 154| valnum = m154_6, r154_5 # 154| m154_6(int) = Store[c] : &:r154_1, r154_5 -# 154| valnum = m153_6, m154_6, r153_5, r154_5 +# 154| valnum = m154_6, r154_5 # 156| r156_1(glval) = VariableAddress[n] : -# 156| valnum = r152_5, r156_1 -# 156| r156_2(int) = Load[n] : &:r156_1, m152_6 -# 156| valnum = m152_6, m156_6, r156_2 +# 156| valnum = r152_4, r156_1 +# 156| r156_2(int) = Load[n] : &:r156_1, m152_5 +# 156| valnum = m152_5, mu156_6, r156_2 # 156| r156_3(glval) = VariableAddress[global_a] : # 156| valnum = r153_2, r154_2, r156_3, r158_2 -# 156| r156_4(A *) = Load[global_a] : &:r156_3, ~m152_3 -# 156| valnum = r153_3, r154_3, r156_4 -# 156| r156_5(glval) = FieldAddress[y] : r156_4 +# 156| r156_4(A *) = Load[global_a] : &:r156_3, ~m? # 156| valnum = unique -# 156| m156_6(int) = Store[?] : &:r156_5, r156_2 -# 156| valnum = m152_6, m156_6, r156_2 -# 156| m156_7(unknown) = Chi : total:m152_4, partial:m156_6 +# 156| r156_5(glval) = FieldAddress[y] : r156_4 # 156| valnum = unique +# 156| mu156_6(int) = Store[?] : &:r156_5, r156_2 +# 156| valnum = m152_5, mu156_6, r156_2 # 158| r158_1(glval) = VariableAddress[d] : # 158| valnum = unique # 158| r158_2(glval) = VariableAddress[global_a] : # 158| valnum = r153_2, r154_2, r156_3, r158_2 -# 158| r158_3(A *) = Load[global_a] : &:r158_2, ~m156_7 +# 158| r158_3(A *) = Load[global_a] : &:r158_2, ~m? # 158| valnum = unique # 158| r158_4(glval) = FieldAddress[x] : r158_3 # 158| valnum = unique -# 158| r158_5(int) = Load[?] : &:r158_4, ~m156_7 +# 158| r158_5(int) = Load[?] : &:r158_4, ~m? # 158| valnum = m158_6, r158_5 # 158| m158_6(int) = Store[d] : &:r158_1, r158_5 # 158| valnum = m158_6, r158_5 # 159| v159_1(void) = NoOp : -# 152| v152_7(void) = ReturnVoid : -# 152| v152_8(void) = AliasedUse : ~m156_7 -# 152| v152_9(void) = ExitFunction : +# 152| v152_6(void) = ReturnVoid : +# 152| v152_7(void) = AliasedUse : ~m? +# 152| v152_8(void) = ExitFunction : # 166| void test_constMemberFunction() # 166| Block 0 # 166| v166_1(void) = EnterFunction : -# 166| m166_2(unknown) = AliasedDefinition : +# 166| mu166_2(unknown) = AliasedDefinition : # 166| valnum = unique -# 166| m166_3(unknown) = InitializeNonLocal : -# 166| valnum = unique -# 166| m166_4(unknown) = Chi : total:m166_2, partial:m166_3 +# 166| mu166_3(unknown) = InitializeNonLocal : # 166| valnum = unique # 167| r167_1(glval) = VariableAddress[s] : # 167| valnum = r167_1, r168_2, r169_1, r169_2 -# 167| m167_2(StructWithConstMemberFunction) = Uninitialized[s] : &:r167_1 -# 167| valnum = m167_2, m168_4, r168_3 -# 167| m167_3(unknown) = Chi : total:m166_4, partial:m167_2 +# 167| mu167_2(StructWithConstMemberFunction) = Uninitialized[s] : &:r167_1 # 167| valnum = unique # 168| r168_1(glval) = VariableAddress[s2] : # 168| valnum = unique # 168| r168_2(glval) = VariableAddress[s] : # 168| valnum = r167_1, r168_2, r169_1, r169_2 -# 168| r168_3(StructWithConstMemberFunction) = Load[s] : &:r168_2, m167_2 -# 168| valnum = m167_2, m168_4, r168_3 +# 168| r168_3(StructWithConstMemberFunction) = Load[s] : &:r168_2, ~m? +# 168| valnum = m168_4, r168_3 # 168| m168_4(StructWithConstMemberFunction) = Store[s2] : &:r168_1, r168_3 -# 168| valnum = m167_2, m168_4, r168_3 +# 168| valnum = m168_4, r168_3 # 169| r169_1(glval) = VariableAddress[s] : # 169| valnum = r167_1, r168_2, r169_1, r169_2 # 169| r169_2(glval) = Convert : r169_1 @@ -1176,12 +1120,10 @@ test.cpp: # 169| r169_3(glval) = FunctionAddress[constMemberFunction] : # 169| valnum = unique # 169| v169_4(void) = Call[constMemberFunction] : func:r169_3, this:r169_2 -# 169| m169_5(unknown) = ^CallSideEffect : ~m167_3 -# 169| valnum = unique -# 169| m169_6(unknown) = Chi : total:m167_3, partial:m169_5 +# 169| mu169_5(unknown) = ^CallSideEffect : ~m? # 169| valnum = unique -# 169| v169_7(void) = ^IndirectReadSideEffect[-1] : &:r169_2, ~m169_6 +# 169| v169_6(void) = ^IndirectReadSideEffect[-1] : &:r169_2, ~m? # 170| v170_1(void) = NoOp : -# 166| v166_5(void) = ReturnVoid : -# 166| v166_6(void) = AliasedUse : ~m169_6 -# 166| v166_7(void) = ExitFunction : +# 166| v166_4(void) = ReturnVoid : +# 166| v166_5(void) = AliasedUse : ~m? +# 166| v166_6(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.ql b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.ql index 3debea869b44..82f333a60cad 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.ql +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.ql @@ -5,4 +5,4 @@ import semmle.code.cpp.ir.PrintIR import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.ValueNumbering -import semmle.code.cpp.ir.implementation.aliased_ssa.gvn.PrintValueNumbering +import semmle.code.cpp.ir.implementation.unaliased_ssa.gvn.PrintValueNumbering From ba5c078de80d881818c70fcc1c6f89e831e3221a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 18:29:31 +0000 Subject: [PATCH 13/32] C++: "Fix" ir/points_to test following removal of aliased SSA It's still got an error in its expected results, but it had that in main already. --- .../library-tests/ir/points_to/points_to.ql | 30 +------------------ 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/points_to/points_to.ql b/cpp/ql/test/library-tests/ir/points_to/points_to.ql index 5f17d489dc81..fd12aca05391 100644 --- a/cpp/ql/test/library-tests/ir/points_to/points_to.ql +++ b/cpp/ql/test/library-tests/ir/points_to/points_to.ql @@ -38,32 +38,4 @@ module Raw { } } -module UnaliasedSsa { - private import semmle.code.cpp.ir.implementation.unaliased_ssa.IR - private import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasedSSA - - private MemoryLocation getAMemoryAccess(Instruction instr) { - result = getResultMemoryLocation(instr) or - result = getOperandMemoryLocation(instr.getAnOperand()) - } - - module UnaliasedSsaPointsToTest implements TestSig { - string getARelevantTag() { result = "ussa" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - exists(Instruction instr, MemoryLocation memLocation | - memLocation = getAMemoryAccess(instr) and - not memLocation.getVirtualVariable() instanceof AliasedVirtualVariable and - not memLocation instanceof AllNonLocalMemory and - tag = "ussa" and - not ignoreAllocation(memLocation.getAnAllocation().getAllocationString()) and - value = memLocation.toString() and - element = instr.toString() and - location = instr.getLocation() and - not ignoreFile(location.getFile()) - ) - } - } -} - -import MakeTest> +import MakeTest From 8bb7a26dd7f4be40835c5f07d26b58bf3def12d4 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 18:45:44 +0000 Subject: [PATCH 14/32] C++: Fix ir/range-analysis test following removal of aliased SSA --- .../range-analysis/SimpleRangeAnalysis_tests.cpp | 16 ++++++++-------- .../library-tests/ir/range-analysis/test.cpp | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp b/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp index 649d99a7575c..9907c88fe82c 100644 --- a/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp +++ b/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp @@ -883,16 +883,16 @@ void notequal_refinement(short n) { void notequal_variations(short n, float f) { if (n != 0) { if (n >= 0) { - range(n); // $ range=>=1 + range(n); // $ MISSING: range=>=1 } } if (n >= 5) { - if (2 * n - 10 == 0) { // $ overflow=+ - range(n); // $ range=>=5 MISSING: range===5 + if (2 * n - 10 == 0) { // $ overflow=+- overflow=- // BUG: Can't overflow + range(n); // $ MISSING: range=>=5 range===5 return; } - range(n); // $ range=>=5 MISSING: range=>=6 + range(n); // $ MISSING: range=>=5 range=>=6 } if (n != -32768 && n != -32767) { @@ -901,11 +901,11 @@ void notequal_variations(short n, float f) { if (n >= 0) { n ? - (range(n), n) // $ range=>=1 + (range(n), n) // $ MISSING: range=>=1 : (range(n), n); // $ MISSING: range===0 !n ? (range(n), n) // $ MISSING: range===0 - : (range(n), n); // $ range=>=1 + : (range(n), n); // $ MISSING: range=>=1 } } @@ -953,12 +953,12 @@ void widen_recursive_expr() { void guard_bound_out_of_range(void) { int i = 0; if (i < 0) { - range(i); // unreachable [BUG: is -max .. +max] + range(i); // $ range=<=-1 range=>=0 // BUG: unreachable } unsigned int u = 0; if (u < 0) { - range(u); // unreachable [BUG: is 0 .. +max] + range(u); // $ range=<=-1 range=>=0 // BUG: unreachable } } diff --git a/cpp/ql/test/library-tests/ir/range-analysis/test.cpp b/cpp/ql/test/library-tests/ir/range-analysis/test.cpp index 0c1a98b06bb7..0c1c61a42017 100644 --- a/cpp/ql/test/library-tests/ir/range-analysis/test.cpp +++ b/cpp/ql/test/library-tests/ir/range-analysis/test.cpp @@ -143,7 +143,7 @@ void read_argument(const X *); void nonterminating_without_operands_as_ssa(X *x) { read_argument(x); while (x->n) { - x->n--; + x->n--; // $ overflow=- } } @@ -156,4 +156,4 @@ void test_with_irreduble_cfg(int i, int x) { inLoop: range(i); // $ range="<=InitializeParameter: x+0" } -} \ No newline at end of file +} From 7d7992a3b882acb79c18fd106c803c9bf76887da Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 3 Mar 2026 18:46:59 +0000 Subject: [PATCH 15/32] C++: Remove aliased_ssa_* from ir/ir test following removal of aliased SSA --- .../ir/ir/aliased_ssa_consistency.expected | 33 ------------------- .../ir/ir/aliased_ssa_consistency.ql | 2 -- .../aliased_ssa_consistency_unsound.expected | 33 ------------------- .../ir/aliased_ssa_consistency_unsound.qlref | 1 - .../ir/aliased_ssa_ssa_consistency.expected | 3 -- .../ir/ir/aliased_ssa_ssa_consistency.ql | 2 -- ...iased_ssa_ssa_consistency_unsound.expected | 3 -- .../aliased_ssa_ssa_consistency_unsound.qlref | 1 - 8 files changed, 78 deletions(-) delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.ql delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.qlref delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.expected delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.ql delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.expected delete mode 100644 cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.qlref diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected deleted file mode 100644 index f1b75895c3e7..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ /dev/null @@ -1,33 +0,0 @@ -missingOperand -unexpectedOperand -duplicateOperand -missingPhiOperand -missingOperandType -duplicateChiOperand -sideEffectWithoutPrimary -instructionWithoutSuccessor -ambiguousSuccessors -unexplainedLoop -unnecessaryPhiInstruction -memoryOperandDefinitionIsUnmodeled -operandAcrossFunctions -instructionWithoutUniqueBlock -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -containsLoopOfForwardEdges -missingIRType -multipleIRTypes -lostReachability -backEdgeCountMismatch -useNotDominatedByDefinition -switchInstructionWithoutDefaultEdge -notMarkedAsConflated -wronglyMarkedAsConflated -invalidOverlap -nonUniqueEnclosingIRFunction -fieldAddressOnNonPointer -thisArgumentIsNonPointer -| ir.cpp:2548:34:2548:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2547:6:2547:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | -nonUniqueIRVariable -nonBooleanOperand -missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.ql b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.ql deleted file mode 100644 index 847991163c85..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.ql +++ /dev/null @@ -1,2 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.IRConsistency -import semmle.code.cpp.ir.implementation.UseSoundEscapeAnalysis diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected deleted file mode 100644 index f1b75895c3e7..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ /dev/null @@ -1,33 +0,0 @@ -missingOperand -unexpectedOperand -duplicateOperand -missingPhiOperand -missingOperandType -duplicateChiOperand -sideEffectWithoutPrimary -instructionWithoutSuccessor -ambiguousSuccessors -unexplainedLoop -unnecessaryPhiInstruction -memoryOperandDefinitionIsUnmodeled -operandAcrossFunctions -instructionWithoutUniqueBlock -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -containsLoopOfForwardEdges -missingIRType -multipleIRTypes -lostReachability -backEdgeCountMismatch -useNotDominatedByDefinition -switchInstructionWithoutDefaultEdge -notMarkedAsConflated -wronglyMarkedAsConflated -invalidOverlap -nonUniqueEnclosingIRFunction -fieldAddressOnNonPointer -thisArgumentIsNonPointer -| ir.cpp:2548:34:2548:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2547:6:2547:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | -nonUniqueIRVariable -nonBooleanOperand -missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.qlref b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.qlref deleted file mode 100644 index 0c9100ea0432..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.qlref +++ /dev/null @@ -1 +0,0 @@ -semmle/code/cpp/ir/IRConsistency.ql \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.expected deleted file mode 100644 index 21782bd5ef14..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleOperandMemoryLocations -missingVirtualVariableForMemoryLocation -multipleVirtualVariablesForMemoryLocation diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.ql b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.ql deleted file mode 100644 index b9d034043386..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency.ql +++ /dev/null @@ -1,2 +0,0 @@ -import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SSAConsistency -import semmle.code.cpp.ir.implementation.UseSoundEscapeAnalysis diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.expected deleted file mode 100644 index 21782bd5ef14..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleOperandMemoryLocations -missingVirtualVariableForMemoryLocation -multipleVirtualVariablesForMemoryLocation diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.qlref b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.qlref deleted file mode 100644 index d0a29f0641af..000000000000 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_ssa_consistency_unsound.qlref +++ /dev/null @@ -1 +0,0 @@ -semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.ql \ No newline at end of file From ef7a1a8d2f49b32eeae2eb8182d44518cb69dfb9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 00:02:46 +0000 Subject: [PATCH 16/32] C++: Remove aliased_ssa from config/identical-files.json --- config/identical-files.json | 91 +++++++++---------------------------- 1 file changed, 21 insertions(+), 70 deletions(-) diff --git a/config/identical-files.json b/config/identical-files.json index bdaf567ae17e..f18e469a194d 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -25,136 +25,87 @@ ], "IR Instruction": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll" ], "IR IRBlock": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll" ], "IR IRVariable": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRVariable.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll" ], "IR IRFunction": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRFunction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRFunction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRFunction.qll" ], "IR Operand": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Operand.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll" ], "IR IR": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IR.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IR.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IR.qll" ], "IR IRConsistency": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll" ], "IR PrintIR": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/PrintIR.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll" - ], - "IR SSAConsistency": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll" ], "C++ IR InstructionImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/InstructionImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/InstructionImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/InstructionImports.qll" ], "C++ IR IRImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRImports.qll" ], "C++ IR IRBlockImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRBlockImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRBlockImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll" ], "C++ IR IRConsistencyImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConsistencyImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRConsistencyImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRConsistencyImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRConsistencyImports.qll" ], "C++ IR IRFunctionImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRFunctionImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRFunctionImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll" ], "C++ IR IRVariableImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRVariableImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/IRVariableImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll" ], "C++ IR OperandImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/OperandImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/OperandImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/OperandImports.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/OperandImports.qll" ], "C++ IR PrintIRImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/PrintIRImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintIRImports.qll" - ], - "C++ SSA SSAConstructionImports": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstructionImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionImports.qll" - ], - "SSA AliasAnalysis": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll" - ], - "SSA PrintAliasAnalysis": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/PrintAliasAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintAliasAnalysis.qll" - ], - "C++ SSA AliasAnalysisImports": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll" - ], - "IR SSA SSAConstruction": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll" - ], - "IR SSA PrintSSA": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/PrintSSA.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll" ], "IR ValueNumberInternal": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll" ], "C++ IR ValueNumber": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll" ], "C++ IR PrintValueNumbering": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/PrintValueNumbering.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll" ], "C++ IR ConstantAnalysis": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll" ], "C++ IR PrintConstantAnalysis": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/PrintConstantAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/PrintConstantAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/PrintConstantAnalysis.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/PrintConstantAnalysis.qll" ], "C++ IR ReachableBlock": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/reachability/ReachableBlock.qll", From aefab6d0088131ed4d30d7c48049948135167e2c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 00:48:53 +0000 Subject: [PATCH 17/32] C++: Fix cpp/ql/src/Metrics/Internal/IRConsistency.ql now aliased SSA is gone --- cpp/ql/src/Metrics/Internal/IRConsistency.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Metrics/Internal/IRConsistency.ql b/cpp/ql/src/Metrics/Internal/IRConsistency.ql index b4b5b32f7adf..41e4a1590f24 100644 --- a/cpp/ql/src/Metrics/Internal/IRConsistency.ql +++ b/cpp/ql/src/Metrics/Internal/IRConsistency.ql @@ -7,8 +7,8 @@ */ import cpp -import semmle.code.cpp.ir.implementation.aliased_ssa.IR -import semmle.code.cpp.ir.implementation.aliased_ssa.IRConsistency as IRConsistency +import semmle.code.cpp.ir.implementation.unaliased_ssa.IR +import semmle.code.cpp.ir.implementation.unaliased_ssa.IRConsistency as IRConsistency class PresentIRFunction extends IRConsistency::PresentIRFunction { override string toString() { From 56e1ef5ab2e498ad4cce870d4febc448a1802631 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 01:12:04 +0000 Subject: [PATCH 18/32] C++: Accept changes in experimental tests after aliased SSA removal --- .../arraylengthanalysis/ArrayLengthAnalysisTest.expected | 2 +- .../rangeanalysis/signanalysis/SignAnalysis.expected | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/experimental/library-tests/rangeanalysis/arraylengthanalysis/ArrayLengthAnalysisTest.expected b/cpp/ql/test/experimental/library-tests/rangeanalysis/arraylengthanalysis/ArrayLengthAnalysisTest.expected index cd476395cec7..b2ea58ad52d7 100644 --- a/cpp/ql/test/experimental/library-tests/rangeanalysis/arraylengthanalysis/ArrayLengthAnalysisTest.expected +++ b/cpp/ql/test/experimental/library-tests/rangeanalysis/arraylengthanalysis/ArrayLengthAnalysisTest.expected @@ -1,4 +1,4 @@ -| test.cpp:15:8:15:11 | Load: aptr | VNLength(InitializeParameter: count) | 0 | ZeroOffset | 0 | +| test.cpp:15:8:15:11 | Load: aptr | VNLength(Load: count) | 0 | ZeroOffset | 0 | | test.cpp:19:8:19:8 | Load: a | VNLength(Load: count) | 0 | ZeroOffset | 0 | | test.cpp:21:8:21:8 | Load: a | VNLength(Load: count) | -1 | ZeroOffset | 0 | | test.cpp:23:8:23:8 | Load: a | VNLength(Load: count) | 1 | ZeroOffset | 0 | diff --git a/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected b/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected index dd33bd7e04f0..72942060ed05 100644 --- a/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected +++ b/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected @@ -15,7 +15,8 @@ | inline_assembly.c:9:23:9:23 | Uninitialized: definition of y | positive | | inline_assembly.c:10:3:10:7 | Store: ... = ... | positive strictlyPositive | | inline_assembly.c:10:7:10:7 | Constant: (unsigned int)... | positive strictlyPositive | -| inline_assembly.c:12:32:12:32 | Load: y | positive strictlyPositive | +| inline_assembly.c:12:29:12:29 | Load: x | positive | +| inline_assembly.c:12:32:12:32 | Load: y | positive | | inline_assembly.c:21:29:21:29 | Load: x | positive | | inline_assembly.c:21:32:21:32 | Load: y | positive | | minmax.c:16:9:16:10 | Constant: 1 | positive strictlyPositive | From 953c1d61a4f0fe8565cbcb5ca75b6e30643488ad Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 01:21:25 +0000 Subject: [PATCH 19/32] C++: Accept changes in experimental query tests following aliased SSA removal --- .../CWE-193/array-access/ArrayAccessProductFlow.expected | 9 --------- .../constant-size/ConstantSizeArrayOffByOne.expected | 3 +-- ...sOfMemoryLocationAfterEndOfBufferUsingStrlen.expected | 5 ----- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected index b343a4b47ede..e6e6a8e7c79a 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected @@ -104,17 +104,8 @@ subpaths | test.cpp:10:9:10:11 | arr | test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | Off-by one error allocated at $@ bounded by $@. | test.cpp:4:17:4:22 | call to malloc | call to malloc | test.cpp:4:24:4:27 | size | size | | test.cpp:10:9:10:11 | arr | test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | Off-by one error allocated at $@ bounded by $@. | test.cpp:4:17:4:22 | call to malloc | call to malloc | test.cpp:5:25:5:28 | size | size | | test.cpp:10:9:10:11 | arr | test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | Off-by one error allocated at $@ bounded by $@. | test.cpp:4:17:4:22 | call to malloc | call to malloc | test.cpp:9:26:9:29 | size | size | -| test.cpp:35:13:35:13 | p | test.cpp:21:13:21:18 | call to malloc | test.cpp:35:13:35:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:21:13:21:18 | call to malloc | call to malloc | test.cpp:30:29:30:32 | size | size | | test.cpp:35:13:35:13 | p | test.cpp:21:13:21:18 | call to malloc | test.cpp:35:13:35:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:21:13:21:18 | call to malloc | call to malloc | test.cpp:34:30:34:33 | size | size | -| test.cpp:45:13:45:13 | p | test.cpp:21:13:21:18 | call to malloc | test.cpp:45:13:45:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:21:13:21:18 | call to malloc | call to malloc | test.cpp:40:29:40:32 | size | size | | test.cpp:45:13:45:13 | p | test.cpp:21:13:21:18 | call to malloc | test.cpp:45:13:45:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:21:13:21:18 | call to malloc | call to malloc | test.cpp:44:30:44:33 | size | size | -| test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:55:20:55:23 | size | size | -| test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:55:20:55:23 | size | size | -| test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:56:5:56:19 | ... = ... | ... = ... | -| test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:56:5:56:19 | ... = ... | ... = ... | -| test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:56:16:56:19 | size | size | -| test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:58:29:58:32 | size | size | | test.cpp:63:13:63:13 | p | test.cpp:55:13:55:18 | call to malloc | test.cpp:63:13:63:13 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:55:13:55:18 | call to malloc | call to malloc | test.cpp:62:30:62:33 | size | size | | test.cpp:83:14:83:14 | p | test.cpp:69:14:69:19 | call to malloc | test.cpp:83:14:83:14 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:69:14:69:19 | call to malloc | call to malloc | test.cpp:82:31:82:34 | size | size | -| test.cpp:93:14:93:14 | p | test.cpp:69:14:69:19 | call to malloc | test.cpp:93:14:93:14 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:69:14:69:19 | call to malloc | call to malloc | test.cpp:88:30:88:33 | size | size | | test.cpp:93:14:93:14 | p | test.cpp:69:14:69:19 | call to malloc | test.cpp:93:14:93:14 | p | Off-by one error allocated at $@ bounded by $@. | test.cpp:69:14:69:19 | call to malloc | call to malloc | test.cpp:92:31:92:34 | size | size | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected index a9927b510930..500cf0135ce2 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected @@ -45,6 +45,7 @@ edges | test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | provenance | | | test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | provenance | | | test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | provenance | | +| test.cpp:147:4:147:9 | -- ... | test.cpp:147:4:147:9 | -- ... | provenance | | | test.cpp:154:7:154:9 | definition of buf | test.cpp:156:12:156:18 | ... + ... | provenance | Config | | test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | provenance | Config | | test.cpp:156:12:156:18 | ... + ... | test.cpp:156:12:156:18 | ... + ... | provenance | | @@ -226,8 +227,6 @@ subpaths | test.cpp:136:9:136:16 | PointerAdd: ... += ... | test.cpp:142:10:142:13 | definition of asdf | test.cpp:138:13:138:15 | arr | This pointer arithmetic may have an off-by-2 error allowing it to overrun $@ at this $@. | test.cpp:142:10:142:13 | asdf | asdf | test.cpp:138:12:138:15 | Load: * ... | read | | test.cpp:136:9:136:16 | PointerAdd: ... += ... | test.cpp:143:18:143:21 | asdf | test.cpp:138:13:138:15 | arr | This pointer arithmetic may have an off-by-2 error allowing it to overrun $@ at this $@. | test.cpp:142:10:142:13 | asdf | asdf | test.cpp:138:12:138:15 | Load: * ... | read | | test.cpp:156:12:156:18 | PointerAdd: ... + ... | test.cpp:154:7:154:9 | definition of buf | test.cpp:147:4:147:9 | -- ... | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:154:7:154:9 | buf | buf | test.cpp:147:3:147:13 | Store: ... = ... | write | -| test.cpp:156:12:156:18 | PointerAdd: ... + ... | test.cpp:154:7:154:9 | definition of buf | test.cpp:147:4:147:9 | -- ... | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:154:7:154:9 | buf | buf | test.cpp:147:3:147:13 | Store: ... = ... | write | -| test.cpp:156:12:156:18 | PointerAdd: ... + ... | test.cpp:156:12:156:14 | buf | test.cpp:147:4:147:9 | -- ... | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:154:7:154:9 | buf | buf | test.cpp:147:3:147:13 | Store: ... = ... | write | | test.cpp:156:12:156:18 | PointerAdd: ... + ... | test.cpp:156:12:156:14 | buf | test.cpp:147:4:147:9 | -- ... | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:154:7:154:9 | buf | buf | test.cpp:147:3:147:13 | Store: ... = ... | write | | test.cpp:221:5:221:11 | PointerAdd: access to array | test.cpp:217:19:217:24 | definition of buffer | test.cpp:221:5:221:11 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:217:19:217:24 | buffer | buffer | test.cpp:221:5:221:15 | Store: ... = ... | write | | test.cpp:221:5:221:11 | PointerAdd: access to array | test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:217:19:217:24 | buffer | buffer | test.cpp:221:5:221:15 | Store: ... = ... | write | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-788/semmle/tests/AccessOfMemoryLocationAfterEndOfBufferUsingStrlen.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-788/semmle/tests/AccessOfMemoryLocationAfterEndOfBufferUsingStrlen.expected index df7617e7cf66..d81c6c91d711 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-788/semmle/tests/AccessOfMemoryLocationAfterEndOfBufferUsingStrlen.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-788/semmle/tests/AccessOfMemoryLocationAfterEndOfBufferUsingStrlen.expected @@ -1,9 +1,4 @@ | test.c:16:3:16:24 | ... = ... | Potential unsafe or redundant assignment. | | test.c:17:3:17:40 | ... = ... | Potential unsafe or redundant assignment. | -| test.c:18:3:18:44 | ... = ... | Potential unsafe or redundant assignment. | | test.c:19:3:19:44 | ... = ... | Potential unsafe or redundant assignment. | -| test.c:20:3:20:48 | ... = ... | Potential unsafe or redundant assignment. | | test.c:21:3:21:48 | ... = ... | Potential unsafe or redundant assignment. | -| test.c:22:3:22:52 | ... = ... | Potential unsafe or redundant assignment. | -| test.c:23:3:23:50 | ... = ... | Potential unsafe or redundant assignment. | -| test.c:24:3:24:54 | ... = ... | Potential unsafe or redundant assignment. | From 18f7e489801268ca822a3b991f6a3d7078b1afbf Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 12:57:22 +0000 Subject: [PATCH 20/32] C++: Rename aliased_ir test to unaliased_ir --- .../ir/ir/{aliased_ir.expected => unaliased_ir.expected} | 0 .../test/library-tests/ir/ir/{aliased_ir.ql => unaliased_ir.ql} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename cpp/ql/test/library-tests/ir/ir/{aliased_ir.expected => unaliased_ir.expected} (100%) rename cpp/ql/test/library-tests/ir/ir/{aliased_ir.ql => unaliased_ir.ql} (100%) diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ir.expected similarity index 100% rename from cpp/ql/test/library-tests/ir/ir/aliased_ir.expected rename to cpp/ql/test/library-tests/ir/ir/unaliased_ir.expected diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.ql b/cpp/ql/test/library-tests/ir/ir/unaliased_ir.ql similarity index 100% rename from cpp/ql/test/library-tests/ir/ir/aliased_ir.ql rename to cpp/ql/test/library-tests/ir/ir/unaliased_ir.ql From 9c77bb001ef3946461ccc8caa606845969442d52 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 12:59:02 +0000 Subject: [PATCH 21/32] C++: Accept changes in unaliased_ir.ql test --- .../library-tests/ir/ir/unaliased_ir.expected | 22028 +++++++--------- .../test/library-tests/ir/ir/unaliased_ir.ql | 2 +- 2 files changed, 9980 insertions(+), 12050 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ir.expected index 369cc9495a2b..cba1a742b8be 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ir.expected @@ -2,265 +2,247 @@ arm_neon.cpp: # 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t) # 6| Block 0 # 6| v6_1(void) = EnterFunction : -# 6| m6_2(unknown) = AliasedDefinition : -# 6| m6_3(unknown) = InitializeNonLocal : -# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 -# 6| r6_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 6| m6_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r6_5 -# 6| r6_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : -# 6| m6_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r6_7 +# 6| mu6_2(unknown) = AliasedDefinition : +# 6| mu6_3(unknown) = InitializeNonLocal : +# 6| r6_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 6| m6_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r6_4 +# 6| r6_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 6| m6_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r6_6 # 7| r7_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : # 7| r7_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 7| r7_3(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r7_2, m6_6 +# 7| r7_3(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r7_2, m6_5 # 7| r7_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : -# 7| r7_5(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r7_4, m6_8 +# 7| r7_5(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r7_4, m6_7 # 7| r7_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r7_3, r7_5 # 7| m7_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r7_1, r7_6 -# 6| r6_9(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : -# 6| v6_10(void) = ReturnValue : &:r6_9, m7_7 -# 6| v6_11(void) = AliasedUse : m6_3 -# 6| v6_12(void) = ExitFunction : +# 6| r6_8(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 6| v6_9(void) = ReturnValue : &:r6_8, m7_7 +# 6| v6_10(void) = AliasedUse : ~m? +# 6| v6_11(void) = ExitFunction : # 12| uint16x8_t arm_add(uint8x8_t, uint8x8_t*) # 12| Block 0 # 12| v12_1(void) = EnterFunction : -# 12| m12_2(unknown) = AliasedDefinition : -# 12| m12_3(unknown) = InitializeNonLocal : -# 12| m12_4(unknown) = Chi : total:m12_2, partial:m12_3 -# 12| r12_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 12| m12_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r12_5 -# 12| r12_7(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] : -# 12| m12_8(__attribute((neon_vector_type(8))) unsigned char *) = InitializeParameter[b] : &:r12_7 -# 12| r12_9(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r12_7, m12_8 -# 12| m12_10(unknown) = InitializeIndirection[b] : &:r12_9 +# 12| mu12_2(unknown) = AliasedDefinition : +# 12| mu12_3(unknown) = InitializeNonLocal : +# 12| r12_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 12| m12_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r12_4 +# 12| r12_6(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] : +# 12| m12_7(__attribute((neon_vector_type(8))) unsigned char *) = InitializeParameter[b] : &:r12_6 +# 12| r12_8(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r12_6, m12_7 +# 12| mu12_9(unknown) = InitializeIndirection[b] : &:r12_8 # 13| r13_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : # 13| r13_2(glval) = FunctionAddress[vadd_u8] : # 13| r13_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 13| r13_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r13_3, m12_6 +# 13| r13_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r13_3, m12_5 # 13| r13_5(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] : -# 13| r13_6(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r13_5, m12_8 -# 13| r13_7(__attribute((neon_vector_type(8))) unsigned char) = Load[?] : &:r13_6, ~m12_10 +# 13| r13_6(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r13_5, m12_7 +# 13| r13_7(__attribute((neon_vector_type(8))) unsigned char) = Load[?] : &:r13_6, ~m? # 13| r13_8(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r13_2, 0:r13_4, 1:r13_7 -# 13| m13_9(unknown) = ^CallSideEffect : ~m12_4 -# 13| m13_10(unknown) = Chi : total:m12_4, partial:m13_9 -# 13| m13_11(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r13_1, r13_8 +# 13| mu13_9(unknown) = ^CallSideEffect : ~m? +# 13| m13_10(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r13_1, r13_8 # 14| r14_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : # 14| r14_2(glval) = FunctionAddress[vaddl_u8] : # 14| r14_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 14| r14_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r14_3, m12_6 +# 14| r14_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r14_3, m12_5 # 14| r14_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : -# 14| r14_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r14_5, m13_11 +# 14| r14_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r14_5, m13_10 # 14| r14_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r14_2, 0:r14_4, 1:r14_6 -# 14| m14_8(unknown) = ^CallSideEffect : ~m13_10 -# 14| m14_9(unknown) = Chi : total:m13_10, partial:m14_8 -# 14| m14_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r14_1, r14_7 -# 12| v12_11(void) = ReturnIndirection[b] : &:r12_9, m12_10 -# 12| r12_12(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 12| v12_13(void) = ReturnValue : &:r12_12, m14_10 -# 12| v12_14(void) = AliasedUse : ~m14_9 -# 12| v12_15(void) = ExitFunction : +# 14| mu14_8(unknown) = ^CallSideEffect : ~m? +# 14| m14_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r14_1, r14_7 +# 12| v12_10(void) = ReturnIndirection[b] : &:r12_8, ~m? +# 12| r12_11(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 12| v12_12(void) = ReturnValue : &:r12_11, m14_9 +# 12| v12_13(void) = AliasedUse : ~m? +# 12| v12_14(void) = ExitFunction : # 22| mfloat8x8_t arm_reinterpret(int8x8_t*) # 22| Block 0 # 22| v22_1(void) = EnterFunction : -# 22| m22_2(unknown) = AliasedDefinition : -# 22| m22_3(unknown) = InitializeNonLocal : -# 22| m22_4(unknown) = Chi : total:m22_2, partial:m22_3 -# 22| r22_5(glval) = VariableAddress[a] : -# 22| m22_6(char *) = InitializeParameter[a] : &:r22_5 -# 22| r22_7(char *) = Load[a] : &:r22_5, m22_6 -# 22| m22_8(unknown) = InitializeIndirection[a] : &:r22_7 +# 22| mu22_2(unknown) = AliasedDefinition : +# 22| mu22_3(unknown) = InitializeNonLocal : +# 22| r22_4(glval) = VariableAddress[a] : +# 22| m22_5(char *) = InitializeParameter[a] : &:r22_4 +# 22| r22_6(char *) = Load[a] : &:r22_4, m22_5 +# 22| mu22_7(unknown) = InitializeIndirection[a] : &:r22_6 # 23| r23_1(glval<__mfp8>) = VariableAddress[#return] : # 23| r23_2(glval) = FunctionAddress[vreinterpret_mf8_s8] : # 23| r23_3(glval) = VariableAddress[a] : -# 23| r23_4(char *) = Load[a] : &:r23_3, m22_6 -# 23| r23_5(char) = Load[?] : &:r23_4, ~m22_8 +# 23| r23_4(char *) = Load[a] : &:r23_3, m22_5 +# 23| r23_5(char) = Load[?] : &:r23_4, ~m? # 23| r23_6(__mfp8) = Call[vreinterpret_mf8_s8] : func:r23_2, 0:r23_5 -# 23| m23_7(unknown) = ^CallSideEffect : ~m22_4 -# 23| m23_8(unknown) = Chi : total:m22_4, partial:m23_7 -# 23| m23_9(__mfp8) = Store[#return] : &:r23_1, r23_6 -# 22| v22_9(void) = ReturnIndirection[a] : &:r22_7, m22_8 -# 22| r22_10(glval<__mfp8>) = VariableAddress[#return] : -# 22| v22_11(void) = ReturnValue : &:r22_10, m23_9 -# 22| v22_12(void) = AliasedUse : ~m23_8 -# 22| v22_13(void) = ExitFunction : +# 23| mu23_7(unknown) = ^CallSideEffect : ~m? +# 23| m23_8(__mfp8) = Store[#return] : &:r23_1, r23_6 +# 22| v22_8(void) = ReturnIndirection[a] : &:r22_6, ~m? +# 22| r22_9(glval<__mfp8>) = VariableAddress[#return] : +# 22| v22_10(void) = ReturnValue : &:r22_9, m23_8 +# 22| v22_11(void) = AliasedUse : ~m? +# 22| v22_12(void) = ExitFunction : arm_sve.cpp: # 8| svuint8x2_t arm_sel(svcount_t, svuint8x2_t, svuint8x2_t*) # 8| Block 0 # 8| v8_1(void) = EnterFunction : -# 8| m8_2(unknown) = AliasedDefinition : -# 8| m8_3(unknown) = InitializeNonLocal : -# 8| m8_4(unknown) = Chi : total:m8_2, partial:m8_3 -# 8| r8_5(glval<__SVCount_t>) = VariableAddress[a] : -# 8| m8_6(__SVCount_t) = InitializeParameter[a] : &:r8_5 -# 8| r8_7(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] : -# 8| m8_8(__edg_scalable_vector_type__(unsigned char, 2)) = InitializeParameter[b] : &:r8_7 -# 8| r8_9(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] : -# 8| m8_10(__edg_scalable_vector_type__(unsigned char, 2) *) = InitializeParameter[c] : &:r8_9 -# 8| r8_11(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r8_9, m8_10 -# 8| m8_12(unknown) = InitializeIndirection[c] : &:r8_11 +# 8| mu8_2(unknown) = AliasedDefinition : +# 8| mu8_3(unknown) = InitializeNonLocal : +# 8| r8_4(glval<__SVCount_t>) = VariableAddress[a] : +# 8| m8_5(__SVCount_t) = InitializeParameter[a] : &:r8_4 +# 8| r8_6(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] : +# 8| m8_7(__edg_scalable_vector_type__(unsigned char, 2)) = InitializeParameter[b] : &:r8_6 +# 8| r8_8(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] : +# 8| m8_9(__edg_scalable_vector_type__(unsigned char, 2) *) = InitializeParameter[c] : &:r8_8 +# 8| r8_10(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r8_8, m8_9 +# 8| mu8_11(unknown) = InitializeIndirection[c] : &:r8_10 # 9| r9_1(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[d] : # 9| r9_2(glval) = FunctionAddress[svsel_u8_x2] : # 9| r9_3(glval<__SVCount_t>) = VariableAddress[a] : -# 9| r9_4(__SVCount_t) = Load[a] : &:r9_3, m8_6 +# 9| r9_4(__SVCount_t) = Load[a] : &:r9_3, m8_5 # 9| r9_5(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] : -# 9| r9_6(__edg_scalable_vector_type__(unsigned char, 2)) = Load[b] : &:r9_5, m8_8 +# 9| r9_6(__edg_scalable_vector_type__(unsigned char, 2)) = Load[b] : &:r9_5, m8_7 # 9| r9_7(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] : -# 9| r9_8(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r9_7, m8_10 -# 9| r9_9(__edg_scalable_vector_type__(unsigned char, 2)) = Load[?] : &:r9_8, ~m8_12 +# 9| r9_8(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r9_7, m8_9 +# 9| r9_9(__edg_scalable_vector_type__(unsigned char, 2)) = Load[?] : &:r9_8, ~m? # 9| r9_10(__edg_scalable_vector_type__(unsigned char, 2)) = Call[svsel_u8_x2] : func:r9_2, 0:r9_4, 1:r9_6, 2:r9_9 -# 9| m9_11(unknown) = ^CallSideEffect : ~m8_4 -# 9| m9_12(unknown) = Chi : total:m8_4, partial:m9_11 -# 9| m9_13(__edg_scalable_vector_type__(unsigned char, 2)) = Store[d] : &:r9_1, r9_10 +# 9| mu9_11(unknown) = ^CallSideEffect : ~m? +# 9| m9_12(__edg_scalable_vector_type__(unsigned char, 2)) = Store[d] : &:r9_1, r9_10 # 10| r10_1(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] : # 10| r10_2(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[d] : -# 10| r10_3(__edg_scalable_vector_type__(unsigned char, 2)) = Load[d] : &:r10_2, m9_13 +# 10| r10_3(__edg_scalable_vector_type__(unsigned char, 2)) = Load[d] : &:r10_2, m9_12 # 10| m10_4(__edg_scalable_vector_type__(unsigned char, 2)) = Store[#return] : &:r10_1, r10_3 -# 8| v8_13(void) = ReturnIndirection[c] : &:r8_11, m8_12 -# 8| r8_14(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] : -# 8| v8_15(void) = ReturnValue : &:r8_14, m10_4 -# 8| v8_16(void) = AliasedUse : ~m9_12 -# 8| v8_17(void) = ExitFunction : +# 8| v8_12(void) = ReturnIndirection[c] : &:r8_10, ~m? +# 8| r8_13(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] : +# 8| v8_14(void) = ReturnValue : &:r8_13, m10_4 +# 8| v8_15(void) = AliasedUse : ~m? +# 8| v8_16(void) = ExitFunction : bad_asts.cpp: # 9| int Bad::S::MemberFunction(int) # 9| Block 0 # 9| v9_1(void) = EnterFunction : -# 9| m9_2(unknown) = AliasedDefinition : -# 9| m9_3(unknown) = InitializeNonLocal : -# 9| m9_4(unknown) = Chi : total:m9_2, partial:m9_3 -# 9| r9_5(glval) = VariableAddress[#this] : -# 9| m9_6(glval) = InitializeParameter[#this] : &:r9_5 -# 9| r9_7(glval) = Load[#this] : &:r9_5, m9_6 -# 9| m9_8(S) = InitializeIndirection[#this] : &:r9_7 -# 9| r9_9(glval) = VariableAddress[y] : -# 9| m9_10(int) = InitializeParameter[y] : &:r9_9 +# 9| mu9_2(unknown) = AliasedDefinition : +# 9| mu9_3(unknown) = InitializeNonLocal : +# 9| r9_4(glval) = VariableAddress[#this] : +# 9| m9_5(glval) = InitializeParameter[#this] : &:r9_4 +# 9| r9_6(glval) = Load[#this] : &:r9_4, m9_5 +# 9| mu9_7(S) = InitializeIndirection[#this] : &:r9_6 +# 9| r9_8(glval) = VariableAddress[y] : +# 9| m9_9(int) = InitializeParameter[y] : &:r9_8 # 10| r10_1(glval) = VariableAddress[#return] : # 10| r10_2(int) = Constant[6] : # 10| r10_3(glval) = VariableAddress[#this] : -# 10| r10_4(S *) = Load[#this] : &:r10_3, m9_6 +# 10| r10_4(S *) = Load[#this] : &:r10_3, m9_5 # 10| r10_5(glval) = FieldAddress[x] : r10_4 -# 10| r10_6(int) = Load[?] : &:r10_5, ~m9_8 +# 10| r10_6(int) = Load[?] : &:r10_5, ~m? # 10| r10_7(int) = Add : r10_2, r10_6 # 10| r10_8(glval) = VariableAddress[y] : -# 10| r10_9(int) = Load[y] : &:r10_8, m9_10 +# 10| r10_9(int) = Load[y] : &:r10_8, m9_9 # 10| r10_10(int) = Add : r10_7, r10_9 # 10| m10_11(int) = Store[#return] : &:r10_1, r10_10 -# 9| v9_11(void) = ReturnIndirection[#this] : &:r9_7, m9_8 -# 9| r9_12(glval) = VariableAddress[#return] : -# 9| v9_13(void) = ReturnValue : &:r9_12, m10_11 -# 9| v9_14(void) = AliasedUse : m9_3 -# 9| v9_15(void) = ExitFunction : +# 9| v9_10(void) = ReturnIndirection[#this] : &:r9_6, ~m? +# 9| r9_11(glval) = VariableAddress[#return] : +# 9| v9_12(void) = ReturnValue : &:r9_11, m10_11 +# 9| v9_13(void) = AliasedUse : ~m? +# 9| v9_14(void) = ExitFunction : # 14| void Bad::CallBadMemberFunction() # 14| Block 0 # 14| v14_1(void) = EnterFunction : -# 14| m14_2(unknown) = AliasedDefinition : -# 14| m14_3(unknown) = InitializeNonLocal : -# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3 +# 14| mu14_2(unknown) = AliasedDefinition : +# 14| mu14_3(unknown) = InitializeNonLocal : # 15| r15_1(glval) = VariableAddress[s] : -# 15| m15_2(S) = Uninitialized[s] : &:r15_1 +# 15| mu15_2(S) = Uninitialized[s] : &:r15_1 # 15| r15_3(glval) = FieldAddress[x] : r15_1 # 15| r15_4(int) = Constant[0] : -# 15| m15_5(int) = Store[?] : &:r15_3, r15_4 +# 15| mu15_5(int) = Store[?] : &:r15_3, r15_4 # 16| r16_1(glval) = VariableAddress[s] : # 16| r16_2(glval) = FunctionAddress[MemberFunction] : # 16| r16_3(int) = Constant[1] : # 16| r16_4(int) = Call[MemberFunction] : func:r16_2, this:r16_1, 0:r16_3 -# 16| m16_5(unknown) = ^CallSideEffect : ~m14_4 -# 16| m16_6(unknown) = Chi : total:m14_4, partial:m16_5 -# 16| v16_7(void) = ^IndirectReadSideEffect[-1] : &:r16_1, ~m15_5 -# 16| m16_8(S) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 -# 16| m16_9(S) = Chi : total:m15_5, partial:m16_8 +# 16| mu16_5(unknown) = ^CallSideEffect : ~m? +# 16| v16_6(void) = ^IndirectReadSideEffect[-1] : &:r16_1, ~m? +# 16| mu16_7(S) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 # 17| v17_1(void) = NoOp : -# 14| v14_5(void) = ReturnVoid : -# 14| v14_6(void) = AliasedUse : ~m16_6 -# 14| v14_7(void) = ExitFunction : +# 14| v14_4(void) = ReturnVoid : +# 14| v14_5(void) = AliasedUse : ~m? +# 14| v14_6(void) = ExitFunction : # 19| void Bad::Point::Point(Bad::Point const&) # 19| Block 0 # 19| v19_1(void) = EnterFunction : -# 19| m19_2(unknown) = AliasedDefinition : -# 19| m19_3(unknown) = InitializeNonLocal : -# 19| m19_4(unknown) = Chi : total:m19_2, partial:m19_3 -# 19| r19_5(glval) = VariableAddress[#this] : -# 19| m19_6(glval) = InitializeParameter[#this] : &:r19_5 -# 19| r19_7(glval) = Load[#this] : &:r19_5, m19_6 -# 19| m19_8(Point) = InitializeIndirection[#this] : &:r19_7 +# 19| mu19_2(unknown) = AliasedDefinition : +# 19| mu19_3(unknown) = InitializeNonLocal : +# 19| r19_4(glval) = VariableAddress[#this] : +# 19| m19_5(glval) = InitializeParameter[#this] : &:r19_4 +# 19| r19_6(glval) = Load[#this] : &:r19_4, m19_5 +# 19| mu19_7(Point) = InitializeIndirection[#this] : &:r19_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(Point &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Point &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 19| r19_9(glval) = FieldAddress[x] : r19_7 -# 19| r19_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 19| r19_11(Point &) = Load[(unnamed parameter 0)] : &:r19_10, m0_2 -# 19| r19_12(glval) = CopyValue : r19_11 -# 19| r19_13(glval) = FieldAddress[x] : r19_12 -# 19| r19_14(int) = Load[?] : &:r19_13, ~m0_4 -# 19| m19_15(int) = Store[?] : &:r19_9, r19_14 -# 19| m19_16(unknown) = Chi : total:m19_8, partial:m19_15 -# 19| r19_17(glval) = FieldAddress[y] : r19_7 -# 19| r19_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 19| r19_19(Point &) = Load[(unnamed parameter 0)] : &:r19_18, m0_2 -# 19| r19_20(glval) = CopyValue : r19_19 -# 19| r19_21(glval) = FieldAddress[y] : r19_20 -# 19| r19_22(int) = Load[?] : &:r19_21, ~m0_4 -# 19| m19_23(int) = Store[?] : &:r19_17, r19_22 -# 19| m19_24(unknown) = Chi : total:m19_16, partial:m19_23 -# 19| v19_25(void) = NoOp : -# 19| v19_26(void) = ReturnIndirection[#this] : &:r19_7, m19_24 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 19| v19_27(void) = ReturnVoid : -# 19| v19_28(void) = AliasedUse : m19_3 -# 19| v19_29(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 19| r19_8(glval) = FieldAddress[x] : r19_6 +# 19| r19_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 19| r19_10(Point &) = Load[(unnamed parameter 0)] : &:r19_9, m0_2 +# 19| r19_11(glval) = CopyValue : r19_10 +# 19| r19_12(glval) = FieldAddress[x] : r19_11 +# 19| r19_13(int) = Load[?] : &:r19_12, ~m? +# 19| mu19_14(int) = Store[?] : &:r19_8, r19_13 +# 19| r19_15(glval) = FieldAddress[y] : r19_6 +# 19| r19_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 19| r19_17(Point &) = Load[(unnamed parameter 0)] : &:r19_16, m0_2 +# 19| r19_18(glval) = CopyValue : r19_17 +# 19| r19_19(glval) = FieldAddress[y] : r19_18 +# 19| r19_20(int) = Load[?] : &:r19_19, ~m? +# 19| mu19_21(int) = Store[?] : &:r19_15, r19_20 +# 19| v19_22(void) = NoOp : +# 19| v19_23(void) = ReturnIndirection[#this] : &:r19_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 19| v19_24(void) = ReturnVoid : +# 19| v19_25(void) = AliasedUse : ~m? +# 19| v19_26(void) = ExitFunction : # 22| void Bad::Point::Point() # 22| Block 0 # 22| v22_1(void) = EnterFunction : -# 22| m22_2(unknown) = AliasedDefinition : -# 22| m22_3(unknown) = InitializeNonLocal : -# 22| m22_4(unknown) = Chi : total:m22_2, partial:m22_3 -# 22| r22_5(glval) = VariableAddress[#this] : -# 22| m22_6(glval) = InitializeParameter[#this] : &:r22_5 -# 22| r22_7(glval) = Load[#this] : &:r22_5, m22_6 -# 22| m22_8(Point) = InitializeIndirection[#this] : &:r22_7 +# 22| mu22_2(unknown) = AliasedDefinition : +# 22| mu22_3(unknown) = InitializeNonLocal : +# 22| r22_4(glval) = VariableAddress[#this] : +# 22| m22_5(glval) = InitializeParameter[#this] : &:r22_4 +# 22| r22_6(glval) = Load[#this] : &:r22_4, m22_5 +# 22| mu22_7(Point) = InitializeIndirection[#this] : &:r22_6 # 23| v23_1(void) = NoOp : -# 22| v22_9(void) = ReturnIndirection[#this] : &:r22_7, m22_8 -# 22| v22_10(void) = ReturnVoid : -# 22| v22_11(void) = AliasedUse : m22_3 -# 22| v22_12(void) = ExitFunction : +# 22| v22_8(void) = ReturnIndirection[#this] : &:r22_6, ~m? +# 22| v22_9(void) = ReturnVoid : +# 22| v22_10(void) = AliasedUse : ~m? +# 22| v22_11(void) = ExitFunction : # 26| void Bad::CallCopyConstructor(Bad::Point const&) # 26| Block 0 # 26| v26_1(void) = EnterFunction : -# 26| m26_2(unknown) = AliasedDefinition : -# 26| m26_3(unknown) = InitializeNonLocal : -# 26| m26_4(unknown) = Chi : total:m26_2, partial:m26_3 -# 26| r26_5(glval) = VariableAddress[a] : -# 26| m26_6(Point &) = InitializeParameter[a] : &:r26_5 -# 26| r26_7(Point &) = Load[a] : &:r26_5, m26_6 -# 26| m26_8(unknown) = InitializeIndirection[a] : &:r26_7 +# 26| mu26_2(unknown) = AliasedDefinition : +# 26| mu26_3(unknown) = InitializeNonLocal : +# 26| r26_4(glval) = VariableAddress[a] : +# 26| m26_5(Point &) = InitializeParameter[a] : &:r26_4 +# 26| r26_6(Point &) = Load[a] : &:r26_4, m26_5 +# 26| mu26_7(unknown) = InitializeIndirection[a] : &:r26_6 # 27| r27_1(glval) = VariableAddress[b] : # 27| r27_2(glval) = VariableAddress[a] : -# 27| r27_3(Point &) = Load[a] : &:r27_2, m26_6 +# 27| r27_3(Point &) = Load[a] : &:r27_2, m26_5 # 27| r27_4(glval) = CopyValue : r27_3 # 27| r27_5(glval) = Convert : r27_4 -# 27| r27_6(Point) = Load[?] : &:r27_5, ~m26_8 +# 27| r27_6(Point) = Load[?] : &:r27_5, ~m? # 27| m27_7(Point) = Store[b] : &:r27_1, r27_6 # 28| v28_1(void) = NoOp : -# 26| v26_9(void) = ReturnIndirection[a] : &:r26_7, m26_8 -# 26| v26_10(void) = ReturnVoid : -# 26| v26_11(void) = AliasedUse : m26_3 -# 26| v26_12(void) = ExitFunction : +# 26| v26_8(void) = ReturnIndirection[a] : &:r26_6, ~m? +# 26| v26_9(void) = ReturnVoid : +# 26| v26_10(void) = AliasedUse : ~m? +# 26| v26_11(void) = ExitFunction : bad_stmts.cpp: # 5| void Bad::errorExpr() # 5| Block 0 # 5| v5_1(void) = EnterFunction : -# 5| m5_2(unknown) = AliasedDefinition : -# 5| m5_3(unknown) = InitializeNonLocal : -# 5| m5_4(unknown) = Chi : total:m5_2, partial:m5_3 +# 5| mu5_2(unknown) = AliasedDefinition : +# 5| mu5_3(unknown) = InitializeNonLocal : # 6| r6_1(glval) = VariableAddress[intref] : # 6| r6_2(error) = Error : # 6| m6_3(int &) = Store[intref] : &:r6_1, r6_2 @@ -268,37 +250,35 @@ bad_stmts.cpp: # 7| r7_2(error) = Error : # 7| m7_3(int) = Store[x] : &:r7_1, r7_2 # 8| r8_1(glval) = Error : -# 8| r8_2(error) = Load[?] : &:r8_1, ~m5_4 +# 8| r8_2(error) = Load[?] : &:r8_1, ~m? # 8| r8_3(glval) = VariableAddress[x] : # 8| m8_4(int) = Store[x] : &:r8_3, r8_2 # 9| v9_1(void) = NoOp : -# 5| v5_5(void) = ReturnVoid : -# 5| v5_6(void) = AliasedUse : m5_3 -# 5| v5_7(void) = ExitFunction : +# 5| v5_4(void) = ReturnVoid : +# 5| v5_5(void) = AliasedUse : ~m? +# 5| v5_6(void) = ExitFunction : clang.cpp: # 5| int* globalIntAddress() # 5| Block 0 # 5| v5_1(void) = EnterFunction : -# 5| m5_2(unknown) = AliasedDefinition : -# 5| m5_3(unknown) = InitializeNonLocal : -# 5| m5_4(unknown) = Chi : total:m5_2, partial:m5_3 +# 5| mu5_2(unknown) = AliasedDefinition : +# 5| mu5_3(unknown) = InitializeNonLocal : # 6| r6_1(glval) = VariableAddress[#return] : # 6| r6_2(glval) = VariableAddress[globalInt] : # 6| r6_3(int *) = CopyValue : r6_2 # 6| m6_4(int *) = Store[#return] : &:r6_1, r6_3 -# 5| r5_5(glval) = VariableAddress[#return] : -# 5| v5_6(void) = ReturnValue : &:r5_5, m6_4 -# 5| v5_7(void) = AliasedUse : m5_3 -# 5| v5_8(void) = ExitFunction : +# 5| r5_4(glval) = VariableAddress[#return] : +# 5| v5_5(void) = ReturnValue : &:r5_4, m6_4 +# 5| v5_6(void) = AliasedUse : ~m? +# 5| v5_7(void) = ExitFunction : complex.c: # 1| void complex_literals() # 1| Block 0 # 1| v1_1(void) = EnterFunction : -# 1| m1_2(unknown) = AliasedDefinition : -# 1| m1_3(unknown) = InitializeNonLocal : -# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 +# 1| mu1_2(unknown) = AliasedDefinition : +# 1| mu1_3(unknown) = InitializeNonLocal : # 2| r2_1(glval<_Complex float>) = VariableAddress[cf] : # 2| r2_2(double) = Constant[2.0] : # 2| r2_3(_Complex float) = Convert : r2_2 @@ -335,16 +315,15 @@ complex.c: # 11| r11_3(_Imaginary long double) = Convert : r11_2 # 11| m11_4(_Imaginary long double) = Store[jld] : &:r11_1, r11_3 # 12| v12_1(void) = NoOp : -# 1| v1_5(void) = ReturnVoid : -# 1| v1_6(void) = AliasedUse : m1_3 -# 1| v1_7(void) = ExitFunction : +# 1| v1_4(void) = ReturnVoid : +# 1| v1_5(void) = AliasedUse : ~m? +# 1| v1_6(void) = ExitFunction : # 14| void complex_arithmetic() # 14| Block 0 # 14| v14_1(void) = EnterFunction : -# 14| m14_2(unknown) = AliasedDefinition : -# 14| m14_3(unknown) = InitializeNonLocal : -# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3 +# 14| mu14_2(unknown) = AliasedDefinition : +# 14| mu14_3(unknown) = InitializeNonLocal : # 15| r15_1(glval) = VariableAddress[f1] : # 15| r15_2(float) = Constant[5.0] : # 15| m15_3(float) = Store[f1] : &:r15_1, r15_2 @@ -504,16 +483,15 @@ complex.c: # 55| r55_6(glval<_Imaginary float>) = VariableAddress[jf3] : # 55| m55_7(_Imaginary float) = Store[jf3] : &:r55_6, r55_5 # 56| v56_1(void) = NoOp : -# 14| v14_5(void) = ReturnVoid : -# 14| v14_6(void) = AliasedUse : m14_3 -# 14| v14_7(void) = ExitFunction : +# 14| v14_4(void) = ReturnVoid : +# 14| v14_5(void) = AliasedUse : ~m? +# 14| v14_6(void) = ExitFunction : # 58| void complex_conversions() # 58| Block 0 # 58| v58_1(void) = EnterFunction : -# 58| m58_2(unknown) = AliasedDefinition : -# 58| m58_3(unknown) = InitializeNonLocal : -# 58| m58_4(unknown) = Chi : total:m58_2, partial:m58_3 +# 58| mu58_2(unknown) = AliasedDefinition : +# 58| mu58_3(unknown) = InitializeNonLocal : # 59| r59_1(glval) = VariableAddress[f] : # 59| r59_2(float) = Constant[2.0] : # 59| m59_3(float) = Store[f] : &:r59_1, r59_2 @@ -859,2313 +837,1981 @@ complex.c: # 144| r144_4(glval) = VariableAddress[ld] : # 144| m144_5(long double) = Store[ld] : &:r144_4, r144_3 # 145| v145_1(void) = NoOp : -# 58| v58_5(void) = ReturnVoid : -# 58| v58_6(void) = AliasedUse : m58_3 -# 58| v58_7(void) = ExitFunction : +# 58| v58_4(void) = ReturnVoid : +# 58| v58_5(void) = AliasedUse : ~m? +# 58| v58_6(void) = ExitFunction : coroutines.cpp: # 87| co_returnable_void co_return_void() # 87| Block 0 # 87| v87_1(void) = EnterFunction : -# 87| m87_2(unknown) = AliasedDefinition : -# 87| m87_3(unknown) = InitializeNonLocal : -# 87| m87_4(unknown) = Chi : total:m87_2, partial:m87_3 -# 87| r87_5(glval) = VariableAddress[(unnamed local variable)] : -# 87| m87_6(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_5 -# 87| m87_7(unknown) = Chi : total:m87_4, partial:m87_6 -# 87| r87_8(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_9(glval) = FunctionAddress[initial_suspend] : -# 87| r87_10(suspend_always) = Call[initial_suspend] : func:r87_9, this:r87_8 -# 87| m87_11(unknown) = ^CallSideEffect : ~m87_7 -# 87| m87_12(unknown) = Chi : total:m87_7, partial:m87_11 -# 87| v87_13(void) = ^IndirectReadSideEffect[-1] : &:r87_8, ~m87_12 -# 87| m87_14(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_8 -# 87| m87_15(unknown) = Chi : total:m87_12, partial:m87_14 +# 87| mu87_2(unknown) = AliasedDefinition : +# 87| mu87_3(unknown) = InitializeNonLocal : +# 87| r87_4(glval) = VariableAddress[(unnamed local variable)] : +# 87| mu87_5(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_4 +# 87| r87_6(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_7(glval) = FunctionAddress[initial_suspend] : +# 87| r87_8(suspend_always) = Call[initial_suspend] : func:r87_7, this:r87_6 +# 87| mu87_9(unknown) = ^CallSideEffect : ~m? +# 87| v87_10(void) = ^IndirectReadSideEffect[-1] : &:r87_6, ~m? +# 87| mu87_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_6 #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 87| r87_16(glval) = VariableAddress[#temp87:20] : -# 87| r87_17(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_18(glval) = FunctionAddress[initial_suspend] : -# 87| r87_19(suspend_always) = Call[initial_suspend] : func:r87_18, this:r87_17 -# 87| m87_20(unknown) = ^CallSideEffect : ~m87_15 -# 87| m87_21(unknown) = Chi : total:m87_15, partial:m87_20 -# 87| v87_22(void) = ^IndirectReadSideEffect[-1] : &:r87_17, ~m87_21 -# 87| m87_23(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_17 -# 87| m87_24(unknown) = Chi : total:m87_21, partial:m87_23 -# 87| m87_25(suspend_always) = Store[#temp87:20] : &:r87_16, r87_19 -# 87| m87_26(unknown) = Chi : total:m87_24, partial:m87_25 -# 87| r87_27(suspend_always *) = CopyValue : r87_16 -# 87| m87_28(suspend_always *) = Store[#temp0:0] : &:r0_1, r87_27 -#-----| r0_2(suspend_always *) = Load[#temp0:0] : &:r0_1, m87_28 -# 87| r87_29(glval) = CopyValue : r0_2 -# 87| r87_30(glval) = Convert : r87_29 -# 87| r87_31(glval) = FunctionAddress[await_ready] : -# 87| r87_32(bool) = Call[await_ready] : func:r87_31, this:r87_30 -# 87| m87_33(unknown) = ^CallSideEffect : ~m87_26 -# 87| m87_34(unknown) = Chi : total:m87_26, partial:m87_33 -# 87| v87_35(void) = ^IndirectReadSideEffect[-1] : &:r87_30, ~m87_34 -#-----| v0_3(void) = ConditionalBranch : r87_32 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 87| r87_12(glval) = VariableAddress[#temp87:20] : +# 87| r87_13(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_14(glval) = FunctionAddress[initial_suspend] : +# 87| r87_15(suspend_always) = Call[initial_suspend] : func:r87_14, this:r87_13 +# 87| mu87_16(unknown) = ^CallSideEffect : ~m? +# 87| v87_17(void) = ^IndirectReadSideEffect[-1] : &:r87_13, ~m? +# 87| mu87_18(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_13 +# 87| mu87_19(suspend_always) = Store[#temp87:20] : &:r87_12, r87_15 +# 87| r87_20(suspend_always *) = CopyValue : r87_12 +# 87| m87_21(suspend_always *) = Store[#temp0:0] : &:r0_1, r87_20 +#-----| r0_2(suspend_always *) = Load[#temp0:0] : &:r0_1, m87_21 +# 87| r87_22(glval) = CopyValue : r0_2 +# 87| r87_23(glval) = Convert : r87_22 +# 87| r87_24(glval) = FunctionAddress[await_ready] : +# 87| r87_25(bool) = Call[await_ready] : func:r87_24, this:r87_23 +# 87| mu87_26(unknown) = ^CallSideEffect : ~m? +# 87| v87_27(void) = ^IndirectReadSideEffect[-1] : &:r87_23, ~m? +#-----| v0_3(void) = ConditionalBranch : r87_25 +#-----| False -> Block 4 +#-----| True -> Block 3 -#-----| Block 1 -#-----| m0_4(unknown) = Phi : from 0:~m87_34, from 2:~m87_61 -#-----| r0_5(bool) = Constant[1] : -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| m0_7(bool) = Store[(unnamed local variable)] : &:r0_6, r0_5 -# 87| r87_36(suspend_always *) = CopyValue : r87_27 -# 87| r87_37(glval) = CopyValue : r87_36 -#-----| r0_8(glval) = Convert : r87_37 -# 87| r87_38(glval) = FunctionAddress[await_resume] : -# 87| v87_39(void) = Call[await_resume] : func:r87_38, this:r0_8 -# 87| m87_40(unknown) = ^CallSideEffect : ~m0_4 -# 87| m87_41(unknown) = Chi : total:m0_4, partial:m87_40 -#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m87_41 -#-----| v0_10(void) = CopyValue : v87_39 -#-----| r0_11(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_12(glval) = FunctionAddress[return_void] : -#-----| v0_13(void) = Call[return_void] : func:r0_12, this:r0_11 -#-----| m0_14(unknown) = ^CallSideEffect : ~m87_41 -#-----| m0_15(unknown) = Chi : total:m87_41, partial:m0_14 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m0_15 -#-----| m0_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_11 -#-----| m0_18(unknown) = Chi : total:m0_15, partial:m0_17 -#-----| C++ Exception -> Block 4 -#-----| Goto -> Block 3 +# 87| Block 1 +# 87| v87_28(void) = AliasedUse : ~m? +# 87| v87_29(void) = ExitFunction : # 87| Block 2 -# 87| r87_42(suspend_always *) = CopyValue : r87_27 -# 87| r87_43(glval) = CopyValue : r87_42 -#-----| r0_19(glval) = Convert : r87_43 -# 87| r87_44(glval) = FunctionAddress[await_suspend] : -# 87| r87_45(glval>) = VariableAddress[#temp87:20] : -# 87| m87_46(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_45 -# 87| m87_47(unknown) = Chi : total:m87_34, partial:m87_46 -# 87| r87_48(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_49(glval>) = VariableAddress[(unnamed local variable)] : -# 87| r87_50(glval>) = Convert : r87_49 -# 87| r87_51(coroutine_handle &) = CopyValue : r87_50 -# 87| v87_52(void) = Call[coroutine_handle] : func:r87_48, this:r87_45, 0:r87_51 -# 87| m87_53(unknown) = ^CallSideEffect : ~m87_47 -# 87| m87_54(unknown) = Chi : total:m87_47, partial:m87_53 -# 87| v87_55(void) = ^BufferReadSideEffect[0] : &:r87_51, ~m87_54 -# 87| m87_56(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_45 -# 87| m87_57(unknown) = Chi : total:m87_54, partial:m87_56 -# 87| r87_58(coroutine_handle) = Load[#temp87:20] : &:r87_45, ~m87_57 -# 87| v87_59(void) = Call[await_suspend] : func:r87_44, this:r0_19, 0:r87_58 -# 87| m87_60(unknown) = ^CallSideEffect : ~m87_57 -# 87| m87_61(unknown) = Chi : total:m87_57, partial:m87_60 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m87_61 +# 87| v87_30(void) = Unwind : #-----| Goto -> Block 1 -# 88| Block 3 -# 88| v88_1(void) = NoOp : -#-----| v0_21(void) = NoOp : -#-----| Goto (back edge) -> Block 6 +#-----| Block 3 +#-----| r0_4(bool) = Constant[1] : +#-----| r0_5(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_6(bool) = Store[(unnamed local variable)] : &:r0_5, r0_4 +# 87| r87_31(suspend_always *) = CopyValue : r87_20 +# 87| r87_32(glval) = CopyValue : r87_31 +#-----| r0_7(glval) = Convert : r87_32 +# 87| r87_33(glval) = FunctionAddress[await_resume] : +# 87| v87_34(void) = Call[await_resume] : func:r87_33, this:r0_7 +# 87| mu87_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +#-----| v0_9(void) = CopyValue : v87_34 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_11(glval) = FunctionAddress[return_void] : +#-----| v0_12(void) = Call[return_void] : func:r0_11, this:r0_10 +#-----| mu0_13(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_10, ~m? +#-----| mu0_15(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_10 +#-----| C++ Exception -> Block 6 +#-----| Goto -> Block 5 -#-----| Block 4 -#-----| v0_22(void) = CatchAny : -#-----| r0_23(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_24(bool) = Load[(unnamed local variable)] : &:r0_23, m0_7 -#-----| r0_25(bool) = LogicalNot : r0_24 -#-----| v0_26(void) = ConditionalBranch : r0_25 -#-----| False -> Block 5 -#-----| True -> Block 9 +# 87| Block 4 +# 87| r87_36(suspend_always *) = CopyValue : r87_20 +# 87| r87_37(glval) = CopyValue : r87_36 +#-----| r0_16(glval) = Convert : r87_37 +# 87| r87_38(glval) = FunctionAddress[await_suspend] : +# 87| r87_39(glval>) = VariableAddress[#temp87:20] : +# 87| mu87_40(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_39 +# 87| r87_41(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_42(glval>) = VariableAddress[(unnamed local variable)] : +# 87| r87_43(glval>) = Convert : r87_42 +# 87| r87_44(coroutine_handle &) = CopyValue : r87_43 +# 87| v87_45(void) = Call[coroutine_handle] : func:r87_41, this:r87_39, 0:r87_44 +# 87| mu87_46(unknown) = ^CallSideEffect : ~m? +# 87| v87_47(void) = ^BufferReadSideEffect[0] : &:r87_44, ~m? +# 87| mu87_48(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_39 +# 87| r87_49(coroutine_handle) = Load[#temp87:20] : &:r87_39, ~m? +# 87| v87_50(void) = Call[await_suspend] : func:r87_38, this:r0_16, 0:r87_49 +# 87| mu87_51(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +#-----| Goto -> Block 3 -# 87| Block 5 -# 87| r87_62(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_63(glval) = FunctionAddress[unhandled_exception] : -# 87| v87_64(void) = Call[unhandled_exception] : func:r87_63, this:r87_62 -# 87| m87_65(unknown) = ^CallSideEffect : ~m0_18 -# 87| m87_66(unknown) = Chi : total:m0_18, partial:m87_65 -# 87| v87_67(void) = ^IndirectReadSideEffect[-1] : &:r87_62, ~m87_66 -# 87| m87_68(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_62 -# 87| m87_69(unknown) = Chi : total:m87_66, partial:m87_68 -#-----| Goto -> Block 6 +# 88| Block 5 +# 88| v88_1(void) = NoOp : +#-----| v0_18(void) = NoOp : +#-----| Goto (back edge) -> Block 9 #-----| Block 6 -#-----| m0_27(unknown) = Phi : from 3:~m0_18, from 5:~m87_69 -#-----| v0_28(void) = NoOp : -# 87| r87_70(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_71(glval) = FunctionAddress[final_suspend] : -# 87| r87_72(suspend_always) = Call[final_suspend] : func:r87_71, this:r87_70 -# 87| m87_73(unknown) = ^CallSideEffect : ~m0_27 -# 87| m87_74(unknown) = Chi : total:m0_27, partial:m87_73 -# 87| v87_75(void) = ^IndirectReadSideEffect[-1] : &:r87_70, ~m87_74 -# 87| m87_76(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_70 -# 87| m87_77(unknown) = Chi : total:m87_74, partial:m87_76 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 87| r87_78(glval) = VariableAddress[#temp87:20] : -# 87| r87_79(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_80(glval) = FunctionAddress[final_suspend] : -# 87| r87_81(suspend_always) = Call[final_suspend] : func:r87_80, this:r87_79 -# 87| m87_82(unknown) = ^CallSideEffect : ~m87_77 -# 87| m87_83(unknown) = Chi : total:m87_77, partial:m87_82 -# 87| v87_84(void) = ^IndirectReadSideEffect[-1] : &:r87_79, ~m87_83 -# 87| m87_85(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_79 -# 87| m87_86(unknown) = Chi : total:m87_83, partial:m87_85 -# 87| m87_87(suspend_always) = Store[#temp87:20] : &:r87_78, r87_81 -# 87| m87_88(unknown) = Chi : total:m87_86, partial:m87_87 -# 87| r87_89(suspend_always *) = CopyValue : r87_78 -# 87| m87_90(suspend_always *) = Store[#temp0:0] : &:r0_29, r87_89 -#-----| r0_30(suspend_always *) = Load[#temp0:0] : &:r0_29, m87_90 -# 87| r87_91(glval) = CopyValue : r0_30 -# 87| r87_92(glval) = Convert : r87_91 -# 87| r87_93(glval) = FunctionAddress[await_ready] : -# 87| r87_94(bool) = Call[await_ready] : func:r87_93, this:r87_92 -# 87| m87_95(unknown) = ^CallSideEffect : ~m87_88 -# 87| m87_96(unknown) = Chi : total:m87_88, partial:m87_95 -# 87| v87_97(void) = ^IndirectReadSideEffect[-1] : &:r87_92, ~m87_96 -#-----| v0_31(void) = ConditionalBranch : r87_94 +#-----| v0_19(void) = CatchAny : +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(bool) = Load[(unnamed local variable)] : &:r0_20, m0_6 +#-----| r0_22(bool) = LogicalNot : r0_21 +#-----| v0_23(void) = ConditionalBranch : r0_22 #-----| False -> Block 8 #-----| True -> Block 7 -# 87| Block 7 -# 87| m87_98(unknown) = Phi : from 6:~m87_96, from 8:~m87_128 -# 87| r87_99(suspend_always *) = CopyValue : r87_89 -# 87| r87_100(glval) = CopyValue : r87_99 -#-----| r0_32(glval) = Convert : r87_100 -# 87| r87_101(glval) = FunctionAddress[await_resume] : -# 87| v87_102(void) = Call[await_resume] : func:r87_101, this:r0_32 -# 87| m87_103(unknown) = ^CallSideEffect : ~m87_98 -# 87| m87_104(unknown) = Chi : total:m87_98, partial:m87_103 -#-----| v0_33(void) = ^IndirectReadSideEffect[-1] : &:r0_32, ~m87_104 -# 87| r87_105(glval) = VariableAddress[#return] : -# 87| v87_106(void) = ReturnValue : &:r87_105, ~m87_104 -# 87| v87_107(void) = AliasedUse : ~m87_104 -# 87| v87_108(void) = ExitFunction : +#-----| Block 7 +#-----| v0_24(void) = ReThrow : +#-----| C++ Exception -> Block 2 # 87| Block 8 -# 87| r87_109(suspend_always *) = CopyValue : r87_89 -# 87| r87_110(glval) = CopyValue : r87_109 -#-----| r0_34(glval) = Convert : r87_110 -# 87| r87_111(glval) = FunctionAddress[await_suspend] : -# 87| r87_112(glval>) = VariableAddress[#temp87:20] : -# 87| m87_113(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_112 -# 87| m87_114(unknown) = Chi : total:m87_96, partial:m87_113 -# 87| r87_115(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_116(glval>) = VariableAddress[(unnamed local variable)] : -# 87| r87_117(glval>) = Convert : r87_116 -# 87| r87_118(coroutine_handle &) = CopyValue : r87_117 -# 87| v87_119(void) = Call[coroutine_handle] : func:r87_115, this:r87_112, 0:r87_118 -# 87| m87_120(unknown) = ^CallSideEffect : ~m87_114 -# 87| m87_121(unknown) = Chi : total:m87_114, partial:m87_120 -# 87| v87_122(void) = ^BufferReadSideEffect[0] : &:r87_118, ~m87_121 -# 87| m87_123(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_112 -# 87| m87_124(unknown) = Chi : total:m87_121, partial:m87_123 -# 87| r87_125(coroutine_handle) = Load[#temp87:20] : &:r87_112, ~m87_124 -# 87| v87_126(void) = Call[await_suspend] : func:r87_111, this:r0_34, 0:r87_125 -# 87| m87_127(unknown) = ^CallSideEffect : ~m87_124 -# 87| m87_128(unknown) = Chi : total:m87_124, partial:m87_127 -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m87_128 -#-----| Goto -> Block 7 +# 87| r87_52(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_53(glval) = FunctionAddress[unhandled_exception] : +# 87| v87_54(void) = Call[unhandled_exception] : func:r87_53, this:r87_52 +# 87| mu87_55(unknown) = ^CallSideEffect : ~m? +# 87| v87_56(void) = ^IndirectReadSideEffect[-1] : &:r87_52, ~m? +# 87| mu87_57(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_52 +#-----| Goto -> Block 9 + +#-----| Block 9 +#-----| v0_25(void) = NoOp : +# 87| r87_58(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_59(glval) = FunctionAddress[final_suspend] : +# 87| r87_60(suspend_always) = Call[final_suspend] : func:r87_59, this:r87_58 +# 87| mu87_61(unknown) = ^CallSideEffect : ~m? +# 87| v87_62(void) = ^IndirectReadSideEffect[-1] : &:r87_58, ~m? +# 87| mu87_63(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_58 +#-----| r0_26(glval) = VariableAddress[#temp0:0] : +# 87| r87_64(glval) = VariableAddress[#temp87:20] : +# 87| r87_65(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_66(glval) = FunctionAddress[final_suspend] : +# 87| r87_67(suspend_always) = Call[final_suspend] : func:r87_66, this:r87_65 +# 87| mu87_68(unknown) = ^CallSideEffect : ~m? +# 87| v87_69(void) = ^IndirectReadSideEffect[-1] : &:r87_65, ~m? +# 87| mu87_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_65 +# 87| mu87_71(suspend_always) = Store[#temp87:20] : &:r87_64, r87_67 +# 87| r87_72(suspend_always *) = CopyValue : r87_64 +# 87| m87_73(suspend_always *) = Store[#temp0:0] : &:r0_26, r87_72 +#-----| r0_27(suspend_always *) = Load[#temp0:0] : &:r0_26, m87_73 +# 87| r87_74(glval) = CopyValue : r0_27 +# 87| r87_75(glval) = Convert : r87_74 +# 87| r87_76(glval) = FunctionAddress[await_ready] : +# 87| r87_77(bool) = Call[await_ready] : func:r87_76, this:r87_75 +# 87| mu87_78(unknown) = ^CallSideEffect : ~m? +# 87| v87_79(void) = ^IndirectReadSideEffect[-1] : &:r87_75, ~m? +#-----| v0_28(void) = ConditionalBranch : r87_77 +#-----| False -> Block 11 +#-----| True -> Block 10 -# 87| Block 9 -# 87| v87_129(void) = Unreached : +# 87| Block 10 +# 87| r87_80(suspend_always *) = CopyValue : r87_72 +# 87| r87_81(glval) = CopyValue : r87_80 +#-----| r0_29(glval) = Convert : r87_81 +# 87| r87_82(glval) = FunctionAddress[await_resume] : +# 87| v87_83(void) = Call[await_resume] : func:r87_82, this:r0_29 +# 87| mu87_84(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m? +# 87| r87_85(glval) = VariableAddress[#return] : +# 87| v87_86(void) = ReturnValue : &:r87_85, ~m? +#-----| Goto -> Block 1 + +# 87| Block 11 +# 87| r87_87(suspend_always *) = CopyValue : r87_72 +# 87| r87_88(glval) = CopyValue : r87_87 +#-----| r0_31(glval) = Convert : r87_88 +# 87| r87_89(glval) = FunctionAddress[await_suspend] : +# 87| r87_90(glval>) = VariableAddress[#temp87:20] : +# 87| mu87_91(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_90 +# 87| r87_92(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_93(glval>) = VariableAddress[(unnamed local variable)] : +# 87| r87_94(glval>) = Convert : r87_93 +# 87| r87_95(coroutine_handle &) = CopyValue : r87_94 +# 87| v87_96(void) = Call[coroutine_handle] : func:r87_92, this:r87_90, 0:r87_95 +# 87| mu87_97(unknown) = ^CallSideEffect : ~m? +# 87| v87_98(void) = ^BufferReadSideEffect[0] : &:r87_95, ~m? +# 87| mu87_99(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_90 +# 87| r87_100(coroutine_handle) = Load[#temp87:20] : &:r87_90, ~m? +# 87| v87_101(void) = Call[await_suspend] : func:r87_89, this:r0_31, 0:r87_100 +# 87| mu87_102(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +#-----| Goto -> Block 10 # 91| co_returnable_value co_return_int(int) # 91| Block 0 # 91| v91_1(void) = EnterFunction : -# 91| m91_2(unknown) = AliasedDefinition : -# 91| m91_3(unknown) = InitializeNonLocal : -# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3 -# 91| r91_5(glval) = VariableAddress[i] : -# 91| m91_6(int) = InitializeParameter[i] : &:r91_5 +# 91| mu91_2(unknown) = AliasedDefinition : +# 91| mu91_3(unknown) = InitializeNonLocal : +# 91| r91_4(glval) = VariableAddress[i] : +# 91| m91_5(int) = InitializeParameter[i] : &:r91_4 #-----| r0_1(glval) = VariableAddress[i] : #-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m91_6 +#-----| r0_3(int) = Load[i] : &:r0_2, m91_5 #-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 91| r91_7(glval) = VariableAddress[(unnamed local variable)] : -# 91| m91_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_7 -# 91| m91_9(unknown) = Chi : total:m91_4, partial:m91_8 -# 91| r91_10(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_11(glval) = FunctionAddress[initial_suspend] : -# 91| r91_12(suspend_always) = Call[initial_suspend] : func:r91_11, this:r91_10 -# 91| m91_13(unknown) = ^CallSideEffect : ~m91_9 -# 91| m91_14(unknown) = Chi : total:m91_9, partial:m91_13 -# 91| v91_15(void) = ^IndirectReadSideEffect[-1] : &:r91_10, ~m91_14 -# 91| m91_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_10 -# 91| m91_17(unknown) = Chi : total:m91_14, partial:m91_16 +# 91| r91_6(glval) = VariableAddress[(unnamed local variable)] : +# 91| mu91_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_6 +# 91| r91_8(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_9(glval) = FunctionAddress[initial_suspend] : +# 91| r91_10(suspend_always) = Call[initial_suspend] : func:r91_9, this:r91_8 +# 91| mu91_11(unknown) = ^CallSideEffect : ~m? +# 91| v91_12(void) = ^IndirectReadSideEffect[-1] : &:r91_8, ~m? +# 91| mu91_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_8 #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 91| r91_18(glval) = VariableAddress[#temp91:21] : -# 91| r91_19(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_20(glval) = FunctionAddress[initial_suspend] : -# 91| r91_21(suspend_always) = Call[initial_suspend] : func:r91_20, this:r91_19 -# 91| m91_22(unknown) = ^CallSideEffect : ~m91_17 -# 91| m91_23(unknown) = Chi : total:m91_17, partial:m91_22 -# 91| v91_24(void) = ^IndirectReadSideEffect[-1] : &:r91_19, ~m91_23 -# 91| m91_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_19 -# 91| m91_26(unknown) = Chi : total:m91_23, partial:m91_25 -# 91| m91_27(suspend_always) = Store[#temp91:21] : &:r91_18, r91_21 -# 91| m91_28(unknown) = Chi : total:m91_26, partial:m91_27 -# 91| r91_29(suspend_always *) = CopyValue : r91_18 -# 91| m91_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r91_29 -#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m91_30 -# 91| r91_31(glval) = CopyValue : r0_6 -# 91| r91_32(glval) = Convert : r91_31 -# 91| r91_33(glval) = FunctionAddress[await_ready] : -# 91| r91_34(bool) = Call[await_ready] : func:r91_33, this:r91_32 -# 91| m91_35(unknown) = ^CallSideEffect : ~m91_28 -# 91| m91_36(unknown) = Chi : total:m91_28, partial:m91_35 -# 91| v91_37(void) = ^IndirectReadSideEffect[-1] : &:r91_32, ~m91_36 -#-----| v0_7(void) = ConditionalBranch : r91_34 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 91| r91_14(glval) = VariableAddress[#temp91:21] : +# 91| r91_15(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_16(glval) = FunctionAddress[initial_suspend] : +# 91| r91_17(suspend_always) = Call[initial_suspend] : func:r91_16, this:r91_15 +# 91| mu91_18(unknown) = ^CallSideEffect : ~m? +# 91| v91_19(void) = ^IndirectReadSideEffect[-1] : &:r91_15, ~m? +# 91| mu91_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_15 +# 91| mu91_21(suspend_always) = Store[#temp91:21] : &:r91_14, r91_17 +# 91| r91_22(suspend_always *) = CopyValue : r91_14 +# 91| m91_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r91_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m91_23 +# 91| r91_24(glval) = CopyValue : r0_6 +# 91| r91_25(glval) = Convert : r91_24 +# 91| r91_26(glval) = FunctionAddress[await_ready] : +# 91| r91_27(bool) = Call[await_ready] : func:r91_26, this:r91_25 +# 91| mu91_28(unknown) = ^CallSideEffect : ~m? +# 91| v91_29(void) = ^IndirectReadSideEffect[-1] : &:r91_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r91_27 +#-----| False -> Block 4 +#-----| True -> Block 3 -#-----| Block 1 -#-----| m0_8(unknown) = Phi : from 0:~m91_36, from 2:~m91_63 -#-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : -#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 -# 91| r91_38(suspend_always *) = CopyValue : r91_29 -# 91| r91_39(glval) = CopyValue : r91_38 -#-----| r0_12(glval) = Convert : r91_39 -# 91| r91_40(glval) = FunctionAddress[await_resume] : -# 91| v91_41(void) = Call[await_resume] : func:r91_40, this:r0_12 -# 91| m91_42(unknown) = ^CallSideEffect : ~m0_8 -# 91| m91_43(unknown) = Chi : total:m0_8, partial:m91_42 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m91_43 -#-----| v0_14(void) = CopyValue : v91_41 -#-----| r0_15(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_16(glval) = FunctionAddress[return_value] : -# 92| r92_1(glval) = VariableAddress[i] : -# 92| r92_2(int) = Load[i] : &:r92_1, m0_4 -#-----| v0_17(void) = Call[return_value] : func:r0_16, this:r0_15, 0:r92_2 -#-----| m0_18(unknown) = ^CallSideEffect : ~m91_43 -#-----| m0_19(unknown) = Chi : total:m91_43, partial:m0_18 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m0_19 -#-----| m0_21(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_15 -#-----| m0_22(unknown) = Chi : total:m0_19, partial:m0_21 -#-----| C++ Exception -> Block 4 -#-----| Goto -> Block 3 +# 91| Block 1 +# 91| v91_30(void) = AliasedUse : ~m? +# 91| v91_31(void) = ExitFunction : # 91| Block 2 -# 91| r91_44(suspend_always *) = CopyValue : r91_29 -# 91| r91_45(glval) = CopyValue : r91_44 -#-----| r0_23(glval) = Convert : r91_45 -# 91| r91_46(glval) = FunctionAddress[await_suspend] : -# 91| r91_47(glval>) = VariableAddress[#temp91:21] : -# 91| m91_48(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_47 -# 91| m91_49(unknown) = Chi : total:m91_36, partial:m91_48 -# 91| r91_50(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_51(glval>) = VariableAddress[(unnamed local variable)] : -# 91| r91_52(glval>) = Convert : r91_51 -# 91| r91_53(coroutine_handle &) = CopyValue : r91_52 -# 91| v91_54(void) = Call[coroutine_handle] : func:r91_50, this:r91_47, 0:r91_53 -# 91| m91_55(unknown) = ^CallSideEffect : ~m91_49 -# 91| m91_56(unknown) = Chi : total:m91_49, partial:m91_55 -# 91| v91_57(void) = ^BufferReadSideEffect[0] : &:r91_53, ~m91_56 -# 91| m91_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_47 -# 91| m91_59(unknown) = Chi : total:m91_56, partial:m91_58 -# 91| r91_60(coroutine_handle) = Load[#temp91:21] : &:r91_47, ~m91_59 -# 91| v91_61(void) = Call[await_suspend] : func:r91_46, this:r0_23, 0:r91_60 -# 91| m91_62(unknown) = ^CallSideEffect : ~m91_59 -# 91| m91_63(unknown) = Chi : total:m91_59, partial:m91_62 -#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m91_63 +# 91| v91_32(void) = Unwind : #-----| Goto -> Block 1 -# 92| Block 3 -# 92| v92_3(void) = NoOp : -#-----| v0_25(void) = NoOp : -#-----| Goto (back edge) -> Block 6 +#-----| Block 3 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 +# 91| r91_33(suspend_always *) = CopyValue : r91_22 +# 91| r91_34(glval) = CopyValue : r91_33 +#-----| r0_11(glval) = Convert : r91_34 +# 91| r91_35(glval) = FunctionAddress[await_resume] : +# 91| v91_36(void) = Call[await_resume] : func:r91_35, this:r0_11 +# 91| mu91_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v91_36 +#-----| r0_14(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_15(glval) = FunctionAddress[return_value] : +# 92| r92_1(glval) = VariableAddress[i] : +# 92| r92_2(int) = Load[i] : &:r92_1, m0_4 +#-----| v0_16(void) = Call[return_value] : func:r0_15, this:r0_14, 0:r92_2 +#-----| mu0_17(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? +#-----| mu0_19(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_14 +#-----| C++ Exception -> Block 6 +#-----| Goto -> Block 5 -#-----| Block 4 -#-----| v0_26(void) = CatchAny : -#-----| r0_27(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_28(bool) = Load[(unnamed local variable)] : &:r0_27, m0_11 -#-----| r0_29(bool) = LogicalNot : r0_28 -#-----| v0_30(void) = ConditionalBranch : r0_29 -#-----| False -> Block 5 -#-----| True -> Block 9 +# 91| Block 4 +# 91| r91_38(suspend_always *) = CopyValue : r91_22 +# 91| r91_39(glval) = CopyValue : r91_38 +#-----| r0_20(glval) = Convert : r91_39 +# 91| r91_40(glval) = FunctionAddress[await_suspend] : +# 91| r91_41(glval>) = VariableAddress[#temp91:21] : +# 91| mu91_42(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_41 +# 91| r91_43(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_44(glval>) = VariableAddress[(unnamed local variable)] : +# 91| r91_45(glval>) = Convert : r91_44 +# 91| r91_46(coroutine_handle &) = CopyValue : r91_45 +# 91| v91_47(void) = Call[coroutine_handle] : func:r91_43, this:r91_41, 0:r91_46 +# 91| mu91_48(unknown) = ^CallSideEffect : ~m? +# 91| v91_49(void) = ^BufferReadSideEffect[0] : &:r91_46, ~m? +# 91| mu91_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_41 +# 91| r91_51(coroutine_handle) = Load[#temp91:21] : &:r91_41, ~m? +# 91| v91_52(void) = Call[await_suspend] : func:r91_40, this:r0_20, 0:r91_51 +# 91| mu91_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| Goto -> Block 3 -# 91| Block 5 -# 91| r91_64(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_65(glval) = FunctionAddress[unhandled_exception] : -# 91| v91_66(void) = Call[unhandled_exception] : func:r91_65, this:r91_64 -# 91| m91_67(unknown) = ^CallSideEffect : ~m0_22 -# 91| m91_68(unknown) = Chi : total:m0_22, partial:m91_67 -# 91| v91_69(void) = ^IndirectReadSideEffect[-1] : &:r91_64, ~m91_68 -# 91| m91_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_64 -# 91| m91_71(unknown) = Chi : total:m91_68, partial:m91_70 -#-----| Goto -> Block 6 +# 92| Block 5 +# 92| v92_3(void) = NoOp : +#-----| v0_22(void) = NoOp : +#-----| Goto (back edge) -> Block 9 #-----| Block 6 -#-----| m0_31(unknown) = Phi : from 3:~m0_22, from 5:~m91_71 -#-----| v0_32(void) = NoOp : -# 91| r91_72(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_73(glval) = FunctionAddress[final_suspend] : -# 91| r91_74(suspend_always) = Call[final_suspend] : func:r91_73, this:r91_72 -# 91| m91_75(unknown) = ^CallSideEffect : ~m0_31 -# 91| m91_76(unknown) = Chi : total:m0_31, partial:m91_75 -# 91| v91_77(void) = ^IndirectReadSideEffect[-1] : &:r91_72, ~m91_76 -# 91| m91_78(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_72 -# 91| m91_79(unknown) = Chi : total:m91_76, partial:m91_78 -#-----| r0_33(glval) = VariableAddress[#temp0:0] : -# 91| r91_80(glval) = VariableAddress[#temp91:21] : -# 91| r91_81(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_82(glval) = FunctionAddress[final_suspend] : -# 91| r91_83(suspend_always) = Call[final_suspend] : func:r91_82, this:r91_81 -# 91| m91_84(unknown) = ^CallSideEffect : ~m91_79 -# 91| m91_85(unknown) = Chi : total:m91_79, partial:m91_84 -# 91| v91_86(void) = ^IndirectReadSideEffect[-1] : &:r91_81, ~m91_85 -# 91| m91_87(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_81 -# 91| m91_88(unknown) = Chi : total:m91_85, partial:m91_87 -# 91| m91_89(suspend_always) = Store[#temp91:21] : &:r91_80, r91_83 -# 91| m91_90(unknown) = Chi : total:m91_88, partial:m91_89 -# 91| r91_91(suspend_always *) = CopyValue : r91_80 -# 91| m91_92(suspend_always *) = Store[#temp0:0] : &:r0_33, r91_91 -#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_33, m91_92 -# 91| r91_93(glval) = CopyValue : r0_34 -# 91| r91_94(glval) = Convert : r91_93 -# 91| r91_95(glval) = FunctionAddress[await_ready] : -# 91| r91_96(bool) = Call[await_ready] : func:r91_95, this:r91_94 -# 91| m91_97(unknown) = ^CallSideEffect : ~m91_90 -# 91| m91_98(unknown) = Chi : total:m91_90, partial:m91_97 -# 91| v91_99(void) = ^IndirectReadSideEffect[-1] : &:r91_94, ~m91_98 -#-----| v0_35(void) = ConditionalBranch : r91_96 +#-----| v0_23(void) = CatchAny : +#-----| r0_24(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_25(bool) = Load[(unnamed local variable)] : &:r0_24, m0_10 +#-----| r0_26(bool) = LogicalNot : r0_25 +#-----| v0_27(void) = ConditionalBranch : r0_26 #-----| False -> Block 8 #-----| True -> Block 7 -# 91| Block 7 -# 91| m91_100(unknown) = Phi : from 6:~m91_98, from 8:~m91_130 -# 91| r91_101(suspend_always *) = CopyValue : r91_91 -# 91| r91_102(glval) = CopyValue : r91_101 -#-----| r0_36(glval) = Convert : r91_102 -# 91| r91_103(glval) = FunctionAddress[await_resume] : -# 91| v91_104(void) = Call[await_resume] : func:r91_103, this:r0_36 -# 91| m91_105(unknown) = ^CallSideEffect : ~m91_100 -# 91| m91_106(unknown) = Chi : total:m91_100, partial:m91_105 -#-----| v0_37(void) = ^IndirectReadSideEffect[-1] : &:r0_36, ~m91_106 -# 91| r91_107(glval) = VariableAddress[#return] : -# 91| v91_108(void) = ReturnValue : &:r91_107, ~m91_106 -# 91| v91_109(void) = AliasedUse : ~m91_106 -# 91| v91_110(void) = ExitFunction : +#-----| Block 7 +#-----| v0_28(void) = ReThrow : +#-----| C++ Exception -> Block 2 # 91| Block 8 -# 91| r91_111(suspend_always *) = CopyValue : r91_91 -# 91| r91_112(glval) = CopyValue : r91_111 -#-----| r0_38(glval) = Convert : r91_112 -# 91| r91_113(glval) = FunctionAddress[await_suspend] : -# 91| r91_114(glval>) = VariableAddress[#temp91:21] : -# 91| m91_115(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_114 -# 91| m91_116(unknown) = Chi : total:m91_98, partial:m91_115 -# 91| r91_117(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_118(glval>) = VariableAddress[(unnamed local variable)] : -# 91| r91_119(glval>) = Convert : r91_118 -# 91| r91_120(coroutine_handle &) = CopyValue : r91_119 -# 91| v91_121(void) = Call[coroutine_handle] : func:r91_117, this:r91_114, 0:r91_120 -# 91| m91_122(unknown) = ^CallSideEffect : ~m91_116 -# 91| m91_123(unknown) = Chi : total:m91_116, partial:m91_122 -# 91| v91_124(void) = ^BufferReadSideEffect[0] : &:r91_120, ~m91_123 -# 91| m91_125(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_114 -# 91| m91_126(unknown) = Chi : total:m91_123, partial:m91_125 -# 91| r91_127(coroutine_handle) = Load[#temp91:21] : &:r91_114, ~m91_126 -# 91| v91_128(void) = Call[await_suspend] : func:r91_113, this:r0_38, 0:r91_127 -# 91| m91_129(unknown) = ^CallSideEffect : ~m91_126 -# 91| m91_130(unknown) = Chi : total:m91_126, partial:m91_129 -#-----| v0_39(void) = ^IndirectReadSideEffect[-1] : &:r0_38, ~m91_130 -#-----| Goto -> Block 7 +# 91| r91_54(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_55(glval) = FunctionAddress[unhandled_exception] : +# 91| v91_56(void) = Call[unhandled_exception] : func:r91_55, this:r91_54 +# 91| mu91_57(unknown) = ^CallSideEffect : ~m? +# 91| v91_58(void) = ^IndirectReadSideEffect[-1] : &:r91_54, ~m? +# 91| mu91_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_54 +#-----| Goto -> Block 9 + +#-----| Block 9 +#-----| v0_29(void) = NoOp : +# 91| r91_60(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_61(glval) = FunctionAddress[final_suspend] : +# 91| r91_62(suspend_always) = Call[final_suspend] : func:r91_61, this:r91_60 +# 91| mu91_63(unknown) = ^CallSideEffect : ~m? +# 91| v91_64(void) = ^IndirectReadSideEffect[-1] : &:r91_60, ~m? +# 91| mu91_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_60 +#-----| r0_30(glval) = VariableAddress[#temp0:0] : +# 91| r91_66(glval) = VariableAddress[#temp91:21] : +# 91| r91_67(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_68(glval) = FunctionAddress[final_suspend] : +# 91| r91_69(suspend_always) = Call[final_suspend] : func:r91_68, this:r91_67 +# 91| mu91_70(unknown) = ^CallSideEffect : ~m? +# 91| v91_71(void) = ^IndirectReadSideEffect[-1] : &:r91_67, ~m? +# 91| mu91_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_67 +# 91| mu91_73(suspend_always) = Store[#temp91:21] : &:r91_66, r91_69 +# 91| r91_74(suspend_always *) = CopyValue : r91_66 +# 91| m91_75(suspend_always *) = Store[#temp0:0] : &:r0_30, r91_74 +#-----| r0_31(suspend_always *) = Load[#temp0:0] : &:r0_30, m91_75 +# 91| r91_76(glval) = CopyValue : r0_31 +# 91| r91_77(glval) = Convert : r91_76 +# 91| r91_78(glval) = FunctionAddress[await_ready] : +# 91| r91_79(bool) = Call[await_ready] : func:r91_78, this:r91_77 +# 91| mu91_80(unknown) = ^CallSideEffect : ~m? +# 91| v91_81(void) = ^IndirectReadSideEffect[-1] : &:r91_77, ~m? +#-----| v0_32(void) = ConditionalBranch : r91_79 +#-----| False -> Block 11 +#-----| True -> Block 10 -# 91| Block 9 -# 91| v91_131(void) = Unreached : +# 91| Block 10 +# 91| r91_82(suspend_always *) = CopyValue : r91_74 +# 91| r91_83(glval) = CopyValue : r91_82 +#-----| r0_33(glval) = Convert : r91_83 +# 91| r91_84(glval) = FunctionAddress[await_resume] : +# 91| v91_85(void) = Call[await_resume] : func:r91_84, this:r0_33 +# 91| mu91_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_34(void) = ^IndirectReadSideEffect[-1] : &:r0_33, ~m? +# 91| r91_87(glval) = VariableAddress[#return] : +# 91| v91_88(void) = ReturnValue : &:r91_87, ~m? +#-----| Goto -> Block 1 + +# 91| Block 11 +# 91| r91_89(suspend_always *) = CopyValue : r91_74 +# 91| r91_90(glval) = CopyValue : r91_89 +#-----| r0_35(glval) = Convert : r91_90 +# 91| r91_91(glval) = FunctionAddress[await_suspend] : +# 91| r91_92(glval>) = VariableAddress[#temp91:21] : +# 91| mu91_93(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_92 +# 91| r91_94(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_95(glval>) = VariableAddress[(unnamed local variable)] : +# 91| r91_96(glval>) = Convert : r91_95 +# 91| r91_97(coroutine_handle &) = CopyValue : r91_96 +# 91| v91_98(void) = Call[coroutine_handle] : func:r91_94, this:r91_92, 0:r91_97 +# 91| mu91_99(unknown) = ^CallSideEffect : ~m? +# 91| v91_100(void) = ^BufferReadSideEffect[0] : &:r91_97, ~m? +# 91| mu91_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_92 +# 91| r91_102(coroutine_handle) = Load[#temp91:21] : &:r91_92, ~m? +# 91| v91_103(void) = Call[await_suspend] : func:r91_91, this:r0_35, 0:r91_102 +# 91| mu91_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_36(void) = ^IndirectReadSideEffect[-1] : &:r0_35, ~m? +#-----| Goto -> Block 10 # 95| co_returnable_void co_yield_value_void(int) # 95| Block 0 # 95| v95_1(void) = EnterFunction : -# 95| m95_2(unknown) = AliasedDefinition : -# 95| m95_3(unknown) = InitializeNonLocal : -# 95| m95_4(unknown) = Chi : total:m95_2, partial:m95_3 -# 95| r95_5(glval) = VariableAddress[i] : -# 95| m95_6(int) = InitializeParameter[i] : &:r95_5 +# 95| mu95_2(unknown) = AliasedDefinition : +# 95| mu95_3(unknown) = InitializeNonLocal : +# 95| r95_4(glval) = VariableAddress[i] : +# 95| m95_5(int) = InitializeParameter[i] : &:r95_4 #-----| r0_1(glval) = VariableAddress[i] : #-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m95_6 +#-----| r0_3(int) = Load[i] : &:r0_2, m95_5 #-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 95| r95_7(glval) = VariableAddress[(unnamed local variable)] : -# 95| m95_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_7 -# 95| m95_9(unknown) = Chi : total:m95_4, partial:m95_8 -# 95| r95_10(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_11(glval) = FunctionAddress[initial_suspend] : -# 95| r95_12(suspend_always) = Call[initial_suspend] : func:r95_11, this:r95_10 -# 95| m95_13(unknown) = ^CallSideEffect : ~m95_9 -# 95| m95_14(unknown) = Chi : total:m95_9, partial:m95_13 -# 95| v95_15(void) = ^IndirectReadSideEffect[-1] : &:r95_10, ~m95_14 -# 95| m95_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_10 -# 95| m95_17(unknown) = Chi : total:m95_14, partial:m95_16 +# 95| r95_6(glval) = VariableAddress[(unnamed local variable)] : +# 95| mu95_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_6 +# 95| r95_8(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_9(glval) = FunctionAddress[initial_suspend] : +# 95| r95_10(suspend_always) = Call[initial_suspend] : func:r95_9, this:r95_8 +# 95| mu95_11(unknown) = ^CallSideEffect : ~m? +# 95| v95_12(void) = ^IndirectReadSideEffect[-1] : &:r95_8, ~m? +# 95| mu95_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_8 #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 95| r95_18(glval) = VariableAddress[#temp95:20] : -# 95| r95_19(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_20(glval) = FunctionAddress[initial_suspend] : -# 95| r95_21(suspend_always) = Call[initial_suspend] : func:r95_20, this:r95_19 -# 95| m95_22(unknown) = ^CallSideEffect : ~m95_17 -# 95| m95_23(unknown) = Chi : total:m95_17, partial:m95_22 -# 95| v95_24(void) = ^IndirectReadSideEffect[-1] : &:r95_19, ~m95_23 -# 95| m95_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_19 -# 95| m95_26(unknown) = Chi : total:m95_23, partial:m95_25 -# 95| m95_27(suspend_always) = Store[#temp95:20] : &:r95_18, r95_21 -# 95| m95_28(unknown) = Chi : total:m95_26, partial:m95_27 -# 95| r95_29(suspend_always *) = CopyValue : r95_18 -# 95| m95_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r95_29 -#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m95_30 -# 95| r95_31(glval) = CopyValue : r0_6 -# 95| r95_32(glval) = Convert : r95_31 -# 95| r95_33(glval) = FunctionAddress[await_ready] : -# 95| r95_34(bool) = Call[await_ready] : func:r95_33, this:r95_32 -# 95| m95_35(unknown) = ^CallSideEffect : ~m95_28 -# 95| m95_36(unknown) = Chi : total:m95_28, partial:m95_35 -# 95| v95_37(void) = ^IndirectReadSideEffect[-1] : &:r95_32, ~m95_36 -#-----| v0_7(void) = ConditionalBranch : r95_34 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 95| r95_14(glval) = VariableAddress[#temp95:20] : +# 95| r95_15(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_16(glval) = FunctionAddress[initial_suspend] : +# 95| r95_17(suspend_always) = Call[initial_suspend] : func:r95_16, this:r95_15 +# 95| mu95_18(unknown) = ^CallSideEffect : ~m? +# 95| v95_19(void) = ^IndirectReadSideEffect[-1] : &:r95_15, ~m? +# 95| mu95_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_15 +# 95| mu95_21(suspend_always) = Store[#temp95:20] : &:r95_14, r95_17 +# 95| r95_22(suspend_always *) = CopyValue : r95_14 +# 95| m95_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r95_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m95_23 +# 95| r95_24(glval) = CopyValue : r0_6 +# 95| r95_25(glval) = Convert : r95_24 +# 95| r95_26(glval) = FunctionAddress[await_ready] : +# 95| r95_27(bool) = Call[await_ready] : func:r95_26, this:r95_25 +# 95| mu95_28(unknown) = ^CallSideEffect : ~m? +# 95| v95_29(void) = ^IndirectReadSideEffect[-1] : &:r95_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r95_27 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 95| Block 1 +# 95| v95_30(void) = AliasedUse : ~m? +# 95| v95_31(void) = ExitFunction : + +# 95| Block 2 +# 95| v95_32(void) = Unwind : +#-----| Goto -> Block 1 -#-----| Block 1 -#-----| m0_8(unknown) = Phi : from 0:~m95_36, from 2:~m95_63 -#-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : -#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 -# 95| r95_38(suspend_always *) = CopyValue : r95_29 -# 95| r95_39(glval) = CopyValue : r95_38 -#-----| r0_12(glval) = Convert : r95_39 -# 95| r95_40(glval) = FunctionAddress[await_resume] : -# 95| v95_41(void) = Call[await_resume] : func:r95_40, this:r0_12 -# 95| m95_42(unknown) = ^CallSideEffect : ~m0_8 -# 95| m95_43(unknown) = Chi : total:m0_8, partial:m95_42 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m95_43 -#-----| v0_14(void) = CopyValue : v95_41 +#-----| Block 3 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 +# 95| r95_33(suspend_always *) = CopyValue : r95_22 +# 95| r95_34(glval) = CopyValue : r95_33 +#-----| r0_11(glval) = Convert : r95_34 +# 95| r95_35(glval) = FunctionAddress[await_resume] : +# 95| v95_36(void) = Call[await_resume] : func:r95_35, this:r0_11 +# 95| mu95_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v95_36 # 96| r96_1(glval) = VariableAddress[(unnamed local variable)] : # 96| r96_2(glval) = FunctionAddress[yield_value] : # 96| r96_3(glval) = VariableAddress[i] : # 96| r96_4(int) = Load[i] : &:r96_3, m0_4 # 96| r96_5(suspend_always) = Call[yield_value] : func:r96_2, this:r96_1, 0:r96_4 -# 96| m96_6(unknown) = ^CallSideEffect : ~m95_43 -# 96| m96_7(unknown) = Chi : total:m95_43, partial:m96_6 -# 96| v96_8(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m96_7 -# 96| m96_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 -# 96| m96_10(unknown) = Chi : total:m96_7, partial:m96_9 -#-----| C++ Exception -> Block 8 +# 96| mu96_6(unknown) = ^CallSideEffect : ~m? +# 96| v96_7(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m? +# 96| mu96_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 5 + +# 95| Block 4 +# 95| r95_38(suspend_always *) = CopyValue : r95_22 +# 95| r95_39(glval) = CopyValue : r95_38 +#-----| r0_14(glval) = Convert : r95_39 +# 95| r95_40(glval) = FunctionAddress[await_suspend] : +# 95| r95_41(glval>) = VariableAddress[#temp95:20] : +# 95| mu95_42(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_41 +# 95| r95_43(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_44(glval>) = VariableAddress[(unnamed local variable)] : +# 95| r95_45(glval>) = Convert : r95_44 +# 95| r95_46(coroutine_handle &) = CopyValue : r95_45 +# 95| v95_47(void) = Call[coroutine_handle] : func:r95_43, this:r95_41, 0:r95_46 +# 95| mu95_48(unknown) = ^CallSideEffect : ~m? +# 95| v95_49(void) = ^BufferReadSideEffect[0] : &:r95_46, ~m? +# 95| mu95_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_41 +# 95| r95_51(coroutine_handle) = Load[#temp95:20] : &:r95_41, ~m? +# 95| v95_52(void) = Call[await_suspend] : func:r95_40, this:r0_14, 0:r95_51 +# 95| mu95_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? #-----| Goto -> Block 3 -# 95| Block 2 -# 95| r95_44(suspend_always *) = CopyValue : r95_29 -# 95| r95_45(glval) = CopyValue : r95_44 -#-----| r0_15(glval) = Convert : r95_45 -# 95| r95_46(glval) = FunctionAddress[await_suspend] : -# 95| r95_47(glval>) = VariableAddress[#temp95:20] : -# 95| m95_48(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_47 -# 95| m95_49(unknown) = Chi : total:m95_36, partial:m95_48 -# 95| r95_50(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_51(glval>) = VariableAddress[(unnamed local variable)] : -# 95| r95_52(glval>) = Convert : r95_51 -# 95| r95_53(coroutine_handle &) = CopyValue : r95_52 -# 95| v95_54(void) = Call[coroutine_handle] : func:r95_50, this:r95_47, 0:r95_53 -# 95| m95_55(unknown) = ^CallSideEffect : ~m95_49 -# 95| m95_56(unknown) = Chi : total:m95_49, partial:m95_55 -# 95| v95_57(void) = ^BufferReadSideEffect[0] : &:r95_53, ~m95_56 -# 95| m95_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_47 -# 95| m95_59(unknown) = Chi : total:m95_56, partial:m95_58 -# 95| r95_60(coroutine_handle) = Load[#temp95:20] : &:r95_47, ~m95_59 -# 95| v95_61(void) = Call[await_suspend] : func:r95_46, this:r0_15, 0:r95_60 -# 95| m95_62(unknown) = ^CallSideEffect : ~m95_59 -# 95| m95_63(unknown) = Chi : total:m95_59, partial:m95_62 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m95_63 -#-----| Goto -> Block 1 +#-----| Block 5 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 96| r96_9(glval) = VariableAddress[#temp96:13] : +# 96| r96_10(glval) = VariableAddress[(unnamed local variable)] : +# 96| r96_11(glval) = FunctionAddress[yield_value] : +# 96| r96_12(glval) = VariableAddress[i] : +# 96| r96_13(int) = Load[i] : &:r96_12, m0_4 +# 96| r96_14(suspend_always) = Call[yield_value] : func:r96_11, this:r96_10, 0:r96_13 +# 96| mu96_15(unknown) = ^CallSideEffect : ~m? +# 96| v96_16(void) = ^IndirectReadSideEffect[-1] : &:r96_10, ~m? +# 96| mu96_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_10 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 6 -#-----| Block 3 -#-----| r0_17(glval) = VariableAddress[#temp0:0] : -# 96| r96_11(glval) = VariableAddress[#temp96:13] : -# 96| r96_12(glval) = VariableAddress[(unnamed local variable)] : -# 96| r96_13(glval) = FunctionAddress[yield_value] : -# 96| r96_14(glval) = VariableAddress[i] : -# 96| r96_15(int) = Load[i] : &:r96_14, m0_4 -# 96| r96_16(suspend_always) = Call[yield_value] : func:r96_13, this:r96_12, 0:r96_15 -# 96| m96_17(unknown) = ^CallSideEffect : ~m96_10 -# 96| m96_18(unknown) = Chi : total:m96_10, partial:m96_17 -# 96| v96_19(void) = ^IndirectReadSideEffect[-1] : &:r96_12, ~m96_18 -# 96| m96_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_12 -# 96| m96_21(unknown) = Chi : total:m96_18, partial:m96_20 -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 4 +# 96| Block 6 +# 96| mu96_18(suspend_always) = Store[#temp96:13] : &:r96_9, r96_14 +# 96| r96_19(suspend_always *) = CopyValue : r96_9 +# 96| m96_20(suspend_always *) = Store[#temp0:0] : &:r0_16, r96_19 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m96_20 +# 96| r96_21(glval) = CopyValue : r0_17 +# 96| r96_22(glval) = Convert : r96_21 +# 96| r96_23(glval) = FunctionAddress[await_ready] : +# 96| r96_24(bool) = Call[await_ready] : func:r96_23, this:r96_22 +# 96| mu96_25(unknown) = ^CallSideEffect : ~m? +# 96| v96_26(void) = ^IndirectReadSideEffect[-1] : &:r96_22, ~m? +# 96| v96_27(void) = ConditionalBranch : r96_24 +#-----| False -> Block 8 +#-----| True -> Block 7 -# 96| Block 4 -# 96| m96_22(suspend_always) = Store[#temp96:13] : &:r96_11, r96_16 -# 96| m96_23(unknown) = Chi : total:m96_21, partial:m96_22 -# 96| r96_24(suspend_always *) = CopyValue : r96_11 -# 96| m96_25(suspend_always *) = Store[#temp0:0] : &:r0_17, r96_24 -#-----| r0_18(suspend_always *) = Load[#temp0:0] : &:r0_17, m96_25 -# 96| r96_26(glval) = CopyValue : r0_18 -# 96| r96_27(glval) = Convert : r96_26 -# 96| r96_28(glval) = FunctionAddress[await_ready] : -# 96| r96_29(bool) = Call[await_ready] : func:r96_28, this:r96_27 -# 96| m96_30(unknown) = ^CallSideEffect : ~m96_23 -# 96| m96_31(unknown) = Chi : total:m96_23, partial:m96_30 -# 96| v96_32(void) = ^IndirectReadSideEffect[-1] : &:r96_27, ~m96_31 -# 96| v96_33(void) = ConditionalBranch : r96_29 -#-----| False -> Block 6 -#-----| True -> Block 5 +# 96| Block 7 +# 96| r96_28(suspend_always *) = CopyValue : r96_19 +# 96| r96_29(glval) = CopyValue : r96_28 +#-----| r0_18(glval) = Convert : r96_29 +# 96| r96_30(glval) = FunctionAddress[await_resume] : +# 96| v96_31(void) = Call[await_resume] : func:r96_30, this:r0_18 +# 96| mu96_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(glval) = FunctionAddress[return_void] : +#-----| v0_22(void) = Call[return_void] : func:r0_21, this:r0_20 +#-----| mu0_23(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| mu0_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 9 -# 96| Block 5 -# 96| m96_34(unknown) = Phi : from 4:~m96_31, from 6:~m96_60 -# 96| r96_35(suspend_always *) = CopyValue : r96_24 -# 96| r96_36(glval) = CopyValue : r96_35 -#-----| r0_19(glval) = Convert : r96_36 -# 96| r96_37(glval) = FunctionAddress[await_resume] : -# 96| v96_38(void) = Call[await_resume] : func:r96_37, this:r0_19 -# 96| m96_39(unknown) = ^CallSideEffect : ~m96_34 -# 96| m96_40(unknown) = Chi : total:m96_34, partial:m96_39 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m96_40 -#-----| r0_21(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_22(glval) = FunctionAddress[return_void] : -#-----| v0_23(void) = Call[return_void] : func:r0_22, this:r0_21 -#-----| m0_24(unknown) = ^CallSideEffect : ~m96_40 -#-----| m0_25(unknown) = Chi : total:m96_40, partial:m0_24 -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m0_25 -#-----| m0_27(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 -#-----| m0_28(unknown) = Chi : total:m0_25, partial:m0_27 -#-----| C++ Exception -> Block 8 +# 96| Block 8 +# 96| r96_33(suspend_always *) = CopyValue : r96_19 +# 96| r96_34(glval) = CopyValue : r96_33 +#-----| r0_26(glval) = Convert : r96_34 +# 96| r96_35(glval) = FunctionAddress[await_suspend] : +# 96| r96_36(glval>) = VariableAddress[#temp96:3] : +# 96| mu96_37(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_36 +# 96| r96_38(glval) = FunctionAddress[coroutine_handle] : +# 96| r96_39(glval>) = VariableAddress[(unnamed local variable)] : +# 96| r96_40(glval>) = Convert : r96_39 +# 96| r96_41(coroutine_handle &) = CopyValue : r96_40 +# 96| v96_42(void) = Call[coroutine_handle] : func:r96_38, this:r96_36, 0:r96_41 +# 96| mu96_43(unknown) = ^CallSideEffect : ~m? +# 96| v96_44(void) = ^BufferReadSideEffect[0] : &:r96_41, ~m? +# 96| mu96_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_36 +# 96| r96_46(coroutine_handle) = Load[#temp96:3] : &:r96_36, ~m? +# 96| v96_47(void) = Call[await_suspend] : func:r96_35, this:r0_26, 0:r96_46 +# 96| mu96_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_26, ~m? #-----| Goto -> Block 7 -# 96| Block 6 -# 96| r96_41(suspend_always *) = CopyValue : r96_24 -# 96| r96_42(glval) = CopyValue : r96_41 -#-----| r0_29(glval) = Convert : r96_42 -# 96| r96_43(glval) = FunctionAddress[await_suspend] : -# 96| r96_44(glval>) = VariableAddress[#temp96:3] : -# 96| m96_45(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_44 -# 96| m96_46(unknown) = Chi : total:m96_31, partial:m96_45 -# 96| r96_47(glval) = FunctionAddress[coroutine_handle] : -# 96| r96_48(glval>) = VariableAddress[(unnamed local variable)] : -# 96| r96_49(glval>) = Convert : r96_48 -# 96| r96_50(coroutine_handle &) = CopyValue : r96_49 -# 96| v96_51(void) = Call[coroutine_handle] : func:r96_47, this:r96_44, 0:r96_50 -# 96| m96_52(unknown) = ^CallSideEffect : ~m96_46 -# 96| m96_53(unknown) = Chi : total:m96_46, partial:m96_52 -# 96| v96_54(void) = ^BufferReadSideEffect[0] : &:r96_50, ~m96_53 -# 96| m96_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_44 -# 96| m96_56(unknown) = Chi : total:m96_53, partial:m96_55 -# 96| r96_57(coroutine_handle) = Load[#temp96:3] : &:r96_44, ~m96_56 -# 96| v96_58(void) = Call[await_suspend] : func:r96_43, this:r0_29, 0:r96_57 -# 96| m96_59(unknown) = ^CallSideEffect : ~m96_56 -# 96| m96_60(unknown) = Chi : total:m96_56, partial:m96_59 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m96_60 -#-----| Goto -> Block 5 - -# 97| Block 7 +# 97| Block 9 # 97| v97_1(void) = NoOp : -#-----| v0_31(void) = NoOp : -#-----| Goto (back edge) -> Block 10 - -#-----| Block 8 -#-----| m0_32(unknown) = Phi : from 1:~m96_10, from 3:~m96_21, from 5:~m0_28 -#-----| v0_33(void) = CatchAny : -#-----| r0_34(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_35(bool) = Load[(unnamed local variable)] : &:r0_34, m0_11 -#-----| r0_36(bool) = LogicalNot : r0_35 -#-----| v0_37(void) = ConditionalBranch : r0_36 -#-----| False -> Block 9 -#-----| True -> Block 13 - -# 95| Block 9 -# 95| r95_64(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_65(glval) = FunctionAddress[unhandled_exception] : -# 95| v95_66(void) = Call[unhandled_exception] : func:r95_65, this:r95_64 -# 95| m95_67(unknown) = ^CallSideEffect : ~m0_32 -# 95| m95_68(unknown) = Chi : total:m0_32, partial:m95_67 -# 95| v95_69(void) = ^IndirectReadSideEffect[-1] : &:r95_64, ~m95_68 -# 95| m95_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_64 -# 95| m95_71(unknown) = Chi : total:m95_68, partial:m95_70 -#-----| Goto -> Block 10 +#-----| v0_28(void) = NoOp : +#-----| Goto (back edge) -> Block 13 #-----| Block 10 -#-----| m0_38(unknown) = Phi : from 7:~m0_28, from 9:~m95_71 -#-----| v0_39(void) = NoOp : -# 95| r95_72(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_73(glval) = FunctionAddress[final_suspend] : -# 95| r95_74(suspend_always) = Call[final_suspend] : func:r95_73, this:r95_72 -# 95| m95_75(unknown) = ^CallSideEffect : ~m0_38 -# 95| m95_76(unknown) = Chi : total:m0_38, partial:m95_75 -# 95| v95_77(void) = ^IndirectReadSideEffect[-1] : &:r95_72, ~m95_76 -# 95| m95_78(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_72 -# 95| m95_79(unknown) = Chi : total:m95_76, partial:m95_78 -#-----| r0_40(glval) = VariableAddress[#temp0:0] : -# 95| r95_80(glval) = VariableAddress[#temp95:20] : -# 95| r95_81(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_82(glval) = FunctionAddress[final_suspend] : -# 95| r95_83(suspend_always) = Call[final_suspend] : func:r95_82, this:r95_81 -# 95| m95_84(unknown) = ^CallSideEffect : ~m95_79 -# 95| m95_85(unknown) = Chi : total:m95_79, partial:m95_84 -# 95| v95_86(void) = ^IndirectReadSideEffect[-1] : &:r95_81, ~m95_85 -# 95| m95_87(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_81 -# 95| m95_88(unknown) = Chi : total:m95_85, partial:m95_87 -# 95| m95_89(suspend_always) = Store[#temp95:20] : &:r95_80, r95_83 -# 95| m95_90(unknown) = Chi : total:m95_88, partial:m95_89 -# 95| r95_91(suspend_always *) = CopyValue : r95_80 -# 95| m95_92(suspend_always *) = Store[#temp0:0] : &:r0_40, r95_91 -#-----| r0_41(suspend_always *) = Load[#temp0:0] : &:r0_40, m95_92 -# 95| r95_93(glval) = CopyValue : r0_41 -# 95| r95_94(glval) = Convert : r95_93 -# 95| r95_95(glval) = FunctionAddress[await_ready] : -# 95| r95_96(bool) = Call[await_ready] : func:r95_95, this:r95_94 -# 95| m95_97(unknown) = ^CallSideEffect : ~m95_90 -# 95| m95_98(unknown) = Chi : total:m95_90, partial:m95_97 -# 95| v95_99(void) = ^IndirectReadSideEffect[-1] : &:r95_94, ~m95_98 -#-----| v0_42(void) = ConditionalBranch : r95_96 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_31(bool) = Load[(unnamed local variable)] : &:r0_30, m0_10 +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 #-----| False -> Block 12 #-----| True -> Block 11 -# 95| Block 11 -# 95| m95_100(unknown) = Phi : from 10:~m95_98, from 12:~m95_130 -# 95| r95_101(suspend_always *) = CopyValue : r95_91 -# 95| r95_102(glval) = CopyValue : r95_101 -#-----| r0_43(glval) = Convert : r95_102 -# 95| r95_103(glval) = FunctionAddress[await_resume] : -# 95| v95_104(void) = Call[await_resume] : func:r95_103, this:r0_43 -# 95| m95_105(unknown) = ^CallSideEffect : ~m95_100 -# 95| m95_106(unknown) = Chi : total:m95_100, partial:m95_105 -#-----| v0_44(void) = ^IndirectReadSideEffect[-1] : &:r0_43, ~m95_106 -# 95| r95_107(glval) = VariableAddress[#return] : -# 95| v95_108(void) = ReturnValue : &:r95_107, ~m95_106 -# 95| v95_109(void) = AliasedUse : ~m95_106 -# 95| v95_110(void) = ExitFunction : +#-----| Block 11 +#-----| v0_34(void) = ReThrow : +#-----| C++ Exception -> Block 2 # 95| Block 12 -# 95| r95_111(suspend_always *) = CopyValue : r95_91 -# 95| r95_112(glval) = CopyValue : r95_111 -#-----| r0_45(glval) = Convert : r95_112 -# 95| r95_113(glval) = FunctionAddress[await_suspend] : -# 95| r95_114(glval>) = VariableAddress[#temp95:20] : -# 95| m95_115(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_114 -# 95| m95_116(unknown) = Chi : total:m95_98, partial:m95_115 -# 95| r95_117(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_118(glval>) = VariableAddress[(unnamed local variable)] : -# 95| r95_119(glval>) = Convert : r95_118 -# 95| r95_120(coroutine_handle &) = CopyValue : r95_119 -# 95| v95_121(void) = Call[coroutine_handle] : func:r95_117, this:r95_114, 0:r95_120 -# 95| m95_122(unknown) = ^CallSideEffect : ~m95_116 -# 95| m95_123(unknown) = Chi : total:m95_116, partial:m95_122 -# 95| v95_124(void) = ^BufferReadSideEffect[0] : &:r95_120, ~m95_123 -# 95| m95_125(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_114 -# 95| m95_126(unknown) = Chi : total:m95_123, partial:m95_125 -# 95| r95_127(coroutine_handle) = Load[#temp95:20] : &:r95_114, ~m95_126 -# 95| v95_128(void) = Call[await_suspend] : func:r95_113, this:r0_45, 0:r95_127 -# 95| m95_129(unknown) = ^CallSideEffect : ~m95_126 -# 95| m95_130(unknown) = Chi : total:m95_126, partial:m95_129 -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_45, ~m95_130 -#-----| Goto -> Block 11 +# 95| r95_54(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_55(glval) = FunctionAddress[unhandled_exception] : +# 95| v95_56(void) = Call[unhandled_exception] : func:r95_55, this:r95_54 +# 95| mu95_57(unknown) = ^CallSideEffect : ~m? +# 95| v95_58(void) = ^IndirectReadSideEffect[-1] : &:r95_54, ~m? +# 95| mu95_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_54 +#-----| Goto -> Block 13 + +#-----| Block 13 +#-----| v0_35(void) = NoOp : +# 95| r95_60(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_61(glval) = FunctionAddress[final_suspend] : +# 95| r95_62(suspend_always) = Call[final_suspend] : func:r95_61, this:r95_60 +# 95| mu95_63(unknown) = ^CallSideEffect : ~m? +# 95| v95_64(void) = ^IndirectReadSideEffect[-1] : &:r95_60, ~m? +# 95| mu95_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_60 +#-----| r0_36(glval) = VariableAddress[#temp0:0] : +# 95| r95_66(glval) = VariableAddress[#temp95:20] : +# 95| r95_67(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_68(glval) = FunctionAddress[final_suspend] : +# 95| r95_69(suspend_always) = Call[final_suspend] : func:r95_68, this:r95_67 +# 95| mu95_70(unknown) = ^CallSideEffect : ~m? +# 95| v95_71(void) = ^IndirectReadSideEffect[-1] : &:r95_67, ~m? +# 95| mu95_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_67 +# 95| mu95_73(suspend_always) = Store[#temp95:20] : &:r95_66, r95_69 +# 95| r95_74(suspend_always *) = CopyValue : r95_66 +# 95| m95_75(suspend_always *) = Store[#temp0:0] : &:r0_36, r95_74 +#-----| r0_37(suspend_always *) = Load[#temp0:0] : &:r0_36, m95_75 +# 95| r95_76(glval) = CopyValue : r0_37 +# 95| r95_77(glval) = Convert : r95_76 +# 95| r95_78(glval) = FunctionAddress[await_ready] : +# 95| r95_79(bool) = Call[await_ready] : func:r95_78, this:r95_77 +# 95| mu95_80(unknown) = ^CallSideEffect : ~m? +# 95| v95_81(void) = ^IndirectReadSideEffect[-1] : &:r95_77, ~m? +#-----| v0_38(void) = ConditionalBranch : r95_79 +#-----| False -> Block 15 +#-----| True -> Block 14 + +# 95| Block 14 +# 95| r95_82(suspend_always *) = CopyValue : r95_74 +# 95| r95_83(glval) = CopyValue : r95_82 +#-----| r0_39(glval) = Convert : r95_83 +# 95| r95_84(glval) = FunctionAddress[await_resume] : +# 95| v95_85(void) = Call[await_resume] : func:r95_84, this:r0_39 +# 95| mu95_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 95| r95_87(glval) = VariableAddress[#return] : +# 95| v95_88(void) = ReturnValue : &:r95_87, ~m? +#-----| Goto -> Block 1 -# 95| Block 13 -# 95| v95_131(void) = Unreached : +# 95| Block 15 +# 95| r95_89(suspend_always *) = CopyValue : r95_74 +# 95| r95_90(glval) = CopyValue : r95_89 +#-----| r0_41(glval) = Convert : r95_90 +# 95| r95_91(glval) = FunctionAddress[await_suspend] : +# 95| r95_92(glval>) = VariableAddress[#temp95:20] : +# 95| mu95_93(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_92 +# 95| r95_94(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_95(glval>) = VariableAddress[(unnamed local variable)] : +# 95| r95_96(glval>) = Convert : r95_95 +# 95| r95_97(coroutine_handle &) = CopyValue : r95_96 +# 95| v95_98(void) = Call[coroutine_handle] : func:r95_94, this:r95_92, 0:r95_97 +# 95| mu95_99(unknown) = ^CallSideEffect : ~m? +# 95| v95_100(void) = ^BufferReadSideEffect[0] : &:r95_97, ~m? +# 95| mu95_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_92 +# 95| r95_102(coroutine_handle) = Load[#temp95:20] : &:r95_92, ~m? +# 95| v95_103(void) = Call[await_suspend] : func:r95_91, this:r0_41, 0:r95_102 +# 95| mu95_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +#-----| Goto -> Block 14 # 99| co_returnable_value co_yield_value_value(int) # 99| Block 0 # 99| v99_1(void) = EnterFunction : -# 99| m99_2(unknown) = AliasedDefinition : -# 99| m99_3(unknown) = InitializeNonLocal : -# 99| m99_4(unknown) = Chi : total:m99_2, partial:m99_3 -# 99| r99_5(glval) = VariableAddress[i] : -# 99| m99_6(int) = InitializeParameter[i] : &:r99_5 +# 99| mu99_2(unknown) = AliasedDefinition : +# 99| mu99_3(unknown) = InitializeNonLocal : +# 99| r99_4(glval) = VariableAddress[i] : +# 99| m99_5(int) = InitializeParameter[i] : &:r99_4 #-----| r0_1(glval) = VariableAddress[i] : #-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m99_6 +#-----| r0_3(int) = Load[i] : &:r0_2, m99_5 #-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 99| r99_7(glval) = VariableAddress[(unnamed local variable)] : -# 99| m99_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_7 -# 99| m99_9(unknown) = Chi : total:m99_4, partial:m99_8 -# 99| r99_10(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_11(glval) = FunctionAddress[initial_suspend] : -# 99| r99_12(suspend_always) = Call[initial_suspend] : func:r99_11, this:r99_10 -# 99| m99_13(unknown) = ^CallSideEffect : ~m99_9 -# 99| m99_14(unknown) = Chi : total:m99_9, partial:m99_13 -# 99| v99_15(void) = ^IndirectReadSideEffect[-1] : &:r99_10, ~m99_14 -# 99| m99_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_10 -# 99| m99_17(unknown) = Chi : total:m99_14, partial:m99_16 +# 99| r99_6(glval) = VariableAddress[(unnamed local variable)] : +# 99| mu99_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_6 +# 99| r99_8(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_9(glval) = FunctionAddress[initial_suspend] : +# 99| r99_10(suspend_always) = Call[initial_suspend] : func:r99_9, this:r99_8 +# 99| mu99_11(unknown) = ^CallSideEffect : ~m? +# 99| v99_12(void) = ^IndirectReadSideEffect[-1] : &:r99_8, ~m? +# 99| mu99_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_8 #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 99| r99_18(glval) = VariableAddress[#temp99:21] : -# 99| r99_19(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_20(glval) = FunctionAddress[initial_suspend] : -# 99| r99_21(suspend_always) = Call[initial_suspend] : func:r99_20, this:r99_19 -# 99| m99_22(unknown) = ^CallSideEffect : ~m99_17 -# 99| m99_23(unknown) = Chi : total:m99_17, partial:m99_22 -# 99| v99_24(void) = ^IndirectReadSideEffect[-1] : &:r99_19, ~m99_23 -# 99| m99_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_19 -# 99| m99_26(unknown) = Chi : total:m99_23, partial:m99_25 -# 99| m99_27(suspend_always) = Store[#temp99:21] : &:r99_18, r99_21 -# 99| m99_28(unknown) = Chi : total:m99_26, partial:m99_27 -# 99| r99_29(suspend_always *) = CopyValue : r99_18 -# 99| m99_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r99_29 -#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m99_30 -# 99| r99_31(glval) = CopyValue : r0_6 -# 99| r99_32(glval) = Convert : r99_31 -# 99| r99_33(glval) = FunctionAddress[await_ready] : -# 99| r99_34(bool) = Call[await_ready] : func:r99_33, this:r99_32 -# 99| m99_35(unknown) = ^CallSideEffect : ~m99_28 -# 99| m99_36(unknown) = Chi : total:m99_28, partial:m99_35 -# 99| v99_37(void) = ^IndirectReadSideEffect[-1] : &:r99_32, ~m99_36 -#-----| v0_7(void) = ConditionalBranch : r99_34 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 99| r99_14(glval) = VariableAddress[#temp99:21] : +# 99| r99_15(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_16(glval) = FunctionAddress[initial_suspend] : +# 99| r99_17(suspend_always) = Call[initial_suspend] : func:r99_16, this:r99_15 +# 99| mu99_18(unknown) = ^CallSideEffect : ~m? +# 99| v99_19(void) = ^IndirectReadSideEffect[-1] : &:r99_15, ~m? +# 99| mu99_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_15 +# 99| mu99_21(suspend_always) = Store[#temp99:21] : &:r99_14, r99_17 +# 99| r99_22(suspend_always *) = CopyValue : r99_14 +# 99| m99_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r99_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m99_23 +# 99| r99_24(glval) = CopyValue : r0_6 +# 99| r99_25(glval) = Convert : r99_24 +# 99| r99_26(glval) = FunctionAddress[await_ready] : +# 99| r99_27(bool) = Call[await_ready] : func:r99_26, this:r99_25 +# 99| mu99_28(unknown) = ^CallSideEffect : ~m? +# 99| v99_29(void) = ^IndirectReadSideEffect[-1] : &:r99_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r99_27 +#-----| False -> Block 4 +#-----| True -> Block 3 -#-----| Block 1 -#-----| m0_8(unknown) = Phi : from 0:~m99_36, from 2:~m99_63 -#-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : -#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 -# 99| r99_38(suspend_always *) = CopyValue : r99_29 -# 99| r99_39(glval) = CopyValue : r99_38 -#-----| r0_12(glval) = Convert : r99_39 -# 99| r99_40(glval) = FunctionAddress[await_resume] : -# 99| v99_41(void) = Call[await_resume] : func:r99_40, this:r0_12 -# 99| m99_42(unknown) = ^CallSideEffect : ~m0_8 -# 99| m99_43(unknown) = Chi : total:m0_8, partial:m99_42 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m99_43 -#-----| v0_14(void) = CopyValue : v99_41 -# 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : -# 100| r100_2(glval) = FunctionAddress[yield_value] : -# 100| r100_3(glval) = VariableAddress[i] : -# 100| r100_4(int) = Load[i] : &:r100_3, m0_4 -# 100| r100_5(suspend_always) = Call[yield_value] : func:r100_2, this:r100_1, 0:r100_4 -# 100| m100_6(unknown) = ^CallSideEffect : ~m99_43 -# 100| m100_7(unknown) = Chi : total:m99_43, partial:m100_6 -# 100| v100_8(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m100_7 -# 100| m100_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 -# 100| m100_10(unknown) = Chi : total:m100_7, partial:m100_9 -#-----| C++ Exception -> Block 7 -#-----| Goto -> Block 3 +# 99| Block 1 +# 99| v99_30(void) = AliasedUse : ~m? +# 99| v99_31(void) = ExitFunction : # 99| Block 2 -# 99| r99_44(suspend_always *) = CopyValue : r99_29 -# 99| r99_45(glval) = CopyValue : r99_44 -#-----| r0_15(glval) = Convert : r99_45 -# 99| r99_46(glval) = FunctionAddress[await_suspend] : -# 99| r99_47(glval>) = VariableAddress[#temp99:21] : -# 99| m99_48(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_47 -# 99| m99_49(unknown) = Chi : total:m99_36, partial:m99_48 -# 99| r99_50(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_51(glval>) = VariableAddress[(unnamed local variable)] : -# 99| r99_52(glval>) = Convert : r99_51 -# 99| r99_53(coroutine_handle &) = CopyValue : r99_52 -# 99| v99_54(void) = Call[coroutine_handle] : func:r99_50, this:r99_47, 0:r99_53 -# 99| m99_55(unknown) = ^CallSideEffect : ~m99_49 -# 99| m99_56(unknown) = Chi : total:m99_49, partial:m99_55 -# 99| v99_57(void) = ^BufferReadSideEffect[0] : &:r99_53, ~m99_56 -# 99| m99_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_47 -# 99| m99_59(unknown) = Chi : total:m99_56, partial:m99_58 -# 99| r99_60(coroutine_handle) = Load[#temp99:21] : &:r99_47, ~m99_59 -# 99| v99_61(void) = Call[await_suspend] : func:r99_46, this:r0_15, 0:r99_60 -# 99| m99_62(unknown) = ^CallSideEffect : ~m99_59 -# 99| m99_63(unknown) = Chi : total:m99_59, partial:m99_62 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m99_63 +# 99| v99_32(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_17(glval) = VariableAddress[#temp0:0] : -# 100| r100_11(glval) = VariableAddress[#temp100:13] : -# 100| r100_12(glval) = VariableAddress[(unnamed local variable)] : -# 100| r100_13(glval) = FunctionAddress[yield_value] : -# 100| r100_14(glval) = VariableAddress[i] : -# 100| r100_15(int) = Load[i] : &:r100_14, m0_4 -# 100| r100_16(suspend_always) = Call[yield_value] : func:r100_13, this:r100_12, 0:r100_15 -# 100| m100_17(unknown) = ^CallSideEffect : ~m100_10 -# 100| m100_18(unknown) = Chi : total:m100_10, partial:m100_17 -# 100| v100_19(void) = ^IndirectReadSideEffect[-1] : &:r100_12, ~m100_18 -# 100| m100_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_12 -# 100| m100_21(unknown) = Chi : total:m100_18, partial:m100_20 -#-----| C++ Exception -> Block 7 -#-----| Goto -> Block 4 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 +# 99| r99_33(suspend_always *) = CopyValue : r99_22 +# 99| r99_34(glval) = CopyValue : r99_33 +#-----| r0_11(glval) = Convert : r99_34 +# 99| r99_35(glval) = FunctionAddress[await_resume] : +# 99| v99_36(void) = Call[await_resume] : func:r99_35, this:r0_11 +# 99| mu99_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v99_36 +# 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : +# 100| r100_2(glval) = FunctionAddress[yield_value] : +# 100| r100_3(glval) = VariableAddress[i] : +# 100| r100_4(int) = Load[i] : &:r100_3, m0_4 +# 100| r100_5(suspend_always) = Call[yield_value] : func:r100_2, this:r100_1, 0:r100_4 +# 100| mu100_6(unknown) = ^CallSideEffect : ~m? +# 100| v100_7(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m? +# 100| mu100_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 +#-----| C++ Exception -> Block 9 +#-----| Goto -> Block 5 -# 100| Block 4 -# 100| m100_22(suspend_always) = Store[#temp100:13] : &:r100_11, r100_16 -# 100| m100_23(unknown) = Chi : total:m100_21, partial:m100_22 -# 100| r100_24(suspend_always *) = CopyValue : r100_11 -# 100| m100_25(suspend_always *) = Store[#temp0:0] : &:r0_17, r100_24 -#-----| r0_18(suspend_always *) = Load[#temp0:0] : &:r0_17, m100_25 -# 100| r100_26(glval) = CopyValue : r0_18 -# 100| r100_27(glval) = Convert : r100_26 -# 100| r100_28(glval) = FunctionAddress[await_ready] : -# 100| r100_29(bool) = Call[await_ready] : func:r100_28, this:r100_27 -# 100| m100_30(unknown) = ^CallSideEffect : ~m100_23 -# 100| m100_31(unknown) = Chi : total:m100_23, partial:m100_30 -# 100| v100_32(void) = ^IndirectReadSideEffect[-1] : &:r100_27, ~m100_31 -# 100| v100_33(void) = ConditionalBranch : r100_29 -#-----| False -> Block 6 -#-----| True -> Block 5 +# 99| Block 4 +# 99| r99_38(suspend_always *) = CopyValue : r99_22 +# 99| r99_39(glval) = CopyValue : r99_38 +#-----| r0_14(glval) = Convert : r99_39 +# 99| r99_40(glval) = FunctionAddress[await_suspend] : +# 99| r99_41(glval>) = VariableAddress[#temp99:21] : +# 99| mu99_42(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_41 +# 99| r99_43(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_44(glval>) = VariableAddress[(unnamed local variable)] : +# 99| r99_45(glval>) = Convert : r99_44 +# 99| r99_46(coroutine_handle &) = CopyValue : r99_45 +# 99| v99_47(void) = Call[coroutine_handle] : func:r99_43, this:r99_41, 0:r99_46 +# 99| mu99_48(unknown) = ^CallSideEffect : ~m? +# 99| v99_49(void) = ^BufferReadSideEffect[0] : &:r99_46, ~m? +# 99| mu99_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_41 +# 99| r99_51(coroutine_handle) = Load[#temp99:21] : &:r99_41, ~m? +# 99| v99_52(void) = Call[await_suspend] : func:r99_40, this:r0_14, 0:r99_51 +# 99| mu99_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? +#-----| Goto -> Block 3 -# 100| Block 5 -# 100| m100_34(unknown) = Phi : from 4:~m100_31, from 6:~m100_60 -# 100| r100_35(suspend_always *) = CopyValue : r100_24 -# 100| r100_36(glval) = CopyValue : r100_35 -#-----| r0_19(glval) = Convert : r100_36 -# 100| r100_37(glval) = FunctionAddress[await_resume] : -# 100| v100_38(void) = Call[await_resume] : func:r100_37, this:r0_19 -# 100| m100_39(unknown) = ^CallSideEffect : ~m100_34 -# 100| m100_40(unknown) = Chi : total:m100_34, partial:m100_39 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m100_40 -#-----| Goto -> Block 9 +#-----| Block 5 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 100| r100_9(glval) = VariableAddress[#temp100:13] : +# 100| r100_10(glval) = VariableAddress[(unnamed local variable)] : +# 100| r100_11(glval) = FunctionAddress[yield_value] : +# 100| r100_12(glval) = VariableAddress[i] : +# 100| r100_13(int) = Load[i] : &:r100_12, m0_4 +# 100| r100_14(suspend_always) = Call[yield_value] : func:r100_11, this:r100_10, 0:r100_13 +# 100| mu100_15(unknown) = ^CallSideEffect : ~m? +# 100| v100_16(void) = ^IndirectReadSideEffect[-1] : &:r100_10, ~m? +# 100| mu100_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_10 +#-----| C++ Exception -> Block 9 +#-----| Goto -> Block 6 # 100| Block 6 -# 100| r100_41(suspend_always *) = CopyValue : r100_24 -# 100| r100_42(glval) = CopyValue : r100_41 -#-----| r0_21(glval) = Convert : r100_42 -# 100| r100_43(glval) = FunctionAddress[await_suspend] : -# 100| r100_44(glval>) = VariableAddress[#temp100:3] : -# 100| m100_45(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_44 -# 100| m100_46(unknown) = Chi : total:m100_31, partial:m100_45 -# 100| r100_47(glval) = FunctionAddress[coroutine_handle] : -# 100| r100_48(glval>) = VariableAddress[(unnamed local variable)] : -# 100| r100_49(glval>) = Convert : r100_48 -# 100| r100_50(coroutine_handle &) = CopyValue : r100_49 -# 100| v100_51(void) = Call[coroutine_handle] : func:r100_47, this:r100_44, 0:r100_50 -# 100| m100_52(unknown) = ^CallSideEffect : ~m100_46 -# 100| m100_53(unknown) = Chi : total:m100_46, partial:m100_52 -# 100| v100_54(void) = ^BufferReadSideEffect[0] : &:r100_50, ~m100_53 -# 100| m100_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_44 -# 100| m100_56(unknown) = Chi : total:m100_53, partial:m100_55 -# 100| r100_57(coroutine_handle) = Load[#temp100:3] : &:r100_44, ~m100_56 -# 100| v100_58(void) = Call[await_suspend] : func:r100_43, this:r0_21, 0:r100_57 -# 100| m100_59(unknown) = ^CallSideEffect : ~m100_56 -# 100| m100_60(unknown) = Chi : total:m100_56, partial:m100_59 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m100_60 -#-----| Goto -> Block 5 - -#-----| Block 7 -#-----| m0_23(unknown) = Phi : from 1:~m100_10, from 3:~m100_21 -#-----| v0_24(void) = CatchAny : -#-----| r0_25(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_26(bool) = Load[(unnamed local variable)] : &:r0_25, m0_11 -#-----| r0_27(bool) = LogicalNot : r0_26 -#-----| v0_28(void) = ConditionalBranch : r0_27 +# 100| mu100_18(suspend_always) = Store[#temp100:13] : &:r100_9, r100_14 +# 100| r100_19(suspend_always *) = CopyValue : r100_9 +# 100| m100_20(suspend_always *) = Store[#temp0:0] : &:r0_16, r100_19 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m100_20 +# 100| r100_21(glval) = CopyValue : r0_17 +# 100| r100_22(glval) = Convert : r100_21 +# 100| r100_23(glval) = FunctionAddress[await_ready] : +# 100| r100_24(bool) = Call[await_ready] : func:r100_23, this:r100_22 +# 100| mu100_25(unknown) = ^CallSideEffect : ~m? +# 100| v100_26(void) = ^IndirectReadSideEffect[-1] : &:r100_22, ~m? +# 100| v100_27(void) = ConditionalBranch : r100_24 #-----| False -> Block 8 -#-----| True -> Block 12 +#-----| True -> Block 7 -# 99| Block 8 -# 99| r99_64(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_65(glval) = FunctionAddress[unhandled_exception] : -# 99| v99_66(void) = Call[unhandled_exception] : func:r99_65, this:r99_64 -# 99| m99_67(unknown) = ^CallSideEffect : ~m0_23 -# 99| m99_68(unknown) = Chi : total:m0_23, partial:m99_67 -# 99| v99_69(void) = ^IndirectReadSideEffect[-1] : &:r99_64, ~m99_68 -# 99| m99_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_64 -# 99| m99_71(unknown) = Chi : total:m99_68, partial:m99_70 -#-----| Goto -> Block 9 +# 100| Block 7 +# 100| r100_28(suspend_always *) = CopyValue : r100_19 +# 100| r100_29(glval) = CopyValue : r100_28 +#-----| r0_18(glval) = Convert : r100_29 +# 100| r100_30(glval) = FunctionAddress[await_resume] : +# 100| v100_31(void) = Call[await_resume] : func:r100_30, this:r0_18 +# 100| mu100_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| Goto -> Block 12 + +# 100| Block 8 +# 100| r100_33(suspend_always *) = CopyValue : r100_19 +# 100| r100_34(glval) = CopyValue : r100_33 +#-----| r0_20(glval) = Convert : r100_34 +# 100| r100_35(glval) = FunctionAddress[await_suspend] : +# 100| r100_36(glval>) = VariableAddress[#temp100:3] : +# 100| mu100_37(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_36 +# 100| r100_38(glval) = FunctionAddress[coroutine_handle] : +# 100| r100_39(glval>) = VariableAddress[(unnamed local variable)] : +# 100| r100_40(glval>) = Convert : r100_39 +# 100| r100_41(coroutine_handle &) = CopyValue : r100_40 +# 100| v100_42(void) = Call[coroutine_handle] : func:r100_38, this:r100_36, 0:r100_41 +# 100| mu100_43(unknown) = ^CallSideEffect : ~m? +# 100| v100_44(void) = ^BufferReadSideEffect[0] : &:r100_41, ~m? +# 100| mu100_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_36 +# 100| r100_46(coroutine_handle) = Load[#temp100:3] : &:r100_36, ~m? +# 100| v100_47(void) = Call[await_suspend] : func:r100_35, this:r0_20, 0:r100_46 +# 100| mu100_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| Goto -> Block 7 #-----| Block 9 -#-----| m0_29(unknown) = Phi : from 5:~m100_40, from 8:~m99_71 -#-----| v0_30(void) = NoOp : -# 99| r99_72(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_73(glval) = FunctionAddress[final_suspend] : -# 99| r99_74(suspend_always) = Call[final_suspend] : func:r99_73, this:r99_72 -# 99| m99_75(unknown) = ^CallSideEffect : ~m0_29 -# 99| m99_76(unknown) = Chi : total:m0_29, partial:m99_75 -# 99| v99_77(void) = ^IndirectReadSideEffect[-1] : &:r99_72, ~m99_76 -# 99| m99_78(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_72 -# 99| m99_79(unknown) = Chi : total:m99_76, partial:m99_78 -#-----| r0_31(glval) = VariableAddress[#temp0:0] : -# 99| r99_80(glval) = VariableAddress[#temp99:21] : -# 99| r99_81(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_82(glval) = FunctionAddress[final_suspend] : -# 99| r99_83(suspend_always) = Call[final_suspend] : func:r99_82, this:r99_81 -# 99| m99_84(unknown) = ^CallSideEffect : ~m99_79 -# 99| m99_85(unknown) = Chi : total:m99_79, partial:m99_84 -# 99| v99_86(void) = ^IndirectReadSideEffect[-1] : &:r99_81, ~m99_85 -# 99| m99_87(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_81 -# 99| m99_88(unknown) = Chi : total:m99_85, partial:m99_87 -# 99| m99_89(suspend_always) = Store[#temp99:21] : &:r99_80, r99_83 -# 99| m99_90(unknown) = Chi : total:m99_88, partial:m99_89 -# 99| r99_91(suspend_always *) = CopyValue : r99_80 -# 99| m99_92(suspend_always *) = Store[#temp0:0] : &:r0_31, r99_91 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_31, m99_92 -# 99| r99_93(glval) = CopyValue : r0_32 -# 99| r99_94(glval) = Convert : r99_93 -# 99| r99_95(glval) = FunctionAddress[await_ready] : -# 99| r99_96(bool) = Call[await_ready] : func:r99_95, this:r99_94 -# 99| m99_97(unknown) = ^CallSideEffect : ~m99_90 -# 99| m99_98(unknown) = Chi : total:m99_90, partial:m99_97 -# 99| v99_99(void) = ^IndirectReadSideEffect[-1] : &:r99_94, ~m99_98 -#-----| v0_33(void) = ConditionalBranch : r99_96 +#-----| v0_22(void) = CatchAny : +#-----| r0_23(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_24(bool) = Load[(unnamed local variable)] : &:r0_23, m0_10 +#-----| r0_25(bool) = LogicalNot : r0_24 +#-----| v0_26(void) = ConditionalBranch : r0_25 #-----| False -> Block 11 #-----| True -> Block 10 -# 99| Block 10 -# 99| m99_100(unknown) = Phi : from 9:~m99_98, from 11:~m99_130 -# 99| r99_101(suspend_always *) = CopyValue : r99_91 -# 99| r99_102(glval) = CopyValue : r99_101 -#-----| r0_34(glval) = Convert : r99_102 -# 99| r99_103(glval) = FunctionAddress[await_resume] : -# 99| v99_104(void) = Call[await_resume] : func:r99_103, this:r0_34 -# 99| m99_105(unknown) = ^CallSideEffect : ~m99_100 -# 99| m99_106(unknown) = Chi : total:m99_100, partial:m99_105 -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m99_106 -# 99| r99_107(glval) = VariableAddress[#return] : -# 99| v99_108(void) = ReturnValue : &:r99_107, ~m99_106 -# 99| v99_109(void) = AliasedUse : ~m99_106 -# 99| v99_110(void) = ExitFunction : +#-----| Block 10 +#-----| v0_27(void) = ReThrow : +#-----| C++ Exception -> Block 2 # 99| Block 11 -# 99| r99_111(suspend_always *) = CopyValue : r99_91 -# 99| r99_112(glval) = CopyValue : r99_111 -#-----| r0_36(glval) = Convert : r99_112 -# 99| r99_113(glval) = FunctionAddress[await_suspend] : -# 99| r99_114(glval>) = VariableAddress[#temp99:21] : -# 99| m99_115(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_114 -# 99| m99_116(unknown) = Chi : total:m99_98, partial:m99_115 -# 99| r99_117(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_118(glval>) = VariableAddress[(unnamed local variable)] : -# 99| r99_119(glval>) = Convert : r99_118 -# 99| r99_120(coroutine_handle &) = CopyValue : r99_119 -# 99| v99_121(void) = Call[coroutine_handle] : func:r99_117, this:r99_114, 0:r99_120 -# 99| m99_122(unknown) = ^CallSideEffect : ~m99_116 -# 99| m99_123(unknown) = Chi : total:m99_116, partial:m99_122 -# 99| v99_124(void) = ^BufferReadSideEffect[0] : &:r99_120, ~m99_123 -# 99| m99_125(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_114 -# 99| m99_126(unknown) = Chi : total:m99_123, partial:m99_125 -# 99| r99_127(coroutine_handle) = Load[#temp99:21] : &:r99_114, ~m99_126 -# 99| v99_128(void) = Call[await_suspend] : func:r99_113, this:r0_36, 0:r99_127 -# 99| m99_129(unknown) = ^CallSideEffect : ~m99_126 -# 99| m99_130(unknown) = Chi : total:m99_126, partial:m99_129 -#-----| v0_37(void) = ^IndirectReadSideEffect[-1] : &:r0_36, ~m99_130 -#-----| Goto -> Block 10 +# 99| r99_54(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_55(glval) = FunctionAddress[unhandled_exception] : +# 99| v99_56(void) = Call[unhandled_exception] : func:r99_55, this:r99_54 +# 99| mu99_57(unknown) = ^CallSideEffect : ~m? +# 99| v99_58(void) = ^IndirectReadSideEffect[-1] : &:r99_54, ~m? +# 99| mu99_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_54 +#-----| Goto -> Block 12 -# 99| Block 12 -# 99| v99_131(void) = Unreached : +#-----| Block 12 +#-----| v0_28(void) = NoOp : +# 99| r99_60(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_61(glval) = FunctionAddress[final_suspend] : +# 99| r99_62(suspend_always) = Call[final_suspend] : func:r99_61, this:r99_60 +# 99| mu99_63(unknown) = ^CallSideEffect : ~m? +# 99| v99_64(void) = ^IndirectReadSideEffect[-1] : &:r99_60, ~m? +# 99| mu99_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_60 +#-----| r0_29(glval) = VariableAddress[#temp0:0] : +# 99| r99_66(glval) = VariableAddress[#temp99:21] : +# 99| r99_67(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_68(glval) = FunctionAddress[final_suspend] : +# 99| r99_69(suspend_always) = Call[final_suspend] : func:r99_68, this:r99_67 +# 99| mu99_70(unknown) = ^CallSideEffect : ~m? +# 99| v99_71(void) = ^IndirectReadSideEffect[-1] : &:r99_67, ~m? +# 99| mu99_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_67 +# 99| mu99_73(suspend_always) = Store[#temp99:21] : &:r99_66, r99_69 +# 99| r99_74(suspend_always *) = CopyValue : r99_66 +# 99| m99_75(suspend_always *) = Store[#temp0:0] : &:r0_29, r99_74 +#-----| r0_30(suspend_always *) = Load[#temp0:0] : &:r0_29, m99_75 +# 99| r99_76(glval) = CopyValue : r0_30 +# 99| r99_77(glval) = Convert : r99_76 +# 99| r99_78(glval) = FunctionAddress[await_ready] : +# 99| r99_79(bool) = Call[await_ready] : func:r99_78, this:r99_77 +# 99| mu99_80(unknown) = ^CallSideEffect : ~m? +# 99| v99_81(void) = ^IndirectReadSideEffect[-1] : &:r99_77, ~m? +#-----| v0_31(void) = ConditionalBranch : r99_79 +#-----| False -> Block 14 +#-----| True -> Block 13 + +# 99| Block 13 +# 99| r99_82(suspend_always *) = CopyValue : r99_74 +# 99| r99_83(glval) = CopyValue : r99_82 +#-----| r0_32(glval) = Convert : r99_83 +# 99| r99_84(glval) = FunctionAddress[await_resume] : +# 99| v99_85(void) = Call[await_resume] : func:r99_84, this:r0_32 +# 99| mu99_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_33(void) = ^IndirectReadSideEffect[-1] : &:r0_32, ~m? +# 99| r99_87(glval) = VariableAddress[#return] : +# 99| v99_88(void) = ReturnValue : &:r99_87, ~m? +#-----| Goto -> Block 1 + +# 99| Block 14 +# 99| r99_89(suspend_always *) = CopyValue : r99_74 +# 99| r99_90(glval) = CopyValue : r99_89 +#-----| r0_34(glval) = Convert : r99_90 +# 99| r99_91(glval) = FunctionAddress[await_suspend] : +# 99| r99_92(glval>) = VariableAddress[#temp99:21] : +# 99| mu99_93(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_92 +# 99| r99_94(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_95(glval>) = VariableAddress[(unnamed local variable)] : +# 99| r99_96(glval>) = Convert : r99_95 +# 99| r99_97(coroutine_handle &) = CopyValue : r99_96 +# 99| v99_98(void) = Call[coroutine_handle] : func:r99_94, this:r99_92, 0:r99_97 +# 99| mu99_99(unknown) = ^CallSideEffect : ~m? +# 99| v99_100(void) = ^BufferReadSideEffect[0] : &:r99_97, ~m? +# 99| mu99_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_92 +# 99| r99_102(coroutine_handle) = Load[#temp99:21] : &:r99_92, ~m? +# 99| v99_103(void) = Call[await_suspend] : func:r99_91, this:r0_34, 0:r99_102 +# 99| mu99_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +#-----| Goto -> Block 13 # 103| co_returnable_void co_yield_and_return_void(int) # 103| Block 0 # 103| v103_1(void) = EnterFunction : -# 103| m103_2(unknown) = AliasedDefinition : -# 103| m103_3(unknown) = InitializeNonLocal : -# 103| m103_4(unknown) = Chi : total:m103_2, partial:m103_3 -# 103| r103_5(glval) = VariableAddress[i] : -# 103| m103_6(int) = InitializeParameter[i] : &:r103_5 +# 103| mu103_2(unknown) = AliasedDefinition : +# 103| mu103_3(unknown) = InitializeNonLocal : +# 103| r103_4(glval) = VariableAddress[i] : +# 103| m103_5(int) = InitializeParameter[i] : &:r103_4 #-----| r0_1(glval) = VariableAddress[i] : #-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m103_6 +#-----| r0_3(int) = Load[i] : &:r0_2, m103_5 #-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 103| r103_7(glval) = VariableAddress[(unnamed local variable)] : -# 103| m103_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_7 -# 103| m103_9(unknown) = Chi : total:m103_4, partial:m103_8 -# 103| r103_10(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_11(glval) = FunctionAddress[initial_suspend] : -# 103| r103_12(suspend_always) = Call[initial_suspend] : func:r103_11, this:r103_10 -# 103| m103_13(unknown) = ^CallSideEffect : ~m103_9 -# 103| m103_14(unknown) = Chi : total:m103_9, partial:m103_13 -# 103| v103_15(void) = ^IndirectReadSideEffect[-1] : &:r103_10, ~m103_14 -# 103| m103_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_10 -# 103| m103_17(unknown) = Chi : total:m103_14, partial:m103_16 +# 103| r103_6(glval) = VariableAddress[(unnamed local variable)] : +# 103| mu103_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_6 +# 103| r103_8(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_9(glval) = FunctionAddress[initial_suspend] : +# 103| r103_10(suspend_always) = Call[initial_suspend] : func:r103_9, this:r103_8 +# 103| mu103_11(unknown) = ^CallSideEffect : ~m? +# 103| v103_12(void) = ^IndirectReadSideEffect[-1] : &:r103_8, ~m? +# 103| mu103_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_8 #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 103| r103_18(glval) = VariableAddress[#temp103:20] : -# 103| r103_19(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_20(glval) = FunctionAddress[initial_suspend] : -# 103| r103_21(suspend_always) = Call[initial_suspend] : func:r103_20, this:r103_19 -# 103| m103_22(unknown) = ^CallSideEffect : ~m103_17 -# 103| m103_23(unknown) = Chi : total:m103_17, partial:m103_22 -# 103| v103_24(void) = ^IndirectReadSideEffect[-1] : &:r103_19, ~m103_23 -# 103| m103_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_19 -# 103| m103_26(unknown) = Chi : total:m103_23, partial:m103_25 -# 103| m103_27(suspend_always) = Store[#temp103:20] : &:r103_18, r103_21 -# 103| m103_28(unknown) = Chi : total:m103_26, partial:m103_27 -# 103| r103_29(suspend_always *) = CopyValue : r103_18 -# 103| m103_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r103_29 -#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m103_30 -# 103| r103_31(glval) = CopyValue : r0_6 -# 103| r103_32(glval) = Convert : r103_31 -# 103| r103_33(glval) = FunctionAddress[await_ready] : -# 103| r103_34(bool) = Call[await_ready] : func:r103_33, this:r103_32 -# 103| m103_35(unknown) = ^CallSideEffect : ~m103_28 -# 103| m103_36(unknown) = Chi : total:m103_28, partial:m103_35 -# 103| v103_37(void) = ^IndirectReadSideEffect[-1] : &:r103_32, ~m103_36 -#-----| v0_7(void) = ConditionalBranch : r103_34 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 103| r103_14(glval) = VariableAddress[#temp103:20] : +# 103| r103_15(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_16(glval) = FunctionAddress[initial_suspend] : +# 103| r103_17(suspend_always) = Call[initial_suspend] : func:r103_16, this:r103_15 +# 103| mu103_18(unknown) = ^CallSideEffect : ~m? +# 103| v103_19(void) = ^IndirectReadSideEffect[-1] : &:r103_15, ~m? +# 103| mu103_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_15 +# 103| mu103_21(suspend_always) = Store[#temp103:20] : &:r103_14, r103_17 +# 103| r103_22(suspend_always *) = CopyValue : r103_14 +# 103| m103_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r103_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m103_23 +# 103| r103_24(glval) = CopyValue : r0_6 +# 103| r103_25(glval) = Convert : r103_24 +# 103| r103_26(glval) = FunctionAddress[await_ready] : +# 103| r103_27(bool) = Call[await_ready] : func:r103_26, this:r103_25 +# 103| mu103_28(unknown) = ^CallSideEffect : ~m? +# 103| v103_29(void) = ^IndirectReadSideEffect[-1] : &:r103_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r103_27 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 103| Block 1 +# 103| v103_30(void) = AliasedUse : ~m? +# 103| v103_31(void) = ExitFunction : + +# 103| Block 2 +# 103| v103_32(void) = Unwind : +#-----| Goto -> Block 1 -#-----| Block 1 -#-----| m0_8(unknown) = Phi : from 0:~m103_36, from 2:~m103_63 -#-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : -#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 -# 103| r103_38(suspend_always *) = CopyValue : r103_29 -# 103| r103_39(glval) = CopyValue : r103_38 -#-----| r0_12(glval) = Convert : r103_39 -# 103| r103_40(glval) = FunctionAddress[await_resume] : -# 103| v103_41(void) = Call[await_resume] : func:r103_40, this:r0_12 -# 103| m103_42(unknown) = ^CallSideEffect : ~m0_8 -# 103| m103_43(unknown) = Chi : total:m0_8, partial:m103_42 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m103_43 -#-----| v0_14(void) = CopyValue : v103_41 +#-----| Block 3 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 +# 103| r103_33(suspend_always *) = CopyValue : r103_22 +# 103| r103_34(glval) = CopyValue : r103_33 +#-----| r0_11(glval) = Convert : r103_34 +# 103| r103_35(glval) = FunctionAddress[await_resume] : +# 103| v103_36(void) = Call[await_resume] : func:r103_35, this:r0_11 +# 103| mu103_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v103_36 # 104| r104_1(glval) = VariableAddress[(unnamed local variable)] : # 104| r104_2(glval) = FunctionAddress[yield_value] : # 104| r104_3(glval) = VariableAddress[i] : # 104| r104_4(int) = Load[i] : &:r104_3, m0_4 # 104| r104_5(suspend_always) = Call[yield_value] : func:r104_2, this:r104_1, 0:r104_4 -# 104| m104_6(unknown) = ^CallSideEffect : ~m103_43 -# 104| m104_7(unknown) = Chi : total:m103_43, partial:m104_6 -# 104| v104_8(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m104_7 -# 104| m104_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 -# 104| m104_10(unknown) = Chi : total:m104_7, partial:m104_9 -#-----| C++ Exception -> Block 8 +# 104| mu104_6(unknown) = ^CallSideEffect : ~m? +# 104| v104_7(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m? +# 104| mu104_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 5 + +# 103| Block 4 +# 103| r103_38(suspend_always *) = CopyValue : r103_22 +# 103| r103_39(glval) = CopyValue : r103_38 +#-----| r0_14(glval) = Convert : r103_39 +# 103| r103_40(glval) = FunctionAddress[await_suspend] : +# 103| r103_41(glval>) = VariableAddress[#temp103:20] : +# 103| mu103_42(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_41 +# 103| r103_43(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_44(glval>) = VariableAddress[(unnamed local variable)] : +# 103| r103_45(glval>) = Convert : r103_44 +# 103| r103_46(coroutine_handle &) = CopyValue : r103_45 +# 103| v103_47(void) = Call[coroutine_handle] : func:r103_43, this:r103_41, 0:r103_46 +# 103| mu103_48(unknown) = ^CallSideEffect : ~m? +# 103| v103_49(void) = ^BufferReadSideEffect[0] : &:r103_46, ~m? +# 103| mu103_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_41 +# 103| r103_51(coroutine_handle) = Load[#temp103:20] : &:r103_41, ~m? +# 103| v103_52(void) = Call[await_suspend] : func:r103_40, this:r0_14, 0:r103_51 +# 103| mu103_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? #-----| Goto -> Block 3 -# 103| Block 2 -# 103| r103_44(suspend_always *) = CopyValue : r103_29 -# 103| r103_45(glval) = CopyValue : r103_44 -#-----| r0_15(glval) = Convert : r103_45 -# 103| r103_46(glval) = FunctionAddress[await_suspend] : -# 103| r103_47(glval>) = VariableAddress[#temp103:20] : -# 103| m103_48(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_47 -# 103| m103_49(unknown) = Chi : total:m103_36, partial:m103_48 -# 103| r103_50(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_51(glval>) = VariableAddress[(unnamed local variable)] : -# 103| r103_52(glval>) = Convert : r103_51 -# 103| r103_53(coroutine_handle &) = CopyValue : r103_52 -# 103| v103_54(void) = Call[coroutine_handle] : func:r103_50, this:r103_47, 0:r103_53 -# 103| m103_55(unknown) = ^CallSideEffect : ~m103_49 -# 103| m103_56(unknown) = Chi : total:m103_49, partial:m103_55 -# 103| v103_57(void) = ^BufferReadSideEffect[0] : &:r103_53, ~m103_56 -# 103| m103_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_47 -# 103| m103_59(unknown) = Chi : total:m103_56, partial:m103_58 -# 103| r103_60(coroutine_handle) = Load[#temp103:20] : &:r103_47, ~m103_59 -# 103| v103_61(void) = Call[await_suspend] : func:r103_46, this:r0_15, 0:r103_60 -# 103| m103_62(unknown) = ^CallSideEffect : ~m103_59 -# 103| m103_63(unknown) = Chi : total:m103_59, partial:m103_62 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m103_63 -#-----| Goto -> Block 1 +#-----| Block 5 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 104| r104_9(glval) = VariableAddress[#temp104:13] : +# 104| r104_10(glval) = VariableAddress[(unnamed local variable)] : +# 104| r104_11(glval) = FunctionAddress[yield_value] : +# 104| r104_12(glval) = VariableAddress[i] : +# 104| r104_13(int) = Load[i] : &:r104_12, m0_4 +# 104| r104_14(suspend_always) = Call[yield_value] : func:r104_11, this:r104_10, 0:r104_13 +# 104| mu104_15(unknown) = ^CallSideEffect : ~m? +# 104| v104_16(void) = ^IndirectReadSideEffect[-1] : &:r104_10, ~m? +# 104| mu104_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_10 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 6 -#-----| Block 3 -#-----| r0_17(glval) = VariableAddress[#temp0:0] : -# 104| r104_11(glval) = VariableAddress[#temp104:13] : -# 104| r104_12(glval) = VariableAddress[(unnamed local variable)] : -# 104| r104_13(glval) = FunctionAddress[yield_value] : -# 104| r104_14(glval) = VariableAddress[i] : -# 104| r104_15(int) = Load[i] : &:r104_14, m0_4 -# 104| r104_16(suspend_always) = Call[yield_value] : func:r104_13, this:r104_12, 0:r104_15 -# 104| m104_17(unknown) = ^CallSideEffect : ~m104_10 -# 104| m104_18(unknown) = Chi : total:m104_10, partial:m104_17 -# 104| v104_19(void) = ^IndirectReadSideEffect[-1] : &:r104_12, ~m104_18 -# 104| m104_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_12 -# 104| m104_21(unknown) = Chi : total:m104_18, partial:m104_20 -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 4 +# 104| Block 6 +# 104| mu104_18(suspend_always) = Store[#temp104:13] : &:r104_9, r104_14 +# 104| r104_19(suspend_always *) = CopyValue : r104_9 +# 104| m104_20(suspend_always *) = Store[#temp0:0] : &:r0_16, r104_19 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m104_20 +# 104| r104_21(glval) = CopyValue : r0_17 +# 104| r104_22(glval) = Convert : r104_21 +# 104| r104_23(glval) = FunctionAddress[await_ready] : +# 104| r104_24(bool) = Call[await_ready] : func:r104_23, this:r104_22 +# 104| mu104_25(unknown) = ^CallSideEffect : ~m? +# 104| v104_26(void) = ^IndirectReadSideEffect[-1] : &:r104_22, ~m? +# 104| v104_27(void) = ConditionalBranch : r104_24 +#-----| False -> Block 8 +#-----| True -> Block 7 -# 104| Block 4 -# 104| m104_22(suspend_always) = Store[#temp104:13] : &:r104_11, r104_16 -# 104| m104_23(unknown) = Chi : total:m104_21, partial:m104_22 -# 104| r104_24(suspend_always *) = CopyValue : r104_11 -# 104| m104_25(suspend_always *) = Store[#temp0:0] : &:r0_17, r104_24 -#-----| r0_18(suspend_always *) = Load[#temp0:0] : &:r0_17, m104_25 -# 104| r104_26(glval) = CopyValue : r0_18 -# 104| r104_27(glval) = Convert : r104_26 -# 104| r104_28(glval) = FunctionAddress[await_ready] : -# 104| r104_29(bool) = Call[await_ready] : func:r104_28, this:r104_27 -# 104| m104_30(unknown) = ^CallSideEffect : ~m104_23 -# 104| m104_31(unknown) = Chi : total:m104_23, partial:m104_30 -# 104| v104_32(void) = ^IndirectReadSideEffect[-1] : &:r104_27, ~m104_31 -# 104| v104_33(void) = ConditionalBranch : r104_29 -#-----| False -> Block 6 -#-----| True -> Block 5 +# 104| Block 7 +# 104| r104_28(suspend_always *) = CopyValue : r104_19 +# 104| r104_29(glval) = CopyValue : r104_28 +#-----| r0_18(glval) = Convert : r104_29 +# 104| r104_30(glval) = FunctionAddress[await_resume] : +# 104| v104_31(void) = Call[await_resume] : func:r104_30, this:r0_18 +# 104| mu104_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(glval) = FunctionAddress[return_void] : +#-----| v0_22(void) = Call[return_void] : func:r0_21, this:r0_20 +#-----| mu0_23(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| mu0_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 9 -# 104| Block 5 -# 104| m104_34(unknown) = Phi : from 4:~m104_31, from 6:~m104_60 -# 104| r104_35(suspend_always *) = CopyValue : r104_24 -# 104| r104_36(glval) = CopyValue : r104_35 -#-----| r0_19(glval) = Convert : r104_36 -# 104| r104_37(glval) = FunctionAddress[await_resume] : -# 104| v104_38(void) = Call[await_resume] : func:r104_37, this:r0_19 -# 104| m104_39(unknown) = ^CallSideEffect : ~m104_34 -# 104| m104_40(unknown) = Chi : total:m104_34, partial:m104_39 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m104_40 -#-----| r0_21(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_22(glval) = FunctionAddress[return_void] : -#-----| v0_23(void) = Call[return_void] : func:r0_22, this:r0_21 -#-----| m0_24(unknown) = ^CallSideEffect : ~m104_40 -#-----| m0_25(unknown) = Chi : total:m104_40, partial:m0_24 -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m0_25 -#-----| m0_27(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 -#-----| m0_28(unknown) = Chi : total:m0_25, partial:m0_27 -#-----| C++ Exception -> Block 8 +# 104| Block 8 +# 104| r104_33(suspend_always *) = CopyValue : r104_19 +# 104| r104_34(glval) = CopyValue : r104_33 +#-----| r0_26(glval) = Convert : r104_34 +# 104| r104_35(glval) = FunctionAddress[await_suspend] : +# 104| r104_36(glval>) = VariableAddress[#temp104:3] : +# 104| mu104_37(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_36 +# 104| r104_38(glval) = FunctionAddress[coroutine_handle] : +# 104| r104_39(glval>) = VariableAddress[(unnamed local variable)] : +# 104| r104_40(glval>) = Convert : r104_39 +# 104| r104_41(coroutine_handle &) = CopyValue : r104_40 +# 104| v104_42(void) = Call[coroutine_handle] : func:r104_38, this:r104_36, 0:r104_41 +# 104| mu104_43(unknown) = ^CallSideEffect : ~m? +# 104| v104_44(void) = ^BufferReadSideEffect[0] : &:r104_41, ~m? +# 104| mu104_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_36 +# 104| r104_46(coroutine_handle) = Load[#temp104:3] : &:r104_36, ~m? +# 104| v104_47(void) = Call[await_suspend] : func:r104_35, this:r0_26, 0:r104_46 +# 104| mu104_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_26, ~m? #-----| Goto -> Block 7 -# 104| Block 6 -# 104| r104_41(suspend_always *) = CopyValue : r104_24 -# 104| r104_42(glval) = CopyValue : r104_41 -#-----| r0_29(glval) = Convert : r104_42 -# 104| r104_43(glval) = FunctionAddress[await_suspend] : -# 104| r104_44(glval>) = VariableAddress[#temp104:3] : -# 104| m104_45(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_44 -# 104| m104_46(unknown) = Chi : total:m104_31, partial:m104_45 -# 104| r104_47(glval) = FunctionAddress[coroutine_handle] : -# 104| r104_48(glval>) = VariableAddress[(unnamed local variable)] : -# 104| r104_49(glval>) = Convert : r104_48 -# 104| r104_50(coroutine_handle &) = CopyValue : r104_49 -# 104| v104_51(void) = Call[coroutine_handle] : func:r104_47, this:r104_44, 0:r104_50 -# 104| m104_52(unknown) = ^CallSideEffect : ~m104_46 -# 104| m104_53(unknown) = Chi : total:m104_46, partial:m104_52 -# 104| v104_54(void) = ^BufferReadSideEffect[0] : &:r104_50, ~m104_53 -# 104| m104_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_44 -# 104| m104_56(unknown) = Chi : total:m104_53, partial:m104_55 -# 104| r104_57(coroutine_handle) = Load[#temp104:3] : &:r104_44, ~m104_56 -# 104| v104_58(void) = Call[await_suspend] : func:r104_43, this:r0_29, 0:r104_57 -# 104| m104_59(unknown) = ^CallSideEffect : ~m104_56 -# 104| m104_60(unknown) = Chi : total:m104_56, partial:m104_59 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m104_60 -#-----| Goto -> Block 5 - -# 105| Block 7 +# 105| Block 9 # 105| v105_1(void) = NoOp : -#-----| v0_31(void) = NoOp : -#-----| Goto (back edge) -> Block 10 - -#-----| Block 8 -#-----| m0_32(unknown) = Phi : from 1:~m104_10, from 3:~m104_21, from 5:~m0_28 -#-----| v0_33(void) = CatchAny : -#-----| r0_34(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_35(bool) = Load[(unnamed local variable)] : &:r0_34, m0_11 -#-----| r0_36(bool) = LogicalNot : r0_35 -#-----| v0_37(void) = ConditionalBranch : r0_36 -#-----| False -> Block 9 -#-----| True -> Block 13 - -# 103| Block 9 -# 103| r103_64(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_65(glval) = FunctionAddress[unhandled_exception] : -# 103| v103_66(void) = Call[unhandled_exception] : func:r103_65, this:r103_64 -# 103| m103_67(unknown) = ^CallSideEffect : ~m0_32 -# 103| m103_68(unknown) = Chi : total:m0_32, partial:m103_67 -# 103| v103_69(void) = ^IndirectReadSideEffect[-1] : &:r103_64, ~m103_68 -# 103| m103_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_64 -# 103| m103_71(unknown) = Chi : total:m103_68, partial:m103_70 -#-----| Goto -> Block 10 +#-----| v0_28(void) = NoOp : +#-----| Goto (back edge) -> Block 13 #-----| Block 10 -#-----| m0_38(unknown) = Phi : from 7:~m0_28, from 9:~m103_71 -#-----| v0_39(void) = NoOp : -# 103| r103_72(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_73(glval) = FunctionAddress[final_suspend] : -# 103| r103_74(suspend_always) = Call[final_suspend] : func:r103_73, this:r103_72 -# 103| m103_75(unknown) = ^CallSideEffect : ~m0_38 -# 103| m103_76(unknown) = Chi : total:m0_38, partial:m103_75 -# 103| v103_77(void) = ^IndirectReadSideEffect[-1] : &:r103_72, ~m103_76 -# 103| m103_78(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_72 -# 103| m103_79(unknown) = Chi : total:m103_76, partial:m103_78 -#-----| r0_40(glval) = VariableAddress[#temp0:0] : -# 103| r103_80(glval) = VariableAddress[#temp103:20] : -# 103| r103_81(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_82(glval) = FunctionAddress[final_suspend] : -# 103| r103_83(suspend_always) = Call[final_suspend] : func:r103_82, this:r103_81 -# 103| m103_84(unknown) = ^CallSideEffect : ~m103_79 -# 103| m103_85(unknown) = Chi : total:m103_79, partial:m103_84 -# 103| v103_86(void) = ^IndirectReadSideEffect[-1] : &:r103_81, ~m103_85 -# 103| m103_87(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_81 -# 103| m103_88(unknown) = Chi : total:m103_85, partial:m103_87 -# 103| m103_89(suspend_always) = Store[#temp103:20] : &:r103_80, r103_83 -# 103| m103_90(unknown) = Chi : total:m103_88, partial:m103_89 -# 103| r103_91(suspend_always *) = CopyValue : r103_80 -# 103| m103_92(suspend_always *) = Store[#temp0:0] : &:r0_40, r103_91 -#-----| r0_41(suspend_always *) = Load[#temp0:0] : &:r0_40, m103_92 -# 103| r103_93(glval) = CopyValue : r0_41 -# 103| r103_94(glval) = Convert : r103_93 -# 103| r103_95(glval) = FunctionAddress[await_ready] : -# 103| r103_96(bool) = Call[await_ready] : func:r103_95, this:r103_94 -# 103| m103_97(unknown) = ^CallSideEffect : ~m103_90 -# 103| m103_98(unknown) = Chi : total:m103_90, partial:m103_97 -# 103| v103_99(void) = ^IndirectReadSideEffect[-1] : &:r103_94, ~m103_98 -#-----| v0_42(void) = ConditionalBranch : r103_96 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_31(bool) = Load[(unnamed local variable)] : &:r0_30, m0_10 +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 #-----| False -> Block 12 #-----| True -> Block 11 -# 103| Block 11 -# 103| m103_100(unknown) = Phi : from 10:~m103_98, from 12:~m103_130 -# 103| r103_101(suspend_always *) = CopyValue : r103_91 -# 103| r103_102(glval) = CopyValue : r103_101 -#-----| r0_43(glval) = Convert : r103_102 -# 103| r103_103(glval) = FunctionAddress[await_resume] : -# 103| v103_104(void) = Call[await_resume] : func:r103_103, this:r0_43 -# 103| m103_105(unknown) = ^CallSideEffect : ~m103_100 -# 103| m103_106(unknown) = Chi : total:m103_100, partial:m103_105 -#-----| v0_44(void) = ^IndirectReadSideEffect[-1] : &:r0_43, ~m103_106 -# 103| r103_107(glval) = VariableAddress[#return] : -# 103| v103_108(void) = ReturnValue : &:r103_107, ~m103_106 -# 103| v103_109(void) = AliasedUse : ~m103_106 -# 103| v103_110(void) = ExitFunction : +#-----| Block 11 +#-----| v0_34(void) = ReThrow : +#-----| C++ Exception -> Block 2 # 103| Block 12 -# 103| r103_111(suspend_always *) = CopyValue : r103_91 -# 103| r103_112(glval) = CopyValue : r103_111 -#-----| r0_45(glval) = Convert : r103_112 -# 103| r103_113(glval) = FunctionAddress[await_suspend] : -# 103| r103_114(glval>) = VariableAddress[#temp103:20] : -# 103| m103_115(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_114 -# 103| m103_116(unknown) = Chi : total:m103_98, partial:m103_115 -# 103| r103_117(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_118(glval>) = VariableAddress[(unnamed local variable)] : -# 103| r103_119(glval>) = Convert : r103_118 -# 103| r103_120(coroutine_handle &) = CopyValue : r103_119 -# 103| v103_121(void) = Call[coroutine_handle] : func:r103_117, this:r103_114, 0:r103_120 -# 103| m103_122(unknown) = ^CallSideEffect : ~m103_116 -# 103| m103_123(unknown) = Chi : total:m103_116, partial:m103_122 -# 103| v103_124(void) = ^BufferReadSideEffect[0] : &:r103_120, ~m103_123 -# 103| m103_125(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_114 -# 103| m103_126(unknown) = Chi : total:m103_123, partial:m103_125 -# 103| r103_127(coroutine_handle) = Load[#temp103:20] : &:r103_114, ~m103_126 -# 103| v103_128(void) = Call[await_suspend] : func:r103_113, this:r0_45, 0:r103_127 -# 103| m103_129(unknown) = ^CallSideEffect : ~m103_126 -# 103| m103_130(unknown) = Chi : total:m103_126, partial:m103_129 -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_45, ~m103_130 -#-----| Goto -> Block 11 +# 103| r103_54(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_55(glval) = FunctionAddress[unhandled_exception] : +# 103| v103_56(void) = Call[unhandled_exception] : func:r103_55, this:r103_54 +# 103| mu103_57(unknown) = ^CallSideEffect : ~m? +# 103| v103_58(void) = ^IndirectReadSideEffect[-1] : &:r103_54, ~m? +# 103| mu103_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_54 +#-----| Goto -> Block 13 + +#-----| Block 13 +#-----| v0_35(void) = NoOp : +# 103| r103_60(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_61(glval) = FunctionAddress[final_suspend] : +# 103| r103_62(suspend_always) = Call[final_suspend] : func:r103_61, this:r103_60 +# 103| mu103_63(unknown) = ^CallSideEffect : ~m? +# 103| v103_64(void) = ^IndirectReadSideEffect[-1] : &:r103_60, ~m? +# 103| mu103_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_60 +#-----| r0_36(glval) = VariableAddress[#temp0:0] : +# 103| r103_66(glval) = VariableAddress[#temp103:20] : +# 103| r103_67(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_68(glval) = FunctionAddress[final_suspend] : +# 103| r103_69(suspend_always) = Call[final_suspend] : func:r103_68, this:r103_67 +# 103| mu103_70(unknown) = ^CallSideEffect : ~m? +# 103| v103_71(void) = ^IndirectReadSideEffect[-1] : &:r103_67, ~m? +# 103| mu103_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_67 +# 103| mu103_73(suspend_always) = Store[#temp103:20] : &:r103_66, r103_69 +# 103| r103_74(suspend_always *) = CopyValue : r103_66 +# 103| m103_75(suspend_always *) = Store[#temp0:0] : &:r0_36, r103_74 +#-----| r0_37(suspend_always *) = Load[#temp0:0] : &:r0_36, m103_75 +# 103| r103_76(glval) = CopyValue : r0_37 +# 103| r103_77(glval) = Convert : r103_76 +# 103| r103_78(glval) = FunctionAddress[await_ready] : +# 103| r103_79(bool) = Call[await_ready] : func:r103_78, this:r103_77 +# 103| mu103_80(unknown) = ^CallSideEffect : ~m? +# 103| v103_81(void) = ^IndirectReadSideEffect[-1] : &:r103_77, ~m? +#-----| v0_38(void) = ConditionalBranch : r103_79 +#-----| False -> Block 15 +#-----| True -> Block 14 + +# 103| Block 14 +# 103| r103_82(suspend_always *) = CopyValue : r103_74 +# 103| r103_83(glval) = CopyValue : r103_82 +#-----| r0_39(glval) = Convert : r103_83 +# 103| r103_84(glval) = FunctionAddress[await_resume] : +# 103| v103_85(void) = Call[await_resume] : func:r103_84, this:r0_39 +# 103| mu103_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 103| r103_87(glval) = VariableAddress[#return] : +# 103| v103_88(void) = ReturnValue : &:r103_87, ~m? +#-----| Goto -> Block 1 -# 103| Block 13 -# 103| v103_131(void) = Unreached : +# 103| Block 15 +# 103| r103_89(suspend_always *) = CopyValue : r103_74 +# 103| r103_90(glval) = CopyValue : r103_89 +#-----| r0_41(glval) = Convert : r103_90 +# 103| r103_91(glval) = FunctionAddress[await_suspend] : +# 103| r103_92(glval>) = VariableAddress[#temp103:20] : +# 103| mu103_93(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_92 +# 103| r103_94(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_95(glval>) = VariableAddress[(unnamed local variable)] : +# 103| r103_96(glval>) = Convert : r103_95 +# 103| r103_97(coroutine_handle &) = CopyValue : r103_96 +# 103| v103_98(void) = Call[coroutine_handle] : func:r103_94, this:r103_92, 0:r103_97 +# 103| mu103_99(unknown) = ^CallSideEffect : ~m? +# 103| v103_100(void) = ^BufferReadSideEffect[0] : &:r103_97, ~m? +# 103| mu103_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_92 +# 103| r103_102(coroutine_handle) = Load[#temp103:20] : &:r103_92, ~m? +# 103| v103_103(void) = Call[await_suspend] : func:r103_91, this:r0_41, 0:r103_102 +# 103| mu103_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +#-----| Goto -> Block 14 # 108| co_returnable_value co_yield_and_return_value(int) # 108| Block 0 # 108| v108_1(void) = EnterFunction : -# 108| m108_2(unknown) = AliasedDefinition : -# 108| m108_3(unknown) = InitializeNonLocal : -# 108| m108_4(unknown) = Chi : total:m108_2, partial:m108_3 -# 108| r108_5(glval) = VariableAddress[i] : -# 108| m108_6(int) = InitializeParameter[i] : &:r108_5 +# 108| mu108_2(unknown) = AliasedDefinition : +# 108| mu108_3(unknown) = InitializeNonLocal : +# 108| r108_4(glval) = VariableAddress[i] : +# 108| m108_5(int) = InitializeParameter[i] : &:r108_4 #-----| r0_1(glval) = VariableAddress[i] : #-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m108_6 +#-----| r0_3(int) = Load[i] : &:r0_2, m108_5 #-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 108| r108_7(glval) = VariableAddress[(unnamed local variable)] : -# 108| m108_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_7 -# 108| m108_9(unknown) = Chi : total:m108_4, partial:m108_8 -# 108| r108_10(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_11(glval) = FunctionAddress[initial_suspend] : -# 108| r108_12(suspend_always) = Call[initial_suspend] : func:r108_11, this:r108_10 -# 108| m108_13(unknown) = ^CallSideEffect : ~m108_9 -# 108| m108_14(unknown) = Chi : total:m108_9, partial:m108_13 -# 108| v108_15(void) = ^IndirectReadSideEffect[-1] : &:r108_10, ~m108_14 -# 108| m108_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_10 -# 108| m108_17(unknown) = Chi : total:m108_14, partial:m108_16 +# 108| r108_6(glval) = VariableAddress[(unnamed local variable)] : +# 108| mu108_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_6 +# 108| r108_8(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_9(glval) = FunctionAddress[initial_suspend] : +# 108| r108_10(suspend_always) = Call[initial_suspend] : func:r108_9, this:r108_8 +# 108| mu108_11(unknown) = ^CallSideEffect : ~m? +# 108| v108_12(void) = ^IndirectReadSideEffect[-1] : &:r108_8, ~m? +# 108| mu108_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_8 #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 108| r108_18(glval) = VariableAddress[#temp108:21] : -# 108| r108_19(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_20(glval) = FunctionAddress[initial_suspend] : -# 108| r108_21(suspend_always) = Call[initial_suspend] : func:r108_20, this:r108_19 -# 108| m108_22(unknown) = ^CallSideEffect : ~m108_17 -# 108| m108_23(unknown) = Chi : total:m108_17, partial:m108_22 -# 108| v108_24(void) = ^IndirectReadSideEffect[-1] : &:r108_19, ~m108_23 -# 108| m108_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_19 -# 108| m108_26(unknown) = Chi : total:m108_23, partial:m108_25 -# 108| m108_27(suspend_always) = Store[#temp108:21] : &:r108_18, r108_21 -# 108| m108_28(unknown) = Chi : total:m108_26, partial:m108_27 -# 108| r108_29(suspend_always *) = CopyValue : r108_18 -# 108| m108_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r108_29 -#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m108_30 -# 108| r108_31(glval) = CopyValue : r0_6 -# 108| r108_32(glval) = Convert : r108_31 -# 108| r108_33(glval) = FunctionAddress[await_ready] : -# 108| r108_34(bool) = Call[await_ready] : func:r108_33, this:r108_32 -# 108| m108_35(unknown) = ^CallSideEffect : ~m108_28 -# 108| m108_36(unknown) = Chi : total:m108_28, partial:m108_35 -# 108| v108_37(void) = ^IndirectReadSideEffect[-1] : &:r108_32, ~m108_36 -#-----| v0_7(void) = ConditionalBranch : r108_34 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 108| r108_14(glval) = VariableAddress[#temp108:21] : +# 108| r108_15(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_16(glval) = FunctionAddress[initial_suspend] : +# 108| r108_17(suspend_always) = Call[initial_suspend] : func:r108_16, this:r108_15 +# 108| mu108_18(unknown) = ^CallSideEffect : ~m? +# 108| v108_19(void) = ^IndirectReadSideEffect[-1] : &:r108_15, ~m? +# 108| mu108_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_15 +# 108| mu108_21(suspend_always) = Store[#temp108:21] : &:r108_14, r108_17 +# 108| r108_22(suspend_always *) = CopyValue : r108_14 +# 108| m108_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r108_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m108_23 +# 108| r108_24(glval) = CopyValue : r0_6 +# 108| r108_25(glval) = Convert : r108_24 +# 108| r108_26(glval) = FunctionAddress[await_ready] : +# 108| r108_27(bool) = Call[await_ready] : func:r108_26, this:r108_25 +# 108| mu108_28(unknown) = ^CallSideEffect : ~m? +# 108| v108_29(void) = ^IndirectReadSideEffect[-1] : &:r108_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r108_27 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 108| Block 1 +# 108| v108_30(void) = AliasedUse : ~m? +# 108| v108_31(void) = ExitFunction : + +# 108| Block 2 +# 108| v108_32(void) = Unwind : +#-----| Goto -> Block 1 -#-----| Block 1 -#-----| m0_8(unknown) = Phi : from 0:~m108_36, from 2:~m108_63 -#-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : -#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 -# 108| r108_38(suspend_always *) = CopyValue : r108_29 -# 108| r108_39(glval) = CopyValue : r108_38 -#-----| r0_12(glval) = Convert : r108_39 -# 108| r108_40(glval) = FunctionAddress[await_resume] : -# 108| v108_41(void) = Call[await_resume] : func:r108_40, this:r0_12 -# 108| m108_42(unknown) = ^CallSideEffect : ~m0_8 -# 108| m108_43(unknown) = Chi : total:m0_8, partial:m108_42 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m108_43 -#-----| v0_14(void) = CopyValue : v108_41 +#-----| Block 3 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 +# 108| r108_33(suspend_always *) = CopyValue : r108_22 +# 108| r108_34(glval) = CopyValue : r108_33 +#-----| r0_11(glval) = Convert : r108_34 +# 108| r108_35(glval) = FunctionAddress[await_resume] : +# 108| v108_36(void) = Call[await_resume] : func:r108_35, this:r0_11 +# 108| mu108_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v108_36 # 109| r109_1(glval) = VariableAddress[(unnamed local variable)] : # 109| r109_2(glval) = FunctionAddress[yield_value] : # 109| r109_3(glval) = VariableAddress[i] : # 109| r109_4(int) = Load[i] : &:r109_3, m0_4 # 109| r109_5(suspend_always) = Call[yield_value] : func:r109_2, this:r109_1, 0:r109_4 -# 109| m109_6(unknown) = ^CallSideEffect : ~m108_43 -# 109| m109_7(unknown) = Chi : total:m108_43, partial:m109_6 -# 109| v109_8(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m109_7 -# 109| m109_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 -# 109| m109_10(unknown) = Chi : total:m109_7, partial:m109_9 -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 3 +# 109| mu109_6(unknown) = ^CallSideEffect : ~m? +# 109| v109_7(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m? +# 109| mu109_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 5 -# 108| Block 2 -# 108| r108_44(suspend_always *) = CopyValue : r108_29 -# 108| r108_45(glval) = CopyValue : r108_44 -#-----| r0_15(glval) = Convert : r108_45 -# 108| r108_46(glval) = FunctionAddress[await_suspend] : -# 108| r108_47(glval>) = VariableAddress[#temp108:21] : -# 108| m108_48(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_47 -# 108| m108_49(unknown) = Chi : total:m108_36, partial:m108_48 -# 108| r108_50(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_51(glval>) = VariableAddress[(unnamed local variable)] : -# 108| r108_52(glval>) = Convert : r108_51 -# 108| r108_53(coroutine_handle &) = CopyValue : r108_52 -# 108| v108_54(void) = Call[coroutine_handle] : func:r108_50, this:r108_47, 0:r108_53 -# 108| m108_55(unknown) = ^CallSideEffect : ~m108_49 -# 108| m108_56(unknown) = Chi : total:m108_49, partial:m108_55 -# 108| v108_57(void) = ^BufferReadSideEffect[0] : &:r108_53, ~m108_56 -# 108| m108_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_47 -# 108| m108_59(unknown) = Chi : total:m108_56, partial:m108_58 -# 108| r108_60(coroutine_handle) = Load[#temp108:21] : &:r108_47, ~m108_59 -# 108| v108_61(void) = Call[await_suspend] : func:r108_46, this:r0_15, 0:r108_60 -# 108| m108_62(unknown) = ^CallSideEffect : ~m108_59 -# 108| m108_63(unknown) = Chi : total:m108_59, partial:m108_62 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m108_63 -#-----| Goto -> Block 1 +# 108| Block 4 +# 108| r108_38(suspend_always *) = CopyValue : r108_22 +# 108| r108_39(glval) = CopyValue : r108_38 +#-----| r0_14(glval) = Convert : r108_39 +# 108| r108_40(glval) = FunctionAddress[await_suspend] : +# 108| r108_41(glval>) = VariableAddress[#temp108:21] : +# 108| mu108_42(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_41 +# 108| r108_43(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_44(glval>) = VariableAddress[(unnamed local variable)] : +# 108| r108_45(glval>) = Convert : r108_44 +# 108| r108_46(coroutine_handle &) = CopyValue : r108_45 +# 108| v108_47(void) = Call[coroutine_handle] : func:r108_43, this:r108_41, 0:r108_46 +# 108| mu108_48(unknown) = ^CallSideEffect : ~m? +# 108| v108_49(void) = ^BufferReadSideEffect[0] : &:r108_46, ~m? +# 108| mu108_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_41 +# 108| r108_51(coroutine_handle) = Load[#temp108:21] : &:r108_41, ~m? +# 108| v108_52(void) = Call[await_suspend] : func:r108_40, this:r0_14, 0:r108_51 +# 108| mu108_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? +#-----| Goto -> Block 3 -#-----| Block 3 -#-----| r0_17(glval) = VariableAddress[#temp0:0] : -# 109| r109_11(glval) = VariableAddress[#temp109:13] : -# 109| r109_12(glval) = VariableAddress[(unnamed local variable)] : -# 109| r109_13(glval) = FunctionAddress[yield_value] : -# 109| r109_14(glval) = VariableAddress[i] : -# 109| r109_15(int) = Load[i] : &:r109_14, m0_4 -# 109| r109_16(suspend_always) = Call[yield_value] : func:r109_13, this:r109_12, 0:r109_15 -# 109| m109_17(unknown) = ^CallSideEffect : ~m109_10 -# 109| m109_18(unknown) = Chi : total:m109_10, partial:m109_17 -# 109| v109_19(void) = ^IndirectReadSideEffect[-1] : &:r109_12, ~m109_18 -# 109| m109_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_12 -# 109| m109_21(unknown) = Chi : total:m109_18, partial:m109_20 -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 4 +#-----| Block 5 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 109| r109_9(glval) = VariableAddress[#temp109:13] : +# 109| r109_10(glval) = VariableAddress[(unnamed local variable)] : +# 109| r109_11(glval) = FunctionAddress[yield_value] : +# 109| r109_12(glval) = VariableAddress[i] : +# 109| r109_13(int) = Load[i] : &:r109_12, m0_4 +# 109| r109_14(suspend_always) = Call[yield_value] : func:r109_11, this:r109_10, 0:r109_13 +# 109| mu109_15(unknown) = ^CallSideEffect : ~m? +# 109| v109_16(void) = ^IndirectReadSideEffect[-1] : &:r109_10, ~m? +# 109| mu109_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_10 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 6 -# 109| Block 4 -# 109| m109_22(suspend_always) = Store[#temp109:13] : &:r109_11, r109_16 -# 109| m109_23(unknown) = Chi : total:m109_21, partial:m109_22 -# 109| r109_24(suspend_always *) = CopyValue : r109_11 -# 109| m109_25(suspend_always *) = Store[#temp0:0] : &:r0_17, r109_24 -#-----| r0_18(suspend_always *) = Load[#temp0:0] : &:r0_17, m109_25 -# 109| r109_26(glval) = CopyValue : r0_18 -# 109| r109_27(glval) = Convert : r109_26 -# 109| r109_28(glval) = FunctionAddress[await_ready] : -# 109| r109_29(bool) = Call[await_ready] : func:r109_28, this:r109_27 -# 109| m109_30(unknown) = ^CallSideEffect : ~m109_23 -# 109| m109_31(unknown) = Chi : total:m109_23, partial:m109_30 -# 109| v109_32(void) = ^IndirectReadSideEffect[-1] : &:r109_27, ~m109_31 -# 109| v109_33(void) = ConditionalBranch : r109_29 -#-----| False -> Block 6 -#-----| True -> Block 5 +# 109| Block 6 +# 109| mu109_18(suspend_always) = Store[#temp109:13] : &:r109_9, r109_14 +# 109| r109_19(suspend_always *) = CopyValue : r109_9 +# 109| m109_20(suspend_always *) = Store[#temp0:0] : &:r0_16, r109_19 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m109_20 +# 109| r109_21(glval) = CopyValue : r0_17 +# 109| r109_22(glval) = Convert : r109_21 +# 109| r109_23(glval) = FunctionAddress[await_ready] : +# 109| r109_24(bool) = Call[await_ready] : func:r109_23, this:r109_22 +# 109| mu109_25(unknown) = ^CallSideEffect : ~m? +# 109| v109_26(void) = ^IndirectReadSideEffect[-1] : &:r109_22, ~m? +# 109| v109_27(void) = ConditionalBranch : r109_24 +#-----| False -> Block 8 +#-----| True -> Block 7 -# 109| Block 5 -# 109| m109_34(unknown) = Phi : from 4:~m109_31, from 6:~m109_60 -# 109| r109_35(suspend_always *) = CopyValue : r109_24 -# 109| r109_36(glval) = CopyValue : r109_35 -#-----| r0_19(glval) = Convert : r109_36 -# 109| r109_37(glval) = FunctionAddress[await_resume] : -# 109| v109_38(void) = Call[await_resume] : func:r109_37, this:r0_19 -# 109| m109_39(unknown) = ^CallSideEffect : ~m109_34 -# 109| m109_40(unknown) = Chi : total:m109_34, partial:m109_39 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m109_40 -#-----| r0_21(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_22(glval) = FunctionAddress[return_value] : +# 109| Block 7 +# 109| r109_28(suspend_always *) = CopyValue : r109_19 +# 109| r109_29(glval) = CopyValue : r109_28 +#-----| r0_18(glval) = Convert : r109_29 +# 109| r109_30(glval) = FunctionAddress[await_resume] : +# 109| v109_31(void) = Call[await_resume] : func:r109_30, this:r0_18 +# 109| mu109_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(glval) = FunctionAddress[return_value] : # 110| r110_1(glval) = VariableAddress[i] : # 110| r110_2(int) = Load[i] : &:r110_1, m0_4 # 110| r110_3(int) = Constant[1] : # 110| r110_4(int) = Add : r110_2, r110_3 -#-----| v0_23(void) = Call[return_value] : func:r0_22, this:r0_21, 0:r110_4 -#-----| m0_24(unknown) = ^CallSideEffect : ~m109_40 -#-----| m0_25(unknown) = Chi : total:m109_40, partial:m0_24 -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m0_25 -#-----| m0_27(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 -#-----| m0_28(unknown) = Chi : total:m0_25, partial:m0_27 -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 7 +#-----| v0_22(void) = Call[return_value] : func:r0_21, this:r0_20, 0:r110_4 +#-----| mu0_23(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| mu0_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 9 -# 109| Block 6 -# 109| r109_41(suspend_always *) = CopyValue : r109_24 -# 109| r109_42(glval) = CopyValue : r109_41 -#-----| r0_29(glval) = Convert : r109_42 -# 109| r109_43(glval) = FunctionAddress[await_suspend] : -# 109| r109_44(glval>) = VariableAddress[#temp109:3] : -# 109| m109_45(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_44 -# 109| m109_46(unknown) = Chi : total:m109_31, partial:m109_45 -# 109| r109_47(glval) = FunctionAddress[coroutine_handle] : -# 109| r109_48(glval>) = VariableAddress[(unnamed local variable)] : -# 109| r109_49(glval>) = Convert : r109_48 -# 109| r109_50(coroutine_handle &) = CopyValue : r109_49 -# 109| v109_51(void) = Call[coroutine_handle] : func:r109_47, this:r109_44, 0:r109_50 -# 109| m109_52(unknown) = ^CallSideEffect : ~m109_46 -# 109| m109_53(unknown) = Chi : total:m109_46, partial:m109_52 -# 109| v109_54(void) = ^BufferReadSideEffect[0] : &:r109_50, ~m109_53 -# 109| m109_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_44 -# 109| m109_56(unknown) = Chi : total:m109_53, partial:m109_55 -# 109| r109_57(coroutine_handle) = Load[#temp109:3] : &:r109_44, ~m109_56 -# 109| v109_58(void) = Call[await_suspend] : func:r109_43, this:r0_29, 0:r109_57 -# 109| m109_59(unknown) = ^CallSideEffect : ~m109_56 -# 109| m109_60(unknown) = Chi : total:m109_56, partial:m109_59 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m109_60 -#-----| Goto -> Block 5 +# 109| Block 8 +# 109| r109_33(suspend_always *) = CopyValue : r109_19 +# 109| r109_34(glval) = CopyValue : r109_33 +#-----| r0_26(glval) = Convert : r109_34 +# 109| r109_35(glval) = FunctionAddress[await_suspend] : +# 109| r109_36(glval>) = VariableAddress[#temp109:3] : +# 109| mu109_37(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_36 +# 109| r109_38(glval) = FunctionAddress[coroutine_handle] : +# 109| r109_39(glval>) = VariableAddress[(unnamed local variable)] : +# 109| r109_40(glval>) = Convert : r109_39 +# 109| r109_41(coroutine_handle &) = CopyValue : r109_40 +# 109| v109_42(void) = Call[coroutine_handle] : func:r109_38, this:r109_36, 0:r109_41 +# 109| mu109_43(unknown) = ^CallSideEffect : ~m? +# 109| v109_44(void) = ^BufferReadSideEffect[0] : &:r109_41, ~m? +# 109| mu109_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_36 +# 109| r109_46(coroutine_handle) = Load[#temp109:3] : &:r109_36, ~m? +# 109| v109_47(void) = Call[await_suspend] : func:r109_35, this:r0_26, 0:r109_46 +# 109| mu109_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_26, ~m? +#-----| Goto -> Block 7 -# 110| Block 7 +# 110| Block 9 # 110| v110_5(void) = NoOp : -#-----| v0_31(void) = NoOp : -#-----| Goto (back edge) -> Block 10 - -#-----| Block 8 -#-----| m0_32(unknown) = Phi : from 1:~m109_10, from 3:~m109_21, from 5:~m0_28 -#-----| v0_33(void) = CatchAny : -#-----| r0_34(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_35(bool) = Load[(unnamed local variable)] : &:r0_34, m0_11 -#-----| r0_36(bool) = LogicalNot : r0_35 -#-----| v0_37(void) = ConditionalBranch : r0_36 -#-----| False -> Block 9 -#-----| True -> Block 13 - -# 108| Block 9 -# 108| r108_64(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_65(glval) = FunctionAddress[unhandled_exception] : -# 108| v108_66(void) = Call[unhandled_exception] : func:r108_65, this:r108_64 -# 108| m108_67(unknown) = ^CallSideEffect : ~m0_32 -# 108| m108_68(unknown) = Chi : total:m0_32, partial:m108_67 -# 108| v108_69(void) = ^IndirectReadSideEffect[-1] : &:r108_64, ~m108_68 -# 108| m108_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_64 -# 108| m108_71(unknown) = Chi : total:m108_68, partial:m108_70 -#-----| Goto -> Block 10 +#-----| v0_28(void) = NoOp : +#-----| Goto (back edge) -> Block 13 #-----| Block 10 -#-----| m0_38(unknown) = Phi : from 7:~m0_28, from 9:~m108_71 -#-----| v0_39(void) = NoOp : -# 108| r108_72(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_73(glval) = FunctionAddress[final_suspend] : -# 108| r108_74(suspend_always) = Call[final_suspend] : func:r108_73, this:r108_72 -# 108| m108_75(unknown) = ^CallSideEffect : ~m0_38 -# 108| m108_76(unknown) = Chi : total:m0_38, partial:m108_75 -# 108| v108_77(void) = ^IndirectReadSideEffect[-1] : &:r108_72, ~m108_76 -# 108| m108_78(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_72 -# 108| m108_79(unknown) = Chi : total:m108_76, partial:m108_78 -#-----| r0_40(glval) = VariableAddress[#temp0:0] : -# 108| r108_80(glval) = VariableAddress[#temp108:21] : -# 108| r108_81(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_82(glval) = FunctionAddress[final_suspend] : -# 108| r108_83(suspend_always) = Call[final_suspend] : func:r108_82, this:r108_81 -# 108| m108_84(unknown) = ^CallSideEffect : ~m108_79 -# 108| m108_85(unknown) = Chi : total:m108_79, partial:m108_84 -# 108| v108_86(void) = ^IndirectReadSideEffect[-1] : &:r108_81, ~m108_85 -# 108| m108_87(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_81 -# 108| m108_88(unknown) = Chi : total:m108_85, partial:m108_87 -# 108| m108_89(suspend_always) = Store[#temp108:21] : &:r108_80, r108_83 -# 108| m108_90(unknown) = Chi : total:m108_88, partial:m108_89 -# 108| r108_91(suspend_always *) = CopyValue : r108_80 -# 108| m108_92(suspend_always *) = Store[#temp0:0] : &:r0_40, r108_91 -#-----| r0_41(suspend_always *) = Load[#temp0:0] : &:r0_40, m108_92 -# 108| r108_93(glval) = CopyValue : r0_41 -# 108| r108_94(glval) = Convert : r108_93 -# 108| r108_95(glval) = FunctionAddress[await_ready] : -# 108| r108_96(bool) = Call[await_ready] : func:r108_95, this:r108_94 -# 108| m108_97(unknown) = ^CallSideEffect : ~m108_90 -# 108| m108_98(unknown) = Chi : total:m108_90, partial:m108_97 -# 108| v108_99(void) = ^IndirectReadSideEffect[-1] : &:r108_94, ~m108_98 -#-----| v0_42(void) = ConditionalBranch : r108_96 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_31(bool) = Load[(unnamed local variable)] : &:r0_30, m0_10 +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 #-----| False -> Block 12 #-----| True -> Block 11 -# 108| Block 11 -# 108| m108_100(unknown) = Phi : from 10:~m108_98, from 12:~m108_130 -# 108| r108_101(suspend_always *) = CopyValue : r108_91 -# 108| r108_102(glval) = CopyValue : r108_101 -#-----| r0_43(glval) = Convert : r108_102 -# 108| r108_103(glval) = FunctionAddress[await_resume] : -# 108| v108_104(void) = Call[await_resume] : func:r108_103, this:r0_43 -# 108| m108_105(unknown) = ^CallSideEffect : ~m108_100 -# 108| m108_106(unknown) = Chi : total:m108_100, partial:m108_105 -#-----| v0_44(void) = ^IndirectReadSideEffect[-1] : &:r0_43, ~m108_106 -# 108| r108_107(glval) = VariableAddress[#return] : -# 108| v108_108(void) = ReturnValue : &:r108_107, ~m108_106 -# 108| v108_109(void) = AliasedUse : ~m108_106 -# 108| v108_110(void) = ExitFunction : +#-----| Block 11 +#-----| v0_34(void) = ReThrow : +#-----| C++ Exception -> Block 2 # 108| Block 12 -# 108| r108_111(suspend_always *) = CopyValue : r108_91 -# 108| r108_112(glval) = CopyValue : r108_111 -#-----| r0_45(glval) = Convert : r108_112 -# 108| r108_113(glval) = FunctionAddress[await_suspend] : -# 108| r108_114(glval>) = VariableAddress[#temp108:21] : -# 108| m108_115(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_114 -# 108| m108_116(unknown) = Chi : total:m108_98, partial:m108_115 -# 108| r108_117(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_118(glval>) = VariableAddress[(unnamed local variable)] : -# 108| r108_119(glval>) = Convert : r108_118 -# 108| r108_120(coroutine_handle &) = CopyValue : r108_119 -# 108| v108_121(void) = Call[coroutine_handle] : func:r108_117, this:r108_114, 0:r108_120 -# 108| m108_122(unknown) = ^CallSideEffect : ~m108_116 -# 108| m108_123(unknown) = Chi : total:m108_116, partial:m108_122 -# 108| v108_124(void) = ^BufferReadSideEffect[0] : &:r108_120, ~m108_123 -# 108| m108_125(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_114 -# 108| m108_126(unknown) = Chi : total:m108_123, partial:m108_125 -# 108| r108_127(coroutine_handle) = Load[#temp108:21] : &:r108_114, ~m108_126 -# 108| v108_128(void) = Call[await_suspend] : func:r108_113, this:r0_45, 0:r108_127 -# 108| m108_129(unknown) = ^CallSideEffect : ~m108_126 -# 108| m108_130(unknown) = Chi : total:m108_126, partial:m108_129 -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_45, ~m108_130 -#-----| Goto -> Block 11 +# 108| r108_54(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_55(glval) = FunctionAddress[unhandled_exception] : +# 108| v108_56(void) = Call[unhandled_exception] : func:r108_55, this:r108_54 +# 108| mu108_57(unknown) = ^CallSideEffect : ~m? +# 108| v108_58(void) = ^IndirectReadSideEffect[-1] : &:r108_54, ~m? +# 108| mu108_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_54 +#-----| Goto -> Block 13 + +#-----| Block 13 +#-----| v0_35(void) = NoOp : +# 108| r108_60(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_61(glval) = FunctionAddress[final_suspend] : +# 108| r108_62(suspend_always) = Call[final_suspend] : func:r108_61, this:r108_60 +# 108| mu108_63(unknown) = ^CallSideEffect : ~m? +# 108| v108_64(void) = ^IndirectReadSideEffect[-1] : &:r108_60, ~m? +# 108| mu108_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_60 +#-----| r0_36(glval) = VariableAddress[#temp0:0] : +# 108| r108_66(glval) = VariableAddress[#temp108:21] : +# 108| r108_67(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_68(glval) = FunctionAddress[final_suspend] : +# 108| r108_69(suspend_always) = Call[final_suspend] : func:r108_68, this:r108_67 +# 108| mu108_70(unknown) = ^CallSideEffect : ~m? +# 108| v108_71(void) = ^IndirectReadSideEffect[-1] : &:r108_67, ~m? +# 108| mu108_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_67 +# 108| mu108_73(suspend_always) = Store[#temp108:21] : &:r108_66, r108_69 +# 108| r108_74(suspend_always *) = CopyValue : r108_66 +# 108| m108_75(suspend_always *) = Store[#temp0:0] : &:r0_36, r108_74 +#-----| r0_37(suspend_always *) = Load[#temp0:0] : &:r0_36, m108_75 +# 108| r108_76(glval) = CopyValue : r0_37 +# 108| r108_77(glval) = Convert : r108_76 +# 108| r108_78(glval) = FunctionAddress[await_ready] : +# 108| r108_79(bool) = Call[await_ready] : func:r108_78, this:r108_77 +# 108| mu108_80(unknown) = ^CallSideEffect : ~m? +# 108| v108_81(void) = ^IndirectReadSideEffect[-1] : &:r108_77, ~m? +#-----| v0_38(void) = ConditionalBranch : r108_79 +#-----| False -> Block 15 +#-----| True -> Block 14 + +# 108| Block 14 +# 108| r108_82(suspend_always *) = CopyValue : r108_74 +# 108| r108_83(glval) = CopyValue : r108_82 +#-----| r0_39(glval) = Convert : r108_83 +# 108| r108_84(glval) = FunctionAddress[await_resume] : +# 108| v108_85(void) = Call[await_resume] : func:r108_84, this:r0_39 +# 108| mu108_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 108| r108_87(glval) = VariableAddress[#return] : +# 108| v108_88(void) = ReturnValue : &:r108_87, ~m? +#-----| Goto -> Block 1 -# 108| Block 13 -# 108| v108_131(void) = Unreached : +# 108| Block 15 +# 108| r108_89(suspend_always *) = CopyValue : r108_74 +# 108| r108_90(glval) = CopyValue : r108_89 +#-----| r0_41(glval) = Convert : r108_90 +# 108| r108_91(glval) = FunctionAddress[await_suspend] : +# 108| r108_92(glval>) = VariableAddress[#temp108:21] : +# 108| mu108_93(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_92 +# 108| r108_94(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_95(glval>) = VariableAddress[(unnamed local variable)] : +# 108| r108_96(glval>) = Convert : r108_95 +# 108| r108_97(coroutine_handle &) = CopyValue : r108_96 +# 108| v108_98(void) = Call[coroutine_handle] : func:r108_94, this:r108_92, 0:r108_97 +# 108| mu108_99(unknown) = ^CallSideEffect : ~m? +# 108| v108_100(void) = ^BufferReadSideEffect[0] : &:r108_97, ~m? +# 108| mu108_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_92 +# 108| r108_102(coroutine_handle) = Load[#temp108:21] : &:r108_92, ~m? +# 108| v108_103(void) = Call[await_suspend] : func:r108_91, this:r0_41, 0:r108_102 +# 108| mu108_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +#-----| Goto -> Block 14 destructors_for_temps.cpp: # 9| void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) # 9| Block 0 # 9| v9_1(void) = EnterFunction : -# 9| m9_2(unknown) = AliasedDefinition : -# 9| m9_3(unknown) = InitializeNonLocal : -# 9| m9_4(unknown) = Chi : total:m9_2, partial:m9_3 -# 9| r9_5(glval) = VariableAddress[#this] : -# 9| m9_6(glval) = InitializeParameter[#this] : &:r9_5 -# 9| r9_7(glval) = Load[#this] : &:r9_5, m9_6 -# 9| m9_8(ClassWithConstructor) = InitializeIndirection[#this] : &:r9_7 +# 9| mu9_2(unknown) = AliasedDefinition : +# 9| mu9_3(unknown) = InitializeNonLocal : +# 9| r9_4(glval) = VariableAddress[#this] : +# 9| m9_5(glval) = InitializeParameter[#this] : &:r9_4 +# 9| r9_6(glval) = Load[#this] : &:r9_4, m9_5 +# 9| mu9_7(ClassWithConstructor) = InitializeIndirection[#this] : &:r9_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(ClassWithConstructor &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithConstructor &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 9| v9_9(void) = NoOp : -# 9| v9_10(void) = ReturnIndirection[#this] : &:r9_7, m9_8 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 9| v9_11(void) = ReturnVoid : -# 9| v9_12(void) = AliasedUse : m9_3 -# 9| v9_13(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 9| v9_8(void) = NoOp : +# 9| v9_9(void) = ReturnIndirection[#this] : &:r9_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 9| v9_10(void) = ReturnVoid : +# 9| v9_11(void) = AliasedUse : ~m? +# 9| v9_12(void) = ExitFunction : # 14| char temp_test() # 14| Block 0 # 14| v14_1(void) = EnterFunction : -# 14| m14_2(unknown) = AliasedDefinition : -# 14| m14_3(unknown) = InitializeNonLocal : -# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3 +# 14| mu14_2(unknown) = AliasedDefinition : +# 14| mu14_3(unknown) = InitializeNonLocal : # 15| r15_1(glval) = VariableAddress[x] : # 15| r15_2(glval) = VariableAddress[#temp15:14] : -# 15| m15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 -# 15| m15_4(unknown) = Chi : total:m14_4, partial:m15_3 -# 15| r15_5(glval) = FunctionAddress[ClassWithDestructor2] : -# 15| v15_6(void) = Call[ClassWithDestructor2] : func:r15_5, this:r15_2 -# 15| m15_7(unknown) = ^CallSideEffect : ~m15_4 -# 15| m15_8(unknown) = Chi : total:m15_4, partial:m15_7 -# 15| m15_9(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 -# 15| m15_10(unknown) = Chi : total:m15_8, partial:m15_9 -# 15| r15_11(glval) = FunctionAddress[get_x] : -# 15| r15_12(char) = Call[get_x] : func:r15_11, this:r15_2 -# 15| m15_13(unknown) = ^CallSideEffect : ~m15_10 -# 15| m15_14(unknown) = Chi : total:m15_10, partial:m15_13 -# 15| v15_15(void) = ^IndirectReadSideEffect[-1] : &:r15_2, ~m15_14 -# 15| m15_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 -# 15| m15_17(unknown) = Chi : total:m15_14, partial:m15_16 -# 15| r15_18(glval) = CopyValue : r15_2 -# 15| r15_19(glval) = FunctionAddress[~ClassWithDestructor2] : -# 15| v15_20(void) = Call[~ClassWithDestructor2] : func:r15_19, this:r15_18 -# 15| m15_21(unknown) = ^CallSideEffect : ~m15_17 -# 15| m15_22(unknown) = Chi : total:m15_17, partial:m15_21 -# 15| v15_23(void) = ^IndirectReadSideEffect[-1] : &:r15_18, ~m15_22 -# 15| m15_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_18 -# 15| m15_25(unknown) = Chi : total:m15_22, partial:m15_24 -# 15| m15_26(char) = Store[x] : &:r15_1, r15_12 +# 15| mu15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 15| v15_5(void) = Call[ClassWithDestructor2] : func:r15_4, this:r15_2 +# 15| mu15_6(unknown) = ^CallSideEffect : ~m? +# 15| mu15_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| r15_8(glval) = FunctionAddress[get_x] : +# 15| r15_9(char) = Call[get_x] : func:r15_8, this:r15_2 +# 15| mu15_10(unknown) = ^CallSideEffect : ~m? +# 15| v15_11(void) = ^IndirectReadSideEffect[-1] : &:r15_2, ~m? +# 15| mu15_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| r15_13(glval) = CopyValue : r15_2 +# 15| r15_14(glval) = FunctionAddress[~ClassWithDestructor2] : +# 15| v15_15(void) = Call[~ClassWithDestructor2] : func:r15_14, this:r15_13 +# 15| mu15_16(unknown) = ^CallSideEffect : ~m? +# 15| v15_17(void) = ^IndirectReadSideEffect[-1] : &:r15_13, ~m? +# 15| mu15_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_13 +# 15| m15_19(char) = Store[x] : &:r15_1, r15_9 # 16| r16_1(glval) = VariableAddress[y] : -# 16| m16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 -# 16| m16_3(unknown) = Chi : total:m15_25, partial:m16_2 -# 16| r16_4(glval) = FunctionAddress[ClassWithConstructor] : -# 16| r16_5(char) = Constant[97] : -# 16| r16_6(glval) = VariableAddress[#temp16:33] : -# 16| m16_7(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_6 -# 16| m16_8(unknown) = Chi : total:m16_3, partial:m16_7 -# 16| r16_9(glval) = FunctionAddress[ClassWithDestructor2] : -# 16| v16_10(void) = Call[ClassWithDestructor2] : func:r16_9, this:r16_6 -# 16| m16_11(unknown) = ^CallSideEffect : ~m16_8 -# 16| m16_12(unknown) = Chi : total:m16_8, partial:m16_11 -# 16| m16_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_6 -# 16| m16_14(unknown) = Chi : total:m16_12, partial:m16_13 -# 16| r16_15(glval) = FunctionAddress[get_x] : -# 16| r16_16(char) = Call[get_x] : func:r16_15, this:r16_6 -# 16| m16_17(unknown) = ^CallSideEffect : ~m16_14 -# 16| m16_18(unknown) = Chi : total:m16_14, partial:m16_17 -# 16| v16_19(void) = ^IndirectReadSideEffect[-1] : &:r16_6, ~m16_18 -# 16| m16_20(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_6 -# 16| m16_21(unknown) = Chi : total:m16_18, partial:m16_20 -# 16| v16_22(void) = Call[ClassWithConstructor] : func:r16_4, this:r16_1, 0:r16_5, 1:r16_16 -# 16| m16_23(unknown) = ^CallSideEffect : ~m16_21 -# 16| m16_24(unknown) = Chi : total:m16_21, partial:m16_23 -# 16| m16_25(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 -# 16| m16_26(unknown) = Chi : total:m16_24, partial:m16_25 -# 16| r16_27(glval) = CopyValue : r16_6 -# 16| r16_28(glval) = FunctionAddress[~ClassWithDestructor2] : -# 16| v16_29(void) = Call[~ClassWithDestructor2] : func:r16_28, this:r16_27 -# 16| m16_30(unknown) = ^CallSideEffect : ~m16_26 -# 16| m16_31(unknown) = Chi : total:m16_26, partial:m16_30 -# 16| v16_32(void) = ^IndirectReadSideEffect[-1] : &:r16_27, ~m16_31 -# 16| m16_33(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_27 -# 16| m16_34(unknown) = Chi : total:m16_31, partial:m16_33 +# 16| mu16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval) = VariableAddress[#temp16:33] : +# 16| mu16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 16| v16_8(void) = Call[ClassWithDestructor2] : func:r16_7, this:r16_5 +# 16| mu16_9(unknown) = ^CallSideEffect : ~m? +# 16| mu16_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| r16_11(glval) = FunctionAddress[get_x] : +# 16| r16_12(char) = Call[get_x] : func:r16_11, this:r16_5 +# 16| mu16_13(unknown) = ^CallSideEffect : ~m? +# 16| v16_14(void) = ^IndirectReadSideEffect[-1] : &:r16_5, ~m? +# 16| mu16_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| v16_16(void) = Call[ClassWithConstructor] : func:r16_3, this:r16_1, 0:r16_4, 1:r16_12 +# 16| mu16_17(unknown) = ^CallSideEffect : ~m? +# 16| mu16_18(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 +# 16| r16_19(glval) = CopyValue : r16_5 +# 16| r16_20(glval) = FunctionAddress[~ClassWithDestructor2] : +# 16| v16_21(void) = Call[~ClassWithDestructor2] : func:r16_20, this:r16_19 +# 16| mu16_22(unknown) = ^CallSideEffect : ~m? +# 16| v16_23(void) = ^IndirectReadSideEffect[-1] : &:r16_19, ~m? +# 16| mu16_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_19 # 17| r17_1(glval) = VariableAddress[#return] : # 17| r17_2(glval) = VariableAddress[#temp17:12] : -# 17| m17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 -# 17| m17_4(unknown) = Chi : total:m16_34, partial:m17_3 -# 17| r17_5(glval) = FunctionAddress[ClassWithDestructor2] : -# 17| v17_6(void) = Call[ClassWithDestructor2] : func:r17_5, this:r17_2 -# 17| m17_7(unknown) = ^CallSideEffect : ~m17_4 -# 17| m17_8(unknown) = Chi : total:m17_4, partial:m17_7 -# 17| m17_9(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 -# 17| m17_10(unknown) = Chi : total:m17_8, partial:m17_9 -# 17| r17_11(glval) = FunctionAddress[get_x] : -# 17| r17_12(char) = Call[get_x] : func:r17_11, this:r17_2 -# 17| m17_13(unknown) = ^CallSideEffect : ~m17_10 -# 17| m17_14(unknown) = Chi : total:m17_10, partial:m17_13 -# 17| v17_15(void) = ^IndirectReadSideEffect[-1] : &:r17_2, ~m17_14 -# 17| m17_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 -# 17| m17_17(unknown) = Chi : total:m17_14, partial:m17_16 -# 17| r17_18(glval) = CopyValue : r17_2 -# 17| r17_19(glval) = FunctionAddress[~ClassWithDestructor2] : -# 17| v17_20(void) = Call[~ClassWithDestructor2] : func:r17_19, this:r17_18 -# 17| m17_21(unknown) = ^CallSideEffect : ~m17_17 -# 17| m17_22(unknown) = Chi : total:m17_17, partial:m17_21 -# 17| v17_23(void) = ^IndirectReadSideEffect[-1] : &:r17_18, ~m17_22 -# 17| m17_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_18 -# 17| m17_25(unknown) = Chi : total:m17_22, partial:m17_24 -# 17| m17_26(char) = Store[#return] : &:r17_1, r17_12 -# 14| r14_5(glval) = VariableAddress[#return] : -# 14| v14_6(void) = ReturnValue : &:r14_5, m17_26 -# 14| v14_7(void) = AliasedUse : ~m17_22 -# 14| v14_8(void) = ExitFunction : +# 17| mu17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 17| v17_5(void) = Call[ClassWithDestructor2] : func:r17_4, this:r17_2 +# 17| mu17_6(unknown) = ^CallSideEffect : ~m? +# 17| mu17_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| r17_8(glval) = FunctionAddress[get_x] : +# 17| r17_9(char) = Call[get_x] : func:r17_8, this:r17_2 +# 17| mu17_10(unknown) = ^CallSideEffect : ~m? +# 17| v17_11(void) = ^IndirectReadSideEffect[-1] : &:r17_2, ~m? +# 17| mu17_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| r17_13(glval) = CopyValue : r17_2 +# 17| r17_14(glval) = FunctionAddress[~ClassWithDestructor2] : +# 17| v17_15(void) = Call[~ClassWithDestructor2] : func:r17_14, this:r17_13 +# 17| mu17_16(unknown) = ^CallSideEffect : ~m? +# 17| v17_17(void) = ^IndirectReadSideEffect[-1] : &:r17_13, ~m? +# 17| mu17_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_13 +# 17| m17_19(char) = Store[#return] : &:r17_1, r17_9 +# 14| r14_4(glval) = VariableAddress[#return] : +# 14| v14_5(void) = ReturnValue : &:r14_4, m17_19 +# 14| v14_6(void) = AliasedUse : ~m? +# 14| v14_7(void) = ExitFunction : # 21| char temp_test2() # 21| Block 0 # 21| v21_1(void) = EnterFunction : -# 21| m21_2(unknown) = AliasedDefinition : -# 21| m21_3(unknown) = InitializeNonLocal : -# 21| m21_4(unknown) = Chi : total:m21_2, partial:m21_3 +# 21| mu21_2(unknown) = AliasedDefinition : +# 21| mu21_3(unknown) = InitializeNonLocal : # 22| r22_1(glval) = FunctionAddress[operator new] : # 22| r22_2(unsigned long) = Constant[1] : # 22| r22_3(void *) = Call[operator new] : func:r22_1, 0:r22_2 -# 22| m22_4(unknown) = ^CallSideEffect : ~m21_4 -# 22| m22_5(unknown) = Chi : total:m21_4, partial:m22_4 -# 22| m22_6(unknown) = ^InitializeDynamicAllocation : &:r22_3 -# 22| m22_7(unknown) = Chi : total:m22_5, partial:m22_6 -# 22| r22_8(ClassWithDestructor2 *) = Convert : r22_3 -# 22| r22_9(glval) = FunctionAddress[ClassWithDestructor2] : -# 22| v22_10(void) = Call[ClassWithDestructor2] : func:r22_9, this:r22_8 -# 22| m22_11(unknown) = ^CallSideEffect : ~m22_7 -# 22| m22_12(unknown) = Chi : total:m22_7, partial:m22_11 -# 22| m22_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r22_8 -# 22| m22_14(unknown) = Chi : total:m22_12, partial:m22_13 +# 22| mu22_4(unknown) = ^CallSideEffect : ~m? +# 22| mu22_5(unknown) = ^InitializeDynamicAllocation : &:r22_3 +# 22| r22_6(ClassWithDestructor2 *) = Convert : r22_3 +# 22| r22_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 22| v22_8(void) = Call[ClassWithDestructor2] : func:r22_7, this:r22_6 +# 22| mu22_9(unknown) = ^CallSideEffect : ~m? +# 22| mu22_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r22_6 # 23| r23_1(glval) = VariableAddress[#return] : # 23| r23_2(glval) = VariableAddress[#temp23:12] : -# 23| m23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 -# 23| m23_4(unknown) = Chi : total:m22_14, partial:m23_3 -# 23| r23_5(glval) = FunctionAddress[ClassWithDestructor2] : -# 23| v23_6(void) = Call[ClassWithDestructor2] : func:r23_5, this:r23_2 -# 23| m23_7(unknown) = ^CallSideEffect : ~m23_4 -# 23| m23_8(unknown) = Chi : total:m23_4, partial:m23_7 -# 23| m23_9(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 -# 23| m23_10(unknown) = Chi : total:m23_8, partial:m23_9 -# 23| r23_11(glval) = FunctionAddress[get_x] : -# 23| r23_12(char) = Call[get_x] : func:r23_11, this:r23_2 -# 23| m23_13(unknown) = ^CallSideEffect : ~m23_10 -# 23| m23_14(unknown) = Chi : total:m23_10, partial:m23_13 -# 23| v23_15(void) = ^IndirectReadSideEffect[-1] : &:r23_2, ~m23_14 -# 23| m23_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 -# 23| m23_17(unknown) = Chi : total:m23_14, partial:m23_16 -# 23| r23_18(int) = Convert : r23_12 -# 23| r23_19(glval) = VariableAddress[#temp23:45] : -# 23| m23_20(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_19 -# 23| m23_21(unknown) = Chi : total:m23_17, partial:m23_20 -# 23| r23_22(glval) = FunctionAddress[ClassWithDestructor2] : -# 23| v23_23(void) = Call[ClassWithDestructor2] : func:r23_22, this:r23_19 -# 23| m23_24(unknown) = ^CallSideEffect : ~m23_21 -# 23| m23_25(unknown) = Chi : total:m23_21, partial:m23_24 -# 23| m23_26(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_19 -# 23| m23_27(unknown) = Chi : total:m23_25, partial:m23_26 -# 23| r23_28(glval) = FunctionAddress[get_x] : -# 23| r23_29(char) = Call[get_x] : func:r23_28, this:r23_19 -# 23| m23_30(unknown) = ^CallSideEffect : ~m23_27 -# 23| m23_31(unknown) = Chi : total:m23_27, partial:m23_30 -# 23| v23_32(void) = ^IndirectReadSideEffect[-1] : &:r23_19, ~m23_31 -# 23| m23_33(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_19 -# 23| m23_34(unknown) = Chi : total:m23_31, partial:m23_33 -# 23| r23_35(int) = Convert : r23_29 -# 23| r23_36(int) = Add : r23_18, r23_35 -# 23| r23_37(glval) = CopyValue : r23_19 -# 23| r23_38(glval) = FunctionAddress[~ClassWithDestructor2] : -# 23| v23_39(void) = Call[~ClassWithDestructor2] : func:r23_38, this:r23_37 -# 23| m23_40(unknown) = ^CallSideEffect : ~m23_34 -# 23| m23_41(unknown) = Chi : total:m23_34, partial:m23_40 -# 23| v23_42(void) = ^IndirectReadSideEffect[-1] : &:r23_37, ~m23_41 -# 23| m23_43(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_37 -# 23| m23_44(unknown) = Chi : total:m23_41, partial:m23_43 -# 23| r23_45(glval) = CopyValue : r23_2 -# 23| r23_46(glval) = FunctionAddress[~ClassWithDestructor2] : -# 23| v23_47(void) = Call[~ClassWithDestructor2] : func:r23_46, this:r23_45 -# 23| m23_48(unknown) = ^CallSideEffect : ~m23_44 -# 23| m23_49(unknown) = Chi : total:m23_44, partial:m23_48 -# 23| v23_50(void) = ^IndirectReadSideEffect[-1] : &:r23_45, ~m23_49 -# 23| m23_51(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_45 -# 23| m23_52(unknown) = Chi : total:m23_49, partial:m23_51 -# 23| r23_53(char) = Convert : r23_36 -# 23| m23_54(char) = Store[#return] : &:r23_1, r23_53 -# 21| r21_5(glval) = VariableAddress[#return] : -# 21| v21_6(void) = ReturnValue : &:r21_5, m23_54 -# 21| v21_7(void) = AliasedUse : ~m23_49 -# 21| v21_8(void) = ExitFunction : +# 23| mu23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_5(void) = Call[ClassWithDestructor2] : func:r23_4, this:r23_2 +# 23| mu23_6(unknown) = ^CallSideEffect : ~m? +# 23| mu23_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| r23_8(glval) = FunctionAddress[get_x] : +# 23| r23_9(char) = Call[get_x] : func:r23_8, this:r23_2 +# 23| mu23_10(unknown) = ^CallSideEffect : ~m? +# 23| v23_11(void) = ^IndirectReadSideEffect[-1] : &:r23_2, ~m? +# 23| mu23_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| r23_13(int) = Convert : r23_9 +# 23| r23_14(glval) = VariableAddress[#temp23:45] : +# 23| mu23_15(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_14 +# 23| r23_16(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_17(void) = Call[ClassWithDestructor2] : func:r23_16, this:r23_14 +# 23| mu23_18(unknown) = ^CallSideEffect : ~m? +# 23| mu23_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_14 +# 23| r23_20(glval) = FunctionAddress[get_x] : +# 23| r23_21(char) = Call[get_x] : func:r23_20, this:r23_14 +# 23| mu23_22(unknown) = ^CallSideEffect : ~m? +# 23| v23_23(void) = ^IndirectReadSideEffect[-1] : &:r23_14, ~m? +# 23| mu23_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_14 +# 23| r23_25(int) = Convert : r23_21 +# 23| r23_26(int) = Add : r23_13, r23_25 +# 23| r23_27(glval) = CopyValue : r23_14 +# 23| r23_28(glval) = FunctionAddress[~ClassWithDestructor2] : +# 23| v23_29(void) = Call[~ClassWithDestructor2] : func:r23_28, this:r23_27 +# 23| mu23_30(unknown) = ^CallSideEffect : ~m? +# 23| v23_31(void) = ^IndirectReadSideEffect[-1] : &:r23_27, ~m? +# 23| mu23_32(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_27 +# 23| r23_33(glval) = CopyValue : r23_2 +# 23| r23_34(glval) = FunctionAddress[~ClassWithDestructor2] : +# 23| v23_35(void) = Call[~ClassWithDestructor2] : func:r23_34, this:r23_33 +# 23| mu23_36(unknown) = ^CallSideEffect : ~m? +# 23| v23_37(void) = ^IndirectReadSideEffect[-1] : &:r23_33, ~m? +# 23| mu23_38(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_33 +# 23| r23_39(char) = Convert : r23_26 +# 23| m23_40(char) = Store[#return] : &:r23_1, r23_39 +# 21| r21_4(glval) = VariableAddress[#return] : +# 21| v21_5(void) = ReturnValue : &:r21_4, m23_40 +# 21| v21_6(void) = AliasedUse : ~m? +# 21| v21_7(void) = ExitFunction : # 29| void temp_test3() # 29| Block 0 # 29| v29_1(void) = EnterFunction : -# 29| m29_2(unknown) = AliasedDefinition : -# 29| m29_3(unknown) = InitializeNonLocal : -# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 +# 29| mu29_2(unknown) = AliasedDefinition : +# 29| mu29_3(unknown) = InitializeNonLocal : # 30| r30_1(glval) = VariableAddress[rs] : # 30| r30_2(glval) = VariableAddress[#temp30:38] : # 30| r30_3(glval) = FunctionAddress[returnValue] : # 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 -# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 -# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 -# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 -# 30| m30_8(unknown) = Chi : total:m30_6, partial:m30_7 -# 30| r30_9(glval) = Convert : r30_2 -# 30| r30_10(ClassWithDestructor2 &) = CopyValue : r30_9 -# 30| m30_11(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_10 +# 30| mu30_5(unknown) = ^CallSideEffect : ~m? +# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_7(glval) = Convert : r30_2 +# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 +# 30| m30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 # 31| v31_1(void) = NoOp : # 31| r31_2(glval) = CopyValue : r30_2 # 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : # 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 -# 31| m31_5(unknown) = ^CallSideEffect : ~m30_8 -# 31| m31_6(unknown) = Chi : total:m30_8, partial:m31_5 -# 31| v31_7(void) = ^IndirectReadSideEffect[-1] : &:r31_2, ~m31_6 -# 31| m31_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 -# 31| m31_9(unknown) = Chi : total:m31_6, partial:m31_8 -# 29| v29_5(void) = ReturnVoid : -# 29| v29_6(void) = AliasedUse : ~m31_6 -# 29| v29_7(void) = ExitFunction : +# 31| mu31_5(unknown) = ^CallSideEffect : ~m? +# 31| v31_6(void) = ^IndirectReadSideEffect[-1] : &:r31_2, ~m? +# 31| mu31_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 29| v29_4(void) = ReturnVoid : +# 29| v29_5(void) = AliasedUse : ~m? +# 29| v29_6(void) = ExitFunction : # 33| void temp_test4() # 33| Block 0 # 33| v33_1(void) = EnterFunction : -# 33| m33_2(unknown) = AliasedDefinition : -# 33| m33_3(unknown) = InitializeNonLocal : -# 33| m33_4(unknown) = Chi : total:m33_2, partial:m33_3 +# 33| mu33_2(unknown) = AliasedDefinition : +# 33| mu33_3(unknown) = InitializeNonLocal : # 34| r34_1(glval) = VariableAddress[c] : -# 34| m34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 -# 34| m34_3(unknown) = Chi : total:m33_4, partial:m34_2 -# 34| r34_4(glval) = FunctionAddress[ClassWithDestructor2] : -# 34| v34_5(void) = Call[ClassWithDestructor2] : func:r34_4, this:r34_1 -# 34| m34_6(unknown) = ^CallSideEffect : ~m34_3 -# 34| m34_7(unknown) = Chi : total:m34_3, partial:m34_6 -# 34| m34_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 -# 34| m34_9(unknown) = Chi : total:m34_7, partial:m34_8 +# 34| mu34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 34| v34_4(void) = Call[ClassWithDestructor2] : func:r34_3, this:r34_1 +# 34| mu34_5(unknown) = ^CallSideEffect : ~m? +# 34| mu34_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 # 35| r35_1(glval) = VariableAddress[rs2] : # 35| r35_2(glval) = VariableAddress[#temp35:39] : # 35| r35_3(glval) = FunctionAddress[returnValue] : # 35| r35_4(ClassWithDestructor2) = Call[returnValue] : func:r35_3 -# 35| m35_5(unknown) = ^CallSideEffect : ~m34_9 -# 35| m35_6(unknown) = Chi : total:m34_9, partial:m35_5 -# 35| m35_7(ClassWithDestructor2) = Store[#temp35:39] : &:r35_2, r35_4 -# 35| m35_8(unknown) = Chi : total:m35_6, partial:m35_7 -# 35| r35_9(glval) = Convert : r35_2 -# 35| r35_10(ClassWithDestructor2 &) = CopyValue : r35_9 -# 35| m35_11(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_10 +# 35| mu35_5(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6(ClassWithDestructor2) = Store[#temp35:39] : &:r35_2, r35_4 +# 35| r35_7(glval) = Convert : r35_2 +# 35| r35_8(ClassWithDestructor2 &) = CopyValue : r35_7 +# 35| m35_9(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_8 # 36| v36_1(void) = NoOp : # 36| r36_2(glval) = CopyValue : r35_2 # 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : # 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 -# 36| m36_5(unknown) = ^CallSideEffect : ~m35_8 -# 36| m36_6(unknown) = Chi : total:m35_8, partial:m36_5 -# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, ~m36_6 -# 36| m36_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 -# 36| m36_9(unknown) = Chi : total:m36_6, partial:m36_8 -# 36| r36_10(glval) = VariableAddress[c] : -# 36| r36_11(glval) = FunctionAddress[~ClassWithDestructor2] : -# 36| v36_12(void) = Call[~ClassWithDestructor2] : func:r36_11, this:r36_10 -# 36| m36_13(unknown) = ^CallSideEffect : ~m36_9 -# 36| m36_14(unknown) = Chi : total:m36_9, partial:m36_13 -# 36| v36_15(void) = ^IndirectReadSideEffect[-1] : &:r36_10, ~m36_14 -# 36| m36_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_10 -# 36| m36_17(unknown) = Chi : total:m36_14, partial:m36_16 -# 33| v33_5(void) = ReturnVoid : -# 33| v33_6(void) = AliasedUse : ~m36_14 -# 33| v33_7(void) = ExitFunction : +# 36| mu36_5(unknown) = ^CallSideEffect : ~m? +# 36| v36_6(void) = ^IndirectReadSideEffect[-1] : &:r36_2, ~m? +# 36| mu36_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 36| r36_8(glval) = VariableAddress[c] : +# 36| r36_9(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_10(void) = Call[~ClassWithDestructor2] : func:r36_9, this:r36_8 +# 36| mu36_11(unknown) = ^CallSideEffect : ~m? +# 36| v36_12(void) = ^IndirectReadSideEffect[-1] : &:r36_8, ~m? +# 36| mu36_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_8 +# 33| v33_4(void) = ReturnVoid : +# 33| v33_5(void) = AliasedUse : ~m? +# 33| v33_6(void) = ExitFunction : # 38| void temp_test5(bool) # 38| Block 0 # 38| v38_1(void) = EnterFunction : -# 38| m38_2(unknown) = AliasedDefinition : -# 38| m38_3(unknown) = InitializeNonLocal : -# 38| m38_4(unknown) = Chi : total:m38_2, partial:m38_3 -# 38| r38_5(glval) = VariableAddress[b] : -# 38| m38_6(bool) = InitializeParameter[b] : &:r38_5 +# 38| mu38_2(unknown) = AliasedDefinition : +# 38| mu38_3(unknown) = InitializeNonLocal : +# 38| r38_4(glval) = VariableAddress[b] : +# 38| m38_5(bool) = InitializeParameter[b] : &:r38_4 # 39| r39_1(glval) = VariableAddress[#temp39:3] : # 39| r39_2(glval) = VariableAddress[b] : -# 39| r39_3(bool) = Load[b] : &:r39_2, m38_6 +# 39| r39_3(bool) = Load[b] : &:r39_2, m38_5 # 39| v39_4(void) = ConditionalBranch : r39_3 #-----| False -> Block 3 #-----| True -> Block 2 # 39| Block 1 -# 39| m39_5(unknown) = Phi : from 2:~m39_27, from 3:~m39_39 -# 39| m39_6(ClassWithDestructor2) = Phi : from 2:m39_30, from 3:m39_42 -# 39| r39_7(glval) = VariableAddress[#temp39:3] : -# 39| r39_8(ClassWithDestructor2) = Load[#temp39:3] : &:r39_7, m39_6 -# 39| m39_9(ClassWithDestructor2) = Store[#temp39:3] : &:r39_1, r39_8 -# 39| m39_10(unknown) = Chi : total:m39_5, partial:m39_9 -# 39| r39_11(glval) = CopyValue : r39_1 -# 39| r39_12(glval) = FunctionAddress[~ClassWithDestructor2] : -# 39| v39_13(void) = Call[~ClassWithDestructor2] : func:r39_12, this:r39_11 -# 39| m39_14(unknown) = ^CallSideEffect : ~m39_10 -# 39| m39_15(unknown) = Chi : total:m39_10, partial:m39_14 -# 39| v39_16(void) = ^IndirectReadSideEffect[-1] : &:r39_11, ~m39_15 -# 39| m39_17(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_11 -# 39| m39_18(unknown) = Chi : total:m39_15, partial:m39_17 -# 40| v40_1(void) = NoOp : -# 38| v38_7(void) = ReturnVoid : -# 38| v38_8(void) = AliasedUse : ~m39_15 -# 38| v38_9(void) = ExitFunction : +# 39| m39_5(ClassWithDestructor2) = Phi : from 2:m39_23, from 3:m39_32 +# 39| r39_6(glval) = VariableAddress[#temp39:3] : +# 39| r39_7(ClassWithDestructor2) = Load[#temp39:3] : &:r39_6, m39_5 +# 39| mu39_8(ClassWithDestructor2) = Store[#temp39:3] : &:r39_1, r39_7 +# 39| r39_9(glval) = CopyValue : r39_1 +# 39| r39_10(glval) = FunctionAddress[~ClassWithDestructor2] : +# 39| v39_11(void) = Call[~ClassWithDestructor2] : func:r39_10, this:r39_9 +# 39| mu39_12(unknown) = ^CallSideEffect : ~m? +# 39| v39_13(void) = ^IndirectReadSideEffect[-1] : &:r39_9, ~m? +# 39| mu39_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_9 +# 40| v40_1(void) = NoOp : +# 38| v38_6(void) = ReturnVoid : +# 38| v38_7(void) = AliasedUse : ~m? +# 38| v38_8(void) = ExitFunction : # 39| Block 2 -# 39| r39_19(glval) = VariableAddress[#temp39:7] : -# 39| m39_20(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_19 -# 39| m39_21(unknown) = Chi : total:m38_4, partial:m39_20 -# 39| r39_22(glval) = FunctionAddress[ClassWithDestructor2] : -# 39| v39_23(void) = Call[ClassWithDestructor2] : func:r39_22, this:r39_19 -# 39| m39_24(unknown) = ^CallSideEffect : ~m39_21 -# 39| m39_25(unknown) = Chi : total:m39_21, partial:m39_24 -# 39| m39_26(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_19 -# 39| m39_27(unknown) = Chi : total:m39_25, partial:m39_26 -# 39| r39_28(ClassWithDestructor2) = Load[#temp39:7] : &:r39_19, ~m39_27 -# 39| r39_29(glval) = VariableAddress[#temp39:3] : -# 39| m39_30(ClassWithDestructor2) = Store[#temp39:3] : &:r39_29, r39_28 +# 39| r39_15(glval) = VariableAddress[#temp39:7] : +# 39| mu39_16(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_15 +# 39| r39_17(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_18(void) = Call[ClassWithDestructor2] : func:r39_17, this:r39_15 +# 39| mu39_19(unknown) = ^CallSideEffect : ~m? +# 39| mu39_20(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_15 +# 39| r39_21(ClassWithDestructor2) = Load[#temp39:7] : &:r39_15, ~m? +# 39| r39_22(glval) = VariableAddress[#temp39:3] : +# 39| m39_23(ClassWithDestructor2) = Store[#temp39:3] : &:r39_22, r39_21 #-----| Goto -> Block 1 # 39| Block 3 -# 39| r39_31(glval) = VariableAddress[#temp39:32] : -# 39| m39_32(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_31 -# 39| m39_33(unknown) = Chi : total:m38_4, partial:m39_32 -# 39| r39_34(glval) = FunctionAddress[ClassWithDestructor2] : -# 39| v39_35(void) = Call[ClassWithDestructor2] : func:r39_34, this:r39_31 -# 39| m39_36(unknown) = ^CallSideEffect : ~m39_33 -# 39| m39_37(unknown) = Chi : total:m39_33, partial:m39_36 -# 39| m39_38(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_31 -# 39| m39_39(unknown) = Chi : total:m39_37, partial:m39_38 -# 39| r39_40(ClassWithDestructor2) = Load[#temp39:32] : &:r39_31, ~m39_39 -# 39| r39_41(glval) = VariableAddress[#temp39:3] : -# 39| m39_42(ClassWithDestructor2) = Store[#temp39:3] : &:r39_41, r39_40 +# 39| r39_24(glval) = VariableAddress[#temp39:32] : +# 39| mu39_25(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_24 +# 39| r39_26(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_27(void) = Call[ClassWithDestructor2] : func:r39_26, this:r39_24 +# 39| mu39_28(unknown) = ^CallSideEffect : ~m? +# 39| mu39_29(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_24 +# 39| r39_30(ClassWithDestructor2) = Load[#temp39:32] : &:r39_24, ~m? +# 39| r39_31(glval) = VariableAddress[#temp39:3] : +# 39| m39_32(ClassWithDestructor2) = Store[#temp39:3] : &:r39_31, r39_30 #-----| Goto -> Block 1 # 42| void temp_test6(bool) # 42| Block 0 # 42| v42_1(void) = EnterFunction : -# 42| m42_2(unknown) = AliasedDefinition : -# 42| m42_3(unknown) = InitializeNonLocal : -# 42| m42_4(unknown) = Chi : total:m42_2, partial:m42_3 -# 42| r42_5(glval) = VariableAddress[b] : -# 42| m42_6(bool) = InitializeParameter[b] : &:r42_5 +# 42| mu42_2(unknown) = AliasedDefinition : +# 42| mu42_3(unknown) = InitializeNonLocal : +# 42| r42_4(glval) = VariableAddress[b] : +# 42| m42_5(bool) = InitializeParameter[b] : &:r42_4 # 43| r43_1(glval) = VariableAddress[c] : -# 43| m43_2(ClassWithDestructor2) = Uninitialized[c] : &:r43_1 -# 43| m43_3(unknown) = Chi : total:m42_4, partial:m43_2 -# 43| r43_4(glval) = FunctionAddress[ClassWithDestructor2] : -# 43| v43_5(void) = Call[ClassWithDestructor2] : func:r43_4, this:r43_1 -# 43| m43_6(unknown) = ^CallSideEffect : ~m43_3 -# 43| m43_7(unknown) = Chi : total:m43_3, partial:m43_6 -# 43| m43_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_1 -# 43| m43_9(unknown) = Chi : total:m43_7, partial:m43_8 +# 43| mu43_2(ClassWithDestructor2) = Uninitialized[c] : &:r43_1 +# 43| r43_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_4(void) = Call[ClassWithDestructor2] : func:r43_3, this:r43_1 +# 43| mu43_5(unknown) = ^CallSideEffect : ~m? +# 43| mu43_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_1 # 44| r44_1(glval) = VariableAddress[b] : -# 44| r44_2(bool) = Load[b] : &:r44_1, m42_6 +# 44| r44_2(bool) = Load[b] : &:r44_1, m42_5 # 44| v44_3(void) = ConditionalBranch : r44_2 #-----| False -> Block 4 #-----| True -> Block 3 # 42| Block 1 -# 42| m42_7(unknown) = Phi : from 2:~m47_8, from 4:~m47_17 -# 42| v42_8(void) = AliasedUse : ~m42_7 -# 42| v42_9(void) = ExitFunction : +# 42| v42_6(void) = AliasedUse : ~m? +# 42| v42_7(void) = ExitFunction : # 42| Block 2 -# 42| v42_10(void) = Unwind : +# 42| v42_8(void) = Unwind : #-----| Goto -> Block 1 # 45| Block 3 # 45| r45_1(glval) = VariableAddress[#throw45:7] : -# 45| m45_2(ClassWithConstructor) = Uninitialized[#throw45:7] : &:r45_1 -# 45| m45_3(unknown) = Chi : total:m43_9, partial:m45_2 -# 45| r45_4(glval) = FunctionAddress[ClassWithConstructor] : -# 45| r45_5(char) = Constant[120] : -# 45| r45_6(glval) = VariableAddress[#temp45:39] : -# 45| m45_7(ClassWithDestructor2) = Uninitialized[#temp45:39] : &:r45_6 -# 45| m45_8(unknown) = Chi : total:m45_3, partial:m45_7 -# 45| r45_9(glval) = FunctionAddress[ClassWithDestructor2] : -# 45| v45_10(void) = Call[ClassWithDestructor2] : func:r45_9, this:r45_6 -# 45| m45_11(unknown) = ^CallSideEffect : ~m45_8 -# 45| m45_12(unknown) = Chi : total:m45_8, partial:m45_11 -# 45| m45_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_6 -# 45| m45_14(unknown) = Chi : total:m45_12, partial:m45_13 -# 45| r45_15(glval) = FunctionAddress[get_x] : -# 45| r45_16(char) = Call[get_x] : func:r45_15, this:r45_6 -# 45| m45_17(unknown) = ^CallSideEffect : ~m45_14 -# 45| m45_18(unknown) = Chi : total:m45_14, partial:m45_17 -# 45| v45_19(void) = ^IndirectReadSideEffect[-1] : &:r45_6, ~m45_18 -# 45| m45_20(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_6 -# 45| m45_21(unknown) = Chi : total:m45_18, partial:m45_20 -# 45| v45_22(void) = Call[ClassWithConstructor] : func:r45_4, this:r45_1, 0:r45_5, 1:r45_16 -# 45| m45_23(unknown) = ^CallSideEffect : ~m45_21 -# 45| m45_24(unknown) = Chi : total:m45_21, partial:m45_23 -# 45| m45_25(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r45_1 -# 45| m45_26(unknown) = Chi : total:m45_24, partial:m45_25 -# 45| v45_27(void) = ThrowValue : &:r45_1, ~m45_26 -# 45| r45_28(glval) = CopyValue : r45_6 -# 45| r45_29(glval) = FunctionAddress[~ClassWithDestructor2] : -# 45| v45_30(void) = Call[~ClassWithDestructor2] : func:r45_29, this:r45_28 -# 45| m45_31(unknown) = ^CallSideEffect : ~m45_26 -# 45| m45_32(unknown) = Chi : total:m45_26, partial:m45_31 -# 45| v45_33(void) = ^IndirectReadSideEffect[-1] : &:r45_28, ~m45_32 -# 45| m45_34(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_28 -# 45| m45_35(unknown) = Chi : total:m45_32, partial:m45_34 +# 45| mu45_2(ClassWithConstructor) = Uninitialized[#throw45:7] : &:r45_1 +# 45| r45_3(glval) = FunctionAddress[ClassWithConstructor] : +# 45| r45_4(char) = Constant[120] : +# 45| r45_5(glval) = VariableAddress[#temp45:39] : +# 45| mu45_6(ClassWithDestructor2) = Uninitialized[#temp45:39] : &:r45_5 +# 45| r45_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 45| v45_8(void) = Call[ClassWithDestructor2] : func:r45_7, this:r45_5 +# 45| mu45_9(unknown) = ^CallSideEffect : ~m? +# 45| mu45_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_5 +# 45| r45_11(glval) = FunctionAddress[get_x] : +# 45| r45_12(char) = Call[get_x] : func:r45_11, this:r45_5 +# 45| mu45_13(unknown) = ^CallSideEffect : ~m? +# 45| v45_14(void) = ^IndirectReadSideEffect[-1] : &:r45_5, ~m? +# 45| mu45_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_5 +# 45| v45_16(void) = Call[ClassWithConstructor] : func:r45_3, this:r45_1, 0:r45_4, 1:r45_12 +# 45| mu45_17(unknown) = ^CallSideEffect : ~m? +# 45| mu45_18(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r45_1 +# 45| v45_19(void) = ThrowValue : &:r45_1, ~m? +# 45| r45_20(glval) = CopyValue : r45_5 +# 45| r45_21(glval) = FunctionAddress[~ClassWithDestructor2] : +# 45| v45_22(void) = Call[~ClassWithDestructor2] : func:r45_21, this:r45_20 +# 45| mu45_23(unknown) = ^CallSideEffect : ~m? +# 45| v45_24(void) = ^IndirectReadSideEffect[-1] : &:r45_20, ~m? +# 45| mu45_25(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_20 # 47| r47_1(glval) = VariableAddress[c] : # 47| r47_2(glval) = FunctionAddress[~ClassWithDestructor2] : # 47| v47_3(void) = Call[~ClassWithDestructor2] : func:r47_2, this:r47_1 -# 47| m47_4(unknown) = ^CallSideEffect : ~m45_35 -# 47| m47_5(unknown) = Chi : total:m45_35, partial:m47_4 -# 47| v47_6(void) = ^IndirectReadSideEffect[-1] : &:r47_1, ~m47_5 -# 47| m47_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r47_1 -# 47| m47_8(unknown) = Chi : total:m47_5, partial:m47_7 +# 47| mu47_4(unknown) = ^CallSideEffect : ~m? +# 47| v47_5(void) = ^IndirectReadSideEffect[-1] : &:r47_1, ~m? +# 47| mu47_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r47_1 #-----| C++ Exception -> Block 2 # 47| Block 4 -# 47| v47_9(void) = NoOp : -# 47| r47_10(glval) = VariableAddress[c] : -# 47| r47_11(glval) = FunctionAddress[~ClassWithDestructor2] : -# 47| v47_12(void) = Call[~ClassWithDestructor2] : func:r47_11, this:r47_10 -# 47| m47_13(unknown) = ^CallSideEffect : ~m43_9 -# 47| m47_14(unknown) = Chi : total:m43_9, partial:m47_13 -# 47| v47_15(void) = ^IndirectReadSideEffect[-1] : &:r47_10, ~m47_14 -# 47| m47_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r47_10 -# 47| m47_17(unknown) = Chi : total:m47_14, partial:m47_16 -# 42| v42_11(void) = ReturnVoid : +# 47| v47_7(void) = NoOp : +# 47| r47_8(glval) = VariableAddress[c] : +# 47| r47_9(glval) = FunctionAddress[~ClassWithDestructor2] : +# 47| v47_10(void) = Call[~ClassWithDestructor2] : func:r47_9, this:r47_8 +# 47| mu47_11(unknown) = ^CallSideEffect : ~m? +# 47| v47_12(void) = ^IndirectReadSideEffect[-1] : &:r47_8, ~m? +# 47| mu47_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r47_8 +# 42| v42_9(void) = ReturnVoid : #-----| Goto -> Block 1 # 49| void temp_test7(bool) # 49| Block 0 # 49| v49_1(void) = EnterFunction : -# 49| m49_2(unknown) = AliasedDefinition : -# 49| m49_3(unknown) = InitializeNonLocal : -# 49| m49_4(unknown) = Chi : total:m49_2, partial:m49_3 -# 49| r49_5(glval) = VariableAddress[b] : -# 49| m49_6(bool) = InitializeParameter[b] : &:r49_5 +# 49| mu49_2(unknown) = AliasedDefinition : +# 49| mu49_3(unknown) = InitializeNonLocal : +# 49| r49_4(glval) = VariableAddress[b] : +# 49| m49_5(bool) = InitializeParameter[b] : &:r49_4 # 50| r50_1(glval) = VariableAddress[c] : -# 50| m50_2(ClassWithDestructor2) = Uninitialized[c] : &:r50_1 -# 50| m50_3(unknown) = Chi : total:m49_4, partial:m50_2 -# 50| r50_4(glval) = FunctionAddress[ClassWithDestructor2] : -# 50| v50_5(void) = Call[ClassWithDestructor2] : func:r50_4, this:r50_1 -# 50| m50_6(unknown) = ^CallSideEffect : ~m50_3 -# 50| m50_7(unknown) = Chi : total:m50_3, partial:m50_6 -# 50| m50_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r50_1 -# 50| m50_9(unknown) = Chi : total:m50_7, partial:m50_8 +# 50| mu50_2(ClassWithDestructor2) = Uninitialized[c] : &:r50_1 +# 50| r50_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 50| v50_4(void) = Call[ClassWithDestructor2] : func:r50_3, this:r50_1 +# 50| mu50_5(unknown) = ^CallSideEffect : ~m? +# 50| mu50_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r50_1 # 51| r51_1(glval) = VariableAddress[#temp51:5] : # 51| r51_2(glval) = VariableAddress[b] : -# 51| r51_3(bool) = Load[b] : &:r51_2, m49_6 +# 51| r51_3(bool) = Load[b] : &:r51_2, m49_5 # 51| v51_4(void) = ConditionalBranch : r51_3 #-----| False -> Block 4 #-----| True -> Block 3 # 49| Block 1 -# 49| m49_7(unknown) = Phi : from 2:~m52_8, from 4:~m52_17 -# 49| v49_8(void) = AliasedUse : ~m49_7 -# 49| v49_9(void) = ExitFunction : +# 49| v49_6(void) = AliasedUse : ~m? +# 49| v49_7(void) = ExitFunction : # 49| Block 2 -# 49| v49_10(void) = Unwind : +# 49| v49_8(void) = Unwind : #-----| Goto -> Block 1 # 51| Block 3 -# 51| r51_5(glval) = VariableAddress[#throw51:9] : -# 51| m51_6(ClassWithConstructor) = Uninitialized[#throw51:9] : &:r51_5 -# 51| m51_7(unknown) = Chi : total:m50_9, partial:m51_6 -# 51| r51_8(glval) = FunctionAddress[ClassWithConstructor] : -# 51| r51_9(char) = Constant[120] : -# 51| r51_10(glval) = VariableAddress[#temp51:41] : -# 51| m51_11(ClassWithDestructor2) = Uninitialized[#temp51:41] : &:r51_10 -# 51| m51_12(unknown) = Chi : total:m51_7, partial:m51_11 -# 51| r51_13(glval) = FunctionAddress[ClassWithDestructor2] : -# 51| v51_14(void) = Call[ClassWithDestructor2] : func:r51_13, this:r51_10 -# 51| m51_15(unknown) = ^CallSideEffect : ~m51_12 -# 51| m51_16(unknown) = Chi : total:m51_12, partial:m51_15 -# 51| m51_17(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_10 -# 51| m51_18(unknown) = Chi : total:m51_16, partial:m51_17 -# 51| r51_19(glval) = FunctionAddress[get_x] : -# 51| r51_20(char) = Call[get_x] : func:r51_19, this:r51_10 -# 51| m51_21(unknown) = ^CallSideEffect : ~m51_18 -# 51| m51_22(unknown) = Chi : total:m51_18, partial:m51_21 -# 51| v51_23(void) = ^IndirectReadSideEffect[-1] : &:r51_10, ~m51_22 -# 51| m51_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_10 -# 51| m51_25(unknown) = Chi : total:m51_22, partial:m51_24 -# 51| v51_26(void) = Call[ClassWithConstructor] : func:r51_8, this:r51_5, 0:r51_9, 1:r51_20 -# 51| m51_27(unknown) = ^CallSideEffect : ~m51_25 -# 51| m51_28(unknown) = Chi : total:m51_25, partial:m51_27 -# 51| m51_29(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r51_5 -# 51| m51_30(unknown) = Chi : total:m51_28, partial:m51_29 -# 51| v51_31(void) = ThrowValue : &:r51_5, ~m51_30 -# 52| r52_1(glval) = VariableAddress[c] : -# 52| r52_2(glval) = FunctionAddress[~ClassWithDestructor2] : -# 52| v52_3(void) = Call[~ClassWithDestructor2] : func:r52_2, this:r52_1 -# 52| m52_4(unknown) = ^CallSideEffect : ~m51_30 -# 52| m52_5(unknown) = Chi : total:m51_30, partial:m52_4 -# 52| v52_6(void) = ^IndirectReadSideEffect[-1] : &:r52_1, ~m52_5 -# 52| m52_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r52_1 -# 52| m52_8(unknown) = Chi : total:m52_5, partial:m52_7 +# 51| r51_5(glval) = VariableAddress[#throw51:9] : +# 51| mu51_6(ClassWithConstructor) = Uninitialized[#throw51:9] : &:r51_5 +# 51| r51_7(glval) = FunctionAddress[ClassWithConstructor] : +# 51| r51_8(char) = Constant[120] : +# 51| r51_9(glval) = VariableAddress[#temp51:41] : +# 51| mu51_10(ClassWithDestructor2) = Uninitialized[#temp51:41] : &:r51_9 +# 51| r51_11(glval) = FunctionAddress[ClassWithDestructor2] : +# 51| v51_12(void) = Call[ClassWithDestructor2] : func:r51_11, this:r51_9 +# 51| mu51_13(unknown) = ^CallSideEffect : ~m? +# 51| mu51_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_9 +# 51| r51_15(glval) = FunctionAddress[get_x] : +# 51| r51_16(char) = Call[get_x] : func:r51_15, this:r51_9 +# 51| mu51_17(unknown) = ^CallSideEffect : ~m? +# 51| v51_18(void) = ^IndirectReadSideEffect[-1] : &:r51_9, ~m? +# 51| mu51_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_9 +# 51| v51_20(void) = Call[ClassWithConstructor] : func:r51_7, this:r51_5, 0:r51_8, 1:r51_16 +# 51| mu51_21(unknown) = ^CallSideEffect : ~m? +# 51| mu51_22(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r51_5 +# 51| v51_23(void) = ThrowValue : &:r51_5, ~m? +# 52| r52_1(glval) = VariableAddress[c] : +# 52| r52_2(glval) = FunctionAddress[~ClassWithDestructor2] : +# 52| v52_3(void) = Call[~ClassWithDestructor2] : func:r52_2, this:r52_1 +# 52| mu52_4(unknown) = ^CallSideEffect : ~m? +# 52| v52_5(void) = ^IndirectReadSideEffect[-1] : &:r52_1, ~m? +# 52| mu52_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r52_1 #-----| C++ Exception -> Block 2 # 51| Block 4 -# 51| r51_32(glval) = VariableAddress[#temp51:75] : -# 51| m51_33(ClassWithDestructor2) = Uninitialized[#temp51:75] : &:r51_32 -# 51| m51_34(unknown) = Chi : total:m50_9, partial:m51_33 -# 51| r51_35(glval) = FunctionAddress[ClassWithDestructor2] : -# 51| v51_36(void) = Call[ClassWithDestructor2] : func:r51_35, this:r51_32 -# 51| m51_37(unknown) = ^CallSideEffect : ~m51_34 -# 51| m51_38(unknown) = Chi : total:m51_34, partial:m51_37 -# 51| m51_39(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_32 -# 51| m51_40(unknown) = Chi : total:m51_38, partial:m51_39 -# 51| r51_41(ClassWithDestructor2) = Load[#temp51:75] : &:r51_32, ~m51_40 -# 51| r51_42(glval) = VariableAddress[#temp51:5] : -# 51| m51_43(ClassWithDestructor2) = Store[#temp51:5] : &:r51_42, r51_41 -# 51| r51_44(glval) = VariableAddress[#temp51:5] : -# 51| r51_45(ClassWithDestructor2) = Load[#temp51:5] : &:r51_44, m51_43 -# 51| m51_46(ClassWithDestructor2) = Store[#temp51:5] : &:r51_1, r51_45 -# 52| v52_9(void) = NoOp : -# 52| r52_10(glval) = VariableAddress[c] : -# 52| r52_11(glval) = FunctionAddress[~ClassWithDestructor2] : -# 52| v52_12(void) = Call[~ClassWithDestructor2] : func:r52_11, this:r52_10 -# 52| m52_13(unknown) = ^CallSideEffect : ~m51_40 -# 52| m52_14(unknown) = Chi : total:m51_40, partial:m52_13 -# 52| v52_15(void) = ^IndirectReadSideEffect[-1] : &:r52_10, ~m52_14 -# 52| m52_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r52_10 -# 52| m52_17(unknown) = Chi : total:m52_14, partial:m52_16 -# 49| v49_11(void) = ReturnVoid : +# 51| r51_24(glval) = VariableAddress[#temp51:75] : +# 51| mu51_25(ClassWithDestructor2) = Uninitialized[#temp51:75] : &:r51_24 +# 51| r51_26(glval) = FunctionAddress[ClassWithDestructor2] : +# 51| v51_27(void) = Call[ClassWithDestructor2] : func:r51_26, this:r51_24 +# 51| mu51_28(unknown) = ^CallSideEffect : ~m? +# 51| mu51_29(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_24 +# 51| r51_30(ClassWithDestructor2) = Load[#temp51:75] : &:r51_24, ~m? +# 51| r51_31(glval) = VariableAddress[#temp51:5] : +# 51| m51_32(ClassWithDestructor2) = Store[#temp51:5] : &:r51_31, r51_30 +# 51| r51_33(glval) = VariableAddress[#temp51:5] : +# 51| r51_34(ClassWithDestructor2) = Load[#temp51:5] : &:r51_33, m51_32 +# 51| m51_35(ClassWithDestructor2) = Store[#temp51:5] : &:r51_1, r51_34 +# 52| v52_7(void) = NoOp : +# 52| r52_8(glval) = VariableAddress[c] : +# 52| r52_9(glval) = FunctionAddress[~ClassWithDestructor2] : +# 52| v52_10(void) = Call[~ClassWithDestructor2] : func:r52_9, this:r52_8 +# 52| mu52_11(unknown) = ^CallSideEffect : ~m? +# 52| v52_12(void) = ^IndirectReadSideEffect[-1] : &:r52_8, ~m? +# 52| mu52_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r52_8 +# 49| v49_9(void) = ReturnVoid : #-----| Goto -> Block 1 # 54| void temp_test8(bool) # 54| Block 0 # 54| v54_1(void) = EnterFunction : -# 54| m54_2(unknown) = AliasedDefinition : -# 54| m54_3(unknown) = InitializeNonLocal : -# 54| m54_4(unknown) = Chi : total:m54_2, partial:m54_3 -# 54| r54_5(glval) = VariableAddress[b] : -# 54| m54_6(bool) = InitializeParameter[b] : &:r54_5 +# 54| mu54_2(unknown) = AliasedDefinition : +# 54| mu54_3(unknown) = InitializeNonLocal : +# 54| r54_4(glval) = VariableAddress[b] : +# 54| m54_5(bool) = InitializeParameter[b] : &:r54_4 # 55| r55_1(glval) = VariableAddress[#temp55:5] : # 55| r55_2(glval) = VariableAddress[b] : -# 55| r55_3(bool) = Load[b] : &:r55_2, m54_6 +# 55| r55_3(bool) = Load[b] : &:r55_2, m54_5 # 55| v55_4(void) = ConditionalBranch : r55_3 #-----| False -> Block 4 #-----| True -> Block 3 # 54| Block 1 -# 54| m54_7(unknown) = Phi : from 2:~m55_30, from 4:~m55_40 -# 54| v54_8(void) = AliasedUse : ~m54_7 -# 54| v54_9(void) = ExitFunction : +# 54| v54_6(void) = AliasedUse : ~m? +# 54| v54_7(void) = ExitFunction : # 54| Block 2 -# 54| v54_10(void) = Unwind : +# 54| v54_8(void) = Unwind : #-----| Goto -> Block 1 # 55| Block 3 -# 55| r55_5(glval) = VariableAddress[#throw55:9] : -# 55| m55_6(ClassWithConstructor) = Uninitialized[#throw55:9] : &:r55_5 -# 55| m55_7(unknown) = Chi : total:m54_4, partial:m55_6 -# 55| r55_8(glval) = FunctionAddress[ClassWithConstructor] : -# 55| r55_9(char) = Constant[120] : -# 55| r55_10(glval) = VariableAddress[#temp55:41] : -# 55| m55_11(ClassWithDestructor2) = Uninitialized[#temp55:41] : &:r55_10 -# 55| m55_12(unknown) = Chi : total:m55_7, partial:m55_11 -# 55| r55_13(glval) = FunctionAddress[ClassWithDestructor2] : -# 55| v55_14(void) = Call[ClassWithDestructor2] : func:r55_13, this:r55_10 -# 55| m55_15(unknown) = ^CallSideEffect : ~m55_12 -# 55| m55_16(unknown) = Chi : total:m55_12, partial:m55_15 -# 55| m55_17(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_10 -# 55| m55_18(unknown) = Chi : total:m55_16, partial:m55_17 -# 55| r55_19(glval) = FunctionAddress[get_x] : -# 55| r55_20(char) = Call[get_x] : func:r55_19, this:r55_10 -# 55| m55_21(unknown) = ^CallSideEffect : ~m55_18 -# 55| m55_22(unknown) = Chi : total:m55_18, partial:m55_21 -# 55| v55_23(void) = ^IndirectReadSideEffect[-1] : &:r55_10, ~m55_22 -# 55| m55_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_10 -# 55| m55_25(unknown) = Chi : total:m55_22, partial:m55_24 -# 55| v55_26(void) = Call[ClassWithConstructor] : func:r55_8, this:r55_5, 0:r55_9, 1:r55_20 -# 55| m55_27(unknown) = ^CallSideEffect : ~m55_25 -# 55| m55_28(unknown) = Chi : total:m55_25, partial:m55_27 -# 55| m55_29(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r55_5 -# 55| m55_30(unknown) = Chi : total:m55_28, partial:m55_29 -# 55| v55_31(void) = ThrowValue : &:r55_5, ~m55_30 +# 55| r55_5(glval) = VariableAddress[#throw55:9] : +# 55| mu55_6(ClassWithConstructor) = Uninitialized[#throw55:9] : &:r55_5 +# 55| r55_7(glval) = FunctionAddress[ClassWithConstructor] : +# 55| r55_8(char) = Constant[120] : +# 55| r55_9(glval) = VariableAddress[#temp55:41] : +# 55| mu55_10(ClassWithDestructor2) = Uninitialized[#temp55:41] : &:r55_9 +# 55| r55_11(glval) = FunctionAddress[ClassWithDestructor2] : +# 55| v55_12(void) = Call[ClassWithDestructor2] : func:r55_11, this:r55_9 +# 55| mu55_13(unknown) = ^CallSideEffect : ~m? +# 55| mu55_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_9 +# 55| r55_15(glval) = FunctionAddress[get_x] : +# 55| r55_16(char) = Call[get_x] : func:r55_15, this:r55_9 +# 55| mu55_17(unknown) = ^CallSideEffect : ~m? +# 55| v55_18(void) = ^IndirectReadSideEffect[-1] : &:r55_9, ~m? +# 55| mu55_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_9 +# 55| v55_20(void) = Call[ClassWithConstructor] : func:r55_7, this:r55_5, 0:r55_8, 1:r55_16 +# 55| mu55_21(unknown) = ^CallSideEffect : ~m? +# 55| mu55_22(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r55_5 +# 55| v55_23(void) = ThrowValue : &:r55_5, ~m? #-----| C++ Exception -> Block 2 # 55| Block 4 -# 55| r55_32(glval) = VariableAddress[#temp55:75] : -# 55| m55_33(ClassWithDestructor2) = Uninitialized[#temp55:75] : &:r55_32 -# 55| m55_34(unknown) = Chi : total:m54_4, partial:m55_33 -# 55| r55_35(glval) = FunctionAddress[ClassWithDestructor2] : -# 55| v55_36(void) = Call[ClassWithDestructor2] : func:r55_35, this:r55_32 -# 55| m55_37(unknown) = ^CallSideEffect : ~m55_34 -# 55| m55_38(unknown) = Chi : total:m55_34, partial:m55_37 -# 55| m55_39(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_32 -# 55| m55_40(unknown) = Chi : total:m55_38, partial:m55_39 -# 55| r55_41(ClassWithDestructor2) = Load[#temp55:75] : &:r55_32, ~m55_40 -# 55| r55_42(glval) = VariableAddress[#temp55:5] : -# 55| m55_43(ClassWithDestructor2) = Store[#temp55:5] : &:r55_42, r55_41 -# 55| r55_44(glval) = VariableAddress[#temp55:5] : -# 55| r55_45(ClassWithDestructor2) = Load[#temp55:5] : &:r55_44, m55_43 -# 55| m55_46(ClassWithDestructor2) = Store[#temp55:5] : &:r55_1, r55_45 +# 55| r55_24(glval) = VariableAddress[#temp55:75] : +# 55| mu55_25(ClassWithDestructor2) = Uninitialized[#temp55:75] : &:r55_24 +# 55| r55_26(glval) = FunctionAddress[ClassWithDestructor2] : +# 55| v55_27(void) = Call[ClassWithDestructor2] : func:r55_26, this:r55_24 +# 55| mu55_28(unknown) = ^CallSideEffect : ~m? +# 55| mu55_29(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_24 +# 55| r55_30(ClassWithDestructor2) = Load[#temp55:75] : &:r55_24, ~m? +# 55| r55_31(glval) = VariableAddress[#temp55:5] : +# 55| m55_32(ClassWithDestructor2) = Store[#temp55:5] : &:r55_31, r55_30 +# 55| r55_33(glval) = VariableAddress[#temp55:5] : +# 55| r55_34(ClassWithDestructor2) = Load[#temp55:5] : &:r55_33, m55_32 +# 55| m55_35(ClassWithDestructor2) = Store[#temp55:5] : &:r55_1, r55_34 # 56| v56_1(void) = NoOp : -# 54| v54_11(void) = ReturnVoid : +# 54| v54_9(void) = ReturnVoid : #-----| Goto -> Block 1 # 58| void temp_test8_simple(bool) # 58| Block 0 # 58| v58_1(void) = EnterFunction : -# 58| m58_2(unknown) = AliasedDefinition : -# 58| m58_3(unknown) = InitializeNonLocal : -# 58| m58_4(unknown) = Chi : total:m58_2, partial:m58_3 -# 58| r58_5(glval) = VariableAddress[b] : -# 58| m58_6(bool) = InitializeParameter[b] : &:r58_5 +# 58| mu58_2(unknown) = AliasedDefinition : +# 58| mu58_3(unknown) = InitializeNonLocal : +# 58| r58_4(glval) = VariableAddress[b] : +# 58| m58_5(bool) = InitializeParameter[b] : &:r58_4 # 59| r59_1(glval) = VariableAddress[b] : -# 59| r59_2(bool) = Load[b] : &:r59_1, m58_6 +# 59| r59_2(bool) = Load[b] : &:r59_1, m58_5 # 59| v59_3(void) = ConditionalBranch : r59_2 #-----| False -> Block 4 #-----| True -> Block 3 # 58| Block 1 -# 58| m58_7(unknown) = Phi : from 2:~m59_20, from 4:~m58_4 -# 58| v58_8(void) = AliasedUse : ~m58_7 -# 58| v58_9(void) = ExitFunction : +# 58| v58_6(void) = AliasedUse : ~m? +# 58| v58_7(void) = ExitFunction : # 58| Block 2 -# 58| v58_10(void) = Unwind : +# 58| v58_8(void) = Unwind : #-----| Goto -> Block 1 # 59| Block 3 # 59| r59_4(glval) = VariableAddress[#throw59:9] : # 59| r59_5(glval) = VariableAddress[#temp59:15] : -# 59| m59_6(ClassWithDestructor2) = Uninitialized[#temp59:15] : &:r59_5 -# 59| m59_7(unknown) = Chi : total:m58_4, partial:m59_6 -# 59| r59_8(glval) = FunctionAddress[ClassWithDestructor2] : -# 59| v59_9(void) = Call[ClassWithDestructor2] : func:r59_8, this:r59_5 -# 59| m59_10(unknown) = ^CallSideEffect : ~m59_7 -# 59| m59_11(unknown) = Chi : total:m59_7, partial:m59_10 -# 59| m59_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r59_5 -# 59| m59_13(unknown) = Chi : total:m59_11, partial:m59_12 -# 59| r59_14(glval) = FunctionAddress[get_x] : -# 59| r59_15(char) = Call[get_x] : func:r59_14, this:r59_5 -# 59| m59_16(unknown) = ^CallSideEffect : ~m59_13 -# 59| m59_17(unknown) = Chi : total:m59_13, partial:m59_16 -# 59| v59_18(void) = ^IndirectReadSideEffect[-1] : &:r59_5, ~m59_17 -# 59| m59_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r59_5 -# 59| m59_20(unknown) = Chi : total:m59_17, partial:m59_19 -# 59| m59_21(char) = Store[#throw59:9] : &:r59_4, r59_15 -# 59| v59_22(void) = ThrowValue : &:r59_4, m59_21 +# 59| mu59_6(ClassWithDestructor2) = Uninitialized[#temp59:15] : &:r59_5 +# 59| r59_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 59| v59_8(void) = Call[ClassWithDestructor2] : func:r59_7, this:r59_5 +# 59| mu59_9(unknown) = ^CallSideEffect : ~m? +# 59| mu59_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r59_5 +# 59| r59_11(glval) = FunctionAddress[get_x] : +# 59| r59_12(char) = Call[get_x] : func:r59_11, this:r59_5 +# 59| mu59_13(unknown) = ^CallSideEffect : ~m? +# 59| v59_14(void) = ^IndirectReadSideEffect[-1] : &:r59_5, ~m? +# 59| mu59_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r59_5 +# 59| m59_16(char) = Store[#throw59:9] : &:r59_4, r59_12 +# 59| v59_17(void) = ThrowValue : &:r59_4, m59_16 #-----| C++ Exception -> Block 2 # 59| Block 4 -# 59| r59_23(char) = Constant[97] : -# 59| r59_24(glval) = VariableAddress[#temp59:5] : -# 59| m59_25(char) = Store[#temp59:5] : &:r59_24, r59_23 -# 59| r59_26(glval) = VariableAddress[#temp59:5] : -# 59| r59_27(char) = Load[#temp59:5] : &:r59_26, m59_25 +# 59| r59_18(char) = Constant[97] : +# 59| r59_19(glval) = VariableAddress[#temp59:5] : +# 59| m59_20(char) = Store[#temp59:5] : &:r59_19, r59_18 +# 59| r59_21(glval) = VariableAddress[#temp59:5] : +# 59| r59_22(char) = Load[#temp59:5] : &:r59_21, m59_20 # 60| v60_1(void) = NoOp : -# 58| v58_11(void) = ReturnVoid : +# 58| v58_9(void) = ReturnVoid : #-----| Goto -> Block 1 # 70| bool conditional_temp_via_conjunction(bool) # 70| Block 0 # 70| v70_1(void) = EnterFunction : -# 70| m70_2(unknown) = AliasedDefinition : -# 70| m70_3(unknown) = InitializeNonLocal : -# 70| m70_4(unknown) = Chi : total:m70_2, partial:m70_3 -# 70| r70_5(glval) = VariableAddress[b] : -# 70| m70_6(bool) = InitializeParameter[b] : &:r70_5 +# 70| mu70_2(unknown) = AliasedDefinition : +# 70| mu70_3(unknown) = InitializeNonLocal : +# 70| r70_4(glval) = VariableAddress[b] : +# 70| m70_5(bool) = InitializeParameter[b] : &:r70_4 # 72| r72_1(glval) = VariableAddress[#return] : # 72| r72_2(glval) = VariableAddress[b] : -# 72| r72_3(bool) = Load[b] : &:r72_2, m70_6 +# 72| r72_3(bool) = Load[b] : &:r72_2, m70_5 # 72| v72_4(void) = ConditionalBranch : r72_3 #-----| False -> Block 1 #-----| True -> Block 4 # 72| Block 1 -# 72| m72_5(unknown) = Phi : from 0:~m70_4, from 4:~m72_33 -# 72| r72_6(glval) = VariableAddress[#temp72:12] : -# 72| r72_7(bool) = Constant[0] : -# 72| m72_8(bool) = Store[#temp72:12] : &:r72_6, r72_7 +# 72| r72_5(glval) = VariableAddress[#temp72:12] : +# 72| r72_6(bool) = Constant[0] : +# 72| m72_7(bool) = Store[#temp72:12] : &:r72_5, r72_6 #-----| Goto -> Block 2 # 72| Block 2 -# 72| m72_9(unknown) = Phi : from 1:~m72_5, from 3:~m72_33 -# 72| m72_10(bool) = Phi : from 1:m72_8, from 3:m72_16 -# 72| r72_11(glval) = VariableAddress[#temp72:12] : -# 72| r72_12(bool) = Load[#temp72:12] : &:r72_11, m72_10 -# 72| m72_13(bool) = Store[#return] : &:r72_1, r72_12 -# 70| r70_7(glval) = VariableAddress[#return] : -# 70| v70_8(void) = ReturnValue : &:r70_7, m72_13 -# 70| v70_9(void) = AliasedUse : ~m72_9 -# 70| v70_10(void) = ExitFunction : +# 72| m72_8(bool) = Phi : from 1:m72_7, from 3:m72_14 +# 72| r72_9(glval) = VariableAddress[#temp72:12] : +# 72| r72_10(bool) = Load[#temp72:12] : &:r72_9, m72_8 +# 72| m72_11(bool) = Store[#return] : &:r72_1, r72_10 +# 70| r70_6(glval) = VariableAddress[#return] : +# 70| v70_7(void) = ReturnValue : &:r70_6, m72_11 +# 70| v70_8(void) = AliasedUse : ~m? +# 70| v70_9(void) = ExitFunction : # 72| Block 3 -# 72| r72_14(glval) = VariableAddress[#temp72:12] : -# 72| r72_15(bool) = Constant[1] : -# 72| m72_16(bool) = Store[#temp72:12] : &:r72_14, r72_15 +# 72| r72_12(glval) = VariableAddress[#temp72:12] : +# 72| r72_13(bool) = Constant[1] : +# 72| m72_14(bool) = Store[#temp72:12] : &:r72_12, r72_13 #-----| Goto -> Block 2 # 72| Block 4 -# 72| r72_17(glval) = FunctionAddress[const_ref_string] : -# 72| r72_18(glval) = VariableAddress[#temp72:34] : -# 72| m72_19(string) = Uninitialized[#temp72:34] : &:r72_18 -# 72| m72_20(unknown) = Chi : total:m70_4, partial:m72_19 -# 72| r72_21(glval) = FunctionAddress[string] : -# 72| r72_22(glval) = StringConstant[""] : -# 72| r72_23(char *) = Convert : r72_22 -# 72| v72_24(void) = Call[string] : func:r72_21, this:r72_18, 0:r72_23 -# 72| m72_25(unknown) = ^CallSideEffect : ~m72_20 -# 72| m72_26(unknown) = Chi : total:m72_20, partial:m72_25 -# 72| v72_27(void) = ^BufferReadSideEffect[0] : &:r72_23, ~m70_3 -# 72| m72_28(string) = ^IndirectMayWriteSideEffect[-1] : &:r72_18 -# 72| m72_29(unknown) = Chi : total:m72_26, partial:m72_28 -# 72| r72_30(string &) = CopyValue : r72_18 -# 72| r72_31(bool) = Call[const_ref_string] : func:r72_17, 0:r72_30 -# 72| m72_32(unknown) = ^CallSideEffect : ~m72_29 -# 72| m72_33(unknown) = Chi : total:m72_29, partial:m72_32 -# 72| v72_34(void) = ^BufferReadSideEffect[0] : &:r72_30, ~m72_33 -# 72| v72_35(void) = ConditionalBranch : r72_31 +# 72| r72_15(glval) = FunctionAddress[const_ref_string] : +# 72| r72_16(glval) = VariableAddress[#temp72:34] : +# 72| mu72_17(string) = Uninitialized[#temp72:34] : &:r72_16 +# 72| r72_18(glval) = FunctionAddress[string] : +# 72| r72_19(glval) = StringConstant[""] : +# 72| r72_20(char *) = Convert : r72_19 +# 72| v72_21(void) = Call[string] : func:r72_18, this:r72_16, 0:r72_20 +# 72| mu72_22(unknown) = ^CallSideEffect : ~m? +# 72| v72_23(void) = ^BufferReadSideEffect[0] : &:r72_20, ~m? +# 72| mu72_24(string) = ^IndirectMayWriteSideEffect[-1] : &:r72_16 +# 72| r72_25(string &) = CopyValue : r72_16 +# 72| r72_26(bool) = Call[const_ref_string] : func:r72_15, 0:r72_25 +# 72| mu72_27(unknown) = ^CallSideEffect : ~m? +# 72| v72_28(void) = ^BufferReadSideEffect[0] : &:r72_25, ~m? +# 72| v72_29(void) = ConditionalBranch : r72_26 #-----| False -> Block 1 #-----| True -> Block 3 # 77| void temp_test9() # 77| Block 0 # 77| v77_1(void) = EnterFunction : -# 77| m77_2(unknown) = AliasedDefinition : -# 77| m77_3(unknown) = InitializeNonLocal : -# 77| m77_4(unknown) = Chi : total:m77_2, partial:m77_3 +# 77| mu77_2(unknown) = AliasedDefinition : +# 77| mu77_3(unknown) = InitializeNonLocal : # 78| r78_1(glval) = VariableAddress[#temp78:5] : # 78| r78_2(glval) = FunctionAddress[make] : # 78| r78_3(ClassWithDestructor2) = Call[make] : func:r78_2 -# 78| m78_4(unknown) = ^CallSideEffect : ~m77_4 -# 78| m78_5(unknown) = Chi : total:m77_4, partial:m78_4 -# 78| m78_6(ClassWithDestructor2) = Store[#temp78:5] : &:r78_1, r78_3 -# 78| m78_7(unknown) = Chi : total:m78_5, partial:m78_6 -# 78| r78_8(glval) = CopyValue : r78_1 -# 78| r78_9(glval) = FunctionAddress[~ClassWithDestructor2] : -# 78| v78_10(void) = Call[~ClassWithDestructor2] : func:r78_9, this:r78_8 -# 78| m78_11(unknown) = ^CallSideEffect : ~m78_7 -# 78| m78_12(unknown) = Chi : total:m78_7, partial:m78_11 -# 78| v78_13(void) = ^IndirectReadSideEffect[-1] : &:r78_8, ~m78_12 -# 78| m78_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r78_8 -# 78| m78_15(unknown) = Chi : total:m78_12, partial:m78_14 +# 78| mu78_4(unknown) = ^CallSideEffect : ~m? +# 78| mu78_5(ClassWithDestructor2) = Store[#temp78:5] : &:r78_1, r78_3 +# 78| r78_6(glval) = CopyValue : r78_1 +# 78| r78_7(glval) = FunctionAddress[~ClassWithDestructor2] : +# 78| v78_8(void) = Call[~ClassWithDestructor2] : func:r78_7, this:r78_6 +# 78| mu78_9(unknown) = ^CallSideEffect : ~m? +# 78| v78_10(void) = ^IndirectReadSideEffect[-1] : &:r78_6, ~m? +# 78| mu78_11(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r78_6 # 79| v79_1(void) = NoOp : -# 77| v77_5(void) = ReturnVoid : -# 77| v77_6(void) = AliasedUse : ~m78_12 -# 77| v77_7(void) = ExitFunction : +# 77| v77_4(void) = ReturnVoid : +# 77| v77_5(void) = AliasedUse : ~m? +# 77| v77_6(void) = ExitFunction : # 81| void temp_test10(int) # 81| Block 0 # 81| v81_1(void) = EnterFunction : -# 81| m81_2(unknown) = AliasedDefinition : -# 81| m81_3(unknown) = InitializeNonLocal : -# 81| m81_4(unknown) = Chi : total:m81_2, partial:m81_3 -# 81| r81_5(glval) = VariableAddress[i] : -# 81| m81_6(int) = InitializeParameter[i] : &:r81_5 +# 81| mu81_2(unknown) = AliasedDefinition : +# 81| mu81_3(unknown) = InitializeNonLocal : +# 81| r81_4(glval) = VariableAddress[i] : +# 81| m81_5(int) = InitializeParameter[i] : &:r81_4 #-----| Goto -> Block 1 # 82| Block 1 -# 82| m82_1(unknown) = Phi : from 0:~m81_4, from 2:~m83_15 -# 82| r82_2(glval) = VariableAddress[i] : -# 82| r82_3(int) = Load[i] : &:r82_2, m81_6 -# 82| r82_4(int) = Constant[10] : -# 82| r82_5(bool) = CompareLT : r82_3, r82_4 -# 82| v82_6(void) = ConditionalBranch : r82_5 +# 82| r82_1(glval) = VariableAddress[i] : +# 82| r82_2(int) = Load[i] : &:r82_1, m81_5 +# 82| r82_3(int) = Constant[10] : +# 82| r82_4(bool) = CompareLT : r82_2, r82_3 +# 82| v82_5(void) = ConditionalBranch : r82_4 #-----| False -> Block 3 #-----| True -> Block 2 @@ -3173,143 +2819,118 @@ destructors_for_temps.cpp: # 83| r83_1(glval) = VariableAddress[#temp83:9] : # 83| r83_2(glval) = FunctionAddress[make] : # 83| r83_3(ClassWithDestructor2) = Call[make] : func:r83_2 -# 83| m83_4(unknown) = ^CallSideEffect : ~m82_1 -# 83| m83_5(unknown) = Chi : total:m82_1, partial:m83_4 -# 83| m83_6(ClassWithDestructor2) = Store[#temp83:9] : &:r83_1, r83_3 -# 83| m83_7(unknown) = Chi : total:m83_5, partial:m83_6 -# 83| r83_8(glval) = CopyValue : r83_1 -# 83| r83_9(glval) = FunctionAddress[~ClassWithDestructor2] : -# 83| v83_10(void) = Call[~ClassWithDestructor2] : func:r83_9, this:r83_8 -# 83| m83_11(unknown) = ^CallSideEffect : ~m83_7 -# 83| m83_12(unknown) = Chi : total:m83_7, partial:m83_11 -# 83| v83_13(void) = ^IndirectReadSideEffect[-1] : &:r83_8, ~m83_12 -# 83| m83_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r83_8 -# 83| m83_15(unknown) = Chi : total:m83_12, partial:m83_14 +# 83| mu83_4(unknown) = ^CallSideEffect : ~m? +# 83| mu83_5(ClassWithDestructor2) = Store[#temp83:9] : &:r83_1, r83_3 +# 83| r83_6(glval) = CopyValue : r83_1 +# 83| r83_7(glval) = FunctionAddress[~ClassWithDestructor2] : +# 83| v83_8(void) = Call[~ClassWithDestructor2] : func:r83_7, this:r83_6 +# 83| mu83_9(unknown) = ^CallSideEffect : ~m? +# 83| v83_10(void) = ^IndirectReadSideEffect[-1] : &:r83_6, ~m? +# 83| mu83_11(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r83_6 #-----| Goto (back edge) -> Block 1 # 85| Block 3 # 85| v85_1(void) = NoOp : -# 81| v81_7(void) = ReturnVoid : -# 81| v81_8(void) = AliasedUse : ~m82_1 -# 81| v81_9(void) = ExitFunction : +# 81| v81_6(void) = ReturnVoid : +# 81| v81_7(void) = AliasedUse : ~m? +# 81| v81_8(void) = ExitFunction : # 94| void temp_test11() # 94| Block 0 # 94| v94_1(void) = EnterFunction : -# 94| m94_2(unknown) = AliasedDefinition : -# 94| m94_3(unknown) = InitializeNonLocal : -# 94| m94_4(unknown) = Chi : total:m94_2, partial:m94_3 +# 94| mu94_2(unknown) = AliasedDefinition : +# 94| mu94_3(unknown) = InitializeNonLocal : # 99| r99_1(glval) = VariableAddress[#temp99:5] : # 99| r99_2(glval) = VariableAddress[#temp99:5] : # 99| r99_3(glval) = FunctionAddress[makeClassWithDestructor3] : # 99| r99_4(ClassWithDestructor3) = Call[makeClassWithDestructor3] : func:r99_3 -# 99| m99_5(unknown) = ^CallSideEffect : ~m94_4 -# 99| m99_6(unknown) = Chi : total:m94_4, partial:m99_5 -# 99| m99_7(ClassWithDestructor3) = Store[#temp99:5] : &:r99_2, r99_4 -# 99| m99_8(unknown) = Chi : total:m99_6, partial:m99_7 -# 99| r99_9(glval) = FunctionAddress[getClassWithDestructor2] : -# 99| r99_10(ClassWithDestructor2) = Call[getClassWithDestructor2] : func:r99_9, this:r99_2 -# 99| m99_11(unknown) = ^CallSideEffect : ~m99_8 -# 99| m99_12(unknown) = Chi : total:m99_8, partial:m99_11 -# 99| v99_13(void) = ^IndirectReadSideEffect[-1] : &:r99_2, ~m99_12 -# 99| m99_14(ClassWithDestructor3) = ^IndirectMayWriteSideEffect[-1] : &:r99_2 -# 99| m99_15(unknown) = Chi : total:m99_12, partial:m99_14 -# 99| m99_16(ClassWithDestructor2) = Store[#temp99:5] : &:r99_1, r99_10 -# 99| m99_17(unknown) = Chi : total:m99_15, partial:m99_16 -# 99| r99_18(glval) = CopyValue : r99_1 -# 99| r99_19(glval) = FunctionAddress[~ClassWithDestructor2] : -# 99| v99_20(void) = Call[~ClassWithDestructor2] : func:r99_19, this:r99_18 -# 99| m99_21(unknown) = ^CallSideEffect : ~m99_17 -# 99| m99_22(unknown) = Chi : total:m99_17, partial:m99_21 -# 99| v99_23(void) = ^IndirectReadSideEffect[-1] : &:r99_18, ~m99_22 -# 99| m99_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r99_18 -# 99| m99_25(unknown) = Chi : total:m99_22, partial:m99_24 -# 99| r99_26(glval) = CopyValue : r99_2 -# 99| r99_27(glval) = FunctionAddress[~ClassWithDestructor3] : -# 99| v99_28(void) = Call[~ClassWithDestructor3] : func:r99_27, this:r99_26 -# 99| m99_29(unknown) = ^CallSideEffect : ~m99_25 -# 99| m99_30(unknown) = Chi : total:m99_25, partial:m99_29 -# 99| v99_31(void) = ^IndirectReadSideEffect[-1] : &:r99_26, ~m99_30 -# 99| m99_32(ClassWithDestructor3) = ^IndirectMayWriteSideEffect[-1] : &:r99_26 -# 99| m99_33(unknown) = Chi : total:m99_30, partial:m99_32 +# 99| mu99_5(unknown) = ^CallSideEffect : ~m? +# 99| mu99_6(ClassWithDestructor3) = Store[#temp99:5] : &:r99_2, r99_4 +# 99| r99_7(glval) = FunctionAddress[getClassWithDestructor2] : +# 99| r99_8(ClassWithDestructor2) = Call[getClassWithDestructor2] : func:r99_7, this:r99_2 +# 99| mu99_9(unknown) = ^CallSideEffect : ~m? +# 99| v99_10(void) = ^IndirectReadSideEffect[-1] : &:r99_2, ~m? +# 99| mu99_11(ClassWithDestructor3) = ^IndirectMayWriteSideEffect[-1] : &:r99_2 +# 99| mu99_12(ClassWithDestructor2) = Store[#temp99:5] : &:r99_1, r99_8 +# 99| r99_13(glval) = CopyValue : r99_1 +# 99| r99_14(glval) = FunctionAddress[~ClassWithDestructor2] : +# 99| v99_15(void) = Call[~ClassWithDestructor2] : func:r99_14, this:r99_13 +# 99| mu99_16(unknown) = ^CallSideEffect : ~m? +# 99| v99_17(void) = ^IndirectReadSideEffect[-1] : &:r99_13, ~m? +# 99| mu99_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r99_13 +# 99| r99_19(glval) = CopyValue : r99_2 +# 99| r99_20(glval) = FunctionAddress[~ClassWithDestructor3] : +# 99| v99_21(void) = Call[~ClassWithDestructor3] : func:r99_20, this:r99_19 +# 99| mu99_22(unknown) = ^CallSideEffect : ~m? +# 99| v99_23(void) = ^IndirectReadSideEffect[-1] : &:r99_19, ~m? +# 99| mu99_24(ClassWithDestructor3) = ^IndirectMayWriteSideEffect[-1] : &:r99_19 # 100| v100_1(void) = NoOp : -# 94| v94_5(void) = ReturnVoid : -# 94| v94_6(void) = AliasedUse : ~m99_30 -# 94| v94_7(void) = ExitFunction : +# 94| v94_4(void) = ReturnVoid : +# 94| v94_5(void) = AliasedUse : ~m? +# 94| v94_6(void) = ExitFunction : # 102| void temp_test12(ClassWithDestructor3) # 102| Block 0 # 102| v102_1(void) = EnterFunction : -# 102| m102_2(unknown) = AliasedDefinition : -# 102| m102_3(unknown) = InitializeNonLocal : -# 102| m102_4(unknown) = Chi : total:m102_2, partial:m102_3 -# 102| r102_5(glval) = VariableAddress[x] : -# 102| m102_6(ClassWithDestructor3) = InitializeParameter[x] : &:r102_5 -# 102| m102_7(unknown) = Chi : total:m102_4, partial:m102_6 +# 102| mu102_2(unknown) = AliasedDefinition : +# 102| mu102_3(unknown) = InitializeNonLocal : +# 102| r102_4(glval) = VariableAddress[x] : +# 102| mu102_5(ClassWithDestructor3) = InitializeParameter[x] : &:r102_4 # 103| r103_1(glval) = VariableAddress[#temp103:5] : # 103| r103_2(glval) = VariableAddress[x] : # 103| r103_3(glval) = FunctionAddress[getClassWithDestructor2] : # 103| r103_4(ClassWithDestructor2) = Call[getClassWithDestructor2] : func:r103_3, this:r103_2 -# 103| m103_5(unknown) = ^CallSideEffect : ~m102_7 -# 103| m103_6(unknown) = Chi : total:m102_7, partial:m103_5 -# 103| v103_7(void) = ^IndirectReadSideEffect[-1] : &:r103_2, ~m103_6 -# 103| m103_8(ClassWithDestructor3) = ^IndirectMayWriteSideEffect[-1] : &:r103_2 -# 103| m103_9(unknown) = Chi : total:m103_6, partial:m103_8 -# 103| m103_10(ClassWithDestructor2) = Store[#temp103:5] : &:r103_1, r103_4 -# 103| m103_11(unknown) = Chi : total:m103_9, partial:m103_10 -# 103| r103_12(glval) = FunctionAddress[get_x] : -# 103| r103_13(char) = Call[get_x] : func:r103_12, this:r103_1 -# 103| m103_14(unknown) = ^CallSideEffect : ~m103_11 -# 103| m103_15(unknown) = Chi : total:m103_11, partial:m103_14 -# 103| v103_16(void) = ^IndirectReadSideEffect[-1] : &:r103_1, ~m103_15 -# 103| m103_17(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r103_1 -# 103| m103_18(unknown) = Chi : total:m103_15, partial:m103_17 -# 103| r103_19(int) = Convert : r103_13 -# 103| r103_20(int) = Constant[5] : -# 103| r103_21(int) = Add : r103_19, r103_20 -# 103| r103_22(glval) = CopyValue : r103_1 -# 103| r103_23(glval) = FunctionAddress[~ClassWithDestructor2] : -# 103| v103_24(void) = Call[~ClassWithDestructor2] : func:r103_23, this:r103_22 -# 103| m103_25(unknown) = ^CallSideEffect : ~m103_18 -# 103| m103_26(unknown) = Chi : total:m103_18, partial:m103_25 -# 103| v103_27(void) = ^IndirectReadSideEffect[-1] : &:r103_22, ~m103_26 -# 103| m103_28(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r103_22 -# 103| m103_29(unknown) = Chi : total:m103_26, partial:m103_28 +# 103| mu103_5(unknown) = ^CallSideEffect : ~m? +# 103| v103_6(void) = ^IndirectReadSideEffect[-1] : &:r103_2, ~m? +# 103| mu103_7(ClassWithDestructor3) = ^IndirectMayWriteSideEffect[-1] : &:r103_2 +# 103| mu103_8(ClassWithDestructor2) = Store[#temp103:5] : &:r103_1, r103_4 +# 103| r103_9(glval) = FunctionAddress[get_x] : +# 103| r103_10(char) = Call[get_x] : func:r103_9, this:r103_1 +# 103| mu103_11(unknown) = ^CallSideEffect : ~m? +# 103| v103_12(void) = ^IndirectReadSideEffect[-1] : &:r103_1, ~m? +# 103| mu103_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r103_1 +# 103| r103_14(int) = Convert : r103_10 +# 103| r103_15(int) = Constant[5] : +# 103| r103_16(int) = Add : r103_14, r103_15 +# 103| r103_17(glval) = CopyValue : r103_1 +# 103| r103_18(glval) = FunctionAddress[~ClassWithDestructor2] : +# 103| v103_19(void) = Call[~ClassWithDestructor2] : func:r103_18, this:r103_17 +# 103| mu103_20(unknown) = ^CallSideEffect : ~m? +# 103| v103_21(void) = ^IndirectReadSideEffect[-1] : &:r103_17, ~m? +# 103| mu103_22(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r103_17 # 104| v104_1(void) = NoOp : -# 102| v102_8(void) = ReturnVoid : -# 102| v102_9(void) = AliasedUse : ~m103_26 -# 102| v102_10(void) = ExitFunction : +# 102| v102_6(void) = ReturnVoid : +# 102| v102_7(void) = AliasedUse : ~m? +# 102| v102_8(void) = ExitFunction : generic.c: # 1| void c11_generic_test_with_load(unsigned int, int) # 1| Block 0 # 1| v1_1(void) = EnterFunction : -# 1| m1_2(unknown) = AliasedDefinition : -# 1| m1_3(unknown) = InitializeNonLocal : -# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 -# 1| r1_5(glval) = VariableAddress[x] : -# 1| m1_6(unsigned int) = InitializeParameter[x] : &:r1_5 -# 1| r1_7(glval) = VariableAddress[y] : -# 1| m1_8(int) = InitializeParameter[y] : &:r1_7 +# 1| mu1_2(unknown) = AliasedDefinition : +# 1| mu1_3(unknown) = InitializeNonLocal : +# 1| r1_4(glval) = VariableAddress[x] : +# 1| m1_5(unsigned int) = InitializeParameter[x] : &:r1_4 +# 1| r1_6(glval) = VariableAddress[y] : +# 1| m1_7(int) = InitializeParameter[y] : &:r1_6 # 2| r2_1(glval) = VariableAddress[r] : # 2| m2_2(unsigned int) = Uninitialized[r] : &:r2_1 # 3| r3_1(glval) = VariableAddress[x] : -# 3| r3_2(unsigned int) = Load[x] : &:r3_1, m1_6 +# 3| r3_2(unsigned int) = Load[x] : &:r3_1, m1_5 # 3| r3_3(unsigned int) = Constant[1] : # 3| r3_4(unsigned int) = Add : r3_2, r3_3 # 3| r3_5(glval) = VariableAddress[r] : # 3| m3_6(unsigned int) = Store[r] : &:r3_5, r3_4 # 4| v4_1(void) = NoOp : -# 1| v1_9(void) = ReturnVoid : -# 1| v1_10(void) = AliasedUse : m1_3 -# 1| v1_11(void) = ExitFunction : +# 1| v1_8(void) = ReturnVoid : +# 1| v1_9(void) = AliasedUse : ~m? +# 1| v1_10(void) = ExitFunction : # 12| char const* c11_generic_test_with_constant_and_macro() # 12| Block 0 # 12| v12_1(void) = EnterFunction : -# 12| m12_2(unknown) = AliasedDefinition : -# 12| m12_3(unknown) = InitializeNonLocal : -# 12| m12_4(unknown) = Chi : total:m12_2, partial:m12_3 +# 12| mu12_2(unknown) = AliasedDefinition : +# 12| mu12_3(unknown) = InitializeNonLocal : # 14| r14_1(glval) = VariableAddress[i] : # 14| m14_2(int) = Uninitialized[i] : &:r14_1 # 16| r16_1(glval) = VariableAddress[#return] : @@ -3317,17 +2938,16 @@ generic.c: # 16| r16_3(char *) = Convert : r16_2 # 16| r16_4(char *) = Convert : r16_3 # 16| m16_5(char *) = Store[#return] : &:r16_1, r16_4 -# 12| r12_5(glval) = VariableAddress[#return] : -# 12| v12_6(void) = ReturnValue : &:r12_5, m16_5 -# 12| v12_7(void) = AliasedUse : m12_3 -# 12| v12_8(void) = ExitFunction : +# 12| r12_4(glval) = VariableAddress[#return] : +# 12| v12_5(void) = ReturnValue : &:r12_4, m16_5 +# 12| v12_6(void) = AliasedUse : ~m? +# 12| v12_7(void) = ExitFunction : # 19| char const* c11_generic_test_with_constant_and_no_macro() # 19| Block 0 # 19| v19_1(void) = EnterFunction : -# 19| m19_2(unknown) = AliasedDefinition : -# 19| m19_3(unknown) = InitializeNonLocal : -# 19| m19_4(unknown) = Chi : total:m19_2, partial:m19_3 +# 19| mu19_2(unknown) = AliasedDefinition : +# 19| mu19_3(unknown) = InitializeNonLocal : # 21| r21_1(glval) = VariableAddress[i] : # 21| m21_2(int) = Uninitialized[i] : &:r21_1 # 23| r23_1(glval) = VariableAddress[#return] : @@ -3335,38 +2955,36 @@ generic.c: # 23| r23_3(char *) = Convert : r23_2 # 23| r23_4(char *) = Convert : r23_3 # 23| m23_5(char *) = Store[#return] : &:r23_1, r23_4 -# 19| r19_5(glval) = VariableAddress[#return] : -# 19| v19_6(void) = ReturnValue : &:r19_5, m23_5 -# 19| v19_7(void) = AliasedUse : m19_3 -# 19| v19_8(void) = ExitFunction : +# 19| r19_4(glval) = VariableAddress[#return] : +# 19| v19_5(void) = ReturnValue : &:r19_4, m23_5 +# 19| v19_6(void) = AliasedUse : ~m? +# 19| v19_7(void) = ExitFunction : # 26| void c11_generic_test_test_with_cast(int) # 26| Block 0 # 26| v26_1(void) = EnterFunction : -# 26| m26_2(unknown) = AliasedDefinition : -# 26| m26_3(unknown) = InitializeNonLocal : -# 26| m26_4(unknown) = Chi : total:m26_2, partial:m26_3 -# 26| r26_5(glval) = VariableAddress[y] : -# 26| m26_6(int) = InitializeParameter[y] : &:r26_5 +# 26| mu26_2(unknown) = AliasedDefinition : +# 26| mu26_3(unknown) = InitializeNonLocal : +# 26| r26_4(glval) = VariableAddress[y] : +# 26| m26_5(int) = InitializeParameter[y] : &:r26_4 # 27| r27_1(glval) = VariableAddress[r] : # 27| m27_2(unsigned int) = Uninitialized[r] : &:r27_1 # 28| r28_1(glval) = VariableAddress[y] : -# 28| r28_2(int) = Load[y] : &:r28_1, m26_6 +# 28| r28_2(int) = Load[y] : &:r28_1, m26_5 # 28| r28_3(unsigned int) = Convert : r28_2 # 28| r28_4(glval) = VariableAddress[r] : # 28| m28_5(unsigned int) = Store[r] : &:r28_4, r28_3 # 29| v29_1(void) = NoOp : -# 26| v26_7(void) = ReturnVoid : -# 26| v26_8(void) = AliasedUse : m26_3 -# 26| v26_9(void) = ExitFunction : +# 26| v26_6(void) = ReturnVoid : +# 26| v26_7(void) = AliasedUse : ~m? +# 26| v26_8(void) = ExitFunction : ir-not-microsoft.c: # 1| void gnuConditionalOmittedOperand() # 1| Block 0 # 1| v1_1(void) = EnterFunction : -# 1| m1_2(unknown) = AliasedDefinition : -# 1| m1_3(unknown) = InitializeNonLocal : -# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 +# 1| mu1_2(unknown) = AliasedDefinition : +# 1| mu1_3(unknown) = InitializeNonLocal : # 2| r2_1(glval) = VariableAddress[i] : # 2| m2_2(int) = Uninitialized[i] : &:r2_1 # 2| r2_3(glval) = VariableAddress[j] : @@ -3386,9 +3004,9 @@ ir-not-microsoft.c: # 3| r3_9(glval) = VariableAddress[i] : # 3| m3_10(int) = Store[i] : &:r3_9, r3_8 # 4| v4_1(void) = NoOp : -# 1| v1_5(void) = ReturnVoid : -# 1| v1_6(void) = AliasedUse : m1_3 -# 1| v1_7(void) = ExitFunction : +# 1| v1_4(void) = ReturnVoid : +# 1| v1_5(void) = AliasedUse : ~m? +# 1| v1_6(void) = ExitFunction : # 3| Block 2 # 3| r3_11(glval) = VariableAddress[#temp3:9] : @@ -3404,91 +3022,79 @@ ir-not-microsoft.c: ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 -# 7| v7_1(void) = EnterFunction : -# 7| m7_2(unknown) = AliasedDefinition : -# 7| m7_3(unknown) = InitializeNonLocal : -# 7| m7_4(unknown) = Chi : total:m7_2, partial:m7_3 -# 7| r7_5(glval) = VariableAddress[pos] : -# 7| m7_6(int) = InitializeParameter[pos] : &:r7_5 -# 8| r8_1(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : -# 8| m8_2((unnamed class/struct/union)) = Uninitialized[coords] : &:r8_1 -# 8| m8_3(unknown) = Chi : total:m7_4, partial:m8_2 -# 8| r8_4(glval) = FieldAddress[x] : r8_1 -# 8| r8_5(int) = Constant[0] : -# 8| m8_6(int) = Store[?] : &:r8_4, r8_5 -# 8| m8_7(unknown) = Chi : total:m8_3, partial:m8_6 -# 8| r8_8(glval) = FieldAddress[y] : r8_1 -# 8| r8_9(int) = Constant[0] : -# 8| m8_10(int) = Store[?] : &:r8_8, r8_9 -# 8| m8_11(unknown) = Chi : total:m8_7, partial:m8_10 -# 9| r9_1(glval) = VariableAddress[pos] : -# 9| r9_2(int) = Load[pos] : &:r9_1, m7_6 -# 9| r9_3(int) = Constant[1] : -# 9| r9_4(int) = Add : r9_2, r9_3 -# 9| r9_5(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : -# 9| r9_6(glval) = FieldAddress[y] : r9_5 -# 9| m9_7(int) = Store[?] : &:r9_6, r9_4 -# 9| m9_8(unknown) = Chi : total:m8_11, partial:m9_7 -# 9| r9_9(int) = Load[?] : &:r9_6, m9_7 -# 9| r9_10(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : -# 9| r9_11(glval) = FieldAddress[x] : r9_10 -# 9| m9_12(int) = Store[?] : &:r9_11, r9_9 -# 9| m9_13(unknown) = Chi : total:m9_8, partial:m9_12 -# 10| r10_1(glval) = FunctionAddress[getX] : -# 10| r10_2(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : -# 10| r10_3(struct *) = CopyValue : r10_2 -# 10| r10_4(int) = Call[getX] : func:r10_1, 0:r10_3 -# 10| m10_5(unknown) = ^CallSideEffect : ~m9_13 -# 10| m10_6(unknown) = Chi : total:m9_13, partial:m10_5 -# 10| v10_7(void) = ^BufferReadSideEffect[0] : &:r10_3, ~m10_6 -# 10| m10_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r10_3 -# 10| m10_9(unknown) = Chi : total:m10_6, partial:m10_8 -# 10| r10_10(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : -# 10| r10_11(glval) = FieldAddress[x] : r10_10 -# 10| m10_12(int) = Store[?] : &:r10_11, r10_4 -# 10| m10_13(unknown) = Chi : total:m10_9, partial:m10_12 -# 11| v11_1(void) = NoOp : -# 7| v7_7(void) = ReturnVoid : -# 7| v7_8(void) = AliasedUse : ~m10_6 -# 7| v7_9(void) = ExitFunction : +# 7| v7_1(void) = EnterFunction : +# 7| mu7_2(unknown) = AliasedDefinition : +# 7| mu7_3(unknown) = InitializeNonLocal : +# 7| r7_4(glval) = VariableAddress[pos] : +# 7| m7_5(int) = InitializeParameter[pos] : &:r7_4 +# 8| r8_1(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : +# 8| mu8_2((unnamed class/struct/union)) = Uninitialized[coords] : &:r8_1 +# 8| r8_3(glval) = FieldAddress[x] : r8_1 +# 8| r8_4(int) = Constant[0] : +# 8| mu8_5(int) = Store[?] : &:r8_3, r8_4 +# 8| r8_6(glval) = FieldAddress[y] : r8_1 +# 8| r8_7(int) = Constant[0] : +# 8| mu8_8(int) = Store[?] : &:r8_6, r8_7 +# 9| r9_1(glval) = VariableAddress[pos] : +# 9| r9_2(int) = Load[pos] : &:r9_1, m7_5 +# 9| r9_3(int) = Constant[1] : +# 9| r9_4(int) = Add : r9_2, r9_3 +# 9| r9_5(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : +# 9| r9_6(glval) = FieldAddress[y] : r9_5 +# 9| mu9_7(int) = Store[?] : &:r9_6, r9_4 +# 9| r9_8(int) = Load[?] : &:r9_6, ~m? +# 9| r9_9(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : +# 9| r9_10(glval) = FieldAddress[x] : r9_9 +# 9| mu9_11(int) = Store[?] : &:r9_10, r9_8 +# 10| r10_1(glval) = FunctionAddress[getX] : +# 10| r10_2(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : +# 10| r10_3(struct *) = CopyValue : r10_2 +# 10| r10_4(int) = Call[getX] : func:r10_1, 0:r10_3 +# 10| mu10_5(unknown) = ^CallSideEffect : ~m? +# 10| v10_6(void) = ^BufferReadSideEffect[0] : &:r10_3, ~m? +# 10| mu10_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r10_3 +# 10| r10_8(glval<(unnamed class/struct/union)>) = VariableAddress[coords] : +# 10| r10_9(glval) = FieldAddress[x] : r10_8 +# 10| mu10_10(int) = Store[?] : &:r10_9, r10_4 +# 11| v11_1(void) = NoOp : +# 7| v7_6(void) = ReturnVoid : +# 7| v7_7(void) = AliasedUse : ~m? +# 7| v7_8(void) = ExitFunction : # 13| void CStyleCast(void*) # 13| Block 0 # 13| v13_1(void) = EnterFunction : -# 13| m13_2(unknown) = AliasedDefinition : -# 13| m13_3(unknown) = InitializeNonLocal : -# 13| m13_4(unknown) = Chi : total:m13_2, partial:m13_3 -# 13| r13_5(glval) = VariableAddress[src] : -# 13| m13_6(void *) = InitializeParameter[src] : &:r13_5 -# 13| r13_7(void *) = Load[src] : &:r13_5, m13_6 -# 13| m13_8(unknown) = InitializeIndirection[src] : &:r13_7 +# 13| mu13_2(unknown) = AliasedDefinition : +# 13| mu13_3(unknown) = InitializeNonLocal : +# 13| r13_4(glval) = VariableAddress[src] : +# 13| m13_5(void *) = InitializeParameter[src] : &:r13_4 +# 13| r13_6(void *) = Load[src] : &:r13_4, m13_5 +# 13| mu13_7(unknown) = InitializeIndirection[src] : &:r13_6 # 15| r15_1(glval) = VariableAddress[dst] : # 15| r15_2(glval) = VariableAddress[src] : -# 15| r15_3(void *) = Load[src] : &:r15_2, m13_6 +# 15| r15_3(void *) = Load[src] : &:r15_2, m13_5 # 15| r15_4(char *) = Convert : r15_3 # 15| m15_5(char *) = Store[dst] : &:r15_1, r15_4 # 16| v16_1(void) = NoOp : -# 13| v13_9(void) = ReturnIndirection[src] : &:r13_7, m13_8 -# 13| v13_10(void) = ReturnVoid : -# 13| v13_11(void) = AliasedUse : m13_3 -# 13| v13_12(void) = ExitFunction : +# 13| v13_8(void) = ReturnIndirection[src] : &:r13_6, ~m? +# 13| v13_9(void) = ReturnVoid : +# 13| v13_10(void) = AliasedUse : ~m? +# 13| v13_11(void) = ExitFunction : # 21| int TryExceptTest(int) # 21| Block 0 # 21| v21_1(void) = EnterFunction : -# 21| m21_2(unknown) = AliasedDefinition : -# 21| m21_3(unknown) = InitializeNonLocal : -# 21| m21_4(unknown) = Chi : total:m21_2, partial:m21_3 -# 21| r21_5(glval) = VariableAddress[x] : -# 21| m21_6(int) = InitializeParameter[x] : &:r21_5 +# 21| mu21_2(unknown) = AliasedDefinition : +# 21| mu21_3(unknown) = InitializeNonLocal : +# 21| r21_4(glval) = VariableAddress[x] : +# 21| m21_5(int) = InitializeParameter[x] : &:r21_4 # 22| r22_1(glval) = VariableAddress[localPtr] : # 22| m22_2(int *) = Uninitialized[localPtr] : &:r22_1 # 25| r25_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 25| r25_2(glval) = VariableAddress[x] : -# 25| r25_3(int) = Load[x] : &:r25_2, m21_6 +# 25| r25_3(int) = Load[x] : &:r25_2, m21_5 # 25| v25_4(void) = Call[ExRaiseAccessViolation] : func:r25_1, 0:r25_3 -# 25| m25_5(unknown) = ^CallSideEffect : ~m21_4 -# 25| m25_6(unknown) = Chi : total:m21_4, partial:m25_5 +# 25| mu25_5(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 3 # 26| Block 1 @@ -3517,31 +3123,29 @@ ir.c: # 27| r27_1(glval) = VariableAddress[#return] : # 27| r27_2(int) = Constant[1] : # 27| m27_3(int) = Store[#return] : &:r27_1, r27_2 -# 21| r21_7(glval) = VariableAddress[#return] : -# 21| v21_8(void) = ReturnValue : &:r21_7, m27_3 -# 21| v21_9(void) = AliasedUse : ~m25_6 -# 21| v21_10(void) = ExitFunction : +# 21| r21_6(glval) = VariableAddress[#return] : +# 21| v21_7(void) = ReturnValue : &:r21_6, m27_3 +# 21| v21_8(void) = AliasedUse : ~m? +# 21| v21_9(void) = ExitFunction : # 21| Block 5 -# 21| v21_11(void) = Unreached : +# 21| v21_10(void) = Unreached : # 32| void unexplained_loop_regression() # 32| Block 0 # 32| v32_1(void) = EnterFunction : -# 32| m32_2(unknown) = AliasedDefinition : -# 32| m32_3(unknown) = InitializeNonLocal : -# 32| m32_4(unknown) = Chi : total:m32_2, partial:m32_3 +# 32| mu32_2(unknown) = AliasedDefinition : +# 32| mu32_3(unknown) = InitializeNonLocal : # 36| r36_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 36| r36_2(int) = Constant[0] : # 36| v36_3(void) = Call[ExRaiseAccessViolation] : func:r36_1, 0:r36_2 -# 36| m36_4(unknown) = ^CallSideEffect : ~m32_4 -# 36| m36_5(unknown) = Chi : total:m32_4, partial:m36_4 +# 36| mu36_4(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 4 # 32| Block 1 -# 32| v32_5(void) = Unwind : -# 32| v32_6(void) = AliasedUse : ~m40_5 -# 32| v32_7(void) = ExitFunction : +# 32| v32_4(void) = Unwind : +# 32| v32_5(void) = AliasedUse : ~m? +# 32| v32_6(void) = ExitFunction : # 39| Block 2 # 39| r39_1(int) = Constant[0] : @@ -3569,19 +3173,17 @@ ir.c: # 40| r40_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 40| r40_2(int) = Constant[1] : # 40| v40_3(void) = Call[ExRaiseAccessViolation] : func:r40_1, 0:r40_2 -# 40| m40_4(unknown) = ^CallSideEffect : ~m36_5 -# 40| m40_5(unknown) = Chi : total:m36_5, partial:m40_4 +# 40| mu40_4(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 1 # 32| Block 6 -# 32| v32_8(void) = Unreached : +# 32| v32_7(void) = Unreached : # 44| void try_with_finally() # 44| Block 0 # 44| v44_1(void) = EnterFunction : -# 44| m44_2(unknown) = AliasedDefinition : -# 44| m44_3(unknown) = InitializeNonLocal : -# 44| m44_4(unknown) = Chi : total:m44_2, partial:m44_3 +# 44| mu44_2(unknown) = AliasedDefinition : +# 44| mu44_3(unknown) = InitializeNonLocal : # 46| r46_1(glval) = VariableAddress[x] : # 46| r46_2(int) = Constant[0] : # 46| m46_3(int) = Store[x] : &:r46_1, r46_2 @@ -3592,24 +3194,22 @@ ir.c: # 53| r53_2(glval) = VariableAddress[x] : # 53| m53_3(int) = Store[x] : &:r53_2, r53_1 # 55| v55_1(void) = NoOp : -# 44| v44_5(void) = ReturnVoid : -# 44| v44_6(void) = AliasedUse : m44_3 -# 44| v44_7(void) = ExitFunction : +# 44| v44_4(void) = ReturnVoid : +# 44| v44_5(void) = AliasedUse : ~m? +# 44| v44_6(void) = ExitFunction : # 57| void throw_in_try_with_finally() # 57| Block 0 # 57| v57_1(void) = EnterFunction : -# 57| m57_2(unknown) = AliasedDefinition : -# 57| m57_3(unknown) = InitializeNonLocal : -# 57| m57_4(unknown) = Chi : total:m57_2, partial:m57_3 +# 57| mu57_2(unknown) = AliasedDefinition : +# 57| mu57_3(unknown) = InitializeNonLocal : # 59| r59_1(glval) = VariableAddress[x] : # 59| r59_2(int) = Constant[0] : # 59| m59_3(int) = Store[x] : &:r59_1, r59_2 # 62| r62_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 62| r62_2(int) = Constant[0] : # 62| v62_3(void) = Call[ExRaiseAccessViolation] : func:r62_1, 0:r62_2 -# 62| m62_4(unknown) = ^CallSideEffect : ~m57_4 -# 62| m62_5(unknown) = Chi : total:m57_4, partial:m62_4 +# 62| mu62_4(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 1 # 66| Block 1 @@ -3617,66 +3217,60 @@ ir.c: # 66| r66_2(glval) = VariableAddress[x] : # 66| m66_3(int) = Store[x] : &:r66_2, r66_1 # 68| v68_1(void) = NoOp : -# 57| v57_5(void) = ReturnVoid : -# 57| v57_6(void) = AliasedUse : ~m62_5 -# 57| v57_7(void) = ExitFunction : +# 57| v57_4(void) = ReturnVoid : +# 57| v57_5(void) = AliasedUse : ~m? +# 57| v57_6(void) = ExitFunction : # 70| void throw_in_try_with_throw_in_finally() # 70| Block 0 # 70| v70_1(void) = EnterFunction : -# 70| m70_2(unknown) = AliasedDefinition : -# 70| m70_3(unknown) = InitializeNonLocal : -# 70| m70_4(unknown) = Chi : total:m70_2, partial:m70_3 +# 70| mu70_2(unknown) = AliasedDefinition : +# 70| mu70_3(unknown) = InitializeNonLocal : # 73| r73_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 73| r73_2(int) = Constant[0] : # 73| v73_3(void) = Call[ExRaiseAccessViolation] : func:r73_1, 0:r73_2 -# 73| m73_4(unknown) = ^CallSideEffect : ~m70_4 -# 73| m73_5(unknown) = Chi : total:m70_4, partial:m73_4 +# 73| mu73_4(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 2 # 70| Block 1 -# 70| v70_5(void) = Unwind : -# 70| v70_6(void) = AliasedUse : ~m76_5 -# 70| v70_7(void) = ExitFunction : +# 70| v70_4(void) = Unwind : +# 70| v70_5(void) = AliasedUse : ~m? +# 70| v70_6(void) = ExitFunction : # 76| Block 2 # 76| r76_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 76| r76_2(int) = Constant[0] : # 76| v76_3(void) = Call[ExRaiseAccessViolation] : func:r76_1, 0:r76_2 -# 76| m76_4(unknown) = ^CallSideEffect : ~m73_5 -# 76| m76_5(unknown) = Chi : total:m73_5, partial:m76_4 +# 76| mu76_4(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 1 # 80| void raise_access_violation() # 80| Block 0 # 80| v80_1(void) = EnterFunction : -# 80| m80_2(unknown) = AliasedDefinition : -# 80| m80_3(unknown) = InitializeNonLocal : -# 80| m80_4(unknown) = Chi : total:m80_2, partial:m80_3 +# 80| mu80_2(unknown) = AliasedDefinition : +# 80| mu80_3(unknown) = InitializeNonLocal : # 81| r81_1(glval) = FunctionAddress[ExRaiseAccessViolation] : # 81| r81_2(int) = Constant[1] : # 81| v81_3(void) = Call[ExRaiseAccessViolation] : func:r81_1, 0:r81_2 -# 81| m81_4(unknown) = ^CallSideEffect : ~m80_4 -# 81| m81_5(unknown) = Chi : total:m80_4, partial:m81_4 +# 81| mu81_4(unknown) = ^CallSideEffect : ~m? #-----| SEH Exception -> Block 1 # 80| Block 1 -# 80| v80_5(void) = Unwind : -# 80| v80_6(void) = AliasedUse : ~m81_5 -# 80| v80_7(void) = ExitFunction : +# 80| v80_4(void) = Unwind : +# 80| v80_5(void) = AliasedUse : ~m? +# 80| v80_6(void) = ExitFunction : # 84| void branch_on_integral_in_c(int, int) # 84| Block 0 # 84| v84_1(void) = EnterFunction : -# 84| m84_2(unknown) = AliasedDefinition : -# 84| m84_3(unknown) = InitializeNonLocal : -# 84| m84_4(unknown) = Chi : total:m84_2, partial:m84_3 -# 84| r84_5(glval) = VariableAddress[x1] : -# 84| m84_6(int) = InitializeParameter[x1] : &:r84_5 -# 84| r84_7(glval) = VariableAddress[x2] : -# 84| m84_8(int) = InitializeParameter[x2] : &:r84_7 +# 84| mu84_2(unknown) = AliasedDefinition : +# 84| mu84_3(unknown) = InitializeNonLocal : +# 84| r84_4(glval) = VariableAddress[x1] : +# 84| m84_5(int) = InitializeParameter[x1] : &:r84_4 +# 84| r84_6(glval) = VariableAddress[x2] : +# 84| m84_7(int) = InitializeParameter[x2] : &:r84_6 # 85| r85_1(glval) = VariableAddress[x1] : -# 85| r85_2(int) = Load[x1] : &:r85_1, m84_6 +# 85| r85_2(int) = Load[x1] : &:r85_1, m84_5 # 85| r85_3(int) = Constant[0] : # 85| r85_4(bool) = CompareNE : r85_2, r85_3 # 85| v85_5(void) = ConditionalBranch : r85_4 @@ -3689,7 +3283,7 @@ ir.c: # 86| Block 2 # 86| r86_1(glval) = VariableAddress[x1] : -# 86| r86_2(int) = Load[x1] : &:r86_1, m84_6 +# 86| r86_2(int) = Load[x1] : &:r86_1, m84_5 # 86| r86_3(int) = Constant[0] : # 86| r86_4(bool) = CompareEQ : r86_2, r86_3 # 86| v86_5(void) = ConditionalBranch : r86_4 @@ -3703,7 +3297,7 @@ ir.c: # 88| Block 4 # 88| r88_1(glval) = VariableAddress[y] : # 88| r88_2(glval) = VariableAddress[x1] : -# 88| r88_3(int) = Load[x1] : &:r88_2, m84_6 +# 88| r88_3(int) = Load[x1] : &:r88_2, m84_5 # 88| r88_4(int) = Constant[0] : # 88| r88_5(bool) = CompareEQ : r88_3, r88_4 # 88| r88_6(int) = Convert : r88_5 @@ -3735,7 +3329,7 @@ ir.c: # 92| Block 8 # 92| r92_1(glval) = VariableAddress[x1] : -# 92| r92_2(int) = Load[x1] : &:r92_1, m84_6 +# 92| r92_2(int) = Load[x1] : &:r92_1, m84_5 # 92| r92_3(int) = Constant[0] : # 92| r92_4(bool) = CompareNE : r92_2, r92_3 # 92| v92_5(void) = ConditionalBranch : r92_4 @@ -3744,7 +3338,7 @@ ir.c: # 92| Block 9 # 92| r92_6(glval) = VariableAddress[x2] : -# 92| r92_7(int) = Load[x2] : &:r92_6, m84_8 +# 92| r92_7(int) = Load[x2] : &:r92_6, m84_7 # 92| r92_8(int) = Constant[0] : # 92| r92_9(bool) = CompareNE : r92_7, r92_8 # 92| v92_10(void) = ConditionalBranch : r92_9 @@ -3757,7 +3351,7 @@ ir.c: # 93| Block 11 # 93| r93_1(glval) = VariableAddress[x1] : -# 93| r93_2(int) = Load[x1] : &:r93_1, m84_6 +# 93| r93_2(int) = Load[x1] : &:r93_1, m84_5 # 93| r93_3(int) = Constant[0] : # 93| r93_4(bool) = CompareEQ : r93_2, r93_3 # 93| v93_5(void) = ConditionalBranch : r93_4 @@ -3766,7 +3360,7 @@ ir.c: # 93| Block 12 # 93| r93_6(glval) = VariableAddress[x2] : -# 93| r93_7(int) = Load[x2] : &:r93_6, m84_8 +# 93| r93_7(int) = Load[x2] : &:r93_6, m84_7 # 93| r93_8(int) = Constant[0] : # 93| r93_9(bool) = CompareNE : r93_7, r93_8 # 93| v93_10(void) = ConditionalBranch : r93_9 @@ -3779,7 +3373,7 @@ ir.c: # 94| Block 14 # 94| r94_1(glval) = VariableAddress[x1] : -# 94| r94_2(int) = Load[x1] : &:r94_1, m84_6 +# 94| r94_2(int) = Load[x1] : &:r94_1, m84_5 # 94| r94_3(int) = Constant[0] : # 94| r94_4(bool) = CompareNE : r94_2, r94_3 # 94| v94_5(void) = ConditionalBranch : r94_4 @@ -3788,7 +3382,7 @@ ir.c: # 94| Block 15 # 94| r94_6(glval) = VariableAddress[x2] : -# 94| r94_7(int) = Load[x2] : &:r94_6, m84_8 +# 94| r94_7(int) = Load[x2] : &:r94_6, m84_7 # 94| r94_8(int) = Constant[0] : # 94| r94_9(bool) = CompareEQ : r94_7, r94_8 # 94| v94_10(void) = ConditionalBranch : r94_9 @@ -3801,7 +3395,7 @@ ir.c: # 95| Block 17 # 95| r95_1(glval) = VariableAddress[x1] : -# 95| r95_2(int) = Load[x1] : &:r95_1, m84_6 +# 95| r95_2(int) = Load[x1] : &:r95_1, m84_5 # 95| r95_3(int) = Constant[0] : # 95| r95_4(bool) = CompareEQ : r95_2, r95_3 # 95| v95_5(void) = ConditionalBranch : r95_4 @@ -3810,7 +3404,7 @@ ir.c: # 95| Block 18 # 95| r95_6(glval) = VariableAddress[x2] : -# 95| r95_7(int) = Load[x2] : &:r95_6, m84_8 +# 95| r95_7(int) = Load[x2] : &:r95_6, m84_7 # 95| r95_8(int) = Constant[0] : # 95| r95_9(bool) = CompareEQ : r95_7, r95_8 # 95| v95_10(void) = ConditionalBranch : r95_9 @@ -3823,7 +3417,7 @@ ir.c: # 96| Block 20 # 96| r96_1(glval) = VariableAddress[x1] : -# 96| r96_2(int) = Load[x1] : &:r96_1, m84_6 +# 96| r96_2(int) = Load[x1] : &:r96_1, m84_5 # 96| r96_3(int) = Constant[0] : # 96| r96_4(bool) = CompareNE : r96_2, r96_3 # 96| v96_5(void) = ConditionalBranch : r96_4 @@ -3832,7 +3426,7 @@ ir.c: # 96| Block 21 # 96| r96_6(glval) = VariableAddress[x2] : -# 96| r96_7(int) = Load[x2] : &:r96_6, m84_8 +# 96| r96_7(int) = Load[x2] : &:r96_6, m84_7 # 96| r96_8(int) = Constant[0] : # 96| r96_9(bool) = CompareNE : r96_7, r96_8 # 96| v96_10(void) = ConditionalBranch : r96_9 @@ -3845,7 +3439,7 @@ ir.c: # 97| Block 23 # 97| r97_1(glval) = VariableAddress[x1] : -# 97| r97_2(int) = Load[x1] : &:r97_1, m84_6 +# 97| r97_2(int) = Load[x1] : &:r97_1, m84_5 # 97| r97_3(int) = Constant[0] : # 97| r97_4(bool) = CompareEQ : r97_2, r97_3 # 97| v97_5(void) = ConditionalBranch : r97_4 @@ -3854,7 +3448,7 @@ ir.c: # 97| Block 24 # 97| r97_6(glval) = VariableAddress[x2] : -# 97| r97_7(int) = Load[x2] : &:r97_6, m84_8 +# 97| r97_7(int) = Load[x2] : &:r97_6, m84_7 # 97| r97_8(int) = Constant[0] : # 97| r97_9(bool) = CompareNE : r97_7, r97_8 # 97| v97_10(void) = ConditionalBranch : r97_9 @@ -3867,7 +3461,7 @@ ir.c: # 98| Block 26 # 98| r98_1(glval) = VariableAddress[x1] : -# 98| r98_2(int) = Load[x1] : &:r98_1, m84_6 +# 98| r98_2(int) = Load[x1] : &:r98_1, m84_5 # 98| r98_3(int) = Constant[0] : # 98| r98_4(bool) = CompareNE : r98_2, r98_3 # 98| v98_5(void) = ConditionalBranch : r98_4 @@ -3876,7 +3470,7 @@ ir.c: # 98| Block 27 # 98| r98_6(glval) = VariableAddress[x2] : -# 98| r98_7(int) = Load[x2] : &:r98_6, m84_8 +# 98| r98_7(int) = Load[x2] : &:r98_6, m84_7 # 98| r98_8(int) = Constant[0] : # 98| r98_9(bool) = CompareEQ : r98_7, r98_8 # 98| v98_10(void) = ConditionalBranch : r98_9 @@ -3889,7 +3483,7 @@ ir.c: # 99| Block 29 # 99| r99_1(glval) = VariableAddress[x1] : -# 99| r99_2(int) = Load[x1] : &:r99_1, m84_6 +# 99| r99_2(int) = Load[x1] : &:r99_1, m84_5 # 99| r99_3(int) = Constant[0] : # 99| r99_4(bool) = CompareEQ : r99_2, r99_3 # 99| v99_5(void) = ConditionalBranch : r99_4 @@ -3898,7 +3492,7 @@ ir.c: # 99| Block 30 # 99| r99_6(glval) = VariableAddress[x2] : -# 99| r99_7(int) = Load[x2] : &:r99_6, m84_8 +# 99| r99_7(int) = Load[x2] : &:r99_6, m84_7 # 99| r99_8(int) = Constant[0] : # 99| r99_9(bool) = CompareEQ : r99_7, r99_8 # 99| v99_10(void) = ConditionalBranch : r99_9 @@ -3912,7 +3506,7 @@ ir.c: # 101| Block 32 # 101| r101_1(glval) = VariableAddress[x_1_and_2] : # 101| r101_2(glval) = VariableAddress[x1] : -# 101| r101_3(int) = Load[x1] : &:r101_2, m84_6 +# 101| r101_3(int) = Load[x1] : &:r101_2, m84_5 # 101| r101_4(int) = Constant[0] : # 101| r101_5(bool) = CompareNE : r101_3, r101_4 # 101| v101_6(void) = ConditionalBranch : r101_5 @@ -3946,7 +3540,7 @@ ir.c: # 101| Block 36 # 101| r101_17(glval) = VariableAddress[x2] : -# 101| r101_18(int) = Load[x2] : &:r101_17, m84_8 +# 101| r101_18(int) = Load[x2] : &:r101_17, m84_7 # 101| r101_19(int) = Constant[0] : # 101| r101_20(bool) = CompareNE : r101_18, r101_19 # 101| v101_21(void) = ConditionalBranch : r101_20 @@ -3973,24 +3567,23 @@ ir.c: # 105| Block 40 # 105| r105_1(glval) = VariableAddress[double_negation] : # 105| r105_2(glval) = VariableAddress[x1] : -# 105| r105_3(int) = Load[x1] : &:r105_2, m84_6 +# 105| r105_3(int) = Load[x1] : &:r105_2, m84_5 # 105| r105_4(int) = Constant[0] : # 105| r105_5(bool) = CompareEQ : r105_3, r105_4 # 105| r105_6(bool) = LogicalNot : r105_5 # 105| r105_7(int) = Convert : r105_6 # 105| m105_8(int) = Store[double_negation] : &:r105_1, r105_7 # 106| v106_1(void) = NoOp : -# 84| v84_9(void) = ReturnVoid : -# 84| v84_10(void) = AliasedUse : m84_3 -# 84| v84_11(void) = ExitFunction : +# 84| v84_8(void) = ReturnVoid : +# 84| v84_9(void) = AliasedUse : ~m? +# 84| v84_10(void) = ExitFunction : ir.cpp: # 1| void Constants() # 1| Block 0 # 1| v1_1(void) = EnterFunction : -# 1| m1_2(unknown) = AliasedDefinition : -# 1| m1_3(unknown) = InitializeNonLocal : -# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 +# 1| mu1_2(unknown) = AliasedDefinition : +# 1| mu1_3(unknown) = InitializeNonLocal : # 2| r2_1(glval) = VariableAddress[c_i] : # 2| r2_2(char) = Constant[1] : # 2| m2_3(char) = Store[c_i] : &:r2_1, r2_2 @@ -4076,16 +3669,15 @@ ir.cpp: # 40| r40_2(double) = Constant[1.0] : # 40| m40_3(double) = Store[d_d] : &:r40_1, r40_2 # 41| v41_1(void) = NoOp : -# 1| v1_5(void) = ReturnVoid : -# 1| v1_6(void) = AliasedUse : m1_3 -# 1| v1_7(void) = ExitFunction : +# 1| v1_4(void) = ReturnVoid : +# 1| v1_5(void) = AliasedUse : ~m? +# 1| v1_6(void) = ExitFunction : # 43| void Foo() # 43| Block 0 # 43| v43_1(void) = EnterFunction : -# 43| m43_2(unknown) = AliasedDefinition : -# 43| m43_3(unknown) = InitializeNonLocal : -# 43| m43_4(unknown) = Chi : total:m43_2, partial:m43_3 +# 43| mu43_2(unknown) = AliasedDefinition : +# 43| mu43_3(unknown) = InitializeNonLocal : # 44| r44_1(glval) = VariableAddress[x] : # 44| r44_2(int) = Constant[17] : # 44| m44_3(int) = Store[x] : &:r44_1, r44_2 @@ -4110,173 +3702,172 @@ ir.cpp: # 47| r47_7(glval) = VariableAddress[x] : # 47| m47_8(int) = Store[x] : &:r47_7, r47_6 # 48| v48_1(void) = NoOp : -# 43| v43_5(void) = ReturnVoid : -# 43| v43_6(void) = AliasedUse : m43_3 -# 43| v43_7(void) = ExitFunction : +# 43| v43_4(void) = ReturnVoid : +# 43| v43_5(void) = AliasedUse : ~m? +# 43| v43_6(void) = ExitFunction : # 50| void IntegerOps(int, int) # 50| Block 0 # 50| v50_1(void) = EnterFunction : -# 50| m50_2(unknown) = AliasedDefinition : -# 50| m50_3(unknown) = InitializeNonLocal : -# 50| m50_4(unknown) = Chi : total:m50_2, partial:m50_3 -# 50| r50_5(glval) = VariableAddress[x] : -# 50| m50_6(int) = InitializeParameter[x] : &:r50_5 -# 50| r50_7(glval) = VariableAddress[y] : -# 50| m50_8(int) = InitializeParameter[y] : &:r50_7 +# 50| mu50_2(unknown) = AliasedDefinition : +# 50| mu50_3(unknown) = InitializeNonLocal : +# 50| r50_4(glval) = VariableAddress[x] : +# 50| m50_5(int) = InitializeParameter[x] : &:r50_4 +# 50| r50_6(glval) = VariableAddress[y] : +# 50| m50_7(int) = InitializeParameter[y] : &:r50_6 # 51| r51_1(glval) = VariableAddress[z] : # 51| m51_2(int) = Uninitialized[z] : &:r51_1 # 53| r53_1(glval) = VariableAddress[x] : -# 53| r53_2(int) = Load[x] : &:r53_1, m50_6 +# 53| r53_2(int) = Load[x] : &:r53_1, m50_5 # 53| r53_3(glval) = VariableAddress[y] : -# 53| r53_4(int) = Load[y] : &:r53_3, m50_8 +# 53| r53_4(int) = Load[y] : &:r53_3, m50_7 # 53| r53_5(int) = Add : r53_2, r53_4 # 53| r53_6(glval) = VariableAddress[z] : # 53| m53_7(int) = Store[z] : &:r53_6, r53_5 # 54| r54_1(glval) = VariableAddress[x] : -# 54| r54_2(int) = Load[x] : &:r54_1, m50_6 +# 54| r54_2(int) = Load[x] : &:r54_1, m50_5 # 54| r54_3(glval) = VariableAddress[y] : -# 54| r54_4(int) = Load[y] : &:r54_3, m50_8 +# 54| r54_4(int) = Load[y] : &:r54_3, m50_7 # 54| r54_5(int) = Sub : r54_2, r54_4 # 54| r54_6(glval) = VariableAddress[z] : # 54| m54_7(int) = Store[z] : &:r54_6, r54_5 # 55| r55_1(glval) = VariableAddress[x] : -# 55| r55_2(int) = Load[x] : &:r55_1, m50_6 +# 55| r55_2(int) = Load[x] : &:r55_1, m50_5 # 55| r55_3(glval) = VariableAddress[y] : -# 55| r55_4(int) = Load[y] : &:r55_3, m50_8 +# 55| r55_4(int) = Load[y] : &:r55_3, m50_7 # 55| r55_5(int) = Mul : r55_2, r55_4 # 55| r55_6(glval) = VariableAddress[z] : # 55| m55_7(int) = Store[z] : &:r55_6, r55_5 # 56| r56_1(glval) = VariableAddress[x] : -# 56| r56_2(int) = Load[x] : &:r56_1, m50_6 +# 56| r56_2(int) = Load[x] : &:r56_1, m50_5 # 56| r56_3(glval) = VariableAddress[y] : -# 56| r56_4(int) = Load[y] : &:r56_3, m50_8 +# 56| r56_4(int) = Load[y] : &:r56_3, m50_7 # 56| r56_5(int) = Div : r56_2, r56_4 # 56| r56_6(glval) = VariableAddress[z] : # 56| m56_7(int) = Store[z] : &:r56_6, r56_5 # 57| r57_1(glval) = VariableAddress[x] : -# 57| r57_2(int) = Load[x] : &:r57_1, m50_6 +# 57| r57_2(int) = Load[x] : &:r57_1, m50_5 # 57| r57_3(glval) = VariableAddress[y] : -# 57| r57_4(int) = Load[y] : &:r57_3, m50_8 +# 57| r57_4(int) = Load[y] : &:r57_3, m50_7 # 57| r57_5(int) = Rem : r57_2, r57_4 # 57| r57_6(glval) = VariableAddress[z] : # 57| m57_7(int) = Store[z] : &:r57_6, r57_5 # 59| r59_1(glval) = VariableAddress[x] : -# 59| r59_2(int) = Load[x] : &:r59_1, m50_6 +# 59| r59_2(int) = Load[x] : &:r59_1, m50_5 # 59| r59_3(glval) = VariableAddress[y] : -# 59| r59_4(int) = Load[y] : &:r59_3, m50_8 +# 59| r59_4(int) = Load[y] : &:r59_3, m50_7 # 59| r59_5(int) = BitAnd : r59_2, r59_4 # 59| r59_6(glval) = VariableAddress[z] : # 59| m59_7(int) = Store[z] : &:r59_6, r59_5 # 60| r60_1(glval) = VariableAddress[x] : -# 60| r60_2(int) = Load[x] : &:r60_1, m50_6 +# 60| r60_2(int) = Load[x] : &:r60_1, m50_5 # 60| r60_3(glval) = VariableAddress[y] : -# 60| r60_4(int) = Load[y] : &:r60_3, m50_8 +# 60| r60_4(int) = Load[y] : &:r60_3, m50_7 # 60| r60_5(int) = BitOr : r60_2, r60_4 # 60| r60_6(glval) = VariableAddress[z] : # 60| m60_7(int) = Store[z] : &:r60_6, r60_5 # 61| r61_1(glval) = VariableAddress[x] : -# 61| r61_2(int) = Load[x] : &:r61_1, m50_6 +# 61| r61_2(int) = Load[x] : &:r61_1, m50_5 # 61| r61_3(glval) = VariableAddress[y] : -# 61| r61_4(int) = Load[y] : &:r61_3, m50_8 +# 61| r61_4(int) = Load[y] : &:r61_3, m50_7 # 61| r61_5(int) = BitXor : r61_2, r61_4 # 61| r61_6(glval) = VariableAddress[z] : # 61| m61_7(int) = Store[z] : &:r61_6, r61_5 # 63| r63_1(glval) = VariableAddress[x] : -# 63| r63_2(int) = Load[x] : &:r63_1, m50_6 +# 63| r63_2(int) = Load[x] : &:r63_1, m50_5 # 63| r63_3(glval) = VariableAddress[y] : -# 63| r63_4(int) = Load[y] : &:r63_3, m50_8 +# 63| r63_4(int) = Load[y] : &:r63_3, m50_7 # 63| r63_5(int) = ShiftLeft : r63_2, r63_4 # 63| r63_6(glval) = VariableAddress[z] : # 63| m63_7(int) = Store[z] : &:r63_6, r63_5 # 64| r64_1(glval) = VariableAddress[x] : -# 64| r64_2(int) = Load[x] : &:r64_1, m50_6 +# 64| r64_2(int) = Load[x] : &:r64_1, m50_5 # 64| r64_3(glval) = VariableAddress[y] : -# 64| r64_4(int) = Load[y] : &:r64_3, m50_8 +# 64| r64_4(int) = Load[y] : &:r64_3, m50_7 # 64| r64_5(int) = ShiftRight : r64_2, r64_4 # 64| r64_6(glval) = VariableAddress[z] : # 64| m64_7(int) = Store[z] : &:r64_6, r64_5 # 66| r66_1(glval) = VariableAddress[x] : -# 66| r66_2(int) = Load[x] : &:r66_1, m50_6 +# 66| r66_2(int) = Load[x] : &:r66_1, m50_5 # 66| r66_3(glval) = VariableAddress[z] : # 66| m66_4(int) = Store[z] : &:r66_3, r66_2 # 68| r68_1(glval) = VariableAddress[x] : -# 68| r68_2(int) = Load[x] : &:r68_1, m50_6 +# 68| r68_2(int) = Load[x] : &:r68_1, m50_5 # 68| r68_3(glval) = VariableAddress[z] : # 68| r68_4(int) = Load[z] : &:r68_3, m66_4 # 68| r68_5(int) = Add : r68_4, r68_2 # 68| m68_6(int) = Store[z] : &:r68_3, r68_5 # 69| r69_1(glval) = VariableAddress[x] : -# 69| r69_2(int) = Load[x] : &:r69_1, m50_6 +# 69| r69_2(int) = Load[x] : &:r69_1, m50_5 # 69| r69_3(glval) = VariableAddress[z] : # 69| r69_4(int) = Load[z] : &:r69_3, m68_6 # 69| r69_5(int) = Sub : r69_4, r69_2 # 69| m69_6(int) = Store[z] : &:r69_3, r69_5 # 70| r70_1(glval) = VariableAddress[x] : -# 70| r70_2(int) = Load[x] : &:r70_1, m50_6 +# 70| r70_2(int) = Load[x] : &:r70_1, m50_5 # 70| r70_3(glval) = VariableAddress[z] : # 70| r70_4(int) = Load[z] : &:r70_3, m69_6 # 70| r70_5(int) = Mul : r70_4, r70_2 # 70| m70_6(int) = Store[z] : &:r70_3, r70_5 # 71| r71_1(glval) = VariableAddress[x] : -# 71| r71_2(int) = Load[x] : &:r71_1, m50_6 +# 71| r71_2(int) = Load[x] : &:r71_1, m50_5 # 71| r71_3(glval) = VariableAddress[z] : # 71| r71_4(int) = Load[z] : &:r71_3, m70_6 # 71| r71_5(int) = Div : r71_4, r71_2 # 71| m71_6(int) = Store[z] : &:r71_3, r71_5 # 72| r72_1(glval) = VariableAddress[x] : -# 72| r72_2(int) = Load[x] : &:r72_1, m50_6 +# 72| r72_2(int) = Load[x] : &:r72_1, m50_5 # 72| r72_3(glval) = VariableAddress[z] : # 72| r72_4(int) = Load[z] : &:r72_3, m71_6 # 72| r72_5(int) = Rem : r72_4, r72_2 # 72| m72_6(int) = Store[z] : &:r72_3, r72_5 # 74| r74_1(glval) = VariableAddress[x] : -# 74| r74_2(int) = Load[x] : &:r74_1, m50_6 +# 74| r74_2(int) = Load[x] : &:r74_1, m50_5 # 74| r74_3(glval) = VariableAddress[z] : # 74| r74_4(int) = Load[z] : &:r74_3, m72_6 # 74| r74_5(int) = BitAnd : r74_4, r74_2 # 74| m74_6(int) = Store[z] : &:r74_3, r74_5 # 75| r75_1(glval) = VariableAddress[x] : -# 75| r75_2(int) = Load[x] : &:r75_1, m50_6 +# 75| r75_2(int) = Load[x] : &:r75_1, m50_5 # 75| r75_3(glval) = VariableAddress[z] : # 75| r75_4(int) = Load[z] : &:r75_3, m74_6 # 75| r75_5(int) = BitOr : r75_4, r75_2 # 75| m75_6(int) = Store[z] : &:r75_3, r75_5 # 76| r76_1(glval) = VariableAddress[x] : -# 76| r76_2(int) = Load[x] : &:r76_1, m50_6 +# 76| r76_2(int) = Load[x] : &:r76_1, m50_5 # 76| r76_3(glval) = VariableAddress[z] : # 76| r76_4(int) = Load[z] : &:r76_3, m75_6 # 76| r76_5(int) = BitXor : r76_4, r76_2 # 76| m76_6(int) = Store[z] : &:r76_3, r76_5 # 78| r78_1(glval) = VariableAddress[x] : -# 78| r78_2(int) = Load[x] : &:r78_1, m50_6 +# 78| r78_2(int) = Load[x] : &:r78_1, m50_5 # 78| r78_3(glval) = VariableAddress[z] : # 78| r78_4(int) = Load[z] : &:r78_3, m76_6 # 78| r78_5(int) = ShiftLeft : r78_4, r78_2 # 78| m78_6(int) = Store[z] : &:r78_3, r78_5 # 79| r79_1(glval) = VariableAddress[x] : -# 79| r79_2(int) = Load[x] : &:r79_1, m50_6 +# 79| r79_2(int) = Load[x] : &:r79_1, m50_5 # 79| r79_3(glval) = VariableAddress[z] : # 79| r79_4(int) = Load[z] : &:r79_3, m78_6 # 79| r79_5(int) = ShiftRight : r79_4, r79_2 # 79| m79_6(int) = Store[z] : &:r79_3, r79_5 # 81| r81_1(glval) = VariableAddress[x] : -# 81| r81_2(int) = Load[x] : &:r81_1, m50_6 +# 81| r81_2(int) = Load[x] : &:r81_1, m50_5 # 81| r81_3(int) = CopyValue : r81_2 # 81| r81_4(glval) = VariableAddress[z] : # 81| m81_5(int) = Store[z] : &:r81_4, r81_3 # 82| r82_1(glval) = VariableAddress[x] : -# 82| r82_2(int) = Load[x] : &:r82_1, m50_6 +# 82| r82_2(int) = Load[x] : &:r82_1, m50_5 # 82| r82_3(int) = Negate : r82_2 # 82| r82_4(glval) = VariableAddress[z] : # 82| m82_5(int) = Store[z] : &:r82_4, r82_3 # 83| r83_1(glval) = VariableAddress[x] : -# 83| r83_2(int) = Load[x] : &:r83_1, m50_6 +# 83| r83_2(int) = Load[x] : &:r83_1, m50_5 # 83| r83_3(int) = BitComplement : r83_2 # 83| r83_4(glval) = VariableAddress[z] : # 83| m83_5(int) = Store[z] : &:r83_4, r83_3 # 84| r84_1(glval) = VariableAddress[x] : -# 84| r84_2(int) = Load[x] : &:r84_1, m50_6 +# 84| r84_2(int) = Load[x] : &:r84_1, m50_5 # 84| r84_3(int) = Constant[0] : # 84| r84_4(bool) = CompareNE : r84_2, r84_3 # 84| r84_5(bool) = LogicalNot : r84_4 @@ -4284,81 +3875,79 @@ ir.cpp: # 84| r84_7(glval) = VariableAddress[z] : # 84| m84_8(int) = Store[z] : &:r84_7, r84_6 # 85| v85_1(void) = NoOp : -# 50| v50_9(void) = ReturnVoid : -# 50| v50_10(void) = AliasedUse : m50_3 -# 50| v50_11(void) = ExitFunction : +# 50| v50_8(void) = ReturnVoid : +# 50| v50_9(void) = AliasedUse : ~m? +# 50| v50_10(void) = ExitFunction : # 87| void IntegerCompare(int, int) # 87| Block 0 # 87| v87_1(void) = EnterFunction : -# 87| m87_2(unknown) = AliasedDefinition : -# 87| m87_3(unknown) = InitializeNonLocal : -# 87| m87_4(unknown) = Chi : total:m87_2, partial:m87_3 -# 87| r87_5(glval) = VariableAddress[x] : -# 87| m87_6(int) = InitializeParameter[x] : &:r87_5 -# 87| r87_7(glval) = VariableAddress[y] : -# 87| m87_8(int) = InitializeParameter[y] : &:r87_7 +# 87| mu87_2(unknown) = AliasedDefinition : +# 87| mu87_3(unknown) = InitializeNonLocal : +# 87| r87_4(glval) = VariableAddress[x] : +# 87| m87_5(int) = InitializeParameter[x] : &:r87_4 +# 87| r87_6(glval) = VariableAddress[y] : +# 87| m87_7(int) = InitializeParameter[y] : &:r87_6 # 88| r88_1(glval) = VariableAddress[b] : # 88| m88_2(bool) = Uninitialized[b] : &:r88_1 # 90| r90_1(glval) = VariableAddress[x] : -# 90| r90_2(int) = Load[x] : &:r90_1, m87_6 +# 90| r90_2(int) = Load[x] : &:r90_1, m87_5 # 90| r90_3(glval) = VariableAddress[y] : -# 90| r90_4(int) = Load[y] : &:r90_3, m87_8 +# 90| r90_4(int) = Load[y] : &:r90_3, m87_7 # 90| r90_5(bool) = CompareEQ : r90_2, r90_4 # 90| r90_6(glval) = VariableAddress[b] : # 90| m90_7(bool) = Store[b] : &:r90_6, r90_5 # 91| r91_1(glval) = VariableAddress[x] : -# 91| r91_2(int) = Load[x] : &:r91_1, m87_6 +# 91| r91_2(int) = Load[x] : &:r91_1, m87_5 # 91| r91_3(glval) = VariableAddress[y] : -# 91| r91_4(int) = Load[y] : &:r91_3, m87_8 +# 91| r91_4(int) = Load[y] : &:r91_3, m87_7 # 91| r91_5(bool) = CompareNE : r91_2, r91_4 # 91| r91_6(glval) = VariableAddress[b] : # 91| m91_7(bool) = Store[b] : &:r91_6, r91_5 # 92| r92_1(glval) = VariableAddress[x] : -# 92| r92_2(int) = Load[x] : &:r92_1, m87_6 +# 92| r92_2(int) = Load[x] : &:r92_1, m87_5 # 92| r92_3(glval) = VariableAddress[y] : -# 92| r92_4(int) = Load[y] : &:r92_3, m87_8 +# 92| r92_4(int) = Load[y] : &:r92_3, m87_7 # 92| r92_5(bool) = CompareLT : r92_2, r92_4 # 92| r92_6(glval) = VariableAddress[b] : # 92| m92_7(bool) = Store[b] : &:r92_6, r92_5 # 93| r93_1(glval) = VariableAddress[x] : -# 93| r93_2(int) = Load[x] : &:r93_1, m87_6 +# 93| r93_2(int) = Load[x] : &:r93_1, m87_5 # 93| r93_3(glval) = VariableAddress[y] : -# 93| r93_4(int) = Load[y] : &:r93_3, m87_8 +# 93| r93_4(int) = Load[y] : &:r93_3, m87_7 # 93| r93_5(bool) = CompareGT : r93_2, r93_4 # 93| r93_6(glval) = VariableAddress[b] : # 93| m93_7(bool) = Store[b] : &:r93_6, r93_5 # 94| r94_1(glval) = VariableAddress[x] : -# 94| r94_2(int) = Load[x] : &:r94_1, m87_6 +# 94| r94_2(int) = Load[x] : &:r94_1, m87_5 # 94| r94_3(glval) = VariableAddress[y] : -# 94| r94_4(int) = Load[y] : &:r94_3, m87_8 +# 94| r94_4(int) = Load[y] : &:r94_3, m87_7 # 94| r94_5(bool) = CompareLE : r94_2, r94_4 # 94| r94_6(glval) = VariableAddress[b] : # 94| m94_7(bool) = Store[b] : &:r94_6, r94_5 # 95| r95_1(glval) = VariableAddress[x] : -# 95| r95_2(int) = Load[x] : &:r95_1, m87_6 +# 95| r95_2(int) = Load[x] : &:r95_1, m87_5 # 95| r95_3(glval) = VariableAddress[y] : -# 95| r95_4(int) = Load[y] : &:r95_3, m87_8 +# 95| r95_4(int) = Load[y] : &:r95_3, m87_7 # 95| r95_5(bool) = CompareGE : r95_2, r95_4 # 95| r95_6(glval) = VariableAddress[b] : # 95| m95_7(bool) = Store[b] : &:r95_6, r95_5 # 96| v96_1(void) = NoOp : -# 87| v87_9(void) = ReturnVoid : -# 87| v87_10(void) = AliasedUse : m87_3 -# 87| v87_11(void) = ExitFunction : +# 87| v87_8(void) = ReturnVoid : +# 87| v87_9(void) = AliasedUse : ~m? +# 87| v87_10(void) = ExitFunction : # 98| void IntegerCrement(int) # 98| Block 0 # 98| v98_1(void) = EnterFunction : -# 98| m98_2(unknown) = AliasedDefinition : -# 98| m98_3(unknown) = InitializeNonLocal : -# 98| m98_4(unknown) = Chi : total:m98_2, partial:m98_3 -# 98| r98_5(glval) = VariableAddress[x] : -# 98| m98_6(int) = InitializeParameter[x] : &:r98_5 +# 98| mu98_2(unknown) = AliasedDefinition : +# 98| mu98_3(unknown) = InitializeNonLocal : +# 98| r98_4(glval) = VariableAddress[x] : +# 98| m98_5(int) = InitializeParameter[x] : &:r98_4 # 99| r99_1(glval) = VariableAddress[y] : # 99| m99_2(int) = Uninitialized[y] : &:r99_1 # 101| r101_1(glval) = VariableAddress[x] : -# 101| r101_2(int) = Load[x] : &:r101_1, m98_6 +# 101| r101_2(int) = Load[x] : &:r101_1, m98_5 # 101| r101_3(int) = Constant[1] : # 101| r101_4(int) = Add : r101_2, r101_3 # 101| m101_5(int) = Store[x] : &:r101_1, r101_4 @@ -4390,197 +3979,193 @@ ir.cpp: # 104| r104_7(glval) = VariableAddress[y] : # 104| m104_8(int) = Store[y] : &:r104_7, r104_6 # 105| v105_1(void) = NoOp : -# 98| v98_7(void) = ReturnVoid : -# 98| v98_8(void) = AliasedUse : m98_3 -# 98| v98_9(void) = ExitFunction : +# 98| v98_6(void) = ReturnVoid : +# 98| v98_7(void) = AliasedUse : ~m? +# 98| v98_8(void) = ExitFunction : # 107| void IntegerCrement_LValue(int) # 107| Block 0 # 107| v107_1(void) = EnterFunction : -# 107| m107_2(unknown) = AliasedDefinition : -# 107| m107_3(unknown) = InitializeNonLocal : -# 107| m107_4(unknown) = Chi : total:m107_2, partial:m107_3 -# 107| r107_5(glval) = VariableAddress[x] : -# 107| m107_6(int) = InitializeParameter[x] : &:r107_5 +# 107| mu107_2(unknown) = AliasedDefinition : +# 107| mu107_3(unknown) = InitializeNonLocal : +# 107| r107_4(glval) = VariableAddress[x] : +# 107| mu107_5(int) = InitializeParameter[x] : &:r107_4 # 108| r108_1(glval) = VariableAddress[p] : # 108| m108_2(int *) = Uninitialized[p] : &:r108_1 # 110| r110_1(glval) = VariableAddress[x] : -# 110| r110_2(int) = Load[x] : &:r110_1, m107_6 +# 110| r110_2(int) = Load[x] : &:r110_1, ~m? # 110| r110_3(int) = Constant[1] : # 110| r110_4(int) = Add : r110_2, r110_3 -# 110| m110_5(int) = Store[x] : &:r110_1, r110_4 +# 110| mu110_5(int) = Store[x] : &:r110_1, r110_4 # 110| r110_6(glval) = CopyValue : r110_1 # 110| r110_7(int *) = CopyValue : r110_6 # 110| r110_8(glval) = VariableAddress[p] : # 110| m110_9(int *) = Store[p] : &:r110_8, r110_7 # 111| r111_1(glval) = VariableAddress[x] : -# 111| r111_2(int) = Load[x] : &:r111_1, m110_5 +# 111| r111_2(int) = Load[x] : &:r111_1, ~m? # 111| r111_3(int) = Constant[1] : # 111| r111_4(int) = Sub : r111_2, r111_3 -# 111| m111_5(int) = Store[x] : &:r111_1, r111_4 +# 111| mu111_5(int) = Store[x] : &:r111_1, r111_4 # 111| r111_6(glval) = CopyValue : r111_1 # 111| r111_7(int *) = CopyValue : r111_6 # 111| r111_8(glval) = VariableAddress[p] : # 111| m111_9(int *) = Store[p] : &:r111_8, r111_7 # 112| v112_1(void) = NoOp : -# 107| v107_7(void) = ReturnVoid : -# 107| v107_8(void) = AliasedUse : m107_3 -# 107| v107_9(void) = ExitFunction : +# 107| v107_6(void) = ReturnVoid : +# 107| v107_7(void) = AliasedUse : ~m? +# 107| v107_8(void) = ExitFunction : # 114| void FloatOps(double, double) # 114| Block 0 # 114| v114_1(void) = EnterFunction : -# 114| m114_2(unknown) = AliasedDefinition : -# 114| m114_3(unknown) = InitializeNonLocal : -# 114| m114_4(unknown) = Chi : total:m114_2, partial:m114_3 -# 114| r114_5(glval) = VariableAddress[x] : -# 114| m114_6(double) = InitializeParameter[x] : &:r114_5 -# 114| r114_7(glval) = VariableAddress[y] : -# 114| m114_8(double) = InitializeParameter[y] : &:r114_7 +# 114| mu114_2(unknown) = AliasedDefinition : +# 114| mu114_3(unknown) = InitializeNonLocal : +# 114| r114_4(glval) = VariableAddress[x] : +# 114| m114_5(double) = InitializeParameter[x] : &:r114_4 +# 114| r114_6(glval) = VariableAddress[y] : +# 114| m114_7(double) = InitializeParameter[y] : &:r114_6 # 115| r115_1(glval) = VariableAddress[z] : # 115| m115_2(double) = Uninitialized[z] : &:r115_1 # 117| r117_1(glval) = VariableAddress[x] : -# 117| r117_2(double) = Load[x] : &:r117_1, m114_6 +# 117| r117_2(double) = Load[x] : &:r117_1, m114_5 # 117| r117_3(glval) = VariableAddress[y] : -# 117| r117_4(double) = Load[y] : &:r117_3, m114_8 +# 117| r117_4(double) = Load[y] : &:r117_3, m114_7 # 117| r117_5(double) = Add : r117_2, r117_4 # 117| r117_6(glval) = VariableAddress[z] : # 117| m117_7(double) = Store[z] : &:r117_6, r117_5 # 118| r118_1(glval) = VariableAddress[x] : -# 118| r118_2(double) = Load[x] : &:r118_1, m114_6 +# 118| r118_2(double) = Load[x] : &:r118_1, m114_5 # 118| r118_3(glval) = VariableAddress[y] : -# 118| r118_4(double) = Load[y] : &:r118_3, m114_8 +# 118| r118_4(double) = Load[y] : &:r118_3, m114_7 # 118| r118_5(double) = Sub : r118_2, r118_4 # 118| r118_6(glval) = VariableAddress[z] : # 118| m118_7(double) = Store[z] : &:r118_6, r118_5 # 119| r119_1(glval) = VariableAddress[x] : -# 119| r119_2(double) = Load[x] : &:r119_1, m114_6 +# 119| r119_2(double) = Load[x] : &:r119_1, m114_5 # 119| r119_3(glval) = VariableAddress[y] : -# 119| r119_4(double) = Load[y] : &:r119_3, m114_8 +# 119| r119_4(double) = Load[y] : &:r119_3, m114_7 # 119| r119_5(double) = Mul : r119_2, r119_4 # 119| r119_6(glval) = VariableAddress[z] : # 119| m119_7(double) = Store[z] : &:r119_6, r119_5 # 120| r120_1(glval) = VariableAddress[x] : -# 120| r120_2(double) = Load[x] : &:r120_1, m114_6 +# 120| r120_2(double) = Load[x] : &:r120_1, m114_5 # 120| r120_3(glval) = VariableAddress[y] : -# 120| r120_4(double) = Load[y] : &:r120_3, m114_8 +# 120| r120_4(double) = Load[y] : &:r120_3, m114_7 # 120| r120_5(double) = Div : r120_2, r120_4 # 120| r120_6(glval) = VariableAddress[z] : # 120| m120_7(double) = Store[z] : &:r120_6, r120_5 # 122| r122_1(glval) = VariableAddress[x] : -# 122| r122_2(double) = Load[x] : &:r122_1, m114_6 +# 122| r122_2(double) = Load[x] : &:r122_1, m114_5 # 122| r122_3(glval) = VariableAddress[z] : # 122| m122_4(double) = Store[z] : &:r122_3, r122_2 # 124| r124_1(glval) = VariableAddress[x] : -# 124| r124_2(double) = Load[x] : &:r124_1, m114_6 +# 124| r124_2(double) = Load[x] : &:r124_1, m114_5 # 124| r124_3(glval) = VariableAddress[z] : # 124| r124_4(double) = Load[z] : &:r124_3, m122_4 # 124| r124_5(double) = Add : r124_4, r124_2 # 124| m124_6(double) = Store[z] : &:r124_3, r124_5 # 125| r125_1(glval) = VariableAddress[x] : -# 125| r125_2(double) = Load[x] : &:r125_1, m114_6 +# 125| r125_2(double) = Load[x] : &:r125_1, m114_5 # 125| r125_3(glval) = VariableAddress[z] : # 125| r125_4(double) = Load[z] : &:r125_3, m124_6 # 125| r125_5(double) = Sub : r125_4, r125_2 # 125| m125_6(double) = Store[z] : &:r125_3, r125_5 # 126| r126_1(glval) = VariableAddress[x] : -# 126| r126_2(double) = Load[x] : &:r126_1, m114_6 +# 126| r126_2(double) = Load[x] : &:r126_1, m114_5 # 126| r126_3(glval) = VariableAddress[z] : # 126| r126_4(double) = Load[z] : &:r126_3, m125_6 # 126| r126_5(double) = Mul : r126_4, r126_2 # 126| m126_6(double) = Store[z] : &:r126_3, r126_5 # 127| r127_1(glval) = VariableAddress[x] : -# 127| r127_2(double) = Load[x] : &:r127_1, m114_6 +# 127| r127_2(double) = Load[x] : &:r127_1, m114_5 # 127| r127_3(glval) = VariableAddress[z] : # 127| r127_4(double) = Load[z] : &:r127_3, m126_6 # 127| r127_5(double) = Div : r127_4, r127_2 # 127| m127_6(double) = Store[z] : &:r127_3, r127_5 # 129| r129_1(glval) = VariableAddress[x] : -# 129| r129_2(double) = Load[x] : &:r129_1, m114_6 +# 129| r129_2(double) = Load[x] : &:r129_1, m114_5 # 129| r129_3(double) = CopyValue : r129_2 # 129| r129_4(glval) = VariableAddress[z] : # 129| m129_5(double) = Store[z] : &:r129_4, r129_3 # 130| r130_1(glval) = VariableAddress[x] : -# 130| r130_2(double) = Load[x] : &:r130_1, m114_6 +# 130| r130_2(double) = Load[x] : &:r130_1, m114_5 # 130| r130_3(double) = Negate : r130_2 # 130| r130_4(glval) = VariableAddress[z] : # 130| m130_5(double) = Store[z] : &:r130_4, r130_3 # 131| v131_1(void) = NoOp : -# 114| v114_9(void) = ReturnVoid : -# 114| v114_10(void) = AliasedUse : m114_3 -# 114| v114_11(void) = ExitFunction : +# 114| v114_8(void) = ReturnVoid : +# 114| v114_9(void) = AliasedUse : ~m? +# 114| v114_10(void) = ExitFunction : # 133| void FloatCompare(double, double) # 133| Block 0 # 133| v133_1(void) = EnterFunction : -# 133| m133_2(unknown) = AliasedDefinition : -# 133| m133_3(unknown) = InitializeNonLocal : -# 133| m133_4(unknown) = Chi : total:m133_2, partial:m133_3 -# 133| r133_5(glval) = VariableAddress[x] : -# 133| m133_6(double) = InitializeParameter[x] : &:r133_5 -# 133| r133_7(glval) = VariableAddress[y] : -# 133| m133_8(double) = InitializeParameter[y] : &:r133_7 +# 133| mu133_2(unknown) = AliasedDefinition : +# 133| mu133_3(unknown) = InitializeNonLocal : +# 133| r133_4(glval) = VariableAddress[x] : +# 133| m133_5(double) = InitializeParameter[x] : &:r133_4 +# 133| r133_6(glval) = VariableAddress[y] : +# 133| m133_7(double) = InitializeParameter[y] : &:r133_6 # 134| r134_1(glval) = VariableAddress[b] : # 134| m134_2(bool) = Uninitialized[b] : &:r134_1 # 136| r136_1(glval) = VariableAddress[x] : -# 136| r136_2(double) = Load[x] : &:r136_1, m133_6 +# 136| r136_2(double) = Load[x] : &:r136_1, m133_5 # 136| r136_3(glval) = VariableAddress[y] : -# 136| r136_4(double) = Load[y] : &:r136_3, m133_8 +# 136| r136_4(double) = Load[y] : &:r136_3, m133_7 # 136| r136_5(bool) = CompareEQ : r136_2, r136_4 # 136| r136_6(glval) = VariableAddress[b] : # 136| m136_7(bool) = Store[b] : &:r136_6, r136_5 # 137| r137_1(glval) = VariableAddress[x] : -# 137| r137_2(double) = Load[x] : &:r137_1, m133_6 +# 137| r137_2(double) = Load[x] : &:r137_1, m133_5 # 137| r137_3(glval) = VariableAddress[y] : -# 137| r137_4(double) = Load[y] : &:r137_3, m133_8 +# 137| r137_4(double) = Load[y] : &:r137_3, m133_7 # 137| r137_5(bool) = CompareNE : r137_2, r137_4 # 137| r137_6(glval) = VariableAddress[b] : # 137| m137_7(bool) = Store[b] : &:r137_6, r137_5 # 138| r138_1(glval) = VariableAddress[x] : -# 138| r138_2(double) = Load[x] : &:r138_1, m133_6 +# 138| r138_2(double) = Load[x] : &:r138_1, m133_5 # 138| r138_3(glval) = VariableAddress[y] : -# 138| r138_4(double) = Load[y] : &:r138_3, m133_8 +# 138| r138_4(double) = Load[y] : &:r138_3, m133_7 # 138| r138_5(bool) = CompareLT : r138_2, r138_4 # 138| r138_6(glval) = VariableAddress[b] : # 138| m138_7(bool) = Store[b] : &:r138_6, r138_5 # 139| r139_1(glval) = VariableAddress[x] : -# 139| r139_2(double) = Load[x] : &:r139_1, m133_6 +# 139| r139_2(double) = Load[x] : &:r139_1, m133_5 # 139| r139_3(glval) = VariableAddress[y] : -# 139| r139_4(double) = Load[y] : &:r139_3, m133_8 +# 139| r139_4(double) = Load[y] : &:r139_3, m133_7 # 139| r139_5(bool) = CompareGT : r139_2, r139_4 # 139| r139_6(glval) = VariableAddress[b] : # 139| m139_7(bool) = Store[b] : &:r139_6, r139_5 # 140| r140_1(glval) = VariableAddress[x] : -# 140| r140_2(double) = Load[x] : &:r140_1, m133_6 +# 140| r140_2(double) = Load[x] : &:r140_1, m133_5 # 140| r140_3(glval) = VariableAddress[y] : -# 140| r140_4(double) = Load[y] : &:r140_3, m133_8 +# 140| r140_4(double) = Load[y] : &:r140_3, m133_7 # 140| r140_5(bool) = CompareLE : r140_2, r140_4 # 140| r140_6(glval) = VariableAddress[b] : # 140| m140_7(bool) = Store[b] : &:r140_6, r140_5 # 141| r141_1(glval) = VariableAddress[x] : -# 141| r141_2(double) = Load[x] : &:r141_1, m133_6 +# 141| r141_2(double) = Load[x] : &:r141_1, m133_5 # 141| r141_3(glval) = VariableAddress[y] : -# 141| r141_4(double) = Load[y] : &:r141_3, m133_8 +# 141| r141_4(double) = Load[y] : &:r141_3, m133_7 # 141| r141_5(bool) = CompareGE : r141_2, r141_4 # 141| r141_6(glval) = VariableAddress[b] : # 141| m141_7(bool) = Store[b] : &:r141_6, r141_5 # 142| v142_1(void) = NoOp : -# 133| v133_9(void) = ReturnVoid : -# 133| v133_10(void) = AliasedUse : m133_3 -# 133| v133_11(void) = ExitFunction : +# 133| v133_8(void) = ReturnVoid : +# 133| v133_9(void) = AliasedUse : ~m? +# 133| v133_10(void) = ExitFunction : # 144| void FloatCrement(float) # 144| Block 0 # 144| v144_1(void) = EnterFunction : -# 144| m144_2(unknown) = AliasedDefinition : -# 144| m144_3(unknown) = InitializeNonLocal : -# 144| m144_4(unknown) = Chi : total:m144_2, partial:m144_3 -# 144| r144_5(glval) = VariableAddress[x] : -# 144| m144_6(float) = InitializeParameter[x] : &:r144_5 +# 144| mu144_2(unknown) = AliasedDefinition : +# 144| mu144_3(unknown) = InitializeNonLocal : +# 144| r144_4(glval) = VariableAddress[x] : +# 144| m144_5(float) = InitializeParameter[x] : &:r144_4 # 145| r145_1(glval) = VariableAddress[y] : # 145| m145_2(float) = Uninitialized[y] : &:r145_1 # 147| r147_1(glval) = VariableAddress[x] : -# 147| r147_2(float) = Load[x] : &:r147_1, m144_6 +# 147| r147_2(float) = Load[x] : &:r147_1, m144_5 # 147| r147_3(float) = Constant[1.0] : # 147| r147_4(float) = Add : r147_2, r147_3 # 147| m147_5(float) = Store[x] : &:r147_1, r147_4 @@ -4612,49 +4197,48 @@ ir.cpp: # 150| r150_7(glval) = VariableAddress[y] : # 150| m150_8(float) = Store[y] : &:r150_7, r150_6 # 151| v151_1(void) = NoOp : -# 144| v144_7(void) = ReturnVoid : -# 144| v144_8(void) = AliasedUse : m144_3 -# 144| v144_9(void) = ExitFunction : +# 144| v144_6(void) = ReturnVoid : +# 144| v144_7(void) = AliasedUse : ~m? +# 144| v144_8(void) = ExitFunction : # 153| void PointerOps(int*, int) # 153| Block 0 # 153| v153_1(void) = EnterFunction : -# 153| m153_2(unknown) = AliasedDefinition : -# 153| m153_3(unknown) = InitializeNonLocal : -# 153| m153_4(unknown) = Chi : total:m153_2, partial:m153_3 -# 153| r153_5(glval) = VariableAddress[p] : -# 153| m153_6(int *) = InitializeParameter[p] : &:r153_5 -# 153| r153_7(int *) = Load[p] : &:r153_5, m153_6 -# 153| m153_8(unknown) = InitializeIndirection[p] : &:r153_7 -# 153| r153_9(glval) = VariableAddress[i] : -# 153| m153_10(int) = InitializeParameter[i] : &:r153_9 +# 153| mu153_2(unknown) = AliasedDefinition : +# 153| mu153_3(unknown) = InitializeNonLocal : +# 153| r153_4(glval) = VariableAddress[p] : +# 153| m153_5(int *) = InitializeParameter[p] : &:r153_4 +# 153| r153_6(int *) = Load[p] : &:r153_4, m153_5 +# 153| mu153_7(unknown) = InitializeIndirection[p] : &:r153_6 +# 153| r153_8(glval) = VariableAddress[i] : +# 153| m153_9(int) = InitializeParameter[i] : &:r153_8 # 154| r154_1(glval) = VariableAddress[q] : # 154| m154_2(int *) = Uninitialized[q] : &:r154_1 # 155| r155_1(glval) = VariableAddress[b] : # 155| m155_2(bool) = Uninitialized[b] : &:r155_1 # 157| r157_1(glval) = VariableAddress[p] : -# 157| r157_2(int *) = Load[p] : &:r157_1, m153_6 +# 157| r157_2(int *) = Load[p] : &:r157_1, m153_5 # 157| r157_3(glval) = VariableAddress[i] : -# 157| r157_4(int) = Load[i] : &:r157_3, m153_10 +# 157| r157_4(int) = Load[i] : &:r157_3, m153_9 # 157| r157_5(int *) = PointerAdd[4] : r157_2, r157_4 # 157| r157_6(glval) = VariableAddress[q] : # 157| m157_7(int *) = Store[q] : &:r157_6, r157_5 # 158| r158_1(glval) = VariableAddress[i] : -# 158| r158_2(int) = Load[i] : &:r158_1, m153_10 +# 158| r158_2(int) = Load[i] : &:r158_1, m153_9 # 158| r158_3(glval) = VariableAddress[p] : -# 158| r158_4(int *) = Load[p] : &:r158_3, m153_6 +# 158| r158_4(int *) = Load[p] : &:r158_3, m153_5 # 158| r158_5(int *) = PointerAdd[4] : r158_4, r158_2 # 158| r158_6(glval) = VariableAddress[q] : # 158| m158_7(int *) = Store[q] : &:r158_6, r158_5 # 159| r159_1(glval) = VariableAddress[p] : -# 159| r159_2(int *) = Load[p] : &:r159_1, m153_6 +# 159| r159_2(int *) = Load[p] : &:r159_1, m153_5 # 159| r159_3(glval) = VariableAddress[i] : -# 159| r159_4(int) = Load[i] : &:r159_3, m153_10 +# 159| r159_4(int) = Load[i] : &:r159_3, m153_9 # 159| r159_5(int *) = PointerSub[4] : r159_2, r159_4 # 159| r159_6(glval) = VariableAddress[q] : # 159| m159_7(int *) = Store[q] : &:r159_6, r159_5 # 160| r160_1(glval) = VariableAddress[p] : -# 160| r160_2(int *) = Load[p] : &:r160_1, m153_6 +# 160| r160_2(int *) = Load[p] : &:r160_1, m153_5 # 160| r160_3(glval) = VariableAddress[q] : # 160| r160_4(int *) = Load[q] : &:r160_3, m159_7 # 160| r160_5(long) = PointerDiff[4] : r160_2, r160_4 @@ -4662,7 +4246,7 @@ ir.cpp: # 160| r160_7(glval) = VariableAddress[i] : # 160| m160_8(int) = Store[i] : &:r160_7, r160_6 # 162| r162_1(glval) = VariableAddress[p] : -# 162| r162_2(int *) = Load[p] : &:r162_1, m153_6 +# 162| r162_2(int *) = Load[p] : &:r162_1, m153_5 # 162| r162_3(glval) = VariableAddress[q] : # 162| m162_4(int *) = Store[q] : &:r162_3, r162_2 # 164| r164_1(glval) = VariableAddress[i] : @@ -4678,88 +4262,85 @@ ir.cpp: # 165| r165_5(int *) = PointerSub[4] : r165_4, r165_2 # 165| m165_6(int *) = Store[q] : &:r165_3, r165_5 # 167| r167_1(glval) = VariableAddress[p] : -# 167| r167_2(int *) = Load[p] : &:r167_1, m153_6 +# 167| r167_2(int *) = Load[p] : &:r167_1, m153_5 # 167| r167_3(int *) = Constant[0] : # 167| r167_4(bool) = CompareNE : r167_2, r167_3 # 167| r167_5(glval) = VariableAddress[b] : # 167| m167_6(bool) = Store[b] : &:r167_5, r167_4 # 168| r168_1(glval) = VariableAddress[p] : -# 168| r168_2(int *) = Load[p] : &:r168_1, m153_6 +# 168| r168_2(int *) = Load[p] : &:r168_1, m153_5 # 168| r168_3(int *) = Constant[0] : # 168| r168_4(bool) = CompareNE : r168_2, r168_3 # 168| r168_5(bool) = LogicalNot : r168_4 # 168| r168_6(glval) = VariableAddress[b] : # 168| m168_7(bool) = Store[b] : &:r168_6, r168_5 # 169| v169_1(void) = NoOp : -# 153| v153_11(void) = ReturnIndirection[p] : &:r153_7, m153_8 -# 153| v153_12(void) = ReturnVoid : -# 153| v153_13(void) = AliasedUse : m153_3 -# 153| v153_14(void) = ExitFunction : +# 153| v153_10(void) = ReturnIndirection[p] : &:r153_6, ~m? +# 153| v153_11(void) = ReturnVoid : +# 153| v153_12(void) = AliasedUse : ~m? +# 153| v153_13(void) = ExitFunction : # 171| void ArrayAccess(int*, int) # 171| Block 0 # 171| v171_1(void) = EnterFunction : -# 171| m171_2(unknown) = AliasedDefinition : -# 171| m171_3(unknown) = InitializeNonLocal : -# 171| m171_4(unknown) = Chi : total:m171_2, partial:m171_3 -# 171| r171_5(glval) = VariableAddress[p] : -# 171| m171_6(int *) = InitializeParameter[p] : &:r171_5 -# 171| r171_7(int *) = Load[p] : &:r171_5, m171_6 -# 171| m171_8(unknown) = InitializeIndirection[p] : &:r171_7 -# 171| r171_9(glval) = VariableAddress[i] : -# 171| m171_10(int) = InitializeParameter[i] : &:r171_9 +# 171| mu171_2(unknown) = AliasedDefinition : +# 171| mu171_3(unknown) = InitializeNonLocal : +# 171| r171_4(glval) = VariableAddress[p] : +# 171| m171_5(int *) = InitializeParameter[p] : &:r171_4 +# 171| r171_6(int *) = Load[p] : &:r171_4, m171_5 +# 171| mu171_7(unknown) = InitializeIndirection[p] : &:r171_6 +# 171| r171_8(glval) = VariableAddress[i] : +# 171| m171_9(int) = InitializeParameter[i] : &:r171_8 # 172| r172_1(glval) = VariableAddress[x] : # 172| m172_2(int) = Uninitialized[x] : &:r172_1 # 174| r174_1(glval) = VariableAddress[p] : -# 174| r174_2(int *) = Load[p] : &:r174_1, m171_6 +# 174| r174_2(int *) = Load[p] : &:r174_1, m171_5 # 174| r174_3(glval) = VariableAddress[i] : -# 174| r174_4(int) = Load[i] : &:r174_3, m171_10 +# 174| r174_4(int) = Load[i] : &:r174_3, m171_9 # 174| r174_5(glval) = PointerAdd[4] : r174_2, r174_4 -# 174| r174_6(int) = Load[?] : &:r174_5, ~m171_8 +# 174| r174_6(int) = Load[?] : &:r174_5, ~m? # 174| r174_7(glval) = VariableAddress[x] : # 174| m174_8(int) = Store[x] : &:r174_7, r174_6 # 175| r175_1(glval) = VariableAddress[p] : -# 175| r175_2(int *) = Load[p] : &:r175_1, m171_6 +# 175| r175_2(int *) = Load[p] : &:r175_1, m171_5 # 175| r175_3(glval) = VariableAddress[i] : -# 175| r175_4(int) = Load[i] : &:r175_3, m171_10 +# 175| r175_4(int) = Load[i] : &:r175_3, m171_9 # 175| r175_5(glval) = PointerAdd[4] : r175_2, r175_4 -# 175| r175_6(int) = Load[?] : &:r175_5, ~m171_8 +# 175| r175_6(int) = Load[?] : &:r175_5, ~m? # 175| r175_7(glval) = VariableAddress[x] : # 175| m175_8(int) = Store[x] : &:r175_7, r175_6 # 177| r177_1(glval) = VariableAddress[x] : # 177| r177_2(int) = Load[x] : &:r177_1, m175_8 # 177| r177_3(glval) = VariableAddress[p] : -# 177| r177_4(int *) = Load[p] : &:r177_3, m171_6 +# 177| r177_4(int *) = Load[p] : &:r177_3, m171_5 # 177| r177_5(glval) = VariableAddress[i] : -# 177| r177_6(int) = Load[i] : &:r177_5, m171_10 +# 177| r177_6(int) = Load[i] : &:r177_5, m171_9 # 177| r177_7(glval) = PointerAdd[4] : r177_4, r177_6 -# 177| m177_8(int) = Store[?] : &:r177_7, r177_2 -# 177| m177_9(unknown) = Chi : total:m171_8, partial:m177_8 +# 177| mu177_8(int) = Store[?] : &:r177_7, r177_2 # 178| r178_1(glval) = VariableAddress[x] : # 178| r178_2(int) = Load[x] : &:r178_1, m175_8 # 178| r178_3(glval) = VariableAddress[p] : -# 178| r178_4(int *) = Load[p] : &:r178_3, m171_6 +# 178| r178_4(int *) = Load[p] : &:r178_3, m171_5 # 178| r178_5(glval) = VariableAddress[i] : -# 178| r178_6(int) = Load[i] : &:r178_5, m171_10 +# 178| r178_6(int) = Load[i] : &:r178_5, m171_9 # 178| r178_7(glval) = PointerAdd[4] : r178_4, r178_6 -# 178| m178_8(int) = Store[?] : &:r178_7, r178_2 -# 178| m178_9(unknown) = Chi : total:m177_9, partial:m178_8 +# 178| mu178_8(int) = Store[?] : &:r178_7, r178_2 # 180| r180_1(glval) = VariableAddress[a] : -# 180| m180_2(int[10]) = Uninitialized[a] : &:r180_1 +# 180| mu180_2(int[10]) = Uninitialized[a] : &:r180_1 # 181| r181_1(glval) = VariableAddress[a] : # 181| r181_2(int *) = Convert : r181_1 # 181| r181_3(glval) = VariableAddress[i] : -# 181| r181_4(int) = Load[i] : &:r181_3, m171_10 +# 181| r181_4(int) = Load[i] : &:r181_3, m171_9 # 181| r181_5(glval) = PointerAdd[4] : r181_2, r181_4 -# 181| r181_6(int) = Load[?] : &:r181_5, ~m180_2 +# 181| r181_6(int) = Load[?] : &:r181_5, ~m? # 181| r181_7(glval) = VariableAddress[x] : # 181| m181_8(int) = Store[x] : &:r181_7, r181_6 # 182| r182_1(glval) = VariableAddress[a] : # 182| r182_2(int *) = Convert : r182_1 # 182| r182_3(glval) = VariableAddress[i] : -# 182| r182_4(int) = Load[i] : &:r182_3, m171_10 +# 182| r182_4(int) = Load[i] : &:r182_3, m171_9 # 182| r182_5(glval) = PointerAdd[4] : r182_2, r182_4 -# 182| r182_6(int) = Load[?] : &:r182_5, ~m180_2 +# 182| r182_6(int) = Load[?] : &:r182_5, ~m? # 182| r182_7(glval) = VariableAddress[x] : # 182| m182_8(int) = Store[x] : &:r182_7, r182_6 # 183| r183_1(glval) = VariableAddress[x] : @@ -4767,40 +4348,37 @@ ir.cpp: # 183| r183_3(glval) = VariableAddress[a] : # 183| r183_4(int *) = Convert : r183_3 # 183| r183_5(glval) = VariableAddress[i] : -# 183| r183_6(int) = Load[i] : &:r183_5, m171_10 +# 183| r183_6(int) = Load[i] : &:r183_5, m171_9 # 183| r183_7(glval) = PointerAdd[4] : r183_4, r183_6 -# 183| m183_8(int) = Store[?] : &:r183_7, r183_2 -# 183| m183_9(int[10]) = Chi : total:m180_2, partial:m183_8 +# 183| mu183_8(int) = Store[?] : &:r183_7, r183_2 # 184| r184_1(glval) = VariableAddress[x] : # 184| r184_2(int) = Load[x] : &:r184_1, m182_8 # 184| r184_3(glval) = VariableAddress[a] : # 184| r184_4(int *) = Convert : r184_3 # 184| r184_5(glval) = VariableAddress[i] : -# 184| r184_6(int) = Load[i] : &:r184_5, m171_10 +# 184| r184_6(int) = Load[i] : &:r184_5, m171_9 # 184| r184_7(glval) = PointerAdd[4] : r184_4, r184_6 -# 184| m184_8(int) = Store[?] : &:r184_7, r184_2 -# 184| m184_9(int[10]) = Chi : total:m183_9, partial:m184_8 +# 184| mu184_8(int) = Store[?] : &:r184_7, r184_2 # 185| v185_1(void) = NoOp : -# 171| v171_11(void) = ReturnIndirection[p] : &:r171_7, m178_9 -# 171| v171_12(void) = ReturnVoid : -# 171| v171_13(void) = AliasedUse : m171_3 -# 171| v171_14(void) = ExitFunction : +# 171| v171_10(void) = ReturnIndirection[p] : &:r171_6, ~m? +# 171| v171_11(void) = ReturnVoid : +# 171| v171_12(void) = AliasedUse : ~m? +# 171| v171_13(void) = ExitFunction : # 187| void StringLiteral(int) # 187| Block 0 # 187| v187_1(void) = EnterFunction : -# 187| m187_2(unknown) = AliasedDefinition : -# 187| m187_3(unknown) = InitializeNonLocal : -# 187| m187_4(unknown) = Chi : total:m187_2, partial:m187_3 -# 187| r187_5(glval) = VariableAddress[i] : -# 187| m187_6(int) = InitializeParameter[i] : &:r187_5 +# 187| mu187_2(unknown) = AliasedDefinition : +# 187| mu187_3(unknown) = InitializeNonLocal : +# 187| r187_4(glval) = VariableAddress[i] : +# 187| m187_5(int) = InitializeParameter[i] : &:r187_4 # 188| r188_1(glval) = VariableAddress[c] : # 188| r188_2(glval) = StringConstant["Foo"] : # 188| r188_3(char *) = Convert : r188_2 # 188| r188_4(glval) = VariableAddress[i] : -# 188| r188_5(int) = Load[i] : &:r188_4, m187_6 +# 188| r188_5(int) = Load[i] : &:r188_4, m187_5 # 188| r188_6(glval) = PointerAdd[1] : r188_3, r188_5 -# 188| r188_7(char) = Load[?] : &:r188_6, ~m187_3 +# 188| r188_7(char) = Load[?] : &:r188_6, ~m? # 188| m188_8(char) = Store[c] : &:r188_1, r188_7 # 189| r189_1(glval) = VariableAddress[pwc] : # 189| r189_2(glval) = StringConstant[L"Bar"] : @@ -4811,94 +4389,92 @@ ir.cpp: # 190| r190_2(glval) = VariableAddress[pwc] : # 190| r190_3(wchar_t *) = Load[pwc] : &:r190_2, m189_5 # 190| r190_4(glval) = VariableAddress[i] : -# 190| r190_5(int) = Load[i] : &:r190_4, m187_6 +# 190| r190_5(int) = Load[i] : &:r190_4, m187_5 # 190| r190_6(glval) = PointerAdd[4] : r190_3, r190_5 -# 190| r190_7(wchar_t) = Load[?] : &:r190_6, ~m187_3 +# 190| r190_7(wchar_t) = Load[?] : &:r190_6, ~m? # 190| m190_8(wchar_t) = Store[wc] : &:r190_1, r190_7 # 191| v191_1(void) = NoOp : -# 187| v187_7(void) = ReturnVoid : -# 187| v187_8(void) = AliasedUse : m187_3 -# 187| v187_9(void) = ExitFunction : +# 187| v187_6(void) = ReturnVoid : +# 187| v187_7(void) = AliasedUse : ~m? +# 187| v187_8(void) = ExitFunction : # 193| void PointerCompare(int*, int*) # 193| Block 0 # 193| v193_1(void) = EnterFunction : -# 193| m193_2(unknown) = AliasedDefinition : -# 193| m193_3(unknown) = InitializeNonLocal : -# 193| m193_4(unknown) = Chi : total:m193_2, partial:m193_3 -# 193| r193_5(glval) = VariableAddress[p] : -# 193| m193_6(int *) = InitializeParameter[p] : &:r193_5 -# 193| r193_7(int *) = Load[p] : &:r193_5, m193_6 -# 193| m193_8(unknown) = InitializeIndirection[p] : &:r193_7 -# 193| r193_9(glval) = VariableAddress[q] : -# 193| m193_10(int *) = InitializeParameter[q] : &:r193_9 -# 193| r193_11(int *) = Load[q] : &:r193_9, m193_10 -# 193| m193_12(unknown) = InitializeIndirection[q] : &:r193_11 +# 193| mu193_2(unknown) = AliasedDefinition : +# 193| mu193_3(unknown) = InitializeNonLocal : +# 193| r193_4(glval) = VariableAddress[p] : +# 193| m193_5(int *) = InitializeParameter[p] : &:r193_4 +# 193| r193_6(int *) = Load[p] : &:r193_4, m193_5 +# 193| mu193_7(unknown) = InitializeIndirection[p] : &:r193_6 +# 193| r193_8(glval) = VariableAddress[q] : +# 193| m193_9(int *) = InitializeParameter[q] : &:r193_8 +# 193| r193_10(int *) = Load[q] : &:r193_8, m193_9 +# 193| mu193_11(unknown) = InitializeIndirection[q] : &:r193_10 # 194| r194_1(glval) = VariableAddress[b] : # 194| m194_2(bool) = Uninitialized[b] : &:r194_1 # 196| r196_1(glval) = VariableAddress[p] : -# 196| r196_2(int *) = Load[p] : &:r196_1, m193_6 +# 196| r196_2(int *) = Load[p] : &:r196_1, m193_5 # 196| r196_3(glval) = VariableAddress[q] : -# 196| r196_4(int *) = Load[q] : &:r196_3, m193_10 +# 196| r196_4(int *) = Load[q] : &:r196_3, m193_9 # 196| r196_5(bool) = CompareEQ : r196_2, r196_4 # 196| r196_6(glval) = VariableAddress[b] : # 196| m196_7(bool) = Store[b] : &:r196_6, r196_5 # 197| r197_1(glval) = VariableAddress[p] : -# 197| r197_2(int *) = Load[p] : &:r197_1, m193_6 +# 197| r197_2(int *) = Load[p] : &:r197_1, m193_5 # 197| r197_3(glval) = VariableAddress[q] : -# 197| r197_4(int *) = Load[q] : &:r197_3, m193_10 +# 197| r197_4(int *) = Load[q] : &:r197_3, m193_9 # 197| r197_5(bool) = CompareNE : r197_2, r197_4 # 197| r197_6(glval) = VariableAddress[b] : # 197| m197_7(bool) = Store[b] : &:r197_6, r197_5 # 198| r198_1(glval) = VariableAddress[p] : -# 198| r198_2(int *) = Load[p] : &:r198_1, m193_6 +# 198| r198_2(int *) = Load[p] : &:r198_1, m193_5 # 198| r198_3(glval) = VariableAddress[q] : -# 198| r198_4(int *) = Load[q] : &:r198_3, m193_10 +# 198| r198_4(int *) = Load[q] : &:r198_3, m193_9 # 198| r198_5(bool) = CompareLT : r198_2, r198_4 # 198| r198_6(glval) = VariableAddress[b] : # 198| m198_7(bool) = Store[b] : &:r198_6, r198_5 # 199| r199_1(glval) = VariableAddress[p] : -# 199| r199_2(int *) = Load[p] : &:r199_1, m193_6 +# 199| r199_2(int *) = Load[p] : &:r199_1, m193_5 # 199| r199_3(glval) = VariableAddress[q] : -# 199| r199_4(int *) = Load[q] : &:r199_3, m193_10 +# 199| r199_4(int *) = Load[q] : &:r199_3, m193_9 # 199| r199_5(bool) = CompareGT : r199_2, r199_4 # 199| r199_6(glval) = VariableAddress[b] : # 199| m199_7(bool) = Store[b] : &:r199_6, r199_5 # 200| r200_1(glval) = VariableAddress[p] : -# 200| r200_2(int *) = Load[p] : &:r200_1, m193_6 +# 200| r200_2(int *) = Load[p] : &:r200_1, m193_5 # 200| r200_3(glval) = VariableAddress[q] : -# 200| r200_4(int *) = Load[q] : &:r200_3, m193_10 +# 200| r200_4(int *) = Load[q] : &:r200_3, m193_9 # 200| r200_5(bool) = CompareLE : r200_2, r200_4 # 200| r200_6(glval) = VariableAddress[b] : # 200| m200_7(bool) = Store[b] : &:r200_6, r200_5 # 201| r201_1(glval) = VariableAddress[p] : -# 201| r201_2(int *) = Load[p] : &:r201_1, m193_6 +# 201| r201_2(int *) = Load[p] : &:r201_1, m193_5 # 201| r201_3(glval) = VariableAddress[q] : -# 201| r201_4(int *) = Load[q] : &:r201_3, m193_10 +# 201| r201_4(int *) = Load[q] : &:r201_3, m193_9 # 201| r201_5(bool) = CompareGE : r201_2, r201_4 # 201| r201_6(glval) = VariableAddress[b] : # 201| m201_7(bool) = Store[b] : &:r201_6, r201_5 # 202| v202_1(void) = NoOp : -# 193| v193_13(void) = ReturnIndirection[p] : &:r193_7, m193_8 -# 193| v193_14(void) = ReturnIndirection[q] : &:r193_11, m193_12 -# 193| v193_15(void) = ReturnVoid : -# 193| v193_16(void) = AliasedUse : m193_3 -# 193| v193_17(void) = ExitFunction : +# 193| v193_12(void) = ReturnIndirection[p] : &:r193_6, ~m? +# 193| v193_13(void) = ReturnIndirection[q] : &:r193_10, ~m? +# 193| v193_14(void) = ReturnVoid : +# 193| v193_15(void) = AliasedUse : ~m? +# 193| v193_16(void) = ExitFunction : # 204| void PointerCrement(int*) # 204| Block 0 # 204| v204_1(void) = EnterFunction : -# 204| m204_2(unknown) = AliasedDefinition : -# 204| m204_3(unknown) = InitializeNonLocal : -# 204| m204_4(unknown) = Chi : total:m204_2, partial:m204_3 -# 204| r204_5(glval) = VariableAddress[p] : -# 204| m204_6(int *) = InitializeParameter[p] : &:r204_5 -# 204| r204_7(int *) = Load[p] : &:r204_5, m204_6 -# 204| m204_8(unknown) = InitializeIndirection[p] : &:r204_7 +# 204| mu204_2(unknown) = AliasedDefinition : +# 204| mu204_3(unknown) = InitializeNonLocal : +# 204| r204_4(glval) = VariableAddress[p] : +# 204| m204_5(int *) = InitializeParameter[p] : &:r204_4 +# 204| r204_6(int *) = Load[p] : &:r204_4, m204_5 +# 204| mu204_7(unknown) = InitializeIndirection[p] : &:r204_6 # 205| r205_1(glval) = VariableAddress[q] : # 205| m205_2(int *) = Uninitialized[q] : &:r205_1 # 207| r207_1(glval) = VariableAddress[p] : -# 207| r207_2(int *) = Load[p] : &:r207_1, m204_6 +# 207| r207_2(int *) = Load[p] : &:r207_1, m204_5 # 207| r207_3(int) = Constant[1] : # 207| r207_4(int *) = PointerAdd[4] : r207_2, r207_3 # 207| m207_5(int *) = Store[p] : &:r207_1, r207_4 @@ -4930,17 +4506,16 @@ ir.cpp: # 210| r210_7(glval) = VariableAddress[q] : # 210| m210_8(int *) = Store[q] : &:r210_7, r210_6 # 211| v211_1(void) = NoOp : -# 204| v204_9(void) = ReturnIndirection[p] : &:r204_7, m204_8 -# 204| v204_10(void) = ReturnVoid : -# 204| v204_11(void) = AliasedUse : m204_3 -# 204| v204_12(void) = ExitFunction : +# 204| v204_8(void) = ReturnIndirection[p] : &:r204_6, ~m? +# 204| v204_9(void) = ReturnVoid : +# 204| v204_10(void) = AliasedUse : ~m? +# 204| v204_11(void) = ExitFunction : # 213| void CompoundAssignment() # 213| Block 0 # 213| v213_1(void) = EnterFunction : -# 213| m213_2(unknown) = AliasedDefinition : -# 213| m213_3(unknown) = InitializeNonLocal : -# 213| m213_4(unknown) = Chi : total:m213_2, partial:m213_3 +# 213| mu213_2(unknown) = AliasedDefinition : +# 213| mu213_3(unknown) = InitializeNonLocal : # 215| r215_1(glval) = VariableAddress[x] : # 215| r215_2(int) = Constant[5] : # 215| m215_3(int) = Store[x] : &:r215_1, r215_2 @@ -4976,16 +4551,15 @@ ir.cpp: # 227| r227_6(long) = Convert : r227_5 # 227| m227_7(long) = Store[z] : &:r227_2, r227_6 # 228| v228_1(void) = NoOp : -# 213| v213_5(void) = ReturnVoid : -# 213| v213_6(void) = AliasedUse : m213_3 -# 213| v213_7(void) = ExitFunction : +# 213| v213_4(void) = ReturnVoid : +# 213| v213_5(void) = AliasedUse : ~m? +# 213| v213_6(void) = ExitFunction : # 230| void UninitializedVariables() # 230| Block 0 # 230| v230_1(void) = EnterFunction : -# 230| m230_2(unknown) = AliasedDefinition : -# 230| m230_3(unknown) = InitializeNonLocal : -# 230| m230_4(unknown) = Chi : total:m230_2, partial:m230_3 +# 230| mu230_2(unknown) = AliasedDefinition : +# 230| mu230_3(unknown) = InitializeNonLocal : # 231| r231_1(glval) = VariableAddress[x] : # 231| m231_2(int) = Uninitialized[x] : &:r231_1 # 232| r232_1(glval) = VariableAddress[y] : @@ -4993,46 +4567,44 @@ ir.cpp: # 232| r232_3(int) = Load[x] : &:r232_2, m231_2 # 232| m232_4(int) = Store[y] : &:r232_1, r232_3 # 233| v233_1(void) = NoOp : -# 230| v230_5(void) = ReturnVoid : -# 230| v230_6(void) = AliasedUse : m230_3 -# 230| v230_7(void) = ExitFunction : +# 230| v230_4(void) = ReturnVoid : +# 230| v230_5(void) = AliasedUse : ~m? +# 230| v230_6(void) = ExitFunction : # 235| int Parameters(int, int) # 235| Block 0 # 235| v235_1(void) = EnterFunction : -# 235| m235_2(unknown) = AliasedDefinition : -# 235| m235_3(unknown) = InitializeNonLocal : -# 235| m235_4(unknown) = Chi : total:m235_2, partial:m235_3 -# 235| r235_5(glval) = VariableAddress[x] : -# 235| m235_6(int) = InitializeParameter[x] : &:r235_5 -# 235| r235_7(glval) = VariableAddress[y] : -# 235| m235_8(int) = InitializeParameter[y] : &:r235_7 +# 235| mu235_2(unknown) = AliasedDefinition : +# 235| mu235_3(unknown) = InitializeNonLocal : +# 235| r235_4(glval) = VariableAddress[x] : +# 235| m235_5(int) = InitializeParameter[x] : &:r235_4 +# 235| r235_6(glval) = VariableAddress[y] : +# 235| m235_7(int) = InitializeParameter[y] : &:r235_6 # 236| r236_1(glval) = VariableAddress[#return] : # 236| r236_2(glval) = VariableAddress[x] : -# 236| r236_3(int) = Load[x] : &:r236_2, m235_6 +# 236| r236_3(int) = Load[x] : &:r236_2, m235_5 # 236| r236_4(glval) = VariableAddress[y] : -# 236| r236_5(int) = Load[y] : &:r236_4, m235_8 +# 236| r236_5(int) = Load[y] : &:r236_4, m235_7 # 236| r236_6(int) = Rem : r236_3, r236_5 # 236| m236_7(int) = Store[#return] : &:r236_1, r236_6 -# 235| r235_9(glval) = VariableAddress[#return] : -# 235| v235_10(void) = ReturnValue : &:r235_9, m236_7 -# 235| v235_11(void) = AliasedUse : m235_3 -# 235| v235_12(void) = ExitFunction : +# 235| r235_8(glval) = VariableAddress[#return] : +# 235| v235_9(void) = ReturnValue : &:r235_8, m236_7 +# 235| v235_10(void) = AliasedUse : ~m? +# 235| v235_11(void) = ExitFunction : # 239| void IfStatements(bool, int, int) # 239| Block 0 # 239| v239_1(void) = EnterFunction : -# 239| m239_2(unknown) = AliasedDefinition : -# 239| m239_3(unknown) = InitializeNonLocal : -# 239| m239_4(unknown) = Chi : total:m239_2, partial:m239_3 -# 239| r239_5(glval) = VariableAddress[b] : -# 239| m239_6(bool) = InitializeParameter[b] : &:r239_5 -# 239| r239_7(glval) = VariableAddress[x] : -# 239| m239_8(int) = InitializeParameter[x] : &:r239_7 -# 239| r239_9(glval) = VariableAddress[y] : -# 239| m239_10(int) = InitializeParameter[y] : &:r239_9 +# 239| mu239_2(unknown) = AliasedDefinition : +# 239| mu239_3(unknown) = InitializeNonLocal : +# 239| r239_4(glval) = VariableAddress[b] : +# 239| m239_5(bool) = InitializeParameter[b] : &:r239_4 +# 239| r239_6(glval) = VariableAddress[x] : +# 239| m239_7(int) = InitializeParameter[x] : &:r239_6 +# 239| r239_8(glval) = VariableAddress[y] : +# 239| m239_9(int) = InitializeParameter[y] : &:r239_8 # 240| r240_1(glval) = VariableAddress[b] : -# 240| r240_2(bool) = Load[b] : &:r240_1, m239_6 +# 240| r240_2(bool) = Load[b] : &:r240_1, m239_5 # 240| v240_3(void) = ConditionalBranch : r240_2 #-----| False -> Block 2 #-----| True -> Block 1 @@ -5043,20 +4615,20 @@ ir.cpp: # 243| Block 2 # 243| r243_1(glval) = VariableAddress[b] : -# 243| r243_2(bool) = Load[b] : &:r243_1, m239_6 +# 243| r243_2(bool) = Load[b] : &:r243_1, m239_5 # 243| v243_3(void) = ConditionalBranch : r243_2 #-----| False -> Block 4 #-----| True -> Block 3 # 244| Block 3 # 244| r244_1(glval) = VariableAddress[y] : -# 244| r244_2(int) = Load[y] : &:r244_1, m239_10 +# 244| r244_2(int) = Load[y] : &:r244_1, m239_9 # 244| r244_3(glval) = VariableAddress[x] : # 244| m244_4(int) = Store[x] : &:r244_3, r244_2 #-----| Goto -> Block 4 # 247| Block 4 -# 247| m247_1(int) = Phi : from 2:m239_8, from 3:m244_4 +# 247| m247_1(int) = Phi : from 2:m239_7, from 3:m244_4 # 247| r247_2(glval) = VariableAddress[x] : # 247| r247_3(int) = Load[x] : &:r247_2, m247_1 # 247| r247_4(int) = Constant[7] : @@ -5079,22 +4651,21 @@ ir.cpp: # 251| Block 7 # 251| v251_1(void) = NoOp : -# 239| v239_11(void) = ReturnVoid : -# 239| v239_12(void) = AliasedUse : m239_3 -# 239| v239_13(void) = ExitFunction : +# 239| v239_10(void) = ReturnVoid : +# 239| v239_11(void) = AliasedUse : ~m? +# 239| v239_12(void) = ExitFunction : # 253| void WhileStatements(int) # 253| Block 0 # 253| v253_1(void) = EnterFunction : -# 253| m253_2(unknown) = AliasedDefinition : -# 253| m253_3(unknown) = InitializeNonLocal : -# 253| m253_4(unknown) = Chi : total:m253_2, partial:m253_3 -# 253| r253_5(glval) = VariableAddress[n] : -# 253| m253_6(int) = InitializeParameter[n] : &:r253_5 +# 253| mu253_2(unknown) = AliasedDefinition : +# 253| mu253_3(unknown) = InitializeNonLocal : +# 253| r253_4(glval) = VariableAddress[n] : +# 253| m253_5(int) = InitializeParameter[n] : &:r253_4 #-----| Goto -> Block 1 # 254| Block 1 -# 254| m254_1(int) = Phi : from 0:m253_6, from 2:m255_5 +# 254| m254_1(int) = Phi : from 0:m253_5, from 2:m255_5 # 254| r254_2(glval) = VariableAddress[n] : # 254| r254_3(int) = Load[n] : &:r254_2, m254_1 # 254| r254_4(int) = Constant[0] : @@ -5113,22 +4684,21 @@ ir.cpp: # 257| Block 3 # 257| v257_1(void) = NoOp : -# 253| v253_7(void) = ReturnVoid : -# 253| v253_8(void) = AliasedUse : m253_3 -# 253| v253_9(void) = ExitFunction : +# 253| v253_6(void) = ReturnVoid : +# 253| v253_7(void) = AliasedUse : ~m? +# 253| v253_8(void) = ExitFunction : # 259| void DoStatements(int) # 259| Block 0 # 259| v259_1(void) = EnterFunction : -# 259| m259_2(unknown) = AliasedDefinition : -# 259| m259_3(unknown) = InitializeNonLocal : -# 259| m259_4(unknown) = Chi : total:m259_2, partial:m259_3 -# 259| r259_5(glval) = VariableAddress[n] : -# 259| m259_6(int) = InitializeParameter[n] : &:r259_5 +# 259| mu259_2(unknown) = AliasedDefinition : +# 259| mu259_3(unknown) = InitializeNonLocal : +# 259| r259_4(glval) = VariableAddress[n] : +# 259| m259_5(int) = InitializeParameter[n] : &:r259_4 #-----| Goto -> Block 1 # 261| Block 1 -# 261| m261_1(int) = Phi : from 0:m259_6, from 1:m261_6 +# 261| m261_1(int) = Phi : from 0:m259_5, from 1:m261_6 # 261| r261_2(int) = Constant[1] : # 261| r261_3(glval) = VariableAddress[n] : # 261| r261_4(int) = Load[n] : &:r261_3, m261_1 @@ -5144,16 +4714,15 @@ ir.cpp: # 263| Block 2 # 263| v263_1(void) = NoOp : -# 259| v259_7(void) = ReturnVoid : -# 259| v259_8(void) = AliasedUse : m259_3 -# 259| v259_9(void) = ExitFunction : +# 259| v259_6(void) = ReturnVoid : +# 259| v259_7(void) = AliasedUse : ~m? +# 259| v259_8(void) = ExitFunction : # 265| void For_Empty() # 265| Block 0 # 265| v265_1(void) = EnterFunction : -# 265| m265_2(unknown) = AliasedDefinition : -# 265| m265_3(unknown) = InitializeNonLocal : -# 265| m265_4(unknown) = Chi : total:m265_2, partial:m265_3 +# 265| mu265_2(unknown) = AliasedDefinition : +# 265| mu265_3(unknown) = InitializeNonLocal : # 266| r266_1(glval) = VariableAddress[j] : # 266| m266_2(int) = Uninitialized[j] : &:r266_1 #-----| Goto -> Block 1 @@ -5165,9 +4734,8 @@ ir.cpp: # 272| void For_Init() # 272| Block 0 # 272| v272_1(void) = EnterFunction : -# 272| m272_2(unknown) = AliasedDefinition : -# 272| m272_3(unknown) = InitializeNonLocal : -# 272| m272_4(unknown) = Chi : total:m272_2, partial:m272_3 +# 272| mu272_2(unknown) = AliasedDefinition : +# 272| mu272_3(unknown) = InitializeNonLocal : # 273| r273_1(glval) = VariableAddress[i] : # 273| r273_2(int) = Constant[0] : # 273| m273_3(int) = Store[i] : &:r273_1, r273_2 @@ -5180,9 +4748,8 @@ ir.cpp: # 278| void For_Condition() # 278| Block 0 # 278| v278_1(void) = EnterFunction : -# 278| m278_2(unknown) = AliasedDefinition : -# 278| m278_3(unknown) = InitializeNonLocal : -# 278| m278_4(unknown) = Chi : total:m278_2, partial:m278_3 +# 278| mu278_2(unknown) = AliasedDefinition : +# 278| mu278_3(unknown) = InitializeNonLocal : # 279| r279_1(glval) = VariableAddress[i] : # 279| r279_2(int) = Constant[0] : # 279| m279_3(int) = Store[i] : &:r279_1, r279_2 @@ -5201,15 +4768,17 @@ ir.cpp: # 281| v281_1(void) = NoOp : #-----| Goto (back edge) -> Block 1 -# 278| Block 3 -# 278| v278_5(void) = Unreached : +# 283| Block 3 +# 283| v283_1(void) = NoOp : +# 278| v278_4(void) = ReturnVoid : +# 278| v278_5(void) = AliasedUse : ~m? +# 278| v278_6(void) = ExitFunction : # 285| void For_Update() # 285| Block 0 # 285| v285_1(void) = EnterFunction : -# 285| m285_2(unknown) = AliasedDefinition : -# 285| m285_3(unknown) = InitializeNonLocal : -# 285| m285_4(unknown) = Chi : total:m285_2, partial:m285_3 +# 285| mu285_2(unknown) = AliasedDefinition : +# 285| mu285_3(unknown) = InitializeNonLocal : # 286| r286_1(glval) = VariableAddress[i] : # 286| r286_2(int) = Constant[0] : # 286| m286_3(int) = Store[i] : &:r286_1, r286_2 @@ -5228,9 +4797,8 @@ ir.cpp: # 292| void For_InitCondition() # 292| Block 0 # 292| v292_1(void) = EnterFunction : -# 292| m292_2(unknown) = AliasedDefinition : -# 292| m292_3(unknown) = InitializeNonLocal : -# 292| m292_4(unknown) = Chi : total:m292_2, partial:m292_3 +# 292| mu292_2(unknown) = AliasedDefinition : +# 292| mu292_3(unknown) = InitializeNonLocal : # 293| r293_1(glval) = VariableAddress[i] : # 293| r293_2(int) = Constant[0] : # 293| m293_3(int) = Store[i] : &:r293_1, r293_2 @@ -5249,15 +4817,17 @@ ir.cpp: # 294| v294_1(void) = NoOp : #-----| Goto (back edge) -> Block 1 -# 292| Block 3 -# 292| v292_5(void) = Unreached : +# 296| Block 3 +# 296| v296_1(void) = NoOp : +# 292| v292_4(void) = ReturnVoid : +# 292| v292_5(void) = AliasedUse : ~m? +# 292| v292_6(void) = ExitFunction : # 298| void For_InitUpdate() # 298| Block 0 # 298| v298_1(void) = EnterFunction : -# 298| m298_2(unknown) = AliasedDefinition : -# 298| m298_3(unknown) = InitializeNonLocal : -# 298| m298_4(unknown) = Chi : total:m298_2, partial:m298_3 +# 298| mu298_2(unknown) = AliasedDefinition : +# 298| mu298_3(unknown) = InitializeNonLocal : # 299| r299_1(glval) = VariableAddress[i] : # 299| r299_2(int) = Constant[0] : # 299| m299_3(int) = Store[i] : &:r299_1, r299_2 @@ -5276,9 +4846,8 @@ ir.cpp: # 304| void For_ConditionUpdate() # 304| Block 0 # 304| v304_1(void) = EnterFunction : -# 304| m304_2(unknown) = AliasedDefinition : -# 304| m304_3(unknown) = InitializeNonLocal : -# 304| m304_4(unknown) = Chi : total:m304_2, partial:m304_3 +# 304| mu304_2(unknown) = AliasedDefinition : +# 304| mu304_3(unknown) = InitializeNonLocal : # 305| r305_1(glval) = VariableAddress[i] : # 305| r305_2(int) = Constant[0] : # 305| m305_3(int) = Store[i] : &:r305_1, r305_2 @@ -5305,16 +4874,15 @@ ir.cpp: # 309| Block 3 # 309| v309_1(void) = NoOp : -# 304| v304_5(void) = ReturnVoid : -# 304| v304_6(void) = AliasedUse : m304_3 -# 304| v304_7(void) = ExitFunction : +# 304| v304_4(void) = ReturnVoid : +# 304| v304_5(void) = AliasedUse : ~m? +# 304| v304_6(void) = ExitFunction : # 311| void For_InitConditionUpdate() # 311| Block 0 # 311| v311_1(void) = EnterFunction : -# 311| m311_2(unknown) = AliasedDefinition : -# 311| m311_3(unknown) = InitializeNonLocal : -# 311| m311_4(unknown) = Chi : total:m311_2, partial:m311_3 +# 311| mu311_2(unknown) = AliasedDefinition : +# 311| mu311_3(unknown) = InitializeNonLocal : # 312| r312_1(glval) = VariableAddress[i] : # 312| r312_2(int) = Constant[0] : # 312| m312_3(int) = Store[i] : &:r312_1, r312_2 @@ -5341,16 +4909,15 @@ ir.cpp: # 315| Block 3 # 315| v315_1(void) = NoOp : -# 311| v311_5(void) = ReturnVoid : -# 311| v311_6(void) = AliasedUse : m311_3 -# 311| v311_7(void) = ExitFunction : +# 311| v311_4(void) = ReturnVoid : +# 311| v311_5(void) = AliasedUse : ~m? +# 311| v311_6(void) = ExitFunction : # 317| void For_Break() # 317| Block 0 # 317| v317_1(void) = EnterFunction : -# 317| m317_2(unknown) = AliasedDefinition : -# 317| m317_3(unknown) = InitializeNonLocal : -# 317| m317_4(unknown) = Chi : total:m317_2, partial:m317_3 +# 317| mu317_2(unknown) = AliasedDefinition : +# 317| mu317_3(unknown) = InitializeNonLocal : # 318| r318_1(glval) = VariableAddress[i] : # 318| r318_2(int) = Constant[0] : # 318| m318_3(int) = Store[i] : &:r318_1, r318_2 @@ -5390,16 +4957,15 @@ ir.cpp: # 322| Block 5 # 322| v322_1(void) = NoOp : # 323| v323_1(void) = NoOp : -# 317| v317_5(void) = ReturnVoid : -# 317| v317_6(void) = AliasedUse : m317_3 -# 317| v317_7(void) = ExitFunction : +# 317| v317_4(void) = ReturnVoid : +# 317| v317_5(void) = AliasedUse : ~m? +# 317| v317_6(void) = ExitFunction : # 325| void For_Continue_Update() # 325| Block 0 # 325| v325_1(void) = EnterFunction : -# 325| m325_2(unknown) = AliasedDefinition : -# 325| m325_3(unknown) = InitializeNonLocal : -# 325| m325_4(unknown) = Chi : total:m325_2, partial:m325_3 +# 325| mu325_2(unknown) = AliasedDefinition : +# 325| mu325_3(unknown) = InitializeNonLocal : # 326| r326_1(glval) = VariableAddress[i] : # 326| r326_2(int) = Constant[0] : # 326| m326_3(int) = Store[i] : &:r326_1, r326_2 @@ -5439,16 +5005,15 @@ ir.cpp: # 331| Block 5 # 331| v331_1(void) = NoOp : -# 325| v325_5(void) = ReturnVoid : -# 325| v325_6(void) = AliasedUse : m325_3 -# 325| v325_7(void) = ExitFunction : +# 325| v325_4(void) = ReturnVoid : +# 325| v325_5(void) = AliasedUse : ~m? +# 325| v325_6(void) = ExitFunction : # 333| void For_Continue_NoUpdate() # 333| Block 0 # 333| v333_1(void) = EnterFunction : -# 333| m333_2(unknown) = AliasedDefinition : -# 333| m333_3(unknown) = InitializeNonLocal : -# 333| m333_4(unknown) = Chi : total:m333_2, partial:m333_3 +# 333| mu333_2(unknown) = AliasedDefinition : +# 333| mu333_3(unknown) = InitializeNonLocal : # 334| r334_1(glval) = VariableAddress[i] : # 334| r334_2(int) = Constant[0] : # 334| m334_3(int) = Store[i] : &:r334_1, r334_2 @@ -5460,7 +5025,7 @@ ir.cpp: # 334| r334_6(int) = Constant[10] : # 334| r334_7(bool) = CompareLT : r334_5, r334_6 # 334| v334_8(void) = ConditionalBranch : r334_7 -#-----| False -> Block 4 +#-----| False -> Block 5 #-----| True -> Block 2 # 335| Block 2 @@ -5469,70 +5034,73 @@ ir.cpp: # 335| r335_3(int) = Constant[5] : # 335| r335_4(bool) = CompareEQ : r335_2, r335_3 # 335| v335_5(void) = ConditionalBranch : r335_4 -#-----| False -> Block 3 -#-----| True -> Block 4 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 336| Block 3 +# 336| v336_1(void) = NoOp : +#-----| Goto -> Block 4 -# 334| Block 3 +# 334| Block 4 # 334| v334_9(void) = NoOp : #-----| Goto (back edge) -> Block 1 -# 333| Block 4 -# 333| v333_5(void) = Unreached : +# 339| Block 5 +# 339| v339_1(void) = NoOp : +# 333| v333_4(void) = ReturnVoid : +# 333| v333_5(void) = AliasedUse : ~m? +# 333| v333_6(void) = ExitFunction : # 341| int Dereference(int*) # 341| Block 0 # 341| v341_1(void) = EnterFunction : -# 341| m341_2(unknown) = AliasedDefinition : -# 341| m341_3(unknown) = InitializeNonLocal : -# 341| m341_4(unknown) = Chi : total:m341_2, partial:m341_3 -# 341| r341_5(glval) = VariableAddress[p] : -# 341| m341_6(int *) = InitializeParameter[p] : &:r341_5 -# 341| r341_7(int *) = Load[p] : &:r341_5, m341_6 -# 341| m341_8(unknown) = InitializeIndirection[p] : &:r341_7 +# 341| mu341_2(unknown) = AliasedDefinition : +# 341| mu341_3(unknown) = InitializeNonLocal : +# 341| r341_4(glval) = VariableAddress[p] : +# 341| m341_5(int *) = InitializeParameter[p] : &:r341_4 +# 341| r341_6(int *) = Load[p] : &:r341_4, m341_5 +# 341| mu341_7(unknown) = InitializeIndirection[p] : &:r341_6 # 342| r342_1(int) = Constant[1] : # 342| r342_2(glval) = VariableAddress[p] : -# 342| r342_3(int *) = Load[p] : &:r342_2, m341_6 +# 342| r342_3(int *) = Load[p] : &:r342_2, m341_5 # 342| r342_4(glval) = CopyValue : r342_3 -# 342| m342_5(int) = Store[?] : &:r342_4, r342_1 -# 342| m342_6(unknown) = Chi : total:m341_8, partial:m342_5 +# 342| mu342_5(int) = Store[?] : &:r342_4, r342_1 # 343| r343_1(glval) = VariableAddress[#return] : # 343| r343_2(glval) = VariableAddress[p] : -# 343| r343_3(int *) = Load[p] : &:r343_2, m341_6 -# 343| r343_4(int) = Load[?] : &:r343_3, m342_5 +# 343| r343_3(int *) = Load[p] : &:r343_2, m341_5 +# 343| r343_4(int) = Load[?] : &:r343_3, ~m? # 343| m343_5(int) = Store[#return] : &:r343_1, r343_4 -# 341| v341_9(void) = ReturnIndirection[p] : &:r341_7, m342_6 -# 341| r341_10(glval) = VariableAddress[#return] : -# 341| v341_11(void) = ReturnValue : &:r341_10, m343_5 -# 341| v341_12(void) = AliasedUse : m341_3 -# 341| v341_13(void) = ExitFunction : +# 341| v341_8(void) = ReturnIndirection[p] : &:r341_6, ~m? +# 341| r341_9(glval) = VariableAddress[#return] : +# 341| v341_10(void) = ReturnValue : &:r341_9, m343_5 +# 341| v341_11(void) = AliasedUse : ~m? +# 341| v341_12(void) = ExitFunction : # 348| int* AddressOf() # 348| Block 0 # 348| v348_1(void) = EnterFunction : -# 348| m348_2(unknown) = AliasedDefinition : -# 348| m348_3(unknown) = InitializeNonLocal : -# 348| m348_4(unknown) = Chi : total:m348_2, partial:m348_3 +# 348| mu348_2(unknown) = AliasedDefinition : +# 348| mu348_3(unknown) = InitializeNonLocal : # 349| r349_1(glval) = VariableAddress[#return] : # 349| r349_2(glval) = VariableAddress[g] : # 349| r349_3(int *) = CopyValue : r349_2 # 349| m349_4(int *) = Store[#return] : &:r349_1, r349_3 -# 348| r348_5(glval) = VariableAddress[#return] : -# 348| v348_6(void) = ReturnValue : &:r348_5, m349_4 -# 348| v348_7(void) = AliasedUse : m348_3 -# 348| v348_8(void) = ExitFunction : +# 348| r348_4(glval) = VariableAddress[#return] : +# 348| v348_5(void) = ReturnValue : &:r348_4, m349_4 +# 348| v348_6(void) = AliasedUse : ~m? +# 348| v348_7(void) = ExitFunction : # 352| void Break(int) # 352| Block 0 # 352| v352_1(void) = EnterFunction : -# 352| m352_2(unknown) = AliasedDefinition : -# 352| m352_3(unknown) = InitializeNonLocal : -# 352| m352_4(unknown) = Chi : total:m352_2, partial:m352_3 -# 352| r352_5(glval) = VariableAddress[n] : -# 352| m352_6(int) = InitializeParameter[n] : &:r352_5 +# 352| mu352_2(unknown) = AliasedDefinition : +# 352| mu352_3(unknown) = InitializeNonLocal : +# 352| r352_4(glval) = VariableAddress[n] : +# 352| m352_5(int) = InitializeParameter[n] : &:r352_4 #-----| Goto -> Block 1 # 353| Block 1 -# 353| m353_1(int) = Phi : from 0:m352_6, from 4:m356_5 +# 353| m353_1(int) = Phi : from 0:m352_5, from 4:m356_5 # 353| r353_2(glval) = VariableAddress[n] : # 353| r353_3(int) = Load[n] : &:r353_2, m353_1 # 353| r353_4(int) = Constant[0] : @@ -5565,22 +5133,21 @@ ir.cpp: # 357| Block 5 # 357| v357_1(void) = NoOp : # 358| v358_1(void) = NoOp : -# 352| v352_7(void) = ReturnVoid : -# 352| v352_8(void) = AliasedUse : m352_3 -# 352| v352_9(void) = ExitFunction : +# 352| v352_6(void) = ReturnVoid : +# 352| v352_7(void) = AliasedUse : ~m? +# 352| v352_8(void) = ExitFunction : # 360| void Continue(int) # 360| Block 0 # 360| v360_1(void) = EnterFunction : -# 360| m360_2(unknown) = AliasedDefinition : -# 360| m360_3(unknown) = InitializeNonLocal : -# 360| m360_4(unknown) = Chi : total:m360_2, partial:m360_3 -# 360| r360_5(glval) = VariableAddress[n] : -# 360| m360_6(int) = InitializeParameter[n] : &:r360_5 +# 360| mu360_2(unknown) = AliasedDefinition : +# 360| mu360_3(unknown) = InitializeNonLocal : +# 360| r360_4(glval) = VariableAddress[n] : +# 360| m360_5(int) = InitializeParameter[n] : &:r360_4 #-----| Goto -> Block 1 # 362| Block 1 -# 362| m362_1(int) = Phi : from 0:m360_6, from 4:m361_1 +# 362| m362_1(int) = Phi : from 0:m360_5, from 4:m361_1 # 362| r362_2(glval) = VariableAddress[n] : # 362| r362_3(int) = Load[n] : &:r362_2, m362_1 # 362| r362_4(int) = Constant[1] : @@ -5614,92 +5181,84 @@ ir.cpp: # 367| Block 5 # 367| v367_1(void) = NoOp : -# 360| v360_7(void) = ReturnVoid : -# 360| v360_8(void) = AliasedUse : m360_3 -# 360| v360_9(void) = ExitFunction : +# 360| v360_6(void) = ReturnVoid : +# 360| v360_7(void) = AliasedUse : ~m? +# 360| v360_8(void) = ExitFunction : # 372| void Call() # 372| Block 0 # 372| v372_1(void) = EnterFunction : -# 372| m372_2(unknown) = AliasedDefinition : -# 372| m372_3(unknown) = InitializeNonLocal : -# 372| m372_4(unknown) = Chi : total:m372_2, partial:m372_3 +# 372| mu372_2(unknown) = AliasedDefinition : +# 372| mu372_3(unknown) = InitializeNonLocal : # 373| r373_1(glval) = FunctionAddress[VoidFunc] : # 373| v373_2(void) = Call[VoidFunc] : func:r373_1 -# 373| m373_3(unknown) = ^CallSideEffect : ~m372_4 -# 373| m373_4(unknown) = Chi : total:m372_4, partial:m373_3 +# 373| mu373_3(unknown) = ^CallSideEffect : ~m? # 374| v374_1(void) = NoOp : -# 372| v372_5(void) = ReturnVoid : -# 372| v372_6(void) = AliasedUse : ~m373_4 -# 372| v372_7(void) = ExitFunction : +# 372| v372_4(void) = ReturnVoid : +# 372| v372_5(void) = AliasedUse : ~m? +# 372| v372_6(void) = ExitFunction : # 376| int CallAdd(int, int) # 376| Block 0 # 376| v376_1(void) = EnterFunction : -# 376| m376_2(unknown) = AliasedDefinition : -# 376| m376_3(unknown) = InitializeNonLocal : -# 376| m376_4(unknown) = Chi : total:m376_2, partial:m376_3 -# 376| r376_5(glval) = VariableAddress[x] : -# 376| m376_6(int) = InitializeParameter[x] : &:r376_5 -# 376| r376_7(glval) = VariableAddress[y] : -# 376| m376_8(int) = InitializeParameter[y] : &:r376_7 +# 376| mu376_2(unknown) = AliasedDefinition : +# 376| mu376_3(unknown) = InitializeNonLocal : +# 376| r376_4(glval) = VariableAddress[x] : +# 376| m376_5(int) = InitializeParameter[x] : &:r376_4 +# 376| r376_6(glval) = VariableAddress[y] : +# 376| m376_7(int) = InitializeParameter[y] : &:r376_6 # 377| r377_1(glval) = VariableAddress[#return] : # 377| r377_2(glval) = FunctionAddress[Add] : # 377| r377_3(glval) = VariableAddress[x] : -# 377| r377_4(int) = Load[x] : &:r377_3, m376_6 +# 377| r377_4(int) = Load[x] : &:r377_3, m376_5 # 377| r377_5(glval) = VariableAddress[y] : -# 377| r377_6(int) = Load[y] : &:r377_5, m376_8 +# 377| r377_6(int) = Load[y] : &:r377_5, m376_7 # 377| r377_7(int) = Call[Add] : func:r377_2, 0:r377_4, 1:r377_6 -# 377| m377_8(unknown) = ^CallSideEffect : ~m376_4 -# 377| m377_9(unknown) = Chi : total:m376_4, partial:m377_8 -# 377| m377_10(int) = Store[#return] : &:r377_1, r377_7 -# 376| r376_9(glval) = VariableAddress[#return] : -# 376| v376_10(void) = ReturnValue : &:r376_9, m377_10 -# 376| v376_11(void) = AliasedUse : ~m377_9 -# 376| v376_12(void) = ExitFunction : +# 377| mu377_8(unknown) = ^CallSideEffect : ~m? +# 377| m377_9(int) = Store[#return] : &:r377_1, r377_7 +# 376| r376_8(glval) = VariableAddress[#return] : +# 376| v376_9(void) = ReturnValue : &:r376_8, m377_9 +# 376| v376_10(void) = AliasedUse : ~m? +# 376| v376_11(void) = ExitFunction : # 380| int Comma(int, int) # 380| Block 0 # 380| v380_1(void) = EnterFunction : -# 380| m380_2(unknown) = AliasedDefinition : -# 380| m380_3(unknown) = InitializeNonLocal : -# 380| m380_4(unknown) = Chi : total:m380_2, partial:m380_3 -# 380| r380_5(glval) = VariableAddress[x] : -# 380| m380_6(int) = InitializeParameter[x] : &:r380_5 -# 380| r380_7(glval) = VariableAddress[y] : -# 380| m380_8(int) = InitializeParameter[y] : &:r380_7 +# 380| mu380_2(unknown) = AliasedDefinition : +# 380| mu380_3(unknown) = InitializeNonLocal : +# 380| r380_4(glval) = VariableAddress[x] : +# 380| m380_5(int) = InitializeParameter[x] : &:r380_4 +# 380| r380_6(glval) = VariableAddress[y] : +# 380| m380_7(int) = InitializeParameter[y] : &:r380_6 # 381| r381_1(glval) = VariableAddress[#return] : # 381| r381_2(glval) = FunctionAddress[VoidFunc] : # 381| v381_3(void) = Call[VoidFunc] : func:r381_2 -# 381| m381_4(unknown) = ^CallSideEffect : ~m380_4 -# 381| m381_5(unknown) = Chi : total:m380_4, partial:m381_4 -# 381| r381_6(glval) = FunctionAddress[CallAdd] : -# 381| r381_7(glval) = VariableAddress[x] : -# 381| r381_8(int) = Load[x] : &:r381_7, m380_6 -# 381| r381_9(glval) = VariableAddress[y] : -# 381| r381_10(int) = Load[y] : &:r381_9, m380_8 -# 381| r381_11(int) = Call[CallAdd] : func:r381_6, 0:r381_8, 1:r381_10 -# 381| m381_12(unknown) = ^CallSideEffect : ~m381_5 -# 381| m381_13(unknown) = Chi : total:m381_5, partial:m381_12 -# 381| r381_14(int) = CopyValue : r381_11 -# 381| m381_15(int) = Store[#return] : &:r381_1, r381_14 -# 380| r380_9(glval) = VariableAddress[#return] : -# 380| v380_10(void) = ReturnValue : &:r380_9, m381_15 -# 380| v380_11(void) = AliasedUse : ~m381_13 -# 380| v380_12(void) = ExitFunction : +# 381| mu381_4(unknown) = ^CallSideEffect : ~m? +# 381| r381_5(glval) = FunctionAddress[CallAdd] : +# 381| r381_6(glval) = VariableAddress[x] : +# 381| r381_7(int) = Load[x] : &:r381_6, m380_5 +# 381| r381_8(glval) = VariableAddress[y] : +# 381| r381_9(int) = Load[y] : &:r381_8, m380_7 +# 381| r381_10(int) = Call[CallAdd] : func:r381_5, 0:r381_7, 1:r381_9 +# 381| mu381_11(unknown) = ^CallSideEffect : ~m? +# 381| r381_12(int) = CopyValue : r381_10 +# 381| m381_13(int) = Store[#return] : &:r381_1, r381_12 +# 380| r380_8(glval) = VariableAddress[#return] : +# 380| v380_9(void) = ReturnValue : &:r380_8, m381_13 +# 380| v380_10(void) = AliasedUse : ~m? +# 380| v380_11(void) = ExitFunction : # 384| void Switch(int) # 384| Block 0 # 384| v384_1(void) = EnterFunction : -# 384| m384_2(unknown) = AliasedDefinition : -# 384| m384_3(unknown) = InitializeNonLocal : -# 384| m384_4(unknown) = Chi : total:m384_2, partial:m384_3 -# 384| r384_5(glval) = VariableAddress[x] : -# 384| m384_6(int) = InitializeParameter[x] : &:r384_5 +# 384| mu384_2(unknown) = AliasedDefinition : +# 384| mu384_3(unknown) = InitializeNonLocal : +# 384| r384_4(glval) = VariableAddress[x] : +# 384| m384_5(int) = InitializeParameter[x] : &:r384_4 # 385| r385_1(glval) = VariableAddress[y] : # 385| m385_2(int) = Uninitialized[y] : &:r385_1 # 386| r386_1(glval) = VariableAddress[x] : -# 386| r386_2(int) = Load[x] : &:r386_1, m384_6 +# 386| r386_2(int) = Load[x] : &:r386_1, m384_5 # 386| v386_3(void) = Switch : r386_2 #-----| Case[-1] -> Block 1 #-----| Case[1] -> Block 2 @@ -5754,78 +5313,73 @@ ir.cpp: # 409| Block 7 # 409| v409_1(void) = NoOp : # 410| v410_1(void) = NoOp : -# 384| v384_7(void) = ReturnVoid : -# 384| v384_8(void) = AliasedUse : m384_3 -# 384| v384_9(void) = ExitFunction : +# 384| v384_6(void) = ReturnVoid : +# 384| v384_7(void) = AliasedUse : ~m? +# 384| v384_8(void) = ExitFunction : # 422| Point ReturnStruct(Point) # 422| Block 0 # 422| v422_1(void) = EnterFunction : -# 422| m422_2(unknown) = AliasedDefinition : -# 422| m422_3(unknown) = InitializeNonLocal : -# 422| m422_4(unknown) = Chi : total:m422_2, partial:m422_3 -# 422| r422_5(glval) = VariableAddress[pt] : -# 422| m422_6(Point) = InitializeParameter[pt] : &:r422_5 +# 422| mu422_2(unknown) = AliasedDefinition : +# 422| mu422_3(unknown) = InitializeNonLocal : +# 422| r422_4(glval) = VariableAddress[pt] : +# 422| m422_5(Point) = InitializeParameter[pt] : &:r422_4 # 423| r423_1(glval) = VariableAddress[#return] : # 423| r423_2(glval) = VariableAddress[pt] : -# 423| r423_3(Point) = Load[pt] : &:r423_2, m422_6 +# 423| r423_3(Point) = Load[pt] : &:r423_2, m422_5 # 423| m423_4(Point) = Store[#return] : &:r423_1, r423_3 -# 422| r422_7(glval) = VariableAddress[#return] : -# 422| v422_8(void) = ReturnValue : &:r422_7, m423_4 -# 422| v422_9(void) = AliasedUse : m422_3 -# 422| v422_10(void) = ExitFunction : +# 422| r422_6(glval) = VariableAddress[#return] : +# 422| v422_7(void) = ReturnValue : &:r422_6, m423_4 +# 422| v422_8(void) = AliasedUse : ~m? +# 422| v422_9(void) = ExitFunction : # 426| void FieldAccess() # 426| Block 0 # 426| v426_1(void) = EnterFunction : -# 426| m426_2(unknown) = AliasedDefinition : -# 426| m426_3(unknown) = InitializeNonLocal : -# 426| m426_4(unknown) = Chi : total:m426_2, partial:m426_3 +# 426| mu426_2(unknown) = AliasedDefinition : +# 426| mu426_3(unknown) = InitializeNonLocal : # 427| r427_1(glval) = VariableAddress[pt] : -# 427| m427_2(Point) = Uninitialized[pt] : &:r427_1 +# 427| mu427_2(Point) = Uninitialized[pt] : &:r427_1 # 428| r428_1(int) = Constant[5] : # 428| r428_2(glval) = VariableAddress[pt] : # 428| r428_3(glval) = FieldAddress[x] : r428_2 -# 428| m428_4(int) = Store[?] : &:r428_3, r428_1 -# 428| m428_5(Point) = Chi : total:m427_2, partial:m428_4 +# 428| mu428_4(int) = Store[?] : &:r428_3, r428_1 # 429| r429_1(glval) = VariableAddress[pt] : # 429| r429_2(glval) = FieldAddress[x] : r429_1 -# 429| r429_3(int) = Load[?] : &:r429_2, m428_4 +# 429| r429_3(int) = Load[?] : &:r429_2, ~m? # 429| r429_4(glval) = VariableAddress[pt] : # 429| r429_5(glval) = FieldAddress[y] : r429_4 -# 429| m429_6(int) = Store[?] : &:r429_5, r429_3 -# 429| m429_7(Point) = Chi : total:m428_5, partial:m429_6 +# 429| mu429_6(int) = Store[?] : &:r429_5, r429_3 # 430| r430_1(glval) = VariableAddress[p] : # 430| r430_2(glval) = VariableAddress[pt] : # 430| r430_3(glval) = FieldAddress[y] : r430_2 # 430| r430_4(int *) = CopyValue : r430_3 # 430| m430_5(int *) = Store[p] : &:r430_1, r430_4 # 431| v431_1(void) = NoOp : -# 426| v426_5(void) = ReturnVoid : -# 426| v426_6(void) = AliasedUse : m426_3 -# 426| v426_7(void) = ExitFunction : +# 426| v426_4(void) = ReturnVoid : +# 426| v426_5(void) = AliasedUse : ~m? +# 426| v426_6(void) = ExitFunction : # 433| void LogicalOr(bool, bool) # 433| Block 0 # 433| v433_1(void) = EnterFunction : -# 433| m433_2(unknown) = AliasedDefinition : -# 433| m433_3(unknown) = InitializeNonLocal : -# 433| m433_4(unknown) = Chi : total:m433_2, partial:m433_3 -# 433| r433_5(glval) = VariableAddress[a] : -# 433| m433_6(bool) = InitializeParameter[a] : &:r433_5 -# 433| r433_7(glval) = VariableAddress[b] : -# 433| m433_8(bool) = InitializeParameter[b] : &:r433_7 +# 433| mu433_2(unknown) = AliasedDefinition : +# 433| mu433_3(unknown) = InitializeNonLocal : +# 433| r433_4(glval) = VariableAddress[a] : +# 433| m433_5(bool) = InitializeParameter[a] : &:r433_4 +# 433| r433_6(glval) = VariableAddress[b] : +# 433| m433_7(bool) = InitializeParameter[b] : &:r433_6 # 434| r434_1(glval) = VariableAddress[x] : # 434| m434_2(int) = Uninitialized[x] : &:r434_1 # 435| r435_1(glval) = VariableAddress[a] : -# 435| r435_2(bool) = Load[a] : &:r435_1, m433_6 +# 435| r435_2(bool) = Load[a] : &:r435_1, m433_5 # 435| v435_3(void) = ConditionalBranch : r435_2 #-----| False -> Block 1 #-----| True -> Block 2 # 435| Block 1 # 435| r435_4(glval) = VariableAddress[b] : -# 435| r435_5(bool) = Load[b] : &:r435_4, m433_8 +# 435| r435_5(bool) = Load[b] : &:r435_4, m433_7 # 435| v435_6(void) = ConditionalBranch : r435_5 #-----| False -> Block 3 #-----| True -> Block 2 @@ -5838,14 +5392,14 @@ ir.cpp: # 439| Block 3 # 439| r439_1(glval) = VariableAddress[a] : -# 439| r439_2(bool) = Load[a] : &:r439_1, m433_6 +# 439| r439_2(bool) = Load[a] : &:r439_1, m433_5 # 439| v439_3(void) = ConditionalBranch : r439_2 #-----| False -> Block 4 #-----| True -> Block 5 # 439| Block 4 # 439| r439_4(glval) = VariableAddress[b] : -# 439| r439_5(bool) = Load[b] : &:r439_4, m433_8 +# 439| r439_5(bool) = Load[b] : &:r439_4, m433_7 # 439| v439_6(void) = ConditionalBranch : r439_5 #-----| False -> Block 6 #-----| True -> Block 5 @@ -5864,31 +5418,30 @@ ir.cpp: # 445| Block 7 # 445| v445_1(void) = NoOp : -# 433| v433_9(void) = ReturnVoid : -# 433| v433_10(void) = AliasedUse : m433_3 -# 433| v433_11(void) = ExitFunction : +# 433| v433_8(void) = ReturnVoid : +# 433| v433_9(void) = AliasedUse : ~m? +# 433| v433_10(void) = ExitFunction : # 447| void LogicalAnd(bool, bool) # 447| Block 0 # 447| v447_1(void) = EnterFunction : -# 447| m447_2(unknown) = AliasedDefinition : -# 447| m447_3(unknown) = InitializeNonLocal : -# 447| m447_4(unknown) = Chi : total:m447_2, partial:m447_3 -# 447| r447_5(glval) = VariableAddress[a] : -# 447| m447_6(bool) = InitializeParameter[a] : &:r447_5 -# 447| r447_7(glval) = VariableAddress[b] : -# 447| m447_8(bool) = InitializeParameter[b] : &:r447_7 +# 447| mu447_2(unknown) = AliasedDefinition : +# 447| mu447_3(unknown) = InitializeNonLocal : +# 447| r447_4(glval) = VariableAddress[a] : +# 447| m447_5(bool) = InitializeParameter[a] : &:r447_4 +# 447| r447_6(glval) = VariableAddress[b] : +# 447| m447_7(bool) = InitializeParameter[b] : &:r447_6 # 448| r448_1(glval) = VariableAddress[x] : # 448| m448_2(int) = Uninitialized[x] : &:r448_1 # 449| r449_1(glval) = VariableAddress[a] : -# 449| r449_2(bool) = Load[a] : &:r449_1, m447_6 +# 449| r449_2(bool) = Load[a] : &:r449_1, m447_5 # 449| v449_3(void) = ConditionalBranch : r449_2 #-----| False -> Block 3 #-----| True -> Block 1 # 449| Block 1 # 449| r449_4(glval) = VariableAddress[b] : -# 449| r449_5(bool) = Load[b] : &:r449_4, m447_8 +# 449| r449_5(bool) = Load[b] : &:r449_4, m447_7 # 449| v449_6(void) = ConditionalBranch : r449_5 #-----| False -> Block 3 #-----| True -> Block 2 @@ -5901,14 +5454,14 @@ ir.cpp: # 453| Block 3 # 453| r453_1(glval) = VariableAddress[a] : -# 453| r453_2(bool) = Load[a] : &:r453_1, m447_6 +# 453| r453_2(bool) = Load[a] : &:r453_1, m447_5 # 453| v453_3(void) = ConditionalBranch : r453_2 #-----| False -> Block 6 #-----| True -> Block 4 # 453| Block 4 # 453| r453_4(glval) = VariableAddress[b] : -# 453| r453_5(bool) = Load[b] : &:r453_4, m447_8 +# 453| r453_5(bool) = Load[b] : &:r453_4, m447_7 # 453| v453_6(void) = ConditionalBranch : r453_5 #-----| False -> Block 6 #-----| True -> Block 5 @@ -5927,24 +5480,23 @@ ir.cpp: # 459| Block 7 # 459| v459_1(void) = NoOp : -# 447| v447_9(void) = ReturnVoid : -# 447| v447_10(void) = AliasedUse : m447_3 -# 447| v447_11(void) = ExitFunction : +# 447| v447_8(void) = ReturnVoid : +# 447| v447_9(void) = AliasedUse : ~m? +# 447| v447_10(void) = ExitFunction : # 461| void LogicalNot(bool, bool) # 461| Block 0 # 461| v461_1(void) = EnterFunction : -# 461| m461_2(unknown) = AliasedDefinition : -# 461| m461_3(unknown) = InitializeNonLocal : -# 461| m461_4(unknown) = Chi : total:m461_2, partial:m461_3 -# 461| r461_5(glval) = VariableAddress[a] : -# 461| m461_6(bool) = InitializeParameter[a] : &:r461_5 -# 461| r461_7(glval) = VariableAddress[b] : -# 461| m461_8(bool) = InitializeParameter[b] : &:r461_7 +# 461| mu461_2(unknown) = AliasedDefinition : +# 461| mu461_3(unknown) = InitializeNonLocal : +# 461| r461_4(glval) = VariableAddress[a] : +# 461| m461_5(bool) = InitializeParameter[a] : &:r461_4 +# 461| r461_6(glval) = VariableAddress[b] : +# 461| m461_7(bool) = InitializeParameter[b] : &:r461_6 # 462| r462_1(glval) = VariableAddress[x] : # 462| m462_2(int) = Uninitialized[x] : &:r462_1 # 463| r463_1(glval) = VariableAddress[a] : -# 463| r463_2(bool) = Load[a] : &:r463_1, m461_6 +# 463| r463_2(bool) = Load[a] : &:r463_1, m461_5 # 463| r463_3(bool) = LogicalNot : r463_2 # 463| v463_4(void) = ConditionalBranch : r463_3 #-----| False -> Block 5 @@ -5979,14 +5531,14 @@ ir.cpp: # 467| Block 5 # 467| r467_12(glval) = VariableAddress[a] : -# 467| r467_13(bool) = Load[a] : &:r467_12, m461_6 +# 467| r467_13(bool) = Load[a] : &:r467_12, m461_5 # 467| v467_14(void) = ConditionalBranch : r467_13 #-----| False -> Block 2 #-----| True -> Block 6 # 467| Block 6 # 467| r467_15(glval) = VariableAddress[b] : -# 467| r467_16(bool) = Load[b] : &:r467_15, m461_8 +# 467| r467_16(bool) = Load[b] : &:r467_15, m461_7 # 467| v467_17(void) = ConditionalBranch : r467_16 #-----| False -> Block 2 #-----| True -> Block 4 @@ -6005,24 +5557,23 @@ ir.cpp: # 473| Block 9 # 473| v473_1(void) = NoOp : -# 461| v461_9(void) = ReturnVoid : -# 461| v461_10(void) = AliasedUse : m461_3 -# 461| v461_11(void) = ExitFunction : +# 461| v461_8(void) = ReturnVoid : +# 461| v461_9(void) = AliasedUse : ~m? +# 461| v461_10(void) = ExitFunction : # 475| void ConditionValues(bool, bool) # 475| Block 0 # 475| v475_1(void) = EnterFunction : -# 475| m475_2(unknown) = AliasedDefinition : -# 475| m475_3(unknown) = InitializeNonLocal : -# 475| m475_4(unknown) = Chi : total:m475_2, partial:m475_3 -# 475| r475_5(glval) = VariableAddress[a] : -# 475| m475_6(bool) = InitializeParameter[a] : &:r475_5 -# 475| r475_7(glval) = VariableAddress[b] : -# 475| m475_8(bool) = InitializeParameter[b] : &:r475_7 +# 475| mu475_2(unknown) = AliasedDefinition : +# 475| mu475_3(unknown) = InitializeNonLocal : +# 475| r475_4(glval) = VariableAddress[a] : +# 475| m475_5(bool) = InitializeParameter[a] : &:r475_4 +# 475| r475_6(glval) = VariableAddress[b] : +# 475| m475_7(bool) = InitializeParameter[b] : &:r475_6 # 476| r476_1(glval) = VariableAddress[x] : # 476| m476_2(bool) = Uninitialized[x] : &:r476_1 # 477| r477_1(glval) = VariableAddress[a] : -# 477| r477_2(bool) = Load[a] : &:r477_1, m475_6 +# 477| r477_2(bool) = Load[a] : &:r477_1, m475_5 # 477| v477_3(void) = ConditionalBranch : r477_2 #-----| False -> Block 1 #-----| True -> Block 4 @@ -6040,7 +5591,7 @@ ir.cpp: # 477| r477_10(glval) = VariableAddress[x] : # 477| m477_11(bool) = Store[x] : &:r477_10, r477_9 # 478| r478_1(glval) = VariableAddress[a] : -# 478| r478_2(bool) = Load[a] : &:r478_1, m475_6 +# 478| r478_2(bool) = Load[a] : &:r478_1, m475_5 # 478| v478_3(void) = ConditionalBranch : r478_2 #-----| False -> Block 8 #-----| True -> Block 7 @@ -6053,7 +5604,7 @@ ir.cpp: # 477| Block 4 # 477| r477_15(glval) = VariableAddress[b] : -# 477| r477_16(bool) = Load[b] : &:r477_15, m475_8 +# 477| r477_16(bool) = Load[b] : &:r477_15, m475_7 # 477| v477_17(void) = ConditionalBranch : r477_16 #-----| False -> Block 1 #-----| True -> Block 3 @@ -6071,7 +5622,7 @@ ir.cpp: # 478| r478_10(glval) = VariableAddress[x] : # 478| m478_11(bool) = Store[x] : &:r478_10, r478_9 # 479| r479_1(glval) = VariableAddress[a] : -# 479| r479_2(bool) = Load[a] : &:r479_1, m475_6 +# 479| r479_2(bool) = Load[a] : &:r479_1, m475_5 # 479| v479_3(void) = ConditionalBranch : r479_2 #-----| False -> Block 12 #-----| True -> Block 11 @@ -6084,7 +5635,7 @@ ir.cpp: # 478| Block 8 # 478| r478_15(glval) = VariableAddress[b] : -# 478| r478_16(bool) = Load[b] : &:r478_15, m475_8 +# 478| r478_16(bool) = Load[b] : &:r478_15, m475_7 # 478| v478_17(void) = ConditionalBranch : r478_16 #-----| False -> Block 5 #-----| True -> Block 7 @@ -6103,9 +5654,9 @@ ir.cpp: # 479| r479_11(glval) = VariableAddress[x] : # 479| m479_12(bool) = Store[x] : &:r479_11, r479_10 # 480| v480_1(void) = NoOp : -# 475| v475_9(void) = ReturnVoid : -# 475| v475_10(void) = AliasedUse : m475_3 -# 475| v475_11(void) = ExitFunction : +# 475| v475_8(void) = ReturnVoid : +# 475| v475_9(void) = AliasedUse : ~m? +# 475| v475_10(void) = ExitFunction : # 479| Block 11 # 479| r479_13(glval) = VariableAddress[#temp479:11] : @@ -6115,7 +5666,7 @@ ir.cpp: # 479| Block 12 # 479| r479_16(glval) = VariableAddress[b] : -# 479| r479_17(bool) = Load[b] : &:r479_16, m475_8 +# 479| r479_17(bool) = Load[b] : &:r479_16, m475_7 # 479| v479_18(void) = ConditionalBranch : r479_17 #-----| False -> Block 9 #-----| True -> Block 11 @@ -6123,18 +5674,17 @@ ir.cpp: # 482| void Conditional(bool, int, int) # 482| Block 0 # 482| v482_1(void) = EnterFunction : -# 482| m482_2(unknown) = AliasedDefinition : -# 482| m482_3(unknown) = InitializeNonLocal : -# 482| m482_4(unknown) = Chi : total:m482_2, partial:m482_3 -# 482| r482_5(glval) = VariableAddress[a] : -# 482| m482_6(bool) = InitializeParameter[a] : &:r482_5 -# 482| r482_7(glval) = VariableAddress[x] : -# 482| m482_8(int) = InitializeParameter[x] : &:r482_7 -# 482| r482_9(glval) = VariableAddress[y] : -# 482| m482_10(int) = InitializeParameter[y] : &:r482_9 +# 482| mu482_2(unknown) = AliasedDefinition : +# 482| mu482_3(unknown) = InitializeNonLocal : +# 482| r482_4(glval) = VariableAddress[a] : +# 482| m482_5(bool) = InitializeParameter[a] : &:r482_4 +# 482| r482_6(glval) = VariableAddress[x] : +# 482| m482_7(int) = InitializeParameter[x] : &:r482_6 +# 482| r482_8(glval) = VariableAddress[y] : +# 482| m482_9(int) = InitializeParameter[y] : &:r482_8 # 483| r483_1(glval) = VariableAddress[z] : # 483| r483_2(glval) = VariableAddress[a] : -# 483| r483_3(bool) = Load[a] : &:r483_2, m482_6 +# 483| r483_3(bool) = Load[a] : &:r483_2, m482_5 # 483| v483_4(void) = ConditionalBranch : r483_3 #-----| False -> Block 3 #-----| True -> Block 2 @@ -6145,79 +5695,73 @@ ir.cpp: # 483| r483_7(int) = Load[#temp483:13] : &:r483_6, m483_5 # 483| m483_8(int) = Store[z] : &:r483_1, r483_7 # 484| v484_1(void) = NoOp : -# 482| v482_11(void) = ReturnVoid : -# 482| v482_12(void) = AliasedUse : m482_3 -# 482| v482_13(void) = ExitFunction : +# 482| v482_10(void) = ReturnVoid : +# 482| v482_11(void) = AliasedUse : ~m? +# 482| v482_12(void) = ExitFunction : # 483| Block 2 # 483| r483_9(glval) = VariableAddress[x] : -# 483| r483_10(int) = Load[x] : &:r483_9, m482_8 +# 483| r483_10(int) = Load[x] : &:r483_9, m482_7 # 483| r483_11(glval) = VariableAddress[#temp483:13] : # 483| m483_12(int) = Store[#temp483:13] : &:r483_11, r483_10 #-----| Goto -> Block 1 # 483| Block 3 # 483| r483_13(glval) = VariableAddress[y] : -# 483| r483_14(int) = Load[y] : &:r483_13, m482_10 +# 483| r483_14(int) = Load[y] : &:r483_13, m482_9 # 483| r483_15(glval) = VariableAddress[#temp483:13] : # 483| m483_16(int) = Store[#temp483:13] : &:r483_15, r483_14 #-----| Goto -> Block 1 # 486| void Conditional_LValue(bool) # 486| Block 0 -# 486| v486_1(void) = EnterFunction : -# 486| m486_2(unknown) = AliasedDefinition : -# 486| m486_3(unknown) = InitializeNonLocal : -# 486| m486_4(unknown) = Chi : total:m486_2, partial:m486_3 -# 486| m486_5(int) = UninitializedGroup[x,y] : -# 486| r486_6(glval) = VariableAddress[a] : -# 486| m486_7(bool) = InitializeParameter[a] : &:r486_6 -# 487| r487_1(glval) = VariableAddress[x] : -# 487| m487_2(int) = Uninitialized[x] : &:r487_1 -# 487| m487_3(int) = Chi : total:m486_5, partial:m487_2 -# 488| r488_1(glval) = VariableAddress[y] : -# 488| m488_2(int) = Uninitialized[y] : &:r488_1 -# 488| m488_3(int) = Chi : total:m487_3, partial:m488_2 -# 489| r489_1(int) = Constant[5] : -# 489| r489_2(glval) = VariableAddress[a] : -# 489| r489_3(bool) = Load[a] : &:r489_2, m486_7 -# 489| v489_4(void) = ConditionalBranch : r489_3 +# 486| v486_1(void) = EnterFunction : +# 486| mu486_2(unknown) = AliasedDefinition : +# 486| mu486_3(unknown) = InitializeNonLocal : +# 486| r486_4(glval) = VariableAddress[a] : +# 486| m486_5(bool) = InitializeParameter[a] : &:r486_4 +# 487| r487_1(glval) = VariableAddress[x] : +# 487| mu487_2(int) = Uninitialized[x] : &:r487_1 +# 488| r488_1(glval) = VariableAddress[y] : +# 488| mu488_2(int) = Uninitialized[y] : &:r488_1 +# 489| r489_1(int) = Constant[5] : +# 489| r489_2(glval) = VariableAddress[a] : +# 489| r489_3(bool) = Load[a] : &:r489_2, m486_5 +# 489| v489_4(void) = ConditionalBranch : r489_3 #-----| False -> Block 3 #-----| True -> Block 2 # 489| Block 1 -# 489| m489_5(glval) = Phi : from 2:m489_12, from 3:m489_15 +# 489| m489_5(glval) = Phi : from 2:m489_11, from 3:m489_14 # 489| r489_6(glval) = VariableAddress[#temp489:6] : # 489| r489_7(glval) = Load[#temp489:6] : &:r489_6, m489_5 -# 489| m489_8(int) = Store[?] : &:r489_7, r489_1 -# 489| m489_9(int) = Chi : total:m488_3, partial:m489_8 +# 489| mu489_8(int) = Store[?] : &:r489_7, r489_1 # 490| v490_1(void) = NoOp : -# 486| v486_8(void) = ReturnVoid : -# 486| v486_9(void) = AliasedUse : m486_3 -# 486| v486_10(void) = ExitFunction : +# 486| v486_6(void) = ReturnVoid : +# 486| v486_7(void) = AliasedUse : ~m? +# 486| v486_8(void) = ExitFunction : # 489| Block 2 -# 489| r489_10(glval) = VariableAddress[x] : -# 489| r489_11(glval) = VariableAddress[#temp489:6] : -# 489| m489_12(glval) = Store[#temp489:6] : &:r489_11, r489_10 +# 489| r489_9(glval) = VariableAddress[x] : +# 489| r489_10(glval) = VariableAddress[#temp489:6] : +# 489| m489_11(glval) = Store[#temp489:6] : &:r489_10, r489_9 #-----| Goto -> Block 1 # 489| Block 3 -# 489| r489_13(glval) = VariableAddress[y] : -# 489| r489_14(glval) = VariableAddress[#temp489:6] : -# 489| m489_15(glval) = Store[#temp489:6] : &:r489_14, r489_13 +# 489| r489_12(glval) = VariableAddress[y] : +# 489| r489_13(glval) = VariableAddress[#temp489:6] : +# 489| m489_14(glval) = Store[#temp489:6] : &:r489_13, r489_12 #-----| Goto -> Block 1 # 492| void Conditional_Void(bool) # 492| Block 0 # 492| v492_1(void) = EnterFunction : -# 492| m492_2(unknown) = AliasedDefinition : -# 492| m492_3(unknown) = InitializeNonLocal : -# 492| m492_4(unknown) = Chi : total:m492_2, partial:m492_3 -# 492| r492_5(glval) = VariableAddress[a] : -# 492| m492_6(bool) = InitializeParameter[a] : &:r492_5 +# 492| mu492_2(unknown) = AliasedDefinition : +# 492| mu492_3(unknown) = InitializeNonLocal : +# 492| r492_4(glval) = VariableAddress[a] : +# 492| m492_5(bool) = InitializeParameter[a] : &:r492_4 # 493| r493_1(glval) = VariableAddress[a] : -# 493| r493_2(bool) = Load[a] : &:r493_1, m492_6 +# 493| r493_2(bool) = Load[a] : &:r493_1, m492_5 # 493| v493_3(void) = ConditionalBranch : r493_2 #-----| False -> Block 2 #-----| True -> Block 1 @@ -6225,30 +5769,26 @@ ir.cpp: # 493| Block 1 # 493| r493_4(glval) = FunctionAddress[VoidFunc] : # 493| v493_5(void) = Call[VoidFunc] : func:r493_4 -# 493| m493_6(unknown) = ^CallSideEffect : ~m492_4 -# 493| m493_7(unknown) = Chi : total:m492_4, partial:m493_6 +# 493| mu493_6(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 3 # 493| Block 2 -# 493| r493_8(glval) = FunctionAddress[VoidFunc] : -# 493| v493_9(void) = Call[VoidFunc] : func:r493_8 -# 493| m493_10(unknown) = ^CallSideEffect : ~m492_4 -# 493| m493_11(unknown) = Chi : total:m492_4, partial:m493_10 +# 493| r493_7(glval) = FunctionAddress[VoidFunc] : +# 493| v493_8(void) = Call[VoidFunc] : func:r493_7 +# 493| mu493_9(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 3 # 494| Block 3 -# 494| m494_1(unknown) = Phi : from 1:~m493_7, from 2:~m493_11 -# 494| v494_2(void) = NoOp : -# 492| v492_7(void) = ReturnVoid : -# 492| v492_8(void) = AliasedUse : ~m494_1 -# 492| v492_9(void) = ExitFunction : +# 494| v494_1(void) = NoOp : +# 492| v492_6(void) = ReturnVoid : +# 492| v492_7(void) = AliasedUse : ~m? +# 492| v492_8(void) = ExitFunction : # 496| void Nullptr() # 496| Block 0 # 496| v496_1(void) = EnterFunction : -# 496| m496_2(unknown) = AliasedDefinition : -# 496| m496_3(unknown) = InitializeNonLocal : -# 496| m496_4(unknown) = Chi : total:m496_2, partial:m496_3 +# 496| mu496_2(unknown) = AliasedDefinition : +# 496| mu496_3(unknown) = InitializeNonLocal : # 497| r497_1(glval) = VariableAddress[p] : # 497| r497_2(int *) = Constant[0] : # 497| m497_3(int *) = Store[p] : &:r497_1, r497_2 @@ -6262,54 +5802,47 @@ ir.cpp: # 500| r500_2(glval) = VariableAddress[q] : # 500| m500_3(int *) = Store[q] : &:r500_2, r500_1 # 501| v501_1(void) = NoOp : -# 496| v496_5(void) = ReturnVoid : -# 496| v496_6(void) = AliasedUse : m496_3 -# 496| v496_7(void) = ExitFunction : +# 496| v496_4(void) = ReturnVoid : +# 496| v496_5(void) = AliasedUse : ~m? +# 496| v496_6(void) = ExitFunction : # 503| void InitList(int, float) # 503| Block 0 # 503| v503_1(void) = EnterFunction : -# 503| m503_2(unknown) = AliasedDefinition : -# 503| m503_3(unknown) = InitializeNonLocal : -# 503| m503_4(unknown) = Chi : total:m503_2, partial:m503_3 -# 503| r503_5(glval) = VariableAddress[x] : -# 503| m503_6(int) = InitializeParameter[x] : &:r503_5 -# 503| r503_7(glval) = VariableAddress[f] : -# 503| m503_8(float) = InitializeParameter[f] : &:r503_7 +# 503| mu503_2(unknown) = AliasedDefinition : +# 503| mu503_3(unknown) = InitializeNonLocal : +# 503| r503_4(glval) = VariableAddress[x] : +# 503| m503_5(int) = InitializeParameter[x] : &:r503_4 +# 503| r503_6(glval) = VariableAddress[f] : +# 503| m503_7(float) = InitializeParameter[f] : &:r503_6 # 504| r504_1(glval) = VariableAddress[pt1] : -# 504| m504_2(Point) = Uninitialized[pt1] : &:r504_1 +# 504| mu504_2(Point) = Uninitialized[pt1] : &:r504_1 # 504| r504_3(glval) = FieldAddress[x] : r504_1 # 504| r504_4(glval) = VariableAddress[x] : -# 504| r504_5(int) = Load[x] : &:r504_4, m503_6 -# 504| m504_6(int) = Store[?] : &:r504_3, r504_5 -# 504| m504_7(Point) = Chi : total:m504_2, partial:m504_6 -# 504| r504_8(glval) = FieldAddress[y] : r504_1 -# 504| r504_9(glval) = VariableAddress[f] : -# 504| r504_10(float) = Load[f] : &:r504_9, m503_8 -# 504| r504_11(int) = Convert : r504_10 -# 504| m504_12(int) = Store[?] : &:r504_8, r504_11 -# 504| m504_13(Point) = Chi : total:m504_7, partial:m504_12 +# 504| r504_5(int) = Load[x] : &:r504_4, m503_5 +# 504| mu504_6(int) = Store[?] : &:r504_3, r504_5 +# 504| r504_7(glval) = FieldAddress[y] : r504_1 +# 504| r504_8(glval) = VariableAddress[f] : +# 504| r504_9(float) = Load[f] : &:r504_8, m503_7 +# 504| r504_10(int) = Convert : r504_9 +# 504| mu504_11(int) = Store[?] : &:r504_7, r504_10 # 505| r505_1(glval) = VariableAddress[pt2] : -# 505| m505_2(Point) = Uninitialized[pt2] : &:r505_1 +# 505| mu505_2(Point) = Uninitialized[pt2] : &:r505_1 # 505| r505_3(glval) = FieldAddress[x] : r505_1 # 505| r505_4(glval) = VariableAddress[x] : -# 505| r505_5(int) = Load[x] : &:r505_4, m503_6 -# 505| m505_6(int) = Store[?] : &:r505_3, r505_5 -# 505| m505_7(Point) = Chi : total:m505_2, partial:m505_6 -# 505| r505_8(glval) = FieldAddress[y] : r505_1 -# 505| r505_9(int) = Constant[0] : -# 505| m505_10(int) = Store[?] : &:r505_8, r505_9 -# 505| m505_11(Point) = Chi : total:m505_7, partial:m505_10 +# 505| r505_5(int) = Load[x] : &:r505_4, m503_5 +# 505| mu505_6(int) = Store[?] : &:r505_3, r505_5 +# 505| r505_7(glval) = FieldAddress[y] : r505_1 +# 505| r505_8(int) = Constant[0] : +# 505| mu505_9(int) = Store[?] : &:r505_7, r505_8 # 506| r506_1(glval) = VariableAddress[pt3] : -# 506| m506_2(Point) = Uninitialized[pt3] : &:r506_1 +# 506| mu506_2(Point) = Uninitialized[pt3] : &:r506_1 # 506| r506_3(glval) = FieldAddress[x] : r506_1 # 506| r506_4(int) = Constant[0] : -# 506| m506_5(int) = Store[?] : &:r506_3, r506_4 -# 506| m506_6(Point) = Chi : total:m506_2, partial:m506_5 -# 506| r506_7(glval) = FieldAddress[y] : r506_1 -# 506| r506_8(int) = Constant[0] : -# 506| m506_9(int) = Store[?] : &:r506_7, r506_8 -# 506| m506_10(Point) = Chi : total:m506_6, partial:m506_9 +# 506| mu506_5(int) = Store[?] : &:r506_3, r506_4 +# 506| r506_6(glval) = FieldAddress[y] : r506_1 +# 506| r506_7(int) = Constant[0] : +# 506| mu506_8(int) = Store[?] : &:r506_6, r506_7 # 508| r508_1(glval) = VariableAddress[x1] : # 508| r508_2(int) = Constant[1] : # 508| m508_3(int) = Store[x1] : &:r508_1, r508_2 @@ -6317,200 +5850,178 @@ ir.cpp: # 509| r509_2(int) = Constant[0] : # 509| m509_3(int) = Store[x2] : &:r509_1, r509_2 # 510| v510_1(void) = NoOp : -# 503| v503_9(void) = ReturnVoid : -# 503| v503_10(void) = AliasedUse : m503_3 -# 503| v503_11(void) = ExitFunction : +# 503| v503_8(void) = ReturnVoid : +# 503| v503_9(void) = AliasedUse : ~m? +# 503| v503_10(void) = ExitFunction : # 512| void NestedInitList(int, float) # 512| Block 0 # 512| v512_1(void) = EnterFunction : -# 512| m512_2(unknown) = AliasedDefinition : -# 512| m512_3(unknown) = InitializeNonLocal : -# 512| m512_4(unknown) = Chi : total:m512_2, partial:m512_3 -# 512| r512_5(glval) = VariableAddress[x] : -# 512| m512_6(int) = InitializeParameter[x] : &:r512_5 -# 512| r512_7(glval) = VariableAddress[f] : -# 512| m512_8(float) = InitializeParameter[f] : &:r512_7 +# 512| mu512_2(unknown) = AliasedDefinition : +# 512| mu512_3(unknown) = InitializeNonLocal : +# 512| r512_4(glval) = VariableAddress[x] : +# 512| m512_5(int) = InitializeParameter[x] : &:r512_4 +# 512| r512_6(glval) = VariableAddress[f] : +# 512| m512_7(float) = InitializeParameter[f] : &:r512_6 # 513| r513_1(glval) = VariableAddress[r1] : -# 513| m513_2(Rect) = Uninitialized[r1] : &:r513_1 +# 513| mu513_2(Rect) = Uninitialized[r1] : &:r513_1 # 513| r513_3(glval) = FieldAddress[topLeft] : r513_1 # 513| r513_4(Point) = Constant[0] : -# 513| m513_5(Point) = Store[?] : &:r513_3, r513_4 -# 513| m513_6(Rect) = Chi : total:m513_2, partial:m513_5 -# 513| r513_7(glval) = FieldAddress[bottomRight] : r513_1 -# 513| r513_8(Point) = Constant[0] : -# 513| m513_9(Point) = Store[?] : &:r513_7, r513_8 -# 513| m513_10(Rect) = Chi : total:m513_6, partial:m513_9 +# 513| mu513_5(Point) = Store[?] : &:r513_3, r513_4 +# 513| r513_6(glval) = FieldAddress[bottomRight] : r513_1 +# 513| r513_7(Point) = Constant[0] : +# 513| mu513_8(Point) = Store[?] : &:r513_6, r513_7 # 514| r514_1(glval) = VariableAddress[r2] : -# 514| m514_2(Rect) = Uninitialized[r2] : &:r514_1 +# 514| mu514_2(Rect) = Uninitialized[r2] : &:r514_1 # 514| r514_3(glval) = FieldAddress[topLeft] : r514_1 # 514| r514_4(glval) = FieldAddress[x] : r514_3 # 514| r514_5(glval) = VariableAddress[x] : -# 514| r514_6(int) = Load[x] : &:r514_5, m512_6 -# 514| m514_7(int) = Store[?] : &:r514_4, r514_6 -# 514| m514_8(Rect) = Chi : total:m514_2, partial:m514_7 -# 514| r514_9(glval) = FieldAddress[y] : r514_3 -# 514| r514_10(glval) = VariableAddress[f] : -# 514| r514_11(float) = Load[f] : &:r514_10, m512_8 -# 514| r514_12(int) = Convert : r514_11 -# 514| m514_13(int) = Store[?] : &:r514_9, r514_12 -# 514| m514_14(Rect) = Chi : total:m514_8, partial:m514_13 -# 514| r514_15(glval) = FieldAddress[bottomRight] : r514_1 -# 514| r514_16(Point) = Constant[0] : -# 514| m514_17(Point) = Store[?] : &:r514_15, r514_16 -# 514| m514_18(Rect) = Chi : total:m514_14, partial:m514_17 +# 514| r514_6(int) = Load[x] : &:r514_5, m512_5 +# 514| mu514_7(int) = Store[?] : &:r514_4, r514_6 +# 514| r514_8(glval) = FieldAddress[y] : r514_3 +# 514| r514_9(glval) = VariableAddress[f] : +# 514| r514_10(float) = Load[f] : &:r514_9, m512_7 +# 514| r514_11(int) = Convert : r514_10 +# 514| mu514_12(int) = Store[?] : &:r514_8, r514_11 +# 514| r514_13(glval) = FieldAddress[bottomRight] : r514_1 +# 514| r514_14(Point) = Constant[0] : +# 514| mu514_15(Point) = Store[?] : &:r514_13, r514_14 # 515| r515_1(glval) = VariableAddress[r3] : -# 515| m515_2(Rect) = Uninitialized[r3] : &:r515_1 +# 515| mu515_2(Rect) = Uninitialized[r3] : &:r515_1 # 515| r515_3(glval) = FieldAddress[topLeft] : r515_1 # 515| r515_4(glval) = FieldAddress[x] : r515_3 # 515| r515_5(glval) = VariableAddress[x] : -# 515| r515_6(int) = Load[x] : &:r515_5, m512_6 -# 515| m515_7(int) = Store[?] : &:r515_4, r515_6 -# 515| m515_8(Rect) = Chi : total:m515_2, partial:m515_7 -# 515| r515_9(glval) = FieldAddress[y] : r515_3 -# 515| r515_10(glval) = VariableAddress[f] : -# 515| r515_11(float) = Load[f] : &:r515_10, m512_8 -# 515| r515_12(int) = Convert : r515_11 -# 515| m515_13(int) = Store[?] : &:r515_9, r515_12 -# 515| m515_14(Rect) = Chi : total:m515_8, partial:m515_13 -# 515| r515_15(glval) = FieldAddress[bottomRight] : r515_1 -# 515| r515_16(glval) = FieldAddress[x] : r515_15 -# 515| r515_17(glval) = VariableAddress[x] : -# 515| r515_18(int) = Load[x] : &:r515_17, m512_6 -# 515| m515_19(int) = Store[?] : &:r515_16, r515_18 -# 515| m515_20(Rect) = Chi : total:m515_14, partial:m515_19 -# 515| r515_21(glval) = FieldAddress[y] : r515_15 -# 515| r515_22(glval) = VariableAddress[f] : -# 515| r515_23(float) = Load[f] : &:r515_22, m512_8 -# 515| r515_24(int) = Convert : r515_23 -# 515| m515_25(int) = Store[?] : &:r515_21, r515_24 -# 515| m515_26(Rect) = Chi : total:m515_20, partial:m515_25 +# 515| r515_6(int) = Load[x] : &:r515_5, m512_5 +# 515| mu515_7(int) = Store[?] : &:r515_4, r515_6 +# 515| r515_8(glval) = FieldAddress[y] : r515_3 +# 515| r515_9(glval) = VariableAddress[f] : +# 515| r515_10(float) = Load[f] : &:r515_9, m512_7 +# 515| r515_11(int) = Convert : r515_10 +# 515| mu515_12(int) = Store[?] : &:r515_8, r515_11 +# 515| r515_13(glval) = FieldAddress[bottomRight] : r515_1 +# 515| r515_14(glval) = FieldAddress[x] : r515_13 +# 515| r515_15(glval) = VariableAddress[x] : +# 515| r515_16(int) = Load[x] : &:r515_15, m512_5 +# 515| mu515_17(int) = Store[?] : &:r515_14, r515_16 +# 515| r515_18(glval) = FieldAddress[y] : r515_13 +# 515| r515_19(glval) = VariableAddress[f] : +# 515| r515_20(float) = Load[f] : &:r515_19, m512_7 +# 515| r515_21(int) = Convert : r515_20 +# 515| mu515_22(int) = Store[?] : &:r515_18, r515_21 # 516| r516_1(glval) = VariableAddress[r4] : -# 516| m516_2(Rect) = Uninitialized[r4] : &:r516_1 +# 516| mu516_2(Rect) = Uninitialized[r4] : &:r516_1 # 516| r516_3(glval) = FieldAddress[topLeft] : r516_1 # 516| r516_4(glval) = FieldAddress[x] : r516_3 # 516| r516_5(glval) = VariableAddress[x] : -# 516| r516_6(int) = Load[x] : &:r516_5, m512_6 -# 516| m516_7(int) = Store[?] : &:r516_4, r516_6 -# 516| m516_8(Rect) = Chi : total:m516_2, partial:m516_7 -# 516| r516_9(glval) = FieldAddress[y] : r516_3 -# 516| r516_10(int) = Constant[0] : -# 516| m516_11(int) = Store[?] : &:r516_9, r516_10 -# 516| m516_12(Rect) = Chi : total:m516_8, partial:m516_11 -# 516| r516_13(glval) = FieldAddress[bottomRight] : r516_1 -# 516| r516_14(glval) = FieldAddress[x] : r516_13 -# 516| r516_15(glval) = VariableAddress[x] : -# 516| r516_16(int) = Load[x] : &:r516_15, m512_6 -# 516| m516_17(int) = Store[?] : &:r516_14, r516_16 -# 516| m516_18(Rect) = Chi : total:m516_12, partial:m516_17 -# 516| r516_19(glval) = FieldAddress[y] : r516_13 -# 516| r516_20(int) = Constant[0] : -# 516| m516_21(int) = Store[?] : &:r516_19, r516_20 -# 516| m516_22(Rect) = Chi : total:m516_18, partial:m516_21 +# 516| r516_6(int) = Load[x] : &:r516_5, m512_5 +# 516| mu516_7(int) = Store[?] : &:r516_4, r516_6 +# 516| r516_8(glval) = FieldAddress[y] : r516_3 +# 516| r516_9(int) = Constant[0] : +# 516| mu516_10(int) = Store[?] : &:r516_8, r516_9 +# 516| r516_11(glval) = FieldAddress[bottomRight] : r516_1 +# 516| r516_12(glval) = FieldAddress[x] : r516_11 +# 516| r516_13(glval) = VariableAddress[x] : +# 516| r516_14(int) = Load[x] : &:r516_13, m512_5 +# 516| mu516_15(int) = Store[?] : &:r516_12, r516_14 +# 516| r516_16(glval) = FieldAddress[y] : r516_11 +# 516| r516_17(int) = Constant[0] : +# 516| mu516_18(int) = Store[?] : &:r516_16, r516_17 # 517| v517_1(void) = NoOp : -# 512| v512_9(void) = ReturnVoid : -# 512| v512_10(void) = AliasedUse : m512_3 -# 512| v512_11(void) = ExitFunction : +# 512| v512_8(void) = ReturnVoid : +# 512| v512_9(void) = AliasedUse : ~m? +# 512| v512_10(void) = ExitFunction : # 519| void ArrayInit(int, float) # 519| Block 0 # 519| v519_1(void) = EnterFunction : -# 519| m519_2(unknown) = AliasedDefinition : -# 519| m519_3(unknown) = InitializeNonLocal : -# 519| m519_4(unknown) = Chi : total:m519_2, partial:m519_3 -# 519| r519_5(glval) = VariableAddress[x] : -# 519| m519_6(int) = InitializeParameter[x] : &:r519_5 -# 519| r519_7(glval) = VariableAddress[f] : -# 519| m519_8(float) = InitializeParameter[f] : &:r519_7 +# 519| mu519_2(unknown) = AliasedDefinition : +# 519| mu519_3(unknown) = InitializeNonLocal : +# 519| r519_4(glval) = VariableAddress[x] : +# 519| m519_5(int) = InitializeParameter[x] : &:r519_4 +# 519| r519_6(glval) = VariableAddress[f] : +# 519| m519_7(float) = InitializeParameter[f] : &:r519_6 # 520| r520_1(glval) = VariableAddress[a1] : -# 520| m520_2(int[3]) = Uninitialized[a1] : &:r520_1 +# 520| mu520_2(int[3]) = Uninitialized[a1] : &:r520_1 # 520| r520_3(int) = Constant[0] : # 520| r520_4(glval) = PointerAdd[4] : r520_1, r520_3 # 520| r520_5(unknown[12]) = Constant[0] : -# 520| m520_6(unknown[12]) = Store[?] : &:r520_4, r520_5 +# 520| mu520_6(unknown[12]) = Store[?] : &:r520_4, r520_5 # 521| r521_1(glval) = VariableAddress[a2] : -# 521| m521_2(int[3]) = Uninitialized[a2] : &:r521_1 +# 521| mu521_2(int[3]) = Uninitialized[a2] : &:r521_1 # 521| r521_3(int) = Constant[0] : # 521| r521_4(glval) = PointerAdd[4] : r521_1, r521_3 # 521| r521_5(glval) = VariableAddress[x] : -# 521| r521_6(int) = Load[x] : &:r521_5, m519_6 -# 521| m521_7(int) = Store[?] : &:r521_4, r521_6 -# 521| m521_8(int[3]) = Chi : total:m521_2, partial:m521_7 -# 521| r521_9(int) = Constant[1] : -# 521| r521_10(glval) = PointerAdd[4] : r521_1, r521_9 -# 521| r521_11(glval) = VariableAddress[f] : -# 521| r521_12(float) = Load[f] : &:r521_11, m519_8 -# 521| r521_13(int) = Convert : r521_12 -# 521| m521_14(int) = Store[?] : &:r521_10, r521_13 -# 521| m521_15(int[3]) = Chi : total:m521_8, partial:m521_14 -# 521| r521_16(int) = Constant[2] : -# 521| r521_17(glval) = PointerAdd[4] : r521_1, r521_16 -# 521| r521_18(int) = Constant[0] : -# 521| m521_19(int) = Store[?] : &:r521_17, r521_18 -# 521| m521_20(int[3]) = Chi : total:m521_15, partial:m521_19 +# 521| r521_6(int) = Load[x] : &:r521_5, m519_5 +# 521| mu521_7(int) = Store[?] : &:r521_4, r521_6 +# 521| r521_8(int) = Constant[1] : +# 521| r521_9(glval) = PointerAdd[4] : r521_1, r521_8 +# 521| r521_10(glval) = VariableAddress[f] : +# 521| r521_11(float) = Load[f] : &:r521_10, m519_7 +# 521| r521_12(int) = Convert : r521_11 +# 521| mu521_13(int) = Store[?] : &:r521_9, r521_12 +# 521| r521_14(int) = Constant[2] : +# 521| r521_15(glval) = PointerAdd[4] : r521_1, r521_14 +# 521| r521_16(int) = Constant[0] : +# 521| mu521_17(int) = Store[?] : &:r521_15, r521_16 # 522| r522_1(glval) = VariableAddress[a3] : -# 522| m522_2(int[3]) = Uninitialized[a3] : &:r522_1 +# 522| mu522_2(int[3]) = Uninitialized[a3] : &:r522_1 # 522| r522_3(int) = Constant[0] : # 522| r522_4(glval) = PointerAdd[4] : r522_1, r522_3 # 522| r522_5(glval) = VariableAddress[x] : -# 522| r522_6(int) = Load[x] : &:r522_5, m519_6 -# 522| m522_7(int) = Store[?] : &:r522_4, r522_6 -# 522| m522_8(int[3]) = Chi : total:m522_2, partial:m522_7 -# 522| r522_9(int) = Constant[1] : -# 522| r522_10(glval) = PointerAdd[4] : r522_1, r522_9 -# 522| r522_11(unknown[8]) = Constant[0] : -# 522| m522_12(unknown[8]) = Store[?] : &:r522_10, r522_11 -# 522| m522_13(int[3]) = Chi : total:m522_8, partial:m522_12 +# 522| r522_6(int) = Load[x] : &:r522_5, m519_5 +# 522| mu522_7(int) = Store[?] : &:r522_4, r522_6 +# 522| r522_8(int) = Constant[1] : +# 522| r522_9(glval) = PointerAdd[4] : r522_1, r522_8 +# 522| r522_10(unknown[8]) = Constant[0] : +# 522| mu522_11(unknown[8]) = Store[?] : &:r522_9, r522_10 # 523| v523_1(void) = NoOp : -# 519| v519_9(void) = ReturnVoid : -# 519| v519_10(void) = AliasedUse : m519_3 -# 519| v519_11(void) = ExitFunction : +# 519| v519_8(void) = ReturnVoid : +# 519| v519_9(void) = AliasedUse : ~m? +# 519| v519_10(void) = ExitFunction : # 530| void UnionInit(int, float) # 530| Block 0 # 530| v530_1(void) = EnterFunction : -# 530| m530_2(unknown) = AliasedDefinition : -# 530| m530_3(unknown) = InitializeNonLocal : -# 530| m530_4(unknown) = Chi : total:m530_2, partial:m530_3 -# 530| r530_5(glval) = VariableAddress[x] : -# 530| m530_6(int) = InitializeParameter[x] : &:r530_5 -# 530| r530_7(glval) = VariableAddress[f] : -# 530| m530_8(float) = InitializeParameter[f] : &:r530_7 +# 530| mu530_2(unknown) = AliasedDefinition : +# 530| mu530_3(unknown) = InitializeNonLocal : +# 530| r530_4(glval) = VariableAddress[x] : +# 530| m530_5(int) = InitializeParameter[x] : &:r530_4 +# 530| r530_6(glval) = VariableAddress[f] : +# 530| m530_7(float) = InitializeParameter[f] : &:r530_6 # 531| r531_1(glval) = VariableAddress[u1] : -# 531| m531_2(U) = Uninitialized[u1] : &:r531_1 +# 531| mu531_2(U) = Uninitialized[u1] : &:r531_1 # 531| r531_3(glval) = FieldAddress[d] : r531_1 # 531| r531_4(glval) = VariableAddress[f] : -# 531| r531_5(float) = Load[f] : &:r531_4, m530_8 +# 531| r531_5(float) = Load[f] : &:r531_4, m530_7 # 531| r531_6(double) = Convert : r531_5 -# 531| m531_7(double) = Store[?] : &:r531_3, r531_6 +# 531| mu531_7(double) = Store[?] : &:r531_3, r531_6 # 533| v533_1(void) = NoOp : -# 530| v530_9(void) = ReturnVoid : -# 530| v530_10(void) = AliasedUse : m530_3 -# 530| v530_11(void) = ExitFunction : +# 530| v530_8(void) = ReturnVoid : +# 530| v530_9(void) = AliasedUse : ~m? +# 530| v530_10(void) = ExitFunction : # 535| void EarlyReturn(int, int) # 535| Block 0 # 535| v535_1(void) = EnterFunction : -# 535| m535_2(unknown) = AliasedDefinition : -# 535| m535_3(unknown) = InitializeNonLocal : -# 535| m535_4(unknown) = Chi : total:m535_2, partial:m535_3 -# 535| r535_5(glval) = VariableAddress[x] : -# 535| m535_6(int) = InitializeParameter[x] : &:r535_5 -# 535| r535_7(glval) = VariableAddress[y] : -# 535| m535_8(int) = InitializeParameter[y] : &:r535_7 +# 535| mu535_2(unknown) = AliasedDefinition : +# 535| mu535_3(unknown) = InitializeNonLocal : +# 535| r535_4(glval) = VariableAddress[x] : +# 535| m535_5(int) = InitializeParameter[x] : &:r535_4 +# 535| r535_6(glval) = VariableAddress[y] : +# 535| m535_7(int) = InitializeParameter[y] : &:r535_6 # 536| r536_1(glval) = VariableAddress[x] : -# 536| r536_2(int) = Load[x] : &:r536_1, m535_6 +# 536| r536_2(int) = Load[x] : &:r536_1, m535_5 # 536| r536_3(glval) = VariableAddress[y] : -# 536| r536_4(int) = Load[y] : &:r536_3, m535_8 +# 536| r536_4(int) = Load[y] : &:r536_3, m535_7 # 536| r536_5(bool) = CompareLT : r536_2, r536_4 # 536| v536_6(void) = ConditionalBranch : r536_5 #-----| False -> Block 3 #-----| True -> Block 2 # 535| Block 1 -# 535| v535_9(void) = ReturnVoid : -# 535| v535_10(void) = AliasedUse : m535_3 -# 535| v535_11(void) = ExitFunction : +# 535| v535_8(void) = ReturnVoid : +# 535| v535_9(void) = AliasedUse : ~m? +# 535| v535_10(void) = ExitFunction : # 537| Block 2 # 537| v537_1(void) = NoOp : @@ -6518,7 +6029,7 @@ ir.cpp: # 540| Block 3 # 540| r540_1(glval) = VariableAddress[x] : -# 540| r540_2(int) = Load[x] : &:r540_1, m535_6 +# 540| r540_2(int) = Load[x] : &:r540_1, m535_5 # 540| r540_3(glval) = VariableAddress[y] : # 540| m540_4(int) = Store[y] : &:r540_3, r540_2 # 541| v541_1(void) = NoOp : @@ -6527,42 +6038,41 @@ ir.cpp: # 543| int EarlyReturnValue(int, int) # 543| Block 0 # 543| v543_1(void) = EnterFunction : -# 543| m543_2(unknown) = AliasedDefinition : -# 543| m543_3(unknown) = InitializeNonLocal : -# 543| m543_4(unknown) = Chi : total:m543_2, partial:m543_3 -# 543| r543_5(glval) = VariableAddress[x] : -# 543| m543_6(int) = InitializeParameter[x] : &:r543_5 -# 543| r543_7(glval) = VariableAddress[y] : -# 543| m543_8(int) = InitializeParameter[y] : &:r543_7 +# 543| mu543_2(unknown) = AliasedDefinition : +# 543| mu543_3(unknown) = InitializeNonLocal : +# 543| r543_4(glval) = VariableAddress[x] : +# 543| m543_5(int) = InitializeParameter[x] : &:r543_4 +# 543| r543_6(glval) = VariableAddress[y] : +# 543| m543_7(int) = InitializeParameter[y] : &:r543_6 # 544| r544_1(glval) = VariableAddress[x] : -# 544| r544_2(int) = Load[x] : &:r544_1, m543_6 +# 544| r544_2(int) = Load[x] : &:r544_1, m543_5 # 544| r544_3(glval) = VariableAddress[y] : -# 544| r544_4(int) = Load[y] : &:r544_3, m543_8 +# 544| r544_4(int) = Load[y] : &:r544_3, m543_7 # 544| r544_5(bool) = CompareLT : r544_2, r544_4 # 544| v544_6(void) = ConditionalBranch : r544_5 #-----| False -> Block 3 #-----| True -> Block 2 # 543| Block 1 -# 543| m543_9(int) = Phi : from 2:m545_4, from 3:m548_7 -# 543| r543_10(glval) = VariableAddress[#return] : -# 543| v543_11(void) = ReturnValue : &:r543_10, m543_9 -# 543| v543_12(void) = AliasedUse : m543_3 -# 543| v543_13(void) = ExitFunction : +# 543| m543_8(int) = Phi : from 2:m545_4, from 3:m548_7 +# 543| r543_9(glval) = VariableAddress[#return] : +# 543| v543_10(void) = ReturnValue : &:r543_9, m543_8 +# 543| v543_11(void) = AliasedUse : ~m? +# 543| v543_12(void) = ExitFunction : # 545| Block 2 # 545| r545_1(glval) = VariableAddress[#return] : # 545| r545_2(glval) = VariableAddress[x] : -# 545| r545_3(int) = Load[x] : &:r545_2, m543_6 +# 545| r545_3(int) = Load[x] : &:r545_2, m543_5 # 545| m545_4(int) = Store[#return] : &:r545_1, r545_3 #-----| Goto -> Block 1 # 548| Block 3 # 548| r548_1(glval) = VariableAddress[#return] : # 548| r548_2(glval) = VariableAddress[x] : -# 548| r548_3(int) = Load[x] : &:r548_2, m543_6 +# 548| r548_3(int) = Load[x] : &:r548_2, m543_5 # 548| r548_4(glval) = VariableAddress[y] : -# 548| r548_5(int) = Load[y] : &:r548_4, m543_8 +# 548| r548_5(int) = Load[y] : &:r548_4, m543_7 # 548| r548_6(int) = Add : r548_3, r548_5 # 548| m548_7(int) = Store[#return] : &:r548_1, r548_6 #-----| Goto -> Block 1 @@ -6570,34 +6080,31 @@ ir.cpp: # 551| int CallViaFuncPtr(int(*)(int)) # 551| Block 0 # 551| v551_1(void) = EnterFunction : -# 551| m551_2(unknown) = AliasedDefinition : -# 551| m551_3(unknown) = InitializeNonLocal : -# 551| m551_4(unknown) = Chi : total:m551_2, partial:m551_3 -# 551| r551_5(glval<..(*)(..)>) = VariableAddress[pfn] : -# 551| m551_6(..(*)(..)) = InitializeParameter[pfn] : &:r551_5 +# 551| mu551_2(unknown) = AliasedDefinition : +# 551| mu551_3(unknown) = InitializeNonLocal : +# 551| r551_4(glval<..(*)(..)>) = VariableAddress[pfn] : +# 551| m551_5(..(*)(..)) = InitializeParameter[pfn] : &:r551_4 # 552| r552_1(glval) = VariableAddress[#return] : # 552| r552_2(glval<..(*)(..)>) = VariableAddress[pfn] : -# 552| r552_3(..(*)(..)) = Load[pfn] : &:r552_2, m551_6 +# 552| r552_3(..(*)(..)) = Load[pfn] : &:r552_2, m551_5 # 552| r552_4(int) = Constant[5] : # 552| r552_5(int) = Call[?] : func:r552_3, 0:r552_4 -# 552| m552_6(unknown) = ^CallSideEffect : ~m551_4 -# 552| m552_7(unknown) = Chi : total:m551_4, partial:m552_6 -# 552| m552_8(int) = Store[#return] : &:r552_1, r552_5 -# 551| r551_7(glval) = VariableAddress[#return] : -# 551| v551_8(void) = ReturnValue : &:r551_7, m552_8 -# 551| v551_9(void) = AliasedUse : ~m552_7 -# 551| v551_10(void) = ExitFunction : +# 552| mu552_6(unknown) = ^CallSideEffect : ~m? +# 552| m552_7(int) = Store[#return] : &:r552_1, r552_5 +# 551| r551_6(glval) = VariableAddress[#return] : +# 551| v551_7(void) = ReturnValue : &:r551_6, m552_7 +# 551| v551_8(void) = AliasedUse : ~m? +# 551| v551_9(void) = ExitFunction : # 560| int EnumSwitch(E) # 560| Block 0 # 560| v560_1(void) = EnterFunction : -# 560| m560_2(unknown) = AliasedDefinition : -# 560| m560_3(unknown) = InitializeNonLocal : -# 560| m560_4(unknown) = Chi : total:m560_2, partial:m560_3 -# 560| r560_5(glval) = VariableAddress[e] : -# 560| m560_6(E) = InitializeParameter[e] : &:r560_5 +# 560| mu560_2(unknown) = AliasedDefinition : +# 560| mu560_3(unknown) = InitializeNonLocal : +# 560| r560_4(glval) = VariableAddress[e] : +# 560| m560_5(E) = InitializeParameter[e] : &:r560_4 # 561| r561_1(glval) = VariableAddress[e] : -# 561| r561_2(E) = Load[e] : &:r561_1, m560_6 +# 561| r561_2(E) = Load[e] : &:r561_1, m560_5 # 561| r561_3(int) = Convert : r561_2 # 561| v561_4(void) = Switch : r561_3 #-----| Case[0] -> Block 2 @@ -6605,11 +6112,11 @@ ir.cpp: #-----| Default -> Block 4 # 560| Block 1 -# 560| m560_7(int) = Phi : from 2:m563_3, from 3:m565_3, from 4:m567_3 -# 560| r560_8(glval) = VariableAddress[#return] : -# 560| v560_9(void) = ReturnValue : &:r560_8, m560_7 -# 560| v560_10(void) = AliasedUse : m560_3 -# 560| v560_11(void) = ExitFunction : +# 560| m560_6(int) = Phi : from 2:m563_3, from 3:m565_3, from 4:m567_3 +# 560| r560_7(glval) = VariableAddress[#return] : +# 560| v560_8(void) = ReturnValue : &:r560_7, m560_6 +# 560| v560_9(void) = AliasedUse : ~m? +# 560| v560_10(void) = ExitFunction : # 562| Block 2 # 562| v562_1(void) = NoOp : @@ -6635,76 +6142,68 @@ ir.cpp: # 571| void InitArray() # 571| Block 0 # 571| v571_1(void) = EnterFunction : -# 571| m571_2(unknown) = AliasedDefinition : -# 571| m571_3(unknown) = InitializeNonLocal : -# 571| m571_4(unknown) = Chi : total:m571_2, partial:m571_3 +# 571| mu571_2(unknown) = AliasedDefinition : +# 571| mu571_3(unknown) = InitializeNonLocal : # 572| r572_1(glval) = VariableAddress[a_pad] : # 572| r572_2(glval) = StringConstant[""] : -# 572| r572_3(char[32]) = Load[?] : &:r572_2, ~m571_3 +# 572| r572_3(char[32]) = Load[?] : &:r572_2, ~m? # 572| m572_4(char[32]) = Store[a_pad] : &:r572_1, r572_3 # 573| r573_1(glval) = VariableAddress[a_nopad] : # 573| r573_2(glval) = StringConstant["foo"] : -# 573| r573_3(char[4]) = Load[?] : &:r573_2, ~m571_3 +# 573| r573_3(char[4]) = Load[?] : &:r573_2, ~m? # 573| m573_4(char[4]) = Store[a_nopad] : &:r573_1, r573_3 # 574| r574_1(glval) = VariableAddress[a_infer] : # 574| r574_2(glval) = StringConstant["blah"] : -# 574| r574_3(char[5]) = Load[?] : &:r574_2, ~m571_3 +# 574| r574_3(char[5]) = Load[?] : &:r574_2, ~m? # 574| m574_4(char[5]) = Store[a_infer] : &:r574_1, r574_3 # 575| r575_1(glval) = VariableAddress[b] : # 575| m575_2(char[2]) = Uninitialized[b] : &:r575_1 # 576| r576_1(glval) = VariableAddress[c] : -# 576| m576_2(char[2]) = Uninitialized[c] : &:r576_1 +# 576| mu576_2(char[2]) = Uninitialized[c] : &:r576_1 # 576| r576_3(int) = Constant[0] : # 576| r576_4(glval) = PointerAdd[1] : r576_1, r576_3 # 576| r576_5(unknown[2]) = Constant[0] : -# 576| m576_6(unknown[2]) = Store[?] : &:r576_4, r576_5 +# 576| mu576_6(unknown[2]) = Store[?] : &:r576_4, r576_5 # 577| r577_1(glval) = VariableAddress[d] : -# 577| m577_2(char[2]) = Uninitialized[d] : &:r577_1 +# 577| mu577_2(char[2]) = Uninitialized[d] : &:r577_1 # 577| r577_3(int) = Constant[0] : # 577| r577_4(glval) = PointerAdd[1] : r577_1, r577_3 # 577| r577_5(char) = Constant[0] : -# 577| m577_6(char) = Store[?] : &:r577_4, r577_5 -# 577| m577_7(char[2]) = Chi : total:m577_2, partial:m577_6 -# 577| r577_8(int) = Constant[1] : -# 577| r577_9(glval) = PointerAdd[1] : r577_1, r577_8 -# 577| r577_10(char) = Constant[0] : -# 577| m577_11(char) = Store[?] : &:r577_9, r577_10 -# 577| m577_12(char[2]) = Chi : total:m577_7, partial:m577_11 +# 577| mu577_6(char) = Store[?] : &:r577_4, r577_5 +# 577| r577_7(int) = Constant[1] : +# 577| r577_8(glval) = PointerAdd[1] : r577_1, r577_7 +# 577| r577_9(char) = Constant[0] : +# 577| mu577_10(char) = Store[?] : &:r577_8, r577_9 # 578| r578_1(glval) = VariableAddress[e] : -# 578| m578_2(char[2]) = Uninitialized[e] : &:r578_1 +# 578| mu578_2(char[2]) = Uninitialized[e] : &:r578_1 # 578| r578_3(int) = Constant[0] : # 578| r578_4(glval) = PointerAdd[1] : r578_1, r578_3 # 578| r578_5(char) = Constant[0] : -# 578| m578_6(char) = Store[?] : &:r578_4, r578_5 -# 578| m578_7(char[2]) = Chi : total:m578_2, partial:m578_6 -# 578| r578_8(int) = Constant[1] : -# 578| r578_9(glval) = PointerAdd[1] : r578_1, r578_8 -# 578| r578_10(char) = Constant[1] : -# 578| m578_11(char) = Store[?] : &:r578_9, r578_10 -# 578| m578_12(char[2]) = Chi : total:m578_7, partial:m578_11 +# 578| mu578_6(char) = Store[?] : &:r578_4, r578_5 +# 578| r578_7(int) = Constant[1] : +# 578| r578_8(glval) = PointerAdd[1] : r578_1, r578_7 +# 578| r578_9(char) = Constant[1] : +# 578| mu578_10(char) = Store[?] : &:r578_8, r578_9 # 579| r579_1(glval) = VariableAddress[f] : -# 579| m579_2(char[3]) = Uninitialized[f] : &:r579_1 +# 579| mu579_2(char[3]) = Uninitialized[f] : &:r579_1 # 579| r579_3(int) = Constant[0] : # 579| r579_4(glval) = PointerAdd[1] : r579_1, r579_3 # 579| r579_5(char) = Constant[0] : -# 579| m579_6(char) = Store[?] : &:r579_4, r579_5 -# 579| m579_7(char[3]) = Chi : total:m579_2, partial:m579_6 -# 579| r579_8(int) = Constant[1] : -# 579| r579_9(glval) = PointerAdd[1] : r579_1, r579_8 -# 579| r579_10(unknown[2]) = Constant[0] : -# 579| m579_11(unknown[2]) = Store[?] : &:r579_9, r579_10 -# 579| m579_12(char[3]) = Chi : total:m579_7, partial:m579_11 +# 579| mu579_6(char) = Store[?] : &:r579_4, r579_5 +# 579| r579_7(int) = Constant[1] : +# 579| r579_8(glval) = PointerAdd[1] : r579_1, r579_7 +# 579| r579_9(unknown[2]) = Constant[0] : +# 579| mu579_10(unknown[2]) = Store[?] : &:r579_8, r579_9 # 580| v580_1(void) = NoOp : -# 571| v571_5(void) = ReturnVoid : -# 571| v571_6(void) = AliasedUse : m571_3 -# 571| v571_7(void) = ExitFunction : +# 571| v571_4(void) = ReturnVoid : +# 571| v571_5(void) = AliasedUse : ~m? +# 571| v571_6(void) = ExitFunction : # 584| void VarArgs() # 584| Block 0 # 584| v584_1(void) = EnterFunction : -# 584| m584_2(unknown) = AliasedDefinition : -# 584| m584_3(unknown) = InitializeNonLocal : -# 584| m584_4(unknown) = Chi : total:m584_2, partial:m584_3 +# 584| mu584_2(unknown) = AliasedDefinition : +# 584| mu584_3(unknown) = InitializeNonLocal : # 585| r585_1(glval) = FunctionAddress[VarArgFunction] : # 585| r585_2(glval) = StringConstant["%d %s"] : # 585| r585_3(char *) = Convert : r585_2 @@ -6712,23 +6211,20 @@ ir.cpp: # 585| r585_5(glval) = StringConstant["string"] : # 585| r585_6(char *) = Convert : r585_5 # 585| v585_7(void) = Call[VarArgFunction] : func:r585_1, 0:r585_3, 1:r585_4, 2:r585_6 -# 585| m585_8(unknown) = ^CallSideEffect : ~m584_4 -# 585| m585_9(unknown) = Chi : total:m584_4, partial:m585_8 -# 585| v585_10(void) = ^BufferReadSideEffect[0] : &:r585_3, ~m584_3 -# 585| v585_11(void) = ^BufferReadSideEffect[2] : &:r585_6, ~m584_3 -# 585| m585_12(unknown) = ^BufferMayWriteSideEffect[2] : &:r585_6 -# 585| m585_13(unknown) = Chi : total:m585_9, partial:m585_12 +# 585| mu585_8(unknown) = ^CallSideEffect : ~m? +# 585| v585_9(void) = ^BufferReadSideEffect[0] : &:r585_3, ~m? +# 585| v585_10(void) = ^BufferReadSideEffect[2] : &:r585_6, ~m? +# 585| mu585_11(unknown) = ^BufferMayWriteSideEffect[2] : &:r585_6 # 586| v586_1(void) = NoOp : -# 584| v584_5(void) = ReturnVoid : -# 584| v584_6(void) = AliasedUse : ~m585_13 -# 584| v584_7(void) = ExitFunction : +# 584| v584_4(void) = ReturnVoid : +# 584| v584_5(void) = AliasedUse : ~m? +# 584| v584_6(void) = ExitFunction : # 590| void SetFuncPtr() # 590| Block 0 # 590| v590_1(void) = EnterFunction : -# 590| m590_2(unknown) = AliasedDefinition : -# 590| m590_3(unknown) = InitializeNonLocal : -# 590| m590_4(unknown) = Chi : total:m590_2, partial:m590_3 +# 590| mu590_2(unknown) = AliasedDefinition : +# 590| mu590_3(unknown) = InitializeNonLocal : # 591| r591_1(glval<..(*)(..)>) = VariableAddress[pfn] : # 591| r591_2(..(*)(..)) = FunctionAddress[FuncPtrTarget] : # 591| m591_3(..(*)(..)) = Store[pfn] : &:r591_1, r591_2 @@ -6748,424 +6244,367 @@ ir.cpp: # 594| r594_6(glval<..(*)(..)>) = VariableAddress[pfn] : # 594| m594_7(..(*)(..)) = Store[pfn] : &:r594_6, r594_5 # 595| v595_1(void) = NoOp : -# 590| v590_5(void) = ReturnVoid : -# 590| v590_6(void) = AliasedUse : m590_3 -# 590| v590_7(void) = ExitFunction : +# 590| v590_4(void) = ReturnVoid : +# 590| v590_5(void) = AliasedUse : ~m? +# 590| v590_6(void) = ExitFunction : # 615| void DeclareObject() # 615| Block 0 # 615| v615_1(void) = EnterFunction : -# 615| m615_2(unknown) = AliasedDefinition : -# 615| m615_3(unknown) = InitializeNonLocal : -# 615| m615_4(unknown) = Chi : total:m615_2, partial:m615_3 +# 615| mu615_2(unknown) = AliasedDefinition : +# 615| mu615_3(unknown) = InitializeNonLocal : # 616| r616_1(glval) = VariableAddress[s1] : -# 616| m616_2(String) = Uninitialized[s1] : &:r616_1 -# 616| m616_3(unknown) = Chi : total:m615_4, partial:m616_2 -# 616| r616_4(glval) = FunctionAddress[String] : -# 616| v616_5(void) = Call[String] : func:r616_4, this:r616_1 -# 616| m616_6(unknown) = ^CallSideEffect : ~m616_3 -# 616| m616_7(unknown) = Chi : total:m616_3, partial:m616_6 -# 616| m616_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r616_1 -# 616| m616_9(unknown) = Chi : total:m616_7, partial:m616_8 +# 616| mu616_2(String) = Uninitialized[s1] : &:r616_1 +# 616| r616_3(glval) = FunctionAddress[String] : +# 616| v616_4(void) = Call[String] : func:r616_3, this:r616_1 +# 616| mu616_5(unknown) = ^CallSideEffect : ~m? +# 616| mu616_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r616_1 # 617| r617_1(glval) = VariableAddress[s2] : -# 617| m617_2(String) = Uninitialized[s2] : &:r617_1 -# 617| m617_3(unknown) = Chi : total:m616_9, partial:m617_2 -# 617| r617_4(glval) = FunctionAddress[String] : -# 617| r617_5(glval) = StringConstant["hello"] : -# 617| r617_6(char *) = Convert : r617_5 -# 617| v617_7(void) = Call[String] : func:r617_4, this:r617_1, 0:r617_6 -# 617| m617_8(unknown) = ^CallSideEffect : ~m617_3 -# 617| m617_9(unknown) = Chi : total:m617_3, partial:m617_8 -# 617| v617_10(void) = ^BufferReadSideEffect[0] : &:r617_6, ~m615_3 -# 617| m617_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r617_1 -# 617| m617_12(unknown) = Chi : total:m617_9, partial:m617_11 +# 617| mu617_2(String) = Uninitialized[s2] : &:r617_1 +# 617| r617_3(glval) = FunctionAddress[String] : +# 617| r617_4(glval) = StringConstant["hello"] : +# 617| r617_5(char *) = Convert : r617_4 +# 617| v617_6(void) = Call[String] : func:r617_3, this:r617_1, 0:r617_5 +# 617| mu617_7(unknown) = ^CallSideEffect : ~m? +# 617| v617_8(void) = ^BufferReadSideEffect[0] : &:r617_5, ~m? +# 617| mu617_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r617_1 # 618| r618_1(glval) = VariableAddress[s3] : # 618| r618_2(glval) = FunctionAddress[ReturnObject] : # 618| r618_3(String) = Call[ReturnObject] : func:r618_2 -# 618| m618_4(unknown) = ^CallSideEffect : ~m617_12 -# 618| m618_5(unknown) = Chi : total:m617_12, partial:m618_4 -# 618| m618_6(String) = Store[s3] : &:r618_1, r618_3 -# 618| m618_7(unknown) = Chi : total:m618_5, partial:m618_6 +# 618| mu618_4(unknown) = ^CallSideEffect : ~m? +# 618| mu618_5(String) = Store[s3] : &:r618_1, r618_3 # 619| r619_1(glval) = VariableAddress[s4] : -# 619| m619_2(String) = Uninitialized[s4] : &:r619_1 -# 619| m619_3(unknown) = Chi : total:m618_7, partial:m619_2 -# 619| r619_4(glval) = FunctionAddress[String] : -# 619| r619_5(glval) = StringConstant["test"] : -# 619| r619_6(char *) = Convert : r619_5 -# 619| v619_7(void) = Call[String] : func:r619_4, this:r619_1, 0:r619_6 -# 619| m619_8(unknown) = ^CallSideEffect : ~m619_3 -# 619| m619_9(unknown) = Chi : total:m619_3, partial:m619_8 -# 619| v619_10(void) = ^BufferReadSideEffect[0] : &:r619_6, ~m615_3 -# 619| m619_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r619_1 -# 619| m619_12(unknown) = Chi : total:m619_9, partial:m619_11 +# 619| mu619_2(String) = Uninitialized[s4] : &:r619_1 +# 619| r619_3(glval) = FunctionAddress[String] : +# 619| r619_4(glval) = StringConstant["test"] : +# 619| r619_5(char *) = Convert : r619_4 +# 619| v619_6(void) = Call[String] : func:r619_3, this:r619_1, 0:r619_5 +# 619| mu619_7(unknown) = ^CallSideEffect : ~m? +# 619| v619_8(void) = ^BufferReadSideEffect[0] : &:r619_5, ~m? +# 619| mu619_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r619_1 # 620| v620_1(void) = NoOp : # 620| r620_2(glval) = VariableAddress[s4] : # 620| r620_3(glval) = FunctionAddress[~String] : # 620| v620_4(void) = Call[~String] : func:r620_3, this:r620_2 -# 620| m620_5(unknown) = ^CallSideEffect : ~m619_12 -# 620| m620_6(unknown) = Chi : total:m619_12, partial:m620_5 -# 620| v620_7(void) = ^IndirectReadSideEffect[-1] : &:r620_2, ~m620_6 -# 620| m620_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_2 -# 620| m620_9(unknown) = Chi : total:m620_6, partial:m620_8 -# 620| r620_10(glval) = VariableAddress[s3] : -# 620| r620_11(glval) = FunctionAddress[~String] : -# 620| v620_12(void) = Call[~String] : func:r620_11, this:r620_10 -# 620| m620_13(unknown) = ^CallSideEffect : ~m620_9 -# 620| m620_14(unknown) = Chi : total:m620_9, partial:m620_13 -# 620| v620_15(void) = ^IndirectReadSideEffect[-1] : &:r620_10, ~m620_14 -# 620| m620_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_10 -# 620| m620_17(unknown) = Chi : total:m620_14, partial:m620_16 -# 620| r620_18(glval) = VariableAddress[s2] : -# 620| r620_19(glval) = FunctionAddress[~String] : -# 620| v620_20(void) = Call[~String] : func:r620_19, this:r620_18 -# 620| m620_21(unknown) = ^CallSideEffect : ~m620_17 -# 620| m620_22(unknown) = Chi : total:m620_17, partial:m620_21 -# 620| v620_23(void) = ^IndirectReadSideEffect[-1] : &:r620_18, ~m620_22 -# 620| m620_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_18 -# 620| m620_25(unknown) = Chi : total:m620_22, partial:m620_24 -# 620| r620_26(glval) = VariableAddress[s1] : -# 620| r620_27(glval) = FunctionAddress[~String] : -# 620| v620_28(void) = Call[~String] : func:r620_27, this:r620_26 -# 620| m620_29(unknown) = ^CallSideEffect : ~m620_25 -# 620| m620_30(unknown) = Chi : total:m620_25, partial:m620_29 -# 620| v620_31(void) = ^IndirectReadSideEffect[-1] : &:r620_26, ~m620_30 -# 620| m620_32(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_26 -# 620| m620_33(unknown) = Chi : total:m620_30, partial:m620_32 -# 615| v615_5(void) = ReturnVoid : -# 615| v615_6(void) = AliasedUse : ~m620_30 -# 615| v615_7(void) = ExitFunction : +# 620| mu620_5(unknown) = ^CallSideEffect : ~m? +# 620| v620_6(void) = ^IndirectReadSideEffect[-1] : &:r620_2, ~m? +# 620| mu620_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_2 +# 620| r620_8(glval) = VariableAddress[s3] : +# 620| r620_9(glval) = FunctionAddress[~String] : +# 620| v620_10(void) = Call[~String] : func:r620_9, this:r620_8 +# 620| mu620_11(unknown) = ^CallSideEffect : ~m? +# 620| v620_12(void) = ^IndirectReadSideEffect[-1] : &:r620_8, ~m? +# 620| mu620_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_8 +# 620| r620_14(glval) = VariableAddress[s2] : +# 620| r620_15(glval) = FunctionAddress[~String] : +# 620| v620_16(void) = Call[~String] : func:r620_15, this:r620_14 +# 620| mu620_17(unknown) = ^CallSideEffect : ~m? +# 620| v620_18(void) = ^IndirectReadSideEffect[-1] : &:r620_14, ~m? +# 620| mu620_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_14 +# 620| r620_20(glval) = VariableAddress[s1] : +# 620| r620_21(glval) = FunctionAddress[~String] : +# 620| v620_22(void) = Call[~String] : func:r620_21, this:r620_20 +# 620| mu620_23(unknown) = ^CallSideEffect : ~m? +# 620| v620_24(void) = ^IndirectReadSideEffect[-1] : &:r620_20, ~m? +# 620| mu620_25(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_20 +# 615| v615_4(void) = ReturnVoid : +# 615| v615_5(void) = AliasedUse : ~m? +# 615| v615_6(void) = ExitFunction : # 622| void CallMethods(String&, String*, String) # 622| Block 0 -# 622| v622_1(void) = EnterFunction : -# 622| m622_2(unknown) = AliasedDefinition : -# 622| m622_3(unknown) = InitializeNonLocal : -# 622| m622_4(unknown) = Chi : total:m622_2, partial:m622_3 -# 622| r622_5(glval) = VariableAddress[r] : -# 622| m622_6(String &) = InitializeParameter[r] : &:r622_5 -# 622| r622_7(String &) = Load[r] : &:r622_5, m622_6 -# 622| m622_8(unknown) = InitializeIndirection[r] : &:r622_7 -# 622| m622_9(unknown) = Chi : total:m622_4, partial:m622_8 -# 622| r622_10(glval) = VariableAddress[p] : -# 622| m622_11(String *) = InitializeParameter[p] : &:r622_10 -# 622| r622_12(String *) = Load[p] : &:r622_10, m622_11 -# 622| m622_13(unknown) = InitializeIndirection[p] : &:r622_12 -# 622| m622_14(unknown) = Chi : total:m622_9, partial:m622_13 -# 622| r622_15(glval) = VariableAddress[s] : -# 622| m622_16(String) = InitializeParameter[s] : &:r622_15 -# 622| m622_17(unknown) = Chi : total:m622_14, partial:m622_16 -# 623| r623_1(glval) = VariableAddress[r] : -# 623| r623_2(String &) = Load[r] : &:r623_1, m622_6 -# 623| r623_3(glval) = CopyValue : r623_2 -# 623| r623_4(glval) = Convert : r623_3 -# 623| r623_5(glval) = FunctionAddress[c_str] : -# 623| r623_6(char *) = Call[c_str] : func:r623_5, this:r623_4 -# 623| m623_7(unknown) = ^CallSideEffect : ~m622_17 -# 623| m623_8(unknown) = Chi : total:m622_17, partial:m623_7 -# 623| v623_9(void) = ^IndirectReadSideEffect[-1] : &:r623_4, ~m623_8 -# 624| r624_1(glval) = VariableAddress[p] : -# 624| r624_2(String *) = Load[p] : &:r624_1, m622_11 -# 624| r624_3(String *) = Convert : r624_2 -# 624| r624_4(glval) = FunctionAddress[c_str] : -# 624| r624_5(char *) = Call[c_str] : func:r624_4, this:r624_3 -# 624| m624_6(unknown) = ^CallSideEffect : ~m623_8 -# 624| m624_7(unknown) = Chi : total:m623_8, partial:m624_6 -# 624| v624_8(void) = ^IndirectReadSideEffect[-1] : &:r624_3, ~m624_7 -# 625| r625_1(glval) = VariableAddress[s] : -# 625| r625_2(glval) = Convert : r625_1 -# 625| r625_3(glval) = FunctionAddress[c_str] : -# 625| r625_4(char *) = Call[c_str] : func:r625_3, this:r625_2 -# 625| m625_5(unknown) = ^CallSideEffect : ~m624_7 -# 625| m625_6(unknown) = Chi : total:m624_7, partial:m625_5 -# 625| v625_7(void) = ^IndirectReadSideEffect[-1] : &:r625_2, ~m625_6 -# 626| v626_1(void) = NoOp : -# 622| v622_18(void) = ReturnIndirection[r] : &:r622_7, ~m625_6 -# 622| v622_19(void) = ReturnIndirection[p] : &:r622_12, ~m625_6 -# 622| v622_20(void) = ReturnVoid : -# 622| v622_21(void) = AliasedUse : ~m625_6 -# 622| v622_22(void) = ExitFunction : +# 622| v622_1(void) = EnterFunction : +# 622| mu622_2(unknown) = AliasedDefinition : +# 622| mu622_3(unknown) = InitializeNonLocal : +# 622| r622_4(glval) = VariableAddress[r] : +# 622| m622_5(String &) = InitializeParameter[r] : &:r622_4 +# 622| r622_6(String &) = Load[r] : &:r622_4, m622_5 +# 622| mu622_7(unknown) = InitializeIndirection[r] : &:r622_6 +# 622| r622_8(glval) = VariableAddress[p] : +# 622| m622_9(String *) = InitializeParameter[p] : &:r622_8 +# 622| r622_10(String *) = Load[p] : &:r622_8, m622_9 +# 622| mu622_11(unknown) = InitializeIndirection[p] : &:r622_10 +# 622| r622_12(glval) = VariableAddress[s] : +# 622| mu622_13(String) = InitializeParameter[s] : &:r622_12 +# 623| r623_1(glval) = VariableAddress[r] : +# 623| r623_2(String &) = Load[r] : &:r623_1, m622_5 +# 623| r623_3(glval) = CopyValue : r623_2 +# 623| r623_4(glval) = Convert : r623_3 +# 623| r623_5(glval) = FunctionAddress[c_str] : +# 623| r623_6(char *) = Call[c_str] : func:r623_5, this:r623_4 +# 623| mu623_7(unknown) = ^CallSideEffect : ~m? +# 623| v623_8(void) = ^IndirectReadSideEffect[-1] : &:r623_4, ~m? +# 624| r624_1(glval) = VariableAddress[p] : +# 624| r624_2(String *) = Load[p] : &:r624_1, m622_9 +# 624| r624_3(String *) = Convert : r624_2 +# 624| r624_4(glval) = FunctionAddress[c_str] : +# 624| r624_5(char *) = Call[c_str] : func:r624_4, this:r624_3 +# 624| mu624_6(unknown) = ^CallSideEffect : ~m? +# 624| v624_7(void) = ^IndirectReadSideEffect[-1] : &:r624_3, ~m? +# 625| r625_1(glval) = VariableAddress[s] : +# 625| r625_2(glval) = Convert : r625_1 +# 625| r625_3(glval) = FunctionAddress[c_str] : +# 625| r625_4(char *) = Call[c_str] : func:r625_3, this:r625_2 +# 625| mu625_5(unknown) = ^CallSideEffect : ~m? +# 625| v625_6(void) = ^IndirectReadSideEffect[-1] : &:r625_2, ~m? +# 626| v626_1(void) = NoOp : +# 622| v622_14(void) = ReturnIndirection[r] : &:r622_6, ~m? +# 622| v622_15(void) = ReturnIndirection[p] : &:r622_10, ~m? +# 622| v622_16(void) = ReturnVoid : +# 622| v622_17(void) = AliasedUse : ~m? +# 622| v622_18(void) = ExitFunction : # 628| void C::~C() # 628| Block 0 # 628| v628_1(void) = EnterFunction : -# 628| m628_2(unknown) = AliasedDefinition : -# 628| m628_3(unknown) = InitializeNonLocal : -# 628| m628_4(unknown) = Chi : total:m628_2, partial:m628_3 -# 628| r628_5(glval) = VariableAddress[#this] : -# 628| m628_6(glval) = InitializeParameter[#this] : &:r628_5 -# 628| r628_7(glval) = Load[#this] : &:r628_5, m628_6 -# 628| m628_8(C) = InitializeIndirection[#this] : &:r628_7 -# 628| m628_9(unknown) = Chi : total:m628_4, partial:m628_8 +# 628| mu628_2(unknown) = AliasedDefinition : +# 628| mu628_3(unknown) = InitializeNonLocal : +# 628| r628_4(glval) = VariableAddress[#this] : +# 628| m628_5(glval) = InitializeParameter[#this] : &:r628_4 +# 628| r628_6(glval) = Load[#this] : &:r628_4, m628_5 +# 628| mu628_7(C) = InitializeIndirection[#this] : &:r628_6 #-----| v0_1(void) = NoOp : -# 628| r628_10(glval) = FieldAddress[m_f] : r628_7 -# 628| r628_11(glval) = FunctionAddress[~String] : -# 628| v628_12(void) = Call[~String] : func:r628_11, this:r628_10 -# 628| m628_13(unknown) = ^CallSideEffect : ~m628_9 -# 628| m628_14(unknown) = Chi : total:m628_9, partial:m628_13 -# 628| r628_15(glval) = FieldAddress[m_b] : r628_7 -# 628| r628_16(glval) = FunctionAddress[~String] : -# 628| v628_17(void) = Call[~String] : func:r628_16, this:r628_15 -# 628| m628_18(unknown) = ^CallSideEffect : ~m628_14 -# 628| m628_19(unknown) = Chi : total:m628_14, partial:m628_18 -# 628| v628_20(void) = ReturnIndirection[#this] : &:r628_7, ~m628_19 -# 628| v628_21(void) = ReturnVoid : -# 628| v628_22(void) = AliasedUse : ~m628_19 -# 628| v628_23(void) = ExitFunction : +# 628| r628_8(glval) = FieldAddress[m_f] : r628_6 +# 628| r628_9(glval) = FunctionAddress[~String] : +# 628| v628_10(void) = Call[~String] : func:r628_9, this:r628_8 +# 628| mu628_11(unknown) = ^CallSideEffect : ~m? +# 628| r628_12(glval) = FieldAddress[m_b] : r628_6 +# 628| r628_13(glval) = FunctionAddress[~String] : +# 628| v628_14(void) = Call[~String] : func:r628_13, this:r628_12 +# 628| mu628_15(unknown) = ^CallSideEffect : ~m? +# 628| v628_16(void) = ReturnIndirection[#this] : &:r628_6, ~m? +# 628| v628_17(void) = ReturnVoid : +# 628| v628_18(void) = AliasedUse : ~m? +# 628| v628_19(void) = ExitFunction : # 630| int C::StaticMemberFunction(int) # 630| Block 0 # 630| v630_1(void) = EnterFunction : -# 630| m630_2(unknown) = AliasedDefinition : -# 630| m630_3(unknown) = InitializeNonLocal : -# 630| m630_4(unknown) = Chi : total:m630_2, partial:m630_3 -# 630| r630_5(glval) = VariableAddress[x] : -# 630| m630_6(int) = InitializeParameter[x] : &:r630_5 +# 630| mu630_2(unknown) = AliasedDefinition : +# 630| mu630_3(unknown) = InitializeNonLocal : +# 630| r630_4(glval) = VariableAddress[x] : +# 630| m630_5(int) = InitializeParameter[x] : &:r630_4 # 631| r631_1(glval) = VariableAddress[#return] : # 631| r631_2(glval) = VariableAddress[x] : -# 631| r631_3(int) = Load[x] : &:r631_2, m630_6 +# 631| r631_3(int) = Load[x] : &:r631_2, m630_5 # 631| m631_4(int) = Store[#return] : &:r631_1, r631_3 -# 630| r630_7(glval) = VariableAddress[#return] : -# 630| v630_8(void) = ReturnValue : &:r630_7, m631_4 -# 630| v630_9(void) = AliasedUse : m630_3 -# 630| v630_10(void) = ExitFunction : +# 630| r630_6(glval) = VariableAddress[#return] : +# 630| v630_7(void) = ReturnValue : &:r630_6, m631_4 +# 630| v630_8(void) = AliasedUse : ~m? +# 630| v630_9(void) = ExitFunction : # 634| int C::InstanceMemberFunction(int) # 634| Block 0 # 634| v634_1(void) = EnterFunction : -# 634| m634_2(unknown) = AliasedDefinition : -# 634| m634_3(unknown) = InitializeNonLocal : -# 634| m634_4(unknown) = Chi : total:m634_2, partial:m634_3 -# 634| r634_5(glval) = VariableAddress[#this] : -# 634| m634_6(glval) = InitializeParameter[#this] : &:r634_5 -# 634| r634_7(glval) = Load[#this] : &:r634_5, m634_6 -# 634| m634_8(C) = InitializeIndirection[#this] : &:r634_7 -# 634| r634_9(glval) = VariableAddress[x] : -# 634| m634_10(int) = InitializeParameter[x] : &:r634_9 +# 634| mu634_2(unknown) = AliasedDefinition : +# 634| mu634_3(unknown) = InitializeNonLocal : +# 634| r634_4(glval) = VariableAddress[#this] : +# 634| m634_5(glval) = InitializeParameter[#this] : &:r634_4 +# 634| r634_6(glval) = Load[#this] : &:r634_4, m634_5 +# 634| mu634_7(C) = InitializeIndirection[#this] : &:r634_6 +# 634| r634_8(glval) = VariableAddress[x] : +# 634| m634_9(int) = InitializeParameter[x] : &:r634_8 # 635| r635_1(glval) = VariableAddress[#return] : # 635| r635_2(glval) = VariableAddress[x] : -# 635| r635_3(int) = Load[x] : &:r635_2, m634_10 +# 635| r635_3(int) = Load[x] : &:r635_2, m634_9 # 635| m635_4(int) = Store[#return] : &:r635_1, r635_3 -# 634| v634_11(void) = ReturnIndirection[#this] : &:r634_7, m634_8 -# 634| r634_12(glval) = VariableAddress[#return] : -# 634| v634_13(void) = ReturnValue : &:r634_12, m635_4 -# 634| v634_14(void) = AliasedUse : m634_3 -# 634| v634_15(void) = ExitFunction : +# 634| v634_10(void) = ReturnIndirection[#this] : &:r634_6, ~m? +# 634| r634_11(glval) = VariableAddress[#return] : +# 634| v634_12(void) = ReturnValue : &:r634_11, m635_4 +# 634| v634_13(void) = AliasedUse : ~m? +# 634| v634_14(void) = ExitFunction : # 638| int C::VirtualMemberFunction(int) # 638| Block 0 # 638| v638_1(void) = EnterFunction : -# 638| m638_2(unknown) = AliasedDefinition : -# 638| m638_3(unknown) = InitializeNonLocal : -# 638| m638_4(unknown) = Chi : total:m638_2, partial:m638_3 -# 638| r638_5(glval) = VariableAddress[#this] : -# 638| m638_6(glval) = InitializeParameter[#this] : &:r638_5 -# 638| r638_7(glval) = Load[#this] : &:r638_5, m638_6 -# 638| m638_8(C) = InitializeIndirection[#this] : &:r638_7 -# 638| r638_9(glval) = VariableAddress[x] : -# 638| m638_10(int) = InitializeParameter[x] : &:r638_9 +# 638| mu638_2(unknown) = AliasedDefinition : +# 638| mu638_3(unknown) = InitializeNonLocal : +# 638| r638_4(glval) = VariableAddress[#this] : +# 638| m638_5(glval) = InitializeParameter[#this] : &:r638_4 +# 638| r638_6(glval) = Load[#this] : &:r638_4, m638_5 +# 638| mu638_7(C) = InitializeIndirection[#this] : &:r638_6 +# 638| r638_8(glval) = VariableAddress[x] : +# 638| m638_9(int) = InitializeParameter[x] : &:r638_8 # 639| r639_1(glval) = VariableAddress[#return] : # 639| r639_2(glval) = VariableAddress[x] : -# 639| r639_3(int) = Load[x] : &:r639_2, m638_10 +# 639| r639_3(int) = Load[x] : &:r639_2, m638_9 # 639| m639_4(int) = Store[#return] : &:r639_1, r639_3 -# 638| v638_11(void) = ReturnIndirection[#this] : &:r638_7, m638_8 -# 638| r638_12(glval) = VariableAddress[#return] : -# 638| v638_13(void) = ReturnValue : &:r638_12, m639_4 -# 638| v638_14(void) = AliasedUse : m638_3 -# 638| v638_15(void) = ExitFunction : +# 638| v638_10(void) = ReturnIndirection[#this] : &:r638_6, ~m? +# 638| r638_11(glval) = VariableAddress[#return] : +# 638| v638_12(void) = ReturnValue : &:r638_11, m639_4 +# 638| v638_13(void) = AliasedUse : ~m? +# 638| v638_14(void) = ExitFunction : # 642| void C::FieldAccess() # 642| Block 0 # 642| v642_1(void) = EnterFunction : -# 642| m642_2(unknown) = AliasedDefinition : -# 642| m642_3(unknown) = InitializeNonLocal : -# 642| m642_4(unknown) = Chi : total:m642_2, partial:m642_3 -# 642| r642_5(glval) = VariableAddress[#this] : -# 642| m642_6(glval) = InitializeParameter[#this] : &:r642_5 -# 642| r642_7(glval) = Load[#this] : &:r642_5, m642_6 -# 642| m642_8(C) = InitializeIndirection[#this] : &:r642_7 +# 642| mu642_2(unknown) = AliasedDefinition : +# 642| mu642_3(unknown) = InitializeNonLocal : +# 642| r642_4(glval) = VariableAddress[#this] : +# 642| m642_5(glval) = InitializeParameter[#this] : &:r642_4 +# 642| r642_6(glval) = Load[#this] : &:r642_4, m642_5 +# 642| mu642_7(C) = InitializeIndirection[#this] : &:r642_6 # 643| r643_1(int) = Constant[0] : # 643| r643_2(glval) = VariableAddress[#this] : -# 643| r643_3(C *) = Load[#this] : &:r643_2, m642_6 +# 643| r643_3(C *) = Load[#this] : &:r643_2, m642_5 # 643| r643_4(glval) = FieldAddress[m_a] : r643_3 -# 643| m643_5(int) = Store[?] : &:r643_4, r643_1 -# 643| m643_6(unknown) = Chi : total:m642_8, partial:m643_5 +# 643| mu643_5(int) = Store[?] : &:r643_4, r643_1 # 644| r644_1(int) = Constant[1] : # 644| r644_2(glval) = VariableAddress[#this] : -# 644| r644_3(C *) = Load[#this] : &:r644_2, m642_6 +# 644| r644_3(C *) = Load[#this] : &:r644_2, m642_5 # 644| r644_4(glval) = CopyValue : r644_3 # 644| r644_5(glval) = FieldAddress[m_a] : r644_4 -# 644| m644_6(int) = Store[?] : &:r644_5, r644_1 -# 644| m644_7(unknown) = Chi : total:m643_6, partial:m644_6 +# 644| mu644_6(int) = Store[?] : &:r644_5, r644_1 # 645| r645_1(int) = Constant[2] : # 645| r645_2(glval) = VariableAddress[#this] : -# 645| r645_3(C *) = Load[#this] : &:r645_2, m642_6 +# 645| r645_3(C *) = Load[#this] : &:r645_2, m642_5 # 645| r645_4(glval) = FieldAddress[m_a] : r645_3 -# 645| m645_5(int) = Store[?] : &:r645_4, r645_1 -# 645| m645_6(unknown) = Chi : total:m644_7, partial:m645_5 +# 645| mu645_5(int) = Store[?] : &:r645_4, r645_1 # 646| r646_1(glval) = VariableAddress[x] : # 646| m646_2(int) = Uninitialized[x] : &:r646_1 # 647| r647_1(glval) = VariableAddress[#this] : -# 647| r647_2(C *) = Load[#this] : &:r647_1, m642_6 +# 647| r647_2(C *) = Load[#this] : &:r647_1, m642_5 # 647| r647_3(glval) = FieldAddress[m_a] : r647_2 -# 647| r647_4(int) = Load[?] : &:r647_3, m645_5 +# 647| r647_4(int) = Load[?] : &:r647_3, ~m? # 647| r647_5(glval) = VariableAddress[x] : # 647| m647_6(int) = Store[x] : &:r647_5, r647_4 # 648| r648_1(glval) = VariableAddress[#this] : -# 648| r648_2(C *) = Load[#this] : &:r648_1, m642_6 +# 648| r648_2(C *) = Load[#this] : &:r648_1, m642_5 # 648| r648_3(glval) = CopyValue : r648_2 # 648| r648_4(glval) = FieldAddress[m_a] : r648_3 -# 648| r648_5(int) = Load[?] : &:r648_4, m645_5 +# 648| r648_5(int) = Load[?] : &:r648_4, ~m? # 648| r648_6(glval) = VariableAddress[x] : # 648| m648_7(int) = Store[x] : &:r648_6, r648_5 # 649| r649_1(glval) = VariableAddress[#this] : -# 649| r649_2(C *) = Load[#this] : &:r649_1, m642_6 +# 649| r649_2(C *) = Load[#this] : &:r649_1, m642_5 # 649| r649_3(glval) = FieldAddress[m_a] : r649_2 -# 649| r649_4(int) = Load[?] : &:r649_3, m645_5 +# 649| r649_4(int) = Load[?] : &:r649_3, ~m? # 649| r649_5(glval) = VariableAddress[x] : # 649| m649_6(int) = Store[x] : &:r649_5, r649_4 # 650| v650_1(void) = NoOp : -# 642| v642_9(void) = ReturnIndirection[#this] : &:r642_7, m645_6 -# 642| v642_10(void) = ReturnVoid : -# 642| v642_11(void) = AliasedUse : m642_3 -# 642| v642_12(void) = ExitFunction : +# 642| v642_8(void) = ReturnIndirection[#this] : &:r642_6, ~m? +# 642| v642_9(void) = ReturnVoid : +# 642| v642_10(void) = AliasedUse : ~m? +# 642| v642_11(void) = ExitFunction : # 652| void C::MethodCalls() # 652| Block 0 # 652| v652_1(void) = EnterFunction : -# 652| m652_2(unknown) = AliasedDefinition : -# 652| m652_3(unknown) = InitializeNonLocal : -# 652| m652_4(unknown) = Chi : total:m652_2, partial:m652_3 -# 652| r652_5(glval) = VariableAddress[#this] : -# 652| m652_6(glval) = InitializeParameter[#this] : &:r652_5 -# 652| r652_7(glval) = Load[#this] : &:r652_5, m652_6 -# 652| m652_8(C) = InitializeIndirection[#this] : &:r652_7 +# 652| mu652_2(unknown) = AliasedDefinition : +# 652| mu652_3(unknown) = InitializeNonLocal : +# 652| r652_4(glval) = VariableAddress[#this] : +# 652| m652_5(glval) = InitializeParameter[#this] : &:r652_4 +# 652| r652_6(glval) = Load[#this] : &:r652_4, m652_5 +# 652| mu652_7(C) = InitializeIndirection[#this] : &:r652_6 # 653| r653_1(glval) = VariableAddress[#this] : -# 653| r653_2(C *) = Load[#this] : &:r653_1, m652_6 +# 653| r653_2(C *) = Load[#this] : &:r653_1, m652_5 # 653| r653_3(glval) = FunctionAddress[InstanceMemberFunction] : # 653| r653_4(int) = Constant[0] : # 653| r653_5(int) = Call[InstanceMemberFunction] : func:r653_3, this:r653_2, 0:r653_4 -# 653| m653_6(unknown) = ^CallSideEffect : ~m652_4 -# 653| m653_7(unknown) = Chi : total:m652_4, partial:m653_6 -# 653| v653_8(void) = ^IndirectReadSideEffect[-1] : &:r653_2, ~m652_8 -# 653| m653_9(C) = ^IndirectMayWriteSideEffect[-1] : &:r653_2 -# 653| m653_10(unknown) = Chi : total:m652_8, partial:m653_9 +# 653| mu653_6(unknown) = ^CallSideEffect : ~m? +# 653| v653_7(void) = ^IndirectReadSideEffect[-1] : &:r653_2, ~m? +# 653| mu653_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r653_2 # 654| r654_1(glval) = VariableAddress[#this] : -# 654| r654_2(C *) = Load[#this] : &:r654_1, m652_6 +# 654| r654_2(C *) = Load[#this] : &:r654_1, m652_5 # 654| r654_3(glval) = CopyValue : r654_2 # 654| r654_4(glval) = FunctionAddress[InstanceMemberFunction] : # 654| r654_5(int) = Constant[1] : # 654| r654_6(int) = Call[InstanceMemberFunction] : func:r654_4, this:r654_3, 0:r654_5 -# 654| m654_7(unknown) = ^CallSideEffect : ~m653_7 -# 654| m654_8(unknown) = Chi : total:m653_7, partial:m654_7 -# 654| v654_9(void) = ^IndirectReadSideEffect[-1] : &:r654_3, ~m653_10 -# 654| m654_10(C) = ^IndirectMayWriteSideEffect[-1] : &:r654_3 -# 654| m654_11(unknown) = Chi : total:m653_10, partial:m654_10 +# 654| mu654_7(unknown) = ^CallSideEffect : ~m? +# 654| v654_8(void) = ^IndirectReadSideEffect[-1] : &:r654_3, ~m? +# 654| mu654_9(C) = ^IndirectMayWriteSideEffect[-1] : &:r654_3 # 655| r655_1(glval) = VariableAddress[#this] : -# 655| r655_2(C *) = Load[#this] : &:r655_1, m652_6 +# 655| r655_2(C *) = Load[#this] : &:r655_1, m652_5 # 655| r655_3(glval) = FunctionAddress[InstanceMemberFunction] : # 655| r655_4(int) = Constant[2] : # 655| r655_5(int) = Call[InstanceMemberFunction] : func:r655_3, this:r655_2, 0:r655_4 -# 655| m655_6(unknown) = ^CallSideEffect : ~m654_8 -# 655| m655_7(unknown) = Chi : total:m654_8, partial:m655_6 -# 655| v655_8(void) = ^IndirectReadSideEffect[-1] : &:r655_2, ~m654_11 -# 655| m655_9(C) = ^IndirectMayWriteSideEffect[-1] : &:r655_2 -# 655| m655_10(unknown) = Chi : total:m654_11, partial:m655_9 +# 655| mu655_6(unknown) = ^CallSideEffect : ~m? +# 655| v655_7(void) = ^IndirectReadSideEffect[-1] : &:r655_2, ~m? +# 655| mu655_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r655_2 # 656| v656_1(void) = NoOp : -# 652| v652_9(void) = ReturnIndirection[#this] : &:r652_7, m655_10 -# 652| v652_10(void) = ReturnVoid : -# 652| v652_11(void) = AliasedUse : ~m655_7 -# 652| v652_12(void) = ExitFunction : +# 652| v652_8(void) = ReturnIndirection[#this] : &:r652_6, ~m? +# 652| v652_9(void) = ReturnVoid : +# 652| v652_10(void) = AliasedUse : ~m? +# 652| v652_11(void) = ExitFunction : # 658| void C::C() # 658| Block 0 # 658| v658_1(void) = EnterFunction : -# 658| m658_2(unknown) = AliasedDefinition : -# 658| m658_3(unknown) = InitializeNonLocal : -# 658| m658_4(unknown) = Chi : total:m658_2, partial:m658_3 -# 658| r658_5(glval) = VariableAddress[#this] : -# 658| m658_6(glval) = InitializeParameter[#this] : &:r658_5 -# 658| r658_7(glval) = Load[#this] : &:r658_5, m658_6 -# 658| m658_8(C) = InitializeIndirection[#this] : &:r658_7 -# 658| m658_9(unknown) = Chi : total:m658_4, partial:m658_8 -# 659| r659_1(glval) = FieldAddress[m_a] : r658_7 +# 658| mu658_2(unknown) = AliasedDefinition : +# 658| mu658_3(unknown) = InitializeNonLocal : +# 658| r658_4(glval) = VariableAddress[#this] : +# 658| m658_5(glval) = InitializeParameter[#this] : &:r658_4 +# 658| r658_6(glval) = Load[#this] : &:r658_4, m658_5 +# 658| mu658_7(C) = InitializeIndirection[#this] : &:r658_6 +# 659| r659_1(glval) = FieldAddress[m_a] : r658_6 # 659| r659_2(int) = Constant[1] : -# 659| m659_3(int) = Store[?] : &:r659_1, r659_2 -# 659| m659_4(unknown) = Chi : total:m658_9, partial:m659_3 -# 663| r663_1(glval) = FieldAddress[m_b] : r658_7 +# 659| mu659_3(int) = Store[?] : &:r659_1, r659_2 +# 663| r663_1(glval) = FieldAddress[m_b] : r658_6 # 663| r663_2(glval) = FunctionAddress[String] : # 663| v663_3(void) = Call[String] : func:r663_2, this:r663_1 -# 663| m663_4(unknown) = ^CallSideEffect : ~m659_4 -# 663| m663_5(unknown) = Chi : total:m659_4, partial:m663_4 -# 663| m663_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r663_1 -# 663| m663_7(unknown) = Chi : total:m663_5, partial:m663_6 -# 660| r660_1(glval) = FieldAddress[m_c] : r658_7 +# 663| mu663_4(unknown) = ^CallSideEffect : ~m? +# 663| mu663_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r663_1 +# 660| r660_1(glval) = FieldAddress[m_c] : r658_6 # 660| r660_2(char) = Constant[3] : -# 660| m660_3(char) = Store[?] : &:r660_1, r660_2 -# 660| m660_4(unknown) = Chi : total:m663_7, partial:m660_3 -# 661| r661_1(glval) = FieldAddress[m_e] : r658_7 +# 660| mu660_3(char) = Store[?] : &:r660_1, r660_2 +# 661| r661_1(glval) = FieldAddress[m_e] : r658_6 # 661| r661_2(void *) = Constant[0] : -# 661| m661_3(void *) = Store[?] : &:r661_1, r661_2 -# 661| m661_4(unknown) = Chi : total:m660_4, partial:m661_3 -# 662| r662_1(glval) = FieldAddress[m_f] : r658_7 +# 661| mu661_3(void *) = Store[?] : &:r661_1, r661_2 +# 662| r662_1(glval) = FieldAddress[m_f] : r658_6 # 662| r662_2(glval) = FunctionAddress[String] : # 662| r662_3(glval) = StringConstant["test"] : # 662| r662_4(char *) = Convert : r662_3 # 662| v662_5(void) = Call[String] : func:r662_2, this:r662_1, 0:r662_4 -# 662| m662_6(unknown) = ^CallSideEffect : ~m661_4 -# 662| m662_7(unknown) = Chi : total:m661_4, partial:m662_6 -# 662| v662_8(void) = ^BufferReadSideEffect[0] : &:r662_4, ~m658_3 -# 662| m662_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r662_1 -# 662| m662_10(unknown) = Chi : total:m662_7, partial:m662_9 +# 662| mu662_6(unknown) = ^CallSideEffect : ~m? +# 662| v662_7(void) = ^BufferReadSideEffect[0] : &:r662_4, ~m? +# 662| mu662_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r662_1 # 664| v664_1(void) = NoOp : -# 658| v658_10(void) = ReturnIndirection[#this] : &:r658_7, ~m662_10 -# 658| v658_11(void) = ReturnVoid : -# 658| v658_12(void) = AliasedUse : ~m662_10 -# 658| v658_13(void) = ExitFunction : +# 658| v658_8(void) = ReturnIndirection[#this] : &:r658_6, ~m? +# 658| v658_9(void) = ReturnVoid : +# 658| v658_10(void) = AliasedUse : ~m? +# 658| v658_11(void) = ExitFunction : # 675| int DerefReference(int&) # 675| Block 0 # 675| v675_1(void) = EnterFunction : -# 675| m675_2(unknown) = AliasedDefinition : -# 675| m675_3(unknown) = InitializeNonLocal : -# 675| m675_4(unknown) = Chi : total:m675_2, partial:m675_3 -# 675| r675_5(glval) = VariableAddress[r] : -# 675| m675_6(int &) = InitializeParameter[r] : &:r675_5 -# 675| r675_7(int &) = Load[r] : &:r675_5, m675_6 -# 675| m675_8(unknown) = InitializeIndirection[r] : &:r675_7 +# 675| mu675_2(unknown) = AliasedDefinition : +# 675| mu675_3(unknown) = InitializeNonLocal : +# 675| r675_4(glval) = VariableAddress[r] : +# 675| m675_5(int &) = InitializeParameter[r] : &:r675_4 +# 675| r675_6(int &) = Load[r] : &:r675_4, m675_5 +# 675| mu675_7(unknown) = InitializeIndirection[r] : &:r675_6 # 676| r676_1(glval) = VariableAddress[#return] : # 676| r676_2(glval) = VariableAddress[r] : -# 676| r676_3(int &) = Load[r] : &:r676_2, m675_6 -# 676| r676_4(int) = Load[?] : &:r676_3, ~m675_8 +# 676| r676_3(int &) = Load[r] : &:r676_2, m675_5 +# 676| r676_4(int) = Load[?] : &:r676_3, ~m? # 676| m676_5(int) = Store[#return] : &:r676_1, r676_4 -# 675| v675_9(void) = ReturnIndirection[r] : &:r675_7, m675_8 -# 675| r675_10(glval) = VariableAddress[#return] : -# 675| v675_11(void) = ReturnValue : &:r675_10, m676_5 -# 675| v675_12(void) = AliasedUse : m675_3 -# 675| v675_13(void) = ExitFunction : +# 675| v675_8(void) = ReturnIndirection[r] : &:r675_6, ~m? +# 675| r675_9(glval) = VariableAddress[#return] : +# 675| v675_10(void) = ReturnValue : &:r675_9, m676_5 +# 675| v675_11(void) = AliasedUse : ~m? +# 675| v675_12(void) = ExitFunction : # 679| int& TakeReference() # 679| Block 0 # 679| v679_1(void) = EnterFunction : -# 679| m679_2(unknown) = AliasedDefinition : -# 679| m679_3(unknown) = InitializeNonLocal : -# 679| m679_4(unknown) = Chi : total:m679_2, partial:m679_3 +# 679| mu679_2(unknown) = AliasedDefinition : +# 679| mu679_3(unknown) = InitializeNonLocal : # 680| r680_1(glval) = VariableAddress[#return] : # 680| r680_2(glval) = VariableAddress[g] : # 680| r680_3(int &) = CopyValue : r680_2 # 680| m680_4(int &) = Store[#return] : &:r680_1, r680_3 -# 679| r679_5(glval) = VariableAddress[#return] : -# 679| v679_6(void) = ReturnValue : &:r679_5, m680_4 -# 679| v679_7(void) = AliasedUse : m679_3 -# 679| v679_8(void) = ExitFunction : +# 679| r679_4(glval) = VariableAddress[#return] : +# 679| v679_5(void) = ReturnValue : &:r679_4, m680_4 +# 679| v679_6(void) = AliasedUse : ~m? +# 679| v679_7(void) = ExitFunction : # 685| void InitReference(int) # 685| Block 0 # 685| v685_1(void) = EnterFunction : -# 685| m685_2(unknown) = AliasedDefinition : -# 685| m685_3(unknown) = InitializeNonLocal : -# 685| m685_4(unknown) = Chi : total:m685_2, partial:m685_3 -# 685| r685_5(glval) = VariableAddress[x] : -# 685| m685_6(int) = InitializeParameter[x] : &:r685_5 +# 685| mu685_2(unknown) = AliasedDefinition : +# 685| mu685_3(unknown) = InitializeNonLocal : +# 685| r685_4(glval) = VariableAddress[x] : +# 685| mu685_5(int) = InitializeParameter[x] : &:r685_4 # 686| r686_1(glval) = VariableAddress[r] : # 686| r686_2(glval) = VariableAddress[x] : # 686| r686_3(int &) = CopyValue : r686_2 @@ -7179,25 +6618,23 @@ ir.cpp: # 688| r688_1(glval) = VariableAddress[r3] : # 688| r688_2(glval) = FunctionAddress[ReturnReference] : # 688| r688_3(String &) = Call[ReturnReference] : func:r688_2 -# 688| m688_4(unknown) = ^CallSideEffect : ~m685_4 -# 688| m688_5(unknown) = Chi : total:m685_4, partial:m688_4 -# 688| r688_6(glval) = CopyValue : r688_3 -# 688| r688_7(glval) = Convert : r688_6 -# 688| r688_8(String &) = CopyValue : r688_7 -# 688| m688_9(String &) = Store[r3] : &:r688_1, r688_8 +# 688| mu688_4(unknown) = ^CallSideEffect : ~m? +# 688| r688_5(glval) = CopyValue : r688_3 +# 688| r688_6(glval) = Convert : r688_5 +# 688| r688_7(String &) = CopyValue : r688_6 +# 688| m688_8(String &) = Store[r3] : &:r688_1, r688_7 # 689| v689_1(void) = NoOp : -# 685| v685_7(void) = ReturnVoid : -# 685| v685_8(void) = AliasedUse : ~m688_5 -# 685| v685_9(void) = ExitFunction : +# 685| v685_6(void) = ReturnVoid : +# 685| v685_7(void) = AliasedUse : ~m? +# 685| v685_8(void) = ExitFunction : # 691| void ArrayReferences() # 691| Block 0 # 691| v691_1(void) = EnterFunction : -# 691| m691_2(unknown) = AliasedDefinition : -# 691| m691_3(unknown) = InitializeNonLocal : -# 691| m691_4(unknown) = Chi : total:m691_2, partial:m691_3 +# 691| mu691_2(unknown) = AliasedDefinition : +# 691| mu691_3(unknown) = InitializeNonLocal : # 692| r692_1(glval) = VariableAddress[a] : -# 692| m692_2(int[10]) = Uninitialized[a] : &:r692_1 +# 692| mu692_2(int[10]) = Uninitialized[a] : &:r692_1 # 693| r693_1(glval) = VariableAddress[ra] : # 693| r693_2(glval) = VariableAddress[a] : # 693| r693_3(int(&)[10]) = CopyValue : r693_2 @@ -7209,19 +6646,18 @@ ir.cpp: # 694| r694_5(int *) = Convert : r694_4 # 694| r694_6(int) = Constant[5] : # 694| r694_7(glval) = PointerAdd[4] : r694_5, r694_6 -# 694| r694_8(int) = Load[?] : &:r694_7, ~m692_2 +# 694| r694_8(int) = Load[?] : &:r694_7, ~m? # 694| m694_9(int) = Store[x] : &:r694_1, r694_8 # 695| v695_1(void) = NoOp : -# 691| v691_5(void) = ReturnVoid : -# 691| v691_6(void) = AliasedUse : m691_3 -# 691| v691_7(void) = ExitFunction : +# 691| v691_4(void) = ReturnVoid : +# 691| v691_5(void) = AliasedUse : ~m? +# 691| v691_6(void) = ExitFunction : # 697| void FunctionReferences() # 697| Block 0 # 697| v697_1(void) = EnterFunction : -# 697| m697_2(unknown) = AliasedDefinition : -# 697| m697_3(unknown) = InitializeNonLocal : -# 697| m697_4(unknown) = Chi : total:m697_2, partial:m697_3 +# 697| mu697_2(unknown) = AliasedDefinition : +# 697| mu697_3(unknown) = InitializeNonLocal : # 698| r698_1(glval<..(&)(..)>) = VariableAddress[rfn] : # 698| r698_2(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : # 698| r698_3(..(&)(..)) = CopyValue : r698_2 @@ -7236,28 +6672,26 @@ ir.cpp: # 700| r700_3(..(*)(..)) = CopyValue : r700_2 # 700| r700_4(int) = Constant[5] : # 700| r700_5(int) = Call[?] : func:r700_3, 0:r700_4 -# 700| m700_6(unknown) = ^CallSideEffect : ~m697_4 -# 700| m700_7(unknown) = Chi : total:m697_4, partial:m700_6 +# 700| mu700_6(unknown) = ^CallSideEffect : ~m? # 701| v701_1(void) = NoOp : -# 697| v697_5(void) = ReturnVoid : -# 697| v697_6(void) = AliasedUse : ~m700_7 -# 697| v697_7(void) = ExitFunction : +# 697| v697_4(void) = ReturnVoid : +# 697| v697_5(void) = AliasedUse : ~m? +# 697| v697_6(void) = ExitFunction : # 704| int min(int, int) # 704| Block 0 # 704| v704_1(void) = EnterFunction : -# 704| m704_2(unknown) = AliasedDefinition : -# 704| m704_3(unknown) = InitializeNonLocal : -# 704| m704_4(unknown) = Chi : total:m704_2, partial:m704_3 -# 704| r704_5(glval) = VariableAddress[x] : -# 704| m704_6(int) = InitializeParameter[x] : &:r704_5 -# 704| r704_7(glval) = VariableAddress[y] : -# 704| m704_8(int) = InitializeParameter[y] : &:r704_7 +# 704| mu704_2(unknown) = AliasedDefinition : +# 704| mu704_3(unknown) = InitializeNonLocal : +# 704| r704_4(glval) = VariableAddress[x] : +# 704| m704_5(int) = InitializeParameter[x] : &:r704_4 +# 704| r704_6(glval) = VariableAddress[y] : +# 704| m704_7(int) = InitializeParameter[y] : &:r704_6 # 705| r705_1(glval) = VariableAddress[#return] : # 705| r705_2(glval) = VariableAddress[x] : -# 705| r705_3(int) = Load[x] : &:r705_2, m704_6 +# 705| r705_3(int) = Load[x] : &:r705_2, m704_5 # 705| r705_4(glval) = VariableAddress[y] : -# 705| r705_5(int) = Load[y] : &:r705_4, m704_8 +# 705| r705_5(int) = Load[y] : &:r705_4, m704_7 # 705| r705_6(bool) = CompareLT : r705_3, r705_5 # 705| v705_7(void) = ConditionalBranch : r705_6 #-----| False -> Block 3 @@ -7268,21 +6702,21 @@ ir.cpp: # 705| r705_9(glval) = VariableAddress[#temp705:10] : # 705| r705_10(int) = Load[#temp705:10] : &:r705_9, m705_8 # 705| m705_11(int) = Store[#return] : &:r705_1, r705_10 -# 704| r704_9(glval) = VariableAddress[#return] : -# 704| v704_10(void) = ReturnValue : &:r704_9, m705_11 -# 704| v704_11(void) = AliasedUse : m704_3 -# 704| v704_12(void) = ExitFunction : +# 704| r704_8(glval) = VariableAddress[#return] : +# 704| v704_9(void) = ReturnValue : &:r704_8, m705_11 +# 704| v704_10(void) = AliasedUse : ~m? +# 704| v704_11(void) = ExitFunction : # 705| Block 2 # 705| r705_12(glval) = VariableAddress[x] : -# 705| r705_13(int) = Load[x] : &:r705_12, m704_6 +# 705| r705_13(int) = Load[x] : &:r705_12, m704_5 # 705| r705_14(glval) = VariableAddress[#temp705:10] : # 705| m705_15(int) = Store[#temp705:10] : &:r705_14, r705_13 #-----| Goto -> Block 1 # 705| Block 3 # 705| r705_16(glval) = VariableAddress[y] : -# 705| r705_17(int) = Load[y] : &:r705_16, m704_8 +# 705| r705_17(int) = Load[y] : &:r705_16, m704_7 # 705| r705_18(glval) = VariableAddress[#temp705:10] : # 705| m705_19(int) = Store[#temp705:10] : &:r705_18, r705_17 #-----| Goto -> Block 1 @@ -7290,100 +6724,91 @@ ir.cpp: # 708| int CallMin(int, int) # 708| Block 0 # 708| v708_1(void) = EnterFunction : -# 708| m708_2(unknown) = AliasedDefinition : -# 708| m708_3(unknown) = InitializeNonLocal : -# 708| m708_4(unknown) = Chi : total:m708_2, partial:m708_3 -# 708| r708_5(glval) = VariableAddress[x] : -# 708| m708_6(int) = InitializeParameter[x] : &:r708_5 -# 708| r708_7(glval) = VariableAddress[y] : -# 708| m708_8(int) = InitializeParameter[y] : &:r708_7 +# 708| mu708_2(unknown) = AliasedDefinition : +# 708| mu708_3(unknown) = InitializeNonLocal : +# 708| r708_4(glval) = VariableAddress[x] : +# 708| m708_5(int) = InitializeParameter[x] : &:r708_4 +# 708| r708_6(glval) = VariableAddress[y] : +# 708| m708_7(int) = InitializeParameter[y] : &:r708_6 # 709| r709_1(glval) = VariableAddress[#return] : # 709| r709_2(glval) = FunctionAddress[min] : # 709| r709_3(glval) = VariableAddress[x] : -# 709| r709_4(int) = Load[x] : &:r709_3, m708_6 +# 709| r709_4(int) = Load[x] : &:r709_3, m708_5 # 709| r709_5(glval) = VariableAddress[y] : -# 709| r709_6(int) = Load[y] : &:r709_5, m708_8 +# 709| r709_6(int) = Load[y] : &:r709_5, m708_7 # 709| r709_7(int) = Call[min] : func:r709_2, 0:r709_4, 1:r709_6 -# 709| m709_8(unknown) = ^CallSideEffect : ~m708_4 -# 709| m709_9(unknown) = Chi : total:m708_4, partial:m709_8 -# 709| m709_10(int) = Store[#return] : &:r709_1, r709_7 -# 708| r708_9(glval) = VariableAddress[#return] : -# 708| v708_10(void) = ReturnValue : &:r708_9, m709_10 -# 708| v708_11(void) = AliasedUse : ~m709_9 -# 708| v708_12(void) = ExitFunction : +# 709| mu709_8(unknown) = ^CallSideEffect : ~m? +# 709| m709_9(int) = Store[#return] : &:r709_1, r709_7 +# 708| r708_8(glval) = VariableAddress[#return] : +# 708| v708_9(void) = ReturnValue : &:r708_8, m709_9 +# 708| v708_10(void) = AliasedUse : ~m? +# 708| v708_11(void) = ExitFunction : # 715| long Outer::Func(void*, char) # 715| Block 0 # 715| v715_1(void) = EnterFunction : -# 715| m715_2(unknown) = AliasedDefinition : -# 715| m715_3(unknown) = InitializeNonLocal : -# 715| m715_4(unknown) = Chi : total:m715_2, partial:m715_3 -# 715| r715_5(glval) = VariableAddress[x] : -# 715| m715_6(void *) = InitializeParameter[x] : &:r715_5 -# 715| r715_7(void *) = Load[x] : &:r715_5, m715_6 -# 715| m715_8(unknown) = InitializeIndirection[x] : &:r715_7 -# 715| r715_9(glval) = VariableAddress[y] : -# 715| m715_10(char) = InitializeParameter[y] : &:r715_9 +# 715| mu715_2(unknown) = AliasedDefinition : +# 715| mu715_3(unknown) = InitializeNonLocal : +# 715| r715_4(glval) = VariableAddress[x] : +# 715| m715_5(void *) = InitializeParameter[x] : &:r715_4 +# 715| r715_6(void *) = Load[x] : &:r715_4, m715_5 +# 715| mu715_7(unknown) = InitializeIndirection[x] : &:r715_6 +# 715| r715_8(glval) = VariableAddress[y] : +# 715| m715_9(char) = InitializeParameter[y] : &:r715_8 # 716| r716_1(glval) = VariableAddress[#return] : # 716| r716_2(glval) = VariableAddress[#temp716:12] : # 716| r716_3(long) = Constant[0] : # 716| m716_4(long) = Store[#temp716:12] : &:r716_2, r716_3 # 716| r716_5(long) = Load[#temp716:12] : &:r716_2, m716_4 # 716| m716_6(long) = Store[#return] : &:r716_1, r716_5 -# 715| v715_11(void) = ReturnIndirection[x] : &:r715_7, m715_8 -# 715| r715_12(glval) = VariableAddress[#return] : -# 715| v715_13(void) = ReturnValue : &:r715_12, m716_6 -# 715| v715_14(void) = AliasedUse : m715_3 -# 715| v715_15(void) = ExitFunction : +# 715| v715_10(void) = ReturnIndirection[x] : &:r715_6, ~m? +# 715| r715_11(glval) = VariableAddress[#return] : +# 715| v715_12(void) = ReturnValue : &:r715_11, m716_6 +# 715| v715_13(void) = AliasedUse : ~m? +# 715| v715_14(void) = ExitFunction : # 720| double CallNestedTemplateFunc() # 720| Block 0 # 720| v720_1(void) = EnterFunction : -# 720| m720_2(unknown) = AliasedDefinition : -# 720| m720_3(unknown) = InitializeNonLocal : -# 720| m720_4(unknown) = Chi : total:m720_2, partial:m720_3 +# 720| mu720_2(unknown) = AliasedDefinition : +# 720| mu720_3(unknown) = InitializeNonLocal : # 721| r721_1(glval) = VariableAddress[#return] : # 721| r721_2(glval) = FunctionAddress[Func] : # 721| r721_3(void *) = Constant[0] : # 721| r721_4(char) = Constant[111] : # 721| r721_5(long) = Call[Func] : func:r721_2, 0:r721_3, 1:r721_4 -# 721| m721_6(unknown) = ^CallSideEffect : ~m720_4 -# 721| m721_7(unknown) = Chi : total:m720_4, partial:m721_6 -# 721| v721_8(void) = ^BufferReadSideEffect[0] : &:r721_3, ~m721_7 -# 721| m721_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r721_3 -# 721| m721_10(unknown) = Chi : total:m721_7, partial:m721_9 -# 721| r721_11(double) = Convert : r721_5 -# 721| m721_12(double) = Store[#return] : &:r721_1, r721_11 -# 720| r720_5(glval) = VariableAddress[#return] : -# 720| v720_6(void) = ReturnValue : &:r720_5, m721_12 -# 720| v720_7(void) = AliasedUse : ~m721_10 -# 720| v720_8(void) = ExitFunction : +# 721| mu721_6(unknown) = ^CallSideEffect : ~m? +# 721| v721_7(void) = ^BufferReadSideEffect[0] : &:r721_3, ~m? +# 721| mu721_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r721_3 +# 721| r721_9(double) = Convert : r721_5 +# 721| m721_10(double) = Store[#return] : &:r721_1, r721_9 +# 720| r720_4(glval) = VariableAddress[#return] : +# 720| v720_5(void) = ReturnValue : &:r720_4, m721_10 +# 720| v720_6(void) = AliasedUse : ~m? +# 720| v720_7(void) = ExitFunction : # 724| void TryCatch(bool) # 724| Block 0 # 724| v724_1(void) = EnterFunction : -# 724| m724_2(unknown) = AliasedDefinition : -# 724| m724_3(unknown) = InitializeNonLocal : -# 724| m724_4(unknown) = Chi : total:m724_2, partial:m724_3 -# 724| r724_5(glval) = VariableAddress[b] : -# 724| m724_6(bool) = InitializeParameter[b] : &:r724_5 +# 724| mu724_2(unknown) = AliasedDefinition : +# 724| mu724_3(unknown) = InitializeNonLocal : +# 724| r724_4(glval) = VariableAddress[b] : +# 724| m724_5(bool) = InitializeParameter[b] : &:r724_4 # 726| r726_1(glval) = VariableAddress[x] : # 726| r726_2(int) = Constant[5] : # 726| m726_3(int) = Store[x] : &:r726_1, r726_2 # 727| r727_1(glval) = VariableAddress[b] : -# 727| r727_2(bool) = Load[b] : &:r727_1, m724_6 +# 727| r727_2(bool) = Load[b] : &:r727_1, m724_5 # 727| v727_3(void) = ConditionalBranch : r727_2 #-----| False -> Block 4 #-----| True -> Block 3 # 724| Block 1 -# 724| m724_7(unknown) = Phi : from 2:~m724_10, from 11:~m724_4 -# 724| v724_8(void) = AliasedUse : ~m724_7 -# 724| v724_9(void) = ExitFunction : +# 724| v724_6(void) = AliasedUse : ~m? +# 724| v724_7(void) = ExitFunction : # 724| Block 2 -# 724| m724_10(unknown) = Phi : from 7:~m736_12, from 10:~m724_4 -# 724| v724_11(void) = Unwind : +# 724| v724_8(void) = Unwind : #-----| Goto -> Block 1 # 728| Block 3 @@ -7392,7 +6817,7 @@ ir.cpp: # 728| r728_3(char *) = Convert : r728_2 # 728| m728_4(char *) = Store[#throw728:7] : &:r728_1, r728_3 # 728| v728_5(void) = ThrowValue : &:r728_1, m728_4 -#-----| C++ Exception -> Block 6 +#-----| C++ Exception -> Block 10 # 730| Block 4 # 730| r730_1(glval) = VariableAddress[x] : @@ -7400,668 +6825,599 @@ ir.cpp: # 730| r730_3(int) = Constant[2] : # 730| r730_4(bool) = CompareLT : r730_2, r730_3 # 730| v730_5(void) = ConditionalBranch : r730_4 -#-----| False -> Block 5 -#-----| True -> Block 12 +#-----| False -> Block 9 +#-----| True -> Block 5 + +# 731| Block 5 +# 731| r731_1(glval) = VariableAddress[b] : +# 731| r731_2(bool) = Load[b] : &:r731_1, m724_5 +# 731| v731_3(void) = ConditionalBranch : r731_2 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 731| Block 6 +# 731| r731_4(int) = Constant[7] : +# 731| r731_5(glval) = VariableAddress[#temp731:11] : +# 731| m731_6(int) = Store[#temp731:11] : &:r731_5, r731_4 +# 731| r731_7(glval) = VariableAddress[#temp731:11] : +# 731| r731_8(int) = Load[#temp731:11] : &:r731_7, m731_6 +# 731| r731_9(glval) = VariableAddress[x] : +# 731| m731_10(int) = Store[x] : &:r731_9, r731_8 +#-----| Goto -> Block 9 + +# 731| Block 7 +# 731| r731_11(glval) = VariableAddress[#throw731:19] : +# 731| mu731_12(String) = Uninitialized[#throw731:19] : &:r731_11 +# 731| r731_13(glval) = FunctionAddress[String] : +# 731| r731_14(glval) = StringConstant["String object"] : +# 731| r731_15(char *) = Convert : r731_14 +# 731| v731_16(void) = Call[String] : func:r731_13, this:r731_11, 0:r731_15 +# 731| mu731_17(unknown) = ^CallSideEffect : ~m? +# 731| v731_18(void) = ^BufferReadSideEffect[0] : &:r731_15, ~m? +# 731| mu731_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r731_11 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 8 + +# 731| Block 8 +# 731| v731_20(void) = ThrowValue : &:r731_11, ~m? +#-----| C++ Exception -> Block 10 -# 733| Block 5 +# 733| Block 9 # 733| r733_1(int) = Constant[7] : # 733| r733_2(glval) = VariableAddress[x] : # 733| m733_3(int) = Store[x] : &:r733_2, r733_1 -#-----| Goto -> Block 11 +#-----| Goto -> Block 15 -# 735| Block 6 +# 735| Block 10 # 735| v735_1(void) = CatchByType[const char *] : -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 7 +#-----| C++ Exception -> Block 12 +#-----| Goto -> Block 11 -# 735| Block 7 +# 735| Block 11 # 735| r735_2(glval) = VariableAddress[s] : # 735| m735_3(char *) = InitializeParameter[s] : &:r735_2 # 735| r735_4(char *) = Load[s] : &:r735_2, m735_3 -# 735| m735_5(unknown) = InitializeIndirection[s] : &:r735_4 -# 735| m735_6(unknown) = Chi : total:m724_4, partial:m735_5 +# 735| mu735_5(unknown) = InitializeIndirection[s] : &:r735_4 # 736| r736_1(glval) = VariableAddress[#throw736:5] : -# 736| m736_2(String) = Uninitialized[#throw736:5] : &:r736_1 -# 736| m736_3(unknown) = Chi : total:m735_6, partial:m736_2 -# 736| r736_4(glval) = FunctionAddress[String] : -# 736| r736_5(glval) = VariableAddress[s] : -# 736| r736_6(char *) = Load[s] : &:r736_5, m735_3 -# 736| v736_7(void) = Call[String] : func:r736_4, this:r736_1, 0:r736_6 -# 736| m736_8(unknown) = ^CallSideEffect : ~m736_3 -# 736| m736_9(unknown) = Chi : total:m736_3, partial:m736_8 -# 736| v736_10(void) = ^BufferReadSideEffect[0] : &:r736_6, ~m736_9 -# 736| m736_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r736_1 -# 736| m736_12(unknown) = Chi : total:m736_9, partial:m736_11 -# 736| v736_13(void) = ThrowValue : &:r736_1, ~m736_12 +# 736| mu736_2(String) = Uninitialized[#throw736:5] : &:r736_1 +# 736| r736_3(glval) = FunctionAddress[String] : +# 736| r736_4(glval) = VariableAddress[s] : +# 736| r736_5(char *) = Load[s] : &:r736_4, m735_3 +# 736| v736_6(void) = Call[String] : func:r736_3, this:r736_1, 0:r736_5 +# 736| mu736_7(unknown) = ^CallSideEffect : ~m? +# 736| v736_8(void) = ^BufferReadSideEffect[0] : &:r736_5, ~m? +# 736| mu736_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r736_1 +# 736| v736_10(void) = ThrowValue : &:r736_1, ~m? #-----| C++ Exception -> Block 2 -# 738| Block 8 +# 738| Block 12 # 738| v738_1(void) = CatchByType[const String &] : -#-----| C++ Exception -> Block 10 -#-----| Goto -> Block 9 +#-----| C++ Exception -> Block 14 +#-----| Goto -> Block 13 -# 738| Block 9 +# 738| Block 13 # 738| r738_2(glval) = VariableAddress[e] : # 738| m738_3(String &) = InitializeParameter[e] : &:r738_2 # 738| r738_4(String &) = Load[e] : &:r738_2, m738_3 -# 738| m738_5(unknown) = InitializeIndirection[e] : &:r738_4 +# 738| mu738_5(unknown) = InitializeIndirection[e] : &:r738_4 # 738| v738_6(void) = NoOp : -#-----| Goto -> Block 11 +#-----| Goto -> Block 15 -# 740| Block 10 +# 740| Block 14 # 740| v740_1(void) = CatchAny : # 741| v741_1(void) = ReThrow : #-----| C++ Exception -> Block 2 -# 743| Block 11 -# 743| v743_1(void) = NoOp : -# 724| v724_12(void) = ReturnVoid : +# 743| Block 15 +# 743| v743_1(void) = NoOp : +# 724| v724_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 724| Block 12 -# 724| v724_13(void) = Unreached : - # 745| Base& Base::operator=(Base const&) # 745| Block 0 # 745| v745_1(void) = EnterFunction : -# 745| m745_2(unknown) = AliasedDefinition : -# 745| m745_3(unknown) = InitializeNonLocal : -# 745| m745_4(unknown) = Chi : total:m745_2, partial:m745_3 -# 745| r745_5(glval) = VariableAddress[#this] : -# 745| m745_6(glval) = InitializeParameter[#this] : &:r745_5 -# 745| r745_7(glval) = Load[#this] : &:r745_5, m745_6 -# 745| m745_8(Base) = InitializeIndirection[#this] : &:r745_7 -# 745| m745_9(unknown) = Chi : total:m745_4, partial:m745_8 +# 745| mu745_2(unknown) = AliasedDefinition : +# 745| mu745_3(unknown) = InitializeNonLocal : +# 745| r745_4(glval) = VariableAddress[#this] : +# 745| m745_5(glval) = InitializeParameter[#this] : &:r745_4 +# 745| r745_6(glval) = Load[#this] : &:r745_4, m745_5 +# 745| mu745_7(Base) = InitializeIndirection[#this] : &:r745_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(Base &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Base &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -#-----| m0_5(unknown) = Chi : total:m745_9, partial:m0_4 -# 745| r745_10(glval) = VariableAddress[#this] : -# 745| r745_11(Base *) = Load[#this] : &:r745_10, m745_6 -# 745| r745_12(glval) = FieldAddress[base_s] : r745_11 -# 745| r745_13(String *) = CopyValue : r745_12 -# 745| r745_14(glval) = FunctionAddress[operator=] : -# 745| r745_15(glval) = VariableAddress[(unnamed parameter 0)] : -# 745| r745_16(Base &) = Load[(unnamed parameter 0)] : &:r745_15, m0_2 -#-----| r0_6(glval) = CopyValue : r745_16 -# 745| r745_17(glval) = FieldAddress[base_s] : r0_6 -#-----| r0_7(String &) = CopyValue : r745_17 -# 745| r745_18(String &) = Call[operator=] : func:r745_14, this:r745_13, 0:r0_7 -# 745| m745_19(unknown) = ^CallSideEffect : ~m0_5 -# 745| m745_20(unknown) = Chi : total:m0_5, partial:m745_19 -# 745| v745_21(void) = ^IndirectReadSideEffect[-1] : &:r745_13, ~m745_20 -#-----| v0_8(void) = ^BufferReadSideEffect[0] : &:r0_7, ~m745_20 -# 745| m745_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r745_13 -# 745| m745_23(unknown) = Chi : total:m745_20, partial:m745_22 -#-----| r0_9(glval) = CopyValue : r745_18 -#-----| r0_10(glval) = VariableAddress[#return] : -#-----| r0_11(glval) = VariableAddress[#this] : -#-----| r0_12(Base *) = Load[#this] : &:r0_11, m745_6 -#-----| r0_13(glval) = CopyValue : r0_12 -#-----| r0_14(Base &) = CopyValue : r0_13 -#-----| m0_15(Base &) = Store[#return] : &:r0_10, r0_14 -# 745| v745_24(void) = ReturnIndirection[#this] : &:r745_7, ~m745_23 -#-----| v0_16(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m745_23 -# 745| r745_25(glval) = VariableAddress[#return] : -# 745| v745_26(void) = ReturnValue : &:r745_25, m0_15 -# 745| v745_27(void) = AliasedUse : ~m745_23 -# 745| v745_28(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 745| r745_8(glval) = VariableAddress[#this] : +# 745| r745_9(Base *) = Load[#this] : &:r745_8, m745_5 +# 745| r745_10(glval) = FieldAddress[base_s] : r745_9 +# 745| r745_11(String *) = CopyValue : r745_10 +# 745| r745_12(glval) = FunctionAddress[operator=] : +# 745| r745_13(glval) = VariableAddress[(unnamed parameter 0)] : +# 745| r745_14(Base &) = Load[(unnamed parameter 0)] : &:r745_13, m0_2 +#-----| r0_5(glval) = CopyValue : r745_14 +# 745| r745_15(glval) = FieldAddress[base_s] : r0_5 +#-----| r0_6(String &) = CopyValue : r745_15 +# 745| r745_16(String &) = Call[operator=] : func:r745_12, this:r745_11, 0:r0_6 +# 745| mu745_17(unknown) = ^CallSideEffect : ~m? +# 745| v745_18(void) = ^IndirectReadSideEffect[-1] : &:r745_11, ~m? +#-----| v0_7(void) = ^BufferReadSideEffect[0] : &:r0_6, ~m? +# 745| mu745_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r745_11 +#-----| r0_8(glval) = CopyValue : r745_16 +#-----| r0_9(glval) = VariableAddress[#return] : +#-----| r0_10(glval) = VariableAddress[#this] : +#-----| r0_11(Base *) = Load[#this] : &:r0_10, m745_5 +#-----| r0_12(glval) = CopyValue : r0_11 +#-----| r0_13(Base &) = CopyValue : r0_12 +#-----| m0_14(Base &) = Store[#return] : &:r0_9, r0_13 +# 745| v745_20(void) = ReturnIndirection[#this] : &:r745_6, ~m? +#-----| v0_15(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 745| r745_21(glval) = VariableAddress[#return] : +# 745| v745_22(void) = ReturnValue : &:r745_21, m0_14 +# 745| v745_23(void) = AliasedUse : ~m? +# 745| v745_24(void) = ExitFunction : # 745| void Base::Base(Base const&) # 745| Block 0 -# 745| v745_1(void) = EnterFunction : -# 745| m745_2(unknown) = AliasedDefinition : -# 745| m745_3(unknown) = InitializeNonLocal : -# 745| m745_4(unknown) = Chi : total:m745_2, partial:m745_3 -# 745| r745_5(glval) = VariableAddress[#this] : -# 745| m745_6(glval) = InitializeParameter[#this] : &:r745_5 -# 745| r745_7(glval) = Load[#this] : &:r745_5, m745_6 -# 745| m745_8(Base) = InitializeIndirection[#this] : &:r745_7 -# 745| m745_9(unknown) = Chi : total:m745_4, partial:m745_8 -#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : -#-----| m0_2(Base &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 -#-----| r0_3(Base &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 745| r745_10(glval) = FieldAddress[base_s] : r745_7 -# 745| r745_11(glval) = FunctionAddress[String] : -# 745| v745_12(void) = Call[String] : func:r745_11, this:r745_10 -# 745| m745_13(unknown) = ^CallSideEffect : ~m745_9 -# 745| m745_14(unknown) = Chi : total:m745_9, partial:m745_13 -# 745| m745_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r745_10 -# 745| m745_16(unknown) = Chi : total:m745_14, partial:m745_15 -# 745| v745_17(void) = NoOp : -# 745| v745_18(void) = ReturnIndirection[#this] : &:r745_7, ~m745_16 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 745| v745_19(void) = ReturnVoid : -# 745| v745_20(void) = AliasedUse : ~m745_16 -# 745| v745_21(void) = ExitFunction : +# 745| v745_1(void) = EnterFunction : +# 745| mu745_2(unknown) = AliasedDefinition : +# 745| mu745_3(unknown) = InitializeNonLocal : +# 745| r745_4(glval) = VariableAddress[#this] : +# 745| m745_5(glval) = InitializeParameter[#this] : &:r745_4 +# 745| r745_6(glval) = Load[#this] : &:r745_4, m745_5 +# 745| mu745_7(Base) = InitializeIndirection[#this] : &:r745_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| m0_2(Base &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(Base &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 745| r745_8(glval) = FieldAddress[base_s] : r745_6 +# 745| r745_9(glval) = FunctionAddress[String] : +# 745| v745_10(void) = Call[String] : func:r745_9, this:r745_8 +# 745| mu745_11(unknown) = ^CallSideEffect : ~m? +# 745| mu745_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r745_8 +# 745| v745_13(void) = NoOp : +# 745| v745_14(void) = ReturnIndirection[#this] : &:r745_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 745| v745_15(void) = ReturnVoid : +# 745| v745_16(void) = AliasedUse : ~m? +# 745| v745_17(void) = ExitFunction : # 748| void Base::Base() # 748| Block 0 -# 748| v748_1(void) = EnterFunction : -# 748| m748_2(unknown) = AliasedDefinition : -# 748| m748_3(unknown) = InitializeNonLocal : -# 748| m748_4(unknown) = Chi : total:m748_2, partial:m748_3 -# 748| r748_5(glval) = VariableAddress[#this] : -# 748| m748_6(glval) = InitializeParameter[#this] : &:r748_5 -# 748| r748_7(glval) = Load[#this] : &:r748_5, m748_6 -# 748| m748_8(Base) = InitializeIndirection[#this] : &:r748_7 -# 748| m748_9(unknown) = Chi : total:m748_4, partial:m748_8 -# 748| r748_10(glval) = FieldAddress[base_s] : r748_7 -# 748| r748_11(glval) = FunctionAddress[String] : -# 748| v748_12(void) = Call[String] : func:r748_11, this:r748_10 -# 748| m748_13(unknown) = ^CallSideEffect : ~m748_9 -# 748| m748_14(unknown) = Chi : total:m748_9, partial:m748_13 -# 748| m748_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r748_10 -# 748| m748_16(unknown) = Chi : total:m748_14, partial:m748_15 -# 749| v749_1(void) = NoOp : -# 748| v748_17(void) = ReturnIndirection[#this] : &:r748_7, ~m748_16 -# 748| v748_18(void) = ReturnVoid : -# 748| v748_19(void) = AliasedUse : ~m748_16 -# 748| v748_20(void) = ExitFunction : +# 748| v748_1(void) = EnterFunction : +# 748| mu748_2(unknown) = AliasedDefinition : +# 748| mu748_3(unknown) = InitializeNonLocal : +# 748| r748_4(glval) = VariableAddress[#this] : +# 748| m748_5(glval) = InitializeParameter[#this] : &:r748_4 +# 748| r748_6(glval) = Load[#this] : &:r748_4, m748_5 +# 748| mu748_7(Base) = InitializeIndirection[#this] : &:r748_6 +# 748| r748_8(glval) = FieldAddress[base_s] : r748_6 +# 748| r748_9(glval) = FunctionAddress[String] : +# 748| v748_10(void) = Call[String] : func:r748_9, this:r748_8 +# 748| mu748_11(unknown) = ^CallSideEffect : ~m? +# 748| mu748_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r748_8 +# 749| v749_1(void) = NoOp : +# 748| v748_13(void) = ReturnIndirection[#this] : &:r748_6, ~m? +# 748| v748_14(void) = ReturnVoid : +# 748| v748_15(void) = AliasedUse : ~m? +# 748| v748_16(void) = ExitFunction : # 750| void Base::~Base() # 750| Block 0 # 750| v750_1(void) = EnterFunction : -# 750| m750_2(unknown) = AliasedDefinition : -# 750| m750_3(unknown) = InitializeNonLocal : -# 750| m750_4(unknown) = Chi : total:m750_2, partial:m750_3 -# 750| r750_5(glval) = VariableAddress[#this] : -# 750| m750_6(glval) = InitializeParameter[#this] : &:r750_5 -# 750| r750_7(glval) = Load[#this] : &:r750_5, m750_6 -# 750| m750_8(Base) = InitializeIndirection[#this] : &:r750_7 -# 750| m750_9(unknown) = Chi : total:m750_4, partial:m750_8 +# 750| mu750_2(unknown) = AliasedDefinition : +# 750| mu750_3(unknown) = InitializeNonLocal : +# 750| r750_4(glval) = VariableAddress[#this] : +# 750| m750_5(glval) = InitializeParameter[#this] : &:r750_4 +# 750| r750_6(glval) = Load[#this] : &:r750_4, m750_5 +# 750| mu750_7(Base) = InitializeIndirection[#this] : &:r750_6 # 751| v751_1(void) = NoOp : -# 751| r751_2(glval) = FieldAddress[base_s] : r750_7 +# 751| r751_2(glval) = FieldAddress[base_s] : r750_6 # 751| r751_3(glval) = FunctionAddress[~String] : # 751| v751_4(void) = Call[~String] : func:r751_3, this:r751_2 -# 751| m751_5(unknown) = ^CallSideEffect : ~m750_9 -# 751| m751_6(unknown) = Chi : total:m750_9, partial:m751_5 -# 750| v750_10(void) = ReturnIndirection[#this] : &:r750_7, ~m751_6 -# 750| v750_11(void) = ReturnVoid : -# 750| v750_12(void) = AliasedUse : ~m751_6 -# 750| v750_13(void) = ExitFunction : +# 751| mu751_5(unknown) = ^CallSideEffect : ~m? +# 750| v750_8(void) = ReturnIndirection[#this] : &:r750_6, ~m? +# 750| v750_9(void) = ReturnVoid : +# 750| v750_10(void) = AliasedUse : ~m? +# 750| v750_11(void) = ExitFunction : # 754| Middle& Middle::operator=(Middle const&) # 754| Block 0 # 754| v754_1(void) = EnterFunction : -# 754| m754_2(unknown) = AliasedDefinition : -# 754| m754_3(unknown) = InitializeNonLocal : -# 754| m754_4(unknown) = Chi : total:m754_2, partial:m754_3 -# 754| r754_5(glval) = VariableAddress[#this] : -# 754| m754_6(glval) = InitializeParameter[#this] : &:r754_5 -# 754| r754_7(glval) = Load[#this] : &:r754_5, m754_6 -# 754| m754_8(Middle) = InitializeIndirection[#this] : &:r754_7 -# 754| m754_9(unknown) = Chi : total:m754_4, partial:m754_8 +# 754| mu754_2(unknown) = AliasedDefinition : +# 754| mu754_3(unknown) = InitializeNonLocal : +# 754| r754_4(glval) = VariableAddress[#this] : +# 754| m754_5(glval) = InitializeParameter[#this] : &:r754_4 +# 754| r754_6(glval) = Load[#this] : &:r754_4, m754_5 +# 754| mu754_7(Middle) = InitializeIndirection[#this] : &:r754_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(Middle &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Middle &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -#-----| m0_5(unknown) = Chi : total:m754_9, partial:m0_4 -# 754| r754_10(glval) = VariableAddress[#this] : -# 754| r754_11(Middle *) = Load[#this] : &:r754_10, m754_6 -#-----| r0_6(Base *) = ConvertToNonVirtualBase[Middle : Base] : r754_11 -# 754| r754_12(glval) = FunctionAddress[operator=] : -# 754| r754_13(glval) = VariableAddress[(unnamed parameter 0)] : -# 754| r754_14(Middle &) = Load[(unnamed parameter 0)] : &:r754_13, m0_2 -#-----| r0_7(glval) = CopyValue : r754_14 -# 754| r754_15(Middle *) = CopyValue : r0_7 -#-----| r0_8(Base *) = ConvertToNonVirtualBase[Middle : Base] : r754_15 -# 754| r754_16(glval) = CopyValue : r0_8 -#-----| r0_9(Base &) = CopyValue : r754_16 -# 754| r754_17(Base &) = Call[operator=] : func:r754_12, this:r0_6, 0:r0_9 -# 754| m754_18(unknown) = ^CallSideEffect : ~m0_5 -# 754| m754_19(unknown) = Chi : total:m0_5, partial:m754_18 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m754_19 -#-----| v0_11(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m754_19 -#-----| m0_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -#-----| m0_13(unknown) = Chi : total:m754_19, partial:m0_12 -#-----| r0_14(glval) = CopyValue : r754_17 -# 754| r754_20(glval) = VariableAddress[#this] : -# 754| r754_21(Middle *) = Load[#this] : &:r754_20, m754_6 -# 754| r754_22(glval) = FieldAddress[middle_s] : r754_21 -# 754| r754_23(String *) = CopyValue : r754_22 -# 754| r754_24(glval) = FunctionAddress[operator=] : -# 754| r754_25(glval) = VariableAddress[(unnamed parameter 0)] : -# 754| r754_26(Middle &) = Load[(unnamed parameter 0)] : &:r754_25, m0_2 -#-----| r0_15(glval) = CopyValue : r754_26 -# 754| r754_27(glval) = FieldAddress[middle_s] : r0_15 -#-----| r0_16(String &) = CopyValue : r754_27 -# 754| r754_28(String &) = Call[operator=] : func:r754_24, this:r754_23, 0:r0_16 -# 754| m754_29(unknown) = ^CallSideEffect : ~m0_13 -# 754| m754_30(unknown) = Chi : total:m0_13, partial:m754_29 -# 754| v754_31(void) = ^IndirectReadSideEffect[-1] : &:r754_23, ~m754_30 -#-----| v0_17(void) = ^BufferReadSideEffect[0] : &:r0_16, ~m754_30 -# 754| m754_32(String) = ^IndirectMayWriteSideEffect[-1] : &:r754_23 -# 754| m754_33(unknown) = Chi : total:m754_30, partial:m754_32 -#-----| r0_18(glval) = CopyValue : r754_28 -#-----| r0_19(glval) = VariableAddress[#return] : -#-----| r0_20(glval) = VariableAddress[#this] : -#-----| r0_21(Middle *) = Load[#this] : &:r0_20, m754_6 -#-----| r0_22(glval) = CopyValue : r0_21 -#-----| r0_23(Middle &) = CopyValue : r0_22 -#-----| m0_24(Middle &) = Store[#return] : &:r0_19, r0_23 -# 754| v754_34(void) = ReturnIndirection[#this] : &:r754_7, ~m754_33 -#-----| v0_25(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m754_33 -# 754| r754_35(glval) = VariableAddress[#return] : -# 754| v754_36(void) = ReturnValue : &:r754_35, m0_24 -# 754| v754_37(void) = AliasedUse : ~m754_33 -# 754| v754_38(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 754| r754_8(glval) = VariableAddress[#this] : +# 754| r754_9(Middle *) = Load[#this] : &:r754_8, m754_5 +#-----| r0_5(Base *) = ConvertToNonVirtualBase[Middle : Base] : r754_9 +# 754| r754_10(glval) = FunctionAddress[operator=] : +# 754| r754_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 754| r754_12(Middle &) = Load[(unnamed parameter 0)] : &:r754_11, m0_2 +#-----| r0_6(glval) = CopyValue : r754_12 +# 754| r754_13(Middle *) = CopyValue : r0_6 +#-----| r0_7(Base *) = ConvertToNonVirtualBase[Middle : Base] : r754_13 +# 754| r754_14(glval) = CopyValue : r0_7 +#-----| r0_8(Base &) = CopyValue : r754_14 +# 754| r754_15(Base &) = Call[operator=] : func:r754_10, this:r0_5, 0:r0_8 +# 754| mu754_16(unknown) = ^CallSideEffect : ~m? +#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m? +#-----| mu0_11(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 +#-----| r0_12(glval) = CopyValue : r754_15 +# 754| r754_17(glval) = VariableAddress[#this] : +# 754| r754_18(Middle *) = Load[#this] : &:r754_17, m754_5 +# 754| r754_19(glval) = FieldAddress[middle_s] : r754_18 +# 754| r754_20(String *) = CopyValue : r754_19 +# 754| r754_21(glval) = FunctionAddress[operator=] : +# 754| r754_22(glval) = VariableAddress[(unnamed parameter 0)] : +# 754| r754_23(Middle &) = Load[(unnamed parameter 0)] : &:r754_22, m0_2 +#-----| r0_13(glval) = CopyValue : r754_23 +# 754| r754_24(glval) = FieldAddress[middle_s] : r0_13 +#-----| r0_14(String &) = CopyValue : r754_24 +# 754| r754_25(String &) = Call[operator=] : func:r754_21, this:r754_20, 0:r0_14 +# 754| mu754_26(unknown) = ^CallSideEffect : ~m? +# 754| v754_27(void) = ^IndirectReadSideEffect[-1] : &:r754_20, ~m? +#-----| v0_15(void) = ^BufferReadSideEffect[0] : &:r0_14, ~m? +# 754| mu754_28(String) = ^IndirectMayWriteSideEffect[-1] : &:r754_20 +#-----| r0_16(glval) = CopyValue : r754_25 +#-----| r0_17(glval) = VariableAddress[#return] : +#-----| r0_18(glval) = VariableAddress[#this] : +#-----| r0_19(Middle *) = Load[#this] : &:r0_18, m754_5 +#-----| r0_20(glval) = CopyValue : r0_19 +#-----| r0_21(Middle &) = CopyValue : r0_20 +#-----| m0_22(Middle &) = Store[#return] : &:r0_17, r0_21 +# 754| v754_29(void) = ReturnIndirection[#this] : &:r754_6, ~m? +#-----| v0_23(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 754| r754_30(glval) = VariableAddress[#return] : +# 754| v754_31(void) = ReturnValue : &:r754_30, m0_22 +# 754| v754_32(void) = AliasedUse : ~m? +# 754| v754_33(void) = ExitFunction : # 757| void Middle::Middle() # 757| Block 0 # 757| v757_1(void) = EnterFunction : -# 757| m757_2(unknown) = AliasedDefinition : -# 757| m757_3(unknown) = InitializeNonLocal : -# 757| m757_4(unknown) = Chi : total:m757_2, partial:m757_3 -# 757| r757_5(glval) = VariableAddress[#this] : -# 757| m757_6(glval) = InitializeParameter[#this] : &:r757_5 -# 757| r757_7(glval) = Load[#this] : &:r757_5, m757_6 -# 757| m757_8(Middle) = InitializeIndirection[#this] : &:r757_7 -# 757| m757_9(unknown) = Chi : total:m757_4, partial:m757_8 -# 757| r757_10(glval) = ConvertToNonVirtualBase[Middle : Base] : r757_7 -# 757| r757_11(glval) = FunctionAddress[Base] : -# 757| v757_12(void) = Call[Base] : func:r757_11, this:r757_10 -# 757| m757_13(unknown) = ^CallSideEffect : ~m757_9 -# 757| m757_14(unknown) = Chi : total:m757_9, partial:m757_13 -# 757| m757_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r757_10 -# 757| m757_16(unknown) = Chi : total:m757_14, partial:m757_15 -# 757| r757_17(glval) = FieldAddress[middle_s] : r757_7 -# 757| r757_18(glval) = FunctionAddress[String] : -# 757| v757_19(void) = Call[String] : func:r757_18, this:r757_17 -# 757| m757_20(unknown) = ^CallSideEffect : ~m757_16 -# 757| m757_21(unknown) = Chi : total:m757_16, partial:m757_20 -# 757| m757_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r757_17 -# 757| m757_23(unknown) = Chi : total:m757_21, partial:m757_22 +# 757| mu757_2(unknown) = AliasedDefinition : +# 757| mu757_3(unknown) = InitializeNonLocal : +# 757| r757_4(glval) = VariableAddress[#this] : +# 757| m757_5(glval) = InitializeParameter[#this] : &:r757_4 +# 757| r757_6(glval) = Load[#this] : &:r757_4, m757_5 +# 757| mu757_7(Middle) = InitializeIndirection[#this] : &:r757_6 +# 757| r757_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r757_6 +# 757| r757_9(glval) = FunctionAddress[Base] : +# 757| v757_10(void) = Call[Base] : func:r757_9, this:r757_8 +# 757| mu757_11(unknown) = ^CallSideEffect : ~m? +# 757| mu757_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r757_8 +# 757| r757_13(glval) = FieldAddress[middle_s] : r757_6 +# 757| r757_14(glval) = FunctionAddress[String] : +# 757| v757_15(void) = Call[String] : func:r757_14, this:r757_13 +# 757| mu757_16(unknown) = ^CallSideEffect : ~m? +# 757| mu757_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r757_13 # 758| v758_1(void) = NoOp : -# 757| v757_24(void) = ReturnIndirection[#this] : &:r757_7, ~m757_23 -# 757| v757_25(void) = ReturnVoid : -# 757| v757_26(void) = AliasedUse : ~m757_23 -# 757| v757_27(void) = ExitFunction : +# 757| v757_18(void) = ReturnIndirection[#this] : &:r757_6, ~m? +# 757| v757_19(void) = ReturnVoid : +# 757| v757_20(void) = AliasedUse : ~m? +# 757| v757_21(void) = ExitFunction : # 759| void Middle::~Middle() # 759| Block 0 # 759| v759_1(void) = EnterFunction : -# 759| m759_2(unknown) = AliasedDefinition : -# 759| m759_3(unknown) = InitializeNonLocal : -# 759| m759_4(unknown) = Chi : total:m759_2, partial:m759_3 -# 759| r759_5(glval) = VariableAddress[#this] : -# 759| m759_6(glval) = InitializeParameter[#this] : &:r759_5 -# 759| r759_7(glval) = Load[#this] : &:r759_5, m759_6 -# 759| m759_8(Middle) = InitializeIndirection[#this] : &:r759_7 -# 759| m759_9(unknown) = Chi : total:m759_4, partial:m759_8 +# 759| mu759_2(unknown) = AliasedDefinition : +# 759| mu759_3(unknown) = InitializeNonLocal : +# 759| r759_4(glval) = VariableAddress[#this] : +# 759| m759_5(glval) = InitializeParameter[#this] : &:r759_4 +# 759| r759_6(glval) = Load[#this] : &:r759_4, m759_5 +# 759| mu759_7(Middle) = InitializeIndirection[#this] : &:r759_6 # 760| v760_1(void) = NoOp : -# 760| r760_2(glval) = FieldAddress[middle_s] : r759_7 +# 760| r760_2(glval) = FieldAddress[middle_s] : r759_6 # 760| r760_3(glval) = FunctionAddress[~String] : # 760| v760_4(void) = Call[~String] : func:r760_3, this:r760_2 -# 760| m760_5(unknown) = ^CallSideEffect : ~m759_9 -# 760| m760_6(unknown) = Chi : total:m759_9, partial:m760_5 -# 760| r760_7(glval) = ConvertToNonVirtualBase[Middle : Base] : r759_7 -# 760| r760_8(glval) = FunctionAddress[~Base] : -# 760| v760_9(void) = Call[~Base] : func:r760_8, this:r760_7 -# 760| m760_10(unknown) = ^CallSideEffect : ~m760_6 -# 760| m760_11(unknown) = Chi : total:m760_6, partial:m760_10 -# 759| v759_10(void) = ReturnIndirection[#this] : &:r759_7, ~m760_11 -# 759| v759_11(void) = ReturnVoid : -# 759| v759_12(void) = AliasedUse : ~m760_11 -# 759| v759_13(void) = ExitFunction : +# 760| mu760_5(unknown) = ^CallSideEffect : ~m? +# 760| r760_6(glval) = ConvertToNonVirtualBase[Middle : Base] : r759_6 +# 760| r760_7(glval) = FunctionAddress[~Base] : +# 760| v760_8(void) = Call[~Base] : func:r760_7, this:r760_6 +# 760| mu760_9(unknown) = ^CallSideEffect : ~m? +# 759| v759_8(void) = ReturnIndirection[#this] : &:r759_6, ~m? +# 759| v759_9(void) = ReturnVoid : +# 759| v759_10(void) = AliasedUse : ~m? +# 759| v759_11(void) = ExitFunction : # 763| Derived& Derived::operator=(Derived const&) # 763| Block 0 # 763| v763_1(void) = EnterFunction : -# 763| m763_2(unknown) = AliasedDefinition : -# 763| m763_3(unknown) = InitializeNonLocal : -# 763| m763_4(unknown) = Chi : total:m763_2, partial:m763_3 -# 763| r763_5(glval) = VariableAddress[#this] : -# 763| m763_6(glval) = InitializeParameter[#this] : &:r763_5 -# 763| r763_7(glval) = Load[#this] : &:r763_5, m763_6 -# 763| m763_8(Derived) = InitializeIndirection[#this] : &:r763_7 -# 763| m763_9(unknown) = Chi : total:m763_4, partial:m763_8 +# 763| mu763_2(unknown) = AliasedDefinition : +# 763| mu763_3(unknown) = InitializeNonLocal : +# 763| r763_4(glval) = VariableAddress[#this] : +# 763| m763_5(glval) = InitializeParameter[#this] : &:r763_4 +# 763| r763_6(glval) = Load[#this] : &:r763_4, m763_5 +# 763| mu763_7(Derived) = InitializeIndirection[#this] : &:r763_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(Derived &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Derived &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -#-----| m0_5(unknown) = Chi : total:m763_9, partial:m0_4 -# 763| r763_10(glval) = VariableAddress[#this] : -# 763| r763_11(Derived *) = Load[#this] : &:r763_10, m763_6 -#-----| r0_6(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r763_11 -# 763| r763_12(glval) = FunctionAddress[operator=] : -# 763| r763_13(glval) = VariableAddress[(unnamed parameter 0)] : -# 763| r763_14(Derived &) = Load[(unnamed parameter 0)] : &:r763_13, m0_2 -#-----| r0_7(glval) = CopyValue : r763_14 -# 763| r763_15(Derived *) = CopyValue : r0_7 -#-----| r0_8(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r763_15 -# 763| r763_16(glval) = CopyValue : r0_8 -#-----| r0_9(Middle &) = CopyValue : r763_16 -# 763| r763_17(Middle &) = Call[operator=] : func:r763_12, this:r0_6, 0:r0_9 -# 763| m763_18(unknown) = ^CallSideEffect : ~m0_5 -# 763| m763_19(unknown) = Chi : total:m0_5, partial:m763_18 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m763_19 -#-----| v0_11(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m763_19 -#-----| m0_12(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -#-----| m0_13(unknown) = Chi : total:m763_19, partial:m0_12 -#-----| r0_14(glval) = CopyValue : r763_17 -# 763| r763_20(glval) = VariableAddress[#this] : -# 763| r763_21(Derived *) = Load[#this] : &:r763_20, m763_6 -# 763| r763_22(glval) = FieldAddress[derived_s] : r763_21 -# 763| r763_23(String *) = CopyValue : r763_22 -# 763| r763_24(glval) = FunctionAddress[operator=] : -# 763| r763_25(glval) = VariableAddress[(unnamed parameter 0)] : -# 763| r763_26(Derived &) = Load[(unnamed parameter 0)] : &:r763_25, m0_2 -#-----| r0_15(glval) = CopyValue : r763_26 -# 763| r763_27(glval) = FieldAddress[derived_s] : r0_15 -#-----| r0_16(String &) = CopyValue : r763_27 -# 763| r763_28(String &) = Call[operator=] : func:r763_24, this:r763_23, 0:r0_16 -# 763| m763_29(unknown) = ^CallSideEffect : ~m0_13 -# 763| m763_30(unknown) = Chi : total:m0_13, partial:m763_29 -# 763| v763_31(void) = ^IndirectReadSideEffect[-1] : &:r763_23, ~m763_30 -#-----| v0_17(void) = ^BufferReadSideEffect[0] : &:r0_16, ~m763_30 -# 763| m763_32(String) = ^IndirectMayWriteSideEffect[-1] : &:r763_23 -# 763| m763_33(unknown) = Chi : total:m763_30, partial:m763_32 -#-----| r0_18(glval) = CopyValue : r763_28 -#-----| r0_19(glval) = VariableAddress[#return] : -#-----| r0_20(glval) = VariableAddress[#this] : -#-----| r0_21(Derived *) = Load[#this] : &:r0_20, m763_6 -#-----| r0_22(glval) = CopyValue : r0_21 -#-----| r0_23(Derived &) = CopyValue : r0_22 -#-----| m0_24(Derived &) = Store[#return] : &:r0_19, r0_23 -# 763| v763_34(void) = ReturnIndirection[#this] : &:r763_7, ~m763_33 -#-----| v0_25(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m763_33 -# 763| r763_35(glval) = VariableAddress[#return] : -# 763| v763_36(void) = ReturnValue : &:r763_35, m0_24 -# 763| v763_37(void) = AliasedUse : ~m763_33 -# 763| v763_38(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 763| r763_8(glval) = VariableAddress[#this] : +# 763| r763_9(Derived *) = Load[#this] : &:r763_8, m763_5 +#-----| r0_5(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r763_9 +# 763| r763_10(glval) = FunctionAddress[operator=] : +# 763| r763_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 763| r763_12(Derived &) = Load[(unnamed parameter 0)] : &:r763_11, m0_2 +#-----| r0_6(glval) = CopyValue : r763_12 +# 763| r763_13(Derived *) = CopyValue : r0_6 +#-----| r0_7(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r763_13 +# 763| r763_14(glval) = CopyValue : r0_7 +#-----| r0_8(Middle &) = CopyValue : r763_14 +# 763| r763_15(Middle &) = Call[operator=] : func:r763_10, this:r0_5, 0:r0_8 +# 763| mu763_16(unknown) = ^CallSideEffect : ~m? +#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m? +#-----| mu0_11(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 +#-----| r0_12(glval) = CopyValue : r763_15 +# 763| r763_17(glval) = VariableAddress[#this] : +# 763| r763_18(Derived *) = Load[#this] : &:r763_17, m763_5 +# 763| r763_19(glval) = FieldAddress[derived_s] : r763_18 +# 763| r763_20(String *) = CopyValue : r763_19 +# 763| r763_21(glval) = FunctionAddress[operator=] : +# 763| r763_22(glval) = VariableAddress[(unnamed parameter 0)] : +# 763| r763_23(Derived &) = Load[(unnamed parameter 0)] : &:r763_22, m0_2 +#-----| r0_13(glval) = CopyValue : r763_23 +# 763| r763_24(glval) = FieldAddress[derived_s] : r0_13 +#-----| r0_14(String &) = CopyValue : r763_24 +# 763| r763_25(String &) = Call[operator=] : func:r763_21, this:r763_20, 0:r0_14 +# 763| mu763_26(unknown) = ^CallSideEffect : ~m? +# 763| v763_27(void) = ^IndirectReadSideEffect[-1] : &:r763_20, ~m? +#-----| v0_15(void) = ^BufferReadSideEffect[0] : &:r0_14, ~m? +# 763| mu763_28(String) = ^IndirectMayWriteSideEffect[-1] : &:r763_20 +#-----| r0_16(glval) = CopyValue : r763_25 +#-----| r0_17(glval) = VariableAddress[#return] : +#-----| r0_18(glval) = VariableAddress[#this] : +#-----| r0_19(Derived *) = Load[#this] : &:r0_18, m763_5 +#-----| r0_20(glval) = CopyValue : r0_19 +#-----| r0_21(Derived &) = CopyValue : r0_20 +#-----| m0_22(Derived &) = Store[#return] : &:r0_17, r0_21 +# 763| v763_29(void) = ReturnIndirection[#this] : &:r763_6, ~m? +#-----| v0_23(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 763| r763_30(glval) = VariableAddress[#return] : +# 763| v763_31(void) = ReturnValue : &:r763_30, m0_22 +# 763| v763_32(void) = AliasedUse : ~m? +# 763| v763_33(void) = ExitFunction : # 766| void Derived::Derived() # 766| Block 0 # 766| v766_1(void) = EnterFunction : -# 766| m766_2(unknown) = AliasedDefinition : -# 766| m766_3(unknown) = InitializeNonLocal : -# 766| m766_4(unknown) = Chi : total:m766_2, partial:m766_3 -# 766| r766_5(glval) = VariableAddress[#this] : -# 766| m766_6(glval) = InitializeParameter[#this] : &:r766_5 -# 766| r766_7(glval) = Load[#this] : &:r766_5, m766_6 -# 766| m766_8(Derived) = InitializeIndirection[#this] : &:r766_7 -# 766| m766_9(unknown) = Chi : total:m766_4, partial:m766_8 -# 766| r766_10(glval) = ConvertToNonVirtualBase[Derived : Middle] : r766_7 -# 766| r766_11(glval) = FunctionAddress[Middle] : -# 766| v766_12(void) = Call[Middle] : func:r766_11, this:r766_10 -# 766| m766_13(unknown) = ^CallSideEffect : ~m766_9 -# 766| m766_14(unknown) = Chi : total:m766_9, partial:m766_13 -# 766| m766_15(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r766_10 -# 766| m766_16(unknown) = Chi : total:m766_14, partial:m766_15 -# 766| r766_17(glval) = FieldAddress[derived_s] : r766_7 -# 766| r766_18(glval) = FunctionAddress[String] : -# 766| v766_19(void) = Call[String] : func:r766_18, this:r766_17 -# 766| m766_20(unknown) = ^CallSideEffect : ~m766_16 -# 766| m766_21(unknown) = Chi : total:m766_16, partial:m766_20 -# 766| m766_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r766_17 -# 766| m766_23(unknown) = Chi : total:m766_21, partial:m766_22 +# 766| mu766_2(unknown) = AliasedDefinition : +# 766| mu766_3(unknown) = InitializeNonLocal : +# 766| r766_4(glval) = VariableAddress[#this] : +# 766| m766_5(glval) = InitializeParameter[#this] : &:r766_4 +# 766| r766_6(glval) = Load[#this] : &:r766_4, m766_5 +# 766| mu766_7(Derived) = InitializeIndirection[#this] : &:r766_6 +# 766| r766_8(glval) = ConvertToNonVirtualBase[Derived : Middle] : r766_6 +# 766| r766_9(glval) = FunctionAddress[Middle] : +# 766| v766_10(void) = Call[Middle] : func:r766_9, this:r766_8 +# 766| mu766_11(unknown) = ^CallSideEffect : ~m? +# 766| mu766_12(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r766_8 +# 766| r766_13(glval) = FieldAddress[derived_s] : r766_6 +# 766| r766_14(glval) = FunctionAddress[String] : +# 766| v766_15(void) = Call[String] : func:r766_14, this:r766_13 +# 766| mu766_16(unknown) = ^CallSideEffect : ~m? +# 766| mu766_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r766_13 # 767| v767_1(void) = NoOp : -# 766| v766_24(void) = ReturnIndirection[#this] : &:r766_7, ~m766_23 -# 766| v766_25(void) = ReturnVoid : -# 766| v766_26(void) = AliasedUse : ~m766_23 -# 766| v766_27(void) = ExitFunction : +# 766| v766_18(void) = ReturnIndirection[#this] : &:r766_6, ~m? +# 766| v766_19(void) = ReturnVoid : +# 766| v766_20(void) = AliasedUse : ~m? +# 766| v766_21(void) = ExitFunction : # 768| void Derived::~Derived() # 768| Block 0 # 768| v768_1(void) = EnterFunction : -# 768| m768_2(unknown) = AliasedDefinition : -# 768| m768_3(unknown) = InitializeNonLocal : -# 768| m768_4(unknown) = Chi : total:m768_2, partial:m768_3 -# 768| r768_5(glval) = VariableAddress[#this] : -# 768| m768_6(glval) = InitializeParameter[#this] : &:r768_5 -# 768| r768_7(glval) = Load[#this] : &:r768_5, m768_6 -# 768| m768_8(Derived) = InitializeIndirection[#this] : &:r768_7 -# 768| m768_9(unknown) = Chi : total:m768_4, partial:m768_8 +# 768| mu768_2(unknown) = AliasedDefinition : +# 768| mu768_3(unknown) = InitializeNonLocal : +# 768| r768_4(glval) = VariableAddress[#this] : +# 768| m768_5(glval) = InitializeParameter[#this] : &:r768_4 +# 768| r768_6(glval) = Load[#this] : &:r768_4, m768_5 +# 768| mu768_7(Derived) = InitializeIndirection[#this] : &:r768_6 # 769| v769_1(void) = NoOp : -# 769| r769_2(glval) = FieldAddress[derived_s] : r768_7 +# 769| r769_2(glval) = FieldAddress[derived_s] : r768_6 # 769| r769_3(glval) = FunctionAddress[~String] : # 769| v769_4(void) = Call[~String] : func:r769_3, this:r769_2 -# 769| m769_5(unknown) = ^CallSideEffect : ~m768_9 -# 769| m769_6(unknown) = Chi : total:m768_9, partial:m769_5 -# 769| r769_7(glval) = ConvertToNonVirtualBase[Derived : Middle] : r768_7 -# 769| r769_8(glval) = FunctionAddress[~Middle] : -# 769| v769_9(void) = Call[~Middle] : func:r769_8, this:r769_7 -# 769| m769_10(unknown) = ^CallSideEffect : ~m769_6 -# 769| m769_11(unknown) = Chi : total:m769_6, partial:m769_10 -# 768| v768_10(void) = ReturnIndirection[#this] : &:r768_7, ~m769_11 -# 768| v768_11(void) = ReturnVoid : -# 768| v768_12(void) = AliasedUse : ~m769_11 -# 768| v768_13(void) = ExitFunction : +# 769| mu769_5(unknown) = ^CallSideEffect : ~m? +# 769| r769_6(glval) = ConvertToNonVirtualBase[Derived : Middle] : r768_6 +# 769| r769_7(glval) = FunctionAddress[~Middle] : +# 769| v769_8(void) = Call[~Middle] : func:r769_7, this:r769_6 +# 769| mu769_9(unknown) = ^CallSideEffect : ~m? +# 768| v768_8(void) = ReturnIndirection[#this] : &:r768_6, ~m? +# 768| v768_9(void) = ReturnVoid : +# 768| v768_10(void) = AliasedUse : ~m? +# 768| v768_11(void) = ExitFunction : # 775| void MiddleVB1::MiddleVB1() # 775| Block 0 # 775| v775_1(void) = EnterFunction : -# 775| m775_2(unknown) = AliasedDefinition : -# 775| m775_3(unknown) = InitializeNonLocal : -# 775| m775_4(unknown) = Chi : total:m775_2, partial:m775_3 -# 775| r775_5(glval) = VariableAddress[#this] : -# 775| m775_6(glval) = InitializeParameter[#this] : &:r775_5 -# 775| r775_7(glval) = Load[#this] : &:r775_5, m775_6 -# 775| m775_8(MiddleVB1) = InitializeIndirection[#this] : &:r775_7 -# 775| m775_9(unknown) = Chi : total:m775_4, partial:m775_8 -# 775| r775_10(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r775_7 -# 775| r775_11(glval) = FunctionAddress[Base] : -# 775| v775_12(void) = Call[Base] : func:r775_11, this:r775_10 -# 775| m775_13(unknown) = ^CallSideEffect : ~m775_9 -# 775| m775_14(unknown) = Chi : total:m775_9, partial:m775_13 -# 775| m775_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r775_10 -# 775| m775_16(unknown) = Chi : total:m775_14, partial:m775_15 -# 775| r775_17(glval) = FieldAddress[middlevb1_s] : r775_7 -# 775| r775_18(glval) = FunctionAddress[String] : -# 775| v775_19(void) = Call[String] : func:r775_18, this:r775_17 -# 775| m775_20(unknown) = ^CallSideEffect : ~m775_16 -# 775| m775_21(unknown) = Chi : total:m775_16, partial:m775_20 -# 775| m775_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r775_17 -# 775| m775_23(unknown) = Chi : total:m775_21, partial:m775_22 +# 775| mu775_2(unknown) = AliasedDefinition : +# 775| mu775_3(unknown) = InitializeNonLocal : +# 775| r775_4(glval) = VariableAddress[#this] : +# 775| m775_5(glval) = InitializeParameter[#this] : &:r775_4 +# 775| r775_6(glval) = Load[#this] : &:r775_4, m775_5 +# 775| mu775_7(MiddleVB1) = InitializeIndirection[#this] : &:r775_6 +# 775| r775_8(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r775_6 +# 775| r775_9(glval) = FunctionAddress[Base] : +# 775| v775_10(void) = Call[Base] : func:r775_9, this:r775_8 +# 775| mu775_11(unknown) = ^CallSideEffect : ~m? +# 775| mu775_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r775_8 +# 775| r775_13(glval) = FieldAddress[middlevb1_s] : r775_6 +# 775| r775_14(glval) = FunctionAddress[String] : +# 775| v775_15(void) = Call[String] : func:r775_14, this:r775_13 +# 775| mu775_16(unknown) = ^CallSideEffect : ~m? +# 775| mu775_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r775_13 # 776| v776_1(void) = NoOp : -# 775| v775_24(void) = ReturnIndirection[#this] : &:r775_7, ~m775_23 -# 775| v775_25(void) = ReturnVoid : -# 775| v775_26(void) = AliasedUse : ~m775_23 -# 775| v775_27(void) = ExitFunction : +# 775| v775_18(void) = ReturnIndirection[#this] : &:r775_6, ~m? +# 775| v775_19(void) = ReturnVoid : +# 775| v775_20(void) = AliasedUse : ~m? +# 775| v775_21(void) = ExitFunction : # 777| void MiddleVB1::~MiddleVB1() # 777| Block 0 # 777| v777_1(void) = EnterFunction : -# 777| m777_2(unknown) = AliasedDefinition : -# 777| m777_3(unknown) = InitializeNonLocal : -# 777| m777_4(unknown) = Chi : total:m777_2, partial:m777_3 -# 777| r777_5(glval) = VariableAddress[#this] : -# 777| m777_6(glval) = InitializeParameter[#this] : &:r777_5 -# 777| r777_7(glval) = Load[#this] : &:r777_5, m777_6 -# 777| m777_8(MiddleVB1) = InitializeIndirection[#this] : &:r777_7 -# 777| m777_9(unknown) = Chi : total:m777_4, partial:m777_8 +# 777| mu777_2(unknown) = AliasedDefinition : +# 777| mu777_3(unknown) = InitializeNonLocal : +# 777| r777_4(glval) = VariableAddress[#this] : +# 777| m777_5(glval) = InitializeParameter[#this] : &:r777_4 +# 777| r777_6(glval) = Load[#this] : &:r777_4, m777_5 +# 777| mu777_7(MiddleVB1) = InitializeIndirection[#this] : &:r777_6 # 778| v778_1(void) = NoOp : -# 778| r778_2(glval) = FieldAddress[middlevb1_s] : r777_7 +# 778| r778_2(glval) = FieldAddress[middlevb1_s] : r777_6 # 778| r778_3(glval) = FunctionAddress[~String] : # 778| v778_4(void) = Call[~String] : func:r778_3, this:r778_2 -# 778| m778_5(unknown) = ^CallSideEffect : ~m777_9 -# 778| m778_6(unknown) = Chi : total:m777_9, partial:m778_5 -# 778| r778_7(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r777_7 -# 778| r778_8(glval) = FunctionAddress[~Base] : -# 778| v778_9(void) = Call[~Base] : func:r778_8, this:r778_7 -# 778| m778_10(unknown) = ^CallSideEffect : ~m778_6 -# 778| m778_11(unknown) = Chi : total:m778_6, partial:m778_10 -# 777| v777_10(void) = ReturnIndirection[#this] : &:r777_7, ~m778_11 -# 777| v777_11(void) = ReturnVoid : -# 777| v777_12(void) = AliasedUse : ~m778_11 -# 777| v777_13(void) = ExitFunction : +# 778| mu778_5(unknown) = ^CallSideEffect : ~m? +# 778| r778_6(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r777_6 +# 778| r778_7(glval) = FunctionAddress[~Base] : +# 778| v778_8(void) = Call[~Base] : func:r778_7, this:r778_6 +# 778| mu778_9(unknown) = ^CallSideEffect : ~m? +# 777| v777_8(void) = ReturnIndirection[#this] : &:r777_6, ~m? +# 777| v777_9(void) = ReturnVoid : +# 777| v777_10(void) = AliasedUse : ~m? +# 777| v777_11(void) = ExitFunction : # 784| void MiddleVB2::MiddleVB2() # 784| Block 0 # 784| v784_1(void) = EnterFunction : -# 784| m784_2(unknown) = AliasedDefinition : -# 784| m784_3(unknown) = InitializeNonLocal : -# 784| m784_4(unknown) = Chi : total:m784_2, partial:m784_3 -# 784| r784_5(glval) = VariableAddress[#this] : -# 784| m784_6(glval) = InitializeParameter[#this] : &:r784_5 -# 784| r784_7(glval) = Load[#this] : &:r784_5, m784_6 -# 784| m784_8(MiddleVB2) = InitializeIndirection[#this] : &:r784_7 -# 784| m784_9(unknown) = Chi : total:m784_4, partial:m784_8 -# 784| r784_10(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r784_7 -# 784| r784_11(glval) = FunctionAddress[Base] : -# 784| v784_12(void) = Call[Base] : func:r784_11, this:r784_10 -# 784| m784_13(unknown) = ^CallSideEffect : ~m784_9 -# 784| m784_14(unknown) = Chi : total:m784_9, partial:m784_13 -# 784| m784_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r784_10 -# 784| m784_16(unknown) = Chi : total:m784_14, partial:m784_15 -# 784| r784_17(glval) = FieldAddress[middlevb2_s] : r784_7 -# 784| r784_18(glval) = FunctionAddress[String] : -# 784| v784_19(void) = Call[String] : func:r784_18, this:r784_17 -# 784| m784_20(unknown) = ^CallSideEffect : ~m784_16 -# 784| m784_21(unknown) = Chi : total:m784_16, partial:m784_20 -# 784| m784_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r784_17 -# 784| m784_23(unknown) = Chi : total:m784_21, partial:m784_22 +# 784| mu784_2(unknown) = AliasedDefinition : +# 784| mu784_3(unknown) = InitializeNonLocal : +# 784| r784_4(glval) = VariableAddress[#this] : +# 784| m784_5(glval) = InitializeParameter[#this] : &:r784_4 +# 784| r784_6(glval) = Load[#this] : &:r784_4, m784_5 +# 784| mu784_7(MiddleVB2) = InitializeIndirection[#this] : &:r784_6 +# 784| r784_8(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r784_6 +# 784| r784_9(glval) = FunctionAddress[Base] : +# 784| v784_10(void) = Call[Base] : func:r784_9, this:r784_8 +# 784| mu784_11(unknown) = ^CallSideEffect : ~m? +# 784| mu784_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r784_8 +# 784| r784_13(glval) = FieldAddress[middlevb2_s] : r784_6 +# 784| r784_14(glval) = FunctionAddress[String] : +# 784| v784_15(void) = Call[String] : func:r784_14, this:r784_13 +# 784| mu784_16(unknown) = ^CallSideEffect : ~m? +# 784| mu784_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r784_13 # 785| v785_1(void) = NoOp : -# 784| v784_24(void) = ReturnIndirection[#this] : &:r784_7, ~m784_23 -# 784| v784_25(void) = ReturnVoid : -# 784| v784_26(void) = AliasedUse : ~m784_23 -# 784| v784_27(void) = ExitFunction : +# 784| v784_18(void) = ReturnIndirection[#this] : &:r784_6, ~m? +# 784| v784_19(void) = ReturnVoid : +# 784| v784_20(void) = AliasedUse : ~m? +# 784| v784_21(void) = ExitFunction : # 786| void MiddleVB2::~MiddleVB2() # 786| Block 0 # 786| v786_1(void) = EnterFunction : -# 786| m786_2(unknown) = AliasedDefinition : -# 786| m786_3(unknown) = InitializeNonLocal : -# 786| m786_4(unknown) = Chi : total:m786_2, partial:m786_3 -# 786| r786_5(glval) = VariableAddress[#this] : -# 786| m786_6(glval) = InitializeParameter[#this] : &:r786_5 -# 786| r786_7(glval) = Load[#this] : &:r786_5, m786_6 -# 786| m786_8(MiddleVB2) = InitializeIndirection[#this] : &:r786_7 -# 786| m786_9(unknown) = Chi : total:m786_4, partial:m786_8 +# 786| mu786_2(unknown) = AliasedDefinition : +# 786| mu786_3(unknown) = InitializeNonLocal : +# 786| r786_4(glval) = VariableAddress[#this] : +# 786| m786_5(glval) = InitializeParameter[#this] : &:r786_4 +# 786| r786_6(glval) = Load[#this] : &:r786_4, m786_5 +# 786| mu786_7(MiddleVB2) = InitializeIndirection[#this] : &:r786_6 # 787| v787_1(void) = NoOp : -# 787| r787_2(glval) = FieldAddress[middlevb2_s] : r786_7 +# 787| r787_2(glval) = FieldAddress[middlevb2_s] : r786_6 # 787| r787_3(glval) = FunctionAddress[~String] : # 787| v787_4(void) = Call[~String] : func:r787_3, this:r787_2 -# 787| m787_5(unknown) = ^CallSideEffect : ~m786_9 -# 787| m787_6(unknown) = Chi : total:m786_9, partial:m787_5 -# 787| r787_7(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r786_7 -# 787| r787_8(glval) = FunctionAddress[~Base] : -# 787| v787_9(void) = Call[~Base] : func:r787_8, this:r787_7 -# 787| m787_10(unknown) = ^CallSideEffect : ~m787_6 -# 787| m787_11(unknown) = Chi : total:m787_6, partial:m787_10 -# 786| v786_10(void) = ReturnIndirection[#this] : &:r786_7, ~m787_11 -# 786| v786_11(void) = ReturnVoid : -# 786| v786_12(void) = AliasedUse : ~m787_11 -# 786| v786_13(void) = ExitFunction : +# 787| mu787_5(unknown) = ^CallSideEffect : ~m? +# 787| r787_6(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r786_6 +# 787| r787_7(glval) = FunctionAddress[~Base] : +# 787| v787_8(void) = Call[~Base] : func:r787_7, this:r787_6 +# 787| mu787_9(unknown) = ^CallSideEffect : ~m? +# 786| v786_8(void) = ReturnIndirection[#this] : &:r786_6, ~m? +# 786| v786_9(void) = ReturnVoid : +# 786| v786_10(void) = AliasedUse : ~m? +# 786| v786_11(void) = ExitFunction : # 793| void DerivedVB::DerivedVB() # 793| Block 0 # 793| v793_1(void) = EnterFunction : -# 793| m793_2(unknown) = AliasedDefinition : -# 793| m793_3(unknown) = InitializeNonLocal : -# 793| m793_4(unknown) = Chi : total:m793_2, partial:m793_3 -# 793| r793_5(glval) = VariableAddress[#this] : -# 793| m793_6(glval) = InitializeParameter[#this] : &:r793_5 -# 793| r793_7(glval) = Load[#this] : &:r793_5, m793_6 -# 793| m793_8(DerivedVB) = InitializeIndirection[#this] : &:r793_7 -# 793| m793_9(unknown) = Chi : total:m793_4, partial:m793_8 -# 793| r793_10(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r793_7 -# 793| r793_11(glval) = FunctionAddress[Base] : -# 793| v793_12(void) = Call[Base] : func:r793_11, this:r793_10 -# 793| m793_13(unknown) = ^CallSideEffect : ~m793_9 -# 793| m793_14(unknown) = Chi : total:m793_9, partial:m793_13 -# 793| m793_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r793_10 -# 793| m793_16(unknown) = Chi : total:m793_14, partial:m793_15 -# 793| r793_17(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r793_7 -# 793| r793_18(glval) = FunctionAddress[MiddleVB1] : -# 793| v793_19(void) = Call[MiddleVB1] : func:r793_18, this:r793_17 -# 793| m793_20(unknown) = ^CallSideEffect : ~m793_16 -# 793| m793_21(unknown) = Chi : total:m793_16, partial:m793_20 -# 793| m793_22(MiddleVB1) = ^IndirectMayWriteSideEffect[-1] : &:r793_17 -# 793| m793_23(unknown) = Chi : total:m793_21, partial:m793_22 -# 793| r793_24(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r793_7 -# 793| r793_25(glval) = FunctionAddress[MiddleVB2] : -# 793| v793_26(void) = Call[MiddleVB2] : func:r793_25, this:r793_24 -# 793| m793_27(unknown) = ^CallSideEffect : ~m793_23 -# 793| m793_28(unknown) = Chi : total:m793_23, partial:m793_27 -# 793| m793_29(MiddleVB2) = ^IndirectMayWriteSideEffect[-1] : &:r793_24 -# 793| m793_30(unknown) = Chi : total:m793_28, partial:m793_29 -# 793| r793_31(glval) = FieldAddress[derivedvb_s] : r793_7 -# 793| r793_32(glval) = FunctionAddress[String] : -# 793| v793_33(void) = Call[String] : func:r793_32, this:r793_31 -# 793| m793_34(unknown) = ^CallSideEffect : ~m793_30 -# 793| m793_35(unknown) = Chi : total:m793_30, partial:m793_34 -# 793| m793_36(String) = ^IndirectMayWriteSideEffect[-1] : &:r793_31 -# 793| m793_37(unknown) = Chi : total:m793_35, partial:m793_36 +# 793| mu793_2(unknown) = AliasedDefinition : +# 793| mu793_3(unknown) = InitializeNonLocal : +# 793| r793_4(glval) = VariableAddress[#this] : +# 793| m793_5(glval) = InitializeParameter[#this] : &:r793_4 +# 793| r793_6(glval) = Load[#this] : &:r793_4, m793_5 +# 793| mu793_7(DerivedVB) = InitializeIndirection[#this] : &:r793_6 +# 793| r793_8(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r793_6 +# 793| r793_9(glval) = FunctionAddress[Base] : +# 793| v793_10(void) = Call[Base] : func:r793_9, this:r793_8 +# 793| mu793_11(unknown) = ^CallSideEffect : ~m? +# 793| mu793_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r793_8 +# 793| r793_13(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r793_6 +# 793| r793_14(glval) = FunctionAddress[MiddleVB1] : +# 793| v793_15(void) = Call[MiddleVB1] : func:r793_14, this:r793_13 +# 793| mu793_16(unknown) = ^CallSideEffect : ~m? +# 793| mu793_17(MiddleVB1) = ^IndirectMayWriteSideEffect[-1] : &:r793_13 +# 793| r793_18(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r793_6 +# 793| r793_19(glval) = FunctionAddress[MiddleVB2] : +# 793| v793_20(void) = Call[MiddleVB2] : func:r793_19, this:r793_18 +# 793| mu793_21(unknown) = ^CallSideEffect : ~m? +# 793| mu793_22(MiddleVB2) = ^IndirectMayWriteSideEffect[-1] : &:r793_18 +# 793| r793_23(glval) = FieldAddress[derivedvb_s] : r793_6 +# 793| r793_24(glval) = FunctionAddress[String] : +# 793| v793_25(void) = Call[String] : func:r793_24, this:r793_23 +# 793| mu793_26(unknown) = ^CallSideEffect : ~m? +# 793| mu793_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r793_23 # 794| v794_1(void) = NoOp : -# 793| v793_38(void) = ReturnIndirection[#this] : &:r793_7, ~m793_37 -# 793| v793_39(void) = ReturnVoid : -# 793| v793_40(void) = AliasedUse : ~m793_37 -# 793| v793_41(void) = ExitFunction : +# 793| v793_28(void) = ReturnIndirection[#this] : &:r793_6, ~m? +# 793| v793_29(void) = ReturnVoid : +# 793| v793_30(void) = AliasedUse : ~m? +# 793| v793_31(void) = ExitFunction : # 795| void DerivedVB::~DerivedVB() # 795| Block 0 # 795| v795_1(void) = EnterFunction : -# 795| m795_2(unknown) = AliasedDefinition : -# 795| m795_3(unknown) = InitializeNonLocal : -# 795| m795_4(unknown) = Chi : total:m795_2, partial:m795_3 -# 795| r795_5(glval) = VariableAddress[#this] : -# 795| m795_6(glval) = InitializeParameter[#this] : &:r795_5 -# 795| r795_7(glval) = Load[#this] : &:r795_5, m795_6 -# 795| m795_8(DerivedVB) = InitializeIndirection[#this] : &:r795_7 -# 795| m795_9(unknown) = Chi : total:m795_4, partial:m795_8 +# 795| mu795_2(unknown) = AliasedDefinition : +# 795| mu795_3(unknown) = InitializeNonLocal : +# 795| r795_4(glval) = VariableAddress[#this] : +# 795| m795_5(glval) = InitializeParameter[#this] : &:r795_4 +# 795| r795_6(glval) = Load[#this] : &:r795_4, m795_5 +# 795| mu795_7(DerivedVB) = InitializeIndirection[#this] : &:r795_6 # 796| v796_1(void) = NoOp : -# 796| r796_2(glval) = FieldAddress[derivedvb_s] : r795_7 +# 796| r796_2(glval) = FieldAddress[derivedvb_s] : r795_6 # 796| r796_3(glval) = FunctionAddress[~String] : # 796| v796_4(void) = Call[~String] : func:r796_3, this:r796_2 -# 796| m796_5(unknown) = ^CallSideEffect : ~m795_9 -# 796| m796_6(unknown) = Chi : total:m795_9, partial:m796_5 -# 796| r796_7(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r795_7 -# 796| r796_8(glval) = FunctionAddress[~MiddleVB2] : -# 796| v796_9(void) = Call[~MiddleVB2] : func:r796_8, this:r796_7 -# 796| m796_10(unknown) = ^CallSideEffect : ~m796_6 -# 796| m796_11(unknown) = Chi : total:m796_6, partial:m796_10 -# 796| r796_12(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r795_7 -# 796| r796_13(glval) = FunctionAddress[~MiddleVB1] : -# 796| v796_14(void) = Call[~MiddleVB1] : func:r796_13, this:r796_12 -# 796| m796_15(unknown) = ^CallSideEffect : ~m796_11 -# 796| m796_16(unknown) = Chi : total:m796_11, partial:m796_15 -# 796| r796_17(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r795_7 -# 796| r796_18(glval) = FunctionAddress[~Base] : -# 796| v796_19(void) = Call[~Base] : func:r796_18, this:r796_17 -# 796| m796_20(unknown) = ^CallSideEffect : ~m796_16 -# 796| m796_21(unknown) = Chi : total:m796_16, partial:m796_20 -# 795| v795_10(void) = ReturnIndirection[#this] : &:r795_7, ~m796_21 -# 795| v795_11(void) = ReturnVoid : -# 795| v795_12(void) = AliasedUse : ~m796_21 -# 795| v795_13(void) = ExitFunction : +# 796| mu796_5(unknown) = ^CallSideEffect : ~m? +# 796| r796_6(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r795_6 +# 796| r796_7(glval) = FunctionAddress[~MiddleVB2] : +# 796| v796_8(void) = Call[~MiddleVB2] : func:r796_7, this:r796_6 +# 796| mu796_9(unknown) = ^CallSideEffect : ~m? +# 796| r796_10(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r795_6 +# 796| r796_11(glval) = FunctionAddress[~MiddleVB1] : +# 796| v796_12(void) = Call[~MiddleVB1] : func:r796_11, this:r796_10 +# 796| mu796_13(unknown) = ^CallSideEffect : ~m? +# 796| r796_14(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r795_6 +# 796| r796_15(glval) = FunctionAddress[~Base] : +# 796| v796_16(void) = Call[~Base] : func:r796_15, this:r796_14 +# 796| mu796_17(unknown) = ^CallSideEffect : ~m? +# 795| v795_8(void) = ReturnIndirection[#this] : &:r795_6, ~m? +# 795| v795_9(void) = ReturnVoid : +# 795| v795_10(void) = AliasedUse : ~m? +# 795| v795_11(void) = ExitFunction : # 799| void HierarchyConversions() # 799| Block 0 # 799| v799_1(void) = EnterFunction : -# 799| m799_2(unknown) = AliasedDefinition : -# 799| m799_3(unknown) = InitializeNonLocal : -# 799| m799_4(unknown) = Chi : total:m799_2, partial:m799_3 +# 799| mu799_2(unknown) = AliasedDefinition : +# 799| mu799_3(unknown) = InitializeNonLocal : # 800| r800_1(glval) = VariableAddress[b] : -# 800| m800_2(Base) = Uninitialized[b] : &:r800_1 -# 800| m800_3(unknown) = Chi : total:m799_4, partial:m800_2 -# 800| r800_4(glval) = FunctionAddress[Base] : -# 800| v800_5(void) = Call[Base] : func:r800_4, this:r800_1 -# 800| m800_6(unknown) = ^CallSideEffect : ~m800_3 -# 800| m800_7(unknown) = Chi : total:m800_3, partial:m800_6 -# 800| m800_8(Base) = ^IndirectMayWriteSideEffect[-1] : &:r800_1 -# 800| m800_9(unknown) = Chi : total:m800_7, partial:m800_8 +# 800| mu800_2(Base) = Uninitialized[b] : &:r800_1 +# 800| r800_3(glval) = FunctionAddress[Base] : +# 800| v800_4(void) = Call[Base] : func:r800_3, this:r800_1 +# 800| mu800_5(unknown) = ^CallSideEffect : ~m? +# 800| mu800_6(Base) = ^IndirectMayWriteSideEffect[-1] : &:r800_1 # 801| r801_1(glval) = VariableAddress[m] : -# 801| m801_2(Middle) = Uninitialized[m] : &:r801_1 -# 801| m801_3(unknown) = Chi : total:m800_9, partial:m801_2 -# 801| r801_4(glval) = FunctionAddress[Middle] : -# 801| v801_5(void) = Call[Middle] : func:r801_4, this:r801_1 -# 801| m801_6(unknown) = ^CallSideEffect : ~m801_3 -# 801| m801_7(unknown) = Chi : total:m801_3, partial:m801_6 -# 801| m801_8(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r801_1 -# 801| m801_9(unknown) = Chi : total:m801_7, partial:m801_8 +# 801| mu801_2(Middle) = Uninitialized[m] : &:r801_1 +# 801| r801_3(glval) = FunctionAddress[Middle] : +# 801| v801_4(void) = Call[Middle] : func:r801_3, this:r801_1 +# 801| mu801_5(unknown) = ^CallSideEffect : ~m? +# 801| mu801_6(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r801_1 # 802| r802_1(glval) = VariableAddress[d] : -# 802| m802_2(Derived) = Uninitialized[d] : &:r802_1 -# 802| m802_3(unknown) = Chi : total:m801_9, partial:m802_2 -# 802| r802_4(glval) = FunctionAddress[Derived] : -# 802| v802_5(void) = Call[Derived] : func:r802_4, this:r802_1 -# 802| m802_6(unknown) = ^CallSideEffect : ~m802_3 -# 802| m802_7(unknown) = Chi : total:m802_3, partial:m802_6 -# 802| m802_8(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r802_1 -# 802| m802_9(unknown) = Chi : total:m802_7, partial:m802_8 +# 802| mu802_2(Derived) = Uninitialized[d] : &:r802_1 +# 802| r802_3(glval) = FunctionAddress[Derived] : +# 802| v802_4(void) = Call[Derived] : func:r802_3, this:r802_1 +# 802| mu802_5(unknown) = ^CallSideEffect : ~m? +# 802| mu802_6(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r802_1 # 804| r804_1(glval) = VariableAddress[pb] : # 804| r804_2(glval) = VariableAddress[b] : # 804| r804_3(Base *) = CopyValue : r804_2 @@ -8080,79 +7436,63 @@ ir.cpp: # 808| r808_4(glval) = ConvertToNonVirtualBase[Middle : Base] : r808_3 # 808| r808_5(Base &) = CopyValue : r808_4 # 808| r808_6(Base &) = Call[operator=] : func:r808_2, this:r808_1, 0:r808_5 -# 808| m808_7(unknown) = ^CallSideEffect : ~m802_9 -# 808| m808_8(unknown) = Chi : total:m802_9, partial:m808_7 -# 808| v808_9(void) = ^IndirectReadSideEffect[-1] : &:r808_1, ~m808_8 -# 808| v808_10(void) = ^BufferReadSideEffect[0] : &:r808_5, ~m808_8 -# 808| m808_11(Base) = ^IndirectMayWriteSideEffect[-1] : &:r808_1 -# 808| m808_12(unknown) = Chi : total:m808_8, partial:m808_11 -# 808| r808_13(glval) = CopyValue : r808_6 +# 808| mu808_7(unknown) = ^CallSideEffect : ~m? +# 808| v808_8(void) = ^IndirectReadSideEffect[-1] : &:r808_1, ~m? +# 808| v808_9(void) = ^BufferReadSideEffect[0] : &:r808_5, ~m? +# 808| mu808_10(Base) = ^IndirectMayWriteSideEffect[-1] : &:r808_1 +# 808| r808_11(glval) = CopyValue : r808_6 # 809| r809_1(glval) = VariableAddress[b] : # 809| r809_2(glval) = FunctionAddress[operator=] : # 809| r809_3(glval) = VariableAddress[#temp809:7] : -# 809| m809_4(Base) = Uninitialized[#temp809:7] : &:r809_3 -# 809| m809_5(unknown) = Chi : total:m808_12, partial:m809_4 -# 809| r809_6(glval) = FunctionAddress[Base] : -# 809| r809_7(glval) = VariableAddress[m] : -# 809| r809_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r809_7 -# 809| r809_9(Base &) = CopyValue : r809_8 -# 809| v809_10(void) = Call[Base] : func:r809_6, this:r809_3, 0:r809_9 -# 809| m809_11(unknown) = ^CallSideEffect : ~m809_5 -# 809| m809_12(unknown) = Chi : total:m809_5, partial:m809_11 -# 809| v809_13(void) = ^BufferReadSideEffect[0] : &:r809_9, ~m809_12 -# 809| m809_14(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_3 -# 809| m809_15(unknown) = Chi : total:m809_12, partial:m809_14 -# 809| r809_16(glval) = Convert : r809_3 -# 809| r809_17(Base &) = CopyValue : r809_16 -# 809| r809_18(Base &) = Call[operator=] : func:r809_2, this:r809_1, 0:r809_17 -# 809| m809_19(unknown) = ^CallSideEffect : ~m809_15 -# 809| m809_20(unknown) = Chi : total:m809_15, partial:m809_19 -# 809| v809_21(void) = ^IndirectReadSideEffect[-1] : &:r809_1, ~m809_20 -# 809| v809_22(void) = ^BufferReadSideEffect[0] : &:r809_17, ~m809_20 -# 809| m809_23(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_1 -# 809| m809_24(unknown) = Chi : total:m809_20, partial:m809_23 -# 809| r809_25(glval) = CopyValue : r809_3 -# 809| r809_26(glval) = FunctionAddress[~Base] : -# 809| v809_27(void) = Call[~Base] : func:r809_26, this:r809_25 -# 809| m809_28(unknown) = ^CallSideEffect : ~m809_24 -# 809| m809_29(unknown) = Chi : total:m809_24, partial:m809_28 -# 809| v809_30(void) = ^IndirectReadSideEffect[-1] : &:r809_25, ~m809_29 -# 809| m809_31(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_25 -# 809| m809_32(unknown) = Chi : total:m809_29, partial:m809_31 -# 809| r809_33(glval) = CopyValue : r809_18 +# 809| mu809_4(Base) = Uninitialized[#temp809:7] : &:r809_3 +# 809| r809_5(glval) = FunctionAddress[Base] : +# 809| r809_6(glval) = VariableAddress[m] : +# 809| r809_7(glval) = ConvertToNonVirtualBase[Middle : Base] : r809_6 +# 809| r809_8(Base &) = CopyValue : r809_7 +# 809| v809_9(void) = Call[Base] : func:r809_5, this:r809_3, 0:r809_8 +# 809| mu809_10(unknown) = ^CallSideEffect : ~m? +# 809| v809_11(void) = ^BufferReadSideEffect[0] : &:r809_8, ~m? +# 809| mu809_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_3 +# 809| r809_13(glval) = Convert : r809_3 +# 809| r809_14(Base &) = CopyValue : r809_13 +# 809| r809_15(Base &) = Call[operator=] : func:r809_2, this:r809_1, 0:r809_14 +# 809| mu809_16(unknown) = ^CallSideEffect : ~m? +# 809| v809_17(void) = ^IndirectReadSideEffect[-1] : &:r809_1, ~m? +# 809| v809_18(void) = ^BufferReadSideEffect[0] : &:r809_14, ~m? +# 809| mu809_19(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_1 +# 809| r809_20(glval) = CopyValue : r809_3 +# 809| r809_21(glval) = FunctionAddress[~Base] : +# 809| v809_22(void) = Call[~Base] : func:r809_21, this:r809_20 +# 809| mu809_23(unknown) = ^CallSideEffect : ~m? +# 809| v809_24(void) = ^IndirectReadSideEffect[-1] : &:r809_20, ~m? +# 809| mu809_25(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_20 +# 809| r809_26(glval) = CopyValue : r809_15 # 810| r810_1(glval) = VariableAddress[b] : # 810| r810_2(glval) = FunctionAddress[operator=] : # 810| r810_3(glval) = VariableAddress[#temp810:7] : -# 810| m810_4(Base) = Uninitialized[#temp810:7] : &:r810_3 -# 810| m810_5(unknown) = Chi : total:m809_32, partial:m810_4 -# 810| r810_6(glval) = FunctionAddress[Base] : -# 810| r810_7(glval) = VariableAddress[m] : -# 810| r810_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r810_7 -# 810| r810_9(Base &) = CopyValue : r810_8 -# 810| v810_10(void) = Call[Base] : func:r810_6, this:r810_3, 0:r810_9 -# 810| m810_11(unknown) = ^CallSideEffect : ~m810_5 -# 810| m810_12(unknown) = Chi : total:m810_5, partial:m810_11 -# 810| v810_13(void) = ^BufferReadSideEffect[0] : &:r810_9, ~m810_12 -# 810| m810_14(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_3 -# 810| m810_15(unknown) = Chi : total:m810_12, partial:m810_14 -# 810| r810_16(glval) = Convert : r810_3 -# 810| r810_17(Base &) = CopyValue : r810_16 -# 810| r810_18(Base &) = Call[operator=] : func:r810_2, this:r810_1, 0:r810_17 -# 810| m810_19(unknown) = ^CallSideEffect : ~m810_15 -# 810| m810_20(unknown) = Chi : total:m810_15, partial:m810_19 -# 810| v810_21(void) = ^IndirectReadSideEffect[-1] : &:r810_1, ~m810_20 -# 810| v810_22(void) = ^BufferReadSideEffect[0] : &:r810_17, ~m810_20 -# 810| m810_23(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_1 -# 810| m810_24(unknown) = Chi : total:m810_20, partial:m810_23 -# 810| r810_25(glval) = CopyValue : r810_3 -# 810| r810_26(glval) = FunctionAddress[~Base] : -# 810| v810_27(void) = Call[~Base] : func:r810_26, this:r810_25 -# 810| m810_28(unknown) = ^CallSideEffect : ~m810_24 -# 810| m810_29(unknown) = Chi : total:m810_24, partial:m810_28 -# 810| v810_30(void) = ^IndirectReadSideEffect[-1] : &:r810_25, ~m810_29 -# 810| m810_31(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_25 -# 810| m810_32(unknown) = Chi : total:m810_29, partial:m810_31 -# 810| r810_33(glval) = CopyValue : r810_18 +# 810| mu810_4(Base) = Uninitialized[#temp810:7] : &:r810_3 +# 810| r810_5(glval) = FunctionAddress[Base] : +# 810| r810_6(glval) = VariableAddress[m] : +# 810| r810_7(glval) = ConvertToNonVirtualBase[Middle : Base] : r810_6 +# 810| r810_8(Base &) = CopyValue : r810_7 +# 810| v810_9(void) = Call[Base] : func:r810_5, this:r810_3, 0:r810_8 +# 810| mu810_10(unknown) = ^CallSideEffect : ~m? +# 810| v810_11(void) = ^BufferReadSideEffect[0] : &:r810_8, ~m? +# 810| mu810_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_3 +# 810| r810_13(glval) = Convert : r810_3 +# 810| r810_14(Base &) = CopyValue : r810_13 +# 810| r810_15(Base &) = Call[operator=] : func:r810_2, this:r810_1, 0:r810_14 +# 810| mu810_16(unknown) = ^CallSideEffect : ~m? +# 810| v810_17(void) = ^IndirectReadSideEffect[-1] : &:r810_1, ~m? +# 810| v810_18(void) = ^BufferReadSideEffect[0] : &:r810_14, ~m? +# 810| mu810_19(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_1 +# 810| r810_20(glval) = CopyValue : r810_3 +# 810| r810_21(glval) = FunctionAddress[~Base] : +# 810| v810_22(void) = Call[~Base] : func:r810_21, this:r810_20 +# 810| mu810_23(unknown) = ^CallSideEffect : ~m? +# 810| v810_24(void) = ^IndirectReadSideEffect[-1] : &:r810_20, ~m? +# 810| mu810_25(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_20 +# 810| r810_26(glval) = CopyValue : r810_15 # 811| r811_1(glval) = VariableAddress[pm] : # 811| r811_2(Middle *) = Load[pm] : &:r811_1, m805_4 # 811| r811_3(Base *) = ConvertToNonVirtualBase[Middle : Base] : r811_2 @@ -8180,13 +7520,11 @@ ir.cpp: # 816| r816_5(glval) = Convert : r816_4 # 816| r816_6(Middle &) = CopyValue : r816_5 # 816| r816_7(Middle &) = Call[operator=] : func:r816_2, this:r816_1, 0:r816_6 -# 816| m816_8(unknown) = ^CallSideEffect : ~m810_32 -# 816| m816_9(unknown) = Chi : total:m810_32, partial:m816_8 -# 816| v816_10(void) = ^IndirectReadSideEffect[-1] : &:r816_1, ~m816_9 -# 816| v816_11(void) = ^BufferReadSideEffect[0] : &:r816_6, ~m816_9 -# 816| m816_12(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r816_1 -# 816| m816_13(unknown) = Chi : total:m816_9, partial:m816_12 -# 816| r816_14(glval) = CopyValue : r816_7 +# 816| mu816_8(unknown) = ^CallSideEffect : ~m? +# 816| v816_9(void) = ^IndirectReadSideEffect[-1] : &:r816_1, ~m? +# 816| v816_10(void) = ^BufferReadSideEffect[0] : &:r816_6, ~m? +# 816| mu816_11(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r816_1 +# 816| r816_12(glval) = CopyValue : r816_7 # 817| r817_1(glval) = VariableAddress[m] : # 817| r817_2(glval) = FunctionAddress[operator=] : # 817| r817_3(glval) = VariableAddress[b] : @@ -8194,13 +7532,11 @@ ir.cpp: # 817| r817_5(glval) = Convert : r817_4 # 817| r817_6(Middle &) = CopyValue : r817_5 # 817| r817_7(Middle &) = Call[operator=] : func:r817_2, this:r817_1, 0:r817_6 -# 817| m817_8(unknown) = ^CallSideEffect : ~m816_13 -# 817| m817_9(unknown) = Chi : total:m816_13, partial:m817_8 -# 817| v817_10(void) = ^IndirectReadSideEffect[-1] : &:r817_1, ~m817_9 -# 817| v817_11(void) = ^BufferReadSideEffect[0] : &:r817_6, ~m817_9 -# 817| m817_12(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r817_1 -# 817| m817_13(unknown) = Chi : total:m817_9, partial:m817_12 -# 817| r817_14(glval) = CopyValue : r817_7 +# 817| mu817_8(unknown) = ^CallSideEffect : ~m? +# 817| v817_9(void) = ^IndirectReadSideEffect[-1] : &:r817_1, ~m? +# 817| v817_10(void) = ^BufferReadSideEffect[0] : &:r817_6, ~m? +# 817| mu817_11(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r817_1 +# 817| r817_12(glval) = CopyValue : r817_7 # 818| r818_1(glval) = VariableAddress[pb] : # 818| r818_2(Base *) = Load[pb] : &:r818_1, m814_5 # 818| r818_3(Middle *) = ConvertToDerived[Middle : Base] : r818_2 @@ -8223,81 +7559,65 @@ ir.cpp: # 822| r822_5(glval) = ConvertToNonVirtualBase[Middle : Base] : r822_4 # 822| r822_6(Base &) = CopyValue : r822_5 # 822| r822_7(Base &) = Call[operator=] : func:r822_2, this:r822_1, 0:r822_6 -# 822| m822_8(unknown) = ^CallSideEffect : ~m817_13 -# 822| m822_9(unknown) = Chi : total:m817_13, partial:m822_8 -# 822| v822_10(void) = ^IndirectReadSideEffect[-1] : &:r822_1, ~m822_9 -# 822| v822_11(void) = ^BufferReadSideEffect[0] : &:r822_6, ~m822_9 -# 822| m822_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r822_1 -# 822| m822_13(unknown) = Chi : total:m822_9, partial:m822_12 -# 822| r822_14(glval) = CopyValue : r822_7 +# 822| mu822_8(unknown) = ^CallSideEffect : ~m? +# 822| v822_9(void) = ^IndirectReadSideEffect[-1] : &:r822_1, ~m? +# 822| v822_10(void) = ^BufferReadSideEffect[0] : &:r822_6, ~m? +# 822| mu822_11(Base) = ^IndirectMayWriteSideEffect[-1] : &:r822_1 +# 822| r822_12(glval) = CopyValue : r822_7 # 823| r823_1(glval) = VariableAddress[b] : # 823| r823_2(glval) = FunctionAddress[operator=] : # 823| r823_3(glval) = VariableAddress[#temp823:7] : -# 823| m823_4(Base) = Uninitialized[#temp823:7] : &:r823_3 -# 823| m823_5(unknown) = Chi : total:m822_13, partial:m823_4 -# 823| r823_6(glval) = FunctionAddress[Base] : -# 823| r823_7(glval) = VariableAddress[d] : -# 823| r823_8(glval) = ConvertToNonVirtualBase[Derived : Middle] : r823_7 -# 823| r823_9(glval) = ConvertToNonVirtualBase[Middle : Base] : r823_8 -# 823| r823_10(Base &) = CopyValue : r823_9 -# 823| v823_11(void) = Call[Base] : func:r823_6, this:r823_3, 0:r823_10 -# 823| m823_12(unknown) = ^CallSideEffect : ~m823_5 -# 823| m823_13(unknown) = Chi : total:m823_5, partial:m823_12 -# 823| v823_14(void) = ^BufferReadSideEffect[0] : &:r823_10, ~m823_13 -# 823| m823_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_3 -# 823| m823_16(unknown) = Chi : total:m823_13, partial:m823_15 -# 823| r823_17(glval) = Convert : r823_3 -# 823| r823_18(Base &) = CopyValue : r823_17 -# 823| r823_19(Base &) = Call[operator=] : func:r823_2, this:r823_1, 0:r823_18 -# 823| m823_20(unknown) = ^CallSideEffect : ~m823_16 -# 823| m823_21(unknown) = Chi : total:m823_16, partial:m823_20 -# 823| v823_22(void) = ^IndirectReadSideEffect[-1] : &:r823_1, ~m823_21 -# 823| v823_23(void) = ^BufferReadSideEffect[0] : &:r823_18, ~m823_21 -# 823| m823_24(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_1 -# 823| m823_25(unknown) = Chi : total:m823_21, partial:m823_24 -# 823| r823_26(glval) = CopyValue : r823_3 -# 823| r823_27(glval) = FunctionAddress[~Base] : -# 823| v823_28(void) = Call[~Base] : func:r823_27, this:r823_26 -# 823| m823_29(unknown) = ^CallSideEffect : ~m823_25 -# 823| m823_30(unknown) = Chi : total:m823_25, partial:m823_29 -# 823| v823_31(void) = ^IndirectReadSideEffect[-1] : &:r823_26, ~m823_30 -# 823| m823_32(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_26 -# 823| m823_33(unknown) = Chi : total:m823_30, partial:m823_32 -# 823| r823_34(glval) = CopyValue : r823_19 +# 823| mu823_4(Base) = Uninitialized[#temp823:7] : &:r823_3 +# 823| r823_5(glval) = FunctionAddress[Base] : +# 823| r823_6(glval) = VariableAddress[d] : +# 823| r823_7(glval) = ConvertToNonVirtualBase[Derived : Middle] : r823_6 +# 823| r823_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r823_7 +# 823| r823_9(Base &) = CopyValue : r823_8 +# 823| v823_10(void) = Call[Base] : func:r823_5, this:r823_3, 0:r823_9 +# 823| mu823_11(unknown) = ^CallSideEffect : ~m? +# 823| v823_12(void) = ^BufferReadSideEffect[0] : &:r823_9, ~m? +# 823| mu823_13(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_3 +# 823| r823_14(glval) = Convert : r823_3 +# 823| r823_15(Base &) = CopyValue : r823_14 +# 823| r823_16(Base &) = Call[operator=] : func:r823_2, this:r823_1, 0:r823_15 +# 823| mu823_17(unknown) = ^CallSideEffect : ~m? +# 823| v823_18(void) = ^IndirectReadSideEffect[-1] : &:r823_1, ~m? +# 823| v823_19(void) = ^BufferReadSideEffect[0] : &:r823_15, ~m? +# 823| mu823_20(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_1 +# 823| r823_21(glval) = CopyValue : r823_3 +# 823| r823_22(glval) = FunctionAddress[~Base] : +# 823| v823_23(void) = Call[~Base] : func:r823_22, this:r823_21 +# 823| mu823_24(unknown) = ^CallSideEffect : ~m? +# 823| v823_25(void) = ^IndirectReadSideEffect[-1] : &:r823_21, ~m? +# 823| mu823_26(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_21 +# 823| r823_27(glval) = CopyValue : r823_16 # 824| r824_1(glval) = VariableAddress[b] : # 824| r824_2(glval) = FunctionAddress[operator=] : # 824| r824_3(glval) = VariableAddress[#temp824:7] : -# 824| m824_4(Base) = Uninitialized[#temp824:7] : &:r824_3 -# 824| m824_5(unknown) = Chi : total:m823_33, partial:m824_4 -# 824| r824_6(glval) = FunctionAddress[Base] : -# 824| r824_7(glval) = VariableAddress[d] : -# 824| r824_8(glval) = ConvertToNonVirtualBase[Derived : Middle] : r824_7 -# 824| r824_9(glval) = ConvertToNonVirtualBase[Middle : Base] : r824_8 -# 824| r824_10(Base &) = CopyValue : r824_9 -# 824| v824_11(void) = Call[Base] : func:r824_6, this:r824_3, 0:r824_10 -# 824| m824_12(unknown) = ^CallSideEffect : ~m824_5 -# 824| m824_13(unknown) = Chi : total:m824_5, partial:m824_12 -# 824| v824_14(void) = ^BufferReadSideEffect[0] : &:r824_10, ~m824_13 -# 824| m824_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_3 -# 824| m824_16(unknown) = Chi : total:m824_13, partial:m824_15 -# 824| r824_17(glval) = Convert : r824_3 -# 824| r824_18(Base &) = CopyValue : r824_17 -# 824| r824_19(Base &) = Call[operator=] : func:r824_2, this:r824_1, 0:r824_18 -# 824| m824_20(unknown) = ^CallSideEffect : ~m824_16 -# 824| m824_21(unknown) = Chi : total:m824_16, partial:m824_20 -# 824| v824_22(void) = ^IndirectReadSideEffect[-1] : &:r824_1, ~m824_21 -# 824| v824_23(void) = ^BufferReadSideEffect[0] : &:r824_18, ~m824_21 -# 824| m824_24(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_1 -# 824| m824_25(unknown) = Chi : total:m824_21, partial:m824_24 -# 824| r824_26(glval) = CopyValue : r824_3 -# 824| r824_27(glval) = FunctionAddress[~Base] : -# 824| v824_28(void) = Call[~Base] : func:r824_27, this:r824_26 -# 824| m824_29(unknown) = ^CallSideEffect : ~m824_25 -# 824| m824_30(unknown) = Chi : total:m824_25, partial:m824_29 -# 824| v824_31(void) = ^IndirectReadSideEffect[-1] : &:r824_26, ~m824_30 -# 824| m824_32(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_26 -# 824| m824_33(unknown) = Chi : total:m824_30, partial:m824_32 -# 824| r824_34(glval) = CopyValue : r824_19 +# 824| mu824_4(Base) = Uninitialized[#temp824:7] : &:r824_3 +# 824| r824_5(glval) = FunctionAddress[Base] : +# 824| r824_6(glval) = VariableAddress[d] : +# 824| r824_7(glval) = ConvertToNonVirtualBase[Derived : Middle] : r824_6 +# 824| r824_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r824_7 +# 824| r824_9(Base &) = CopyValue : r824_8 +# 824| v824_10(void) = Call[Base] : func:r824_5, this:r824_3, 0:r824_9 +# 824| mu824_11(unknown) = ^CallSideEffect : ~m? +# 824| v824_12(void) = ^BufferReadSideEffect[0] : &:r824_9, ~m? +# 824| mu824_13(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_3 +# 824| r824_14(glval) = Convert : r824_3 +# 824| r824_15(Base &) = CopyValue : r824_14 +# 824| r824_16(Base &) = Call[operator=] : func:r824_2, this:r824_1, 0:r824_15 +# 824| mu824_17(unknown) = ^CallSideEffect : ~m? +# 824| v824_18(void) = ^IndirectReadSideEffect[-1] : &:r824_1, ~m? +# 824| v824_19(void) = ^BufferReadSideEffect[0] : &:r824_15, ~m? +# 824| mu824_20(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_1 +# 824| r824_21(glval) = CopyValue : r824_3 +# 824| r824_22(glval) = FunctionAddress[~Base] : +# 824| v824_23(void) = Call[~Base] : func:r824_22, this:r824_21 +# 824| mu824_24(unknown) = ^CallSideEffect : ~m? +# 824| v824_25(void) = ^IndirectReadSideEffect[-1] : &:r824_21, ~m? +# 824| mu824_26(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_21 +# 824| r824_27(glval) = CopyValue : r824_16 # 825| r825_1(glval) = VariableAddress[pd] : # 825| r825_2(Derived *) = Load[pd] : &:r825_1, m806_4 # 825| r825_3(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r825_2 @@ -8329,13 +7649,11 @@ ir.cpp: # 830| r830_6(glval) = Convert : r830_5 # 830| r830_7(Derived &) = CopyValue : r830_6 # 830| r830_8(Derived &) = Call[operator=] : func:r830_2, this:r830_1, 0:r830_7 -# 830| m830_9(unknown) = ^CallSideEffect : ~m824_33 -# 830| m830_10(unknown) = Chi : total:m824_33, partial:m830_9 -# 830| v830_11(void) = ^IndirectReadSideEffect[-1] : &:r830_1, ~m830_10 -# 830| v830_12(void) = ^BufferReadSideEffect[0] : &:r830_7, ~m830_10 -# 830| m830_13(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r830_1 -# 830| m830_14(unknown) = Chi : total:m830_10, partial:m830_13 -# 830| r830_15(glval) = CopyValue : r830_8 +# 830| mu830_9(unknown) = ^CallSideEffect : ~m? +# 830| v830_10(void) = ^IndirectReadSideEffect[-1] : &:r830_1, ~m? +# 830| v830_11(void) = ^BufferReadSideEffect[0] : &:r830_7, ~m? +# 830| mu830_12(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r830_1 +# 830| r830_13(glval) = CopyValue : r830_8 # 831| r831_1(glval) = VariableAddress[d] : # 831| r831_2(glval) = FunctionAddress[operator=] : # 831| r831_3(glval) = VariableAddress[b] : @@ -8344,13 +7662,11 @@ ir.cpp: # 831| r831_6(glval) = Convert : r831_5 # 831| r831_7(Derived &) = CopyValue : r831_6 # 831| r831_8(Derived &) = Call[operator=] : func:r831_2, this:r831_1, 0:r831_7 -# 831| m831_9(unknown) = ^CallSideEffect : ~m830_14 -# 831| m831_10(unknown) = Chi : total:m830_14, partial:m831_9 -# 831| v831_11(void) = ^IndirectReadSideEffect[-1] : &:r831_1, ~m831_10 -# 831| v831_12(void) = ^BufferReadSideEffect[0] : &:r831_7, ~m831_10 -# 831| m831_13(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r831_1 -# 831| m831_14(unknown) = Chi : total:m831_10, partial:m831_13 -# 831| r831_15(glval) = CopyValue : r831_8 +# 831| mu831_9(unknown) = ^CallSideEffect : ~m? +# 831| v831_10(void) = ^IndirectReadSideEffect[-1] : &:r831_1, ~m? +# 831| v831_11(void) = ^BufferReadSideEffect[0] : &:r831_7, ~m? +# 831| mu831_12(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r831_1 +# 831| r831_13(glval) = CopyValue : r831_8 # 832| r832_1(glval) = VariableAddress[pb] : # 832| r832_2(Base *) = Load[pb] : &:r832_1, m828_5 # 832| r832_3(Middle *) = ConvertToDerived[Middle : Base] : r832_2 @@ -8388,116 +7704,96 @@ ir.cpp: # 840| r840_2(glval) = VariableAddress[d] : # 840| r840_3(glval) = FunctionAddress[~Derived] : # 840| v840_4(void) = Call[~Derived] : func:r840_3, this:r840_2 -# 840| m840_5(unknown) = ^CallSideEffect : ~m831_14 -# 840| m840_6(unknown) = Chi : total:m831_14, partial:m840_5 -# 840| v840_7(void) = ^IndirectReadSideEffect[-1] : &:r840_2, ~m840_6 -# 840| m840_8(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r840_2 -# 840| m840_9(unknown) = Chi : total:m840_6, partial:m840_8 -# 840| r840_10(glval) = VariableAddress[m] : -# 840| r840_11(glval) = FunctionAddress[~Middle] : -# 840| v840_12(void) = Call[~Middle] : func:r840_11, this:r840_10 -# 840| m840_13(unknown) = ^CallSideEffect : ~m840_9 -# 840| m840_14(unknown) = Chi : total:m840_9, partial:m840_13 -# 840| v840_15(void) = ^IndirectReadSideEffect[-1] : &:r840_10, ~m840_14 -# 840| m840_16(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r840_10 -# 840| m840_17(unknown) = Chi : total:m840_14, partial:m840_16 -# 840| r840_18(glval) = VariableAddress[b] : -# 840| r840_19(glval) = FunctionAddress[~Base] : -# 840| v840_20(void) = Call[~Base] : func:r840_19, this:r840_18 -# 840| m840_21(unknown) = ^CallSideEffect : ~m840_17 -# 840| m840_22(unknown) = Chi : total:m840_17, partial:m840_21 -# 840| v840_23(void) = ^IndirectReadSideEffect[-1] : &:r840_18, ~m840_22 -# 840| m840_24(Base) = ^IndirectMayWriteSideEffect[-1] : &:r840_18 -# 840| m840_25(unknown) = Chi : total:m840_22, partial:m840_24 -# 799| v799_5(void) = ReturnVoid : -# 799| v799_6(void) = AliasedUse : ~m840_22 -# 799| v799_7(void) = ExitFunction : +# 840| mu840_5(unknown) = ^CallSideEffect : ~m? +# 840| v840_6(void) = ^IndirectReadSideEffect[-1] : &:r840_2, ~m? +# 840| mu840_7(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r840_2 +# 840| r840_8(glval) = VariableAddress[m] : +# 840| r840_9(glval) = FunctionAddress[~Middle] : +# 840| v840_10(void) = Call[~Middle] : func:r840_9, this:r840_8 +# 840| mu840_11(unknown) = ^CallSideEffect : ~m? +# 840| v840_12(void) = ^IndirectReadSideEffect[-1] : &:r840_8, ~m? +# 840| mu840_13(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r840_8 +# 840| r840_14(glval) = VariableAddress[b] : +# 840| r840_15(glval) = FunctionAddress[~Base] : +# 840| v840_16(void) = Call[~Base] : func:r840_15, this:r840_14 +# 840| mu840_17(unknown) = ^CallSideEffect : ~m? +# 840| v840_18(void) = ^IndirectReadSideEffect[-1] : &:r840_14, ~m? +# 840| mu840_19(Base) = ^IndirectMayWriteSideEffect[-1] : &:r840_14 +# 799| v799_4(void) = ReturnVoid : +# 799| v799_5(void) = AliasedUse : ~m? +# 799| v799_6(void) = ExitFunction : # 842| void PolymorphicBase::PolymorphicBase() # 842| Block 0 # 842| v842_1(void) = EnterFunction : -# 842| m842_2(unknown) = AliasedDefinition : -# 842| m842_3(unknown) = InitializeNonLocal : -# 842| m842_4(unknown) = Chi : total:m842_2, partial:m842_3 -# 842| r842_5(glval) = VariableAddress[#this] : -# 842| m842_6(glval) = InitializeParameter[#this] : &:r842_5 -# 842| r842_7(glval) = Load[#this] : &:r842_5, m842_6 -# 842| m842_8(PolymorphicBase) = InitializeIndirection[#this] : &:r842_7 -# 842| v842_9(void) = NoOp : -# 842| v842_10(void) = ReturnIndirection[#this] : &:r842_7, m842_8 -# 842| v842_11(void) = ReturnVoid : -# 842| v842_12(void) = AliasedUse : m842_3 -# 842| v842_13(void) = ExitFunction : +# 842| mu842_2(unknown) = AliasedDefinition : +# 842| mu842_3(unknown) = InitializeNonLocal : +# 842| r842_4(glval) = VariableAddress[#this] : +# 842| m842_5(glval) = InitializeParameter[#this] : &:r842_4 +# 842| r842_6(glval) = Load[#this] : &:r842_4, m842_5 +# 842| mu842_7(PolymorphicBase) = InitializeIndirection[#this] : &:r842_6 +# 842| v842_8(void) = NoOp : +# 842| v842_9(void) = ReturnIndirection[#this] : &:r842_6, ~m? +# 842| v842_10(void) = ReturnVoid : +# 842| v842_11(void) = AliasedUse : ~m? +# 842| v842_12(void) = ExitFunction : # 846| void PolymorphicDerived::PolymorphicDerived() # 846| Block 0 # 846| v846_1(void) = EnterFunction : -# 846| m846_2(unknown) = AliasedDefinition : -# 846| m846_3(unknown) = InitializeNonLocal : -# 846| m846_4(unknown) = Chi : total:m846_2, partial:m846_3 -# 846| r846_5(glval) = VariableAddress[#this] : -# 846| m846_6(glval) = InitializeParameter[#this] : &:r846_5 -# 846| r846_7(glval) = Load[#this] : &:r846_5, m846_6 -# 846| m846_8(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_7 -# 846| r846_9(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_7 -# 846| r846_10(glval) = FunctionAddress[PolymorphicBase] : -# 846| v846_11(void) = Call[PolymorphicBase] : func:r846_10, this:r846_9 -# 846| m846_12(unknown) = ^CallSideEffect : ~m846_4 -# 846| m846_13(unknown) = Chi : total:m846_4, partial:m846_12 -# 846| m846_14(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r846_9 -# 846| m846_15(unknown) = Chi : total:m846_8, partial:m846_14 -# 846| v846_16(void) = NoOp : -# 846| v846_17(void) = ReturnIndirection[#this] : &:r846_7, m846_15 -# 846| v846_18(void) = ReturnVoid : -# 846| v846_19(void) = AliasedUse : ~m846_13 -# 846| v846_20(void) = ExitFunction : +# 846| mu846_2(unknown) = AliasedDefinition : +# 846| mu846_3(unknown) = InitializeNonLocal : +# 846| r846_4(glval) = VariableAddress[#this] : +# 846| m846_5(glval) = InitializeParameter[#this] : &:r846_4 +# 846| r846_6(glval) = Load[#this] : &:r846_4, m846_5 +# 846| mu846_7(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_6 +# 846| r846_8(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_6 +# 846| r846_9(glval) = FunctionAddress[PolymorphicBase] : +# 846| v846_10(void) = Call[PolymorphicBase] : func:r846_9, this:r846_8 +# 846| mu846_11(unknown) = ^CallSideEffect : ~m? +# 846| mu846_12(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r846_8 +# 846| v846_13(void) = NoOp : +# 846| v846_14(void) = ReturnIndirection[#this] : &:r846_6, ~m? +# 846| v846_15(void) = ReturnVoid : +# 846| v846_16(void) = AliasedUse : ~m? +# 846| v846_17(void) = ExitFunction : # 846| void PolymorphicDerived::~PolymorphicDerived() # 846| Block 0 # 846| v846_1(void) = EnterFunction : -# 846| m846_2(unknown) = AliasedDefinition : -# 846| m846_3(unknown) = InitializeNonLocal : -# 846| m846_4(unknown) = Chi : total:m846_2, partial:m846_3 -# 846| r846_5(glval) = VariableAddress[#this] : -# 846| m846_6(glval) = InitializeParameter[#this] : &:r846_5 -# 846| r846_7(glval) = Load[#this] : &:r846_5, m846_6 -# 846| m846_8(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_7 -# 846| m846_9(unknown) = Chi : total:m846_4, partial:m846_8 +# 846| mu846_2(unknown) = AliasedDefinition : +# 846| mu846_3(unknown) = InitializeNonLocal : +# 846| r846_4(glval) = VariableAddress[#this] : +# 846| m846_5(glval) = InitializeParameter[#this] : &:r846_4 +# 846| r846_6(glval) = Load[#this] : &:r846_4, m846_5 +# 846| mu846_7(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_6 #-----| v0_1(void) = NoOp : -# 846| r846_10(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_7 -# 846| r846_11(glval) = FunctionAddress[~PolymorphicBase] : -# 846| v846_12(void) = Call[~PolymorphicBase] : func:r846_11, this:r846_10 -# 846| m846_13(unknown) = ^CallSideEffect : ~m846_9 -# 846| m846_14(unknown) = Chi : total:m846_9, partial:m846_13 -# 846| v846_15(void) = ReturnIndirection[#this] : &:r846_7, ~m846_14 -# 846| v846_16(void) = ReturnVoid : -# 846| v846_17(void) = AliasedUse : ~m846_14 -# 846| v846_18(void) = ExitFunction : +# 846| r846_8(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_6 +# 846| r846_9(glval) = FunctionAddress[~PolymorphicBase] : +# 846| v846_10(void) = Call[~PolymorphicBase] : func:r846_9, this:r846_8 +# 846| mu846_11(unknown) = ^CallSideEffect : ~m? +# 846| v846_12(void) = ReturnIndirection[#this] : &:r846_6, ~m? +# 846| v846_13(void) = ReturnVoid : +# 846| v846_14(void) = AliasedUse : ~m? +# 846| v846_15(void) = ExitFunction : # 849| void DynamicCast() # 849| Block 0 # 849| v849_1(void) = EnterFunction : -# 849| m849_2(unknown) = AliasedDefinition : -# 849| m849_3(unknown) = InitializeNonLocal : -# 849| m849_4(unknown) = Chi : total:m849_2, partial:m849_3 +# 849| mu849_2(unknown) = AliasedDefinition : +# 849| mu849_3(unknown) = InitializeNonLocal : # 850| r850_1(glval) = VariableAddress[b] : -# 850| m850_2(PolymorphicBase) = Uninitialized[b] : &:r850_1 -# 850| m850_3(unknown) = Chi : total:m849_4, partial:m850_2 -# 850| r850_4(glval) = FunctionAddress[PolymorphicBase] : -# 850| v850_5(void) = Call[PolymorphicBase] : func:r850_4, this:r850_1 -# 850| m850_6(unknown) = ^CallSideEffect : ~m850_3 -# 850| m850_7(unknown) = Chi : total:m850_3, partial:m850_6 -# 850| m850_8(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r850_1 -# 850| m850_9(unknown) = Chi : total:m850_7, partial:m850_8 +# 850| mu850_2(PolymorphicBase) = Uninitialized[b] : &:r850_1 +# 850| r850_3(glval) = FunctionAddress[PolymorphicBase] : +# 850| v850_4(void) = Call[PolymorphicBase] : func:r850_3, this:r850_1 +# 850| mu850_5(unknown) = ^CallSideEffect : ~m? +# 850| mu850_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r850_1 # 851| r851_1(glval) = VariableAddress[d] : -# 851| m851_2(PolymorphicDerived) = Uninitialized[d] : &:r851_1 -# 851| m851_3(unknown) = Chi : total:m850_9, partial:m851_2 -# 851| r851_4(glval) = FunctionAddress[PolymorphicDerived] : -# 851| v851_5(void) = Call[PolymorphicDerived] : func:r851_4, this:r851_1 -# 851| m851_6(unknown) = ^CallSideEffect : ~m851_3 -# 851| m851_7(unknown) = Chi : total:m851_3, partial:m851_6 -# 851| m851_8(PolymorphicDerived) = ^IndirectMayWriteSideEffect[-1] : &:r851_1 -# 851| m851_9(unknown) = Chi : total:m851_7, partial:m851_8 +# 851| mu851_2(PolymorphicDerived) = Uninitialized[d] : &:r851_1 +# 851| r851_3(glval) = FunctionAddress[PolymorphicDerived] : +# 851| v851_4(void) = Call[PolymorphicDerived] : func:r851_3, this:r851_1 +# 851| mu851_5(unknown) = ^CallSideEffect : ~m? +# 851| mu851_6(PolymorphicDerived) = ^IndirectMayWriteSideEffect[-1] : &:r851_1 # 853| r853_1(glval) = VariableAddress[pb] : # 853| r853_2(glval) = VariableAddress[b] : # 853| r853_3(PolymorphicBase *) = CopyValue : r853_2 @@ -8540,57 +7836,48 @@ ir.cpp: # 865| r865_2(glval) = VariableAddress[d] : # 865| r865_3(glval) = FunctionAddress[~PolymorphicDerived] : # 865| v865_4(void) = Call[~PolymorphicDerived] : func:r865_3, this:r865_2 -# 865| m865_5(unknown) = ^CallSideEffect : ~m851_9 -# 865| m865_6(unknown) = Chi : total:m851_9, partial:m865_5 -# 865| v865_7(void) = ^IndirectReadSideEffect[-1] : &:r865_2, ~m865_6 -# 865| m865_8(PolymorphicDerived) = ^IndirectMayWriteSideEffect[-1] : &:r865_2 -# 865| m865_9(unknown) = Chi : total:m865_6, partial:m865_8 -# 865| r865_10(glval) = VariableAddress[b] : -# 865| r865_11(glval) = FunctionAddress[~PolymorphicBase] : -# 865| v865_12(void) = Call[~PolymorphicBase] : func:r865_11, this:r865_10 -# 865| m865_13(unknown) = ^CallSideEffect : ~m865_9 -# 865| m865_14(unknown) = Chi : total:m865_9, partial:m865_13 -# 865| v865_15(void) = ^IndirectReadSideEffect[-1] : &:r865_10, ~m865_14 -# 865| m865_16(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r865_10 -# 865| m865_17(unknown) = Chi : total:m865_14, partial:m865_16 -# 849| v849_5(void) = ReturnVoid : -# 849| v849_6(void) = AliasedUse : ~m865_14 -# 849| v849_7(void) = ExitFunction : +# 865| mu865_5(unknown) = ^CallSideEffect : ~m? +# 865| v865_6(void) = ^IndirectReadSideEffect[-1] : &:r865_2, ~m? +# 865| mu865_7(PolymorphicDerived) = ^IndirectMayWriteSideEffect[-1] : &:r865_2 +# 865| r865_8(glval) = VariableAddress[b] : +# 865| r865_9(glval) = FunctionAddress[~PolymorphicBase] : +# 865| v865_10(void) = Call[~PolymorphicBase] : func:r865_9, this:r865_8 +# 865| mu865_11(unknown) = ^CallSideEffect : ~m? +# 865| v865_12(void) = ^IndirectReadSideEffect[-1] : &:r865_8, ~m? +# 865| mu865_13(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r865_8 +# 849| v849_4(void) = ReturnVoid : +# 849| v849_5(void) = AliasedUse : ~m? +# 849| v849_6(void) = ExitFunction : # 867| void String::String() # 867| Block 0 # 867| v867_1(void) = EnterFunction : -# 867| m867_2(unknown) = AliasedDefinition : -# 867| m867_3(unknown) = InitializeNonLocal : -# 867| m867_4(unknown) = Chi : total:m867_2, partial:m867_3 -# 867| r867_5(glval) = VariableAddress[#this] : -# 867| m867_6(glval) = InitializeParameter[#this] : &:r867_5 -# 867| r867_7(glval) = Load[#this] : &:r867_5, m867_6 -# 867| m867_8(String) = InitializeIndirection[#this] : &:r867_7 -# 867| m867_9(unknown) = Chi : total:m867_4, partial:m867_8 +# 867| mu867_2(unknown) = AliasedDefinition : +# 867| mu867_3(unknown) = InitializeNonLocal : +# 867| r867_4(glval) = VariableAddress[#this] : +# 867| m867_5(glval) = InitializeParameter[#this] : &:r867_4 +# 867| r867_6(glval) = Load[#this] : &:r867_4, m867_5 +# 867| mu867_7(String) = InitializeIndirection[#this] : &:r867_6 # 868| r868_1(glval) = FunctionAddress[String] : # 868| r868_2(glval) = StringConstant[""] : # 868| r868_3(char *) = Convert : r868_2 -# 868| v868_4(void) = Call[String] : func:r868_1, this:r867_7, 0:r868_3 -# 868| m868_5(unknown) = ^CallSideEffect : ~m867_9 -# 868| m868_6(unknown) = Chi : total:m867_9, partial:m868_5 -# 868| v868_7(void) = ^BufferReadSideEffect[0] : &:r868_3, ~m867_3 -# 868| m868_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r867_7 -# 868| m868_9(unknown) = Chi : total:m868_6, partial:m868_8 +# 868| v868_4(void) = Call[String] : func:r868_1, this:r867_6, 0:r868_3 +# 868| mu868_5(unknown) = ^CallSideEffect : ~m? +# 868| v868_6(void) = ^BufferReadSideEffect[0] : &:r868_3, ~m? +# 868| mu868_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r867_6 # 869| v869_1(void) = NoOp : -# 867| v867_10(void) = ReturnIndirection[#this] : &:r867_7, ~m868_9 -# 867| v867_11(void) = ReturnVoid : -# 867| v867_12(void) = AliasedUse : ~m868_9 -# 867| v867_13(void) = ExitFunction : +# 867| v867_8(void) = ReturnIndirection[#this] : &:r867_6, ~m? +# 867| v867_9(void) = ReturnVoid : +# 867| v867_10(void) = AliasedUse : ~m? +# 867| v867_11(void) = ExitFunction : # 871| void ArrayConversions() # 871| Block 0 # 871| v871_1(void) = EnterFunction : -# 871| m871_2(unknown) = AliasedDefinition : -# 871| m871_3(unknown) = InitializeNonLocal : -# 871| m871_4(unknown) = Chi : total:m871_2, partial:m871_3 +# 871| mu871_2(unknown) = AliasedDefinition : +# 871| mu871_3(unknown) = InitializeNonLocal : # 872| r872_1(glval) = VariableAddress[a] : -# 872| m872_2(char[5]) = Uninitialized[a] : &:r872_1 +# 872| mu872_2(char[5]) = Uninitialized[a] : &:r872_1 # 873| r873_1(glval) = VariableAddress[p] : # 873| r873_2(glval) = VariableAddress[a] : # 873| r873_3(char *) = Convert : r873_2 @@ -8633,24 +7920,23 @@ ir.cpp: # 880| r880_3(glval) = VariableAddress[pa] : # 880| m880_4(char(*)[5]) = Store[pa] : &:r880_3, r880_2 # 881| v881_1(void) = NoOp : -# 871| v871_5(void) = ReturnVoid : -# 871| v871_6(void) = AliasedUse : m871_3 -# 871| v871_7(void) = ExitFunction : +# 871| v871_4(void) = ReturnVoid : +# 871| v871_5(void) = AliasedUse : ~m? +# 871| v871_6(void) = ExitFunction : # 883| void FuncPtrConversions(int(*)(int), void*) # 883| Block 0 # 883| v883_1(void) = EnterFunction : -# 883| m883_2(unknown) = AliasedDefinition : -# 883| m883_3(unknown) = InitializeNonLocal : -# 883| m883_4(unknown) = Chi : total:m883_2, partial:m883_3 -# 883| r883_5(glval<..(*)(..)>) = VariableAddress[pfn] : -# 883| m883_6(..(*)(..)) = InitializeParameter[pfn] : &:r883_5 -# 883| r883_7(glval) = VariableAddress[p] : -# 883| m883_8(void *) = InitializeParameter[p] : &:r883_7 -# 883| r883_9(void *) = Load[p] : &:r883_7, m883_8 -# 883| m883_10(unknown) = InitializeIndirection[p] : &:r883_9 +# 883| mu883_2(unknown) = AliasedDefinition : +# 883| mu883_3(unknown) = InitializeNonLocal : +# 883| r883_4(glval<..(*)(..)>) = VariableAddress[pfn] : +# 883| m883_5(..(*)(..)) = InitializeParameter[pfn] : &:r883_4 +# 883| r883_6(glval) = VariableAddress[p] : +# 883| m883_7(void *) = InitializeParameter[p] : &:r883_6 +# 883| r883_8(void *) = Load[p] : &:r883_6, m883_7 +# 883| mu883_9(unknown) = InitializeIndirection[p] : &:r883_8 # 884| r884_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 884| r884_2(..(*)(..)) = Load[pfn] : &:r884_1, m883_6 +# 884| r884_2(..(*)(..)) = Load[pfn] : &:r884_1, m883_5 # 884| r884_3(void *) = Convert : r884_2 # 884| r884_4(glval) = VariableAddress[p] : # 884| m884_5(void *) = Store[p] : &:r884_4, r884_3 @@ -8660,162 +7946,144 @@ ir.cpp: # 885| r885_4(glval<..(*)(..)>) = VariableAddress[pfn] : # 885| m885_5(..(*)(..)) = Store[pfn] : &:r885_4, r885_3 # 886| v886_1(void) = NoOp : -# 883| v883_11(void) = ReturnIndirection[p] : &:r883_9, m883_10 -# 883| v883_12(void) = ReturnVoid : -# 883| v883_13(void) = AliasedUse : m883_3 -# 883| v883_14(void) = ExitFunction : +# 883| v883_10(void) = ReturnIndirection[p] : &:r883_8, ~m? +# 883| v883_11(void) = ReturnVoid : +# 883| v883_12(void) = AliasedUse : ~m? +# 883| v883_13(void) = ExitFunction : # 888| void VAListUsage(int, __builtin_va_list) # 888| Block 0 # 888| v888_1(void) = EnterFunction : -# 888| m888_2(unknown) = AliasedDefinition : -# 888| m888_3(unknown) = InitializeNonLocal : -# 888| m888_4(unknown) = Chi : total:m888_2, partial:m888_3 -# 888| r888_5(glval) = VariableAddress[x] : -# 888| m888_6(int) = InitializeParameter[x] : &:r888_5 -# 888| r888_7(glval<__va_list_tag *>) = VariableAddress[args] : -# 888| m888_8(__va_list_tag *) = InitializeParameter[args] : &:r888_7 -# 888| r888_9(__va_list_tag *) = Load[args] : &:r888_7, m888_8 -# 888| m888_10(unknown) = InitializeIndirection[args] : &:r888_9 +# 888| mu888_2(unknown) = AliasedDefinition : +# 888| mu888_3(unknown) = InitializeNonLocal : +# 888| r888_4(glval) = VariableAddress[x] : +# 888| m888_5(int) = InitializeParameter[x] : &:r888_4 +# 888| r888_6(glval<__va_list_tag *>) = VariableAddress[args] : +# 888| m888_7(__va_list_tag *) = InitializeParameter[args] : &:r888_6 +# 888| r888_8(__va_list_tag *) = Load[args] : &:r888_6, m888_7 +# 888| mu888_9(unknown) = InitializeIndirection[args] : &:r888_8 # 889| r889_1(glval<__va_list_tag[1]>) = VariableAddress[args2] : -# 889| m889_2(__va_list_tag[1]) = Uninitialized[args2] : &:r889_1 -# 889| m889_3(unknown) = Chi : total:m888_4, partial:m889_2 +# 889| mu889_2(__va_list_tag[1]) = Uninitialized[args2] : &:r889_1 # 890| r890_1(glval<__va_list_tag *>) = VariableAddress[args] : -# 890| r890_2(__va_list_tag *) = Load[args] : &:r890_1, m888_8 -# 890| r890_3(__va_list_tag) = Load[?] : &:r890_2, ~m888_10 +# 890| r890_2(__va_list_tag *) = Load[args] : &:r890_1, m888_7 +# 890| r890_3(__va_list_tag) = Load[?] : &:r890_2, ~m? # 890| r890_4(glval<__va_list_tag[1]>) = VariableAddress[args2] : # 890| r890_5(__va_list_tag *) = Convert : r890_4 -# 890| m890_6(__va_list_tag) = Store[?] : &:r890_5, r890_3 -# 890| m890_7(unknown) = Chi : total:m889_3, partial:m890_6 +# 890| mu890_6(__va_list_tag) = Store[?] : &:r890_5, r890_3 # 891| r891_1(glval) = VariableAddress[d] : # 891| r891_2(glval<__va_list_tag *>) = VariableAddress[args] : -# 891| r891_3(__va_list_tag *) = Load[args] : &:r891_2, m888_8 -# 891| r891_4(__va_list_tag) = Load[?] : &:r891_3, ~m888_10 +# 891| r891_3(__va_list_tag *) = Load[args] : &:r891_2, m888_7 +# 891| r891_4(__va_list_tag) = Load[?] : &:r891_3, ~m? # 891| r891_5(glval) = VarArg : r891_4 # 891| r891_6(__va_list_tag) = NextVarArg : r891_4 -# 891| m891_7(__va_list_tag) = Store[?] : &:r891_3, r891_6 -# 891| m891_8(unknown) = Chi : total:m888_10, partial:m891_7 -# 891| r891_9(double) = Load[?] : &:r891_5, ~m890_7 -# 891| m891_10(double) = Store[d] : &:r891_1, r891_9 +# 891| mu891_7(__va_list_tag) = Store[?] : &:r891_3, r891_6 +# 891| r891_8(double) = Load[?] : &:r891_5, ~m? +# 891| m891_9(double) = Store[d] : &:r891_1, r891_8 # 892| r892_1(glval) = VariableAddress[f] : # 892| r892_2(glval<__va_list_tag *>) = VariableAddress[args] : -# 892| r892_3(__va_list_tag *) = Load[args] : &:r892_2, m888_8 -# 892| r892_4(__va_list_tag) = Load[?] : &:r892_3, m891_7 +# 892| r892_3(__va_list_tag *) = Load[args] : &:r892_2, m888_7 +# 892| r892_4(__va_list_tag) = Load[?] : &:r892_3, ~m? # 892| r892_5(glval) = VarArg : r892_4 # 892| r892_6(__va_list_tag) = NextVarArg : r892_4 -# 892| m892_7(__va_list_tag) = Store[?] : &:r892_3, r892_6 -# 892| m892_8(unknown) = Chi : total:m891_8, partial:m892_7 -# 892| r892_9(int) = Load[?] : &:r892_5, ~m890_7 -# 892| r892_10(float) = Convert : r892_9 -# 892| m892_11(float) = Store[f] : &:r892_1, r892_10 +# 892| mu892_7(__va_list_tag) = Store[?] : &:r892_3, r892_6 +# 892| r892_8(int) = Load[?] : &:r892_5, ~m? +# 892| r892_9(float) = Convert : r892_8 +# 892| m892_10(float) = Store[f] : &:r892_1, r892_9 # 893| r893_1(glval<__va_list_tag[1]>) = VariableAddress[args2] : # 893| r893_2(__va_list_tag *) = Convert : r893_1 # 893| v893_3(void) = VarArgsEnd : r893_2 # 894| v894_1(void) = NoOp : -# 888| v888_11(void) = ReturnIndirection[args] : &:r888_9, m892_8 -# 888| v888_12(void) = ReturnVoid : -# 888| v888_13(void) = AliasedUse : m888_3 -# 888| v888_14(void) = ExitFunction : +# 888| v888_10(void) = ReturnIndirection[args] : &:r888_8, ~m? +# 888| v888_11(void) = ReturnVoid : +# 888| v888_12(void) = AliasedUse : ~m? +# 888| v888_13(void) = ExitFunction : # 896| void VarArgUsage(int) # 896| Block 0 # 896| v896_1(void) = EnterFunction : -# 896| m896_2(unknown) = AliasedDefinition : -# 896| m896_3(unknown) = InitializeNonLocal : -# 896| m896_4(unknown) = Chi : total:m896_2, partial:m896_3 -# 896| r896_5(glval) = VariableAddress[x] : -# 896| m896_6(int) = InitializeParameter[x] : &:r896_5 -# 896| r896_7(glval) = VariableAddress[#ellipsis] : -# 896| m896_8(unknown[11]) = InitializeParameter[#ellipsis] : &:r896_7 -# 896| m896_9(unknown) = Chi : total:m896_4, partial:m896_8 -# 896| r896_10(unknown[11]) = Load[#ellipsis] : &:r896_7, m896_8 -# 896| mu896_11(unknown) = InitializeIndirection[#ellipsis] : &:r896_10 +# 896| mu896_2(unknown) = AliasedDefinition : +# 896| mu896_3(unknown) = InitializeNonLocal : +# 896| r896_4(glval) = VariableAddress[x] : +# 896| m896_5(int) = InitializeParameter[x] : &:r896_4 +# 896| r896_6(glval) = VariableAddress[#ellipsis] : +# 896| mu896_7(unknown[11]) = InitializeParameter[#ellipsis] : &:r896_6 +# 896| r896_8(unknown[11]) = Load[#ellipsis] : &:r896_6, ~m? +# 896| mu896_9(unknown) = InitializeIndirection[#ellipsis] : &:r896_8 # 897| r897_1(glval<__va_list_tag[1]>) = VariableAddress[args] : -# 897| m897_2(__va_list_tag[1]) = Uninitialized[args] : &:r897_1 -# 897| m897_3(unknown) = Chi : total:m896_9, partial:m897_2 +# 897| mu897_2(__va_list_tag[1]) = Uninitialized[args] : &:r897_1 # 899| r899_1(glval) = VariableAddress[#ellipsis] : # 899| r899_2(__va_list_tag) = VarArgsStart : r899_1 # 899| r899_3(glval<__va_list_tag[1]>) = VariableAddress[args] : # 899| r899_4(__va_list_tag *) = Convert : r899_3 -# 899| m899_5(__va_list_tag) = Store[?] : &:r899_4, r899_2 -# 899| m899_6(unknown) = Chi : total:m897_3, partial:m899_5 +# 899| mu899_5(__va_list_tag) = Store[?] : &:r899_4, r899_2 # 900| r900_1(glval<__va_list_tag[1]>) = VariableAddress[args2] : -# 900| m900_2(__va_list_tag[1]) = Uninitialized[args2] : &:r900_1 -# 900| m900_3(unknown) = Chi : total:m899_6, partial:m900_2 +# 900| mu900_2(__va_list_tag[1]) = Uninitialized[args2] : &:r900_1 # 901| r901_1(glval<__va_list_tag[1]>) = VariableAddress[args] : # 901| r901_2(__va_list_tag *) = Convert : r901_1 -# 901| r901_3(__va_list_tag) = Load[?] : &:r901_2, m899_5 +# 901| r901_3(__va_list_tag) = Load[?] : &:r901_2, ~m? # 901| r901_4(glval<__va_list_tag[1]>) = VariableAddress[args2] : # 901| r901_5(__va_list_tag *) = Convert : r901_4 -# 901| m901_6(__va_list_tag) = Store[?] : &:r901_5, r901_3 -# 901| m901_7(unknown) = Chi : total:m900_3, partial:m901_6 +# 901| mu901_6(__va_list_tag) = Store[?] : &:r901_5, r901_3 # 902| r902_1(glval) = VariableAddress[d] : # 902| r902_2(glval<__va_list_tag[1]>) = VariableAddress[args] : # 902| r902_3(__va_list_tag *) = Convert : r902_2 -# 902| r902_4(__va_list_tag) = Load[?] : &:r902_3, m899_5 +# 902| r902_4(__va_list_tag) = Load[?] : &:r902_3, ~m? # 902| r902_5(glval) = VarArg : r902_4 # 902| r902_6(__va_list_tag) = NextVarArg : r902_4 -# 902| m902_7(__va_list_tag) = Store[?] : &:r902_3, r902_6 -# 902| m902_8(unknown) = Chi : total:m901_7, partial:m902_7 -# 902| r902_9(double) = Load[?] : &:r902_5, ~m902_8 -# 902| m902_10(double) = Store[d] : &:r902_1, r902_9 +# 902| mu902_7(__va_list_tag) = Store[?] : &:r902_3, r902_6 +# 902| r902_8(double) = Load[?] : &:r902_5, ~m? +# 902| m902_9(double) = Store[d] : &:r902_1, r902_8 # 903| r903_1(glval) = VariableAddress[f] : # 903| r903_2(glval<__va_list_tag[1]>) = VariableAddress[args] : # 903| r903_3(__va_list_tag *) = Convert : r903_2 -# 903| r903_4(__va_list_tag) = Load[?] : &:r903_3, m902_7 +# 903| r903_4(__va_list_tag) = Load[?] : &:r903_3, ~m? # 903| r903_5(glval) = VarArg : r903_4 # 903| r903_6(__va_list_tag) = NextVarArg : r903_4 -# 903| m903_7(__va_list_tag) = Store[?] : &:r903_3, r903_6 -# 903| m903_8(unknown) = Chi : total:m902_8, partial:m903_7 -# 903| r903_9(int) = Load[?] : &:r903_5, ~m903_8 -# 903| r903_10(float) = Convert : r903_9 -# 903| m903_11(float) = Store[f] : &:r903_1, r903_10 +# 903| mu903_7(__va_list_tag) = Store[?] : &:r903_3, r903_6 +# 903| r903_8(int) = Load[?] : &:r903_5, ~m? +# 903| r903_9(float) = Convert : r903_8 +# 903| m903_10(float) = Store[f] : &:r903_1, r903_9 # 904| r904_1(glval<__va_list_tag[1]>) = VariableAddress[args] : # 904| r904_2(__va_list_tag *) = Convert : r904_1 # 904| v904_3(void) = VarArgsEnd : r904_2 # 905| r905_1(glval) = FunctionAddress[VAListUsage] : # 905| r905_2(glval) = VariableAddress[x] : -# 905| r905_3(int) = Load[x] : &:r905_2, m896_6 +# 905| r905_3(int) = Load[x] : &:r905_2, m896_5 # 905| r905_4(glval<__va_list_tag[1]>) = VariableAddress[args2] : # 905| r905_5(__va_list_tag *) = Convert : r905_4 # 905| v905_6(void) = Call[VAListUsage] : func:r905_1, 0:r905_3, 1:r905_5 -# 905| m905_7(unknown) = ^CallSideEffect : ~m903_8 -# 905| m905_8(unknown) = Chi : total:m903_8, partial:m905_7 -# 905| v905_9(void) = ^BufferReadSideEffect[1] : &:r905_5, ~m905_8 -# 905| m905_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r905_5 -# 905| m905_11(unknown) = Chi : total:m905_8, partial:m905_10 +# 905| mu905_7(unknown) = ^CallSideEffect : ~m? +# 905| v905_8(void) = ^BufferReadSideEffect[1] : &:r905_5, ~m? +# 905| mu905_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r905_5 # 906| r906_1(glval<__va_list_tag[1]>) = VariableAddress[args2] : # 906| r906_2(__va_list_tag *) = Convert : r906_1 # 906| v906_3(void) = VarArgsEnd : r906_2 # 907| v907_1(void) = NoOp : -# 896| v896_12(void) = ReturnVoid : -# 896| v896_13(void) = AliasedUse : ~m905_8 -# 896| v896_14(void) = ExitFunction : +# 896| v896_10(void) = ReturnVoid : +# 896| v896_11(void) = AliasedUse : ~m? +# 896| v896_12(void) = ExitFunction : # 909| void CastToVoid(int) # 909| Block 0 # 909| v909_1(void) = EnterFunction : -# 909| m909_2(unknown) = AliasedDefinition : -# 909| m909_3(unknown) = InitializeNonLocal : -# 909| m909_4(unknown) = Chi : total:m909_2, partial:m909_3 -# 909| r909_5(glval) = VariableAddress[x] : -# 909| m909_6(int) = InitializeParameter[x] : &:r909_5 -# 909| m909_7(unknown) = Chi : total:m909_4, partial:m909_6 +# 909| mu909_2(unknown) = AliasedDefinition : +# 909| mu909_3(unknown) = InitializeNonLocal : +# 909| r909_4(glval) = VariableAddress[x] : +# 909| mu909_5(int) = InitializeParameter[x] : &:r909_4 # 910| r910_1(glval) = VariableAddress[x] : # 910| v910_2(void) = Convert : r910_1 # 911| v911_1(void) = NoOp : -# 909| v909_8(void) = ReturnVoid : -# 909| v909_9(void) = AliasedUse : m909_3 -# 909| v909_10(void) = ExitFunction : +# 909| v909_6(void) = ReturnVoid : +# 909| v909_7(void) = AliasedUse : ~m? +# 909| v909_8(void) = ExitFunction : # 913| void ConstantConditions(int) # 913| Block 0 # 913| v913_1(void) = EnterFunction : -# 913| m913_2(unknown) = AliasedDefinition : -# 913| m913_3(unknown) = InitializeNonLocal : -# 913| m913_4(unknown) = Chi : total:m913_2, partial:m913_3 -# 913| r913_5(glval) = VariableAddress[x] : -# 913| m913_6(int) = InitializeParameter[x] : &:r913_5 +# 913| mu913_2(unknown) = AliasedDefinition : +# 913| mu913_3(unknown) = InitializeNonLocal : +# 913| r913_4(glval) = VariableAddress[x] : +# 913| m913_5(int) = InitializeParameter[x] : &:r913_4 # 914| r914_1(glval) = VariableAddress[a] : # 914| r914_2(bool) = Constant[1] : # 914| m914_3(bool) = Store[a] : &:r914_1, r914_2 @@ -8827,265 +8095,233 @@ ir.cpp: # 915| Block 1 # 915| r915_4(glval) = VariableAddress[x] : -# 915| r915_5(int) = Load[x] : &:r915_4, m913_6 +# 915| r915_5(int) = Load[x] : &:r915_4, m913_5 # 915| r915_6(glval) = VariableAddress[#temp915:11] : # 915| m915_7(int) = Store[#temp915:11] : &:r915_6, r915_5 # 915| r915_8(glval) = VariableAddress[#temp915:11] : # 915| r915_9(int) = Load[#temp915:11] : &:r915_8, m915_7 # 915| m915_10(int) = Store[b] : &:r915_1, r915_9 # 916| v916_1(void) = NoOp : -# 913| v913_7(void) = ReturnVoid : -# 913| v913_8(void) = AliasedUse : m913_3 -# 913| v913_9(void) = ExitFunction : +# 913| v913_6(void) = ReturnVoid : +# 913| v913_7(void) = AliasedUse : ~m? +# 913| v913_8(void) = ExitFunction : # 913| Block 2 -# 913| v913_10(void) = Unreached : +# 913| v913_9(void) = Unreached : # 949| void OperatorNew() # 949| Block 0 -# 949| v949_1(void) = EnterFunction : -# 949| m949_2(unknown) = AliasedDefinition : -# 949| m949_3(unknown) = InitializeNonLocal : -# 949| m949_4(unknown) = Chi : total:m949_2, partial:m949_3 -# 950| r950_1(glval) = FunctionAddress[operator new] : -# 950| r950_2(unsigned long) = Constant[4] : -# 950| r950_3(void *) = Call[operator new] : func:r950_1, 0:r950_2 -# 950| m950_4(unknown) = ^CallSideEffect : ~m949_4 -# 950| m950_5(unknown) = Chi : total:m949_4, partial:m950_4 -# 950| m950_6(unknown) = ^InitializeDynamicAllocation : &:r950_3 -# 950| r950_7(int *) = Convert : r950_3 -# 951| r951_1(glval) = FunctionAddress[operator new] : -# 951| r951_2(unsigned long) = Constant[4] : -# 951| r951_3(float) = Constant[1.0] : -# 951| r951_4(void *) = Call[operator new] : func:r951_1, 0:r951_2, 1:r951_3 -# 951| m951_5(unknown) = ^CallSideEffect : ~m950_5 -# 951| m951_6(unknown) = Chi : total:m950_5, partial:m951_5 -# 951| m951_7(unknown) = ^InitializeDynamicAllocation : &:r951_4 -# 951| r951_8(int *) = Convert : r951_4 -# 952| r952_1(glval) = FunctionAddress[operator new] : -# 952| r952_2(unsigned long) = Constant[4] : -# 952| r952_3(void *) = Call[operator new] : func:r952_1, 0:r952_2 -# 952| m952_4(unknown) = ^CallSideEffect : ~m951_6 -# 952| m952_5(unknown) = Chi : total:m951_6, partial:m952_4 -# 952| m952_6(unknown) = ^InitializeDynamicAllocation : &:r952_3 -# 952| r952_7(int *) = Convert : r952_3 -# 952| r952_8(int) = Constant[0] : -# 952| m952_9(int) = Store[?] : &:r952_7, r952_8 -# 952| m952_10(unknown) = Chi : total:m952_6, partial:m952_9 -# 953| r953_1(glval) = FunctionAddress[operator new] : -# 953| r953_2(unsigned long) = Constant[8] : -# 953| r953_3(void *) = Call[operator new] : func:r953_1, 0:r953_2 -# 953| m953_4(unknown) = ^CallSideEffect : ~m952_5 -# 953| m953_5(unknown) = Chi : total:m952_5, partial:m953_4 -# 953| m953_6(unknown) = ^InitializeDynamicAllocation : &:r953_3 -# 953| m953_7(unknown) = Chi : total:m953_5, partial:m953_6 -# 953| r953_8(String *) = Convert : r953_3 -# 953| r953_9(glval) = FunctionAddress[String] : -# 953| v953_10(void) = Call[String] : func:r953_9, this:r953_8 -# 953| m953_11(unknown) = ^CallSideEffect : ~m953_7 -# 953| m953_12(unknown) = Chi : total:m953_7, partial:m953_11 -# 953| m953_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r953_8 -# 953| m953_14(unknown) = Chi : total:m953_12, partial:m953_13 -# 954| r954_1(glval) = FunctionAddress[operator new] : -# 954| r954_2(unsigned long) = Constant[8] : -# 954| r954_3(float) = Constant[1.0] : -# 954| r954_4(void *) = Call[operator new] : func:r954_1, 0:r954_2, 1:r954_3 -# 954| m954_5(unknown) = ^CallSideEffect : ~m953_14 -# 954| m954_6(unknown) = Chi : total:m953_14, partial:m954_5 -# 954| m954_7(unknown) = ^InitializeDynamicAllocation : &:r954_4 -# 954| m954_8(unknown) = Chi : total:m954_6, partial:m954_7 -# 954| r954_9(String *) = Convert : r954_4 -# 954| r954_10(glval) = FunctionAddress[String] : -# 954| r954_11(glval) = StringConstant["hello"] : -# 954| r954_12(char *) = Convert : r954_11 -# 954| v954_13(void) = Call[String] : func:r954_10, this:r954_9, 0:r954_12 -# 954| m954_14(unknown) = ^CallSideEffect : ~m954_8 -# 954| m954_15(unknown) = Chi : total:m954_8, partial:m954_14 -# 954| v954_16(void) = ^BufferReadSideEffect[0] : &:r954_12, ~m949_3 -# 954| m954_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r954_9 -# 954| m954_18(unknown) = Chi : total:m954_15, partial:m954_17 -# 955| r955_1(glval) = FunctionAddress[operator new] : -# 955| r955_2(unsigned long) = Constant[256] : -# 955| r955_3(align_val_t) = Constant[128] : -# 955| r955_4(void *) = Call[operator new] : func:r955_1, 0:r955_2, 1:r955_3 -# 955| m955_5(unknown) = ^CallSideEffect : ~m954_18 -# 955| m955_6(unknown) = Chi : total:m954_18, partial:m955_5 -# 955| m955_7(unknown) = ^InitializeDynamicAllocation : &:r955_4 -# 955| r955_8(Overaligned *) = Convert : r955_4 -# 956| r956_1(glval) = FunctionAddress[operator new] : -# 956| r956_2(unsigned long) = Constant[256] : -# 956| r956_3(align_val_t) = Constant[128] : -# 956| r956_4(float) = Constant[1.0] : -# 956| r956_5(void *) = Call[operator new] : func:r956_1, 0:r956_2, 1:r956_3, 2:r956_4 -# 956| m956_6(unknown) = ^CallSideEffect : ~m955_6 -# 956| m956_7(unknown) = Chi : total:m955_6, partial:m956_6 -# 956| m956_8(unknown) = ^InitializeDynamicAllocation : &:r956_5 -# 956| r956_9(Overaligned *) = Convert : r956_5 -# 956| r956_10(Overaligned) = Constant[0] : -# 956| m956_11(Overaligned) = Store[?] : &:r956_9, r956_10 -# 956| m956_12(unknown) = Chi : total:m956_8, partial:m956_11 -# 957| v957_1(void) = NoOp : -# 949| v949_5(void) = ReturnVoid : -# 949| v949_6(void) = AliasedUse : ~m956_7 -# 949| v949_7(void) = ExitFunction : +# 949| v949_1(void) = EnterFunction : +# 949| mu949_2(unknown) = AliasedDefinition : +# 949| mu949_3(unknown) = InitializeNonLocal : +# 950| r950_1(glval) = FunctionAddress[operator new] : +# 950| r950_2(unsigned long) = Constant[4] : +# 950| r950_3(void *) = Call[operator new] : func:r950_1, 0:r950_2 +# 950| mu950_4(unknown) = ^CallSideEffect : ~m? +# 950| mu950_5(unknown) = ^InitializeDynamicAllocation : &:r950_3 +# 950| r950_6(int *) = Convert : r950_3 +# 951| r951_1(glval) = FunctionAddress[operator new] : +# 951| r951_2(unsigned long) = Constant[4] : +# 951| r951_3(float) = Constant[1.0] : +# 951| r951_4(void *) = Call[operator new] : func:r951_1, 0:r951_2, 1:r951_3 +# 951| mu951_5(unknown) = ^CallSideEffect : ~m? +# 951| mu951_6(unknown) = ^InitializeDynamicAllocation : &:r951_4 +# 951| r951_7(int *) = Convert : r951_4 +# 952| r952_1(glval) = FunctionAddress[operator new] : +# 952| r952_2(unsigned long) = Constant[4] : +# 952| r952_3(void *) = Call[operator new] : func:r952_1, 0:r952_2 +# 952| mu952_4(unknown) = ^CallSideEffect : ~m? +# 952| mu952_5(unknown) = ^InitializeDynamicAllocation : &:r952_3 +# 952| r952_6(int *) = Convert : r952_3 +# 952| r952_7(int) = Constant[0] : +# 952| mu952_8(int) = Store[?] : &:r952_6, r952_7 +# 953| r953_1(glval) = FunctionAddress[operator new] : +# 953| r953_2(unsigned long) = Constant[8] : +# 953| r953_3(void *) = Call[operator new] : func:r953_1, 0:r953_2 +# 953| mu953_4(unknown) = ^CallSideEffect : ~m? +# 953| mu953_5(unknown) = ^InitializeDynamicAllocation : &:r953_3 +# 953| r953_6(String *) = Convert : r953_3 +# 953| r953_7(glval) = FunctionAddress[String] : +# 953| v953_8(void) = Call[String] : func:r953_7, this:r953_6 +# 953| mu953_9(unknown) = ^CallSideEffect : ~m? +# 953| mu953_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r953_6 +# 954| r954_1(glval) = FunctionAddress[operator new] : +# 954| r954_2(unsigned long) = Constant[8] : +# 954| r954_3(float) = Constant[1.0] : +# 954| r954_4(void *) = Call[operator new] : func:r954_1, 0:r954_2, 1:r954_3 +# 954| mu954_5(unknown) = ^CallSideEffect : ~m? +# 954| mu954_6(unknown) = ^InitializeDynamicAllocation : &:r954_4 +# 954| r954_7(String *) = Convert : r954_4 +# 954| r954_8(glval) = FunctionAddress[String] : +# 954| r954_9(glval) = StringConstant["hello"] : +# 954| r954_10(char *) = Convert : r954_9 +# 954| v954_11(void) = Call[String] : func:r954_8, this:r954_7, 0:r954_10 +# 954| mu954_12(unknown) = ^CallSideEffect : ~m? +# 954| v954_13(void) = ^BufferReadSideEffect[0] : &:r954_10, ~m? +# 954| mu954_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r954_7 +# 955| r955_1(glval) = FunctionAddress[operator new] : +# 955| r955_2(unsigned long) = Constant[256] : +# 955| r955_3(align_val_t) = Constant[128] : +# 955| r955_4(void *) = Call[operator new] : func:r955_1, 0:r955_2, 1:r955_3 +# 955| mu955_5(unknown) = ^CallSideEffect : ~m? +# 955| mu955_6(unknown) = ^InitializeDynamicAllocation : &:r955_4 +# 955| r955_7(Overaligned *) = Convert : r955_4 +# 956| r956_1(glval) = FunctionAddress[operator new] : +# 956| r956_2(unsigned long) = Constant[256] : +# 956| r956_3(align_val_t) = Constant[128] : +# 956| r956_4(float) = Constant[1.0] : +# 956| r956_5(void *) = Call[operator new] : func:r956_1, 0:r956_2, 1:r956_3, 2:r956_4 +# 956| mu956_6(unknown) = ^CallSideEffect : ~m? +# 956| mu956_7(unknown) = ^InitializeDynamicAllocation : &:r956_5 +# 956| r956_8(Overaligned *) = Convert : r956_5 +# 956| r956_9(Overaligned) = Constant[0] : +# 956| mu956_10(Overaligned) = Store[?] : &:r956_8, r956_9 +# 957| v957_1(void) = NoOp : +# 949| v949_4(void) = ReturnVoid : +# 949| v949_5(void) = AliasedUse : ~m? +# 949| v949_6(void) = ExitFunction : # 959| void OperatorNewArray(int) # 959| Block 0 # 959| v959_1(void) = EnterFunction : -# 959| m959_2(unknown) = AliasedDefinition : -# 959| m959_3(unknown) = InitializeNonLocal : -# 959| m959_4(unknown) = Chi : total:m959_2, partial:m959_3 -# 959| r959_5(glval) = VariableAddress[n] : -# 959| m959_6(int) = InitializeParameter[n] : &:r959_5 +# 959| mu959_2(unknown) = AliasedDefinition : +# 959| mu959_3(unknown) = InitializeNonLocal : +# 959| r959_4(glval) = VariableAddress[n] : +# 959| m959_5(int) = InitializeParameter[n] : &:r959_4 # 960| r960_1(glval) = FunctionAddress[operator new[]] : # 960| r960_2(unsigned long) = Constant[40] : # 960| r960_3(void *) = Call[operator new[]] : func:r960_1, 0:r960_2 -# 960| m960_4(unknown) = ^CallSideEffect : ~m959_4 -# 960| m960_5(unknown) = Chi : total:m959_4, partial:m960_4 -# 960| m960_6(unknown) = ^InitializeDynamicAllocation : &:r960_3 -# 960| r960_7(int *) = Convert : r960_3 +# 960| mu960_4(unknown) = ^CallSideEffect : ~m? +# 960| mu960_5(unknown) = ^InitializeDynamicAllocation : &:r960_3 +# 960| r960_6(int *) = Convert : r960_3 # 961| r961_1(glval) = FunctionAddress[operator new[]] : # 961| r961_2(glval) = VariableAddress[n] : -# 961| r961_3(int) = Load[n] : &:r961_2, m959_6 +# 961| r961_3(int) = Load[n] : &:r961_2, m959_5 # 961| r961_4(unsigned long) = Convert : r961_3 # 961| r961_5(unsigned long) = Constant[4] : # 961| r961_6(unsigned long) = Mul : r961_4, r961_5 # 961| r961_7(void *) = Call[operator new[]] : func:r961_1, 0:r961_6 -# 961| m961_8(unknown) = ^CallSideEffect : ~m960_5 -# 961| m961_9(unknown) = Chi : total:m960_5, partial:m961_8 -# 961| m961_10(unknown) = ^InitializeDynamicAllocation : &:r961_7 -# 961| r961_11(int *) = Convert : r961_7 +# 961| mu961_8(unknown) = ^CallSideEffect : ~m? +# 961| mu961_9(unknown) = ^InitializeDynamicAllocation : &:r961_7 +# 961| r961_10(int *) = Convert : r961_7 # 962| r962_1(glval) = FunctionAddress[operator new[]] : # 962| r962_2(glval) = VariableAddress[n] : -# 962| r962_3(int) = Load[n] : &:r962_2, m959_6 +# 962| r962_3(int) = Load[n] : &:r962_2, m959_5 # 962| r962_4(unsigned long) = Convert : r962_3 # 962| r962_5(unsigned long) = Constant[4] : # 962| r962_6(unsigned long) = Mul : r962_4, r962_5 # 962| r962_7(float) = Constant[1.0] : # 962| r962_8(void *) = Call[operator new[]] : func:r962_1, 0:r962_6, 1:r962_7 -# 962| m962_9(unknown) = ^CallSideEffect : ~m961_9 -# 962| m962_10(unknown) = Chi : total:m961_9, partial:m962_9 -# 962| m962_11(unknown) = ^InitializeDynamicAllocation : &:r962_8 -# 962| r962_12(int *) = Convert : r962_8 +# 962| mu962_9(unknown) = ^CallSideEffect : ~m? +# 962| mu962_10(unknown) = ^InitializeDynamicAllocation : &:r962_8 +# 962| r962_11(int *) = Convert : r962_8 # 963| r963_1(glval) = FunctionAddress[operator new[]] : # 963| r963_2(glval) = VariableAddress[n] : -# 963| r963_3(int) = Load[n] : &:r963_2, m959_6 +# 963| r963_3(int) = Load[n] : &:r963_2, m959_5 # 963| r963_4(unsigned long) = Convert : r963_3 # 963| r963_5(unsigned long) = Constant[8] : # 963| r963_6(unsigned long) = Mul : r963_4, r963_5 # 963| r963_7(void *) = Call[operator new[]] : func:r963_1, 0:r963_6 -# 963| m963_8(unknown) = ^CallSideEffect : ~m962_10 -# 963| m963_9(unknown) = Chi : total:m962_10, partial:m963_8 -# 963| m963_10(unknown) = ^InitializeDynamicAllocation : &:r963_7 -# 963| r963_11(String *) = Convert : r963_7 +# 963| mu963_8(unknown) = ^CallSideEffect : ~m? +# 963| mu963_9(unknown) = ^InitializeDynamicAllocation : &:r963_7 +# 963| r963_10(String *) = Convert : r963_7 # 964| r964_1(glval) = FunctionAddress[operator new[]] : # 964| r964_2(glval) = VariableAddress[n] : -# 964| r964_3(int) = Load[n] : &:r964_2, m959_6 +# 964| r964_3(int) = Load[n] : &:r964_2, m959_5 # 964| r964_4(unsigned long) = Convert : r964_3 # 964| r964_5(unsigned long) = Constant[256] : # 964| r964_6(unsigned long) = Mul : r964_4, r964_5 # 964| r964_7(align_val_t) = Constant[128] : # 964| r964_8(void *) = Call[operator new[]] : func:r964_1, 0:r964_6, 1:r964_7 -# 964| m964_9(unknown) = ^CallSideEffect : ~m963_9 -# 964| m964_10(unknown) = Chi : total:m963_9, partial:m964_9 -# 964| m964_11(unknown) = ^InitializeDynamicAllocation : &:r964_8 -# 964| r964_12(Overaligned *) = Convert : r964_8 +# 964| mu964_9(unknown) = ^CallSideEffect : ~m? +# 964| mu964_10(unknown) = ^InitializeDynamicAllocation : &:r964_8 +# 964| r964_11(Overaligned *) = Convert : r964_8 # 965| r965_1(glval) = FunctionAddress[operator new[]] : # 965| r965_2(unsigned long) = Constant[2560] : # 965| r965_3(align_val_t) = Constant[128] : # 965| r965_4(float) = Constant[1.0] : # 965| r965_5(void *) = Call[operator new[]] : func:r965_1, 0:r965_2, 1:r965_3, 2:r965_4 -# 965| m965_6(unknown) = ^CallSideEffect : ~m964_10 -# 965| m965_7(unknown) = Chi : total:m964_10, partial:m965_6 -# 965| m965_8(unknown) = ^InitializeDynamicAllocation : &:r965_5 -# 965| r965_9(Overaligned *) = Convert : r965_5 +# 965| mu965_6(unknown) = ^CallSideEffect : ~m? +# 965| mu965_7(unknown) = ^InitializeDynamicAllocation : &:r965_5 +# 965| r965_8(Overaligned *) = Convert : r965_5 # 966| r966_1(glval) = FunctionAddress[operator new[]] : # 966| r966_2(glval) = VariableAddress[n] : -# 966| r966_3(int) = Load[n] : &:r966_2, m959_6 +# 966| r966_3(int) = Load[n] : &:r966_2, m959_5 # 966| r966_4(unsigned long) = Convert : r966_3 # 966| r966_5(unsigned long) = Constant[1] : # 966| r966_6(unsigned long) = Mul : r966_4, r966_5 # 966| r966_7(void *) = Call[operator new[]] : func:r966_1, 0:r966_6 -# 966| m966_8(unknown) = ^CallSideEffect : ~m965_7 -# 966| m966_9(unknown) = Chi : total:m965_7, partial:m966_8 -# 966| m966_10(unknown) = ^InitializeDynamicAllocation : &:r966_7 -# 966| r966_11(DefaultCtorWithDefaultParam *) = Convert : r966_7 +# 966| mu966_8(unknown) = ^CallSideEffect : ~m? +# 966| mu966_9(unknown) = ^InitializeDynamicAllocation : &:r966_7 +# 966| r966_10(DefaultCtorWithDefaultParam *) = Convert : r966_7 # 967| r967_1(glval) = FunctionAddress[operator new[]] : # 967| r967_2(glval) = VariableAddress[n] : -# 967| r967_3(int) = Load[n] : &:r967_2, m959_6 +# 967| r967_3(int) = Load[n] : &:r967_2, m959_5 # 967| r967_4(unsigned long) = Convert : r967_3 # 967| r967_5(unsigned long) = Constant[4] : # 967| r967_6(unsigned long) = Mul : r967_4, r967_5 # 967| r967_7(void *) = Call[operator new[]] : func:r967_1, 0:r967_6 -# 967| m967_8(unknown) = ^CallSideEffect : ~m966_9 -# 967| m967_9(unknown) = Chi : total:m966_9, partial:m967_8 -# 967| m967_10(unknown) = ^InitializeDynamicAllocation : &:r967_7 -# 967| r967_11(int *) = Convert : r967_7 +# 967| mu967_8(unknown) = ^CallSideEffect : ~m? +# 967| mu967_9(unknown) = ^InitializeDynamicAllocation : &:r967_7 +# 967| r967_10(int *) = Convert : r967_7 # 968| v968_1(void) = NoOp : -# 959| v959_7(void) = ReturnVoid : -# 959| v959_8(void) = AliasedUse : ~m967_9 -# 959| v959_9(void) = ExitFunction : +# 959| v959_6(void) = ReturnVoid : +# 959| v959_7(void) = AliasedUse : ~m? +# 959| v959_8(void) = ExitFunction : # 970| int designatedInit() # 970| Block 0 # 970| v970_1(void) = EnterFunction : -# 970| m970_2(unknown) = AliasedDefinition : -# 970| m970_3(unknown) = InitializeNonLocal : -# 970| m970_4(unknown) = Chi : total:m970_2, partial:m970_3 +# 970| mu970_2(unknown) = AliasedDefinition : +# 970| mu970_3(unknown) = InitializeNonLocal : # 971| r971_1(glval) = VariableAddress[a1] : -# 971| m971_2(int[1000]) = Uninitialized[a1] : &:r971_1 +# 971| mu971_2(int[1000]) = Uninitialized[a1] : &:r971_1 # 971| r971_3(int) = Constant[0] : # 971| r971_4(glval) = PointerAdd[4] : r971_1, r971_3 # 971| r971_5(unknown[8]) = Constant[0] : -# 971| m971_6(unknown[8]) = Store[?] : &:r971_4, r971_5 -# 971| m971_7(int[1000]) = Chi : total:m971_2, partial:m971_6 -# 971| r971_8(int) = Constant[2] : -# 971| r971_9(glval) = PointerAdd[4] : r971_1, r971_8 -# 971| r971_10(int) = Constant[10002] : -# 971| m971_11(int) = Store[?] : &:r971_9, r971_10 -# 971| m971_12(int[1000]) = Chi : total:m971_7, partial:m971_11 -# 971| r971_13(int) = Constant[3] : -# 971| r971_14(glval) = PointerAdd[4] : r971_1, r971_13 -# 971| r971_15(unknown[3588]) = Constant[0] : -# 971| m971_16(unknown[3588]) = Store[?] : &:r971_14, r971_15 -# 971| m971_17(int[1000]) = Chi : total:m971_12, partial:m971_16 -# 971| r971_18(int) = Constant[900] : -# 971| r971_19(glval) = PointerAdd[4] : r971_1, r971_18 -# 971| r971_20(int) = Constant[10900] : -# 971| m971_21(int) = Store[?] : &:r971_19, r971_20 -# 971| m971_22(int[1000]) = Chi : total:m971_17, partial:m971_21 -# 971| r971_23(int) = Constant[901] : -# 971| r971_24(glval) = PointerAdd[4] : r971_1, r971_23 -# 971| r971_25(unknown[396]) = Constant[0] : -# 971| m971_26(unknown[396]) = Store[?] : &:r971_24, r971_25 -# 971| m971_27(int[1000]) = Chi : total:m971_22, partial:m971_26 +# 971| mu971_6(unknown[8]) = Store[?] : &:r971_4, r971_5 +# 971| r971_7(int) = Constant[2] : +# 971| r971_8(glval) = PointerAdd[4] : r971_1, r971_7 +# 971| r971_9(int) = Constant[10002] : +# 971| mu971_10(int) = Store[?] : &:r971_8, r971_9 +# 971| r971_11(int) = Constant[3] : +# 971| r971_12(glval) = PointerAdd[4] : r971_1, r971_11 +# 971| r971_13(unknown[3588]) = Constant[0] : +# 971| mu971_14(unknown[3588]) = Store[?] : &:r971_12, r971_13 +# 971| r971_15(int) = Constant[900] : +# 971| r971_16(glval) = PointerAdd[4] : r971_1, r971_15 +# 971| r971_17(int) = Constant[10900] : +# 971| mu971_18(int) = Store[?] : &:r971_16, r971_17 +# 971| r971_19(int) = Constant[901] : +# 971| r971_20(glval) = PointerAdd[4] : r971_1, r971_19 +# 971| r971_21(unknown[396]) = Constant[0] : +# 971| mu971_22(unknown[396]) = Store[?] : &:r971_20, r971_21 # 972| r972_1(glval) = VariableAddress[#return] : # 972| r972_2(glval) = VariableAddress[a1] : # 972| r972_3(int *) = Convert : r972_2 # 972| r972_4(int) = Constant[900] : # 972| r972_5(glval) = PointerAdd[4] : r972_3, r972_4 -# 972| r972_6(int) = Load[?] : &:r972_5, m971_21 +# 972| r972_6(int) = Load[?] : &:r972_5, ~m? # 972| m972_7(int) = Store[#return] : &:r972_1, r972_6 -# 970| r970_5(glval) = VariableAddress[#return] : -# 970| v970_6(void) = ReturnValue : &:r970_5, m972_7 -# 970| v970_7(void) = AliasedUse : m970_3 -# 970| v970_8(void) = ExitFunction : +# 970| r970_4(glval) = VariableAddress[#return] : +# 970| v970_5(void) = ReturnValue : &:r970_4, m972_7 +# 970| v970_6(void) = AliasedUse : ~m? +# 970| v970_7(void) = ExitFunction : # 975| void IfStmtWithDeclaration(int, int) # 975| Block 0 # 975| v975_1(void) = EnterFunction : -# 975| m975_2(unknown) = AliasedDefinition : -# 975| m975_3(unknown) = InitializeNonLocal : -# 975| m975_4(unknown) = Chi : total:m975_2, partial:m975_3 -# 975| r975_5(glval) = VariableAddress[x] : -# 975| m975_6(int) = InitializeParameter[x] : &:r975_5 -# 975| r975_7(glval) = VariableAddress[y] : -# 975| m975_8(int) = InitializeParameter[y] : &:r975_7 +# 975| mu975_2(unknown) = AliasedDefinition : +# 975| mu975_3(unknown) = InitializeNonLocal : +# 975| r975_4(glval) = VariableAddress[x] : +# 975| mu975_5(int) = InitializeParameter[x] : &:r975_4 +# 975| r975_6(glval) = VariableAddress[y] : +# 975| m975_7(int) = InitializeParameter[y] : &:r975_6 # 976| r976_1(glval) = VariableAddress[b] : # 976| r976_2(glval) = VariableAddress[x] : -# 976| r976_3(int) = Load[x] : &:r976_2, m975_6 +# 976| r976_3(int) = Load[x] : &:r976_2, ~m? # 976| r976_4(glval) = VariableAddress[y] : -# 976| r976_5(int) = Load[y] : &:r976_4, m975_8 +# 976| r976_5(int) = Load[y] : &:r976_4, m975_7 # 976| r976_6(bool) = CompareLT : r976_3, r976_5 # 976| m976_7(bool) = Store[b] : &:r976_1, r976_6 # 976| r976_8(glval) = VariableAddress[b] : @@ -9098,15 +8334,15 @@ ir.cpp: # 977| Block 1 # 977| r977_1(int) = Constant[5] : # 977| r977_2(glval) = VariableAddress[x] : -# 977| m977_3(int) = Store[x] : &:r977_2, r977_1 +# 977| mu977_3(int) = Store[x] : &:r977_2, r977_1 #-----| Goto -> Block 6 # 979| Block 2 # 979| r979_1(glval) = VariableAddress[z] : # 979| r979_2(glval) = VariableAddress[x] : -# 979| r979_3(int) = Load[x] : &:r979_2, m975_6 +# 979| r979_3(int) = Load[x] : &:r979_2, ~m? # 979| r979_4(glval) = VariableAddress[y] : -# 979| r979_5(int) = Load[y] : &:r979_4, m975_8 +# 979| r979_5(int) = Load[y] : &:r979_4, m975_7 # 979| r979_6(int) = Add : r979_3, r979_5 # 979| m979_7(int) = Store[z] : &:r979_1, r979_6 # 979| r979_8(glval) = VariableAddress[z] : @@ -9143,33 +8379,32 @@ ir.cpp: # 983| r983_2(glval) = VariableAddress[p] : # 983| r983_3(int *) = Load[p] : &:r983_2, m982_4 # 983| r983_4(glval) = CopyValue : r983_3 -# 983| m983_5(int) = Store[?] : &:r983_4, r983_1 +# 983| mu983_5(int) = Store[?] : &:r983_4, r983_1 #-----| Goto -> Block 6 # 985| Block 6 # 985| v985_1(void) = NoOp : -# 975| v975_9(void) = ReturnVoid : -# 975| v975_10(void) = AliasedUse : m975_3 -# 975| v975_11(void) = ExitFunction : +# 975| v975_8(void) = ReturnVoid : +# 975| v975_9(void) = AliasedUse : ~m? +# 975| v975_10(void) = ExitFunction : # 987| void WhileStmtWithDeclaration(int, int) # 987| Block 0 # 987| v987_1(void) = EnterFunction : -# 987| m987_2(unknown) = AliasedDefinition : -# 987| m987_3(unknown) = InitializeNonLocal : -# 987| m987_4(unknown) = Chi : total:m987_2, partial:m987_3 -# 987| r987_5(glval) = VariableAddress[x] : -# 987| m987_6(int) = InitializeParameter[x] : &:r987_5 -# 987| r987_7(glval) = VariableAddress[y] : -# 987| m987_8(int) = InitializeParameter[y] : &:r987_7 +# 987| mu987_2(unknown) = AliasedDefinition : +# 987| mu987_3(unknown) = InitializeNonLocal : +# 987| r987_4(glval) = VariableAddress[x] : +# 987| mu987_5(int) = InitializeParameter[x] : &:r987_4 +# 987| r987_6(glval) = VariableAddress[y] : +# 987| m987_7(int) = InitializeParameter[y] : &:r987_6 #-----| Goto -> Block 1 # 988| Block 1 # 988| r988_1(glval) = VariableAddress[b] : # 988| r988_2(glval) = VariableAddress[x] : -# 988| r988_3(int) = Load[x] : &:r988_2, m987_6 +# 988| r988_3(int) = Load[x] : &:r988_2, ~m? # 988| r988_4(glval) = VariableAddress[y] : -# 988| r988_5(int) = Load[y] : &:r988_4, m987_8 +# 988| r988_5(int) = Load[y] : &:r988_4, m987_7 # 988| r988_6(bool) = CompareLT : r988_3, r988_5 # 988| m988_7(bool) = Store[b] : &:r988_1, r988_6 # 988| r988_8(glval) = VariableAddress[b] : @@ -9186,9 +8421,9 @@ ir.cpp: # 990| Block 3 # 990| r990_1(glval) = VariableAddress[z] : # 990| r990_2(glval) = VariableAddress[x] : -# 990| r990_3(int) = Load[x] : &:r990_2, m987_6 +# 990| r990_3(int) = Load[x] : &:r990_2, ~m? # 990| r990_4(glval) = VariableAddress[y] : -# 990| r990_5(int) = Load[y] : &:r990_4, m987_8 +# 990| r990_5(int) = Load[y] : &:r990_4, m987_7 # 990| r990_6(int) = Add : r990_3, r990_5 # 990| m990_7(int) = Store[z] : &:r990_1, r990_6 # 990| r990_8(glval) = VariableAddress[z] : @@ -9224,59 +8459,56 @@ ir.cpp: # 994| Block 7 # 994| v994_1(void) = NoOp : -# 987| v987_9(void) = ReturnVoid : -# 987| v987_10(void) = AliasedUse : m987_3 -# 987| v987_11(void) = ExitFunction : +# 987| v987_8(void) = ReturnVoid : +# 987| v987_9(void) = AliasedUse : ~m? +# 987| v987_10(void) = ExitFunction : # 996| int PointerDecay(int[], int(float)) # 996| Block 0 # 996| v996_1(void) = EnterFunction : -# 996| m996_2(unknown) = AliasedDefinition : -# 996| m996_3(unknown) = InitializeNonLocal : -# 996| m996_4(unknown) = Chi : total:m996_2, partial:m996_3 -# 996| r996_5(glval) = VariableAddress[a] : -# 996| m996_6(int *) = InitializeParameter[a] : &:r996_5 -# 996| r996_7(int *) = Load[a] : &:r996_5, m996_6 -# 996| m996_8(unknown) = InitializeIndirection[a] : &:r996_7 -# 996| r996_9(glval<..(*)(..)>) = VariableAddress[fn] : -# 996| m996_10(..(*)(..)) = InitializeParameter[fn] : &:r996_9 +# 996| mu996_2(unknown) = AliasedDefinition : +# 996| mu996_3(unknown) = InitializeNonLocal : +# 996| r996_4(glval) = VariableAddress[a] : +# 996| m996_5(int *) = InitializeParameter[a] : &:r996_4 +# 996| r996_6(int *) = Load[a] : &:r996_4, m996_5 +# 996| mu996_7(unknown) = InitializeIndirection[a] : &:r996_6 +# 996| r996_8(glval<..(*)(..)>) = VariableAddress[fn] : +# 996| m996_9(..(*)(..)) = InitializeParameter[fn] : &:r996_8 # 997| r997_1(glval) = VariableAddress[#return] : # 997| r997_2(glval) = VariableAddress[a] : -# 997| r997_3(int *) = Load[a] : &:r997_2, m996_6 +# 997| r997_3(int *) = Load[a] : &:r997_2, m996_5 # 997| r997_4(int) = Constant[0] : # 997| r997_5(glval) = PointerAdd[4] : r997_3, r997_4 -# 997| r997_6(int) = Load[?] : &:r997_5, ~m996_8 +# 997| r997_6(int) = Load[?] : &:r997_5, ~m? # 997| r997_7(glval<..(*)(..)>) = VariableAddress[fn] : -# 997| r997_8(..(*)(..)) = Load[fn] : &:r997_7, m996_10 +# 997| r997_8(..(*)(..)) = Load[fn] : &:r997_7, m996_9 # 997| r997_9(float) = Constant[1.0] : # 997| r997_10(int) = Call[?] : func:r997_8, 0:r997_9 -# 997| m997_11(unknown) = ^CallSideEffect : ~m996_4 -# 997| m997_12(unknown) = Chi : total:m996_4, partial:m997_11 -# 997| r997_13(int) = Add : r997_6, r997_10 -# 997| m997_14(int) = Store[#return] : &:r997_1, r997_13 -# 996| v996_11(void) = ReturnIndirection[a] : &:r996_7, m996_8 -# 996| r996_12(glval) = VariableAddress[#return] : -# 996| v996_13(void) = ReturnValue : &:r996_12, m997_14 -# 996| v996_14(void) = AliasedUse : ~m997_12 -# 996| v996_15(void) = ExitFunction : +# 997| mu997_11(unknown) = ^CallSideEffect : ~m? +# 997| r997_12(int) = Add : r997_6, r997_10 +# 997| m997_13(int) = Store[#return] : &:r997_1, r997_12 +# 996| v996_10(void) = ReturnIndirection[a] : &:r996_6, ~m? +# 996| r996_11(glval) = VariableAddress[#return] : +# 996| v996_12(void) = ReturnValue : &:r996_11, m997_13 +# 996| v996_13(void) = AliasedUse : ~m? +# 996| v996_14(void) = ExitFunction : # 1000| int StmtExpr(int, int, int) # 1000| Block 0 # 1000| v1000_1(void) = EnterFunction : -# 1000| m1000_2(unknown) = AliasedDefinition : -# 1000| m1000_3(unknown) = InitializeNonLocal : -# 1000| m1000_4(unknown) = Chi : total:m1000_2, partial:m1000_3 -# 1000| r1000_5(glval) = VariableAddress[b] : -# 1000| m1000_6(int) = InitializeParameter[b] : &:r1000_5 -# 1000| r1000_7(glval) = VariableAddress[y] : -# 1000| m1000_8(int) = InitializeParameter[y] : &:r1000_7 -# 1000| r1000_9(glval) = VariableAddress[z] : -# 1000| m1000_10(int) = InitializeParameter[z] : &:r1000_9 +# 1000| mu1000_2(unknown) = AliasedDefinition : +# 1000| mu1000_3(unknown) = InitializeNonLocal : +# 1000| r1000_4(glval) = VariableAddress[b] : +# 1000| m1000_5(int) = InitializeParameter[b] : &:r1000_4 +# 1000| r1000_6(glval) = VariableAddress[y] : +# 1000| m1000_7(int) = InitializeParameter[y] : &:r1000_6 +# 1000| r1000_8(glval) = VariableAddress[z] : +# 1000| m1000_9(int) = InitializeParameter[z] : &:r1000_8 # 1001| r1001_1(glval) = VariableAddress[x] : # 1002| r1002_1(glval) = VariableAddress[w] : # 1002| m1002_2(int) = Uninitialized[w] : &:r1002_1 # 1003| r1003_1(glval) = VariableAddress[b] : -# 1003| r1003_2(int) = Load[b] : &:r1003_1, m1000_6 +# 1003| r1003_2(int) = Load[b] : &:r1003_1, m1000_5 # 1003| r1003_3(int) = Constant[0] : # 1003| r1003_4(bool) = CompareNE : r1003_2, r1003_3 # 1003| v1003_5(void) = ConditionalBranch : r1003_4 @@ -9285,14 +8517,14 @@ ir.cpp: # 1004| Block 1 # 1004| r1004_1(glval) = VariableAddress[y] : -# 1004| r1004_2(int) = Load[y] : &:r1004_1, m1000_8 +# 1004| r1004_2(int) = Load[y] : &:r1004_1, m1000_7 # 1004| r1004_3(glval) = VariableAddress[w] : # 1004| m1004_4(int) = Store[w] : &:r1004_3, r1004_2 #-----| Goto -> Block 3 # 1006| Block 2 # 1006| r1006_1(glval) = VariableAddress[z] : -# 1006| r1006_2(int) = Load[z] : &:r1006_1, m1000_10 +# 1006| r1006_2(int) = Load[z] : &:r1006_1, m1000_9 # 1006| r1006_3(glval) = VariableAddress[w] : # 1006| m1006_4(int) = Store[w] : &:r1006_3, r1006_2 #-----| Goto -> Block 3 @@ -9308,740 +8540,660 @@ ir.cpp: # 1011| r1011_3(int) = Load[x] : &:r1011_2, m1001_3 # 1011| r1011_4(int) = CopyValue : r1011_3 # 1011| m1011_5(int) = Store[#return] : &:r1011_1, r1011_4 -# 1000| r1000_11(glval) = VariableAddress[#return] : -# 1000| v1000_12(void) = ReturnValue : &:r1000_11, m1011_5 -# 1000| v1000_13(void) = AliasedUse : m1000_3 -# 1000| v1000_14(void) = ExitFunction : +# 1000| r1000_10(glval) = VariableAddress[#return] : +# 1000| v1000_11(void) = ReturnValue : &:r1000_10, m1011_5 +# 1000| v1000_12(void) = AliasedUse : ~m? +# 1000| v1000_13(void) = ExitFunction : # 1015| void OperatorDelete() # 1015| Block 0 -# 1015| v1015_1(void) = EnterFunction : -# 1015| m1015_2(unknown) = AliasedDefinition : -# 1015| m1015_3(unknown) = InitializeNonLocal : -# 1015| m1015_4(unknown) = Chi : total:m1015_2, partial:m1015_3 -# 1016| r1016_1(glval) = FunctionAddress[operator delete] : -# 1016| r1016_2(int *) = Constant[0] : -# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 -# 1016| m1016_4(unknown) = ^CallSideEffect : ~m1015_4 -# 1016| m1016_5(unknown) = Chi : total:m1015_4, partial:m1016_4 -# 1017| r1017_1(String *) = Constant[0] : -# 1017| r1017_2(glval) = FunctionAddress[~String] : -# 1017| v1017_3(void) = Call[~String] : func:r1017_2 -# 1017| m1017_4(unknown) = ^CallSideEffect : ~m1016_5 -# 1017| m1017_5(unknown) = Chi : total:m1016_5, partial:m1017_4 -# 1017| v1017_6(void) = ^IndirectReadSideEffect[-1] : &:r1017_1, ~m1017_5 -# 1017| m1017_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1017_1 -# 1017| m1017_8(unknown) = Chi : total:m1017_5, partial:m1017_7 -# 1017| r1017_9(glval) = FunctionAddress[operator delete] : -# 1017| r1017_10(String *) = CopyValue : r1017_1 -# 1017| v1017_11(void) = Call[operator delete] : func:r1017_9, 0:r1017_10 -# 1017| m1017_12(unknown) = ^CallSideEffect : ~m1017_8 -# 1017| m1017_13(unknown) = Chi : total:m1017_8, partial:m1017_12 -# 1018| r1018_1(glval) = FunctionAddress[operator delete] : -# 1018| r1018_2(SizedDealloc *) = Constant[0] : -# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 -# 1018| m1018_4(unknown) = ^CallSideEffect : ~m1017_13 -# 1018| m1018_5(unknown) = Chi : total:m1017_13, partial:m1018_4 -# 1019| r1019_1(glval) = FunctionAddress[operator delete] : -# 1019| r1019_2(Overaligned *) = Constant[0] : -# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 -# 1019| m1019_4(unknown) = ^CallSideEffect : ~m1018_5 -# 1019| m1019_5(unknown) = Chi : total:m1018_5, partial:m1019_4 -# 1020| r1020_1(PolymorphicBase *) = Constant[0] : -# 1020| r1020_2(glval) = FunctionAddress[~PolymorphicBase] : -# 1020| v1020_3(void) = Call[~PolymorphicBase] : func:r1020_2 -# 1020| m1020_4(unknown) = ^CallSideEffect : ~m1019_5 -# 1020| m1020_5(unknown) = Chi : total:m1019_5, partial:m1020_4 -# 1020| v1020_6(void) = ^IndirectReadSideEffect[-1] : &:r1020_1, ~m1020_5 -# 1020| m1020_7(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1020_1 -# 1020| m1020_8(unknown) = Chi : total:m1020_5, partial:m1020_7 -# 1020| r1020_9(glval) = VirtualDeleteFunctionAddress : -# 1020| r1020_10(PolymorphicBase *) = CopyValue : r1020_1 -# 1020| v1020_11(void) = Call[?] : func:r1020_9, 0:r1020_10 -# 1020| m1020_12(unknown) = ^CallSideEffect : ~m1020_8 -# 1020| m1020_13(unknown) = Chi : total:m1020_8, partial:m1020_12 -# 1021| v1021_1(void) = NoOp : -# 1015| v1015_5(void) = ReturnVoid : -# 1015| v1015_6(void) = AliasedUse : ~m1020_13 -# 1015| v1015_7(void) = ExitFunction : +# 1015| v1015_1(void) = EnterFunction : +# 1015| mu1015_2(unknown) = AliasedDefinition : +# 1015| mu1015_3(unknown) = InitializeNonLocal : +# 1016| r1016_1(glval) = FunctionAddress[operator delete] : +# 1016| r1016_2(int *) = Constant[0] : +# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 +# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? +# 1017| r1017_1(String *) = Constant[0] : +# 1017| r1017_2(glval) = FunctionAddress[~String] : +# 1017| v1017_3(void) = Call[~String] : func:r1017_2 +# 1017| mu1017_4(unknown) = ^CallSideEffect : ~m? +# 1017| v1017_5(void) = ^IndirectReadSideEffect[-1] : &:r1017_1, ~m? +# 1017| mu1017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1017_1 +# 1017| r1017_7(glval) = FunctionAddress[operator delete] : +# 1017| r1017_8(String *) = CopyValue : r1017_1 +# 1017| v1017_9(void) = Call[operator delete] : func:r1017_7, 0:r1017_8 +# 1017| mu1017_10(unknown) = ^CallSideEffect : ~m? +# 1018| r1018_1(glval) = FunctionAddress[operator delete] : +# 1018| r1018_2(SizedDealloc *) = Constant[0] : +# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 +# 1018| mu1018_4(unknown) = ^CallSideEffect : ~m? +# 1019| r1019_1(glval) = FunctionAddress[operator delete] : +# 1019| r1019_2(Overaligned *) = Constant[0] : +# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 +# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? +# 1020| r1020_1(PolymorphicBase *) = Constant[0] : +# 1020| r1020_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1020| v1020_3(void) = Call[~PolymorphicBase] : func:r1020_2 +# 1020| mu1020_4(unknown) = ^CallSideEffect : ~m? +# 1020| v1020_5(void) = ^IndirectReadSideEffect[-1] : &:r1020_1, ~m? +# 1020| mu1020_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1020_1 +# 1020| r1020_7(glval) = VirtualDeleteFunctionAddress : +# 1020| r1020_8(PolymorphicBase *) = CopyValue : r1020_1 +# 1020| v1020_9(void) = Call[?] : func:r1020_7, 0:r1020_8 +# 1020| mu1020_10(unknown) = ^CallSideEffect : ~m? +# 1021| v1021_1(void) = NoOp : +# 1015| v1015_4(void) = ReturnVoid : +# 1015| v1015_5(void) = AliasedUse : ~m? +# 1015| v1015_6(void) = ExitFunction : # 1024| void OperatorDeleteArray() # 1024| Block 0 -# 1024| v1024_1(void) = EnterFunction : -# 1024| m1024_2(unknown) = AliasedDefinition : -# 1024| m1024_3(unknown) = InitializeNonLocal : -# 1024| m1024_4(unknown) = Chi : total:m1024_2, partial:m1024_3 -# 1025| r1025_1(glval) = FunctionAddress[operator delete[]] : -# 1025| r1025_2(int *) = Constant[0] : -# 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 -# 1025| m1025_4(unknown) = ^CallSideEffect : ~m1024_4 -# 1025| m1025_5(unknown) = Chi : total:m1024_4, partial:m1025_4 -# 1026| r1026_1(String *) = Constant[0] : -# 1026| r1026_2(glval) = FunctionAddress[~String] : -# 1026| v1026_3(void) = Call[~String] : func:r1026_2 -# 1026| m1026_4(unknown) = ^CallSideEffect : ~m1025_5 -# 1026| m1026_5(unknown) = Chi : total:m1025_5, partial:m1026_4 -# 1026| v1026_6(void) = ^IndirectReadSideEffect[-1] : &:r1026_1, ~m1026_5 -# 1026| m1026_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1026_1 -# 1026| m1026_8(unknown) = Chi : total:m1026_5, partial:m1026_7 -# 1026| r1026_9(glval) = FunctionAddress[operator delete[]] : -# 1026| r1026_10(String *) = CopyValue : r1026_1 -# 1026| v1026_11(void) = Call[operator delete[]] : func:r1026_9, 0:r1026_10 -# 1026| m1026_12(unknown) = ^CallSideEffect : ~m1026_8 -# 1026| m1026_13(unknown) = Chi : total:m1026_8, partial:m1026_12 -# 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : -# 1027| r1027_2(SizedDealloc *) = Constant[0] : -# 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 -# 1027| m1027_4(unknown) = ^CallSideEffect : ~m1026_13 -# 1027| m1027_5(unknown) = Chi : total:m1026_13, partial:m1027_4 -# 1028| r1028_1(glval) = FunctionAddress[operator delete[]] : -# 1028| r1028_2(Overaligned *) = Constant[0] : -# 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 -# 1028| m1028_4(unknown) = ^CallSideEffect : ~m1027_5 -# 1028| m1028_5(unknown) = Chi : total:m1027_5, partial:m1028_4 -# 1029| r1029_1(PolymorphicBase *) = Constant[0] : -# 1029| r1029_2(glval) = FunctionAddress[~PolymorphicBase] : -# 1029| v1029_3(void) = Call[~PolymorphicBase] : func:r1029_2 -# 1029| m1029_4(unknown) = ^CallSideEffect : ~m1028_5 -# 1029| m1029_5(unknown) = Chi : total:m1028_5, partial:m1029_4 -# 1029| v1029_6(void) = ^IndirectReadSideEffect[-1] : &:r1029_1, ~m1029_5 -# 1029| m1029_7(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1029_1 -# 1029| m1029_8(unknown) = Chi : total:m1029_5, partial:m1029_7 -# 1029| r1029_9(glval) = FunctionAddress[operator delete[]] : -# 1029| r1029_10(PolymorphicBase *) = CopyValue : r1029_1 -# 1029| v1029_11(void) = Call[operator delete[]] : func:r1029_9, 0:r1029_10 -# 1029| m1029_12(unknown) = ^CallSideEffect : ~m1029_8 -# 1029| m1029_13(unknown) = Chi : total:m1029_8, partial:m1029_12 -# 1030| v1030_1(void) = NoOp : -# 1024| v1024_5(void) = ReturnVoid : -# 1024| v1024_6(void) = AliasedUse : ~m1029_13 -# 1024| v1024_7(void) = ExitFunction : +# 1024| v1024_1(void) = EnterFunction : +# 1024| mu1024_2(unknown) = AliasedDefinition : +# 1024| mu1024_3(unknown) = InitializeNonLocal : +# 1025| r1025_1(glval) = FunctionAddress[operator delete[]] : +# 1025| r1025_2(int *) = Constant[0] : +# 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 +# 1025| mu1025_4(unknown) = ^CallSideEffect : ~m? +# 1026| r1026_1(String *) = Constant[0] : +# 1026| r1026_2(glval) = FunctionAddress[~String] : +# 1026| v1026_3(void) = Call[~String] : func:r1026_2 +# 1026| mu1026_4(unknown) = ^CallSideEffect : ~m? +# 1026| v1026_5(void) = ^IndirectReadSideEffect[-1] : &:r1026_1, ~m? +# 1026| mu1026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1026_1 +# 1026| r1026_7(glval) = FunctionAddress[operator delete[]] : +# 1026| r1026_8(String *) = CopyValue : r1026_1 +# 1026| v1026_9(void) = Call[operator delete[]] : func:r1026_7, 0:r1026_8 +# 1026| mu1026_10(unknown) = ^CallSideEffect : ~m? +# 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : +# 1027| r1027_2(SizedDealloc *) = Constant[0] : +# 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 +# 1027| mu1027_4(unknown) = ^CallSideEffect : ~m? +# 1028| r1028_1(glval) = FunctionAddress[operator delete[]] : +# 1028| r1028_2(Overaligned *) = Constant[0] : +# 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 +# 1028| mu1028_4(unknown) = ^CallSideEffect : ~m? +# 1029| r1029_1(PolymorphicBase *) = Constant[0] : +# 1029| r1029_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1029| v1029_3(void) = Call[~PolymorphicBase] : func:r1029_2 +# 1029| mu1029_4(unknown) = ^CallSideEffect : ~m? +# 1029| v1029_5(void) = ^IndirectReadSideEffect[-1] : &:r1029_1, ~m? +# 1029| mu1029_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1029_1 +# 1029| r1029_7(glval) = FunctionAddress[operator delete[]] : +# 1029| r1029_8(PolymorphicBase *) = CopyValue : r1029_1 +# 1029| v1029_9(void) = Call[operator delete[]] : func:r1029_7, 0:r1029_8 +# 1029| mu1029_10(unknown) = ^CallSideEffect : ~m? +# 1030| v1030_1(void) = NoOp : +# 1024| v1024_4(void) = ReturnVoid : +# 1024| v1024_5(void) = AliasedUse : ~m? +# 1024| v1024_6(void) = ExitFunction : # 1034| void EmptyStructInit() # 1034| Block 0 # 1034| v1034_1(void) = EnterFunction : -# 1034| m1034_2(unknown) = AliasedDefinition : -# 1034| m1034_3(unknown) = InitializeNonLocal : -# 1034| m1034_4(unknown) = Chi : total:m1034_2, partial:m1034_3 +# 1034| mu1034_2(unknown) = AliasedDefinition : +# 1034| mu1034_3(unknown) = InitializeNonLocal : # 1035| r1035_1(glval) = VariableAddress[s] : # 1035| m1035_2(EmptyStruct) = Uninitialized[s] : &:r1035_1 # 1036| v1036_1(void) = NoOp : -# 1034| v1034_5(void) = ReturnVoid : -# 1034| v1034_6(void) = AliasedUse : m1034_3 -# 1034| v1034_7(void) = ExitFunction : +# 1034| v1034_4(void) = ReturnVoid : +# 1034| v1034_5(void) = AliasedUse : ~m? +# 1034| v1034_6(void) = ExitFunction : # 1038| (lambda [] type at line 1038, col. 12) lam # 1038| Block 0 # 1038| v1038_1(void) = EnterFunction : -# 1038| m1038_2(unknown) = AliasedDefinition : +# 1038| mu1038_2(unknown) = AliasedDefinition : # 1038| r1038_3(glval) = VariableAddress[lam] : # 1038| r1038_4(glval) = VariableAddress[#temp1038:12] : # 1038| m1038_5(decltype([...](...){...})) = Uninitialized[#temp1038:12] : &:r1038_4 # 1038| r1038_6(decltype([...](...){...})) = Load[#temp1038:12] : &:r1038_4, m1038_5 -# 1038| m1038_7(decltype([...](...){...})) = Store[lam] : &:r1038_3, r1038_6 -# 1038| m1038_8(unknown) = Chi : total:m1038_2, partial:m1038_7 -# 1038| v1038_9(void) = ReturnVoid : -# 1038| v1038_10(void) = AliasedUse : ~m1038_8 -# 1038| v1038_11(void) = ExitFunction : +# 1038| mu1038_7(decltype([...](...){...})) = Store[lam] : &:r1038_3, r1038_6 +# 1038| v1038_8(void) = ReturnVoid : +# 1038| v1038_9(void) = AliasedUse : ~m? +# 1038| v1038_10(void) = ExitFunction : # 1038| void (lambda [] type at line 1038, col. 12)::(unnamed constructor)((lambda [] type at line 1038, col. 12)&&) # 1038| Block 0 # 1038| v1038_1(void) = EnterFunction : -# 1038| m1038_2(unknown) = AliasedDefinition : -# 1038| m1038_3(unknown) = InitializeNonLocal : -# 1038| m1038_4(unknown) = Chi : total:m1038_2, partial:m1038_3 -# 1038| r1038_5(glval) = VariableAddress[#this] : -# 1038| m1038_6(glval) = InitializeParameter[#this] : &:r1038_5 -# 1038| r1038_7(glval) = Load[#this] : &:r1038_5, m1038_6 -# 1038| m1038_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1038_7 +# 1038| mu1038_2(unknown) = AliasedDefinition : +# 1038| mu1038_3(unknown) = InitializeNonLocal : +# 1038| r1038_4(glval) = VariableAddress[#this] : +# 1038| m1038_5(glval) = InitializeParameter[#this] : &:r1038_4 +# 1038| r1038_6(glval) = Load[#this] : &:r1038_4, m1038_5 +# 1038| mu1038_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1038_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(lambda [] type at line 1038, col. 12 &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(lambda [] type at line 1038, col. 12 &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1038| v1038_9(void) = NoOp : -# 1038| v1038_10(void) = ReturnIndirection[#this] : &:r1038_7, m1038_8 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1038| v1038_11(void) = ReturnVoid : -# 1038| v1038_12(void) = AliasedUse : m1038_3 -# 1038| v1038_13(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1038| v1038_8(void) = NoOp : +# 1038| v1038_9(void) = ReturnIndirection[#this] : &:r1038_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1038| v1038_10(void) = ReturnVoid : +# 1038| v1038_11(void) = AliasedUse : ~m? +# 1038| v1038_12(void) = ExitFunction : # 1038| void (lambda [] type at line 1038, col. 12)::operator()() const # 1038| Block 0 # 1038| v1038_1(void) = EnterFunction : -# 1038| m1038_2(unknown) = AliasedDefinition : -# 1038| m1038_3(unknown) = InitializeNonLocal : -# 1038| m1038_4(unknown) = Chi : total:m1038_2, partial:m1038_3 -# 1038| r1038_5(glval) = VariableAddress[#this] : -# 1038| m1038_6(glval) = InitializeParameter[#this] : &:r1038_5 -# 1038| r1038_7(glval) = Load[#this] : &:r1038_5, m1038_6 -# 1038| m1038_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1038_7 -# 1038| v1038_9(void) = NoOp : -# 1038| v1038_10(void) = ReturnIndirection[#this] : &:r1038_7, m1038_8 -# 1038| v1038_11(void) = ReturnVoid : -# 1038| v1038_12(void) = AliasedUse : m1038_3 -# 1038| v1038_13(void) = ExitFunction : +# 1038| mu1038_2(unknown) = AliasedDefinition : +# 1038| mu1038_3(unknown) = InitializeNonLocal : +# 1038| r1038_4(glval) = VariableAddress[#this] : +# 1038| m1038_5(glval) = InitializeParameter[#this] : &:r1038_4 +# 1038| r1038_6(glval) = Load[#this] : &:r1038_4, m1038_5 +# 1038| mu1038_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1038_6 +# 1038| v1038_8(void) = NoOp : +# 1038| v1038_9(void) = ReturnIndirection[#this] : &:r1038_6, ~m? +# 1038| v1038_10(void) = ReturnVoid : +# 1038| v1038_11(void) = AliasedUse : ~m? +# 1038| v1038_12(void) = ExitFunction : # 1038| void(* (lambda [] type at line 1038, col. 12)::operator void (*)()() const)() # 1038| Block 0 # 1038| v1038_1(void) = EnterFunction : -# 1038| m1038_2(unknown) = AliasedDefinition : -# 1038| m1038_3(unknown) = InitializeNonLocal : -# 1038| m1038_4(unknown) = Chi : total:m1038_2, partial:m1038_3 -# 1038| r1038_5(glval) = VariableAddress[#this] : -# 1038| m1038_6(glval) = InitializeParameter[#this] : &:r1038_5 -# 1038| r1038_7(glval) = Load[#this] : &:r1038_5, m1038_6 -# 1038| m1038_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1038_7 -# 1038| r1038_9(glval<..(*)(..)>) = VariableAddress[#return] : -# 1038| r1038_10(..(*)(..)) = FunctionAddress[_FUN] : -# 1038| m1038_11(..(*)(..)) = Store[#return] : &:r1038_9, r1038_10 -# 1038| v1038_12(void) = ReturnIndirection[#this] : &:r1038_7, m1038_8 -# 1038| r1038_13(glval<..(*)(..)>) = VariableAddress[#return] : -# 1038| v1038_14(void) = ReturnValue : &:r1038_13, m1038_11 -# 1038| v1038_15(void) = AliasedUse : m1038_3 -# 1038| v1038_16(void) = ExitFunction : +# 1038| mu1038_2(unknown) = AliasedDefinition : +# 1038| mu1038_3(unknown) = InitializeNonLocal : +# 1038| r1038_4(glval) = VariableAddress[#this] : +# 1038| m1038_5(glval) = InitializeParameter[#this] : &:r1038_4 +# 1038| r1038_6(glval) = Load[#this] : &:r1038_4, m1038_5 +# 1038| mu1038_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1038_6 +# 1038| r1038_8(glval<..(*)(..)>) = VariableAddress[#return] : +# 1038| r1038_9(..(*)(..)) = FunctionAddress[_FUN] : +# 1038| m1038_10(..(*)(..)) = Store[#return] : &:r1038_8, r1038_9 +# 1038| v1038_11(void) = ReturnIndirection[#this] : &:r1038_6, ~m? +# 1038| r1038_12(glval<..(*)(..)>) = VariableAddress[#return] : +# 1038| v1038_13(void) = ReturnValue : &:r1038_12, m1038_10 +# 1038| v1038_14(void) = AliasedUse : ~m? +# 1038| v1038_15(void) = ExitFunction : # 1040| void Lambda(int, String const&) # 1040| Block 0 -# 1040| v1040_1(void) = EnterFunction : -# 1040| m1040_2(unknown) = AliasedDefinition : -# 1040| m1040_3(unknown) = InitializeNonLocal : -# 1040| m1040_4(unknown) = Chi : total:m1040_2, partial:m1040_3 -# 1040| r1040_5(glval) = VariableAddress[x] : -# 1040| m1040_6(int) = InitializeParameter[x] : &:r1040_5 -# 1040| m1040_7(unknown) = Chi : total:m1040_4, partial:m1040_6 -# 1040| r1040_8(glval) = VariableAddress[s] : -# 1040| m1040_9(String &) = InitializeParameter[s] : &:r1040_8 -# 1040| r1040_10(String &) = Load[s] : &:r1040_8, m1040_9 -# 1040| m1040_11(unknown) = InitializeIndirection[s] : &:r1040_10 -# 1040| m1040_12(unknown) = Chi : total:m1040_7, partial:m1040_11 -# 1041| r1041_1(glval) = VariableAddress[lambda_empty] : -# 1041| r1041_2(glval) = VariableAddress[#temp1041:23] : -# 1041| m1041_3(decltype([...](...){...})) = Uninitialized[#temp1041:23] : &:r1041_2 -# 1041| r1041_4(decltype([...](...){...})) = Load[#temp1041:23] : &:r1041_2, m1041_3 -# 1041| m1041_5(decltype([...](...){...})) = Store[lambda_empty] : &:r1041_1, r1041_4 -# 1042| r1042_1(char) = Constant[65] : -# 1043| r1043_1(glval) = VariableAddress[lambda_ref] : -# 1043| r1043_2(glval) = VariableAddress[#temp1043:20] : -# 1043| m1043_3(decltype([...](...){...})) = Uninitialized[#temp1043:20] : &:r1043_2 -# 1043| r1043_4(glval) = FieldAddress[s] : r1043_2 -# 1043| r1043_5(glval) = VariableAddress[s] : -# 1043| r1043_6(String &) = Load[s] : &:r1043_5, m1040_9 -# 1043| r1043_7(glval) = CopyValue : r1043_6 -# 1043| r1043_8(String &) = CopyValue : r1043_7 -# 1043| m1043_9(String &) = Store[?] : &:r1043_4, r1043_8 -# 1043| m1043_10(decltype([...](...){...})) = Chi : total:m1043_3, partial:m1043_9 -# 1043| r1043_11(glval) = FieldAddress[x] : r1043_2 -# 1043| r1043_12(glval) = VariableAddress[x] : -#-----| r0_1(int &) = CopyValue : r1043_12 -#-----| m0_2(int &) = Store[?] : &:r1043_11, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1043_10, partial:m0_2 -# 1043| r1043_13(decltype([...](...){...})) = Load[#temp1043:20] : &:r1043_2, m0_3 -# 1043| m1043_14(decltype([...](...){...})) = Store[lambda_ref] : &:r1043_1, r1043_13 -# 1044| r1044_1(glval) = VariableAddress[lambda_ref] : -# 1044| r1044_2(glval) = Convert : r1044_1 -# 1044| r1044_3(glval) = FunctionAddress[operator()] : -# 1044| r1044_4(float) = Constant[1.0] : -# 1044| r1044_5(char) = Call[operator()] : func:r1044_3, this:r1044_2, 0:r1044_4 -# 1044| m1044_6(unknown) = ^CallSideEffect : ~m1040_12 -# 1044| m1044_7(unknown) = Chi : total:m1040_12, partial:m1044_6 -# 1044| v1044_8(void) = ^IndirectReadSideEffect[-1] : &:r1044_2, m1043_14 -# 1045| r1045_1(glval) = VariableAddress[lambda_val] : -# 1045| r1045_2(glval) = VariableAddress[#temp1045:20] : -# 1045| m1045_3(decltype([...](...){...})) = Uninitialized[#temp1045:20] : &:r1045_2 -# 1045| m1045_4(unknown) = Chi : total:m1044_7, partial:m1045_3 -# 1045| r1045_5(glval) = FieldAddress[s] : r1045_2 -# 1045| r1045_6(glval) = FunctionAddress[String] : -# 1045| v1045_7(void) = Call[String] : func:r1045_6, this:r1045_5 -# 1045| m1045_8(unknown) = ^CallSideEffect : ~m1045_4 -# 1045| m1045_9(unknown) = Chi : total:m1045_4, partial:m1045_8 -# 1045| m1045_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1045_5 -# 1045| m1045_11(unknown) = Chi : total:m1045_9, partial:m1045_10 -# 1045| r1045_12(glval) = FieldAddress[x] : r1045_2 -# 1045| r1045_13(glval) = VariableAddress[x] : -# 1045| r1045_14(int) = Load[x] : &:r1045_13, ~m1045_9 -# 1045| m1045_15(int) = Store[?] : &:r1045_12, r1045_14 -# 1045| m1045_16(unknown) = Chi : total:m1045_11, partial:m1045_15 -# 1045| r1045_17(decltype([...](...){...})) = Load[#temp1045:20] : &:r1045_2, ~m1045_16 -# 1045| m1045_18(decltype([...](...){...})) = Store[lambda_val] : &:r1045_1, r1045_17 -# 1045| m1045_19(unknown) = Chi : total:m1045_16, partial:m1045_18 -# 1046| r1046_1(glval) = VariableAddress[lambda_val] : -# 1046| r1046_2(glval) = Convert : r1046_1 -# 1046| r1046_3(glval) = FunctionAddress[operator()] : -# 1046| r1046_4(float) = Constant[2.0] : -# 1046| r1046_5(char) = Call[operator()] : func:r1046_3, this:r1046_2, 0:r1046_4 -# 1046| m1046_6(unknown) = ^CallSideEffect : ~m1045_19 -# 1046| m1046_7(unknown) = Chi : total:m1045_19, partial:m1046_6 -# 1046| v1046_8(void) = ^IndirectReadSideEffect[-1] : &:r1046_2, ~m1046_7 -# 1047| r1047_1(glval) = VariableAddress[lambda_ref_explicit] : -# 1047| r1047_2(glval) = VariableAddress[#temp1047:29] : -# 1047| m1047_3(decltype([...](...){...})) = Uninitialized[#temp1047:29] : &:r1047_2 -# 1047| r1047_4(glval) = FieldAddress[s] : r1047_2 -# 1047| r1047_5(glval) = VariableAddress[s] : -# 1047| r1047_6(String &) = Load[s] : &:r1047_5, m1040_9 -# 1047| r1047_7(glval) = CopyValue : r1047_6 -# 1047| r1047_8(String &) = CopyValue : r1047_7 -# 1047| m1047_9(String &) = Store[?] : &:r1047_4, r1047_8 -# 1047| r1047_10(decltype([...](...){...})) = Load[#temp1047:29] : &:r1047_2, ~m1047_9 -# 1047| m1047_11(decltype([...](...){...})) = Store[lambda_ref_explicit] : &:r1047_1, r1047_10 -# 1048| r1048_1(glval) = VariableAddress[lambda_ref_explicit] : -# 1048| r1048_2(glval) = Convert : r1048_1 -# 1048| r1048_3(glval) = FunctionAddress[operator()] : -# 1048| r1048_4(float) = Constant[3.0] : -# 1048| r1048_5(char) = Call[operator()] : func:r1048_3, this:r1048_2, 0:r1048_4 -# 1048| m1048_6(unknown) = ^CallSideEffect : ~m1046_7 -# 1048| m1048_7(unknown) = Chi : total:m1046_7, partial:m1048_6 -# 1048| v1048_8(void) = ^IndirectReadSideEffect[-1] : &:r1048_2, m1047_11 -# 1049| r1049_1(glval) = VariableAddress[lambda_val_explicit] : -# 1049| r1049_2(glval) = VariableAddress[#temp1049:29] : -# 1049| m1049_3(decltype([...](...){...})) = Uninitialized[#temp1049:29] : &:r1049_2 -# 1049| m1049_4(unknown) = Chi : total:m1048_7, partial:m1049_3 -# 1049| r1049_5(glval) = FieldAddress[s] : r1049_2 -# 1049| r1049_6(glval) = FunctionAddress[String] : -# 1049| v1049_7(void) = Call[String] : func:r1049_6, this:r1049_5 -# 1049| m1049_8(unknown) = ^CallSideEffect : ~m1049_4 -# 1049| m1049_9(unknown) = Chi : total:m1049_4, partial:m1049_8 -# 1049| m1049_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1049_5 -# 1049| m1049_11(unknown) = Chi : total:m1049_9, partial:m1049_10 -# 1049| r1049_12(decltype([...](...){...})) = Load[#temp1049:29] : &:r1049_2, ~m1049_11 -# 1049| m1049_13(decltype([...](...){...})) = Store[lambda_val_explicit] : &:r1049_1, r1049_12 -# 1049| m1049_14(unknown) = Chi : total:m1049_11, partial:m1049_13 -# 1050| r1050_1(glval) = VariableAddress[lambda_val_explicit] : -# 1050| r1050_2(glval) = Convert : r1050_1 -# 1050| r1050_3(glval) = FunctionAddress[operator()] : -# 1050| r1050_4(float) = Constant[4.0] : -# 1050| r1050_5(char) = Call[operator()] : func:r1050_3, this:r1050_2, 0:r1050_4 -# 1050| m1050_6(unknown) = ^CallSideEffect : ~m1049_14 -# 1050| m1050_7(unknown) = Chi : total:m1049_14, partial:m1050_6 -# 1050| v1050_8(void) = ^IndirectReadSideEffect[-1] : &:r1050_2, ~m1050_7 -# 1051| r1051_1(glval) = VariableAddress[lambda_mixed_explicit] : -# 1051| r1051_2(glval) = VariableAddress[#temp1051:31] : -# 1051| m1051_3(decltype([...](...){...})) = Uninitialized[#temp1051:31] : &:r1051_2 -# 1051| r1051_4(glval) = FieldAddress[s] : r1051_2 -# 1051| r1051_5(glval) = VariableAddress[s] : -# 1051| r1051_6(String &) = Load[s] : &:r1051_5, m1040_9 -# 1051| r1051_7(glval) = CopyValue : r1051_6 -# 1051| r1051_8(String &) = CopyValue : r1051_7 -# 1051| m1051_9(String &) = Store[?] : &:r1051_4, r1051_8 -# 1051| m1051_10(decltype([...](...){...})) = Chi : total:m1051_3, partial:m1051_9 -# 1051| r1051_11(glval) = FieldAddress[x] : r1051_2 -# 1051| r1051_12(glval) = VariableAddress[x] : -# 1051| r1051_13(int) = Load[x] : &:r1051_12, ~m1050_7 -# 1051| m1051_14(int) = Store[?] : &:r1051_11, r1051_13 -# 1051| m1051_15(decltype([...](...){...})) = Chi : total:m1051_10, partial:m1051_14 -# 1051| r1051_16(decltype([...](...){...})) = Load[#temp1051:31] : &:r1051_2, m1051_15 -# 1051| m1051_17(decltype([...](...){...})) = Store[lambda_mixed_explicit] : &:r1051_1, r1051_16 -# 1052| r1052_1(glval) = VariableAddress[lambda_mixed_explicit] : -# 1052| r1052_2(glval) = Convert : r1052_1 -# 1052| r1052_3(glval) = FunctionAddress[operator()] : -# 1052| r1052_4(float) = Constant[5.0] : -# 1052| r1052_5(char) = Call[operator()] : func:r1052_3, this:r1052_2, 0:r1052_4 -# 1052| m1052_6(unknown) = ^CallSideEffect : ~m1050_7 -# 1052| m1052_7(unknown) = Chi : total:m1050_7, partial:m1052_6 -# 1052| v1052_8(void) = ^IndirectReadSideEffect[-1] : &:r1052_2, m1051_17 -# 1053| r1053_1(glval) = VariableAddress[r] : -# 1053| r1053_2(glval) = VariableAddress[x] : -# 1053| r1053_3(int) = Load[x] : &:r1053_2, ~m1052_7 -# 1053| r1053_4(int) = Constant[1] : -# 1053| r1053_5(int) = Sub : r1053_3, r1053_4 -# 1053| m1053_6(int) = Store[r] : &:r1053_1, r1053_5 -# 1053| m1053_7(unknown) = Chi : total:m1052_7, partial:m1053_6 -# 1054| r1054_1(glval) = VariableAddress[lambda_inits] : -# 1054| r1054_2(glval) = VariableAddress[#temp1054:22] : -# 1054| m1054_3(decltype([...](...){...})) = Uninitialized[#temp1054:22] : &:r1054_2 -# 1054| r1054_4(glval) = FieldAddress[i] : r1054_2 -# 1054| r1054_5(glval) = VariableAddress[x] : -# 1054| r1054_6(int) = Load[x] : &:r1054_5, ~m1052_7 -# 1054| r1054_7(int) = Constant[1] : -# 1054| r1054_8(int) = Add : r1054_6, r1054_7 -# 1054| m1054_9(int) = Store[?] : &:r1054_4, r1054_8 -# 1054| m1054_10(decltype([...](...){...})) = Chi : total:m1054_3, partial:m1054_9 -# 1054| r1054_11(glval) = FieldAddress[j] : r1054_2 -# 1054| r1054_12(glval) = VariableAddress[r] : -# 1054| r1054_13(int &) = CopyValue : r1054_12 -# 1054| m1054_14(int &) = Store[?] : &:r1054_11, r1054_13 -# 1054| m1054_15(decltype([...](...){...})) = Chi : total:m1054_10, partial:m1054_14 -# 1054| r1054_16(glval) = FieldAddress[s] : r1054_2 -# 1054| r1054_17(glval) = VariableAddress[s] : -# 1054| r1054_18(String &) = Load[s] : &:r1054_17, m1040_9 -# 1054| r1054_19(glval) = CopyValue : r1054_18 -# 1054| r1054_20(String &) = CopyValue : r1054_19 -# 1054| m1054_21(String &) = Store[?] : &:r1054_16, r1054_20 -# 1054| m1054_22(decltype([...](...){...})) = Chi : total:m1054_15, partial:m1054_21 -# 1054| r1054_23(glval) = FieldAddress[x] : r1054_2 -# 1054| r1054_24(glval) = VariableAddress[x] : -# 1054| r1054_25(int) = Load[x] : &:r1054_24, ~m1052_7 -# 1054| m1054_26(int) = Store[?] : &:r1054_23, r1054_25 -# 1054| m1054_27(decltype([...](...){...})) = Chi : total:m1054_22, partial:m1054_26 -# 1054| r1054_28(decltype([...](...){...})) = Load[#temp1054:22] : &:r1054_2, m1054_27 -# 1054| m1054_29(decltype([...](...){...})) = Store[lambda_inits] : &:r1054_1, r1054_28 -# 1055| r1055_1(glval) = VariableAddress[lambda_inits] : -# 1055| r1055_2(glval) = Convert : r1055_1 -# 1055| r1055_3(glval) = FunctionAddress[operator()] : -# 1055| r1055_4(float) = Constant[6.0] : -# 1055| r1055_5(char) = Call[operator()] : func:r1055_3, this:r1055_2, 0:r1055_4 -# 1055| m1055_6(unknown) = ^CallSideEffect : ~m1053_7 -# 1055| m1055_7(unknown) = Chi : total:m1053_7, partial:m1055_6 -# 1055| v1055_8(void) = ^IndirectReadSideEffect[-1] : &:r1055_2, m1054_29 -# 1056| v1056_1(void) = NoOp : -# 1056| r1056_2(glval) = VariableAddress[lambda_val_explicit] : -# 1056| r1056_3(glval) = FunctionAddress[~] : -# 1056| v1056_4(void) = Call[~] : func:r1056_3, this:r1056_2 -# 1056| m1056_5(unknown) = ^CallSideEffect : ~m1055_7 -# 1056| m1056_6(unknown) = Chi : total:m1055_7, partial:m1056_5 -# 1056| v1056_7(void) = ^IndirectReadSideEffect[-1] : &:r1056_2, ~m1056_6 -# 1056| m1056_8(decltype([...](...){...})) = ^IndirectMayWriteSideEffect[-1] : &:r1056_2 -# 1056| m1056_9(unknown) = Chi : total:m1056_6, partial:m1056_8 -# 1056| r1056_10(glval) = VariableAddress[lambda_val] : -# 1056| r1056_11(glval) = FunctionAddress[~] : -# 1056| v1056_12(void) = Call[~] : func:r1056_11, this:r1056_10 -# 1056| m1056_13(unknown) = ^CallSideEffect : ~m1056_9 -# 1056| m1056_14(unknown) = Chi : total:m1056_9, partial:m1056_13 -# 1056| v1056_15(void) = ^IndirectReadSideEffect[-1] : &:r1056_10, ~m1056_14 -# 1056| m1056_16(decltype([...](...){...})) = ^IndirectMayWriteSideEffect[-1] : &:r1056_10 -# 1056| m1056_17(unknown) = Chi : total:m1056_14, partial:m1056_16 -# 1040| v1040_13(void) = ReturnIndirection[s] : &:r1040_10, ~m1056_17 -# 1040| v1040_14(void) = ReturnVoid : -# 1040| v1040_15(void) = AliasedUse : ~m1056_14 -# 1040| v1040_16(void) = ExitFunction : +# 1040| v1040_1(void) = EnterFunction : +# 1040| mu1040_2(unknown) = AliasedDefinition : +# 1040| mu1040_3(unknown) = InitializeNonLocal : +# 1040| r1040_4(glval) = VariableAddress[x] : +# 1040| mu1040_5(int) = InitializeParameter[x] : &:r1040_4 +# 1040| r1040_6(glval) = VariableAddress[s] : +# 1040| m1040_7(String &) = InitializeParameter[s] : &:r1040_6 +# 1040| r1040_8(String &) = Load[s] : &:r1040_6, m1040_7 +# 1040| mu1040_9(unknown) = InitializeIndirection[s] : &:r1040_8 +# 1041| r1041_1(glval) = VariableAddress[lambda_empty] : +# 1041| r1041_2(glval) = VariableAddress[#temp1041:23] : +# 1041| m1041_3(decltype([...](...){...})) = Uninitialized[#temp1041:23] : &:r1041_2 +# 1041| r1041_4(decltype([...](...){...})) = Load[#temp1041:23] : &:r1041_2, m1041_3 +# 1041| m1041_5(decltype([...](...){...})) = Store[lambda_empty] : &:r1041_1, r1041_4 +# 1042| r1042_1(char) = Constant[65] : +# 1043| r1043_1(glval) = VariableAddress[lambda_ref] : +# 1043| r1043_2(glval) = VariableAddress[#temp1043:20] : +# 1043| mu1043_3(decltype([...](...){...})) = Uninitialized[#temp1043:20] : &:r1043_2 +# 1043| r1043_4(glval) = FieldAddress[s] : r1043_2 +# 1043| r1043_5(glval) = VariableAddress[s] : +# 1043| r1043_6(String &) = Load[s] : &:r1043_5, m1040_7 +# 1043| r1043_7(glval) = CopyValue : r1043_6 +# 1043| r1043_8(String &) = CopyValue : r1043_7 +# 1043| mu1043_9(String &) = Store[?] : &:r1043_4, r1043_8 +# 1043| r1043_10(glval) = FieldAddress[x] : r1043_2 +# 1043| r1043_11(glval) = VariableAddress[x] : +#-----| r0_1(int &) = CopyValue : r1043_11 +#-----| mu0_2(int &) = Store[?] : &:r1043_10, r0_1 +# 1043| r1043_12(decltype([...](...){...})) = Load[#temp1043:20] : &:r1043_2, ~m? +# 1043| mu1043_13(decltype([...](...){...})) = Store[lambda_ref] : &:r1043_1, r1043_12 +# 1044| r1044_1(glval) = VariableAddress[lambda_ref] : +# 1044| r1044_2(glval) = Convert : r1044_1 +# 1044| r1044_3(glval) = FunctionAddress[operator()] : +# 1044| r1044_4(float) = Constant[1.0] : +# 1044| r1044_5(char) = Call[operator()] : func:r1044_3, this:r1044_2, 0:r1044_4 +# 1044| mu1044_6(unknown) = ^CallSideEffect : ~m? +# 1044| v1044_7(void) = ^IndirectReadSideEffect[-1] : &:r1044_2, ~m? +# 1045| r1045_1(glval) = VariableAddress[lambda_val] : +# 1045| r1045_2(glval) = VariableAddress[#temp1045:20] : +# 1045| mu1045_3(decltype([...](...){...})) = Uninitialized[#temp1045:20] : &:r1045_2 +# 1045| r1045_4(glval) = FieldAddress[s] : r1045_2 +# 1045| r1045_5(glval) = FunctionAddress[String] : +# 1045| v1045_6(void) = Call[String] : func:r1045_5, this:r1045_4 +# 1045| mu1045_7(unknown) = ^CallSideEffect : ~m? +# 1045| mu1045_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1045_4 +# 1045| r1045_9(glval) = FieldAddress[x] : r1045_2 +# 1045| r1045_10(glval) = VariableAddress[x] : +# 1045| r1045_11(int) = Load[x] : &:r1045_10, ~m? +# 1045| mu1045_12(int) = Store[?] : &:r1045_9, r1045_11 +# 1045| r1045_13(decltype([...](...){...})) = Load[#temp1045:20] : &:r1045_2, ~m? +# 1045| mu1045_14(decltype([...](...){...})) = Store[lambda_val] : &:r1045_1, r1045_13 +# 1046| r1046_1(glval) = VariableAddress[lambda_val] : +# 1046| r1046_2(glval) = Convert : r1046_1 +# 1046| r1046_3(glval) = FunctionAddress[operator()] : +# 1046| r1046_4(float) = Constant[2.0] : +# 1046| r1046_5(char) = Call[operator()] : func:r1046_3, this:r1046_2, 0:r1046_4 +# 1046| mu1046_6(unknown) = ^CallSideEffect : ~m? +# 1046| v1046_7(void) = ^IndirectReadSideEffect[-1] : &:r1046_2, ~m? +# 1047| r1047_1(glval) = VariableAddress[lambda_ref_explicit] : +# 1047| r1047_2(glval) = VariableAddress[#temp1047:29] : +# 1047| mu1047_3(decltype([...](...){...})) = Uninitialized[#temp1047:29] : &:r1047_2 +# 1047| r1047_4(glval) = FieldAddress[s] : r1047_2 +# 1047| r1047_5(glval) = VariableAddress[s] : +# 1047| r1047_6(String &) = Load[s] : &:r1047_5, m1040_7 +# 1047| r1047_7(glval) = CopyValue : r1047_6 +# 1047| r1047_8(String &) = CopyValue : r1047_7 +# 1047| mu1047_9(String &) = Store[?] : &:r1047_4, r1047_8 +# 1047| r1047_10(decltype([...](...){...})) = Load[#temp1047:29] : &:r1047_2, ~m? +# 1047| mu1047_11(decltype([...](...){...})) = Store[lambda_ref_explicit] : &:r1047_1, r1047_10 +# 1048| r1048_1(glval) = VariableAddress[lambda_ref_explicit] : +# 1048| r1048_2(glval) = Convert : r1048_1 +# 1048| r1048_3(glval) = FunctionAddress[operator()] : +# 1048| r1048_4(float) = Constant[3.0] : +# 1048| r1048_5(char) = Call[operator()] : func:r1048_3, this:r1048_2, 0:r1048_4 +# 1048| mu1048_6(unknown) = ^CallSideEffect : ~m? +# 1048| v1048_7(void) = ^IndirectReadSideEffect[-1] : &:r1048_2, ~m? +# 1049| r1049_1(glval) = VariableAddress[lambda_val_explicit] : +# 1049| r1049_2(glval) = VariableAddress[#temp1049:29] : +# 1049| mu1049_3(decltype([...](...){...})) = Uninitialized[#temp1049:29] : &:r1049_2 +# 1049| r1049_4(glval) = FieldAddress[s] : r1049_2 +# 1049| r1049_5(glval) = FunctionAddress[String] : +# 1049| v1049_6(void) = Call[String] : func:r1049_5, this:r1049_4 +# 1049| mu1049_7(unknown) = ^CallSideEffect : ~m? +# 1049| mu1049_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1049_4 +# 1049| r1049_9(decltype([...](...){...})) = Load[#temp1049:29] : &:r1049_2, ~m? +# 1049| mu1049_10(decltype([...](...){...})) = Store[lambda_val_explicit] : &:r1049_1, r1049_9 +# 1050| r1050_1(glval) = VariableAddress[lambda_val_explicit] : +# 1050| r1050_2(glval) = Convert : r1050_1 +# 1050| r1050_3(glval) = FunctionAddress[operator()] : +# 1050| r1050_4(float) = Constant[4.0] : +# 1050| r1050_5(char) = Call[operator()] : func:r1050_3, this:r1050_2, 0:r1050_4 +# 1050| mu1050_6(unknown) = ^CallSideEffect : ~m? +# 1050| v1050_7(void) = ^IndirectReadSideEffect[-1] : &:r1050_2, ~m? +# 1051| r1051_1(glval) = VariableAddress[lambda_mixed_explicit] : +# 1051| r1051_2(glval) = VariableAddress[#temp1051:31] : +# 1051| mu1051_3(decltype([...](...){...})) = Uninitialized[#temp1051:31] : &:r1051_2 +# 1051| r1051_4(glval) = FieldAddress[s] : r1051_2 +# 1051| r1051_5(glval) = VariableAddress[s] : +# 1051| r1051_6(String &) = Load[s] : &:r1051_5, m1040_7 +# 1051| r1051_7(glval) = CopyValue : r1051_6 +# 1051| r1051_8(String &) = CopyValue : r1051_7 +# 1051| mu1051_9(String &) = Store[?] : &:r1051_4, r1051_8 +# 1051| r1051_10(glval) = FieldAddress[x] : r1051_2 +# 1051| r1051_11(glval) = VariableAddress[x] : +# 1051| r1051_12(int) = Load[x] : &:r1051_11, ~m? +# 1051| mu1051_13(int) = Store[?] : &:r1051_10, r1051_12 +# 1051| r1051_14(decltype([...](...){...})) = Load[#temp1051:31] : &:r1051_2, ~m? +# 1051| mu1051_15(decltype([...](...){...})) = Store[lambda_mixed_explicit] : &:r1051_1, r1051_14 +# 1052| r1052_1(glval) = VariableAddress[lambda_mixed_explicit] : +# 1052| r1052_2(glval) = Convert : r1052_1 +# 1052| r1052_3(glval) = FunctionAddress[operator()] : +# 1052| r1052_4(float) = Constant[5.0] : +# 1052| r1052_5(char) = Call[operator()] : func:r1052_3, this:r1052_2, 0:r1052_4 +# 1052| mu1052_6(unknown) = ^CallSideEffect : ~m? +# 1052| v1052_7(void) = ^IndirectReadSideEffect[-1] : &:r1052_2, ~m? +# 1053| r1053_1(glval) = VariableAddress[r] : +# 1053| r1053_2(glval) = VariableAddress[x] : +# 1053| r1053_3(int) = Load[x] : &:r1053_2, ~m? +# 1053| r1053_4(int) = Constant[1] : +# 1053| r1053_5(int) = Sub : r1053_3, r1053_4 +# 1053| mu1053_6(int) = Store[r] : &:r1053_1, r1053_5 +# 1054| r1054_1(glval) = VariableAddress[lambda_inits] : +# 1054| r1054_2(glval) = VariableAddress[#temp1054:22] : +# 1054| mu1054_3(decltype([...](...){...})) = Uninitialized[#temp1054:22] : &:r1054_2 +# 1054| r1054_4(glval) = FieldAddress[i] : r1054_2 +# 1054| r1054_5(glval) = VariableAddress[x] : +# 1054| r1054_6(int) = Load[x] : &:r1054_5, ~m? +# 1054| r1054_7(int) = Constant[1] : +# 1054| r1054_8(int) = Add : r1054_6, r1054_7 +# 1054| mu1054_9(int) = Store[?] : &:r1054_4, r1054_8 +# 1054| r1054_10(glval) = FieldAddress[j] : r1054_2 +# 1054| r1054_11(glval) = VariableAddress[r] : +# 1054| r1054_12(int &) = CopyValue : r1054_11 +# 1054| mu1054_13(int &) = Store[?] : &:r1054_10, r1054_12 +# 1054| r1054_14(glval) = FieldAddress[s] : r1054_2 +# 1054| r1054_15(glval) = VariableAddress[s] : +# 1054| r1054_16(String &) = Load[s] : &:r1054_15, m1040_7 +# 1054| r1054_17(glval) = CopyValue : r1054_16 +# 1054| r1054_18(String &) = CopyValue : r1054_17 +# 1054| mu1054_19(String &) = Store[?] : &:r1054_14, r1054_18 +# 1054| r1054_20(glval) = FieldAddress[x] : r1054_2 +# 1054| r1054_21(glval) = VariableAddress[x] : +# 1054| r1054_22(int) = Load[x] : &:r1054_21, ~m? +# 1054| mu1054_23(int) = Store[?] : &:r1054_20, r1054_22 +# 1054| r1054_24(decltype([...](...){...})) = Load[#temp1054:22] : &:r1054_2, ~m? +# 1054| mu1054_25(decltype([...](...){...})) = Store[lambda_inits] : &:r1054_1, r1054_24 +# 1055| r1055_1(glval) = VariableAddress[lambda_inits] : +# 1055| r1055_2(glval) = Convert : r1055_1 +# 1055| r1055_3(glval) = FunctionAddress[operator()] : +# 1055| r1055_4(float) = Constant[6.0] : +# 1055| r1055_5(char) = Call[operator()] : func:r1055_3, this:r1055_2, 0:r1055_4 +# 1055| mu1055_6(unknown) = ^CallSideEffect : ~m? +# 1055| v1055_7(void) = ^IndirectReadSideEffect[-1] : &:r1055_2, ~m? +# 1056| v1056_1(void) = NoOp : +# 1056| r1056_2(glval) = VariableAddress[lambda_val_explicit] : +# 1056| r1056_3(glval) = FunctionAddress[~] : +# 1056| v1056_4(void) = Call[~] : func:r1056_3, this:r1056_2 +# 1056| mu1056_5(unknown) = ^CallSideEffect : ~m? +# 1056| v1056_6(void) = ^IndirectReadSideEffect[-1] : &:r1056_2, ~m? +# 1056| mu1056_7(decltype([...](...){...})) = ^IndirectMayWriteSideEffect[-1] : &:r1056_2 +# 1056| r1056_8(glval) = VariableAddress[lambda_val] : +# 1056| r1056_9(glval) = FunctionAddress[~] : +# 1056| v1056_10(void) = Call[~] : func:r1056_9, this:r1056_8 +# 1056| mu1056_11(unknown) = ^CallSideEffect : ~m? +# 1056| v1056_12(void) = ^IndirectReadSideEffect[-1] : &:r1056_8, ~m? +# 1056| mu1056_13(decltype([...](...){...})) = ^IndirectMayWriteSideEffect[-1] : &:r1056_8 +# 1040| v1040_10(void) = ReturnIndirection[s] : &:r1040_8, ~m? +# 1040| v1040_11(void) = ReturnVoid : +# 1040| v1040_12(void) = AliasedUse : ~m? +# 1040| v1040_13(void) = ExitFunction : # 1041| void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)&&) # 1041| Block 0 # 1041| v1041_1(void) = EnterFunction : -# 1041| m1041_2(unknown) = AliasedDefinition : -# 1041| m1041_3(unknown) = InitializeNonLocal : -# 1041| m1041_4(unknown) = Chi : total:m1041_2, partial:m1041_3 -# 1041| r1041_5(glval) = VariableAddress[#this] : -# 1041| m1041_6(glval) = InitializeParameter[#this] : &:r1041_5 -# 1041| r1041_7(glval) = Load[#this] : &:r1041_5, m1041_6 -# 1041| m1041_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1041_7 +# 1041| mu1041_2(unknown) = AliasedDefinition : +# 1041| mu1041_3(unknown) = InitializeNonLocal : +# 1041| r1041_4(glval) = VariableAddress[#this] : +# 1041| m1041_5(glval) = InitializeParameter[#this] : &:r1041_4 +# 1041| r1041_6(glval) = Load[#this] : &:r1041_4, m1041_5 +# 1041| mu1041_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1041_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(lambda [] type at line 1041, col. 23 &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(lambda [] type at line 1041, col. 23 &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1041| v1041_9(void) = NoOp : -# 1041| v1041_10(void) = ReturnIndirection[#this] : &:r1041_7, m1041_8 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1041| v1041_11(void) = ReturnVoid : -# 1041| v1041_12(void) = AliasedUse : m1041_3 -# 1041| v1041_13(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1041| v1041_8(void) = NoOp : +# 1041| v1041_9(void) = ReturnIndirection[#this] : &:r1041_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1041| v1041_10(void) = ReturnVoid : +# 1041| v1041_11(void) = AliasedUse : ~m? +# 1041| v1041_12(void) = ExitFunction : # 1041| char (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::operator()(float) const # 1041| Block 0 # 1041| v1041_1(void) = EnterFunction : -# 1041| m1041_2(unknown) = AliasedDefinition : -# 1041| m1041_3(unknown) = InitializeNonLocal : -# 1041| m1041_4(unknown) = Chi : total:m1041_2, partial:m1041_3 -# 1041| r1041_5(glval) = VariableAddress[#this] : -# 1041| m1041_6(glval) = InitializeParameter[#this] : &:r1041_5 -# 1041| r1041_7(glval) = Load[#this] : &:r1041_5, m1041_6 -# 1041| m1041_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1041_7 -# 1041| r1041_9(glval) = VariableAddress[f] : -# 1041| m1041_10(float) = InitializeParameter[f] : &:r1041_9 -# 1041| r1041_11(glval) = VariableAddress[#return] : -# 1041| r1041_12(char) = Constant[65] : -# 1041| m1041_13(char) = Store[#return] : &:r1041_11, r1041_12 -# 1041| v1041_14(void) = ReturnIndirection[#this] : &:r1041_7, m1041_8 -# 1041| r1041_15(glval) = VariableAddress[#return] : -# 1041| v1041_16(void) = ReturnValue : &:r1041_15, m1041_13 -# 1041| v1041_17(void) = AliasedUse : m1041_3 -# 1041| v1041_18(void) = ExitFunction : +# 1041| mu1041_2(unknown) = AliasedDefinition : +# 1041| mu1041_3(unknown) = InitializeNonLocal : +# 1041| r1041_4(glval) = VariableAddress[#this] : +# 1041| m1041_5(glval) = InitializeParameter[#this] : &:r1041_4 +# 1041| r1041_6(glval) = Load[#this] : &:r1041_4, m1041_5 +# 1041| mu1041_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1041_6 +# 1041| r1041_8(glval) = VariableAddress[f] : +# 1041| m1041_9(float) = InitializeParameter[f] : &:r1041_8 +# 1041| r1041_10(glval) = VariableAddress[#return] : +# 1041| r1041_11(char) = Constant[65] : +# 1041| m1041_12(char) = Store[#return] : &:r1041_10, r1041_11 +# 1041| v1041_13(void) = ReturnIndirection[#this] : &:r1041_6, ~m? +# 1041| r1041_14(glval) = VariableAddress[#return] : +# 1041| v1041_15(void) = ReturnValue : &:r1041_14, m1041_12 +# 1041| v1041_16(void) = AliasedUse : ~m? +# 1041| v1041_17(void) = ExitFunction : # 1041| char(* (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::operator char (*)(float)() const)(float) # 1041| Block 0 # 1041| v1041_1(void) = EnterFunction : -# 1041| m1041_2(unknown) = AliasedDefinition : -# 1041| m1041_3(unknown) = InitializeNonLocal : -# 1041| m1041_4(unknown) = Chi : total:m1041_2, partial:m1041_3 -# 1041| r1041_5(glval) = VariableAddress[#this] : -# 1041| m1041_6(glval) = InitializeParameter[#this] : &:r1041_5 -# 1041| r1041_7(glval) = Load[#this] : &:r1041_5, m1041_6 -# 1041| m1041_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1041_7 -# 1041| r1041_9(glval<..(*)(..)>) = VariableAddress[#return] : -# 1041| r1041_10(..(*)(..)) = FunctionAddress[_FUN] : -# 1041| m1041_11(..(*)(..)) = Store[#return] : &:r1041_9, r1041_10 -# 1041| v1041_12(void) = ReturnIndirection[#this] : &:r1041_7, m1041_8 -# 1041| r1041_13(glval<..(*)(..)>) = VariableAddress[#return] : -# 1041| v1041_14(void) = ReturnValue : &:r1041_13, m1041_11 -# 1041| v1041_15(void) = AliasedUse : m1041_3 -# 1041| v1041_16(void) = ExitFunction : +# 1041| mu1041_2(unknown) = AliasedDefinition : +# 1041| mu1041_3(unknown) = InitializeNonLocal : +# 1041| r1041_4(glval) = VariableAddress[#this] : +# 1041| m1041_5(glval) = InitializeParameter[#this] : &:r1041_4 +# 1041| r1041_6(glval) = Load[#this] : &:r1041_4, m1041_5 +# 1041| mu1041_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1041_6 +# 1041| r1041_8(glval<..(*)(..)>) = VariableAddress[#return] : +# 1041| r1041_9(..(*)(..)) = FunctionAddress[_FUN] : +# 1041| m1041_10(..(*)(..)) = Store[#return] : &:r1041_8, r1041_9 +# 1041| v1041_11(void) = ReturnIndirection[#this] : &:r1041_6, ~m? +# 1041| r1041_12(glval<..(*)(..)>) = VariableAddress[#return] : +# 1041| v1041_13(void) = ReturnValue : &:r1041_12, m1041_10 +# 1041| v1041_14(void) = AliasedUse : ~m? +# 1041| v1041_15(void) = ExitFunction : # 1043| char (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::operator()(float) const # 1043| Block 0 # 1043| v1043_1(void) = EnterFunction : -# 1043| m1043_2(unknown) = AliasedDefinition : -# 1043| m1043_3(unknown) = InitializeNonLocal : -# 1043| m1043_4(unknown) = Chi : total:m1043_2, partial:m1043_3 -# 1043| r1043_5(glval) = VariableAddress[#this] : -# 1043| m1043_6(glval) = InitializeParameter[#this] : &:r1043_5 -# 1043| r1043_7(glval) = Load[#this] : &:r1043_5, m1043_6 -# 1043| m1043_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1043_7 -# 1043| r1043_9(glval) = VariableAddress[f] : -# 1043| m1043_10(float) = InitializeParameter[f] : &:r1043_9 -# 1043| r1043_11(glval) = VariableAddress[#return] : -# 1043| r1043_12(glval) = VariableAddress[#this] : -# 1043| r1043_13(lambda [] type at line 1043, col. 21 *) = Load[#this] : &:r1043_12, m1043_6 -# 1043| r1043_14(glval) = FieldAddress[s] : r1043_13 -# 1043| r1043_15(String &) = Load[?] : &:r1043_14, ~m1043_8 -# 1043| r1043_16(glval) = CopyValue : r1043_15 -# 1043| r1043_17(glval) = FunctionAddress[c_str] : -# 1043| r1043_18(char *) = Call[c_str] : func:r1043_17, this:r1043_16 -# 1043| m1043_19(unknown) = ^CallSideEffect : ~m1043_4 -# 1043| m1043_20(unknown) = Chi : total:m1043_4, partial:m1043_19 -# 1043| v1043_21(void) = ^IndirectReadSideEffect[-1] : &:r1043_16, ~m1043_20 -# 1043| r1043_22(glval) = VariableAddress[#this] : -# 1043| r1043_23(lambda [] type at line 1043, col. 21 *) = Load[#this] : &:r1043_22, m1043_6 -# 1043| r1043_24(glval) = FieldAddress[x] : r1043_23 -# 1043| r1043_25(int &) = Load[?] : &:r1043_24, ~m1043_8 -# 1043| r1043_26(int) = Load[?] : &:r1043_25, ~m1043_20 -# 1043| r1043_27(glval) = PointerAdd[1] : r1043_18, r1043_26 -# 1043| r1043_28(char) = Load[?] : &:r1043_27, ~m1043_20 -# 1043| m1043_29(char) = Store[#return] : &:r1043_11, r1043_28 -# 1043| v1043_30(void) = ReturnIndirection[#this] : &:r1043_7, m1043_8 -# 1043| r1043_31(glval) = VariableAddress[#return] : -# 1043| v1043_32(void) = ReturnValue : &:r1043_31, m1043_29 -# 1043| v1043_33(void) = AliasedUse : ~m1043_20 -# 1043| v1043_34(void) = ExitFunction : +# 1043| mu1043_2(unknown) = AliasedDefinition : +# 1043| mu1043_3(unknown) = InitializeNonLocal : +# 1043| r1043_4(glval) = VariableAddress[#this] : +# 1043| m1043_5(glval) = InitializeParameter[#this] : &:r1043_4 +# 1043| r1043_6(glval) = Load[#this] : &:r1043_4, m1043_5 +# 1043| mu1043_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1043_6 +# 1043| r1043_8(glval) = VariableAddress[f] : +# 1043| m1043_9(float) = InitializeParameter[f] : &:r1043_8 +# 1043| r1043_10(glval) = VariableAddress[#return] : +# 1043| r1043_11(glval) = VariableAddress[#this] : +# 1043| r1043_12(lambda [] type at line 1043, col. 21 *) = Load[#this] : &:r1043_11, m1043_5 +# 1043| r1043_13(glval) = FieldAddress[s] : r1043_12 +# 1043| r1043_14(String &) = Load[?] : &:r1043_13, ~m? +# 1043| r1043_15(glval) = CopyValue : r1043_14 +# 1043| r1043_16(glval) = FunctionAddress[c_str] : +# 1043| r1043_17(char *) = Call[c_str] : func:r1043_16, this:r1043_15 +# 1043| mu1043_18(unknown) = ^CallSideEffect : ~m? +# 1043| v1043_19(void) = ^IndirectReadSideEffect[-1] : &:r1043_15, ~m? +# 1043| r1043_20(glval) = VariableAddress[#this] : +# 1043| r1043_21(lambda [] type at line 1043, col. 21 *) = Load[#this] : &:r1043_20, m1043_5 +# 1043| r1043_22(glval) = FieldAddress[x] : r1043_21 +# 1043| r1043_23(int &) = Load[?] : &:r1043_22, ~m? +# 1043| r1043_24(int) = Load[?] : &:r1043_23, ~m? +# 1043| r1043_25(glval) = PointerAdd[1] : r1043_17, r1043_24 +# 1043| r1043_26(char) = Load[?] : &:r1043_25, ~m? +# 1043| m1043_27(char) = Store[#return] : &:r1043_10, r1043_26 +# 1043| v1043_28(void) = ReturnIndirection[#this] : &:r1043_6, ~m? +# 1043| r1043_29(glval) = VariableAddress[#return] : +# 1043| v1043_30(void) = ReturnValue : &:r1043_29, m1043_27 +# 1043| v1043_31(void) = AliasedUse : ~m? +# 1043| v1043_32(void) = ExitFunction : # 1045| void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::~() # 1045| Block 0 # 1045| v1045_1(void) = EnterFunction : -# 1045| m1045_2(unknown) = AliasedDefinition : -# 1045| m1045_3(unknown) = InitializeNonLocal : -# 1045| m1045_4(unknown) = Chi : total:m1045_2, partial:m1045_3 -# 1045| r1045_5(glval) = VariableAddress[#this] : -# 1045| m1045_6(glval) = InitializeParameter[#this] : &:r1045_5 -# 1045| r1045_7(glval) = Load[#this] : &:r1045_5, m1045_6 -# 1045| m1045_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1045_7 -# 1045| m1045_9(unknown) = Chi : total:m1045_4, partial:m1045_8 +# 1045| mu1045_2(unknown) = AliasedDefinition : +# 1045| mu1045_3(unknown) = InitializeNonLocal : +# 1045| r1045_4(glval) = VariableAddress[#this] : +# 1045| m1045_5(glval) = InitializeParameter[#this] : &:r1045_4 +# 1045| r1045_6(glval) = Load[#this] : &:r1045_4, m1045_5 +# 1045| mu1045_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1045_6 #-----| v0_1(void) = NoOp : -# 1045| r1045_10(glval) = FieldAddress[s] : r1045_7 -# 1045| r1045_11(glval) = FunctionAddress[~String] : -# 1045| v1045_12(void) = Call[~String] : func:r1045_11, this:r1045_10 -# 1045| m1045_13(unknown) = ^CallSideEffect : ~m1045_9 -# 1045| m1045_14(unknown) = Chi : total:m1045_9, partial:m1045_13 -# 1045| v1045_15(void) = ReturnIndirection[#this] : &:r1045_7, ~m1045_14 -# 1045| v1045_16(void) = ReturnVoid : -# 1045| v1045_17(void) = AliasedUse : ~m1045_14 -# 1045| v1045_18(void) = ExitFunction : +# 1045| r1045_8(glval) = FieldAddress[s] : r1045_6 +# 1045| r1045_9(glval) = FunctionAddress[~String] : +# 1045| v1045_10(void) = Call[~String] : func:r1045_9, this:r1045_8 +# 1045| mu1045_11(unknown) = ^CallSideEffect : ~m? +# 1045| v1045_12(void) = ReturnIndirection[#this] : &:r1045_6, ~m? +# 1045| v1045_13(void) = ReturnVoid : +# 1045| v1045_14(void) = AliasedUse : ~m? +# 1045| v1045_15(void) = ExitFunction : # 1045| char (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::operator()(float) const # 1045| Block 0 # 1045| v1045_1(void) = EnterFunction : -# 1045| m1045_2(unknown) = AliasedDefinition : -# 1045| m1045_3(unknown) = InitializeNonLocal : -# 1045| m1045_4(unknown) = Chi : total:m1045_2, partial:m1045_3 -# 1045| r1045_5(glval) = VariableAddress[#this] : -# 1045| m1045_6(glval) = InitializeParameter[#this] : &:r1045_5 -# 1045| r1045_7(glval) = Load[#this] : &:r1045_5, m1045_6 -# 1045| m1045_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1045_7 -# 1045| m1045_9(unknown) = Chi : total:m1045_4, partial:m1045_8 -# 1045| r1045_10(glval) = VariableAddress[f] : -# 1045| m1045_11(float) = InitializeParameter[f] : &:r1045_10 -# 1045| r1045_12(glval) = VariableAddress[#return] : -# 1045| r1045_13(glval) = VariableAddress[#this] : -# 1045| r1045_14(lambda [] type at line 1045, col. 21 *) = Load[#this] : &:r1045_13, m1045_6 -# 1045| r1045_15(glval) = FieldAddress[s] : r1045_14 -# 1045| r1045_16(glval) = FunctionAddress[c_str] : -# 1045| r1045_17(char *) = Call[c_str] : func:r1045_16, this:r1045_15 -# 1045| m1045_18(unknown) = ^CallSideEffect : ~m1045_9 -# 1045| m1045_19(unknown) = Chi : total:m1045_9, partial:m1045_18 -# 1045| v1045_20(void) = ^IndirectReadSideEffect[-1] : &:r1045_15, ~m1045_19 -# 1045| r1045_21(glval) = VariableAddress[#this] : -# 1045| r1045_22(lambda [] type at line 1045, col. 21 *) = Load[#this] : &:r1045_21, m1045_6 -# 1045| r1045_23(glval) = FieldAddress[x] : r1045_22 -# 1045| r1045_24(int) = Load[?] : &:r1045_23, ~m1045_19 -# 1045| r1045_25(glval) = PointerAdd[1] : r1045_17, r1045_24 -# 1045| r1045_26(char) = Load[?] : &:r1045_25, ~m1045_19 -# 1045| m1045_27(char) = Store[#return] : &:r1045_12, r1045_26 -# 1045| v1045_28(void) = ReturnIndirection[#this] : &:r1045_7, ~m1045_19 -# 1045| r1045_29(glval) = VariableAddress[#return] : -# 1045| v1045_30(void) = ReturnValue : &:r1045_29, m1045_27 -# 1045| v1045_31(void) = AliasedUse : ~m1045_19 -# 1045| v1045_32(void) = ExitFunction : +# 1045| mu1045_2(unknown) = AliasedDefinition : +# 1045| mu1045_3(unknown) = InitializeNonLocal : +# 1045| r1045_4(glval) = VariableAddress[#this] : +# 1045| m1045_5(glval) = InitializeParameter[#this] : &:r1045_4 +# 1045| r1045_6(glval) = Load[#this] : &:r1045_4, m1045_5 +# 1045| mu1045_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1045_6 +# 1045| r1045_8(glval) = VariableAddress[f] : +# 1045| m1045_9(float) = InitializeParameter[f] : &:r1045_8 +# 1045| r1045_10(glval) = VariableAddress[#return] : +# 1045| r1045_11(glval) = VariableAddress[#this] : +# 1045| r1045_12(lambda [] type at line 1045, col. 21 *) = Load[#this] : &:r1045_11, m1045_5 +# 1045| r1045_13(glval) = FieldAddress[s] : r1045_12 +# 1045| r1045_14(glval) = FunctionAddress[c_str] : +# 1045| r1045_15(char *) = Call[c_str] : func:r1045_14, this:r1045_13 +# 1045| mu1045_16(unknown) = ^CallSideEffect : ~m? +# 1045| v1045_17(void) = ^IndirectReadSideEffect[-1] : &:r1045_13, ~m? +# 1045| r1045_18(glval) = VariableAddress[#this] : +# 1045| r1045_19(lambda [] type at line 1045, col. 21 *) = Load[#this] : &:r1045_18, m1045_5 +# 1045| r1045_20(glval) = FieldAddress[x] : r1045_19 +# 1045| r1045_21(int) = Load[?] : &:r1045_20, ~m? +# 1045| r1045_22(glval) = PointerAdd[1] : r1045_15, r1045_21 +# 1045| r1045_23(char) = Load[?] : &:r1045_22, ~m? +# 1045| m1045_24(char) = Store[#return] : &:r1045_10, r1045_23 +# 1045| v1045_25(void) = ReturnIndirection[#this] : &:r1045_6, ~m? +# 1045| r1045_26(glval) = VariableAddress[#return] : +# 1045| v1045_27(void) = ReturnValue : &:r1045_26, m1045_24 +# 1045| v1045_28(void) = AliasedUse : ~m? +# 1045| v1045_29(void) = ExitFunction : # 1047| char (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::operator()(float) const # 1047| Block 0 # 1047| v1047_1(void) = EnterFunction : -# 1047| m1047_2(unknown) = AliasedDefinition : -# 1047| m1047_3(unknown) = InitializeNonLocal : -# 1047| m1047_4(unknown) = Chi : total:m1047_2, partial:m1047_3 -# 1047| r1047_5(glval) = VariableAddress[#this] : -# 1047| m1047_6(glval) = InitializeParameter[#this] : &:r1047_5 -# 1047| r1047_7(glval) = Load[#this] : &:r1047_5, m1047_6 -# 1047| m1047_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1047_7 -# 1047| r1047_9(glval) = VariableAddress[f] : -# 1047| m1047_10(float) = InitializeParameter[f] : &:r1047_9 -# 1047| r1047_11(glval) = VariableAddress[#return] : -# 1047| r1047_12(glval) = VariableAddress[#this] : -# 1047| r1047_13(lambda [] type at line 1047, col. 30 *) = Load[#this] : &:r1047_12, m1047_6 -# 1047| r1047_14(glval) = FieldAddress[s] : r1047_13 -# 1047| r1047_15(String &) = Load[?] : &:r1047_14, ~m1047_8 -# 1047| r1047_16(glval) = CopyValue : r1047_15 -# 1047| r1047_17(glval) = FunctionAddress[c_str] : -# 1047| r1047_18(char *) = Call[c_str] : func:r1047_17, this:r1047_16 -# 1047| m1047_19(unknown) = ^CallSideEffect : ~m1047_4 -# 1047| m1047_20(unknown) = Chi : total:m1047_4, partial:m1047_19 -# 1047| v1047_21(void) = ^IndirectReadSideEffect[-1] : &:r1047_16, ~m1047_20 -# 1047| r1047_22(int) = Constant[0] : -# 1047| r1047_23(glval) = PointerAdd[1] : r1047_18, r1047_22 -# 1047| r1047_24(char) = Load[?] : &:r1047_23, ~m1047_20 -# 1047| m1047_25(char) = Store[#return] : &:r1047_11, r1047_24 -# 1047| v1047_26(void) = ReturnIndirection[#this] : &:r1047_7, m1047_8 -# 1047| r1047_27(glval) = VariableAddress[#return] : -# 1047| v1047_28(void) = ReturnValue : &:r1047_27, m1047_25 -# 1047| v1047_29(void) = AliasedUse : ~m1047_20 -# 1047| v1047_30(void) = ExitFunction : +# 1047| mu1047_2(unknown) = AliasedDefinition : +# 1047| mu1047_3(unknown) = InitializeNonLocal : +# 1047| r1047_4(glval) = VariableAddress[#this] : +# 1047| m1047_5(glval) = InitializeParameter[#this] : &:r1047_4 +# 1047| r1047_6(glval) = Load[#this] : &:r1047_4, m1047_5 +# 1047| mu1047_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1047_6 +# 1047| r1047_8(glval) = VariableAddress[f] : +# 1047| m1047_9(float) = InitializeParameter[f] : &:r1047_8 +# 1047| r1047_10(glval) = VariableAddress[#return] : +# 1047| r1047_11(glval) = VariableAddress[#this] : +# 1047| r1047_12(lambda [] type at line 1047, col. 30 *) = Load[#this] : &:r1047_11, m1047_5 +# 1047| r1047_13(glval) = FieldAddress[s] : r1047_12 +# 1047| r1047_14(String &) = Load[?] : &:r1047_13, ~m? +# 1047| r1047_15(glval) = CopyValue : r1047_14 +# 1047| r1047_16(glval) = FunctionAddress[c_str] : +# 1047| r1047_17(char *) = Call[c_str] : func:r1047_16, this:r1047_15 +# 1047| mu1047_18(unknown) = ^CallSideEffect : ~m? +# 1047| v1047_19(void) = ^IndirectReadSideEffect[-1] : &:r1047_15, ~m? +# 1047| r1047_20(int) = Constant[0] : +# 1047| r1047_21(glval) = PointerAdd[1] : r1047_17, r1047_20 +# 1047| r1047_22(char) = Load[?] : &:r1047_21, ~m? +# 1047| m1047_23(char) = Store[#return] : &:r1047_10, r1047_22 +# 1047| v1047_24(void) = ReturnIndirection[#this] : &:r1047_6, ~m? +# 1047| r1047_25(glval) = VariableAddress[#return] : +# 1047| v1047_26(void) = ReturnValue : &:r1047_25, m1047_23 +# 1047| v1047_27(void) = AliasedUse : ~m? +# 1047| v1047_28(void) = ExitFunction : # 1049| void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::~() # 1049| Block 0 # 1049| v1049_1(void) = EnterFunction : -# 1049| m1049_2(unknown) = AliasedDefinition : -# 1049| m1049_3(unknown) = InitializeNonLocal : -# 1049| m1049_4(unknown) = Chi : total:m1049_2, partial:m1049_3 -# 1049| r1049_5(glval) = VariableAddress[#this] : -# 1049| m1049_6(glval) = InitializeParameter[#this] : &:r1049_5 -# 1049| r1049_7(glval) = Load[#this] : &:r1049_5, m1049_6 -# 1049| m1049_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1049_7 -# 1049| m1049_9(unknown) = Chi : total:m1049_4, partial:m1049_8 +# 1049| mu1049_2(unknown) = AliasedDefinition : +# 1049| mu1049_3(unknown) = InitializeNonLocal : +# 1049| r1049_4(glval) = VariableAddress[#this] : +# 1049| m1049_5(glval) = InitializeParameter[#this] : &:r1049_4 +# 1049| r1049_6(glval) = Load[#this] : &:r1049_4, m1049_5 +# 1049| mu1049_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1049_6 #-----| v0_1(void) = NoOp : -# 1049| r1049_10(glval) = FieldAddress[s] : r1049_7 -# 1049| r1049_11(glval) = FunctionAddress[~String] : -# 1049| v1049_12(void) = Call[~String] : func:r1049_11, this:r1049_10 -# 1049| m1049_13(unknown) = ^CallSideEffect : ~m1049_9 -# 1049| m1049_14(unknown) = Chi : total:m1049_9, partial:m1049_13 -# 1049| v1049_15(void) = ReturnIndirection[#this] : &:r1049_7, ~m1049_14 -# 1049| v1049_16(void) = ReturnVoid : -# 1049| v1049_17(void) = AliasedUse : ~m1049_14 -# 1049| v1049_18(void) = ExitFunction : +# 1049| r1049_8(glval) = FieldAddress[s] : r1049_6 +# 1049| r1049_9(glval) = FunctionAddress[~String] : +# 1049| v1049_10(void) = Call[~String] : func:r1049_9, this:r1049_8 +# 1049| mu1049_11(unknown) = ^CallSideEffect : ~m? +# 1049| v1049_12(void) = ReturnIndirection[#this] : &:r1049_6, ~m? +# 1049| v1049_13(void) = ReturnVoid : +# 1049| v1049_14(void) = AliasedUse : ~m? +# 1049| v1049_15(void) = ExitFunction : # 1049| char (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::operator()(float) const # 1049| Block 0 # 1049| v1049_1(void) = EnterFunction : -# 1049| m1049_2(unknown) = AliasedDefinition : -# 1049| m1049_3(unknown) = InitializeNonLocal : -# 1049| m1049_4(unknown) = Chi : total:m1049_2, partial:m1049_3 -# 1049| r1049_5(glval) = VariableAddress[#this] : -# 1049| m1049_6(glval) = InitializeParameter[#this] : &:r1049_5 -# 1049| r1049_7(glval) = Load[#this] : &:r1049_5, m1049_6 -# 1049| m1049_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1049_7 -# 1049| m1049_9(unknown) = Chi : total:m1049_4, partial:m1049_8 -# 1049| r1049_10(glval) = VariableAddress[f] : -# 1049| m1049_11(float) = InitializeParameter[f] : &:r1049_10 -# 1049| r1049_12(glval) = VariableAddress[#return] : -# 1049| r1049_13(glval) = VariableAddress[#this] : -# 1049| r1049_14(lambda [] type at line 1049, col. 30 *) = Load[#this] : &:r1049_13, m1049_6 -# 1049| r1049_15(glval) = FieldAddress[s] : r1049_14 -# 1049| r1049_16(glval) = FunctionAddress[c_str] : -# 1049| r1049_17(char *) = Call[c_str] : func:r1049_16, this:r1049_15 -# 1049| m1049_18(unknown) = ^CallSideEffect : ~m1049_9 -# 1049| m1049_19(unknown) = Chi : total:m1049_9, partial:m1049_18 -# 1049| v1049_20(void) = ^IndirectReadSideEffect[-1] : &:r1049_15, ~m1049_19 -# 1049| r1049_21(int) = Constant[0] : -# 1049| r1049_22(glval) = PointerAdd[1] : r1049_17, r1049_21 -# 1049| r1049_23(char) = Load[?] : &:r1049_22, ~m1049_19 -# 1049| m1049_24(char) = Store[#return] : &:r1049_12, r1049_23 -# 1049| v1049_25(void) = ReturnIndirection[#this] : &:r1049_7, ~m1049_19 -# 1049| r1049_26(glval) = VariableAddress[#return] : -# 1049| v1049_27(void) = ReturnValue : &:r1049_26, m1049_24 -# 1049| v1049_28(void) = AliasedUse : ~m1049_19 -# 1049| v1049_29(void) = ExitFunction : +# 1049| mu1049_2(unknown) = AliasedDefinition : +# 1049| mu1049_3(unknown) = InitializeNonLocal : +# 1049| r1049_4(glval) = VariableAddress[#this] : +# 1049| m1049_5(glval) = InitializeParameter[#this] : &:r1049_4 +# 1049| r1049_6(glval) = Load[#this] : &:r1049_4, m1049_5 +# 1049| mu1049_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1049_6 +# 1049| r1049_8(glval) = VariableAddress[f] : +# 1049| m1049_9(float) = InitializeParameter[f] : &:r1049_8 +# 1049| r1049_10(glval) = VariableAddress[#return] : +# 1049| r1049_11(glval) = VariableAddress[#this] : +# 1049| r1049_12(lambda [] type at line 1049, col. 30 *) = Load[#this] : &:r1049_11, m1049_5 +# 1049| r1049_13(glval) = FieldAddress[s] : r1049_12 +# 1049| r1049_14(glval) = FunctionAddress[c_str] : +# 1049| r1049_15(char *) = Call[c_str] : func:r1049_14, this:r1049_13 +# 1049| mu1049_16(unknown) = ^CallSideEffect : ~m? +# 1049| v1049_17(void) = ^IndirectReadSideEffect[-1] : &:r1049_13, ~m? +# 1049| r1049_18(int) = Constant[0] : +# 1049| r1049_19(glval) = PointerAdd[1] : r1049_15, r1049_18 +# 1049| r1049_20(char) = Load[?] : &:r1049_19, ~m? +# 1049| m1049_21(char) = Store[#return] : &:r1049_10, r1049_20 +# 1049| v1049_22(void) = ReturnIndirection[#this] : &:r1049_6, ~m? +# 1049| r1049_23(glval) = VariableAddress[#return] : +# 1049| v1049_24(void) = ReturnValue : &:r1049_23, m1049_21 +# 1049| v1049_25(void) = AliasedUse : ~m? +# 1049| v1049_26(void) = ExitFunction : # 1051| char (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::operator()(float) const # 1051| Block 0 # 1051| v1051_1(void) = EnterFunction : -# 1051| m1051_2(unknown) = AliasedDefinition : -# 1051| m1051_3(unknown) = InitializeNonLocal : -# 1051| m1051_4(unknown) = Chi : total:m1051_2, partial:m1051_3 -# 1051| r1051_5(glval) = VariableAddress[#this] : -# 1051| m1051_6(glval) = InitializeParameter[#this] : &:r1051_5 -# 1051| r1051_7(glval) = Load[#this] : &:r1051_5, m1051_6 -# 1051| m1051_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1051_7 -# 1051| r1051_9(glval) = VariableAddress[f] : -# 1051| m1051_10(float) = InitializeParameter[f] : &:r1051_9 -# 1051| r1051_11(glval) = VariableAddress[#return] : -# 1051| r1051_12(glval) = VariableAddress[#this] : -# 1051| r1051_13(lambda [] type at line 1051, col. 32 *) = Load[#this] : &:r1051_12, m1051_6 -# 1051| r1051_14(glval) = FieldAddress[s] : r1051_13 -# 1051| r1051_15(String &) = Load[?] : &:r1051_14, ~m1051_8 -# 1051| r1051_16(glval) = CopyValue : r1051_15 -# 1051| r1051_17(glval) = FunctionAddress[c_str] : -# 1051| r1051_18(char *) = Call[c_str] : func:r1051_17, this:r1051_16 -# 1051| m1051_19(unknown) = ^CallSideEffect : ~m1051_4 -# 1051| m1051_20(unknown) = Chi : total:m1051_4, partial:m1051_19 -# 1051| v1051_21(void) = ^IndirectReadSideEffect[-1] : &:r1051_16, ~m1051_20 -# 1051| r1051_22(glval) = VariableAddress[#this] : -# 1051| r1051_23(lambda [] type at line 1051, col. 32 *) = Load[#this] : &:r1051_22, m1051_6 -# 1051| r1051_24(glval) = FieldAddress[x] : r1051_23 -# 1051| r1051_25(int) = Load[?] : &:r1051_24, ~m1051_8 -# 1051| r1051_26(glval) = PointerAdd[1] : r1051_18, r1051_25 -# 1051| r1051_27(char) = Load[?] : &:r1051_26, ~m1051_20 -# 1051| m1051_28(char) = Store[#return] : &:r1051_11, r1051_27 -# 1051| v1051_29(void) = ReturnIndirection[#this] : &:r1051_7, m1051_8 -# 1051| r1051_30(glval) = VariableAddress[#return] : -# 1051| v1051_31(void) = ReturnValue : &:r1051_30, m1051_28 -# 1051| v1051_32(void) = AliasedUse : ~m1051_20 -# 1051| v1051_33(void) = ExitFunction : +# 1051| mu1051_2(unknown) = AliasedDefinition : +# 1051| mu1051_3(unknown) = InitializeNonLocal : +# 1051| r1051_4(glval) = VariableAddress[#this] : +# 1051| m1051_5(glval) = InitializeParameter[#this] : &:r1051_4 +# 1051| r1051_6(glval) = Load[#this] : &:r1051_4, m1051_5 +# 1051| mu1051_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1051_6 +# 1051| r1051_8(glval) = VariableAddress[f] : +# 1051| m1051_9(float) = InitializeParameter[f] : &:r1051_8 +# 1051| r1051_10(glval) = VariableAddress[#return] : +# 1051| r1051_11(glval) = VariableAddress[#this] : +# 1051| r1051_12(lambda [] type at line 1051, col. 32 *) = Load[#this] : &:r1051_11, m1051_5 +# 1051| r1051_13(glval) = FieldAddress[s] : r1051_12 +# 1051| r1051_14(String &) = Load[?] : &:r1051_13, ~m? +# 1051| r1051_15(glval) = CopyValue : r1051_14 +# 1051| r1051_16(glval) = FunctionAddress[c_str] : +# 1051| r1051_17(char *) = Call[c_str] : func:r1051_16, this:r1051_15 +# 1051| mu1051_18(unknown) = ^CallSideEffect : ~m? +# 1051| v1051_19(void) = ^IndirectReadSideEffect[-1] : &:r1051_15, ~m? +# 1051| r1051_20(glval) = VariableAddress[#this] : +# 1051| r1051_21(lambda [] type at line 1051, col. 32 *) = Load[#this] : &:r1051_20, m1051_5 +# 1051| r1051_22(glval) = FieldAddress[x] : r1051_21 +# 1051| r1051_23(int) = Load[?] : &:r1051_22, ~m? +# 1051| r1051_24(glval) = PointerAdd[1] : r1051_17, r1051_23 +# 1051| r1051_25(char) = Load[?] : &:r1051_24, ~m? +# 1051| m1051_26(char) = Store[#return] : &:r1051_10, r1051_25 +# 1051| v1051_27(void) = ReturnIndirection[#this] : &:r1051_6, ~m? +# 1051| r1051_28(glval) = VariableAddress[#return] : +# 1051| v1051_29(void) = ReturnValue : &:r1051_28, m1051_26 +# 1051| v1051_30(void) = AliasedUse : ~m? +# 1051| v1051_31(void) = ExitFunction : # 1054| char (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::operator()(float) const # 1054| Block 0 # 1054| v1054_1(void) = EnterFunction : -# 1054| m1054_2(unknown) = AliasedDefinition : -# 1054| m1054_3(unknown) = InitializeNonLocal : -# 1054| m1054_4(unknown) = Chi : total:m1054_2, partial:m1054_3 -# 1054| r1054_5(glval) = VariableAddress[#this] : -# 1054| m1054_6(glval) = InitializeParameter[#this] : &:r1054_5 -# 1054| r1054_7(glval) = Load[#this] : &:r1054_5, m1054_6 -# 1054| m1054_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1054_7 -# 1054| r1054_9(glval) = VariableAddress[f] : -# 1054| m1054_10(float) = InitializeParameter[f] : &:r1054_9 -# 1054| r1054_11(glval) = VariableAddress[#return] : -# 1054| r1054_12(glval) = VariableAddress[#this] : -# 1054| r1054_13(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_12, m1054_6 -# 1054| r1054_14(glval) = FieldAddress[s] : r1054_13 -# 1054| r1054_15(String &) = Load[?] : &:r1054_14, ~m1054_8 -# 1054| r1054_16(glval) = CopyValue : r1054_15 -# 1054| r1054_17(glval) = FunctionAddress[c_str] : -# 1054| r1054_18(char *) = Call[c_str] : func:r1054_17, this:r1054_16 -# 1054| m1054_19(unknown) = ^CallSideEffect : ~m1054_4 -# 1054| m1054_20(unknown) = Chi : total:m1054_4, partial:m1054_19 -# 1054| v1054_21(void) = ^IndirectReadSideEffect[-1] : &:r1054_16, ~m1054_20 -# 1054| r1054_22(glval) = VariableAddress[#this] : -# 1054| r1054_23(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_22, m1054_6 -# 1054| r1054_24(glval) = FieldAddress[x] : r1054_23 -# 1054| r1054_25(int) = Load[?] : &:r1054_24, ~m1054_8 -# 1054| r1054_26(glval) = VariableAddress[#this] : -# 1054| r1054_27(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_26, m1054_6 -# 1054| r1054_28(glval) = FieldAddress[i] : r1054_27 -# 1054| r1054_29(int) = Load[?] : &:r1054_28, ~m1054_8 -# 1054| r1054_30(int) = Add : r1054_25, r1054_29 -# 1054| r1054_31(glval) = VariableAddress[#this] : -# 1054| r1054_32(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_31, m1054_6 -# 1054| r1054_33(glval) = FieldAddress[j] : r1054_32 -# 1054| r1054_34(int &) = Load[?] : &:r1054_33, ~m1054_8 -# 1054| r1054_35(int) = Load[?] : &:r1054_34, ~m1054_20 -# 1054| r1054_36(int) = Sub : r1054_30, r1054_35 -# 1054| r1054_37(glval) = PointerAdd[1] : r1054_18, r1054_36 -# 1054| r1054_38(char) = Load[?] : &:r1054_37, ~m1054_20 -# 1054| m1054_39(char) = Store[#return] : &:r1054_11, r1054_38 -# 1054| v1054_40(void) = ReturnIndirection[#this] : &:r1054_7, m1054_8 -# 1054| r1054_41(glval) = VariableAddress[#return] : -# 1054| v1054_42(void) = ReturnValue : &:r1054_41, m1054_39 -# 1054| v1054_43(void) = AliasedUse : ~m1054_20 -# 1054| v1054_44(void) = ExitFunction : +# 1054| mu1054_2(unknown) = AliasedDefinition : +# 1054| mu1054_3(unknown) = InitializeNonLocal : +# 1054| r1054_4(glval) = VariableAddress[#this] : +# 1054| m1054_5(glval) = InitializeParameter[#this] : &:r1054_4 +# 1054| r1054_6(glval) = Load[#this] : &:r1054_4, m1054_5 +# 1054| mu1054_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1054_6 +# 1054| r1054_8(glval) = VariableAddress[f] : +# 1054| m1054_9(float) = InitializeParameter[f] : &:r1054_8 +# 1054| r1054_10(glval) = VariableAddress[#return] : +# 1054| r1054_11(glval) = VariableAddress[#this] : +# 1054| r1054_12(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_11, m1054_5 +# 1054| r1054_13(glval) = FieldAddress[s] : r1054_12 +# 1054| r1054_14(String &) = Load[?] : &:r1054_13, ~m? +# 1054| r1054_15(glval) = CopyValue : r1054_14 +# 1054| r1054_16(glval) = FunctionAddress[c_str] : +# 1054| r1054_17(char *) = Call[c_str] : func:r1054_16, this:r1054_15 +# 1054| mu1054_18(unknown) = ^CallSideEffect : ~m? +# 1054| v1054_19(void) = ^IndirectReadSideEffect[-1] : &:r1054_15, ~m? +# 1054| r1054_20(glval) = VariableAddress[#this] : +# 1054| r1054_21(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_20, m1054_5 +# 1054| r1054_22(glval) = FieldAddress[x] : r1054_21 +# 1054| r1054_23(int) = Load[?] : &:r1054_22, ~m? +# 1054| r1054_24(glval) = VariableAddress[#this] : +# 1054| r1054_25(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_24, m1054_5 +# 1054| r1054_26(glval) = FieldAddress[i] : r1054_25 +# 1054| r1054_27(int) = Load[?] : &:r1054_26, ~m? +# 1054| r1054_28(int) = Add : r1054_23, r1054_27 +# 1054| r1054_29(glval) = VariableAddress[#this] : +# 1054| r1054_30(lambda [] type at line 1054, col. 23 *) = Load[#this] : &:r1054_29, m1054_5 +# 1054| r1054_31(glval) = FieldAddress[j] : r1054_30 +# 1054| r1054_32(int &) = Load[?] : &:r1054_31, ~m? +# 1054| r1054_33(int) = Load[?] : &:r1054_32, ~m? +# 1054| r1054_34(int) = Sub : r1054_28, r1054_33 +# 1054| r1054_35(glval) = PointerAdd[1] : r1054_17, r1054_34 +# 1054| r1054_36(char) = Load[?] : &:r1054_35, ~m? +# 1054| m1054_37(char) = Store[#return] : &:r1054_10, r1054_36 +# 1054| v1054_38(void) = ReturnIndirection[#this] : &:r1054_6, ~m? +# 1054| r1054_39(glval) = VariableAddress[#return] : +# 1054| v1054_40(void) = ReturnValue : &:r1054_39, m1054_37 +# 1054| v1054_41(void) = AliasedUse : ~m? +# 1054| v1054_42(void) = ExitFunction : # 1126| void RangeBasedFor(std::vector const&) # 1126| Block 0 # 1126| v1126_1(void) = EnterFunction : -# 1126| m1126_2(unknown) = AliasedDefinition : -# 1126| m1126_3(unknown) = InitializeNonLocal : -# 1126| m1126_4(unknown) = Chi : total:m1126_2, partial:m1126_3 -# 1126| r1126_5(glval &>) = VariableAddress[v] : -# 1126| m1126_6(vector &) = InitializeParameter[v] : &:r1126_5 -# 1126| r1126_7(vector &) = Load[v] : &:r1126_5, m1126_6 -# 1126| m1126_8(unknown) = InitializeIndirection[v] : &:r1126_7 +# 1126| mu1126_2(unknown) = AliasedDefinition : +# 1126| mu1126_3(unknown) = InitializeNonLocal : +# 1126| r1126_4(glval &>) = VariableAddress[v] : +# 1126| m1126_5(vector &) = InitializeParameter[v] : &:r1126_4 +# 1126| r1126_6(vector &) = Load[v] : &:r1126_4, m1126_5 +# 1126| mu1126_7(unknown) = InitializeIndirection[v] : &:r1126_6 # 1127| r1127_1(glval &>) = VariableAddress[(__range)] : # 1127| r1127_2(glval &>) = VariableAddress[v] : -# 1127| r1127_3(vector &) = Load[v] : &:r1127_2, m1126_6 +# 1127| r1127_3(vector &) = Load[v] : &:r1127_2, m1126_5 # 1127| r1127_4(glval>) = CopyValue : r1127_3 # 1127| r1127_5(vector &) = CopyValue : r1127_4 # 1127| m1127_6(vector &) = Store[(__range)] : &:r1127_1, r1127_5 @@ -10051,56 +9203,50 @@ ir.cpp: #-----| r0_1(glval>) = CopyValue : r1127_9 # 1127| r1127_10(glval) = FunctionAddress[begin] : # 1127| r1127_11(iterator) = Call[begin] : func:r1127_10, this:r0_1 -#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1126_8 -# 1127| m1127_12(iterator) = Store[(__begin)] : &:r1127_7, r1127_11 +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? +# 1127| mu1127_12(iterator) = Store[(__begin)] : &:r1127_7, r1127_11 # 1127| r1127_13(glval>) = VariableAddress[(__end)] : # 1127| r1127_14(glval &>) = VariableAddress[(__range)] : # 1127| r1127_15(vector &) = Load[(__range)] : &:r1127_14, m1127_6 #-----| r0_3(glval>) = CopyValue : r1127_15 # 1127| r1127_16(glval) = FunctionAddress[end] : # 1127| r1127_17(iterator) = Call[end] : func:r1127_16, this:r0_3 -#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1126_8 -# 1127| m1127_18(iterator) = Store[(__end)] : &:r1127_13, r1127_17 -# 1127| m1127_19(unknown) = Chi : total:m1126_4, partial:m1127_18 +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? +# 1127| mu1127_18(iterator) = Store[(__end)] : &:r1127_13, r1127_17 #-----| Goto -> Block 1 # 1127| Block 1 -# 1127| m1127_20(iterator) = Phi : from 0:m1127_12, from 4:m1127_45 -# 1127| m1127_21(unknown) = Phi : from 0:~m1127_19, from 4:~m1127_30 -# 1127| r1127_22(glval>) = VariableAddress[(__begin)] : -#-----| r0_5(glval>) = Convert : r1127_22 -# 1127| r1127_23(glval) = FunctionAddress[operator!=] : +# 1127| r1127_19(glval>) = VariableAddress[(__begin)] : +#-----| r0_5(glval>) = Convert : r1127_19 +# 1127| r1127_20(glval) = FunctionAddress[operator!=] : #-----| r0_6(glval>) = VariableAddress[#temp0:0] : -#-----| m0_7(iterator) = Uninitialized[#temp0:0] : &:r0_6 -#-----| m0_8(unknown) = Chi : total:m1127_21, partial:m0_7 -# 1127| r1127_24(glval) = FunctionAddress[iterator] : -# 1127| r1127_25(glval>) = VariableAddress[(__end)] : -#-----| r0_9(glval>) = Convert : r1127_25 -#-----| r0_10(iterator &) = CopyValue : r0_9 -# 1127| v1127_26(void) = Call[iterator] : func:r1127_24, this:r0_6, 0:r0_10 -# 1127| m1127_27(unknown) = ^CallSideEffect : ~m0_8 -# 1127| m1127_28(unknown) = Chi : total:m0_8, partial:m1127_27 -#-----| v0_11(void) = ^BufferReadSideEffect[0] : &:r0_10, ~m1127_28 -# 1127| m1127_29(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -# 1127| m1127_30(unknown) = Chi : total:m1127_28, partial:m1127_29 -#-----| r0_12(iterator) = Load[#temp0:0] : &:r0_6, ~m1127_30 -# 1127| r1127_31(bool) = Call[operator!=] : func:r1127_23, this:r0_5, 0:r0_12 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1127_20 -# 1127| v1127_32(void) = ConditionalBranch : r1127_31 +#-----| mu0_7(iterator) = Uninitialized[#temp0:0] : &:r0_6 +# 1127| r1127_21(glval) = FunctionAddress[iterator] : +# 1127| r1127_22(glval>) = VariableAddress[(__end)] : +#-----| r0_8(glval>) = Convert : r1127_22 +#-----| r0_9(iterator &) = CopyValue : r0_8 +# 1127| v1127_23(void) = Call[iterator] : func:r1127_21, this:r0_6, 0:r0_9 +# 1127| mu1127_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m? +# 1127| mu1127_25(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +#-----| r0_11(iterator) = Load[#temp0:0] : &:r0_6, ~m? +# 1127| r1127_26(bool) = Call[operator!=] : func:r1127_20, this:r0_5, 0:r0_11 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 1127| v1127_27(void) = ConditionalBranch : r1127_26 #-----| False -> Block 5 #-----| True -> Block 2 # 1127| Block 2 -# 1127| r1127_33(glval) = VariableAddress[e] : -# 1127| r1127_34(glval>) = VariableAddress[(__begin)] : -#-----| r0_14(glval>) = Convert : r1127_34 -# 1127| r1127_35(glval) = FunctionAddress[operator*] : -# 1127| r1127_36(int &) = Call[operator*] : func:r1127_35, this:r0_14 -#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_14, m1127_20 -# 1127| r1127_37(int) = Load[?] : &:r1127_36, ~m1127_30 -# 1127| m1127_38(int) = Store[e] : &:r1127_33, r1127_37 +# 1127| r1127_28(glval) = VariableAddress[e] : +# 1127| r1127_29(glval>) = VariableAddress[(__begin)] : +#-----| r0_13(glval>) = Convert : r1127_29 +# 1127| r1127_30(glval) = FunctionAddress[operator*] : +# 1127| r1127_31(int &) = Call[operator*] : func:r1127_30, this:r0_13 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? +# 1127| r1127_32(int) = Load[?] : &:r1127_31, ~m? +# 1127| m1127_33(int) = Store[e] : &:r1127_28, r1127_32 # 1128| r1128_1(glval) = VariableAddress[e] : -# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_38 +# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_33 # 1128| r1128_3(int) = Constant[0] : # 1128| r1128_4(bool) = CompareGT : r1128_2, r1128_3 # 1128| v1128_5(void) = ConditionalBranch : r1128_4 @@ -10112,92 +9258,84 @@ ir.cpp: #-----| Goto -> Block 4 # 1127| Block 4 -# 1127| v1127_39(void) = NoOp : -# 1127| r1127_40(glval>) = VariableAddress[(__begin)] : -# 1127| r1127_41(glval) = FunctionAddress[operator++] : -# 1127| r1127_42(iterator &) = Call[operator++] : func:r1127_41, this:r1127_40 -# 1127| v1127_43(void) = ^IndirectReadSideEffect[-1] : &:r1127_40, m1127_20 -# 1127| m1127_44(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_40 -# 1127| m1127_45(iterator) = Chi : total:m1127_20, partial:m1127_44 -# 1127| r1127_46(glval>) = CopyValue : r1127_42 +# 1127| v1127_34(void) = NoOp : +# 1127| r1127_35(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_36(glval) = FunctionAddress[operator++] : +# 1127| r1127_37(iterator &) = Call[operator++] : func:r1127_36, this:r1127_35 +# 1127| v1127_38(void) = ^IndirectReadSideEffect[-1] : &:r1127_35, ~m? +# 1127| mu1127_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_35 +# 1127| r1127_40(glval>) = CopyValue : r1127_37 #-----| Goto (back edge) -> Block 1 # 1133| Block 5 # 1133| r1133_1(glval &>) = VariableAddress[(__range)] : # 1133| r1133_2(glval &>) = VariableAddress[v] : -# 1133| r1133_3(vector &) = Load[v] : &:r1133_2, m1126_6 +# 1133| r1133_3(vector &) = Load[v] : &:r1133_2, m1126_5 # 1133| r1133_4(glval>) = CopyValue : r1133_3 # 1133| r1133_5(vector &) = CopyValue : r1133_4 # 1133| m1133_6(vector &) = Store[(__range)] : &:r1133_1, r1133_5 # 1133| r1133_7(glval>) = VariableAddress[(__begin)] : # 1133| r1133_8(glval &>) = VariableAddress[(__range)] : # 1133| r1133_9(vector &) = Load[(__range)] : &:r1133_8, m1133_6 -#-----| r0_16(glval>) = CopyValue : r1133_9 +#-----| r0_15(glval>) = CopyValue : r1133_9 # 1133| r1133_10(glval) = FunctionAddress[begin] : -# 1133| r1133_11(iterator) = Call[begin] : func:r1133_10, this:r0_16 -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m1126_8 -# 1133| m1133_12(iterator) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_11(iterator) = Call[begin] : func:r1133_10, this:r0_15 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 1133| mu1133_12(iterator) = Store[(__begin)] : &:r1133_7, r1133_11 # 1133| r1133_13(glval>) = VariableAddress[(__end)] : # 1133| r1133_14(glval &>) = VariableAddress[(__range)] : # 1133| r1133_15(vector &) = Load[(__range)] : &:r1133_14, m1133_6 -#-----| r0_18(glval>) = CopyValue : r1133_15 +#-----| r0_17(glval>) = CopyValue : r1133_15 # 1133| r1133_16(glval) = FunctionAddress[end] : -# 1133| r1133_17(iterator) = Call[end] : func:r1133_16, this:r0_18 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m1126_8 -# 1133| m1133_18(iterator) = Store[(__end)] : &:r1133_13, r1133_17 -# 1133| m1133_19(unknown) = Chi : total:m1127_30, partial:m1133_18 +# 1133| r1133_17(iterator) = Call[end] : func:r1133_16, this:r0_17 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +# 1133| mu1133_18(iterator) = Store[(__end)] : &:r1133_13, r1133_17 #-----| Goto -> Block 6 # 1133| Block 6 -# 1133| m1133_20(iterator) = Phi : from 5:m1133_12, from 7:m1133_38 -# 1133| m1133_21(unknown) = Phi : from 5:~m1133_19, from 7:~m1133_30 -# 1133| r1133_22(glval>) = VariableAddress[(__begin)] : -#-----| r0_20(glval>) = Convert : r1133_22 -# 1133| r1133_23(glval) = FunctionAddress[operator!=] : -#-----| r0_21(glval>) = VariableAddress[#temp0:0] : -#-----| m0_22(iterator) = Uninitialized[#temp0:0] : &:r0_21 -#-----| m0_23(unknown) = Chi : total:m1133_21, partial:m0_22 -# 1133| r1133_24(glval) = FunctionAddress[iterator] : -# 1133| r1133_25(glval>) = VariableAddress[(__end)] : -#-----| r0_24(glval>) = Convert : r1133_25 -#-----| r0_25(iterator &) = CopyValue : r0_24 -# 1133| v1133_26(void) = Call[iterator] : func:r1133_24, this:r0_21, 0:r0_25 -# 1133| m1133_27(unknown) = ^CallSideEffect : ~m0_23 -# 1133| m1133_28(unknown) = Chi : total:m0_23, partial:m1133_27 -#-----| v0_26(void) = ^BufferReadSideEffect[0] : &:r0_25, ~m1133_28 -# 1133| m1133_29(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 -# 1133| m1133_30(unknown) = Chi : total:m1133_28, partial:m1133_29 -#-----| r0_27(iterator) = Load[#temp0:0] : &:r0_21, ~m1133_30 -# 1133| r1133_31(bool) = Call[operator!=] : func:r1133_23, this:r0_20, 0:r0_27 -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_20, m1133_20 -# 1133| v1133_32(void) = ConditionalBranch : r1133_31 +# 1133| r1133_19(glval>) = VariableAddress[(__begin)] : +#-----| r0_19(glval>) = Convert : r1133_19 +# 1133| r1133_20(glval) = FunctionAddress[operator!=] : +#-----| r0_20(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_21(iterator) = Uninitialized[#temp0:0] : &:r0_20 +# 1133| r1133_21(glval) = FunctionAddress[iterator] : +# 1133| r1133_22(glval>) = VariableAddress[(__end)] : +#-----| r0_22(glval>) = Convert : r1133_22 +#-----| r0_23(iterator &) = CopyValue : r0_22 +# 1133| v1133_23(void) = Call[iterator] : func:r1133_21, this:r0_20, 0:r0_23 +# 1133| mu1133_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^BufferReadSideEffect[0] : &:r0_23, ~m? +# 1133| mu1133_25(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +#-----| r0_25(iterator) = Load[#temp0:0] : &:r0_20, ~m? +# 1133| r1133_26(bool) = Call[operator!=] : func:r1133_20, this:r0_19, 0:r0_25 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? +# 1133| v1133_27(void) = ConditionalBranch : r1133_26 #-----| False -> Block 10 #-----| True -> Block 8 # 1133| Block 7 -# 1133| r1133_33(glval>) = VariableAddress[(__begin)] : -# 1133| r1133_34(glval) = FunctionAddress[operator++] : -# 1133| r1133_35(iterator &) = Call[operator++] : func:r1133_34, this:r1133_33 -# 1133| v1133_36(void) = ^IndirectReadSideEffect[-1] : &:r1133_33, m1133_20 -# 1133| m1133_37(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_33 -# 1133| m1133_38(iterator) = Chi : total:m1133_20, partial:m1133_37 -# 1133| r1133_39(glval>) = CopyValue : r1133_35 +# 1133| r1133_28(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_29(glval) = FunctionAddress[operator++] : +# 1133| r1133_30(iterator &) = Call[operator++] : func:r1133_29, this:r1133_28 +# 1133| v1133_31(void) = ^IndirectReadSideEffect[-1] : &:r1133_28, ~m? +# 1133| mu1133_32(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_28 +# 1133| r1133_33(glval>) = CopyValue : r1133_30 #-----| Goto (back edge) -> Block 6 # 1133| Block 8 -# 1133| r1133_40(glval) = VariableAddress[e] : -# 1133| r1133_41(glval>) = VariableAddress[(__begin)] : -#-----| r0_29(glval>) = Convert : r1133_41 -# 1133| r1133_42(glval) = FunctionAddress[operator*] : -# 1133| r1133_43(int &) = Call[operator*] : func:r1133_42, this:r0_29 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, m1133_20 -# 1133| r1133_44(glval) = CopyValue : r1133_43 -# 1133| r1133_45(glval) = Convert : r1133_44 -# 1133| r1133_46(int &) = CopyValue : r1133_45 -# 1133| m1133_47(int &) = Store[e] : &:r1133_40, r1133_46 +# 1133| r1133_34(glval) = VariableAddress[e] : +# 1133| r1133_35(glval>) = VariableAddress[(__begin)] : +#-----| r0_27(glval>) = Convert : r1133_35 +# 1133| r1133_36(glval) = FunctionAddress[operator*] : +# 1133| r1133_37(int &) = Call[operator*] : func:r1133_36, this:r0_27 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 1133| r1133_38(glval) = CopyValue : r1133_37 +# 1133| r1133_39(glval) = Convert : r1133_38 +# 1133| r1133_40(int &) = CopyValue : r1133_39 +# 1133| m1133_41(int &) = Store[e] : &:r1133_34, r1133_40 # 1134| r1134_1(glval) = VariableAddress[e] : -# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_47 -# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_30 +# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_41 +# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m? # 1134| r1134_4(int) = Constant[5] : # 1134| r1134_5(bool) = CompareLT : r1134_3, r1134_4 # 1134| v1134_6(void) = ConditionalBranch : r1134_5 @@ -10211,74 +9349,67 @@ ir.cpp: # 1137| Block 10 # 1137| v1137_1(void) = NoOp : # 1138| v1138_1(void) = NoOp : -# 1126| v1126_9(void) = ReturnIndirection[v] : &:r1126_7, m1126_8 -# 1126| v1126_10(void) = ReturnVoid : -# 1126| v1126_11(void) = AliasedUse : ~m1133_28 -# 1126| v1126_12(void) = ExitFunction : +# 1126| v1126_8(void) = ReturnIndirection[v] : &:r1126_6, ~m? +# 1126| v1126_9(void) = ReturnVoid : +# 1126| v1126_10(void) = AliasedUse : ~m? +# 1126| v1126_11(void) = ExitFunction : # 1157| int AsmStmt(int) # 1157| Block 0 # 1157| v1157_1(void) = EnterFunction : -# 1157| m1157_2(unknown) = AliasedDefinition : -# 1157| m1157_3(unknown) = InitializeNonLocal : -# 1157| m1157_4(unknown) = Chi : total:m1157_2, partial:m1157_3 -# 1157| r1157_5(glval) = VariableAddress[x] : -# 1157| m1157_6(int) = InitializeParameter[x] : &:r1157_5 -# 1158| m1158_1(unknown) = InlineAsm : ~m1157_4 -# 1158| m1158_2(unknown) = Chi : total:m1157_4, partial:m1158_1 +# 1157| mu1157_2(unknown) = AliasedDefinition : +# 1157| mu1157_3(unknown) = InitializeNonLocal : +# 1157| r1157_4(glval) = VariableAddress[x] : +# 1157| m1157_5(int) = InitializeParameter[x] : &:r1157_4 +# 1158| mu1158_1(unknown) = InlineAsm : ~m? # 1159| r1159_1(glval) = VariableAddress[#return] : # 1159| r1159_2(glval) = VariableAddress[x] : -# 1159| r1159_3(int) = Load[x] : &:r1159_2, m1157_6 +# 1159| r1159_3(int) = Load[x] : &:r1159_2, m1157_5 # 1159| m1159_4(int) = Store[#return] : &:r1159_1, r1159_3 -# 1157| r1157_7(glval) = VariableAddress[#return] : -# 1157| v1157_8(void) = ReturnValue : &:r1157_7, m1159_4 -# 1157| v1157_9(void) = AliasedUse : ~m1158_2 -# 1157| v1157_10(void) = ExitFunction : +# 1157| r1157_6(glval) = VariableAddress[#return] : +# 1157| v1157_7(void) = ReturnValue : &:r1157_6, m1159_4 +# 1157| v1157_8(void) = AliasedUse : ~m? +# 1157| v1157_9(void) = ExitFunction : # 1162| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) # 1162| Block 0 # 1162| v1162_1(void) = EnterFunction : -# 1162| m1162_2(unknown) = AliasedDefinition : -# 1162| m1162_3(unknown) = InitializeNonLocal : -# 1162| m1162_4(unknown) = Chi : total:m1162_2, partial:m1162_3 -# 1162| r1162_5(glval) = VariableAddress[a] : -# 1162| m1162_6(unsigned int &) = InitializeParameter[a] : &:r1162_5 -# 1162| r1162_7(unsigned int &) = Load[a] : &:r1162_5, m1162_6 -# 1162| m1162_8(unknown) = InitializeIndirection[a] : &:r1162_7 -# 1162| m1162_9(unknown) = Chi : total:m1162_4, partial:m1162_8 -# 1162| r1162_10(glval) = VariableAddress[b] : -# 1162| m1162_11(unsigned int) = InitializeParameter[b] : &:r1162_10 -# 1162| m1162_12(unknown) = Chi : total:m1162_9, partial:m1162_11 -# 1162| r1162_13(glval) = VariableAddress[c] : -# 1162| m1162_14(unsigned int &) = InitializeParameter[c] : &:r1162_13 -# 1162| r1162_15(unsigned int &) = Load[c] : &:r1162_13, m1162_14 -# 1162| m1162_16(unknown) = InitializeIndirection[c] : &:r1162_15 -# 1162| r1162_17(glval) = VariableAddress[d] : -# 1162| m1162_18(unsigned int) = InitializeParameter[d] : &:r1162_17 +# 1162| mu1162_2(unknown) = AliasedDefinition : +# 1162| mu1162_3(unknown) = InitializeNonLocal : +# 1162| r1162_4(glval) = VariableAddress[a] : +# 1162| m1162_5(unsigned int &) = InitializeParameter[a] : &:r1162_4 +# 1162| r1162_6(unsigned int &) = Load[a] : &:r1162_4, m1162_5 +# 1162| mu1162_7(unknown) = InitializeIndirection[a] : &:r1162_6 +# 1162| r1162_8(glval) = VariableAddress[b] : +# 1162| mu1162_9(unsigned int) = InitializeParameter[b] : &:r1162_8 +# 1162| r1162_10(glval) = VariableAddress[c] : +# 1162| m1162_11(unsigned int &) = InitializeParameter[c] : &:r1162_10 +# 1162| r1162_12(unsigned int &) = Load[c] : &:r1162_10, m1162_11 +# 1162| mu1162_13(unknown) = InitializeIndirection[c] : &:r1162_12 +# 1162| r1162_14(glval) = VariableAddress[d] : +# 1162| m1162_15(unsigned int) = InitializeParameter[d] : &:r1162_14 # 1167| r1167_1(glval) = VariableAddress[a] : -# 1167| r1167_2(unsigned int &) = Load[a] : &:r1167_1, m1162_6 +# 1167| r1167_2(unsigned int &) = Load[a] : &:r1167_1, m1162_5 # 1167| r1167_3(glval) = CopyValue : r1167_2 # 1167| r1167_4(glval) = VariableAddress[b] : # 1167| r1167_5(glval) = VariableAddress[c] : -# 1167| r1167_6(unsigned int &) = Load[c] : &:r1167_5, m1162_14 -# 1167| r1167_7(unsigned int) = Load[?] : &:r1167_6, ~m1162_16 +# 1167| r1167_6(unsigned int &) = Load[c] : &:r1167_5, m1162_11 +# 1167| r1167_7(unsigned int) = Load[?] : &:r1167_6, ~m? # 1167| r1167_8(glval) = VariableAddress[d] : -# 1167| r1167_9(unsigned int) = Load[d] : &:r1167_8, m1162_18 -# 1164| m1164_1(unknown) = InlineAsm : ~m1162_12, 0:r1167_3, 1:r1167_4, 2:r1167_7, 3:r1167_9 -# 1164| m1164_2(unknown) = Chi : total:m1162_12, partial:m1164_1 +# 1167| r1167_9(unsigned int) = Load[d] : &:r1167_8, m1162_15 +# 1164| mu1164_1(unknown) = InlineAsm : ~m?, 0:r1167_3, 1:r1167_4, 2:r1167_7, 3:r1167_9 # 1169| v1169_1(void) = NoOp : -# 1162| v1162_19(void) = ReturnIndirection[a] : &:r1162_7, ~m1164_2 -# 1162| v1162_20(void) = ReturnIndirection[c] : &:r1162_15, m1162_16 -# 1162| v1162_21(void) = ReturnVoid : -# 1162| v1162_22(void) = AliasedUse : ~m1164_2 -# 1162| v1162_23(void) = ExitFunction : +# 1162| v1162_16(void) = ReturnIndirection[a] : &:r1162_6, ~m? +# 1162| v1162_17(void) = ReturnIndirection[c] : &:r1162_12, ~m? +# 1162| v1162_18(void) = ReturnVoid : +# 1162| v1162_19(void) = AliasedUse : ~m? +# 1162| v1162_20(void) = ExitFunction : # 1171| void ExternDeclarations() # 1171| Block 0 # 1171| v1171_1(void) = EnterFunction : -# 1171| m1171_2(unknown) = AliasedDefinition : -# 1171| m1171_3(unknown) = InitializeNonLocal : -# 1171| m1171_4(unknown) = Chi : total:m1171_2, partial:m1171_3 +# 1171| mu1171_2(unknown) = AliasedDefinition : +# 1171| mu1171_3(unknown) = InitializeNonLocal : # 1174| r1174_1(glval) = VariableAddress[x] : # 1174| m1174_2(int) = Uninitialized[x] : &:r1174_1 # 1175| r1175_1(glval) = VariableAddress[y] : @@ -10286,16 +9417,15 @@ ir.cpp: # 1176| r1176_1(glval) = VariableAddress[h] : # 1176| m1176_2(int) = Uninitialized[h] : &:r1176_1 # 1178| v1178_1(void) = NoOp : -# 1171| v1171_5(void) = ReturnVoid : -# 1171| v1171_6(void) = AliasedUse : m1171_3 -# 1171| v1171_7(void) = ExitFunction : +# 1171| v1171_4(void) = ReturnVoid : +# 1171| v1171_5(void) = AliasedUse : ~m? +# 1171| v1171_6(void) = ExitFunction : # 1186| void ExternDeclarationsInMacro() # 1186| Block 0 # 1186| v1186_1(void) = EnterFunction : -# 1186| m1186_2(unknown) = AliasedDefinition : -# 1186| m1186_3(unknown) = InitializeNonLocal : -# 1186| m1186_4(unknown) = Chi : total:m1186_2, partial:m1186_3 +# 1186| mu1186_2(unknown) = AliasedDefinition : +# 1186| mu1186_3(unknown) = InitializeNonLocal : # 1188| r1188_1(glval) = VariableAddress[i] : # 1188| r1188_2(int) = Constant[0] : # 1188| m1188_3(int) = Store[i] : &:r1188_1, r1188_2 @@ -10322,35 +9452,32 @@ ir.cpp: # 1188| Block 3 # 1188| v1188_15(void) = NoOp : # 1189| v1189_1(void) = NoOp : -# 1186| v1186_5(void) = ReturnVoid : -# 1186| v1186_6(void) = AliasedUse : m1186_3 -# 1186| v1186_7(void) = ExitFunction : +# 1186| v1186_4(void) = ReturnVoid : +# 1186| v1186_5(void) = AliasedUse : ~m? +# 1186| v1186_6(void) = ExitFunction : # 1191| void TryCatchNoCatchAny(bool) # 1191| Block 0 # 1191| v1191_1(void) = EnterFunction : -# 1191| m1191_2(unknown) = AliasedDefinition : -# 1191| m1191_3(unknown) = InitializeNonLocal : -# 1191| m1191_4(unknown) = Chi : total:m1191_2, partial:m1191_3 -# 1191| r1191_5(glval) = VariableAddress[b] : -# 1191| m1191_6(bool) = InitializeParameter[b] : &:r1191_5 +# 1191| mu1191_2(unknown) = AliasedDefinition : +# 1191| mu1191_3(unknown) = InitializeNonLocal : +# 1191| r1191_4(glval) = VariableAddress[b] : +# 1191| m1191_5(bool) = InitializeParameter[b] : &:r1191_4 # 1193| r1193_1(glval) = VariableAddress[x] : # 1193| r1193_2(int) = Constant[5] : # 1193| m1193_3(int) = Store[x] : &:r1193_1, r1193_2 # 1194| r1194_1(glval) = VariableAddress[b] : -# 1194| r1194_2(bool) = Load[b] : &:r1194_1, m1191_6 +# 1194| r1194_2(bool) = Load[b] : &:r1194_1, m1191_5 # 1194| v1194_3(void) = ConditionalBranch : r1194_2 #-----| False -> Block 4 #-----| True -> Block 3 # 1191| Block 1 -# 1191| m1191_7(unknown) = Phi : from 2:~m1191_10, from 10:~m1191_4 -# 1191| v1191_8(void) = AliasedUse : ~m1191_7 -# 1191| v1191_9(void) = ExitFunction : +# 1191| v1191_6(void) = AliasedUse : ~m? +# 1191| v1191_7(void) = ExitFunction : # 1191| Block 2 -# 1191| m1191_10(unknown) = Phi : from 7:~m1203_12, from 8:~m1191_4 -# 1191| v1191_11(void) = Unwind : +# 1191| v1191_8(void) = Unwind : #-----| Goto -> Block 1 # 1195| Block 3 @@ -10359,7 +9486,7 @@ ir.cpp: # 1195| r1195_3(char *) = Convert : r1195_2 # 1195| m1195_4(char *) = Store[#throw1195:7] : &:r1195_1, r1195_3 # 1195| v1195_5(void) = ThrowValue : &:r1195_1, m1195_4 -#-----| C++ Exception -> Block 6 +#-----| C++ Exception -> Block 10 # 1197| Block 4 # 1197| r1197_1(glval) = VariableAddress[x] : @@ -10367,112 +9494,133 @@ ir.cpp: # 1197| r1197_3(int) = Constant[2] : # 1197| r1197_4(bool) = CompareLT : r1197_2, r1197_3 # 1197| v1197_5(void) = ConditionalBranch : r1197_4 -#-----| False -> Block 5 -#-----| True -> Block 11 +#-----| False -> Block 9 +#-----| True -> Block 5 + +# 1198| Block 5 +# 1198| r1198_1(glval) = VariableAddress[b] : +# 1198| r1198_2(bool) = Load[b] : &:r1198_1, m1191_5 +# 1198| v1198_3(void) = ConditionalBranch : r1198_2 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 1198| Block 6 +# 1198| r1198_4(int) = Constant[7] : +# 1198| r1198_5(glval) = VariableAddress[#temp1198:11] : +# 1198| m1198_6(int) = Store[#temp1198:11] : &:r1198_5, r1198_4 +# 1198| r1198_7(glval) = VariableAddress[#temp1198:11] : +# 1198| r1198_8(int) = Load[#temp1198:11] : &:r1198_7, m1198_6 +# 1198| r1198_9(glval) = VariableAddress[x] : +# 1198| m1198_10(int) = Store[x] : &:r1198_9, r1198_8 +#-----| Goto -> Block 9 + +# 1198| Block 7 +# 1198| r1198_11(glval) = VariableAddress[#throw1198:19] : +# 1198| mu1198_12(String) = Uninitialized[#throw1198:19] : &:r1198_11 +# 1198| r1198_13(glval) = FunctionAddress[String] : +# 1198| r1198_14(glval) = StringConstant["String object"] : +# 1198| r1198_15(char *) = Convert : r1198_14 +# 1198| v1198_16(void) = Call[String] : func:r1198_13, this:r1198_11, 0:r1198_15 +# 1198| mu1198_17(unknown) = ^CallSideEffect : ~m? +# 1198| v1198_18(void) = ^BufferReadSideEffect[0] : &:r1198_15, ~m? +# 1198| mu1198_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1198_11 +#-----| C++ Exception -> Block 10 +#-----| Goto -> Block 8 -# 1200| Block 5 +# 1198| Block 8 +# 1198| v1198_20(void) = ThrowValue : &:r1198_11, ~m? +#-----| C++ Exception -> Block 10 + +# 1200| Block 9 # 1200| r1200_1(int) = Constant[7] : # 1200| r1200_2(glval) = VariableAddress[x] : # 1200| m1200_3(int) = Store[x] : &:r1200_2, r1200_1 -#-----| Goto -> Block 10 +#-----| Goto -> Block 14 -# 1202| Block 6 +# 1202| Block 10 # 1202| v1202_1(void) = CatchByType[const char *] : -#-----| C++ Exception -> Block 8 -#-----| Goto -> Block 7 +#-----| C++ Exception -> Block 12 +#-----| Goto -> Block 11 -# 1202| Block 7 +# 1202| Block 11 # 1202| r1202_2(glval) = VariableAddress[s] : # 1202| m1202_3(char *) = InitializeParameter[s] : &:r1202_2 # 1202| r1202_4(char *) = Load[s] : &:r1202_2, m1202_3 -# 1202| m1202_5(unknown) = InitializeIndirection[s] : &:r1202_4 -# 1202| m1202_6(unknown) = Chi : total:m1191_4, partial:m1202_5 +# 1202| mu1202_5(unknown) = InitializeIndirection[s] : &:r1202_4 # 1203| r1203_1(glval) = VariableAddress[#throw1203:5] : -# 1203| m1203_2(String) = Uninitialized[#throw1203:5] : &:r1203_1 -# 1203| m1203_3(unknown) = Chi : total:m1202_6, partial:m1203_2 -# 1203| r1203_4(glval) = FunctionAddress[String] : -# 1203| r1203_5(glval) = VariableAddress[s] : -# 1203| r1203_6(char *) = Load[s] : &:r1203_5, m1202_3 -# 1203| v1203_7(void) = Call[String] : func:r1203_4, this:r1203_1, 0:r1203_6 -# 1203| m1203_8(unknown) = ^CallSideEffect : ~m1203_3 -# 1203| m1203_9(unknown) = Chi : total:m1203_3, partial:m1203_8 -# 1203| v1203_10(void) = ^BufferReadSideEffect[0] : &:r1203_6, ~m1203_9 -# 1203| m1203_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1203_1 -# 1203| m1203_12(unknown) = Chi : total:m1203_9, partial:m1203_11 -# 1203| v1203_13(void) = ThrowValue : &:r1203_1, ~m1203_12 +# 1203| mu1203_2(String) = Uninitialized[#throw1203:5] : &:r1203_1 +# 1203| r1203_3(glval) = FunctionAddress[String] : +# 1203| r1203_4(glval) = VariableAddress[s] : +# 1203| r1203_5(char *) = Load[s] : &:r1203_4, m1202_3 +# 1203| v1203_6(void) = Call[String] : func:r1203_3, this:r1203_1, 0:r1203_5 +# 1203| mu1203_7(unknown) = ^CallSideEffect : ~m? +# 1203| v1203_8(void) = ^BufferReadSideEffect[0] : &:r1203_5, ~m? +# 1203| mu1203_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1203_1 +# 1203| v1203_10(void) = ThrowValue : &:r1203_1, ~m? #-----| C++ Exception -> Block 2 -# 1205| Block 8 +# 1205| Block 12 # 1205| v1205_1(void) = CatchByType[const String &] : #-----| C++ Exception -> Block 2 -#-----| Goto -> Block 9 +#-----| Goto -> Block 13 -# 1205| Block 9 +# 1205| Block 13 # 1205| r1205_2(glval) = VariableAddress[e] : # 1205| m1205_3(String &) = InitializeParameter[e] : &:r1205_2 # 1205| r1205_4(String &) = Load[e] : &:r1205_2, m1205_3 -# 1205| m1205_5(unknown) = InitializeIndirection[e] : &:r1205_4 +# 1205| mu1205_5(unknown) = InitializeIndirection[e] : &:r1205_4 # 1205| v1205_6(void) = NoOp : -#-----| Goto -> Block 10 +#-----| Goto -> Block 14 -# 1207| Block 10 -# 1207| v1207_1(void) = NoOp : -# 1191| v1191_12(void) = ReturnVoid : +# 1207| Block 14 +# 1207| v1207_1(void) = NoOp : +# 1191| v1191_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1191| Block 11 -# 1191| v1191_13(void) = Unreached : - # 1211| void VectorTypes(int) # 1211| Block 0 # 1211| v1211_1(void) = EnterFunction : -# 1211| m1211_2(unknown) = AliasedDefinition : -# 1211| m1211_3(unknown) = InitializeNonLocal : -# 1211| m1211_4(unknown) = Chi : total:m1211_2, partial:m1211_3 -# 1211| r1211_5(glval) = VariableAddress[i] : -# 1211| m1211_6(int) = InitializeParameter[i] : &:r1211_5 +# 1211| mu1211_2(unknown) = AliasedDefinition : +# 1211| mu1211_3(unknown) = InitializeNonLocal : +# 1211| r1211_4(glval) = VariableAddress[i] : +# 1211| m1211_5(int) = InitializeParameter[i] : &:r1211_4 # 1212| r1212_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1212| m1212_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1212_1 +# 1212| mu1212_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1212_1 # 1212| r1212_3(int) = Constant[0] : # 1212| r1212_4(glval) = PointerAdd[4] : r1212_1, r1212_3 # 1212| r1212_5(int) = Constant[0] : -# 1212| m1212_6(int) = Store[?] : &:r1212_4, r1212_5 -# 1212| m1212_7(__attribute((vector_size(16UL))) int) = Chi : total:m1212_2, partial:m1212_6 -# 1212| r1212_8(int) = Constant[1] : -# 1212| r1212_9(glval) = PointerAdd[4] : r1212_1, r1212_8 -# 1212| r1212_10(int) = Constant[1] : -# 1212| m1212_11(int) = Store[?] : &:r1212_9, r1212_10 -# 1212| m1212_12(__attribute((vector_size(16UL))) int) = Chi : total:m1212_7, partial:m1212_11 +# 1212| mu1212_6(int) = Store[?] : &:r1212_4, r1212_5 +# 1212| r1212_7(int) = Constant[1] : +# 1212| r1212_8(glval) = PointerAdd[4] : r1212_1, r1212_7 +# 1212| r1212_9(int) = Constant[1] : +# 1212| mu1212_10(int) = Store[?] : &:r1212_8, r1212_9 +# 1212| r1212_11(int) = Constant[2] : +# 1212| r1212_12(glval) = PointerAdd[4] : r1212_1, r1212_11 # 1212| r1212_13(int) = Constant[2] : -# 1212| r1212_14(glval) = PointerAdd[4] : r1212_1, r1212_13 -# 1212| r1212_15(int) = Constant[2] : -# 1212| m1212_16(int) = Store[?] : &:r1212_14, r1212_15 -# 1212| m1212_17(__attribute((vector_size(16UL))) int) = Chi : total:m1212_12, partial:m1212_16 -# 1212| r1212_18(int) = Constant[3] : -# 1212| r1212_19(glval) = PointerAdd[4] : r1212_1, r1212_18 -# 1212| r1212_20(int) = Constant[3] : -# 1212| m1212_21(int) = Store[?] : &:r1212_19, r1212_20 -# 1212| m1212_22(__attribute((vector_size(16UL))) int) = Chi : total:m1212_17, partial:m1212_21 +# 1212| mu1212_14(int) = Store[?] : &:r1212_12, r1212_13 +# 1212| r1212_15(int) = Constant[3] : +# 1212| r1212_16(glval) = PointerAdd[4] : r1212_1, r1212_15 +# 1212| r1212_17(int) = Constant[3] : +# 1212| mu1212_18(int) = Store[?] : &:r1212_16, r1212_17 # 1213| r1213_1(glval) = VariableAddress[x] : # 1213| r1213_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1213| r1213_3(glval) = VariableAddress[i] : -# 1213| r1213_4(int) = Load[i] : &:r1213_3, m1211_6 +# 1213| r1213_4(int) = Load[i] : &:r1213_3, m1211_5 # 1213| r1213_5(glval) = PointerAdd[4] : r1213_2, r1213_4 -# 1213| r1213_6(int) = Load[?] : &:r1213_5, ~m1212_22 +# 1213| r1213_6(int) = Load[?] : &:r1213_5, ~m? # 1213| m1213_7(int) = Store[x] : &:r1213_1, r1213_6 # 1214| r1214_1(glval) = VariableAddress[x] : # 1214| r1214_2(int) = Load[x] : &:r1214_1, m1213_7 # 1214| r1214_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1214| r1214_4(glval) = VariableAddress[i] : -# 1214| r1214_5(int) = Load[i] : &:r1214_4, m1211_6 +# 1214| r1214_5(int) = Load[i] : &:r1214_4, m1211_5 # 1214| r1214_6(glval) = PointerAdd[4] : r1214_3, r1214_5 -# 1214| m1214_7(int) = Store[?] : &:r1214_6, r1214_2 -# 1214| m1214_8(__attribute((vector_size(16UL))) int) = Chi : total:m1212_22, partial:m1214_7 +# 1214| mu1214_7(int) = Store[?] : &:r1214_6, r1214_2 # 1215| r1215_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : # 1215| r1215_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1215| r1215_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_2, m1214_8 +# 1215| r1215_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_2, ~m? # 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, m1214_8 +# 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, ~m? # 1215| r1215_6(int) = Constant[3] : # 1215| r1215_7(int) = Constant[2] : # 1215| r1215_8(int) = Constant[1] : @@ -10480,14 +9628,14 @@ ir.cpp: # 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 # 1215| m1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 # 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, m1214_8 +# 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, ~m? # 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : # 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, m1215_11 # 1216| r1216_5(__attribute((vector_size(16UL))) int) = Add : r1216_2, r1216_4 # 1216| r1216_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1216| m1216_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1216_6, r1216_5 +# 1216| mu1216_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1216_6, r1216_5 # 1217| r1217_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1217| r1217_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1217_1, m1216_7 +# 1217| r1217_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1217_1, ~m? # 1217| r1217_3(__attribute((vector_size(16UL))) int) = Constant[0] : # 1217| r1217_4(bool) = CompareNE : r1217_2, r1217_3 # 1217| v1217_5(void) = ConditionalBranch : r1217_4 @@ -10505,9 +9653,9 @@ ir.cpp: # 1217| r1217_10(glval<__attribute((vector_size(16))) int>) = VariableAddress[#temp1217:9] : # 1217| r1217_11(__attribute((vector_size(16))) int) = Load[#temp1217:9] : &:r1217_10, m1217_9 # 1217| r1217_12(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1217| m1217_13(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1217_12, r1217_11 +# 1217| mu1217_13(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1217_12, r1217_11 # 1218| r1218_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1218| r1218_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1218_1, m1217_13 +# 1218| r1218_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1218_1, ~m? # 1218| r1218_3(__attribute((vector_size(16UL))) int) = Constant[0] : # 1218| r1218_4(bool) = CompareNE : r1218_2, r1218_3 # 1218| v1218_5(void) = ConditionalBranch : r1218_4 @@ -10540,11 +9688,11 @@ ir.cpp: # 1218| r1218_10(glval<__attribute((vector_size(16))) int>) = VariableAddress[#temp1218:9] : # 1218| r1218_11(__attribute((vector_size(16))) int) = Load[#temp1218:9] : &:r1218_10, m1218_9 # 1218| r1218_12(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1218| m1218_13(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1218_12, r1218_11 +# 1218| mu1218_13(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1218_12, r1218_11 # 1219| v1219_1(void) = NoOp : -# 1211| v1211_7(void) = ReturnVoid : -# 1211| v1211_8(void) = AliasedUse : m1211_3 -# 1211| v1211_9(void) = ExitFunction : +# 1211| v1211_6(void) = ReturnVoid : +# 1211| v1211_7(void) = AliasedUse : ~m? +# 1211| v1211_8(void) = ExitFunction : # 1218| Block 7 # 1218| r1218_14(glval<__attribute((vector_size(16))) int>) = VariableAddress[#temp1218:9] : @@ -10564,13 +9712,12 @@ ir.cpp: # 1223| int ModeledCallTarget(int) # 1223| Block 0 # 1223| v1223_1(void) = EnterFunction : -# 1223| m1223_2(unknown) = AliasedDefinition : -# 1223| m1223_3(unknown) = InitializeNonLocal : -# 1223| m1223_4(unknown) = Chi : total:m1223_2, partial:m1223_3 -# 1223| r1223_5(glval) = VariableAddress[x] : -# 1223| m1223_6(int) = InitializeParameter[x] : &:r1223_5 +# 1223| mu1223_2(unknown) = AliasedDefinition : +# 1223| mu1223_3(unknown) = InitializeNonLocal : +# 1223| r1223_4(glval) = VariableAddress[x] : +# 1223| mu1223_5(int) = InitializeParameter[x] : &:r1223_4 # 1224| r1224_1(glval) = VariableAddress[y] : -# 1224| m1224_2(int) = Uninitialized[y] : &:r1224_1 +# 1224| mu1224_2(int) = Uninitialized[y] : &:r1224_1 # 1225| r1225_1(glval) = FunctionAddress[memcpy] : # 1225| r1225_2(glval) = VariableAddress[y] : # 1225| r1225_3(int *) = CopyValue : r1225_2 @@ -10580,54 +9727,48 @@ ir.cpp: # 1225| r1225_7(void *) = Convert : r1225_6 # 1225| r1225_8(int) = Constant[4] : # 1225| r1225_9(void *) = Call[memcpy] : func:r1225_1, 0:r1225_4, 1:r1225_7, 2:r1225_8 -# 1225| v1225_10(void) = ^SizedBufferReadSideEffect[1] : &:r1225_7, r1225_8, ~m1223_6 -# 1225| m1225_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1225_4, r1225_8 -# 1225| m1225_12(int) = Chi : total:m1224_2, partial:m1225_11 +# 1225| v1225_10(void) = ^SizedBufferReadSideEffect[1] : &:r1225_7, r1225_8, ~m? +# 1225| mu1225_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1225_4, r1225_8 # 1226| r1226_1(glval) = VariableAddress[#return] : # 1226| r1226_2(glval) = VariableAddress[y] : -# 1226| r1226_3(int) = Load[y] : &:r1226_2, m1225_12 +# 1226| r1226_3(int) = Load[y] : &:r1226_2, ~m? # 1226| m1226_4(int) = Store[#return] : &:r1226_1, r1226_3 -# 1223| r1223_7(glval) = VariableAddress[#return] : -# 1223| v1223_8(void) = ReturnValue : &:r1223_7, m1226_4 -# 1223| v1223_9(void) = AliasedUse : m1223_3 -# 1223| v1223_10(void) = ExitFunction : +# 1223| r1223_6(glval) = VariableAddress[#return] : +# 1223| v1223_7(void) = ReturnValue : &:r1223_6, m1226_4 +# 1223| v1223_8(void) = AliasedUse : ~m? +# 1223| v1223_9(void) = ExitFunction : # 1229| String ReturnObjectImpl() # 1229| Block 0 # 1229| v1229_1(void) = EnterFunction : -# 1229| m1229_2(unknown) = AliasedDefinition : -# 1229| m1229_3(unknown) = InitializeNonLocal : -# 1229| m1229_4(unknown) = Chi : total:m1229_2, partial:m1229_3 +# 1229| mu1229_2(unknown) = AliasedDefinition : +# 1229| mu1229_3(unknown) = InitializeNonLocal : # 1230| r1230_1(glval) = VariableAddress[#return] : -# 1230| m1230_2(String) = Uninitialized[#return] : &:r1230_1 -# 1230| m1230_3(unknown) = Chi : total:m1229_4, partial:m1230_2 -# 1230| r1230_4(glval) = FunctionAddress[String] : -# 1230| r1230_5(glval) = StringConstant["foo"] : -# 1230| r1230_6(char *) = Convert : r1230_5 -# 1230| v1230_7(void) = Call[String] : func:r1230_4, this:r1230_1, 0:r1230_6 -# 1230| m1230_8(unknown) = ^CallSideEffect : ~m1230_3 -# 1230| m1230_9(unknown) = Chi : total:m1230_3, partial:m1230_8 -# 1230| v1230_10(void) = ^BufferReadSideEffect[0] : &:r1230_6, ~m1229_3 -# 1230| m1230_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1230_1 -# 1230| m1230_12(unknown) = Chi : total:m1230_9, partial:m1230_11 -# 1229| r1229_5(glval) = VariableAddress[#return] : -# 1229| v1229_6(void) = ReturnValue : &:r1229_5, ~m1230_12 -# 1229| v1229_7(void) = AliasedUse : ~m1230_9 -# 1229| v1229_8(void) = ExitFunction : +# 1230| mu1230_2(String) = Uninitialized[#return] : &:r1230_1 +# 1230| r1230_3(glval) = FunctionAddress[String] : +# 1230| r1230_4(glval) = StringConstant["foo"] : +# 1230| r1230_5(char *) = Convert : r1230_4 +# 1230| v1230_6(void) = Call[String] : func:r1230_3, this:r1230_1, 0:r1230_5 +# 1230| mu1230_7(unknown) = ^CallSideEffect : ~m? +# 1230| v1230_8(void) = ^BufferReadSideEffect[0] : &:r1230_5, ~m? +# 1230| mu1230_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1230_1 +# 1229| r1229_4(glval) = VariableAddress[#return] : +# 1229| v1229_5(void) = ReturnValue : &:r1229_4, ~m? +# 1229| v1229_6(void) = AliasedUse : ~m? +# 1229| v1229_7(void) = ExitFunction : # 1233| void switch1Case(int) # 1233| Block 0 # 1233| v1233_1(void) = EnterFunction : -# 1233| m1233_2(unknown) = AliasedDefinition : -# 1233| m1233_3(unknown) = InitializeNonLocal : -# 1233| m1233_4(unknown) = Chi : total:m1233_2, partial:m1233_3 -# 1233| r1233_5(glval) = VariableAddress[x] : -# 1233| m1233_6(int) = InitializeParameter[x] : &:r1233_5 +# 1233| mu1233_2(unknown) = AliasedDefinition : +# 1233| mu1233_3(unknown) = InitializeNonLocal : +# 1233| r1233_4(glval) = VariableAddress[x] : +# 1233| m1233_5(int) = InitializeParameter[x] : &:r1233_4 # 1234| r1234_1(glval) = VariableAddress[y] : # 1234| r1234_2(int) = Constant[0] : # 1234| m1234_3(int) = Store[y] : &:r1234_1, r1234_2 # 1235| r1235_1(glval) = VariableAddress[x] : -# 1235| r1235_2(int) = Load[x] : &:r1235_1, m1233_6 +# 1235| r1235_2(int) = Load[x] : &:r1235_1, m1233_5 # 1235| v1235_3(void) = Switch : r1235_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 @@ -10646,23 +9787,22 @@ ir.cpp: # 1239| r1239_4(int) = Load[y] : &:r1239_3, m1239_1 # 1239| m1239_5(int) = Store[z] : &:r1239_2, r1239_4 # 1240| v1240_1(void) = NoOp : -# 1233| v1233_7(void) = ReturnVoid : -# 1233| v1233_8(void) = AliasedUse : m1233_3 -# 1233| v1233_9(void) = ExitFunction : +# 1233| v1233_6(void) = ReturnVoid : +# 1233| v1233_7(void) = AliasedUse : ~m? +# 1233| v1233_8(void) = ExitFunction : # 1242| void switch2Case_fallthrough(int) # 1242| Block 0 # 1242| v1242_1(void) = EnterFunction : -# 1242| m1242_2(unknown) = AliasedDefinition : -# 1242| m1242_3(unknown) = InitializeNonLocal : -# 1242| m1242_4(unknown) = Chi : total:m1242_2, partial:m1242_3 -# 1242| r1242_5(glval) = VariableAddress[x] : -# 1242| m1242_6(int) = InitializeParameter[x] : &:r1242_5 +# 1242| mu1242_2(unknown) = AliasedDefinition : +# 1242| mu1242_3(unknown) = InitializeNonLocal : +# 1242| r1242_4(glval) = VariableAddress[x] : +# 1242| m1242_5(int) = InitializeParameter[x] : &:r1242_4 # 1243| r1243_1(glval) = VariableAddress[y] : # 1243| r1243_2(int) = Constant[0] : # 1243| m1243_3(int) = Store[y] : &:r1243_1, r1243_2 # 1244| r1244_1(glval) = VariableAddress[x] : -# 1244| r1244_2(int) = Load[x] : &:r1244_1, m1242_6 +# 1244| r1244_2(int) = Load[x] : &:r1244_1, m1242_5 # 1244| v1244_3(void) = Switch : r1244_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 @@ -10689,23 +9829,22 @@ ir.cpp: # 1250| r1250_4(int) = Load[y] : &:r1250_3, m1250_1 # 1250| m1250_5(int) = Store[z] : &:r1250_2, r1250_4 # 1251| v1251_1(void) = NoOp : -# 1242| v1242_7(void) = ReturnVoid : -# 1242| v1242_8(void) = AliasedUse : m1242_3 -# 1242| v1242_9(void) = ExitFunction : +# 1242| v1242_6(void) = ReturnVoid : +# 1242| v1242_7(void) = AliasedUse : ~m? +# 1242| v1242_8(void) = ExitFunction : # 1253| void switch2Case(int) # 1253| Block 0 # 1253| v1253_1(void) = EnterFunction : -# 1253| m1253_2(unknown) = AliasedDefinition : -# 1253| m1253_3(unknown) = InitializeNonLocal : -# 1253| m1253_4(unknown) = Chi : total:m1253_2, partial:m1253_3 -# 1253| r1253_5(glval) = VariableAddress[x] : -# 1253| m1253_6(int) = InitializeParameter[x] : &:r1253_5 +# 1253| mu1253_2(unknown) = AliasedDefinition : +# 1253| mu1253_3(unknown) = InitializeNonLocal : +# 1253| r1253_4(glval) = VariableAddress[x] : +# 1253| m1253_5(int) = InitializeParameter[x] : &:r1253_4 # 1254| r1254_1(glval) = VariableAddress[y] : # 1254| r1254_2(int) = Constant[0] : # 1254| m1254_3(int) = Store[y] : &:r1254_1, r1254_2 # 1255| r1255_1(glval) = VariableAddress[x] : -# 1255| r1255_2(int) = Load[x] : &:r1255_1, m1253_6 +# 1255| r1255_2(int) = Load[x] : &:r1255_1, m1253_5 # 1255| v1255_3(void) = Switch : r1255_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 @@ -10734,23 +9873,22 @@ ir.cpp: # 1262| r1262_3(int) = Load[y] : &:r1262_2, m1261_1 # 1262| m1262_4(int) = Store[z] : &:r1262_1, r1262_3 # 1263| v1263_1(void) = NoOp : -# 1253| v1253_7(void) = ReturnVoid : -# 1253| v1253_8(void) = AliasedUse : m1253_3 -# 1253| v1253_9(void) = ExitFunction : +# 1253| v1253_6(void) = ReturnVoid : +# 1253| v1253_7(void) = AliasedUse : ~m? +# 1253| v1253_8(void) = ExitFunction : # 1265| void switch2Case_default(int) # 1265| Block 0 # 1265| v1265_1(void) = EnterFunction : -# 1265| m1265_2(unknown) = AliasedDefinition : -# 1265| m1265_3(unknown) = InitializeNonLocal : -# 1265| m1265_4(unknown) = Chi : total:m1265_2, partial:m1265_3 -# 1265| r1265_5(glval) = VariableAddress[x] : -# 1265| m1265_6(int) = InitializeParameter[x] : &:r1265_5 +# 1265| mu1265_2(unknown) = AliasedDefinition : +# 1265| mu1265_3(unknown) = InitializeNonLocal : +# 1265| r1265_4(glval) = VariableAddress[x] : +# 1265| m1265_5(int) = InitializeParameter[x] : &:r1265_4 # 1266| r1266_1(glval) = VariableAddress[y] : # 1266| r1266_2(int) = Constant[0] : # 1266| m1266_3(int) = Store[y] : &:r1266_1, r1266_2 # 1267| r1267_1(glval) = VariableAddress[x] : -# 1267| r1267_2(int) = Load[x] : &:r1267_1, m1265_6 +# 1267| r1267_2(int) = Load[x] : &:r1267_1, m1265_5 # 1267| v1267_3(void) = Switch : r1267_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 @@ -10787,20 +9925,19 @@ ir.cpp: # 1279| r1279_3(int) = Load[y] : &:r1279_2, m1278_1 # 1279| m1279_4(int) = Store[z] : &:r1279_1, r1279_3 # 1280| v1280_1(void) = NoOp : -# 1265| v1265_7(void) = ReturnVoid : -# 1265| v1265_8(void) = AliasedUse : m1265_3 -# 1265| v1265_9(void) = ExitFunction : +# 1265| v1265_6(void) = ReturnVoid : +# 1265| v1265_7(void) = AliasedUse : ~m? +# 1265| v1265_8(void) = ExitFunction : # 1282| int staticLocalInit(int) # 1282| Block 0 # 1282| v1282_1(void) = EnterFunction : -# 1282| m1282_2(unknown) = AliasedDefinition : -# 1282| m1282_3(unknown) = InitializeNonLocal : -# 1282| m1282_4(unknown) = Chi : total:m1282_2, partial:m1282_3 -# 1282| r1282_5(glval) = VariableAddress[x] : -# 1282| m1282_6(int) = InitializeParameter[x] : &:r1282_5 +# 1282| mu1282_2(unknown) = AliasedDefinition : +# 1282| mu1282_3(unknown) = InitializeNonLocal : +# 1282| r1282_4(glval) = VariableAddress[x] : +# 1282| m1282_5(int) = InitializeParameter[x] : &:r1282_4 # 1285| r1285_1(glval) = VariableAddress[c#init] : -# 1285| r1285_2(bool) = Load[c#init] : &:r1285_1, ~m1282_3 +# 1285| r1285_2(bool) = Load[c#init] : &:r1285_1, ~m? # 1285| v1285_3(void) = ConditionalBranch : r1285_2 #-----| False -> Block 1 #-----| True -> Block 2 @@ -10808,72 +9945,64 @@ ir.cpp: # 1285| Block 1 # 1285| r1285_4(glval) = VariableAddress[c] : # 1285| r1285_5(glval) = VariableAddress[x] : -# 1285| r1285_6(int) = Load[x] : &:r1285_5, m1282_6 -# 1285| m1285_7(int) = Store[c] : &:r1285_4, r1285_6 -# 1285| m1285_8(unknown) = Chi : total:m1282_4, partial:m1285_7 -# 1285| r1285_9(bool) = Constant[1] : -# 1285| m1285_10(bool) = Store[c#init] : &:r1285_1, r1285_9 -# 1285| m1285_11(unknown) = Chi : total:m1285_8, partial:m1285_10 +# 1285| r1285_6(int) = Load[x] : &:r1285_5, m1282_5 +# 1285| mu1285_7(int) = Store[c] : &:r1285_4, r1285_6 +# 1285| r1285_8(bool) = Constant[1] : +# 1285| mu1285_9(bool) = Store[c#init] : &:r1285_1, r1285_8 #-----| Goto -> Block 2 # 1288| Block 2 -# 1288| m1288_1(int) = Phi : from 0:~m1282_3, from 1:m1285_7 -# 1288| m1288_2(unknown) = Phi : from 0:~m1282_4, from 1:~m1285_11 -# 1288| r1288_3(glval) = VariableAddress[#return] : -# 1288| r1288_4(glval) = VariableAddress[a] : -# 1288| r1288_5(int) = Load[a] : &:r1288_4, ~m1288_2 -# 1288| r1288_6(glval) = VariableAddress[b] : -# 1288| r1288_7(int) = Load[b] : &:r1288_6, ~m1288_2 -# 1288| r1288_8(int) = Add : r1288_5, r1288_7 -# 1288| r1288_9(glval) = VariableAddress[c] : -# 1288| r1288_10(int) = Load[c] : &:r1288_9, m1288_1 -# 1288| r1288_11(int) = Add : r1288_8, r1288_10 -# 1288| r1288_12(glval) = VariableAddress[d] : -# 1288| r1288_13(int) = Load[d] : &:r1288_12, ~m1288_2 -# 1288| r1288_14(int) = Add : r1288_11, r1288_13 -# 1288| m1288_15(int) = Store[#return] : &:r1288_3, r1288_14 -# 1282| r1282_7(glval) = VariableAddress[#return] : -# 1282| v1282_8(void) = ReturnValue : &:r1282_7, m1288_15 -# 1282| v1282_9(void) = AliasedUse : ~m1288_2 -# 1282| v1282_10(void) = ExitFunction : +# 1288| r1288_1(glval) = VariableAddress[#return] : +# 1288| r1288_2(glval) = VariableAddress[a] : +# 1288| r1288_3(int) = Load[a] : &:r1288_2, ~m? +# 1288| r1288_4(glval) = VariableAddress[b] : +# 1288| r1288_5(int) = Load[b] : &:r1288_4, ~m? +# 1288| r1288_6(int) = Add : r1288_3, r1288_5 +# 1288| r1288_7(glval) = VariableAddress[c] : +# 1288| r1288_8(int) = Load[c] : &:r1288_7, ~m? +# 1288| r1288_9(int) = Add : r1288_6, r1288_8 +# 1288| r1288_10(glval) = VariableAddress[d] : +# 1288| r1288_11(int) = Load[d] : &:r1288_10, ~m? +# 1288| r1288_12(int) = Add : r1288_9, r1288_11 +# 1288| m1288_13(int) = Store[#return] : &:r1288_1, r1288_12 +# 1282| r1282_6(glval) = VariableAddress[#return] : +# 1282| v1282_7(void) = ReturnValue : &:r1282_6, m1288_13 +# 1282| v1282_8(void) = AliasedUse : ~m? +# 1282| v1282_9(void) = ExitFunction : # 1283| int a # 1283| Block 0 # 1283| v1283_1(void) = EnterFunction : -# 1283| m1283_2(unknown) = AliasedDefinition : +# 1283| mu1283_2(unknown) = AliasedDefinition : # 1283| r1283_3(glval) = VariableAddress[a] : # 1283| r1283_4(int) = Constant[0] : -# 1283| m1283_5(int) = Store[a] : &:r1283_3, r1283_4 -# 1283| m1283_6(unknown) = Chi : total:m1283_2, partial:m1283_5 -# 1283| v1283_7(void) = ReturnVoid : -# 1283| v1283_8(void) = AliasedUse : ~m1283_6 -# 1283| v1283_9(void) = ExitFunction : +# 1283| mu1283_5(int) = Store[a] : &:r1283_3, r1283_4 +# 1283| v1283_6(void) = ReturnVoid : +# 1283| v1283_7(void) = AliasedUse : ~m? +# 1283| v1283_8(void) = ExitFunction : # 1284| int b # 1284| Block 0 # 1284| v1284_1(void) = EnterFunction : -# 1284| m1284_2(unknown) = AliasedDefinition : +# 1284| mu1284_2(unknown) = AliasedDefinition : # 1284| r1284_3(glval) = VariableAddress[b] : # 1284| r1284_4(int) = Constant[4] : -# 1284| m1284_5(int) = Store[b] : &:r1284_3, r1284_4 -# 1284| m1284_6(unknown) = Chi : total:m1284_2, partial:m1284_5 -# 1284| v1284_7(void) = ReturnVoid : -# 1284| v1284_8(void) = AliasedUse : ~m1284_6 -# 1284| v1284_9(void) = ExitFunction : +# 1284| mu1284_5(int) = Store[b] : &:r1284_3, r1284_4 +# 1284| v1284_6(void) = ReturnVoid : +# 1284| v1284_7(void) = AliasedUse : ~m? +# 1284| v1284_8(void) = ExitFunction : # 1291| void staticLocalWithConstructor(char const*) # 1291| Block 0 # 1291| v1291_1(void) = EnterFunction : -# 1291| m1291_2(unknown) = AliasedDefinition : -# 1291| m1291_3(unknown) = InitializeNonLocal : -# 1291| m1291_4(unknown) = Chi : total:m1291_2, partial:m1291_3 -# 1291| r1291_5(glval) = VariableAddress[dynamic] : -# 1291| m1291_6(char *) = InitializeParameter[dynamic] : &:r1291_5 -# 1291| r1291_7(char *) = Load[dynamic] : &:r1291_5, m1291_6 -# 1291| m1291_8(unknown) = InitializeIndirection[dynamic] : &:r1291_7 -# 1291| m1291_9(unknown) = Chi : total:m1291_4, partial:m1291_8 +# 1291| mu1291_2(unknown) = AliasedDefinition : +# 1291| mu1291_3(unknown) = InitializeNonLocal : +# 1291| r1291_4(glval) = VariableAddress[dynamic] : +# 1291| m1291_5(char *) = InitializeParameter[dynamic] : &:r1291_4 +# 1291| r1291_6(char *) = Load[dynamic] : &:r1291_4, m1291_5 +# 1291| mu1291_7(unknown) = InitializeIndirection[dynamic] : &:r1291_6 # 1292| r1292_1(glval) = VariableAddress[a#init] : -# 1292| r1292_2(bool) = Load[a#init] : &:r1292_1, ~m1291_3 +# 1292| r1292_2(bool) = Load[a#init] : &:r1292_1, ~m? # 1292| v1292_3(void) = ConditionalBranch : r1292_2 #-----| False -> Block 1 #-----| True -> Block 2 @@ -10882,308 +10011,263 @@ ir.cpp: # 1292| r1292_4(glval) = VariableAddress[a] : #-----| r0_1(glval) = FunctionAddress[String] : #-----| v0_2(void) = Call[String] : func:r0_1, this:r1292_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m1291_9 -#-----| m0_4(unknown) = Chi : total:m1291_9, partial:m0_3 -#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1292_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1292_4 # 1292| r1292_5(bool) = Constant[1] : -# 1292| m1292_6(bool) = Store[a#init] : &:r1292_1, r1292_5 -# 1292| m1292_7(unknown) = Chi : total:m0_6, partial:m1292_6 +# 1292| mu1292_6(bool) = Store[a#init] : &:r1292_1, r1292_5 #-----| Goto -> Block 2 # 1293| Block 2 -# 1293| m1293_1(unknown) = Phi : from 0:~m1291_9, from 1:~m1292_7 -# 1293| r1293_2(glval) = VariableAddress[b#init] : -# 1293| r1293_3(bool) = Load[b#init] : &:r1293_2, ~m1293_1 -# 1293| v1293_4(void) = ConditionalBranch : r1293_3 +# 1293| r1293_1(glval) = VariableAddress[b#init] : +# 1293| r1293_2(bool) = Load[b#init] : &:r1293_1, ~m? +# 1293| v1293_3(void) = ConditionalBranch : r1293_2 #-----| False -> Block 3 #-----| True -> Block 4 # 1293| Block 3 -# 1293| r1293_5(glval) = VariableAddress[b] : -# 1293| r1293_6(glval) = FunctionAddress[String] : -# 1293| r1293_7(glval) = StringConstant["static"] : -# 1293| r1293_8(char *) = Convert : r1293_7 -# 1293| v1293_9(void) = Call[String] : func:r1293_6, this:r1293_5, 0:r1293_8 -# 1293| m1293_10(unknown) = ^CallSideEffect : ~m1293_1 -# 1293| m1293_11(unknown) = Chi : total:m1293_1, partial:m1293_10 -# 1293| v1293_12(void) = ^BufferReadSideEffect[0] : &:r1293_8, ~m1291_3 -# 1293| m1293_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1293_5 -# 1293| m1293_14(unknown) = Chi : total:m1293_11, partial:m1293_13 -# 1293| r1293_15(bool) = Constant[1] : -# 1293| m1293_16(bool) = Store[b#init] : &:r1293_2, r1293_15 -# 1293| m1293_17(unknown) = Chi : total:m1293_14, partial:m1293_16 +# 1293| r1293_4(glval) = VariableAddress[b] : +# 1293| r1293_5(glval) = FunctionAddress[String] : +# 1293| r1293_6(glval) = StringConstant["static"] : +# 1293| r1293_7(char *) = Convert : r1293_6 +# 1293| v1293_8(void) = Call[String] : func:r1293_5, this:r1293_4, 0:r1293_7 +# 1293| mu1293_9(unknown) = ^CallSideEffect : ~m? +# 1293| v1293_10(void) = ^BufferReadSideEffect[0] : &:r1293_7, ~m? +# 1293| mu1293_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1293_4 +# 1293| r1293_12(bool) = Constant[1] : +# 1293| mu1293_13(bool) = Store[b#init] : &:r1293_1, r1293_12 #-----| Goto -> Block 4 # 1294| Block 4 -# 1294| m1294_1(unknown) = Phi : from 2:~m1293_1, from 3:~m1293_17 -# 1294| r1294_2(glval) = VariableAddress[c#init] : -# 1294| r1294_3(bool) = Load[c#init] : &:r1294_2, ~m1294_1 -# 1294| v1294_4(void) = ConditionalBranch : r1294_3 +# 1294| r1294_1(glval) = VariableAddress[c#init] : +# 1294| r1294_2(bool) = Load[c#init] : &:r1294_1, ~m? +# 1294| v1294_3(void) = ConditionalBranch : r1294_2 #-----| False -> Block 5 #-----| True -> Block 6 # 1294| Block 5 -# 1294| r1294_5(glval) = VariableAddress[c] : -# 1294| r1294_6(glval) = FunctionAddress[String] : -# 1294| r1294_7(glval) = VariableAddress[dynamic] : -# 1294| r1294_8(char *) = Load[dynamic] : &:r1294_7, m1291_6 -# 1294| v1294_9(void) = Call[String] : func:r1294_6, this:r1294_5, 0:r1294_8 -# 1294| m1294_10(unknown) = ^CallSideEffect : ~m1294_1 -# 1294| m1294_11(unknown) = Chi : total:m1294_1, partial:m1294_10 -# 1294| v1294_12(void) = ^BufferReadSideEffect[0] : &:r1294_8, ~m1294_11 -# 1294| m1294_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1294_5 -# 1294| m1294_14(unknown) = Chi : total:m1294_11, partial:m1294_13 -# 1294| r1294_15(bool) = Constant[1] : -# 1294| m1294_16(bool) = Store[c#init] : &:r1294_2, r1294_15 -# 1294| m1294_17(unknown) = Chi : total:m1294_14, partial:m1294_16 +# 1294| r1294_4(glval) = VariableAddress[c] : +# 1294| r1294_5(glval) = FunctionAddress[String] : +# 1294| r1294_6(glval) = VariableAddress[dynamic] : +# 1294| r1294_7(char *) = Load[dynamic] : &:r1294_6, m1291_5 +# 1294| v1294_8(void) = Call[String] : func:r1294_5, this:r1294_4, 0:r1294_7 +# 1294| mu1294_9(unknown) = ^CallSideEffect : ~m? +# 1294| v1294_10(void) = ^BufferReadSideEffect[0] : &:r1294_7, ~m? +# 1294| mu1294_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1294_4 +# 1294| r1294_12(bool) = Constant[1] : +# 1294| mu1294_13(bool) = Store[c#init] : &:r1294_1, r1294_12 #-----| Goto -> Block 6 # 1295| Block 6 -# 1295| m1295_1(unknown) = Phi : from 4:~m1294_1, from 5:~m1294_17 -# 1295| v1295_2(void) = NoOp : -# 1291| v1291_10(void) = ReturnIndirection[dynamic] : &:r1291_7, ~m1295_1 -# 1291| v1291_11(void) = ReturnVoid : -# 1291| v1291_12(void) = AliasedUse : ~m1295_1 -# 1291| v1291_13(void) = ExitFunction : +# 1295| v1295_1(void) = NoOp : +# 1291| v1291_8(void) = ReturnIndirection[dynamic] : &:r1291_6, ~m? +# 1291| v1291_9(void) = ReturnVoid : +# 1291| v1291_10(void) = AliasedUse : ~m? +# 1291| v1291_11(void) = ExitFunction : # 1302| void test_strings(char*, char*) # 1302| Block 0 # 1302| v1302_1(void) = EnterFunction : -# 1302| m1302_2(unknown) = AliasedDefinition : -# 1302| m1302_3(unknown) = InitializeNonLocal : -# 1302| m1302_4(unknown) = Chi : total:m1302_2, partial:m1302_3 -# 1302| r1302_5(glval) = VariableAddress[s1] : -# 1302| m1302_6(char *) = InitializeParameter[s1] : &:r1302_5 -# 1302| r1302_7(char *) = Load[s1] : &:r1302_5, m1302_6 -# 1302| m1302_8(unknown) = InitializeIndirection[s1] : &:r1302_7 -# 1302| m1302_9(unknown) = Chi : total:m1302_4, partial:m1302_8 -# 1302| r1302_10(glval) = VariableAddress[s2] : -# 1302| m1302_11(char *) = InitializeParameter[s2] : &:r1302_10 -# 1302| r1302_12(char *) = Load[s2] : &:r1302_10, m1302_11 -# 1302| m1302_13(unknown) = InitializeIndirection[s2] : &:r1302_12 -# 1302| m1302_14(unknown) = Chi : total:m1302_9, partial:m1302_13 +# 1302| mu1302_2(unknown) = AliasedDefinition : +# 1302| mu1302_3(unknown) = InitializeNonLocal : +# 1302| r1302_4(glval) = VariableAddress[s1] : +# 1302| m1302_5(char *) = InitializeParameter[s1] : &:r1302_4 +# 1302| r1302_6(char *) = Load[s1] : &:r1302_4, m1302_5 +# 1302| mu1302_7(unknown) = InitializeIndirection[s1] : &:r1302_6 +# 1302| r1302_8(glval) = VariableAddress[s2] : +# 1302| m1302_9(char *) = InitializeParameter[s2] : &:r1302_8 +# 1302| r1302_10(char *) = Load[s2] : &:r1302_8, m1302_9 +# 1302| mu1302_11(unknown) = InitializeIndirection[s2] : &:r1302_10 # 1303| r1303_1(glval) = VariableAddress[buffer] : -# 1303| m1303_2(char[1024]) = Uninitialized[buffer] : &:r1303_1 -# 1303| m1303_3(unknown) = Chi : total:m1302_14, partial:m1303_2 -# 1303| r1303_4(int) = Constant[0] : -# 1303| r1303_5(glval) = PointerAdd[1] : r1303_1, r1303_4 -# 1303| r1303_6(char) = Constant[0] : -# 1303| m1303_7(char) = Store[?] : &:r1303_5, r1303_6 -# 1303| m1303_8(unknown) = Chi : total:m1303_3, partial:m1303_7 -# 1303| r1303_9(int) = Constant[1] : -# 1303| r1303_10(glval) = PointerAdd[1] : r1303_1, r1303_9 -# 1303| r1303_11(unknown[1023]) = Constant[0] : -# 1303| m1303_12(unknown[1023]) = Store[?] : &:r1303_10, r1303_11 -# 1303| m1303_13(unknown) = Chi : total:m1303_8, partial:m1303_12 +# 1303| mu1303_2(char[1024]) = Uninitialized[buffer] : &:r1303_1 +# 1303| r1303_3(int) = Constant[0] : +# 1303| r1303_4(glval) = PointerAdd[1] : r1303_1, r1303_3 +# 1303| r1303_5(char) = Constant[0] : +# 1303| mu1303_6(char) = Store[?] : &:r1303_4, r1303_5 +# 1303| r1303_7(int) = Constant[1] : +# 1303| r1303_8(glval) = PointerAdd[1] : r1303_1, r1303_7 +# 1303| r1303_9(unknown[1023]) = Constant[0] : +# 1303| mu1303_10(unknown[1023]) = Store[?] : &:r1303_8, r1303_9 # 1305| r1305_1(glval) = FunctionAddress[strcpy] : # 1305| r1305_2(glval) = VariableAddress[buffer] : # 1305| r1305_3(char *) = Convert : r1305_2 # 1305| r1305_4(glval) = VariableAddress[s1] : -# 1305| r1305_5(char *) = Load[s1] : &:r1305_4, m1302_6 +# 1305| r1305_5(char *) = Load[s1] : &:r1305_4, m1302_5 # 1305| r1305_6(char *) = Convert : r1305_5 # 1305| r1305_7(char *) = Call[strcpy] : func:r1305_1, 0:r1305_3, 1:r1305_6 -# 1305| v1305_8(void) = ^BufferReadSideEffect[1] : &:r1305_6, ~m1302_8 -# 1305| m1305_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1305_3 -# 1305| m1305_10(unknown) = Chi : total:m1303_13, partial:m1305_9 +# 1305| v1305_8(void) = ^BufferReadSideEffect[1] : &:r1305_6, ~m? +# 1305| mu1305_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1305_3 # 1306| r1306_1(glval) = FunctionAddress[strcat] : # 1306| r1306_2(glval) = VariableAddress[buffer] : # 1306| r1306_3(char *) = Convert : r1306_2 # 1306| r1306_4(glval) = VariableAddress[s2] : -# 1306| r1306_5(char *) = Load[s2] : &:r1306_4, m1302_11 +# 1306| r1306_5(char *) = Load[s2] : &:r1306_4, m1302_9 # 1306| r1306_6(char *) = Convert : r1306_5 # 1306| r1306_7(char *) = Call[strcat] : func:r1306_1, 0:r1306_3, 1:r1306_6 -# 1306| v1306_8(void) = ^BufferReadSideEffect[0] : &:r1306_3, ~m1305_10 -# 1306| v1306_9(void) = ^BufferReadSideEffect[1] : &:r1306_6, ~m1302_13 -# 1306| m1306_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1306_3 -# 1306| m1306_11(unknown) = Chi : total:m1305_10, partial:m1306_10 +# 1306| v1306_8(void) = ^BufferReadSideEffect[0] : &:r1306_3, ~m? +# 1306| v1306_9(void) = ^BufferReadSideEffect[1] : &:r1306_6, ~m? +# 1306| mu1306_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1306_3 # 1307| v1307_1(void) = NoOp : -# 1302| v1302_15(void) = ReturnIndirection[s1] : &:r1302_7, ~m1306_11 -# 1302| v1302_16(void) = ReturnIndirection[s2] : &:r1302_12, ~m1306_11 -# 1302| v1302_17(void) = ReturnVoid : -# 1302| v1302_18(void) = AliasedUse : ~m1302_14 -# 1302| v1302_19(void) = ExitFunction : +# 1302| v1302_12(void) = ReturnIndirection[s1] : &:r1302_6, ~m? +# 1302| v1302_13(void) = ReturnIndirection[s2] : &:r1302_10, ~m? +# 1302| v1302_14(void) = ReturnVoid : +# 1302| v1302_15(void) = AliasedUse : ~m? +# 1302| v1302_16(void) = ExitFunction : # 1312| void A::static_member(A*, int) # 1312| Block 0 # 1312| v1312_1(void) = EnterFunction : -# 1312| m1312_2(unknown) = AliasedDefinition : -# 1312| m1312_3(unknown) = InitializeNonLocal : -# 1312| m1312_4(unknown) = Chi : total:m1312_2, partial:m1312_3 -# 1312| r1312_5(glval) = VariableAddress[a] : -# 1312| m1312_6(A *) = InitializeParameter[a] : &:r1312_5 -# 1312| r1312_7(A *) = Load[a] : &:r1312_5, m1312_6 -# 1312| m1312_8(unknown) = InitializeIndirection[a] : &:r1312_7 -# 1312| r1312_9(glval) = VariableAddress[x] : -# 1312| m1312_10(int) = InitializeParameter[x] : &:r1312_9 +# 1312| mu1312_2(unknown) = AliasedDefinition : +# 1312| mu1312_3(unknown) = InitializeNonLocal : +# 1312| r1312_4(glval) = VariableAddress[a] : +# 1312| m1312_5(A *) = InitializeParameter[a] : &:r1312_4 +# 1312| r1312_6(A *) = Load[a] : &:r1312_4, m1312_5 +# 1312| mu1312_7(unknown) = InitializeIndirection[a] : &:r1312_6 +# 1312| r1312_8(glval) = VariableAddress[x] : +# 1312| m1312_9(int) = InitializeParameter[x] : &:r1312_8 # 1313| r1313_1(glval) = VariableAddress[x] : -# 1313| r1313_2(int) = Load[x] : &:r1313_1, m1312_10 +# 1313| r1313_2(int) = Load[x] : &:r1313_1, m1312_9 # 1313| r1313_3(glval) = VariableAddress[a] : -# 1313| r1313_4(A *) = Load[a] : &:r1313_3, m1312_6 +# 1313| r1313_4(A *) = Load[a] : &:r1313_3, m1312_5 # 1313| r1313_5(glval) = FieldAddress[member] : r1313_4 -# 1313| m1313_6(int) = Store[?] : &:r1313_5, r1313_2 -# 1313| m1313_7(unknown) = Chi : total:m1312_8, partial:m1313_6 +# 1313| mu1313_6(int) = Store[?] : &:r1313_5, r1313_2 # 1314| v1314_1(void) = NoOp : -# 1312| v1312_11(void) = ReturnIndirection[a] : &:r1312_7, m1313_7 -# 1312| v1312_12(void) = ReturnVoid : -# 1312| v1312_13(void) = AliasedUse : m1312_3 -# 1312| v1312_14(void) = ExitFunction : +# 1312| v1312_10(void) = ReturnIndirection[a] : &:r1312_6, ~m? +# 1312| v1312_11(void) = ReturnVoid : +# 1312| v1312_12(void) = AliasedUse : ~m? +# 1312| v1312_13(void) = ExitFunction : # 1321| void test_static_member_functions(int, A*) # 1321| Block 0 # 1321| v1321_1(void) = EnterFunction : -# 1321| m1321_2(unknown) = AliasedDefinition : -# 1321| m1321_3(unknown) = InitializeNonLocal : -# 1321| m1321_4(unknown) = Chi : total:m1321_2, partial:m1321_3 -# 1321| r1321_5(glval) = VariableAddress[int_arg] : -# 1321| m1321_6(int) = InitializeParameter[int_arg] : &:r1321_5 -# 1321| r1321_7(glval) = VariableAddress[a_arg] : -# 1321| m1321_8(A *) = InitializeParameter[a_arg] : &:r1321_7 -# 1321| r1321_9(A *) = Load[a_arg] : &:r1321_7, m1321_8 -# 1321| m1321_10(unknown) = InitializeIndirection[a_arg] : &:r1321_9 +# 1321| mu1321_2(unknown) = AliasedDefinition : +# 1321| mu1321_3(unknown) = InitializeNonLocal : +# 1321| r1321_4(glval) = VariableAddress[int_arg] : +# 1321| m1321_5(int) = InitializeParameter[int_arg] : &:r1321_4 +# 1321| r1321_6(glval) = VariableAddress[a_arg] : +# 1321| m1321_7(A *) = InitializeParameter[a_arg] : &:r1321_6 +# 1321| r1321_8(A *) = Load[a_arg] : &:r1321_6, m1321_7 +# 1321| mu1321_9(unknown) = InitializeIndirection[a_arg] : &:r1321_8 # 1322| r1322_1(glval) = VariableAddress[c] : -# 1322| m1322_2(C) = Uninitialized[c] : &:r1322_1 -# 1322| m1322_3(unknown) = Chi : total:m1321_4, partial:m1322_2 -# 1322| r1322_4(glval) = FunctionAddress[C] : -# 1322| v1322_5(void) = Call[C] : func:r1322_4, this:r1322_1 -# 1322| m1322_6(unknown) = ^CallSideEffect : ~m1322_3 -# 1322| m1322_7(unknown) = Chi : total:m1322_3, partial:m1322_6 -# 1322| m1322_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1322_1 -# 1322| m1322_9(unknown) = Chi : total:m1322_7, partial:m1322_8 +# 1322| mu1322_2(C) = Uninitialized[c] : &:r1322_1 +# 1322| r1322_3(glval) = FunctionAddress[C] : +# 1322| v1322_4(void) = Call[C] : func:r1322_3, this:r1322_1 +# 1322| mu1322_5(unknown) = ^CallSideEffect : ~m? +# 1322| mu1322_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1322_1 # 1323| r1323_1(glval) = VariableAddress[c] : # 1323| r1323_2(glval) = FunctionAddress[StaticMemberFunction] : # 1323| r1323_3(int) = Constant[10] : # 1323| r1323_4(int) = Call[StaticMemberFunction] : func:r1323_2, 0:r1323_3 -# 1323| m1323_5(unknown) = ^CallSideEffect : ~m1322_9 -# 1323| m1323_6(unknown) = Chi : total:m1322_9, partial:m1323_5 +# 1323| mu1323_5(unknown) = ^CallSideEffect : ~m? # 1324| r1324_1(glval) = FunctionAddress[StaticMemberFunction] : # 1324| r1324_2(int) = Constant[10] : # 1324| r1324_3(int) = Call[StaticMemberFunction] : func:r1324_1, 0:r1324_2 -# 1324| m1324_4(unknown) = ^CallSideEffect : ~m1323_6 -# 1324| m1324_5(unknown) = Chi : total:m1323_6, partial:m1324_4 +# 1324| mu1324_4(unknown) = ^CallSideEffect : ~m? # 1326| r1326_1(glval) = VariableAddress[a] : -# 1326| m1326_2(A) = Uninitialized[a] : &:r1326_1 +# 1326| mu1326_2(A) = Uninitialized[a] : &:r1326_1 # 1327| r1327_1(glval) = VariableAddress[a] : # 1327| r1327_2(glval) = FunctionAddress[static_member] : # 1327| r1327_3(glval) = VariableAddress[a] : # 1327| r1327_4(A *) = CopyValue : r1327_3 # 1327| r1327_5(glval) = VariableAddress[int_arg] : -# 1327| r1327_6(int) = Load[int_arg] : &:r1327_5, m1321_6 +# 1327| r1327_6(int) = Load[int_arg] : &:r1327_5, m1321_5 # 1327| v1327_7(void) = Call[static_member] : func:r1327_2, 0:r1327_4, 1:r1327_6 -# 1327| m1327_8(unknown) = ^CallSideEffect : ~m1324_5 -# 1327| m1327_9(unknown) = Chi : total:m1324_5, partial:m1327_8 -# 1327| v1327_10(void) = ^BufferReadSideEffect[0] : &:r1327_4, ~m1326_2 -# 1327| m1327_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1327_4 -# 1327| m1327_12(A) = Chi : total:m1326_2, partial:m1327_11 +# 1327| mu1327_8(unknown) = ^CallSideEffect : ~m? +# 1327| v1327_9(void) = ^BufferReadSideEffect[0] : &:r1327_4, ~m? +# 1327| mu1327_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1327_4 # 1328| r1328_1(glval) = FunctionAddress[static_member] : # 1328| r1328_2(glval) = VariableAddress[a] : # 1328| r1328_3(A *) = CopyValue : r1328_2 # 1328| r1328_4(glval) = VariableAddress[int_arg] : -# 1328| r1328_5(int) = Load[int_arg] : &:r1328_4, m1321_6 +# 1328| r1328_5(int) = Load[int_arg] : &:r1328_4, m1321_5 # 1328| v1328_6(void) = Call[static_member] : func:r1328_1, 0:r1328_3, 1:r1328_5 -# 1328| m1328_7(unknown) = ^CallSideEffect : ~m1327_9 -# 1328| m1328_8(unknown) = Chi : total:m1327_9, partial:m1328_7 -# 1328| v1328_9(void) = ^BufferReadSideEffect[0] : &:r1328_3, ~m1327_12 -# 1328| m1328_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1328_3 -# 1328| m1328_11(A) = Chi : total:m1327_12, partial:m1328_10 +# 1328| mu1328_7(unknown) = ^CallSideEffect : ~m? +# 1328| v1328_8(void) = ^BufferReadSideEffect[0] : &:r1328_3, ~m? +# 1328| mu1328_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1328_3 # 1330| r1330_1(glval) = VariableAddress[a] : # 1330| r1330_2(A *) = CopyValue : r1330_1 # 1330| r1330_3(glval) = FunctionAddress[static_member] : # 1330| r1330_4(glval) = VariableAddress[a_arg] : -# 1330| r1330_5(A *) = Load[a_arg] : &:r1330_4, m1321_8 +# 1330| r1330_5(A *) = Load[a_arg] : &:r1330_4, m1321_7 # 1330| r1330_6(glval) = VariableAddress[int_arg] : -# 1330| r1330_7(int) = Load[int_arg] : &:r1330_6, m1321_6 +# 1330| r1330_7(int) = Load[int_arg] : &:r1330_6, m1321_5 # 1330| r1330_8(int) = Constant[2] : # 1330| r1330_9(int) = Add : r1330_7, r1330_8 # 1330| v1330_10(void) = Call[static_member] : func:r1330_3, 0:r1330_5, 1:r1330_9 -# 1330| m1330_11(unknown) = ^CallSideEffect : ~m1328_8 -# 1330| m1330_12(unknown) = Chi : total:m1328_8, partial:m1330_11 -# 1330| v1330_13(void) = ^BufferReadSideEffect[0] : &:r1330_5, ~m1321_10 -# 1330| m1330_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1330_5 -# 1330| m1330_15(unknown) = Chi : total:m1321_10, partial:m1330_14 +# 1330| mu1330_11(unknown) = ^CallSideEffect : ~m? +# 1330| v1330_12(void) = ^BufferReadSideEffect[0] : &:r1330_5, ~m? +# 1330| mu1330_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1330_5 # 1331| r1331_1(glval) = VariableAddress[a_arg] : -# 1331| r1331_2(A *) = Load[a_arg] : &:r1331_1, m1321_8 +# 1331| r1331_2(A *) = Load[a_arg] : &:r1331_1, m1321_7 # 1331| r1331_3(glval) = CopyValue : r1331_2 # 1331| r1331_4(glval) = FunctionAddress[static_member] : # 1331| r1331_5(glval) = VariableAddress[a] : # 1331| r1331_6(A *) = CopyValue : r1331_5 # 1331| r1331_7(int) = Constant[99] : # 1331| v1331_8(void) = Call[static_member] : func:r1331_4, 0:r1331_6, 1:r1331_7 -# 1331| m1331_9(unknown) = ^CallSideEffect : ~m1330_12 -# 1331| m1331_10(unknown) = Chi : total:m1330_12, partial:m1331_9 -# 1331| v1331_11(void) = ^BufferReadSideEffect[0] : &:r1331_6, ~m1328_11 -# 1331| m1331_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1331_6 -# 1331| m1331_13(A) = Chi : total:m1328_11, partial:m1331_12 +# 1331| mu1331_9(unknown) = ^CallSideEffect : ~m? +# 1331| v1331_10(void) = ^BufferReadSideEffect[0] : &:r1331_6, ~m? +# 1331| mu1331_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1331_6 # 1332| r1332_1(glval) = VariableAddress[a_arg] : -# 1332| r1332_2(A *) = Load[a_arg] : &:r1332_1, m1321_8 +# 1332| r1332_2(A *) = Load[a_arg] : &:r1332_1, m1321_7 # 1332| r1332_3(glval) = FunctionAddress[static_member] : # 1332| r1332_4(glval) = VariableAddress[a_arg] : -# 1332| r1332_5(A *) = Load[a_arg] : &:r1332_4, m1321_8 +# 1332| r1332_5(A *) = Load[a_arg] : &:r1332_4, m1321_7 # 1332| r1332_6(int) = Constant[-1] : # 1332| v1332_7(void) = Call[static_member] : func:r1332_3, 0:r1332_5, 1:r1332_6 -# 1332| m1332_8(unknown) = ^CallSideEffect : ~m1331_10 -# 1332| m1332_9(unknown) = Chi : total:m1331_10, partial:m1332_8 -# 1332| v1332_10(void) = ^BufferReadSideEffect[0] : &:r1332_5, ~m1330_15 -# 1332| m1332_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1332_5 -# 1332| m1332_12(unknown) = Chi : total:m1330_15, partial:m1332_11 +# 1332| mu1332_8(unknown) = ^CallSideEffect : ~m? +# 1332| v1332_9(void) = ^BufferReadSideEffect[0] : &:r1332_5, ~m? +# 1332| mu1332_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1332_5 # 1334| r1334_1(glval) = VariableAddress[a] : # 1334| r1334_2(glval) = FunctionAddress[static_member_without_def] : # 1334| v1334_3(void) = Call[static_member_without_def] : func:r1334_2 -# 1334| m1334_4(unknown) = ^CallSideEffect : ~m1332_9 -# 1334| m1334_5(unknown) = Chi : total:m1332_9, partial:m1334_4 +# 1334| mu1334_4(unknown) = ^CallSideEffect : ~m? # 1335| r1335_1(glval) = FunctionAddress[static_member_without_def] : # 1335| v1335_2(void) = Call[static_member_without_def] : func:r1335_1 -# 1335| m1335_3(unknown) = ^CallSideEffect : ~m1334_5 -# 1335| m1335_4(unknown) = Chi : total:m1334_5, partial:m1335_3 +# 1335| mu1335_3(unknown) = ^CallSideEffect : ~m? # 1337| r1337_1(glval) = FunctionAddress[getAnInstanceOfA] : # 1337| r1337_2(A *) = Call[getAnInstanceOfA] : func:r1337_1 -# 1337| m1337_3(unknown) = ^CallSideEffect : ~m1335_4 -# 1337| m1337_4(unknown) = Chi : total:m1335_4, partial:m1337_3 -# 1337| r1337_5(glval) = FunctionAddress[static_member_without_def] : -# 1337| v1337_6(void) = Call[static_member_without_def] : func:r1337_5 -# 1337| m1337_7(unknown) = ^CallSideEffect : ~m1337_4 -# 1337| m1337_8(unknown) = Chi : total:m1337_4, partial:m1337_7 +# 1337| mu1337_3(unknown) = ^CallSideEffect : ~m? +# 1337| r1337_4(glval) = FunctionAddress[static_member_without_def] : +# 1337| v1337_5(void) = Call[static_member_without_def] : func:r1337_4 +# 1337| mu1337_6(unknown) = ^CallSideEffect : ~m? # 1338| v1338_1(void) = NoOp : # 1338| r1338_2(glval) = VariableAddress[c] : # 1338| r1338_3(glval) = FunctionAddress[~C] : # 1338| v1338_4(void) = Call[~C] : func:r1338_3, this:r1338_2 -# 1338| m1338_5(unknown) = ^CallSideEffect : ~m1337_8 -# 1338| m1338_6(unknown) = Chi : total:m1337_8, partial:m1338_5 -# 1338| v1338_7(void) = ^IndirectReadSideEffect[-1] : &:r1338_2, ~m1338_6 -# 1338| m1338_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1338_2 -# 1338| m1338_9(unknown) = Chi : total:m1338_6, partial:m1338_8 -# 1321| v1321_11(void) = ReturnIndirection[a_arg] : &:r1321_9, m1332_12 -# 1321| v1321_12(void) = ReturnVoid : -# 1321| v1321_13(void) = AliasedUse : ~m1338_6 -# 1321| v1321_14(void) = ExitFunction : +# 1338| mu1338_5(unknown) = ^CallSideEffect : ~m? +# 1338| v1338_6(void) = ^IndirectReadSideEffect[-1] : &:r1338_2, ~m? +# 1338| mu1338_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1338_2 +# 1321| v1321_10(void) = ReturnIndirection[a_arg] : &:r1321_8, ~m? +# 1321| v1321_11(void) = ReturnVoid : +# 1321| v1321_12(void) = AliasedUse : ~m? +# 1321| v1321_13(void) = ExitFunction : # 1340| int missingReturnValue(bool, int) # 1340| Block 0 # 1340| v1340_1(void) = EnterFunction : -# 1340| m1340_2(unknown) = AliasedDefinition : -# 1340| m1340_3(unknown) = InitializeNonLocal : -# 1340| m1340_4(unknown) = Chi : total:m1340_2, partial:m1340_3 -# 1340| r1340_5(glval) = VariableAddress[b] : -# 1340| m1340_6(bool) = InitializeParameter[b] : &:r1340_5 -# 1340| r1340_7(glval) = VariableAddress[x] : -# 1340| m1340_8(int) = InitializeParameter[x] : &:r1340_7 +# 1340| mu1340_2(unknown) = AliasedDefinition : +# 1340| mu1340_3(unknown) = InitializeNonLocal : +# 1340| r1340_4(glval) = VariableAddress[b] : +# 1340| m1340_5(bool) = InitializeParameter[b] : &:r1340_4 +# 1340| r1340_6(glval) = VariableAddress[x] : +# 1340| m1340_7(int) = InitializeParameter[x] : &:r1340_6 # 1341| r1341_1(glval) = VariableAddress[b] : -# 1341| r1341_2(bool) = Load[b] : &:r1341_1, m1340_6 +# 1341| r1341_2(bool) = Load[b] : &:r1341_1, m1340_5 # 1341| v1341_3(void) = ConditionalBranch : r1341_2 #-----| False -> Block 3 #-----| True -> Block 2 # 1340| Block 1 -# 1340| m1340_9(int) = Phi : from 2:m1342_4, from 3:m1344_2 -# 1340| r1340_10(glval) = VariableAddress[#return] : -# 1340| v1340_11(void) = ReturnValue : &:r1340_10, m1340_9 -# 1340| v1340_12(void) = AliasedUse : m1340_3 -# 1340| v1340_13(void) = ExitFunction : +# 1340| m1340_8(int) = Phi : from 2:m1342_4, from 3:m1344_2 +# 1340| r1340_9(glval) = VariableAddress[#return] : +# 1340| v1340_10(void) = ReturnValue : &:r1340_9, m1340_8 +# 1340| v1340_11(void) = AliasedUse : ~m? +# 1340| v1340_12(void) = ExitFunction : # 1342| Block 2 # 1342| r1342_1(glval) = VariableAddress[#return] : # 1342| r1342_2(glval) = VariableAddress[x] : -# 1342| r1342_3(int) = Load[x] : &:r1342_2, m1340_8 +# 1342| r1342_3(int) = Load[x] : &:r1342_2, m1340_7 # 1342| m1342_4(int) = Store[#return] : &:r1342_1, r1342_3 #-----| Goto -> Block 1 @@ -11195,44 +10279,41 @@ ir.cpp: # 1346| void returnVoid(int, int) # 1346| Block 0 # 1346| v1346_1(void) = EnterFunction : -# 1346| m1346_2(unknown) = AliasedDefinition : -# 1346| m1346_3(unknown) = InitializeNonLocal : -# 1346| m1346_4(unknown) = Chi : total:m1346_2, partial:m1346_3 -# 1346| r1346_5(glval) = VariableAddress[x] : -# 1346| m1346_6(int) = InitializeParameter[x] : &:r1346_5 -# 1346| r1346_7(glval) = VariableAddress[y] : -# 1346| m1346_8(int) = InitializeParameter[y] : &:r1346_7 +# 1346| mu1346_2(unknown) = AliasedDefinition : +# 1346| mu1346_3(unknown) = InitializeNonLocal : +# 1346| r1346_4(glval) = VariableAddress[x] : +# 1346| m1346_5(int) = InitializeParameter[x] : &:r1346_4 +# 1346| r1346_6(glval) = VariableAddress[y] : +# 1346| m1346_7(int) = InitializeParameter[y] : &:r1346_6 # 1347| r1347_1(glval) = FunctionAddress[IntegerOps] : # 1347| r1347_2(glval) = VariableAddress[x] : -# 1347| r1347_3(int) = Load[x] : &:r1347_2, m1346_6 +# 1347| r1347_3(int) = Load[x] : &:r1347_2, m1346_5 # 1347| r1347_4(glval) = VariableAddress[y] : -# 1347| r1347_5(int) = Load[y] : &:r1347_4, m1346_8 +# 1347| r1347_5(int) = Load[y] : &:r1347_4, m1346_7 # 1347| v1347_6(void) = Call[IntegerOps] : func:r1347_1, 0:r1347_3, 1:r1347_5 -# 1347| m1347_7(unknown) = ^CallSideEffect : ~m1346_4 -# 1347| m1347_8(unknown) = Chi : total:m1346_4, partial:m1347_7 -# 1347| v1347_9(void) = NoOp : -# 1346| v1346_9(void) = ReturnVoid : -# 1346| v1346_10(void) = AliasedUse : ~m1347_8 -# 1346| v1346_11(void) = ExitFunction : +# 1347| mu1347_7(unknown) = ^CallSideEffect : ~m? +# 1347| v1347_8(void) = NoOp : +# 1346| v1346_8(void) = ReturnVoid : +# 1346| v1346_9(void) = AliasedUse : ~m? +# 1346| v1346_10(void) = ExitFunction : # 1350| void gccBinaryConditional(bool, int, long) # 1350| Block 0 # 1350| v1350_1(void) = EnterFunction : -# 1350| m1350_2(unknown) = AliasedDefinition : -# 1350| m1350_3(unknown) = InitializeNonLocal : -# 1350| m1350_4(unknown) = Chi : total:m1350_2, partial:m1350_3 -# 1350| r1350_5(glval) = VariableAddress[b] : -# 1350| m1350_6(bool) = InitializeParameter[b] : &:r1350_5 -# 1350| r1350_7(glval) = VariableAddress[x] : -# 1350| m1350_8(int) = InitializeParameter[x] : &:r1350_7 -# 1350| r1350_9(glval) = VariableAddress[y] : -# 1350| m1350_10(long) = InitializeParameter[y] : &:r1350_9 +# 1350| mu1350_2(unknown) = AliasedDefinition : +# 1350| mu1350_3(unknown) = InitializeNonLocal : +# 1350| r1350_4(glval) = VariableAddress[b] : +# 1350| m1350_5(bool) = InitializeParameter[b] : &:r1350_4 +# 1350| r1350_6(glval) = VariableAddress[x] : +# 1350| m1350_7(int) = InitializeParameter[x] : &:r1350_6 +# 1350| r1350_8(glval) = VariableAddress[y] : +# 1350| m1350_9(long) = InitializeParameter[y] : &:r1350_8 # 1351| r1351_1(glval) = VariableAddress[z] : # 1351| r1351_2(glval) = VariableAddress[x] : -# 1351| r1351_3(int) = Load[x] : &:r1351_2, m1350_8 +# 1351| r1351_3(int) = Load[x] : &:r1351_2, m1350_7 # 1351| m1351_4(int) = Store[z] : &:r1351_1, r1351_3 # 1352| r1352_1(glval) = VariableAddress[b] : -# 1352| r1352_2(bool) = Load[b] : &:r1352_1, m1350_6 +# 1352| r1352_2(bool) = Load[b] : &:r1352_1, m1350_5 # 1352| v1352_3(void) = ConditionalBranch : r1352_2 #-----| False -> Block 3 #-----| True -> Block 2 @@ -11244,7 +10325,7 @@ ir.cpp: # 1352| r1352_7(glval) = VariableAddress[z] : # 1352| m1352_8(int) = Store[z] : &:r1352_7, r1352_6 # 1353| r1353_1(glval) = VariableAddress[b] : -# 1353| r1353_2(bool) = Load[b] : &:r1353_1, m1350_6 +# 1353| r1353_2(bool) = Load[b] : &:r1353_1, m1350_5 # 1353| v1353_3(void) = ConditionalBranch : r1353_2 #-----| False -> Block 6 #-----| True -> Block 5 @@ -11256,7 +10337,7 @@ ir.cpp: # 1352| Block 3 # 1352| r1352_11(glval) = VariableAddress[x] : -# 1352| r1352_12(int) = Load[x] : &:r1352_11, m1350_8 +# 1352| r1352_12(int) = Load[x] : &:r1352_11, m1350_7 # 1352| r1352_13(glval) = VariableAddress[#temp1352:9] : # 1352| m1352_14(int) = Store[#temp1352:9] : &:r1352_13, r1352_12 #-----| Goto -> Block 1 @@ -11269,7 +10350,7 @@ ir.cpp: # 1353| r1353_8(glval) = VariableAddress[z] : # 1353| m1353_9(int) = Store[z] : &:r1353_8, r1353_7 # 1354| r1354_1(glval) = VariableAddress[x] : -# 1354| r1354_2(int) = Load[x] : &:r1354_1, m1350_8 +# 1354| r1354_2(int) = Load[x] : &:r1354_1, m1350_7 # 1354| r1354_3(int) = Constant[0] : # 1354| r1354_4(bool) = CompareNE : r1354_2, r1354_3 # 1354| v1354_5(void) = ConditionalBranch : r1354_4 @@ -11283,7 +10364,7 @@ ir.cpp: # 1353| Block 6 # 1353| r1353_12(glval) = VariableAddress[y] : -# 1353| r1353_13(long) = Load[y] : &:r1353_12, m1350_10 +# 1353| r1353_13(long) = Load[y] : &:r1353_12, m1350_9 # 1353| r1353_14(glval) = VariableAddress[#temp1353:9] : # 1353| m1353_15(long) = Store[#temp1353:9] : &:r1353_14, r1353_13 #-----| Goto -> Block 4 @@ -11295,7 +10376,7 @@ ir.cpp: # 1354| r1354_9(glval) = VariableAddress[z] : # 1354| m1354_10(int) = Store[z] : &:r1354_9, r1354_8 # 1355| r1355_1(glval) = VariableAddress[x] : -# 1355| r1355_2(int) = Load[x] : &:r1355_1, m1350_8 +# 1355| r1355_2(int) = Load[x] : &:r1355_1, m1350_7 # 1355| r1355_3(int) = Constant[0] : # 1355| r1355_4(bool) = CompareNE : r1355_2, r1355_3 # 1355| v1355_5(void) = ConditionalBranch : r1355_4 @@ -11309,7 +10390,7 @@ ir.cpp: # 1354| Block 9 # 1354| r1354_13(glval) = VariableAddress[x] : -# 1354| r1354_14(int) = Load[x] : &:r1354_13, m1350_8 +# 1354| r1354_14(int) = Load[x] : &:r1354_13, m1350_7 # 1354| r1354_15(glval) = VariableAddress[#temp1354:9] : # 1354| m1354_16(int) = Store[#temp1354:9] : &:r1354_15, r1354_14 #-----| Goto -> Block 7 @@ -11322,7 +10403,7 @@ ir.cpp: # 1355| r1355_10(glval) = VariableAddress[z] : # 1355| m1355_11(int) = Store[z] : &:r1355_10, r1355_9 # 1356| r1356_1(glval) = VariableAddress[y] : -# 1356| r1356_2(long) = Load[y] : &:r1356_1, m1350_10 +# 1356| r1356_2(long) = Load[y] : &:r1356_1, m1350_9 # 1356| r1356_3(long) = Constant[0] : # 1356| r1356_4(bool) = CompareNE : r1356_2, r1356_3 # 1356| v1356_5(void) = ConditionalBranch : r1356_4 @@ -11336,7 +10417,7 @@ ir.cpp: # 1355| Block 12 # 1355| r1355_14(glval) = VariableAddress[y] : -# 1355| r1355_15(long) = Load[y] : &:r1355_14, m1350_10 +# 1355| r1355_15(long) = Load[y] : &:r1355_14, m1350_9 # 1355| r1355_16(glval) = VariableAddress[#temp1355:9] : # 1355| m1355_17(long) = Store[#temp1355:9] : &:r1355_16, r1355_15 #-----| Goto -> Block 10 @@ -11349,7 +10430,7 @@ ir.cpp: # 1356| r1356_10(glval) = VariableAddress[z] : # 1356| m1356_11(int) = Store[z] : &:r1356_10, r1356_9 # 1357| r1357_1(glval) = VariableAddress[y] : -# 1357| r1357_2(long) = Load[y] : &:r1357_1, m1350_10 +# 1357| r1357_2(long) = Load[y] : &:r1357_1, m1350_9 # 1357| r1357_3(long) = Constant[0] : # 1357| r1357_4(bool) = CompareNE : r1357_2, r1357_3 # 1357| v1357_5(void) = ConditionalBranch : r1357_4 @@ -11363,7 +10444,7 @@ ir.cpp: # 1356| Block 15 # 1356| r1356_14(glval) = VariableAddress[x] : -# 1356| r1356_15(int) = Load[x] : &:r1356_14, m1350_8 +# 1356| r1356_15(int) = Load[x] : &:r1356_14, m1350_7 # 1356| r1356_16(long) = Convert : r1356_15 # 1356| r1356_17(glval) = VariableAddress[#temp1356:9] : # 1356| m1356_18(long) = Store[#temp1356:9] : &:r1356_17, r1356_16 @@ -11377,7 +10458,7 @@ ir.cpp: # 1357| r1357_10(glval) = VariableAddress[z] : # 1357| m1357_11(int) = Store[z] : &:r1357_10, r1357_9 # 1359| r1359_1(glval) = VariableAddress[x] : -# 1359| r1359_2(int) = Load[x] : &:r1359_1, m1350_8 +# 1359| r1359_2(int) = Load[x] : &:r1359_1, m1350_7 # 1359| r1359_3(int) = Constant[0] : # 1359| r1359_4(bool) = CompareNE : r1359_2, r1359_3 # 1359| v1359_5(void) = ConditionalBranch : r1359_4 @@ -11391,7 +10472,7 @@ ir.cpp: # 1357| Block 18 # 1357| r1357_14(glval) = VariableAddress[y] : -# 1357| r1357_15(long) = Load[y] : &:r1357_14, m1350_10 +# 1357| r1357_15(long) = Load[y] : &:r1357_14, m1350_9 # 1357| r1357_16(glval) = VariableAddress[#temp1357:9] : # 1357| m1357_17(long) = Store[#temp1357:9] : &:r1357_16, r1357_15 #-----| Goto -> Block 16 @@ -11403,9 +10484,9 @@ ir.cpp: # 1359| r1359_9(glval) = VariableAddress[z] : # 1359| m1359_10(int) = Store[z] : &:r1359_9, r1359_8 # 1360| v1360_1(void) = NoOp : -# 1350| v1350_11(void) = ReturnVoid : -# 1350| v1350_12(void) = AliasedUse : m1350_3 -# 1350| v1350_13(void) = ExitFunction : +# 1350| v1350_10(void) = ReturnVoid : +# 1350| v1350_11(void) = AliasedUse : ~m? +# 1350| v1350_12(void) = ExitFunction : # 1359| Block 20 # 1359| r1359_11(glval) = VariableAddress[#temp1359:9] : @@ -11434,14 +10515,14 @@ ir.cpp: # 1359| Block 24 # 1359| r1359_23(glval) = VariableAddress[b] : -# 1359| r1359_24(bool) = Load[b] : &:r1359_23, m1350_6 +# 1359| r1359_24(bool) = Load[b] : &:r1359_23, m1350_5 # 1359| v1359_25(void) = ConditionalBranch : r1359_24 #-----| False -> Block 25 #-----| True -> Block 23 # 1359| Block 25 # 1359| r1359_26(glval) = VariableAddress[y] : -# 1359| r1359_27(long) = Load[y] : &:r1359_26, m1350_10 +# 1359| r1359_27(long) = Load[y] : &:r1359_26, m1350_9 # 1359| r1359_28(long) = Constant[0] : # 1359| r1359_29(bool) = CompareNE : r1359_27, r1359_28 # 1359| v1359_30(void) = ConditionalBranch : r1359_29 @@ -11450,7 +10531,7 @@ ir.cpp: # 1359| Block 26 # 1359| r1359_31(glval) = VariableAddress[x] : -# 1359| r1359_32(int) = Load[x] : &:r1359_31, m1350_8 +# 1359| r1359_32(int) = Load[x] : &:r1359_31, m1350_7 # 1359| r1359_33(glval) = VariableAddress[#temp1359:9] : # 1359| m1359_34(int) = Store[#temp1359:9] : &:r1359_33, r1359_32 #-----| Goto -> Block 19 @@ -11458,828 +10539,685 @@ ir.cpp: # 1365| int shortCircuitConditional(int, int) # 1365| Block 0 # 1365| v1365_1(void) = EnterFunction : -# 1365| m1365_2(unknown) = AliasedDefinition : -# 1365| m1365_3(unknown) = InitializeNonLocal : -# 1365| m1365_4(unknown) = Chi : total:m1365_2, partial:m1365_3 -# 1365| r1365_5(glval) = VariableAddress[x] : -# 1365| m1365_6(int) = InitializeParameter[x] : &:r1365_5 -# 1365| r1365_7(glval) = VariableAddress[y] : -# 1365| m1365_8(int) = InitializeParameter[y] : &:r1365_7 +# 1365| mu1365_2(unknown) = AliasedDefinition : +# 1365| mu1365_3(unknown) = InitializeNonLocal : +# 1365| r1365_4(glval) = VariableAddress[x] : +# 1365| m1365_5(int) = InitializeParameter[x] : &:r1365_4 +# 1365| r1365_6(glval) = VariableAddress[y] : +# 1365| m1365_7(int) = InitializeParameter[y] : &:r1365_6 # 1366| r1366_1(glval) = VariableAddress[#return] : # 1366| r1366_2(glval) = FunctionAddress[predicateA] : # 1366| r1366_3(bool) = Call[predicateA] : func:r1366_2 -# 1366| m1366_4(unknown) = ^CallSideEffect : ~m1365_4 -# 1366| m1366_5(unknown) = Chi : total:m1365_4, partial:m1366_4 -# 1366| v1366_6(void) = ConditionalBranch : r1366_3 +# 1366| mu1366_4(unknown) = ^CallSideEffect : ~m? +# 1366| v1366_5(void) = ConditionalBranch : r1366_3 #-----| False -> Block 4 #-----| True -> Block 2 # 1366| Block 1 -# 1366| m1366_7(unknown) = Phi : from 3:~m1366_15, from 4:~m1366_21 -# 1366| m1366_8(int) = Phi : from 3:m1366_20, from 4:m1366_25 -# 1366| r1366_9(glval) = VariableAddress[#temp1366:12] : -# 1366| r1366_10(int) = Load[#temp1366:12] : &:r1366_9, m1366_8 -# 1366| m1366_11(int) = Store[#return] : &:r1366_1, r1366_10 -# 1365| r1365_9(glval) = VariableAddress[#return] : -# 1365| v1365_10(void) = ReturnValue : &:r1365_9, m1366_11 -# 1365| v1365_11(void) = AliasedUse : ~m1366_7 -# 1365| v1365_12(void) = ExitFunction : +# 1366| m1366_6(int) = Phi : from 3:m1366_17, from 4:m1366_21 +# 1366| r1366_7(glval) = VariableAddress[#temp1366:12] : +# 1366| r1366_8(int) = Load[#temp1366:12] : &:r1366_7, m1366_6 +# 1366| m1366_9(int) = Store[#return] : &:r1366_1, r1366_8 +# 1365| r1365_8(glval) = VariableAddress[#return] : +# 1365| v1365_9(void) = ReturnValue : &:r1365_8, m1366_9 +# 1365| v1365_10(void) = AliasedUse : ~m? +# 1365| v1365_11(void) = ExitFunction : # 1366| Block 2 -# 1366| r1366_12(glval) = FunctionAddress[predicateB] : -# 1366| r1366_13(bool) = Call[predicateB] : func:r1366_12 -# 1366| m1366_14(unknown) = ^CallSideEffect : ~m1366_5 -# 1366| m1366_15(unknown) = Chi : total:m1366_5, partial:m1366_14 -# 1366| v1366_16(void) = ConditionalBranch : r1366_13 +# 1366| r1366_10(glval) = FunctionAddress[predicateB] : +# 1366| r1366_11(bool) = Call[predicateB] : func:r1366_10 +# 1366| mu1366_12(unknown) = ^CallSideEffect : ~m? +# 1366| v1366_13(void) = ConditionalBranch : r1366_11 #-----| False -> Block 4 #-----| True -> Block 3 # 1366| Block 3 -# 1366| r1366_17(glval) = VariableAddress[x] : -# 1366| r1366_18(int) = Load[x] : &:r1366_17, m1365_6 -# 1366| r1366_19(glval) = VariableAddress[#temp1366:12] : -# 1366| m1366_20(int) = Store[#temp1366:12] : &:r1366_19, r1366_18 +# 1366| r1366_14(glval) = VariableAddress[x] : +# 1366| r1366_15(int) = Load[x] : &:r1366_14, m1365_5 +# 1366| r1366_16(glval) = VariableAddress[#temp1366:12] : +# 1366| m1366_17(int) = Store[#temp1366:12] : &:r1366_16, r1366_15 #-----| Goto -> Block 1 # 1366| Block 4 -# 1366| m1366_21(unknown) = Phi : from 0:~m1366_5, from 2:~m1366_15 -# 1366| r1366_22(glval) = VariableAddress[y] : -# 1366| r1366_23(int) = Load[y] : &:r1366_22, m1365_8 -# 1366| r1366_24(glval) = VariableAddress[#temp1366:12] : -# 1366| m1366_25(int) = Store[#temp1366:12] : &:r1366_24, r1366_23 +# 1366| r1366_18(glval) = VariableAddress[y] : +# 1366| r1366_19(int) = Load[y] : &:r1366_18, m1365_7 +# 1366| r1366_20(glval) = VariableAddress[#temp1366:12] : +# 1366| m1366_21(int) = Store[#temp1366:12] : &:r1366_20, r1366_19 #-----| Goto -> Block 1 # 1371| void f(int*) # 1371| Block 0 # 1371| v1371_1(void) = EnterFunction : -# 1371| m1371_2(unknown) = AliasedDefinition : -# 1371| m1371_3(unknown) = InitializeNonLocal : -# 1371| m1371_4(unknown) = Chi : total:m1371_2, partial:m1371_3 -# 1371| r1371_5(glval) = VariableAddress[p] : -# 1371| m1371_6(int *) = InitializeParameter[p] : &:r1371_5 -# 1371| r1371_7(int *) = Load[p] : &:r1371_5, m1371_6 -# 1371| m1371_8(unknown) = InitializeIndirection[p] : &:r1371_7 -# 1371| m1371_9(unknown) = Chi : total:m1371_4, partial:m1371_8 +# 1371| mu1371_2(unknown) = AliasedDefinition : +# 1371| mu1371_3(unknown) = InitializeNonLocal : +# 1371| r1371_4(glval) = VariableAddress[p] : +# 1371| m1371_5(int *) = InitializeParameter[p] : &:r1371_4 +# 1371| r1371_6(int *) = Load[p] : &:r1371_4, m1371_5 +# 1371| mu1371_7(unknown) = InitializeIndirection[p] : &:r1371_6 # 1373| r1373_1(glval) = FunctionAddress[operator new] : # 1373| r1373_2(unsigned long) = Constant[4] : # 1373| r1373_3(glval) = VariableAddress[p] : -# 1373| r1373_4(int *) = Load[p] : &:r1373_3, m1371_6 +# 1373| r1373_4(int *) = Load[p] : &:r1373_3, m1371_5 # 1373| r1373_5(void *) = Convert : r1373_4 # 1373| r1373_6(void *) = Call[operator new] : func:r1373_1, 0:r1373_2, 1:r1373_5 -# 1373| m1373_7(unknown) = ^CallSideEffect : ~m1371_9 -# 1373| m1373_8(unknown) = Chi : total:m1371_9, partial:m1373_7 -# 1373| m1373_9(unknown) = ^InitializeDynamicAllocation : &:r1373_6 -# 1373| r1373_10(int *) = Convert : r1373_6 +# 1373| mu1373_7(unknown) = ^CallSideEffect : ~m? +# 1373| mu1373_8(unknown) = ^InitializeDynamicAllocation : &:r1373_6 +# 1373| r1373_9(int *) = Convert : r1373_6 # 1374| v1374_1(void) = NoOp : -# 1371| v1371_10(void) = ReturnIndirection[p] : &:r1371_7, ~m1373_8 -# 1371| v1371_11(void) = ReturnVoid : -# 1371| v1371_12(void) = AliasedUse : ~m1373_8 -# 1371| v1371_13(void) = ExitFunction : +# 1371| v1371_8(void) = ReturnIndirection[p] : &:r1371_6, ~m? +# 1371| v1371_9(void) = ReturnVoid : +# 1371| v1371_10(void) = AliasedUse : ~m? +# 1371| v1371_11(void) = ExitFunction : # 1377| Point defaultConstruct() # 1377| Block 0 # 1377| v1377_1(void) = EnterFunction : -# 1377| m1377_2(unknown) = AliasedDefinition : -# 1377| m1377_3(unknown) = InitializeNonLocal : -# 1377| m1377_4(unknown) = Chi : total:m1377_2, partial:m1377_3 +# 1377| mu1377_2(unknown) = AliasedDefinition : +# 1377| mu1377_3(unknown) = InitializeNonLocal : # 1378| r1378_1(glval) = VariableAddress[#return] : # 1378| r1378_2(Point) = Constant[0] : # 1378| m1378_3(Point) = Store[#return] : &:r1378_1, r1378_2 -# 1377| r1377_5(glval) = VariableAddress[#return] : -# 1377| v1377_6(void) = ReturnValue : &:r1377_5, m1378_3 -# 1377| v1377_7(void) = AliasedUse : m1377_3 -# 1377| v1377_8(void) = ExitFunction : +# 1377| r1377_4(glval) = VariableAddress[#return] : +# 1377| v1377_5(void) = ReturnValue : &:r1377_4, m1378_3 +# 1377| v1377_6(void) = AliasedUse : ~m? +# 1377| v1377_7(void) = ExitFunction : # 1377| String defaultConstruct() # 1377| Block 0 # 1377| v1377_1(void) = EnterFunction : -# 1377| m1377_2(unknown) = AliasedDefinition : -# 1377| m1377_3(unknown) = InitializeNonLocal : -# 1377| m1377_4(unknown) = Chi : total:m1377_2, partial:m1377_3 +# 1377| mu1377_2(unknown) = AliasedDefinition : +# 1377| mu1377_3(unknown) = InitializeNonLocal : # 1378| r1378_1(glval) = VariableAddress[#return] : -# 1378| m1378_2(String) = Uninitialized[#return] : &:r1378_1 -# 1378| m1378_3(unknown) = Chi : total:m1377_4, partial:m1378_2 -# 1378| r1378_4(glval) = FunctionAddress[String] : -# 1378| v1378_5(void) = Call[String] : func:r1378_4, this:r1378_1 -# 1378| m1378_6(unknown) = ^CallSideEffect : ~m1378_3 -# 1378| m1378_7(unknown) = Chi : total:m1378_3, partial:m1378_6 -# 1378| m1378_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1378_1 -# 1378| m1378_9(unknown) = Chi : total:m1378_7, partial:m1378_8 -# 1377| r1377_5(glval) = VariableAddress[#return] : -# 1377| v1377_6(void) = ReturnValue : &:r1377_5, ~m1378_9 -# 1377| v1377_7(void) = AliasedUse : ~m1378_7 -# 1377| v1377_8(void) = ExitFunction : +# 1378| mu1378_2(String) = Uninitialized[#return] : &:r1378_1 +# 1378| r1378_3(glval) = FunctionAddress[String] : +# 1378| v1378_4(void) = Call[String] : func:r1378_3, this:r1378_1 +# 1378| mu1378_5(unknown) = ^CallSideEffect : ~m? +# 1378| mu1378_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1378_1 +# 1377| r1377_4(glval) = VariableAddress[#return] : +# 1377| v1377_5(void) = ReturnValue : &:r1377_4, ~m? +# 1377| v1377_6(void) = AliasedUse : ~m? +# 1377| v1377_7(void) = ExitFunction : # 1377| copy_constructor defaultConstruct() # 1377| Block 0 # 1377| v1377_1(void) = EnterFunction : -# 1377| m1377_2(unknown) = AliasedDefinition : -# 1377| m1377_3(unknown) = InitializeNonLocal : -# 1377| m1377_4(unknown) = Chi : total:m1377_2, partial:m1377_3 +# 1377| mu1377_2(unknown) = AliasedDefinition : +# 1377| mu1377_3(unknown) = InitializeNonLocal : # 1378| r1378_1(glval) = VariableAddress[#return] : -# 1378| m1378_2(copy_constructor) = Uninitialized[#return] : &:r1378_1 -# 1378| m1378_3(unknown) = Chi : total:m1377_4, partial:m1378_2 -# 1378| r1378_4(glval) = FunctionAddress[copy_constructor] : -# 1378| v1378_5(void) = Call[copy_constructor] : func:r1378_4, this:r1378_1 -# 1378| m1378_6(unknown) = ^CallSideEffect : ~m1378_3 -# 1378| m1378_7(unknown) = Chi : total:m1378_3, partial:m1378_6 -# 1378| m1378_8(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1378_1 -# 1378| m1378_9(unknown) = Chi : total:m1378_7, partial:m1378_8 -# 1377| r1377_5(glval) = VariableAddress[#return] : -# 1377| v1377_6(void) = ReturnValue : &:r1377_5, ~m1378_9 -# 1377| v1377_7(void) = AliasedUse : ~m1378_7 -# 1377| v1377_8(void) = ExitFunction : +# 1378| mu1378_2(copy_constructor) = Uninitialized[#return] : &:r1378_1 +# 1378| r1378_3(glval) = FunctionAddress[copy_constructor] : +# 1378| v1378_4(void) = Call[copy_constructor] : func:r1378_3, this:r1378_1 +# 1378| mu1378_5(unknown) = ^CallSideEffect : ~m? +# 1378| mu1378_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1378_1 +# 1377| r1377_4(glval) = VariableAddress[#return] : +# 1377| v1377_5(void) = ReturnValue : &:r1377_4, ~m? +# 1377| v1377_6(void) = AliasedUse : ~m? +# 1377| v1377_7(void) = ExitFunction : # 1377| destructor_only defaultConstruct() # 1377| Block 0 # 1377| v1377_1(void) = EnterFunction : -# 1377| m1377_2(unknown) = AliasedDefinition : -# 1377| m1377_3(unknown) = InitializeNonLocal : -# 1377| m1377_4(unknown) = Chi : total:m1377_2, partial:m1377_3 +# 1377| mu1377_2(unknown) = AliasedDefinition : +# 1377| mu1377_3(unknown) = InitializeNonLocal : # 1378| r1378_1(glval) = VariableAddress[#return] : # 1378| r1378_2(destructor_only) = Constant[0] : # 1378| m1378_3(destructor_only) = Store[#return] : &:r1378_1, r1378_2 -# 1377| r1377_5(glval) = VariableAddress[#return] : -# 1377| v1377_6(void) = ReturnValue : &:r1377_5, m1378_3 -# 1377| v1377_7(void) = AliasedUse : m1377_3 -# 1377| v1377_8(void) = ExitFunction : +# 1377| r1377_4(glval) = VariableAddress[#return] : +# 1377| v1377_5(void) = ReturnValue : &:r1377_4, m1378_3 +# 1377| v1377_6(void) = AliasedUse : ~m? +# 1377| v1377_7(void) = ExitFunction : # 1416| void temporary_string() # 1416| Block 0 # 1416| v1416_1(void) = EnterFunction : -# 1416| m1416_2(unknown) = AliasedDefinition : -# 1416| m1416_3(unknown) = InitializeNonLocal : -# 1416| m1416_4(unknown) = Chi : total:m1416_2, partial:m1416_3 +# 1416| mu1416_2(unknown) = AliasedDefinition : +# 1416| mu1416_3(unknown) = InitializeNonLocal : # 1417| r1417_1(glval) = VariableAddress[s] : # 1417| r1417_2(glval) = FunctionAddress[returnValue] : # 1417| r1417_3(String) = Call[returnValue] : func:r1417_2 -# 1417| m1417_4(unknown) = ^CallSideEffect : ~m1416_4 -# 1417| m1417_5(unknown) = Chi : total:m1416_4, partial:m1417_4 -# 1417| m1417_6(String) = Store[s] : &:r1417_1, r1417_3 -# 1417| m1417_7(unknown) = Chi : total:m1417_5, partial:m1417_6 +# 1417| mu1417_4(unknown) = ^CallSideEffect : ~m? +# 1417| mu1417_5(String) = Store[s] : &:r1417_1, r1417_3 # 1418| r1418_1(glval) = VariableAddress[rs] : # 1418| r1418_2(glval) = VariableAddress[#temp1418:24] : # 1418| r1418_3(glval) = FunctionAddress[returnValue] : # 1418| r1418_4(String) = Call[returnValue] : func:r1418_3 -# 1418| m1418_5(unknown) = ^CallSideEffect : ~m1417_7 -# 1418| m1418_6(unknown) = Chi : total:m1417_7, partial:m1418_5 -# 1418| m1418_7(String) = Store[#temp1418:24] : &:r1418_2, r1418_4 -# 1418| m1418_8(unknown) = Chi : total:m1418_6, partial:m1418_7 -# 1418| r1418_9(glval) = Convert : r1418_2 -# 1418| r1418_10(String &) = CopyValue : r1418_9 -# 1418| m1418_11(String &) = Store[rs] : &:r1418_1, r1418_10 +# 1418| mu1418_5(unknown) = ^CallSideEffect : ~m? +# 1418| mu1418_6(String) = Store[#temp1418:24] : &:r1418_2, r1418_4 +# 1418| r1418_7(glval) = Convert : r1418_2 +# 1418| r1418_8(String &) = CopyValue : r1418_7 +# 1418| m1418_9(String &) = Store[rs] : &:r1418_1, r1418_8 # 1420| r1420_1(glval) = FunctionAddress[acceptRef] : # 1420| r1420_2(glval) = VariableAddress[s] : # 1420| r1420_3(glval) = Convert : r1420_2 # 1420| r1420_4(String &) = CopyValue : r1420_3 # 1420| v1420_5(void) = Call[acceptRef] : func:r1420_1, 0:r1420_4 -# 1420| m1420_6(unknown) = ^CallSideEffect : ~m1418_8 -# 1420| m1420_7(unknown) = Chi : total:m1418_8, partial:m1420_6 -# 1420| v1420_8(void) = ^BufferReadSideEffect[0] : &:r1420_4, ~m1420_7 +# 1420| mu1420_6(unknown) = ^CallSideEffect : ~m? +# 1420| v1420_7(void) = ^BufferReadSideEffect[0] : &:r1420_4, ~m? # 1421| r1421_1(glval) = FunctionAddress[acceptRef] : # 1421| r1421_2(glval) = VariableAddress[#temp1421:23] : -# 1421| m1421_3(String) = Uninitialized[#temp1421:23] : &:r1421_2 -# 1421| m1421_4(unknown) = Chi : total:m1420_7, partial:m1421_3 -# 1421| r1421_5(glval) = FunctionAddress[String] : -# 1421| r1421_6(glval) = StringConstant["foo"] : -# 1421| r1421_7(char *) = Convert : r1421_6 -# 1421| v1421_8(void) = Call[String] : func:r1421_5, this:r1421_2, 0:r1421_7 -# 1421| m1421_9(unknown) = ^CallSideEffect : ~m1421_4 -# 1421| m1421_10(unknown) = Chi : total:m1421_4, partial:m1421_9 -# 1421| v1421_11(void) = ^BufferReadSideEffect[0] : &:r1421_7, ~m1416_3 -# 1421| m1421_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_2 -# 1421| m1421_13(unknown) = Chi : total:m1421_10, partial:m1421_12 -# 1421| r1421_14(String &) = CopyValue : r1421_2 -# 1421| v1421_15(void) = Call[acceptRef] : func:r1421_1, 0:r1421_14 -# 1421| m1421_16(unknown) = ^CallSideEffect : ~m1421_13 -# 1421| m1421_17(unknown) = Chi : total:m1421_13, partial:m1421_16 -# 1421| v1421_18(void) = ^BufferReadSideEffect[0] : &:r1421_14, ~m1421_17 -# 1421| r1421_19(glval) = CopyValue : r1421_2 -# 1421| r1421_20(glval) = FunctionAddress[~String] : -# 1421| v1421_21(void) = Call[~String] : func:r1421_20, this:r1421_19 -# 1421| m1421_22(unknown) = ^CallSideEffect : ~m1421_17 -# 1421| m1421_23(unknown) = Chi : total:m1421_17, partial:m1421_22 -# 1421| v1421_24(void) = ^IndirectReadSideEffect[-1] : &:r1421_19, ~m1421_23 -# 1421| m1421_25(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_19 -# 1421| m1421_26(unknown) = Chi : total:m1421_23, partial:m1421_25 +# 1421| mu1421_3(String) = Uninitialized[#temp1421:23] : &:r1421_2 +# 1421| r1421_4(glval) = FunctionAddress[String] : +# 1421| r1421_5(glval) = StringConstant["foo"] : +# 1421| r1421_6(char *) = Convert : r1421_5 +# 1421| v1421_7(void) = Call[String] : func:r1421_4, this:r1421_2, 0:r1421_6 +# 1421| mu1421_8(unknown) = ^CallSideEffect : ~m? +# 1421| v1421_9(void) = ^BufferReadSideEffect[0] : &:r1421_6, ~m? +# 1421| mu1421_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_2 +# 1421| r1421_11(String &) = CopyValue : r1421_2 +# 1421| v1421_12(void) = Call[acceptRef] : func:r1421_1, 0:r1421_11 +# 1421| mu1421_13(unknown) = ^CallSideEffect : ~m? +# 1421| v1421_14(void) = ^BufferReadSideEffect[0] : &:r1421_11, ~m? +# 1421| r1421_15(glval) = CopyValue : r1421_2 +# 1421| r1421_16(glval) = FunctionAddress[~String] : +# 1421| v1421_17(void) = Call[~String] : func:r1421_16, this:r1421_15 +# 1421| mu1421_18(unknown) = ^CallSideEffect : ~m? +# 1421| v1421_19(void) = ^IndirectReadSideEffect[-1] : &:r1421_15, ~m? +# 1421| mu1421_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_15 # 1422| r1422_1(glval) = FunctionAddress[acceptValue] : # 1422| r1422_2(glval) = VariableAddress[#temp1422:17] : -# 1422| m1422_3(String) = Uninitialized[#temp1422:17] : &:r1422_2 -# 1422| m1422_4(unknown) = Chi : total:m1421_26, partial:m1422_3 -# 1422| r1422_5(glval) = FunctionAddress[String] : -# 1422| r1422_6(glval) = VariableAddress[s] : -# 1422| r1422_7(glval) = Convert : r1422_6 -# 1422| r1422_8(String &) = CopyValue : r1422_7 -# 1422| v1422_9(void) = Call[String] : func:r1422_5, this:r1422_2, 0:r1422_8 -# 1422| m1422_10(unknown) = ^CallSideEffect : ~m1422_4 -# 1422| m1422_11(unknown) = Chi : total:m1422_4, partial:m1422_10 -# 1422| v1422_12(void) = ^BufferReadSideEffect[0] : &:r1422_8, ~m1422_11 -# 1422| m1422_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1422_2 -# 1422| m1422_14(unknown) = Chi : total:m1422_11, partial:m1422_13 -# 1422| r1422_15(String) = Load[#temp1422:17] : &:r1422_2, ~m1422_14 -# 1422| v1422_16(void) = Call[acceptValue] : func:r1422_1, 0:r1422_15 -# 1422| m1422_17(unknown) = ^CallSideEffect : ~m1422_14 -# 1422| m1422_18(unknown) = Chi : total:m1422_14, partial:m1422_17 -# 1422| r1422_19(glval) = CopyValue : r1422_2 -# 1422| r1422_20(glval) = FunctionAddress[~String] : -# 1422| v1422_21(void) = Call[~String] : func:r1422_20, this:r1422_19 -# 1422| m1422_22(unknown) = ^CallSideEffect : ~m1422_18 -# 1422| m1422_23(unknown) = Chi : total:m1422_18, partial:m1422_22 -# 1422| v1422_24(void) = ^IndirectReadSideEffect[-1] : &:r1422_19, ~m1422_23 -# 1422| m1422_25(String) = ^IndirectMayWriteSideEffect[-1] : &:r1422_19 -# 1422| m1422_26(unknown) = Chi : total:m1422_23, partial:m1422_25 +# 1422| mu1422_3(String) = Uninitialized[#temp1422:17] : &:r1422_2 +# 1422| r1422_4(glval) = FunctionAddress[String] : +# 1422| r1422_5(glval) = VariableAddress[s] : +# 1422| r1422_6(glval) = Convert : r1422_5 +# 1422| r1422_7(String &) = CopyValue : r1422_6 +# 1422| v1422_8(void) = Call[String] : func:r1422_4, this:r1422_2, 0:r1422_7 +# 1422| mu1422_9(unknown) = ^CallSideEffect : ~m? +# 1422| v1422_10(void) = ^BufferReadSideEffect[0] : &:r1422_7, ~m? +# 1422| mu1422_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1422_2 +# 1422| r1422_12(String) = Load[#temp1422:17] : &:r1422_2, ~m? +# 1422| v1422_13(void) = Call[acceptValue] : func:r1422_1, 0:r1422_12 +# 1422| mu1422_14(unknown) = ^CallSideEffect : ~m? +# 1422| r1422_15(glval) = CopyValue : r1422_2 +# 1422| r1422_16(glval) = FunctionAddress[~String] : +# 1422| v1422_17(void) = Call[~String] : func:r1422_16, this:r1422_15 +# 1422| mu1422_18(unknown) = ^CallSideEffect : ~m? +# 1422| v1422_19(void) = ^IndirectReadSideEffect[-1] : &:r1422_15, ~m? +# 1422| mu1422_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r1422_15 # 1423| r1423_1(glval) = FunctionAddress[acceptValue] : # 1423| r1423_2(glval) = VariableAddress[#temp1423:25] : -# 1423| m1423_3(String) = Uninitialized[#temp1423:25] : &:r1423_2 -# 1423| m1423_4(unknown) = Chi : total:m1422_26, partial:m1423_3 -# 1423| r1423_5(glval) = FunctionAddress[String] : -# 1423| r1423_6(glval) = StringConstant["foo"] : -# 1423| r1423_7(char *) = Convert : r1423_6 -# 1423| v1423_8(void) = Call[String] : func:r1423_5, this:r1423_2, 0:r1423_7 -# 1423| m1423_9(unknown) = ^CallSideEffect : ~m1423_4 -# 1423| m1423_10(unknown) = Chi : total:m1423_4, partial:m1423_9 -# 1423| v1423_11(void) = ^BufferReadSideEffect[0] : &:r1423_7, ~m1416_3 -# 1423| m1423_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1423_2 -# 1423| m1423_13(unknown) = Chi : total:m1423_10, partial:m1423_12 -# 1423| r1423_14(String) = Load[#temp1423:25] : &:r1423_2, ~m1423_13 -# 1423| v1423_15(void) = Call[acceptValue] : func:r1423_1, 0:r1423_14 -# 1423| m1423_16(unknown) = ^CallSideEffect : ~m1423_13 -# 1423| m1423_17(unknown) = Chi : total:m1423_13, partial:m1423_16 -# 1423| r1423_18(glval) = CopyValue : r1423_2 -# 1423| r1423_19(glval) = FunctionAddress[~String] : -# 1423| v1423_20(void) = Call[~String] : func:r1423_19, this:r1423_18 -# 1423| m1423_21(unknown) = ^CallSideEffect : ~m1423_17 -# 1423| m1423_22(unknown) = Chi : total:m1423_17, partial:m1423_21 -# 1423| v1423_23(void) = ^IndirectReadSideEffect[-1] : &:r1423_18, ~m1423_22 -# 1423| m1423_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r1423_18 -# 1423| m1423_25(unknown) = Chi : total:m1423_22, partial:m1423_24 +# 1423| mu1423_3(String) = Uninitialized[#temp1423:25] : &:r1423_2 +# 1423| r1423_4(glval) = FunctionAddress[String] : +# 1423| r1423_5(glval) = StringConstant["foo"] : +# 1423| r1423_6(char *) = Convert : r1423_5 +# 1423| v1423_7(void) = Call[String] : func:r1423_4, this:r1423_2, 0:r1423_6 +# 1423| mu1423_8(unknown) = ^CallSideEffect : ~m? +# 1423| v1423_9(void) = ^BufferReadSideEffect[0] : &:r1423_6, ~m? +# 1423| mu1423_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1423_2 +# 1423| r1423_11(String) = Load[#temp1423:25] : &:r1423_2, ~m? +# 1423| v1423_12(void) = Call[acceptValue] : func:r1423_1, 0:r1423_11 +# 1423| mu1423_13(unknown) = ^CallSideEffect : ~m? +# 1423| r1423_14(glval) = CopyValue : r1423_2 +# 1423| r1423_15(glval) = FunctionAddress[~String] : +# 1423| v1423_16(void) = Call[~String] : func:r1423_15, this:r1423_14 +# 1423| mu1423_17(unknown) = ^CallSideEffect : ~m? +# 1423| v1423_18(void) = ^IndirectReadSideEffect[-1] : &:r1423_14, ~m? +# 1423| mu1423_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1423_14 # 1424| r1424_1(glval) = VariableAddress[#temp1424:5] : -# 1424| m1424_2(String) = Uninitialized[#temp1424:5] : &:r1424_1 -# 1424| m1424_3(unknown) = Chi : total:m1423_25, partial:m1424_2 -# 1424| r1424_4(glval) = FunctionAddress[String] : -# 1424| v1424_5(void) = Call[String] : func:r1424_4, this:r1424_1 -# 1424| m1424_6(unknown) = ^CallSideEffect : ~m1424_3 -# 1424| m1424_7(unknown) = Chi : total:m1424_3, partial:m1424_6 -# 1424| m1424_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1424_1 -# 1424| m1424_9(unknown) = Chi : total:m1424_7, partial:m1424_8 -# 1424| r1424_10(glval) = Convert : r1424_1 -# 1424| r1424_11(glval) = FunctionAddress[c_str] : -# 1424| r1424_12(char *) = Call[c_str] : func:r1424_11, this:r1424_10 -# 1424| m1424_13(unknown) = ^CallSideEffect : ~m1424_9 -# 1424| m1424_14(unknown) = Chi : total:m1424_9, partial:m1424_13 -# 1424| v1424_15(void) = ^IndirectReadSideEffect[-1] : &:r1424_10, ~m1424_14 -# 1424| r1424_16(glval) = CopyValue : r1424_1 -# 1424| r1424_17(glval) = FunctionAddress[~String] : -# 1424| v1424_18(void) = Call[~String] : func:r1424_17, this:r1424_16 -# 1424| m1424_19(unknown) = ^CallSideEffect : ~m1424_14 -# 1424| m1424_20(unknown) = Chi : total:m1424_14, partial:m1424_19 -# 1424| v1424_21(void) = ^IndirectReadSideEffect[-1] : &:r1424_16, ~m1424_20 -# 1424| m1424_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r1424_16 -# 1424| m1424_23(unknown) = Chi : total:m1424_20, partial:m1424_22 +# 1424| mu1424_2(String) = Uninitialized[#temp1424:5] : &:r1424_1 +# 1424| r1424_3(glval) = FunctionAddress[String] : +# 1424| v1424_4(void) = Call[String] : func:r1424_3, this:r1424_1 +# 1424| mu1424_5(unknown) = ^CallSideEffect : ~m? +# 1424| mu1424_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1424_1 +# 1424| r1424_7(glval) = Convert : r1424_1 +# 1424| r1424_8(glval) = FunctionAddress[c_str] : +# 1424| r1424_9(char *) = Call[c_str] : func:r1424_8, this:r1424_7 +# 1424| mu1424_10(unknown) = ^CallSideEffect : ~m? +# 1424| v1424_11(void) = ^IndirectReadSideEffect[-1] : &:r1424_7, ~m? +# 1424| r1424_12(glval) = CopyValue : r1424_1 +# 1424| r1424_13(glval) = FunctionAddress[~String] : +# 1424| v1424_14(void) = Call[~String] : func:r1424_13, this:r1424_12 +# 1424| mu1424_15(unknown) = ^CallSideEffect : ~m? +# 1424| v1424_16(void) = ^IndirectReadSideEffect[-1] : &:r1424_12, ~m? +# 1424| mu1424_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r1424_12 # 1425| r1425_1(glval) = VariableAddress[#temp1425:5] : # 1425| r1425_2(glval) = FunctionAddress[returnValue] : # 1425| r1425_3(String) = Call[returnValue] : func:r1425_2 -# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1424_23 -# 1425| m1425_5(unknown) = Chi : total:m1424_23, partial:m1425_4 -# 1425| m1425_6(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 -# 1425| m1425_7(unknown) = Chi : total:m1425_5, partial:m1425_6 -# 1425| r1425_8(glval) = Convert : r1425_1 -# 1425| r1425_9(glval) = FunctionAddress[c_str] : -# 1425| r1425_10(char *) = Call[c_str] : func:r1425_9, this:r1425_8 -# 1425| m1425_11(unknown) = ^CallSideEffect : ~m1425_7 -# 1425| m1425_12(unknown) = Chi : total:m1425_7, partial:m1425_11 -# 1425| v1425_13(void) = ^IndirectReadSideEffect[-1] : &:r1425_8, ~m1425_12 -# 1425| r1425_14(glval) = CopyValue : r1425_1 -# 1425| r1425_15(glval) = FunctionAddress[~String] : -# 1425| v1425_16(void) = Call[~String] : func:r1425_15, this:r1425_14 -# 1425| m1425_17(unknown) = ^CallSideEffect : ~m1425_12 -# 1425| m1425_18(unknown) = Chi : total:m1425_12, partial:m1425_17 -# 1425| v1425_19(void) = ^IndirectReadSideEffect[-1] : &:r1425_14, ~m1425_18 -# 1425| m1425_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r1425_14 -# 1425| m1425_21(unknown) = Chi : total:m1425_18, partial:m1425_20 +# 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? +# 1425| mu1425_5(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 +# 1425| r1425_6(glval) = Convert : r1425_1 +# 1425| r1425_7(glval) = FunctionAddress[c_str] : +# 1425| r1425_8(char *) = Call[c_str] : func:r1425_7, this:r1425_6 +# 1425| mu1425_9(unknown) = ^CallSideEffect : ~m? +# 1425| v1425_10(void) = ^IndirectReadSideEffect[-1] : &:r1425_6, ~m? +# 1425| r1425_11(glval) = CopyValue : r1425_1 +# 1425| r1425_12(glval) = FunctionAddress[~String] : +# 1425| v1425_13(void) = Call[~String] : func:r1425_12, this:r1425_11 +# 1425| mu1425_14(unknown) = ^CallSideEffect : ~m? +# 1425| v1425_15(void) = ^IndirectReadSideEffect[-1] : &:r1425_11, ~m? +# 1425| mu1425_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r1425_11 # 1427| r1427_1(glval) = VariableAddress[#temp1427:5] : # 1427| r1427_2(glval) = FunctionAddress[defaultConstruct] : # 1427| r1427_3(String) = Call[defaultConstruct] : func:r1427_2 -# 1427| m1427_4(unknown) = ^CallSideEffect : ~m1425_21 -# 1427| m1427_5(unknown) = Chi : total:m1425_21, partial:m1427_4 -# 1427| m1427_6(String) = Store[#temp1427:5] : &:r1427_1, r1427_3 -# 1427| m1427_7(unknown) = Chi : total:m1427_5, partial:m1427_6 -# 1427| r1427_8(glval) = CopyValue : r1427_1 -# 1427| r1427_9(glval) = FunctionAddress[~String] : -# 1427| v1427_10(void) = Call[~String] : func:r1427_9, this:r1427_8 -# 1427| m1427_11(unknown) = ^CallSideEffect : ~m1427_7 -# 1427| m1427_12(unknown) = Chi : total:m1427_7, partial:m1427_11 -# 1427| v1427_13(void) = ^IndirectReadSideEffect[-1] : &:r1427_8, ~m1427_12 -# 1427| m1427_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r1427_8 -# 1427| m1427_15(unknown) = Chi : total:m1427_12, partial:m1427_14 +# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? +# 1427| mu1427_5(String) = Store[#temp1427:5] : &:r1427_1, r1427_3 +# 1427| r1427_6(glval) = CopyValue : r1427_1 +# 1427| r1427_7(glval) = FunctionAddress[~String] : +# 1427| v1427_8(void) = Call[~String] : func:r1427_7, this:r1427_6 +# 1427| mu1427_9(unknown) = ^CallSideEffect : ~m? +# 1427| v1427_10(void) = ^IndirectReadSideEffect[-1] : &:r1427_6, ~m? +# 1427| mu1427_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1427_6 # 1428| v1428_1(void) = NoOp : # 1428| r1428_2(glval) = CopyValue : r1418_2 # 1428| r1428_3(glval) = FunctionAddress[~String] : # 1428| v1428_4(void) = Call[~String] : func:r1428_3, this:r1428_2 -# 1428| m1428_5(unknown) = ^CallSideEffect : ~m1427_15 -# 1428| m1428_6(unknown) = Chi : total:m1427_15, partial:m1428_5 -# 1428| v1428_7(void) = ^IndirectReadSideEffect[-1] : &:r1428_2, ~m1428_6 -# 1428| m1428_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1428_2 -# 1428| m1428_9(unknown) = Chi : total:m1428_6, partial:m1428_8 -# 1428| r1428_10(glval) = VariableAddress[s] : -# 1428| r1428_11(glval) = FunctionAddress[~String] : -# 1428| v1428_12(void) = Call[~String] : func:r1428_11, this:r1428_10 -# 1428| m1428_13(unknown) = ^CallSideEffect : ~m1428_9 -# 1428| m1428_14(unknown) = Chi : total:m1428_9, partial:m1428_13 -# 1428| v1428_15(void) = ^IndirectReadSideEffect[-1] : &:r1428_10, ~m1428_14 -# 1428| m1428_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r1428_10 -# 1428| m1428_17(unknown) = Chi : total:m1428_14, partial:m1428_16 -# 1416| v1416_5(void) = ReturnVoid : -# 1416| v1416_6(void) = AliasedUse : ~m1428_14 -# 1416| v1416_7(void) = ExitFunction : +# 1428| mu1428_5(unknown) = ^CallSideEffect : ~m? +# 1428| v1428_6(void) = ^IndirectReadSideEffect[-1] : &:r1428_2, ~m? +# 1428| mu1428_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1428_2 +# 1428| r1428_8(glval) = VariableAddress[s] : +# 1428| r1428_9(glval) = FunctionAddress[~String] : +# 1428| v1428_10(void) = Call[~String] : func:r1428_9, this:r1428_8 +# 1428| mu1428_11(unknown) = ^CallSideEffect : ~m? +# 1428| v1428_12(void) = ^IndirectReadSideEffect[-1] : &:r1428_8, ~m? +# 1428| mu1428_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1428_8 +# 1416| v1416_4(void) = ReturnVoid : +# 1416| v1416_5(void) = AliasedUse : ~m? +# 1416| v1416_6(void) = ExitFunction : # 1430| void temporary_destructor_only() # 1430| Block 0 # 1430| v1430_1(void) = EnterFunction : -# 1430| m1430_2(unknown) = AliasedDefinition : -# 1430| m1430_3(unknown) = InitializeNonLocal : -# 1430| m1430_4(unknown) = Chi : total:m1430_2, partial:m1430_3 +# 1430| mu1430_2(unknown) = AliasedDefinition : +# 1430| mu1430_3(unknown) = InitializeNonLocal : # 1431| r1431_1(glval) = VariableAddress[d] : # 1431| r1431_2(glval) = FunctionAddress[returnValue] : # 1431| r1431_3(destructor_only) = Call[returnValue] : func:r1431_2 -# 1431| m1431_4(unknown) = ^CallSideEffect : ~m1430_4 -# 1431| m1431_5(unknown) = Chi : total:m1430_4, partial:m1431_4 -# 1431| m1431_6(destructor_only) = Store[d] : &:r1431_1, r1431_3 -# 1431| m1431_7(unknown) = Chi : total:m1431_5, partial:m1431_6 +# 1431| mu1431_4(unknown) = ^CallSideEffect : ~m? +# 1431| mu1431_5(destructor_only) = Store[d] : &:r1431_1, r1431_3 # 1432| r1432_1(glval) = VariableAddress[rd] : # 1432| r1432_2(glval) = VariableAddress[#temp1432:33] : # 1432| r1432_3(glval) = FunctionAddress[returnValue] : # 1432| r1432_4(destructor_only) = Call[returnValue] : func:r1432_3 -# 1432| m1432_5(unknown) = ^CallSideEffect : ~m1431_7 -# 1432| m1432_6(unknown) = Chi : total:m1431_7, partial:m1432_5 -# 1432| m1432_7(destructor_only) = Store[#temp1432:33] : &:r1432_2, r1432_4 -# 1432| m1432_8(unknown) = Chi : total:m1432_6, partial:m1432_7 -# 1432| r1432_9(glval) = Convert : r1432_2 -# 1432| r1432_10(destructor_only &) = CopyValue : r1432_9 -# 1432| m1432_11(destructor_only &) = Store[rd] : &:r1432_1, r1432_10 +# 1432| mu1432_5(unknown) = ^CallSideEffect : ~m? +# 1432| mu1432_6(destructor_only) = Store[#temp1432:33] : &:r1432_2, r1432_4 +# 1432| r1432_7(glval) = Convert : r1432_2 +# 1432| r1432_8(destructor_only &) = CopyValue : r1432_7 +# 1432| m1432_9(destructor_only &) = Store[rd] : &:r1432_1, r1432_8 # 1433| r1433_1(glval) = VariableAddress[d2] : -# 1433| m1433_2(destructor_only) = Uninitialized[d2] : &:r1433_1 -# 1433| m1433_3(unknown) = Chi : total:m1432_8, partial:m1433_2 +# 1433| mu1433_2(destructor_only) = Uninitialized[d2] : &:r1433_1 # 1434| r1434_1(glval) = FunctionAddress[acceptRef] : # 1434| r1434_2(glval) = VariableAddress[d] : # 1434| r1434_3(glval) = Convert : r1434_2 # 1434| r1434_4(destructor_only &) = CopyValue : r1434_3 # 1434| v1434_5(void) = Call[acceptRef] : func:r1434_1, 0:r1434_4 -# 1434| m1434_6(unknown) = ^CallSideEffect : ~m1433_3 -# 1434| m1434_7(unknown) = Chi : total:m1433_3, partial:m1434_6 -# 1434| v1434_8(void) = ^BufferReadSideEffect[0] : &:r1434_4, ~m1434_7 +# 1434| mu1434_6(unknown) = ^CallSideEffect : ~m? +# 1434| v1434_7(void) = ^BufferReadSideEffect[0] : &:r1434_4, ~m? # 1435| r1435_1(glval) = FunctionAddress[acceptValue] : # 1435| r1435_2(glval) = VariableAddress[#temp1435:17] : # 1435| r1435_3(glval) = VariableAddress[d] : -# 1435| r1435_4(destructor_only) = Load[d] : &:r1435_3, ~m1434_7 -# 1435| m1435_5(destructor_only) = Store[#temp1435:17] : &:r1435_2, r1435_4 -# 1435| m1435_6(unknown) = Chi : total:m1434_7, partial:m1435_5 -# 1435| r1435_7(destructor_only) = Load[#temp1435:17] : &:r1435_2, m1435_5 -# 1435| v1435_8(void) = Call[acceptValue] : func:r1435_1, 0:r1435_7 -# 1435| m1435_9(unknown) = ^CallSideEffect : ~m1435_6 -# 1435| m1435_10(unknown) = Chi : total:m1435_6, partial:m1435_9 -# 1435| r1435_11(glval) = CopyValue : r1435_2 -# 1435| r1435_12(glval) = FunctionAddress[~destructor_only] : -# 1435| v1435_13(void) = Call[~destructor_only] : func:r1435_12, this:r1435_11 -# 1435| m1435_14(unknown) = ^CallSideEffect : ~m1435_10 -# 1435| m1435_15(unknown) = Chi : total:m1435_10, partial:m1435_14 -# 1435| v1435_16(void) = ^IndirectReadSideEffect[-1] : &:r1435_11, ~m1435_15 -# 1435| m1435_17(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1435_11 -# 1435| m1435_18(unknown) = Chi : total:m1435_15, partial:m1435_17 +# 1435| r1435_4(destructor_only) = Load[d] : &:r1435_3, ~m? +# 1435| mu1435_5(destructor_only) = Store[#temp1435:17] : &:r1435_2, r1435_4 +# 1435| r1435_6(destructor_only) = Load[#temp1435:17] : &:r1435_2, ~m? +# 1435| v1435_7(void) = Call[acceptValue] : func:r1435_1, 0:r1435_6 +# 1435| mu1435_8(unknown) = ^CallSideEffect : ~m? +# 1435| r1435_9(glval) = CopyValue : r1435_2 +# 1435| r1435_10(glval) = FunctionAddress[~destructor_only] : +# 1435| v1435_11(void) = Call[~destructor_only] : func:r1435_10, this:r1435_9 +# 1435| mu1435_12(unknown) = ^CallSideEffect : ~m? +# 1435| v1435_13(void) = ^IndirectReadSideEffect[-1] : &:r1435_9, ~m? +# 1435| mu1435_14(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1435_9 # 1436| r1436_1(glval) = VariableAddress[#temp1436:5] : # 1436| r1436_2(destructor_only) = Constant[0] : -# 1436| m1436_3(destructor_only) = Store[#temp1436:5] : &:r1436_1, r1436_2 -# 1436| m1436_4(unknown) = Chi : total:m1435_18, partial:m1436_3 -# 1436| r1436_5(glval) = FunctionAddress[method] : -# 1436| v1436_6(void) = Call[method] : func:r1436_5, this:r1436_1 -# 1436| m1436_7(unknown) = ^CallSideEffect : ~m1436_4 -# 1436| m1436_8(unknown) = Chi : total:m1436_4, partial:m1436_7 -# 1436| v1436_9(void) = ^IndirectReadSideEffect[-1] : &:r1436_1, ~m1436_8 -# 1436| m1436_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1436_1 -# 1436| m1436_11(unknown) = Chi : total:m1436_8, partial:m1436_10 -# 1436| r1436_12(glval) = CopyValue : r1436_1 -# 1436| r1436_13(glval) = FunctionAddress[~destructor_only] : -# 1436| v1436_14(void) = Call[~destructor_only] : func:r1436_13, this:r1436_12 -# 1436| m1436_15(unknown) = ^CallSideEffect : ~m1436_11 -# 1436| m1436_16(unknown) = Chi : total:m1436_11, partial:m1436_15 -# 1436| v1436_17(void) = ^IndirectReadSideEffect[-1] : &:r1436_12, ~m1436_16 -# 1436| m1436_18(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1436_12 -# 1436| m1436_19(unknown) = Chi : total:m1436_16, partial:m1436_18 +# 1436| mu1436_3(destructor_only) = Store[#temp1436:5] : &:r1436_1, r1436_2 +# 1436| r1436_4(glval) = FunctionAddress[method] : +# 1436| v1436_5(void) = Call[method] : func:r1436_4, this:r1436_1 +# 1436| mu1436_6(unknown) = ^CallSideEffect : ~m? +# 1436| v1436_7(void) = ^IndirectReadSideEffect[-1] : &:r1436_1, ~m? +# 1436| mu1436_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1436_1 +# 1436| r1436_9(glval) = CopyValue : r1436_1 +# 1436| r1436_10(glval) = FunctionAddress[~destructor_only] : +# 1436| v1436_11(void) = Call[~destructor_only] : func:r1436_10, this:r1436_9 +# 1436| mu1436_12(unknown) = ^CallSideEffect : ~m? +# 1436| v1436_13(void) = ^IndirectReadSideEffect[-1] : &:r1436_9, ~m? +# 1436| mu1436_14(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1436_9 # 1437| r1437_1(glval) = VariableAddress[#temp1437:5] : # 1437| r1437_2(glval) = FunctionAddress[returnValue] : # 1437| r1437_3(destructor_only) = Call[returnValue] : func:r1437_2 -# 1437| m1437_4(unknown) = ^CallSideEffect : ~m1436_19 -# 1437| m1437_5(unknown) = Chi : total:m1436_19, partial:m1437_4 -# 1437| m1437_6(destructor_only) = Store[#temp1437:5] : &:r1437_1, r1437_3 -# 1437| m1437_7(unknown) = Chi : total:m1437_5, partial:m1437_6 -# 1437| r1437_8(glval) = FunctionAddress[method] : -# 1437| v1437_9(void) = Call[method] : func:r1437_8, this:r1437_1 -# 1437| m1437_10(unknown) = ^CallSideEffect : ~m1437_7 -# 1437| m1437_11(unknown) = Chi : total:m1437_7, partial:m1437_10 -# 1437| v1437_12(void) = ^IndirectReadSideEffect[-1] : &:r1437_1, ~m1437_11 -# 1437| m1437_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1437_1 -# 1437| m1437_14(unknown) = Chi : total:m1437_11, partial:m1437_13 -# 1437| r1437_15(glval) = CopyValue : r1437_1 -# 1437| r1437_16(glval) = FunctionAddress[~destructor_only] : -# 1437| v1437_17(void) = Call[~destructor_only] : func:r1437_16, this:r1437_15 -# 1437| m1437_18(unknown) = ^CallSideEffect : ~m1437_14 -# 1437| m1437_19(unknown) = Chi : total:m1437_14, partial:m1437_18 -# 1437| v1437_20(void) = ^IndirectReadSideEffect[-1] : &:r1437_15, ~m1437_19 -# 1437| m1437_21(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1437_15 -# 1437| m1437_22(unknown) = Chi : total:m1437_19, partial:m1437_21 +# 1437| mu1437_4(unknown) = ^CallSideEffect : ~m? +# 1437| mu1437_5(destructor_only) = Store[#temp1437:5] : &:r1437_1, r1437_3 +# 1437| r1437_6(glval) = FunctionAddress[method] : +# 1437| v1437_7(void) = Call[method] : func:r1437_6, this:r1437_1 +# 1437| mu1437_8(unknown) = ^CallSideEffect : ~m? +# 1437| v1437_9(void) = ^IndirectReadSideEffect[-1] : &:r1437_1, ~m? +# 1437| mu1437_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1437_1 +# 1437| r1437_11(glval) = CopyValue : r1437_1 +# 1437| r1437_12(glval) = FunctionAddress[~destructor_only] : +# 1437| v1437_13(void) = Call[~destructor_only] : func:r1437_12, this:r1437_11 +# 1437| mu1437_14(unknown) = ^CallSideEffect : ~m? +# 1437| v1437_15(void) = ^IndirectReadSideEffect[-1] : &:r1437_11, ~m? +# 1437| mu1437_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1437_11 # 1439| r1439_1(glval) = VariableAddress[#temp1439:5] : # 1439| r1439_2(glval) = FunctionAddress[defaultConstruct] : # 1439| r1439_3(destructor_only) = Call[defaultConstruct] : func:r1439_2 -# 1439| m1439_4(unknown) = ^CallSideEffect : ~m1437_22 -# 1439| m1439_5(unknown) = Chi : total:m1437_22, partial:m1439_4 -# 1439| m1439_6(destructor_only) = Store[#temp1439:5] : &:r1439_1, r1439_3 -# 1439| m1439_7(unknown) = Chi : total:m1439_5, partial:m1439_6 -# 1439| r1439_8(glval) = CopyValue : r1439_1 -# 1439| r1439_9(glval) = FunctionAddress[~destructor_only] : -# 1439| v1439_10(void) = Call[~destructor_only] : func:r1439_9, this:r1439_8 -# 1439| m1439_11(unknown) = ^CallSideEffect : ~m1439_7 -# 1439| m1439_12(unknown) = Chi : total:m1439_7, partial:m1439_11 -# 1439| v1439_13(void) = ^IndirectReadSideEffect[-1] : &:r1439_8, ~m1439_12 -# 1439| m1439_14(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1439_8 -# 1439| m1439_15(unknown) = Chi : total:m1439_12, partial:m1439_14 +# 1439| mu1439_4(unknown) = ^CallSideEffect : ~m? +# 1439| mu1439_5(destructor_only) = Store[#temp1439:5] : &:r1439_1, r1439_3 +# 1439| r1439_6(glval) = CopyValue : r1439_1 +# 1439| r1439_7(glval) = FunctionAddress[~destructor_only] : +# 1439| v1439_8(void) = Call[~destructor_only] : func:r1439_7, this:r1439_6 +# 1439| mu1439_9(unknown) = ^CallSideEffect : ~m? +# 1439| v1439_10(void) = ^IndirectReadSideEffect[-1] : &:r1439_6, ~m? +# 1439| mu1439_11(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1439_6 # 1440| v1440_1(void) = NoOp : # 1440| r1440_2(glval) = VariableAddress[d2] : # 1440| r1440_3(glval) = FunctionAddress[~destructor_only] : # 1440| v1440_4(void) = Call[~destructor_only] : func:r1440_3, this:r1440_2 -# 1440| m1440_5(unknown) = ^CallSideEffect : ~m1439_15 -# 1440| m1440_6(unknown) = Chi : total:m1439_15, partial:m1440_5 -# 1440| v1440_7(void) = ^IndirectReadSideEffect[-1] : &:r1440_2, ~m1440_6 -# 1440| m1440_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1440_2 -# 1440| m1440_9(unknown) = Chi : total:m1440_6, partial:m1440_8 -# 1440| r1440_10(glval) = CopyValue : r1432_2 -# 1440| r1440_11(glval) = FunctionAddress[~destructor_only] : -# 1440| v1440_12(void) = Call[~destructor_only] : func:r1440_11, this:r1440_10 -# 1440| m1440_13(unknown) = ^CallSideEffect : ~m1440_9 -# 1440| m1440_14(unknown) = Chi : total:m1440_9, partial:m1440_13 -# 1440| v1440_15(void) = ^IndirectReadSideEffect[-1] : &:r1440_10, ~m1440_14 -# 1440| m1440_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1440_10 -# 1440| m1440_17(unknown) = Chi : total:m1440_14, partial:m1440_16 -# 1440| r1440_18(glval) = VariableAddress[d] : -# 1440| r1440_19(glval) = FunctionAddress[~destructor_only] : -# 1440| v1440_20(void) = Call[~destructor_only] : func:r1440_19, this:r1440_18 -# 1440| m1440_21(unknown) = ^CallSideEffect : ~m1440_17 -# 1440| m1440_22(unknown) = Chi : total:m1440_17, partial:m1440_21 -# 1440| v1440_23(void) = ^IndirectReadSideEffect[-1] : &:r1440_18, ~m1440_22 -# 1440| m1440_24(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1440_18 -# 1440| m1440_25(unknown) = Chi : total:m1440_22, partial:m1440_24 -# 1430| v1430_5(void) = ReturnVoid : -# 1430| v1430_6(void) = AliasedUse : ~m1440_22 -# 1430| v1430_7(void) = ExitFunction : +# 1440| mu1440_5(unknown) = ^CallSideEffect : ~m? +# 1440| v1440_6(void) = ^IndirectReadSideEffect[-1] : &:r1440_2, ~m? +# 1440| mu1440_7(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1440_2 +# 1440| r1440_8(glval) = CopyValue : r1432_2 +# 1440| r1440_9(glval) = FunctionAddress[~destructor_only] : +# 1440| v1440_10(void) = Call[~destructor_only] : func:r1440_9, this:r1440_8 +# 1440| mu1440_11(unknown) = ^CallSideEffect : ~m? +# 1440| v1440_12(void) = ^IndirectReadSideEffect[-1] : &:r1440_8, ~m? +# 1440| mu1440_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1440_8 +# 1440| r1440_14(glval) = VariableAddress[d] : +# 1440| r1440_15(glval) = FunctionAddress[~destructor_only] : +# 1440| v1440_16(void) = Call[~destructor_only] : func:r1440_15, this:r1440_14 +# 1440| mu1440_17(unknown) = ^CallSideEffect : ~m? +# 1440| v1440_18(void) = ^IndirectReadSideEffect[-1] : &:r1440_14, ~m? +# 1440| mu1440_19(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1440_14 +# 1430| v1430_4(void) = ReturnVoid : +# 1430| v1430_5(void) = AliasedUse : ~m? +# 1430| v1430_6(void) = ExitFunction : # 1442| void temporary_copy_constructor() # 1442| Block 0 # 1442| v1442_1(void) = EnterFunction : -# 1442| m1442_2(unknown) = AliasedDefinition : -# 1442| m1442_3(unknown) = InitializeNonLocal : -# 1442| m1442_4(unknown) = Chi : total:m1442_2, partial:m1442_3 +# 1442| mu1442_2(unknown) = AliasedDefinition : +# 1442| mu1442_3(unknown) = InitializeNonLocal : # 1443| r1443_1(glval) = VariableAddress[d] : # 1443| r1443_2(glval) = FunctionAddress[returnValue] : # 1443| r1443_3(copy_constructor) = Call[returnValue] : func:r1443_2 -# 1443| m1443_4(unknown) = ^CallSideEffect : ~m1442_4 -# 1443| m1443_5(unknown) = Chi : total:m1442_4, partial:m1443_4 -# 1443| m1443_6(copy_constructor) = Store[d] : &:r1443_1, r1443_3 -# 1443| m1443_7(unknown) = Chi : total:m1443_5, partial:m1443_6 +# 1443| mu1443_4(unknown) = ^CallSideEffect : ~m? +# 1443| mu1443_5(copy_constructor) = Store[d] : &:r1443_1, r1443_3 # 1444| r1444_1(glval) = VariableAddress[rd] : # 1444| r1444_2(glval) = VariableAddress[#temp1444:34] : # 1444| r1444_3(glval) = FunctionAddress[returnValue] : # 1444| r1444_4(copy_constructor) = Call[returnValue] : func:r1444_3 -# 1444| m1444_5(unknown) = ^CallSideEffect : ~m1443_7 -# 1444| m1444_6(unknown) = Chi : total:m1443_7, partial:m1444_5 -# 1444| m1444_7(copy_constructor) = Store[#temp1444:34] : &:r1444_2, r1444_4 -# 1444| r1444_8(glval) = Convert : r1444_2 -# 1444| r1444_9(copy_constructor &) = CopyValue : r1444_8 -# 1444| m1444_10(copy_constructor &) = Store[rd] : &:r1444_1, r1444_9 +# 1444| mu1444_5(unknown) = ^CallSideEffect : ~m? +# 1444| mu1444_6(copy_constructor) = Store[#temp1444:34] : &:r1444_2, r1444_4 +# 1444| r1444_7(glval) = Convert : r1444_2 +# 1444| r1444_8(copy_constructor &) = CopyValue : r1444_7 +# 1444| m1444_9(copy_constructor &) = Store[rd] : &:r1444_1, r1444_8 # 1445| r1445_1(glval) = VariableAddress[d2] : -# 1445| m1445_2(copy_constructor) = Uninitialized[d2] : &:r1445_1 -# 1445| m1445_3(unknown) = Chi : total:m1444_6, partial:m1445_2 -# 1445| r1445_4(glval) = FunctionAddress[copy_constructor] : -# 1445| v1445_5(void) = Call[copy_constructor] : func:r1445_4, this:r1445_1 -# 1445| m1445_6(unknown) = ^CallSideEffect : ~m1445_3 -# 1445| m1445_7(unknown) = Chi : total:m1445_3, partial:m1445_6 -# 1445| m1445_8(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1445_1 -# 1445| m1445_9(unknown) = Chi : total:m1445_7, partial:m1445_8 +# 1445| mu1445_2(copy_constructor) = Uninitialized[d2] : &:r1445_1 +# 1445| r1445_3(glval) = FunctionAddress[copy_constructor] : +# 1445| v1445_4(void) = Call[copy_constructor] : func:r1445_3, this:r1445_1 +# 1445| mu1445_5(unknown) = ^CallSideEffect : ~m? +# 1445| mu1445_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1445_1 # 1446| r1446_1(glval) = FunctionAddress[acceptRef] : # 1446| r1446_2(glval) = VariableAddress[d] : # 1446| r1446_3(glval) = Convert : r1446_2 # 1446| r1446_4(copy_constructor &) = CopyValue : r1446_3 # 1446| v1446_5(void) = Call[acceptRef] : func:r1446_1, 0:r1446_4 -# 1446| m1446_6(unknown) = ^CallSideEffect : ~m1445_9 -# 1446| m1446_7(unknown) = Chi : total:m1445_9, partial:m1446_6 -# 1446| v1446_8(void) = ^BufferReadSideEffect[0] : &:r1446_4, ~m1446_7 +# 1446| mu1446_6(unknown) = ^CallSideEffect : ~m? +# 1446| v1446_7(void) = ^BufferReadSideEffect[0] : &:r1446_4, ~m? # 1447| r1447_1(glval) = FunctionAddress[acceptValue] : # 1447| r1447_2(glval) = VariableAddress[#temp1447:17] : -# 1447| m1447_3(copy_constructor) = Uninitialized[#temp1447:17] : &:r1447_2 -# 1447| m1447_4(unknown) = Chi : total:m1446_7, partial:m1447_3 -# 1447| r1447_5(glval) = FunctionAddress[copy_constructor] : -# 1447| r1447_6(glval) = VariableAddress[d] : -# 1447| r1447_7(glval) = Convert : r1447_6 -# 1447| r1447_8(copy_constructor &) = CopyValue : r1447_7 -# 1447| v1447_9(void) = Call[copy_constructor] : func:r1447_5, this:r1447_2, 0:r1447_8 -# 1447| m1447_10(unknown) = ^CallSideEffect : ~m1447_4 -# 1447| m1447_11(unknown) = Chi : total:m1447_4, partial:m1447_10 -# 1447| v1447_12(void) = ^BufferReadSideEffect[0] : &:r1447_8, ~m1447_11 -# 1447| m1447_13(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1447_2 -# 1447| m1447_14(unknown) = Chi : total:m1447_11, partial:m1447_13 -# 1447| r1447_15(copy_constructor) = Load[#temp1447:17] : &:r1447_2, ~m1447_14 -# 1447| v1447_16(void) = Call[acceptValue] : func:r1447_1, 0:r1447_15 -# 1447| m1447_17(unknown) = ^CallSideEffect : ~m1447_14 -# 1447| m1447_18(unknown) = Chi : total:m1447_14, partial:m1447_17 +# 1447| mu1447_3(copy_constructor) = Uninitialized[#temp1447:17] : &:r1447_2 +# 1447| r1447_4(glval) = FunctionAddress[copy_constructor] : +# 1447| r1447_5(glval) = VariableAddress[d] : +# 1447| r1447_6(glval) = Convert : r1447_5 +# 1447| r1447_7(copy_constructor &) = CopyValue : r1447_6 +# 1447| v1447_8(void) = Call[copy_constructor] : func:r1447_4, this:r1447_2, 0:r1447_7 +# 1447| mu1447_9(unknown) = ^CallSideEffect : ~m? +# 1447| v1447_10(void) = ^BufferReadSideEffect[0] : &:r1447_7, ~m? +# 1447| mu1447_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1447_2 +# 1447| r1447_12(copy_constructor) = Load[#temp1447:17] : &:r1447_2, ~m? +# 1447| v1447_13(void) = Call[acceptValue] : func:r1447_1, 0:r1447_12 +# 1447| mu1447_14(unknown) = ^CallSideEffect : ~m? # 1448| r1448_1(glval) = VariableAddress[#temp1448:5] : -# 1448| m1448_2(copy_constructor) = Uninitialized[#temp1448:5] : &:r1448_1 -# 1448| m1448_3(unknown) = Chi : total:m1447_18, partial:m1448_2 -# 1448| r1448_4(glval) = FunctionAddress[copy_constructor] : -# 1448| v1448_5(void) = Call[copy_constructor] : func:r1448_4, this:r1448_1 -# 1448| m1448_6(unknown) = ^CallSideEffect : ~m1448_3 -# 1448| m1448_7(unknown) = Chi : total:m1448_3, partial:m1448_6 -# 1448| m1448_8(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1448_1 -# 1448| m1448_9(unknown) = Chi : total:m1448_7, partial:m1448_8 -# 1448| r1448_10(glval) = FunctionAddress[method] : -# 1448| v1448_11(void) = Call[method] : func:r1448_10, this:r1448_1 -# 1448| m1448_12(unknown) = ^CallSideEffect : ~m1448_9 -# 1448| m1448_13(unknown) = Chi : total:m1448_9, partial:m1448_12 -# 1448| v1448_14(void) = ^IndirectReadSideEffect[-1] : &:r1448_1, ~m1448_13 -# 1448| m1448_15(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1448_1 -# 1448| m1448_16(unknown) = Chi : total:m1448_13, partial:m1448_15 +# 1448| mu1448_2(copy_constructor) = Uninitialized[#temp1448:5] : &:r1448_1 +# 1448| r1448_3(glval) = FunctionAddress[copy_constructor] : +# 1448| v1448_4(void) = Call[copy_constructor] : func:r1448_3, this:r1448_1 +# 1448| mu1448_5(unknown) = ^CallSideEffect : ~m? +# 1448| mu1448_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1448_1 +# 1448| r1448_7(glval) = FunctionAddress[method] : +# 1448| v1448_8(void) = Call[method] : func:r1448_7, this:r1448_1 +# 1448| mu1448_9(unknown) = ^CallSideEffect : ~m? +# 1448| v1448_10(void) = ^IndirectReadSideEffect[-1] : &:r1448_1, ~m? +# 1448| mu1448_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1448_1 # 1449| r1449_1(glval) = VariableAddress[#temp1449:5] : # 1449| r1449_2(glval) = FunctionAddress[returnValue] : # 1449| r1449_3(copy_constructor) = Call[returnValue] : func:r1449_2 -# 1449| m1449_4(unknown) = ^CallSideEffect : ~m1448_16 -# 1449| m1449_5(unknown) = Chi : total:m1448_16, partial:m1449_4 -# 1449| m1449_6(copy_constructor) = Store[#temp1449:5] : &:r1449_1, r1449_3 -# 1449| m1449_7(unknown) = Chi : total:m1449_5, partial:m1449_6 -# 1449| r1449_8(glval) = FunctionAddress[method] : -# 1449| v1449_9(void) = Call[method] : func:r1449_8, this:r1449_1 -# 1449| m1449_10(unknown) = ^CallSideEffect : ~m1449_7 -# 1449| m1449_11(unknown) = Chi : total:m1449_7, partial:m1449_10 -# 1449| v1449_12(void) = ^IndirectReadSideEffect[-1] : &:r1449_1, ~m1449_11 -# 1449| m1449_13(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1449_1 -# 1449| m1449_14(unknown) = Chi : total:m1449_11, partial:m1449_13 +# 1449| mu1449_4(unknown) = ^CallSideEffect : ~m? +# 1449| mu1449_5(copy_constructor) = Store[#temp1449:5] : &:r1449_1, r1449_3 +# 1449| r1449_6(glval) = FunctionAddress[method] : +# 1449| v1449_7(void) = Call[method] : func:r1449_6, this:r1449_1 +# 1449| mu1449_8(unknown) = ^CallSideEffect : ~m? +# 1449| v1449_9(void) = ^IndirectReadSideEffect[-1] : &:r1449_1, ~m? +# 1449| mu1449_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1449_1 # 1450| r1450_1(glval) = VariableAddress[#temp1450:5] : # 1450| r1450_2(glval) = FunctionAddress[defaultConstruct] : # 1450| r1450_3(copy_constructor) = Call[defaultConstruct] : func:r1450_2 -# 1450| m1450_4(unknown) = ^CallSideEffect : ~m1449_14 -# 1450| m1450_5(unknown) = Chi : total:m1449_14, partial:m1450_4 -# 1450| m1450_6(copy_constructor) = Store[#temp1450:5] : &:r1450_1, r1450_3 +# 1450| mu1450_4(unknown) = ^CallSideEffect : ~m? +# 1450| m1450_5(copy_constructor) = Store[#temp1450:5] : &:r1450_1, r1450_3 # 1452| r1452_1(glval) = VariableAddress[y] : # 1452| r1452_2(glval) = VariableAddress[#temp1452:13] : # 1452| r1452_3(glval) = FunctionAddress[returnValue] : # 1452| r1452_4(copy_constructor) = Call[returnValue] : func:r1452_3 -# 1452| m1452_5(unknown) = ^CallSideEffect : ~m1450_5 -# 1452| m1452_6(unknown) = Chi : total:m1450_5, partial:m1452_5 -# 1452| m1452_7(copy_constructor) = Store[#temp1452:13] : &:r1452_2, r1452_4 -# 1452| r1452_8(glval) = FieldAddress[y] : r1452_2 -# 1452| r1452_9(int) = Load[?] : &:r1452_8, ~m1452_7 -# 1452| m1452_10(int) = Store[y] : &:r1452_1, r1452_9 +# 1452| mu1452_5(unknown) = ^CallSideEffect : ~m? +# 1452| mu1452_6(copy_constructor) = Store[#temp1452:13] : &:r1452_2, r1452_4 +# 1452| r1452_7(glval) = FieldAddress[y] : r1452_2 +# 1452| r1452_8(int) = Load[?] : &:r1452_7, ~m? +# 1452| m1452_9(int) = Store[y] : &:r1452_1, r1452_8 # 1453| v1453_1(void) = NoOp : -# 1442| v1442_5(void) = ReturnVoid : -# 1442| v1442_6(void) = AliasedUse : ~m1452_6 -# 1442| v1442_7(void) = ExitFunction : +# 1442| v1442_4(void) = ReturnVoid : +# 1442| v1442_5(void) = AliasedUse : ~m? +# 1442| v1442_6(void) = ExitFunction : # 1455| void temporary_point() # 1455| Block 0 # 1455| v1455_1(void) = EnterFunction : -# 1455| m1455_2(unknown) = AliasedDefinition : -# 1455| m1455_3(unknown) = InitializeNonLocal : -# 1455| m1455_4(unknown) = Chi : total:m1455_2, partial:m1455_3 +# 1455| mu1455_2(unknown) = AliasedDefinition : +# 1455| mu1455_3(unknown) = InitializeNonLocal : # 1456| r1456_1(glval) = VariableAddress[p] : # 1456| r1456_2(glval) = FunctionAddress[returnValue] : # 1456| r1456_3(Point) = Call[returnValue] : func:r1456_2 -# 1456| m1456_4(unknown) = ^CallSideEffect : ~m1455_4 -# 1456| m1456_5(unknown) = Chi : total:m1455_4, partial:m1456_4 -# 1456| m1456_6(Point) = Store[p] : &:r1456_1, r1456_3 -# 1456| m1456_7(unknown) = Chi : total:m1456_5, partial:m1456_6 +# 1456| mu1456_4(unknown) = ^CallSideEffect : ~m? +# 1456| mu1456_5(Point) = Store[p] : &:r1456_1, r1456_3 # 1457| r1457_1(glval) = VariableAddress[rp] : # 1457| r1457_2(glval) = VariableAddress[#temp1457:23] : # 1457| r1457_3(glval) = FunctionAddress[returnValue] : # 1457| r1457_4(Point) = Call[returnValue] : func:r1457_3 -# 1457| m1457_5(unknown) = ^CallSideEffect : ~m1456_7 -# 1457| m1457_6(unknown) = Chi : total:m1456_7, partial:m1457_5 -# 1457| m1457_7(Point) = Store[#temp1457:23] : &:r1457_2, r1457_4 -# 1457| r1457_8(glval) = Convert : r1457_2 -# 1457| r1457_9(Point &) = CopyValue : r1457_8 -# 1457| m1457_10(Point &) = Store[rp] : &:r1457_1, r1457_9 +# 1457| mu1457_5(unknown) = ^CallSideEffect : ~m? +# 1457| mu1457_6(Point) = Store[#temp1457:23] : &:r1457_2, r1457_4 +# 1457| r1457_7(glval) = Convert : r1457_2 +# 1457| r1457_8(Point &) = CopyValue : r1457_7 +# 1457| m1457_9(Point &) = Store[rp] : &:r1457_1, r1457_8 # 1459| r1459_1(glval) = FunctionAddress[acceptRef] : # 1459| r1459_2(glval) = VariableAddress[p] : # 1459| r1459_3(glval) = Convert : r1459_2 # 1459| r1459_4(Point &) = CopyValue : r1459_3 # 1459| v1459_5(void) = Call[acceptRef] : func:r1459_1, 0:r1459_4 -# 1459| m1459_6(unknown) = ^CallSideEffect : ~m1457_6 -# 1459| m1459_7(unknown) = Chi : total:m1457_6, partial:m1459_6 -# 1459| v1459_8(void) = ^BufferReadSideEffect[0] : &:r1459_4, ~m1459_7 +# 1459| mu1459_6(unknown) = ^CallSideEffect : ~m? +# 1459| v1459_7(void) = ^BufferReadSideEffect[0] : &:r1459_4, ~m? # 1460| r1460_1(glval) = FunctionAddress[acceptValue] : # 1460| r1460_2(glval) = VariableAddress[p] : -# 1460| r1460_3(Point) = Load[p] : &:r1460_2, ~m1459_7 +# 1460| r1460_3(Point) = Load[p] : &:r1460_2, ~m? # 1460| v1460_4(void) = Call[acceptValue] : func:r1460_1, 0:r1460_3 -# 1460| m1460_5(unknown) = ^CallSideEffect : ~m1459_7 -# 1460| m1460_6(unknown) = Chi : total:m1459_7, partial:m1460_5 +# 1460| mu1460_5(unknown) = ^CallSideEffect : ~m? # 1461| r1461_1(int) = Constant[0] : # 1462| r1462_1(glval) = VariableAddress[y] : # 1462| r1462_2(glval) = FunctionAddress[returnValue] : # 1462| r1462_3(Point) = Call[returnValue] : func:r1462_2 -# 1462| m1462_4(unknown) = ^CallSideEffect : ~m1460_6 -# 1462| m1462_5(unknown) = Chi : total:m1460_6, partial:m1462_4 -# 1462| r1462_6(glval) = VariableAddress[#temp1462:13] : -# 1462| m1462_7(Point) = Store[#temp1462:13] : &:r1462_6, r1462_3 -# 1462| r1462_8(glval) = FieldAddress[y] : r1462_6 -# 1462| r1462_9(int) = Load[?] : &:r1462_8, ~m1462_7 -# 1462| m1462_10(int) = Store[y] : &:r1462_1, r1462_9 +# 1462| mu1462_4(unknown) = ^CallSideEffect : ~m? +# 1462| r1462_5(glval) = VariableAddress[#temp1462:13] : +# 1462| mu1462_6(Point) = Store[#temp1462:13] : &:r1462_5, r1462_3 +# 1462| r1462_7(glval) = FieldAddress[y] : r1462_5 +# 1462| r1462_8(int) = Load[?] : &:r1462_7, ~m? +# 1462| m1462_9(int) = Store[y] : &:r1462_1, r1462_8 # 1464| r1464_1(glval) = FunctionAddress[defaultConstruct] : # 1464| r1464_2(Point) = Call[defaultConstruct] : func:r1464_1 -# 1464| m1464_3(unknown) = ^CallSideEffect : ~m1462_5 -# 1464| m1464_4(unknown) = Chi : total:m1462_5, partial:m1464_3 +# 1464| mu1464_3(unknown) = ^CallSideEffect : ~m? # 1465| v1465_1(void) = NoOp : -# 1455| v1455_5(void) = ReturnVoid : -# 1455| v1455_6(void) = AliasedUse : ~m1464_4 -# 1455| v1455_7(void) = ExitFunction : +# 1455| v1455_4(void) = ReturnVoid : +# 1455| v1455_5(void) = AliasedUse : ~m? +# 1455| v1455_6(void) = ExitFunction : # 1472| void temporary_unusual_fields() # 1472| Block 0 # 1472| v1472_1(void) = EnterFunction : -# 1472| m1472_2(unknown) = AliasedDefinition : -# 1472| m1472_3(unknown) = InitializeNonLocal : -# 1472| m1472_4(unknown) = Chi : total:m1472_2, partial:m1472_3 +# 1472| mu1472_2(unknown) = AliasedDefinition : +# 1472| mu1472_3(unknown) = InitializeNonLocal : # 1473| r1473_1(glval) = VariableAddress[rx] : # 1473| r1473_2(glval) = FunctionAddress[returnValue] : # 1473| r1473_3(UnusualFields) = Call[returnValue] : func:r1473_2 -# 1473| m1473_4(unknown) = ^CallSideEffect : ~m1472_4 -# 1473| m1473_5(unknown) = Chi : total:m1472_4, partial:m1473_4 -# 1473| r1473_6(glval) = VariableAddress[#temp1473:21] : -# 1473| m1473_7(UnusualFields) = Store[#temp1473:21] : &:r1473_6, r1473_3 -# 1473| r1473_8(glval) = FieldAddress[r] : r1473_6 -# 1473| r1473_9(int &) = Load[?] : &:r1473_8, ~m1473_7 -# 1473| r1473_10(glval) = CopyValue : r1473_9 -# 1473| r1473_11(glval) = Convert : r1473_10 -# 1473| r1473_12(int &) = CopyValue : r1473_11 -# 1473| m1473_13(int &) = Store[rx] : &:r1473_1, r1473_12 +# 1473| mu1473_4(unknown) = ^CallSideEffect : ~m? +# 1473| r1473_5(glval) = VariableAddress[#temp1473:21] : +# 1473| mu1473_6(UnusualFields) = Store[#temp1473:21] : &:r1473_5, r1473_3 +# 1473| r1473_7(glval) = FieldAddress[r] : r1473_5 +# 1473| r1473_8(int &) = Load[?] : &:r1473_7, ~m? +# 1473| r1473_9(glval) = CopyValue : r1473_8 +# 1473| r1473_10(glval) = Convert : r1473_9 +# 1473| r1473_11(int &) = CopyValue : r1473_10 +# 1473| m1473_12(int &) = Store[rx] : &:r1473_1, r1473_11 # 1474| r1474_1(glval) = VariableAddress[x] : # 1474| r1474_2(glval) = FunctionAddress[returnValue] : # 1474| r1474_3(UnusualFields) = Call[returnValue] : func:r1474_2 -# 1474| m1474_4(unknown) = ^CallSideEffect : ~m1473_5 -# 1474| m1474_5(unknown) = Chi : total:m1473_5, partial:m1474_4 -# 1474| r1474_6(glval) = VariableAddress[#temp1474:13] : -# 1474| m1474_7(UnusualFields) = Store[#temp1474:13] : &:r1474_6, r1474_3 -# 1474| r1474_8(glval) = FieldAddress[r] : r1474_6 -# 1474| r1474_9(int &) = Load[?] : &:r1474_8, ~m1474_7 -# 1474| r1474_10(int) = Load[?] : &:r1474_9, ~m1474_5 -# 1474| m1474_11(int) = Store[x] : &:r1474_1, r1474_10 +# 1474| mu1474_4(unknown) = ^CallSideEffect : ~m? +# 1474| r1474_5(glval) = VariableAddress[#temp1474:13] : +# 1474| mu1474_6(UnusualFields) = Store[#temp1474:13] : &:r1474_5, r1474_3 +# 1474| r1474_7(glval) = FieldAddress[r] : r1474_5 +# 1474| r1474_8(int &) = Load[?] : &:r1474_7, ~m? +# 1474| r1474_9(int) = Load[?] : &:r1474_8, ~m? +# 1474| m1474_10(int) = Store[x] : &:r1474_1, r1474_9 # 1476| r1476_1(glval) = VariableAddress[rf] : # 1476| r1476_2(glval) = FunctionAddress[returnValue] : # 1476| r1476_3(UnusualFields) = Call[returnValue] : func:r1476_2 -# 1476| m1476_4(unknown) = ^CallSideEffect : ~m1474_5 -# 1476| m1476_5(unknown) = Chi : total:m1474_5, partial:m1476_4 -# 1476| r1476_6(glval) = VariableAddress[#temp1476:23] : -# 1476| m1476_7(UnusualFields) = Store[#temp1476:23] : &:r1476_6, r1476_3 -# 1476| r1476_8(glval) = FieldAddress[a] : r1476_6 -# 1476| r1476_9(float *) = Convert : r1476_8 -# 1476| r1476_10(int) = Constant[3] : -# 1476| r1476_11(glval) = PointerAdd[4] : r1476_9, r1476_10 -# 1476| r1476_12(glval) = Convert : r1476_11 -# 1476| r1476_13(float &) = CopyValue : r1476_12 -# 1476| m1476_14(float &) = Store[rf] : &:r1476_1, r1476_13 +# 1476| mu1476_4(unknown) = ^CallSideEffect : ~m? +# 1476| r1476_5(glval) = VariableAddress[#temp1476:23] : +# 1476| mu1476_6(UnusualFields) = Store[#temp1476:23] : &:r1476_5, r1476_3 +# 1476| r1476_7(glval) = FieldAddress[a] : r1476_5 +# 1476| r1476_8(float *) = Convert : r1476_7 +# 1476| r1476_9(int) = Constant[3] : +# 1476| r1476_10(glval) = PointerAdd[4] : r1476_8, r1476_9 +# 1476| r1476_11(glval) = Convert : r1476_10 +# 1476| r1476_12(float &) = CopyValue : r1476_11 +# 1476| m1476_13(float &) = Store[rf] : &:r1476_1, r1476_12 # 1477| r1477_1(glval) = VariableAddress[f] : # 1477| r1477_2(glval) = FunctionAddress[returnValue] : # 1477| r1477_3(UnusualFields) = Call[returnValue] : func:r1477_2 -# 1477| m1477_4(unknown) = ^CallSideEffect : ~m1476_5 -# 1477| m1477_5(unknown) = Chi : total:m1476_5, partial:m1477_4 -# 1477| r1477_6(glval) = VariableAddress[#temp1477:15] : -# 1477| m1477_7(UnusualFields) = Store[#temp1477:15] : &:r1477_6, r1477_3 -# 1477| r1477_8(glval) = FieldAddress[a] : r1477_6 -# 1477| r1477_9(float *) = Convert : r1477_8 -# 1477| r1477_10(int) = Constant[5] : -# 1477| r1477_11(glval) = PointerAdd[4] : r1477_9, r1477_10 -# 1477| r1477_12(float) = Load[?] : &:r1477_11, ~m1477_7 -# 1477| m1477_13(float) = Store[f] : &:r1477_1, r1477_12 +# 1477| mu1477_4(unknown) = ^CallSideEffect : ~m? +# 1477| r1477_5(glval) = VariableAddress[#temp1477:15] : +# 1477| mu1477_6(UnusualFields) = Store[#temp1477:15] : &:r1477_5, r1477_3 +# 1477| r1477_7(glval) = FieldAddress[a] : r1477_5 +# 1477| r1477_8(float *) = Convert : r1477_7 +# 1477| r1477_9(int) = Constant[5] : +# 1477| r1477_10(glval) = PointerAdd[4] : r1477_8, r1477_9 +# 1477| r1477_11(float) = Load[?] : &:r1477_10, ~m? +# 1477| m1477_12(float) = Store[f] : &:r1477_1, r1477_11 # 1478| v1478_1(void) = NoOp : -# 1472| v1472_5(void) = ReturnVoid : -# 1472| v1472_6(void) = AliasedUse : ~m1477_5 -# 1472| v1472_7(void) = ExitFunction : +# 1472| v1472_4(void) = ReturnVoid : +# 1472| v1472_5(void) = AliasedUse : ~m? +# 1472| v1472_6(void) = ExitFunction : # 1494| void temporary_hierarchy() # 1494| Block 0 # 1494| v1494_1(void) = EnterFunction : -# 1494| m1494_2(unknown) = AliasedDefinition : -# 1494| m1494_3(unknown) = InitializeNonLocal : -# 1494| m1494_4(unknown) = Chi : total:m1494_2, partial:m1494_3 +# 1494| mu1494_2(unknown) = AliasedDefinition : +# 1494| mu1494_3(unknown) = InitializeNonLocal : # 1495| r1495_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : # 1495| r1495_2(glval) = FunctionAddress[returnValue] : # 1495| r1495_3(POD_Middle) = Call[returnValue] : func:r1495_2 -# 1495| m1495_4(unknown) = ^CallSideEffect : ~m1494_4 -# 1495| m1495_5(unknown) = Chi : total:m1494_4, partial:m1495_4 -# 1495| m1495_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1495_3 +# 1495| mu1495_4(unknown) = ^CallSideEffect : ~m? +# 1495| mu1495_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1495_3 #-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 -#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1495_6 +#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m? #-----| m0_4(POD_Base) = Store[b] : &:r1495_1, r0_3 # 1496| r1496_1(glval) = VariableAddress[#temp1496:9] : # 1496| r1496_2(glval) = FunctionAddress[returnValue] : # 1496| r1496_3(POD_Derived) = Call[returnValue] : func:r1496_2 -# 1496| m1496_4(unknown) = ^CallSideEffect : ~m1495_5 -# 1496| m1496_5(unknown) = Chi : total:m1495_5, partial:m1496_4 -# 1496| m1496_6(POD_Derived) = Store[#temp1496:9] : &:r1496_1, r1496_3 -# 1496| r1496_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1496_1 -# 1496| r1496_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1496_7 -# 1496| r1496_9(POD_Base) = Load[?] : &:r1496_8, ~m1496_6 -# 1496| r1496_10(glval) = VariableAddress[b] : -# 1496| m1496_11(POD_Base) = Store[b] : &:r1496_10, r1496_9 +# 1496| mu1496_4(unknown) = ^CallSideEffect : ~m? +# 1496| mu1496_5(POD_Derived) = Store[#temp1496:9] : &:r1496_1, r1496_3 +# 1496| r1496_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1496_1 +# 1496| r1496_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1496_6 +# 1496| r1496_8(POD_Base) = Load[?] : &:r1496_7, ~m? +# 1496| r1496_9(glval) = VariableAddress[b] : +# 1496| m1496_10(POD_Base) = Store[b] : &:r1496_9, r1496_8 # 1497| r1497_1(glval) = VariableAddress[x] : #-----| r0_5(glval) = VariableAddress[#temp0:0] : # 1497| r1497_2(glval) = FunctionAddress[returnValue] : # 1497| r1497_3(POD_Derived) = Call[returnValue] : func:r1497_2 -# 1497| m1497_4(unknown) = ^CallSideEffect : ~m1496_5 -# 1497| m1497_5(unknown) = Chi : total:m1496_5, partial:m1497_4 -# 1497| m1497_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1497_3 +# 1497| mu1497_4(unknown) = ^CallSideEffect : ~m? +# 1497| mu1497_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1497_3 #-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 #-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1497| r1497_7(glval) = FieldAddress[x] : r0_7 -# 1497| r1497_8(int) = Load[?] : &:r1497_7, ~m1497_6 -# 1497| m1497_9(int) = Store[x] : &:r1497_1, r1497_8 +# 1497| r1497_6(glval) = FieldAddress[x] : r0_7 +# 1497| r1497_7(int) = Load[?] : &:r1497_6, ~m? +# 1497| m1497_8(int) = Store[x] : &:r1497_1, r1497_7 # 1498| r1498_1(glval) = VariableAddress[f] : #-----| r0_8(glval) = VariableAddress[#temp0:0] : # 1498| r1498_2(glval) = FunctionAddress[returnValue] : # 1498| r1498_3(POD_Derived) = Call[returnValue] : func:r1498_2 -# 1498| m1498_4(unknown) = ^CallSideEffect : ~m1497_5 -# 1498| m1498_5(unknown) = Chi : total:m1497_5, partial:m1498_4 -# 1498| m1498_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1498_3 -# 1498| m1498_7(unknown) = Chi : total:m1498_5, partial:m1498_6 +# 1498| mu1498_4(unknown) = ^CallSideEffect : ~m? +# 1498| mu1498_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1498_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1498| r1498_8(glval) = FunctionAddress[f] : -# 1498| r1498_9(float) = Call[f] : func:r1498_8, this:r0_11 -# 1498| m1498_10(unknown) = ^CallSideEffect : ~m1498_7 -# 1498| m1498_11(unknown) = Chi : total:m1498_7, partial:m1498_10 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1498_11 -# 1498| m1498_12(float) = Store[f] : &:r1498_1, r1498_9 +# 1498| r1498_6(glval) = FunctionAddress[f] : +# 1498| r1498_7(float) = Call[f] : func:r1498_6, this:r0_11 +# 1498| mu1498_8(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +# 1498| m1498_9(float) = Store[f] : &:r1498_1, r1498_7 # 1499| v1499_1(void) = NoOp : -# 1494| v1494_5(void) = ReturnVoid : -# 1494| v1494_6(void) = AliasedUse : ~m1498_11 -# 1494| v1494_7(void) = ExitFunction : +# 1494| v1494_4(void) = ReturnVoid : +# 1494| v1494_5(void) = AliasedUse : ~m? +# 1494| v1494_6(void) = ExitFunction : # 1502| void Inheritance_Test_B::~Inheritance_Test_B() # 1502| Block 0 # 1502| v1502_1(void) = EnterFunction : -# 1502| m1502_2(unknown) = AliasedDefinition : -# 1502| m1502_3(unknown) = InitializeNonLocal : -# 1502| m1502_4(unknown) = Chi : total:m1502_2, partial:m1502_3 -# 1502| r1502_5(glval) = VariableAddress[#this] : -# 1502| m1502_6(glval) = InitializeParameter[#this] : &:r1502_5 -# 1502| r1502_7(glval) = Load[#this] : &:r1502_5, m1502_6 -# 1502| m1502_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1502_7 -# 1502| v1502_9(void) = NoOp : -# 1502| v1502_10(void) = ReturnIndirection[#this] : &:r1502_7, m1502_8 -# 1502| v1502_11(void) = ReturnVoid : -# 1502| v1502_12(void) = AliasedUse : m1502_3 -# 1502| v1502_13(void) = ExitFunction : +# 1502| mu1502_2(unknown) = AliasedDefinition : +# 1502| mu1502_3(unknown) = InitializeNonLocal : +# 1502| r1502_4(glval) = VariableAddress[#this] : +# 1502| m1502_5(glval) = InitializeParameter[#this] : &:r1502_4 +# 1502| r1502_6(glval) = Load[#this] : &:r1502_4, m1502_5 +# 1502| mu1502_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1502_6 +# 1502| v1502_8(void) = NoOp : +# 1502| v1502_9(void) = ReturnIndirection[#this] : &:r1502_6, ~m? +# 1502| v1502_10(void) = ReturnVoid : +# 1502| v1502_11(void) = AliasedUse : ~m? +# 1502| v1502_12(void) = ExitFunction : # 1508| void Inheritance_Test_A::Inheritance_Test_A() # 1508| Block 0 # 1508| v1508_1(void) = EnterFunction : -# 1508| m1508_2(unknown) = AliasedDefinition : -# 1508| m1508_3(unknown) = InitializeNonLocal : -# 1508| m1508_4(unknown) = Chi : total:m1508_2, partial:m1508_3 -# 1508| r1508_5(glval) = VariableAddress[#this] : -# 1508| m1508_6(glval) = InitializeParameter[#this] : &:r1508_5 -# 1508| r1508_7(glval) = Load[#this] : &:r1508_5, m1508_6 -# 1508| m1508_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1508_7 -# 1508| r1508_9(glval) = FieldAddress[x] : r1508_7 -# 1508| r1508_10(int) = Constant[42] : -# 1508| m1508_11(int) = Store[?] : &:r1508_9, r1508_10 -# 1508| m1508_12(unknown) = Chi : total:m1508_8, partial:m1508_11 +# 1508| mu1508_2(unknown) = AliasedDefinition : +# 1508| mu1508_3(unknown) = InitializeNonLocal : +# 1508| r1508_4(glval) = VariableAddress[#this] : +# 1508| m1508_5(glval) = InitializeParameter[#this] : &:r1508_4 +# 1508| r1508_6(glval) = Load[#this] : &:r1508_4, m1508_5 +# 1508| mu1508_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1508_6 +# 1508| r1508_8(glval) = FieldAddress[x] : r1508_6 +# 1508| r1508_9(int) = Constant[42] : +# 1508| mu1508_10(int) = Store[?] : &:r1508_8, r1508_9 # 1509| r1509_1(int) = Constant[3] : # 1509| r1509_2(glval) = VariableAddress[#this] : -# 1509| r1509_3(Inheritance_Test_A *) = Load[#this] : &:r1509_2, m1508_6 +# 1509| r1509_3(Inheritance_Test_A *) = Load[#this] : &:r1509_2, m1508_5 # 1509| r1509_4(glval) = FieldAddress[y] : r1509_3 -# 1509| m1509_5(int) = Store[?] : &:r1509_4, r1509_1 -# 1509| m1509_6(unknown) = Chi : total:m1508_12, partial:m1509_5 +# 1509| mu1509_5(int) = Store[?] : &:r1509_4, r1509_1 # 1510| v1510_1(void) = NoOp : -# 1508| v1508_13(void) = ReturnIndirection[#this] : &:r1508_7, m1509_6 -# 1508| v1508_14(void) = ReturnVoid : -# 1508| v1508_15(void) = AliasedUse : m1508_3 -# 1508| v1508_16(void) = ExitFunction : +# 1508| v1508_11(void) = ReturnIndirection[#this] : &:r1508_6, ~m? +# 1508| v1508_12(void) = ReturnVoid : +# 1508| v1508_13(void) = AliasedUse : ~m? +# 1508| v1508_14(void) = ExitFunction : # 1513| void array_structured_binding() # 1513| Block 0 # 1513| v1513_1(void) = EnterFunction : -# 1513| m1513_2(unknown) = AliasedDefinition : -# 1513| m1513_3(unknown) = InitializeNonLocal : -# 1513| m1513_4(unknown) = Chi : total:m1513_2, partial:m1513_3 +# 1513| mu1513_2(unknown) = AliasedDefinition : +# 1513| mu1513_3(unknown) = InitializeNonLocal : # 1514| r1514_1(glval) = VariableAddress[xs] : -# 1514| m1514_2(int[2]) = Uninitialized[xs] : &:r1514_1 +# 1514| mu1514_2(int[2]) = Uninitialized[xs] : &:r1514_1 # 1514| r1514_3(int) = Constant[0] : # 1514| r1514_4(glval) = PointerAdd[4] : r1514_1, r1514_3 # 1514| r1514_5(int) = Constant[1] : -# 1514| m1514_6(int) = Store[?] : &:r1514_4, r1514_5 -# 1514| m1514_7(int[2]) = Chi : total:m1514_2, partial:m1514_6 -# 1514| r1514_8(int) = Constant[1] : -# 1514| r1514_9(glval) = PointerAdd[4] : r1514_1, r1514_8 -# 1514| r1514_10(int) = Constant[2] : -# 1514| m1514_11(int) = Store[?] : &:r1514_9, r1514_10 -# 1514| m1514_12(int[2]) = Chi : total:m1514_7, partial:m1514_11 +# 1514| mu1514_6(int) = Store[?] : &:r1514_4, r1514_5 +# 1514| r1514_7(int) = Constant[1] : +# 1514| r1514_8(glval) = PointerAdd[4] : r1514_1, r1514_7 +# 1514| r1514_9(int) = Constant[2] : +# 1514| mu1514_10(int) = Store[?] : &:r1514_8, r1514_9 # 1517| r1517_1(glval) = VariableAddress[(unnamed local variable)] : # 1517| r1517_2(glval) = VariableAddress[xs] : # 1517| r1517_3(int(&)[2]) = CopyValue : r1517_2 @@ -12303,8 +11241,7 @@ ir.cpp: # 1518| r1518_1(int) = Constant[3] : # 1518| r1518_2(glval) = VariableAddress[x1] : # 1518| r1518_3(int &) = Load[x1] : &:r1518_2, m0_14 -# 1518| m1518_4(int) = Store[?] : &:r1518_3, r1518_1 -# 1518| m1518_5(int[2]) = Chi : total:m1514_12, partial:m1518_4 +# 1518| mu1518_4(int) = Store[?] : &:r1518_3, r1518_1 # 1519| r1519_1(glval) = VariableAddress[rx1] : # 1519| r1519_2(glval) = VariableAddress[x1] : # 1519| r1519_3(int &) = Load[x1] : &:r1519_2, m0_14 @@ -12313,7 +11250,7 @@ ir.cpp: # 1520| r1520_1(glval) = VariableAddress[x] : # 1520| r1520_2(glval) = VariableAddress[x1] : # 1520| r1520_3(int &) = Load[x1] : &:r1520_2, m0_14 -# 1520| r1520_4(int) = Load[?] : &:r1520_3, m1518_4 +# 1520| r1520_4(int) = Load[?] : &:r1520_3, ~m? # 1520| m1520_5(int) = Store[x] : &:r1520_1, r1520_4 # 1524| r1524_1(glval) = VariableAddress[unnamed_local_variable] : # 1524| r1524_2(glval) = VariableAddress[xs] : @@ -12341,8 +11278,7 @@ ir.cpp: # 1527| r1527_2(glval) = VariableAddress[x1] : # 1527| r1527_3(int &) = Load[x1] : &:r1527_2, m1526_9 # 1527| r1527_4(glval) = CopyValue : r1527_3 -# 1527| m1527_5(int) = Store[?] : &:r1527_4, r1527_1 -# 1527| m1527_6(int[2]) = Chi : total:m1518_5, partial:m1527_5 +# 1527| mu1527_5(int) = Store[?] : &:r1527_4, r1527_1 # 1528| r1528_1(glval) = VariableAddress[rx1] : # 1528| r1528_2(glval) = VariableAddress[x1] : # 1528| r1528_3(int &) = Load[x1] : &:r1528_2, m1526_9 @@ -12352,148 +11288,134 @@ ir.cpp: # 1529| r1529_1(glval) = VariableAddress[x] : # 1529| r1529_2(glval) = VariableAddress[x1] : # 1529| r1529_3(int &) = Load[x1] : &:r1529_2, m1526_9 -# 1529| r1529_4(int) = Load[?] : &:r1529_3, m1527_5 +# 1529| r1529_4(int) = Load[?] : &:r1529_3, ~m? # 1529| m1529_5(int) = Store[x] : &:r1529_1, r1529_4 # 1531| v1531_1(void) = NoOp : -# 1513| v1513_5(void) = ReturnVoid : -# 1513| v1513_6(void) = AliasedUse : m1513_3 -# 1513| v1513_7(void) = ExitFunction : +# 1513| v1513_4(void) = ReturnVoid : +# 1513| v1513_5(void) = AliasedUse : ~m? +# 1513| v1513_6(void) = ExitFunction : # 1533| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() # 1533| Block 0 # 1533| v1533_1(void) = EnterFunction : -# 1533| m1533_2(unknown) = AliasedDefinition : -# 1533| m1533_3(unknown) = InitializeNonLocal : -# 1533| m1533_4(unknown) = Chi : total:m1533_2, partial:m1533_3 -# 1533| r1533_5(glval) = VariableAddress[#this] : -# 1533| m1533_6(glval) = InitializeParameter[#this] : &:r1533_5 -# 1533| r1533_7(glval) = Load[#this] : &:r1533_5, m1533_6 -# 1533| m1533_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1533_7 -# 1533| v1533_9(void) = NoOp : -# 1533| v1533_10(void) = ReturnIndirection[#this] : &:r1533_7, m1533_8 -# 1533| v1533_11(void) = ReturnVoid : -# 1533| v1533_12(void) = AliasedUse : m1533_3 -# 1533| v1533_13(void) = ExitFunction : +# 1533| mu1533_2(unknown) = AliasedDefinition : +# 1533| mu1533_3(unknown) = InitializeNonLocal : +# 1533| r1533_4(glval) = VariableAddress[#this] : +# 1533| m1533_5(glval) = InitializeParameter[#this] : &:r1533_4 +# 1533| r1533_6(glval) = Load[#this] : &:r1533_4, m1533_5 +# 1533| mu1533_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1533_6 +# 1533| v1533_8(void) = NoOp : +# 1533| v1533_9(void) = ReturnIndirection[#this] : &:r1533_6, ~m? +# 1533| v1533_10(void) = ReturnVoid : +# 1533| v1533_11(void) = AliasedUse : ~m? +# 1533| v1533_12(void) = ExitFunction : # 1537| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() # 1537| Block 0 # 1537| v1537_1(void) = EnterFunction : -# 1537| m1537_2(unknown) = AliasedDefinition : -# 1537| m1537_3(unknown) = InitializeNonLocal : -# 1537| m1537_4(unknown) = Chi : total:m1537_2, partial:m1537_3 -# 1537| r1537_5(glval) = VariableAddress[#this] : -# 1537| m1537_6(glval) = InitializeParameter[#this] : &:r1537_5 -# 1537| r1537_7(glval) = Load[#this] : &:r1537_5, m1537_6 -# 1537| m1537_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_7 -# 1537| v1537_9(void) = NoOp : -# 1537| v1537_10(void) = ReturnIndirection[#this] : &:r1537_7, m1537_8 -# 1537| v1537_11(void) = ReturnVoid : -# 1537| v1537_12(void) = AliasedUse : m1537_3 -# 1537| v1537_13(void) = ExitFunction : +# 1537| mu1537_2(unknown) = AliasedDefinition : +# 1537| mu1537_3(unknown) = InitializeNonLocal : +# 1537| r1537_4(glval) = VariableAddress[#this] : +# 1537| m1537_5(glval) = InitializeParameter[#this] : &:r1537_4 +# 1537| r1537_6(glval) = Load[#this] : &:r1537_4, m1537_5 +# 1537| mu1537_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_6 +# 1537| v1537_8(void) = NoOp : +# 1537| v1537_9(void) = ReturnIndirection[#this] : &:r1537_6, ~m? +# 1537| v1537_10(void) = ReturnVoid : +# 1537| v1537_11(void) = AliasedUse : ~m? +# 1537| v1537_12(void) = ExitFunction : # 1537| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) # 1537| Block 0 # 1537| v1537_1(void) = EnterFunction : -# 1537| m1537_2(unknown) = AliasedDefinition : -# 1537| m1537_3(unknown) = InitializeNonLocal : -# 1537| m1537_4(unknown) = Chi : total:m1537_2, partial:m1537_3 -# 1537| r1537_5(glval) = VariableAddress[#this] : -# 1537| m1537_6(glval) = InitializeParameter[#this] : &:r1537_5 -# 1537| r1537_7(glval) = Load[#this] : &:r1537_5, m1537_6 -# 1537| m1537_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_7 +# 1537| mu1537_2(unknown) = AliasedDefinition : +# 1537| mu1537_3(unknown) = InitializeNonLocal : +# 1537| r1537_4(glval) = VariableAddress[#this] : +# 1537| m1537_5(glval) = InitializeParameter[#this] : &:r1537_4 +# 1537| r1537_6(glval) = Load[#this] : &:r1537_4, m1537_5 +# 1537| mu1537_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1537| r1537_9(glval) = FieldAddress[i] : r1537_7 -# 1537| r1537_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_10, m0_2 -# 1537| r1537_12(glval) = CopyValue : r1537_11 -# 1537| r1537_13(glval) = FieldAddress[i] : r1537_12 -# 1537| r1537_14(int) = Load[?] : &:r1537_13, ~m0_4 -# 1537| m1537_15(int) = Store[?] : &:r1537_9, r1537_14 -# 1537| m1537_16(unknown) = Chi : total:m1537_8, partial:m1537_15 -# 1537| r1537_17(glval) = FieldAddress[d] : r1537_7 -# 1537| r1537_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_18, m0_2 -# 1537| r1537_20(glval) = CopyValue : r1537_19 -# 1537| r1537_21(glval) = FieldAddress[d] : r1537_20 -# 1537| r1537_22(double) = Load[?] : &:r1537_21, ~m0_4 -# 1537| m1537_23(double) = Store[?] : &:r1537_17, r1537_22 -# 1537| m1537_24(unknown) = Chi : total:m1537_16, partial:m1537_23 -# 1537| r1537_25(glval) = FieldAddress[b] : r1537_7 -# 1537| r1537_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_26, m0_2 -# 1537| r1537_28(glval) = CopyValue : r1537_27 -# 1537| r1537_29(glval) = FieldAddress[b] : r1537_28 -# 1537| r1537_30(unsigned int) = Load[?] : &:r1537_29, ~m0_4 -# 1537| m1537_31(unsigned int) = Store[?] : &:r1537_25, r1537_30 -# 1537| m1537_32(unknown) = Chi : total:m1537_24, partial:m1537_31 -# 1537| r1537_33(glval) = FieldAddress[r] : r1537_7 -# 1537| r1537_34(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_34, m0_2 -# 1537| r1537_36(glval) = CopyValue : r1537_35 -# 1537| r1537_37(glval) = FieldAddress[r] : r1537_36 -# 1537| r1537_38(int &) = Load[?] : &:r1537_37, ~m0_4 -# 1537| m1537_39(int &) = Store[?] : &:r1537_33, r1537_38 -# 1537| m1537_40(unknown) = Chi : total:m1537_32, partial:m1537_39 -# 1537| r1537_41(glval) = FieldAddress[p] : r1537_7 -# 1537| r1537_42(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_42, m0_2 -# 1537| r1537_44(glval) = CopyValue : r1537_43 -# 1537| r1537_45(glval) = FieldAddress[p] : r1537_44 -# 1537| r1537_46(int *) = Load[?] : &:r1537_45, ~m0_4 -# 1537| m1537_47(int *) = Store[?] : &:r1537_41, r1537_46 -# 1537| m1537_48(unknown) = Chi : total:m1537_40, partial:m1537_47 -# 1537| r1537_49(glval) = FieldAddress[xs] : r1537_7 -# 1537| r1537_50(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_50, m0_2 -# 1537| r1537_52(glval) = CopyValue : r1537_51 -# 1537| r1537_53(glval) = FieldAddress[xs] : r1537_52 -# 1537| r1537_54(int[2]) = Load[?] : &:r1537_53, ~m0_4 -# 1537| m1537_55(int[2]) = Store[?] : &:r1537_49, r1537_54 -# 1537| m1537_56(unknown) = Chi : total:m1537_48, partial:m1537_55 -# 1537| r1537_57(glval) = FieldAddress[r_alt] : r1537_7 +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1537| r1537_8(glval) = FieldAddress[i] : r1537_6 +# 1537| r1537_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_9, m0_2 +# 1537| r1537_11(glval) = CopyValue : r1537_10 +# 1537| r1537_12(glval) = FieldAddress[i] : r1537_11 +# 1537| r1537_13(int) = Load[?] : &:r1537_12, ~m? +# 1537| mu1537_14(int) = Store[?] : &:r1537_8, r1537_13 +# 1537| r1537_15(glval) = FieldAddress[d] : r1537_6 +# 1537| r1537_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_16, m0_2 +# 1537| r1537_18(glval) = CopyValue : r1537_17 +# 1537| r1537_19(glval) = FieldAddress[d] : r1537_18 +# 1537| r1537_20(double) = Load[?] : &:r1537_19, ~m? +# 1537| mu1537_21(double) = Store[?] : &:r1537_15, r1537_20 +# 1537| r1537_22(glval) = FieldAddress[b] : r1537_6 +# 1537| r1537_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_23, m0_2 +# 1537| r1537_25(glval) = CopyValue : r1537_24 +# 1537| r1537_26(glval) = FieldAddress[b] : r1537_25 +# 1537| r1537_27(unsigned int) = Load[?] : &:r1537_26, ~m? +# 1537| mu1537_28(unsigned int) = Store[?] : &:r1537_22, r1537_27 +# 1537| r1537_29(glval) = FieldAddress[r] : r1537_6 +# 1537| r1537_30(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_30, m0_2 +# 1537| r1537_32(glval) = CopyValue : r1537_31 +# 1537| r1537_33(glval) = FieldAddress[r] : r1537_32 +# 1537| r1537_34(int &) = Load[?] : &:r1537_33, ~m? +# 1537| mu1537_35(int &) = Store[?] : &:r1537_29, r1537_34 +# 1537| r1537_36(glval) = FieldAddress[p] : r1537_6 +# 1537| r1537_37(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_37, m0_2 +# 1537| r1537_39(glval) = CopyValue : r1537_38 +# 1537| r1537_40(glval) = FieldAddress[p] : r1537_39 +# 1537| r1537_41(int *) = Load[?] : &:r1537_40, ~m? +# 1537| mu1537_42(int *) = Store[?] : &:r1537_36, r1537_41 +# 1537| r1537_43(glval) = FieldAddress[xs] : r1537_6 +# 1537| r1537_44(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_44, m0_2 +# 1537| r1537_46(glval) = CopyValue : r1537_45 +# 1537| r1537_47(glval) = FieldAddress[xs] : r1537_46 +# 1537| r1537_48(int[2]) = Load[?] : &:r1537_47, ~m? +# 1537| mu1537_49(int[2]) = Store[?] : &:r1537_43, r1537_48 +# 1537| r1537_50(glval) = FieldAddress[r_alt] : r1537_6 +# 1537| r1537_51(glval) = VariableAddress[(unnamed parameter 0)] : +# 1537| r1537_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_51, m0_2 +# 1537| r1537_53(glval) = CopyValue : r1537_52 +# 1537| r1537_54(glval) = FieldAddress[r_alt] : r1537_53 +# 1537| r1537_55(int &) = Load[?] : &:r1537_54, ~m? +# 1537| mu1537_56(int &) = Store[?] : &:r1537_50, r1537_55 +# 1537| r1537_57(glval) = FieldAddress[m] : r1537_6 # 1537| r1537_58(glval) = VariableAddress[(unnamed parameter 0)] : # 1537| r1537_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_58, m0_2 # 1537| r1537_60(glval) = CopyValue : r1537_59 -# 1537| r1537_61(glval) = FieldAddress[r_alt] : r1537_60 -# 1537| r1537_62(int &) = Load[?] : &:r1537_61, ~m0_4 -# 1537| m1537_63(int &) = Store[?] : &:r1537_57, r1537_62 -# 1537| m1537_64(unknown) = Chi : total:m1537_56, partial:m1537_63 -# 1537| r1537_65(glval) = FieldAddress[m] : r1537_7 -# 1537| r1537_66(glval) = VariableAddress[(unnamed parameter 0)] : -# 1537| r1537_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1537_66, m0_2 -# 1537| r1537_68(glval) = CopyValue : r1537_67 -# 1537| r1537_69(glval) = FieldAddress[m] : r1537_68 -# 1537| r1537_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1537_69, ~m0_4 -# 1537| m1537_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1537_65, r1537_70 -# 1537| m1537_72(unknown) = Chi : total:m1537_64, partial:m1537_71 -# 1537| v1537_73(void) = NoOp : -# 1537| v1537_74(void) = ReturnIndirection[#this] : &:r1537_7, m1537_72 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1537| v1537_75(void) = ReturnVoid : -# 1537| v1537_76(void) = AliasedUse : m1537_3 -# 1537| v1537_77(void) = ExitFunction : +# 1537| r1537_61(glval) = FieldAddress[m] : r1537_60 +# 1537| r1537_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1537_61, ~m? +# 1537| mu1537_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1537_57, r1537_62 +# 1537| v1537_64(void) = NoOp : +# 1537| v1537_65(void) = ReturnIndirection[#this] : &:r1537_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1537| v1537_66(void) = ReturnVoid : +# 1537| v1537_67(void) = AliasedUse : ~m? +# 1537| v1537_68(void) = ExitFunction : # 1550| void data_member_structured_binding() # 1550| Block 0 # 1550| v1550_1(void) = EnterFunction : -# 1550| m1550_2(unknown) = AliasedDefinition : -# 1550| m1550_3(unknown) = InitializeNonLocal : -# 1550| m1550_4(unknown) = Chi : total:m1550_2, partial:m1550_3 +# 1550| mu1550_2(unknown) = AliasedDefinition : +# 1550| mu1550_3(unknown) = InitializeNonLocal : # 1551| r1551_1(glval) = VariableAddress[s] : -# 1551| m1551_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1551_1 +# 1551| mu1551_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1551_1 # 1551| r1551_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : # 1551| v1551_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1551_3, this:r1551_1 -# 1551| m1551_5(unknown) = ^CallSideEffect : ~m1550_4 -# 1551| m1551_6(unknown) = Chi : total:m1550_4, partial:m1551_5 -# 1551| m1551_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1551_1 -# 1551| m1551_8(StructuredBindingDataMemberStruct) = Chi : total:m1551_2, partial:m1551_7 +# 1551| mu1551_5(unknown) = ^CallSideEffect : ~m? +# 1551| mu1551_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1551_1 # 1554| r1554_1(glval) = VariableAddress[(unnamed local variable)] : # 1554| r1554_2(glval) = VariableAddress[s] : -# 1554| r1554_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1554_2, m1551_8 -# 1554| m1554_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1554_1, r1554_3 +# 1554| r1554_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1554_2, ~m? +# 1554| mu1554_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1554_1, r1554_3 # 1554| r1554_5(glval) = VariableAddress[i] : # 1554| r1554_6(glval) = VariableAddress[(unnamed local variable)] : # 1554| r1554_7(glval) = FieldAddress[i] : r1554_6 @@ -12509,7 +11431,7 @@ ir.cpp: # 1554| r1554_17(glval) = VariableAddress[r] : # 1554| r1554_18(glval) = VariableAddress[(unnamed local variable)] : # 1554| r1554_19(glval) = FieldAddress[r] : r1554_18 -# 1554| r1554_20(int &) = Load[?] : &:r1554_19, ~m1554_4 +# 1554| r1554_20(int &) = Load[?] : &:r1554_19, ~m? # 1554| r1554_21(glval) = CopyValue : r1554_20 # 1554| m1554_22(int &) = Store[r] : &:r1554_17, r1554_21 # 1554| r1554_23(glval) = VariableAddress[p] : @@ -12523,7 +11445,7 @@ ir.cpp: # 1554| r1554_31(glval) = VariableAddress[r_alt] : # 1554| r1554_32(glval) = VariableAddress[(unnamed local variable)] : # 1554| r1554_33(glval) = FieldAddress[r_alt] : r1554_32 -# 1554| r1554_34(int &) = Load[?] : &:r1554_33, ~m1554_4 +# 1554| r1554_34(int &) = Load[?] : &:r1554_33, ~m? # 1554| r1554_35(glval) = CopyValue : r1554_34 # 1554| m1554_36(int &) = Store[r_alt] : &:r1554_31, r1554_35 # 1554| r1554_37(glval) = VariableAddress[m] : @@ -12533,8 +11455,7 @@ ir.cpp: # 1555| r1555_1(double) = Constant[4.0] : # 1555| r1555_2(glval) = VariableAddress[d] : # 1555| r1555_3(double &) = Load[d] : &:r1555_2, m1554_12 -# 1555| m1555_4(double) = Store[?] : &:r1555_3, r1555_1 -# 1555| m1555_5(StructuredBindingDataMemberStruct) = Chi : total:m1554_4, partial:m1555_4 +# 1555| mu1555_4(double) = Store[?] : &:r1555_3, r1555_1 # 1556| r1556_1(glval) = VariableAddress[rd] : # 1556| r1556_2(glval) = VariableAddress[d] : # 1556| r1556_3(double &) = Load[d] : &:r1556_2, m1554_12 @@ -12543,20 +11464,18 @@ ir.cpp: # 1557| r1557_1(glval) = VariableAddress[v] : # 1557| r1557_2(glval) = VariableAddress[i] : # 1557| r1557_3(int &) = Load[i] : &:r1557_2, m1554_8 -# 1557| r1557_4(int) = Load[?] : &:r1557_3, ~m1554_4 +# 1557| r1557_4(int) = Load[?] : &:r1557_3, ~m? # 1557| m1557_5(int) = Store[v] : &:r1557_1, r1557_4 # 1558| r1558_1(int) = Constant[5] : # 1558| r1558_2(glval) = VariableAddress[r] : # 1558| r1558_3(int &) = Load[r] : &:r1558_2, m1554_22 -# 1558| m1558_4(int) = Store[?] : &:r1558_3, r1558_1 -# 1558| m1558_5(unknown) = Chi : total:m1551_6, partial:m1558_4 +# 1558| mu1558_4(int) = Store[?] : &:r1558_3, r1558_1 # 1559| r1559_1(int) = Constant[6] : # 1559| r1559_2(glval) = VariableAddress[p] : # 1559| r1559_3(int *&) = Load[p] : &:r1559_2, m1554_26 -# 1559| r1559_4(int *) = Load[?] : &:r1559_3, ~m1554_4 +# 1559| r1559_4(int *) = Load[?] : &:r1559_3, ~m? # 1559| r1559_5(glval) = CopyValue : r1559_4 -# 1559| m1559_6(int) = Store[?] : &:r1559_5, r1559_1 -# 1559| m1559_7(unknown) = Chi : total:m1558_5, partial:m1559_6 +# 1559| mu1559_6(int) = Store[?] : &:r1559_5, r1559_1 # 1560| r1560_1(glval) = VariableAddress[rr] : # 1560| r1560_2(glval) = VariableAddress[r] : # 1560| r1560_3(int &) = Load[r] : &:r1560_2, m1554_22 @@ -12570,12 +11489,12 @@ ir.cpp: # 1562| r1562_1(glval) = VariableAddress[w] : # 1562| r1562_2(glval) = VariableAddress[r] : # 1562| r1562_3(int &) = Load[r] : &:r1562_2, m1554_22 -# 1562| r1562_4(int) = Load[?] : &:r1562_3, ~m1559_7 +# 1562| r1562_4(int) = Load[?] : &:r1562_3, ~m? # 1562| m1562_5(int) = Store[w] : &:r1562_1, r1562_4 # 1566| r1566_1(glval) = VariableAddress[unnamed_local_variable] : # 1566| r1566_2(glval) = VariableAddress[s] : -# 1566| r1566_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1566_2, m1551_8 -# 1566| m1566_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1566_1, r1566_3 +# 1566| r1566_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1566_2, ~m? +# 1566| mu1566_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1566_1, r1566_3 # 1567| r1567_1(glval) = VariableAddress[i] : # 1567| r1567_2(glval) = VariableAddress[unnamed_local_variable] : # 1567| r1567_3(glval) = FieldAddress[i] : r1567_2 @@ -12589,7 +11508,7 @@ ir.cpp: # 1570| r1570_1(glval) = VariableAddress[r] : # 1570| r1570_2(glval) = VariableAddress[unnamed_local_variable] : # 1570| r1570_3(glval) = FieldAddress[r] : r1570_2 -# 1570| r1570_4(int &) = Load[?] : &:r1570_3, ~m1566_4 +# 1570| r1570_4(int &) = Load[?] : &:r1570_3, ~m? # 1570| r1570_5(glval) = CopyValue : r1570_4 # 1570| r1570_6(int &) = CopyValue : r1570_5 # 1570| m1570_7(int &) = Store[r] : &:r1570_1, r1570_6 @@ -12602,8 +11521,7 @@ ir.cpp: # 1572| r1572_2(glval) = VariableAddress[d] : # 1572| r1572_3(double &) = Load[d] : &:r1572_2, m1568_5 # 1572| r1572_4(glval) = CopyValue : r1572_3 -# 1572| m1572_5(double) = Store[?] : &:r1572_4, r1572_1 -# 1572| m1572_6(StructuredBindingDataMemberStruct) = Chi : total:m1566_4, partial:m1572_5 +# 1572| mu1572_5(double) = Store[?] : &:r1572_4, r1572_1 # 1573| r1573_1(glval) = VariableAddress[rd] : # 1573| r1573_2(glval) = VariableAddress[d] : # 1573| r1573_3(double &) = Load[d] : &:r1573_2, m1568_5 @@ -12613,21 +11531,19 @@ ir.cpp: # 1574| r1574_1(glval) = VariableAddress[v] : # 1574| r1574_2(glval) = VariableAddress[i] : # 1574| r1574_3(int &) = Load[i] : &:r1574_2, m1567_5 -# 1574| r1574_4(int) = Load[?] : &:r1574_3, ~m1566_4 +# 1574| r1574_4(int) = Load[?] : &:r1574_3, ~m? # 1574| m1574_5(int) = Store[v] : &:r1574_1, r1574_4 # 1575| r1575_1(int) = Constant[5] : # 1575| r1575_2(glval) = VariableAddress[r] : # 1575| r1575_3(int &) = Load[r] : &:r1575_2, m1570_7 # 1575| r1575_4(glval) = CopyValue : r1575_3 -# 1575| m1575_5(int) = Store[?] : &:r1575_4, r1575_1 -# 1575| m1575_6(unknown) = Chi : total:m1559_7, partial:m1575_5 +# 1575| mu1575_5(int) = Store[?] : &:r1575_4, r1575_1 # 1576| r1576_1(int) = Constant[6] : # 1576| r1576_2(glval) = VariableAddress[p] : # 1576| r1576_3(int *&) = Load[p] : &:r1576_2, m1571_5 -# 1576| r1576_4(int *) = Load[?] : &:r1576_3, ~m1566_4 +# 1576| r1576_4(int *) = Load[?] : &:r1576_3, ~m? # 1576| r1576_5(glval) = CopyValue : r1576_4 -# 1576| m1576_6(int) = Store[?] : &:r1576_5, r1576_1 -# 1576| m1576_7(unknown) = Chi : total:m1575_6, partial:m1576_6 +# 1576| mu1576_6(int) = Store[?] : &:r1576_5, r1576_1 # 1577| r1577_1(glval) = VariableAddress[rr] : # 1577| r1577_2(glval) = VariableAddress[r] : # 1577| r1577_3(int &) = Load[r] : &:r1577_2, m1570_7 @@ -12643,407 +11559,373 @@ ir.cpp: # 1579| r1579_1(glval) = VariableAddress[w] : # 1579| r1579_2(glval) = VariableAddress[r] : # 1579| r1579_3(int &) = Load[r] : &:r1579_2, m1570_7 -# 1579| r1579_4(int) = Load[?] : &:r1579_3, ~m1576_7 +# 1579| r1579_4(int) = Load[?] : &:r1579_3, ~m? # 1579| m1579_5(int) = Store[w] : &:r1579_1, r1579_4 # 1581| v1581_1(void) = NoOp : -# 1550| v1550_5(void) = ReturnVoid : -# 1550| v1550_6(void) = AliasedUse : ~m1576_7 -# 1550| v1550_7(void) = ExitFunction : +# 1550| v1550_4(void) = ReturnVoid : +# 1550| v1550_5(void) = AliasedUse : ~m? +# 1550| v1550_6(void) = ExitFunction : # 1590| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() # 1590| Block 0 # 1590| v1590_1(void) = EnterFunction : -# 1590| m1590_2(unknown) = AliasedDefinition : -# 1590| m1590_3(unknown) = InitializeNonLocal : -# 1590| m1590_4(unknown) = Chi : total:m1590_2, partial:m1590_3 -# 1590| r1590_5(glval) = VariableAddress[#this] : -# 1590| m1590_6(glval) = InitializeParameter[#this] : &:r1590_5 -# 1590| r1590_7(glval) = Load[#this] : &:r1590_5, m1590_6 -# 1590| m1590_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1590_7 -# 1590| v1590_9(void) = NoOp : -# 1590| v1590_10(void) = ReturnIndirection[#this] : &:r1590_7, m1590_8 -# 1590| v1590_11(void) = ReturnVoid : -# 1590| v1590_12(void) = AliasedUse : m1590_3 -# 1590| v1590_13(void) = ExitFunction : +# 1590| mu1590_2(unknown) = AliasedDefinition : +# 1590| mu1590_3(unknown) = InitializeNonLocal : +# 1590| r1590_4(glval) = VariableAddress[#this] : +# 1590| m1590_5(glval) = InitializeParameter[#this] : &:r1590_4 +# 1590| r1590_6(glval) = Load[#this] : &:r1590_4, m1590_5 +# 1590| mu1590_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1590_6 +# 1590| v1590_8(void) = NoOp : +# 1590| v1590_9(void) = ReturnIndirection[#this] : &:r1590_6, ~m? +# 1590| v1590_10(void) = ReturnVoid : +# 1590| v1590_11(void) = AliasedUse : ~m? +# 1590| v1590_12(void) = ExitFunction : # 1590| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) # 1590| Block 0 # 1590| v1590_1(void) = EnterFunction : -# 1590| m1590_2(unknown) = AliasedDefinition : -# 1590| m1590_3(unknown) = InitializeNonLocal : -# 1590| m1590_4(unknown) = Chi : total:m1590_2, partial:m1590_3 -# 1590| r1590_5(glval) = VariableAddress[#this] : -# 1590| m1590_6(glval) = InitializeParameter[#this] : &:r1590_5 -# 1590| r1590_7(glval) = Load[#this] : &:r1590_5, m1590_6 -# 1590| m1590_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1590_7 +# 1590| mu1590_2(unknown) = AliasedDefinition : +# 1590| mu1590_3(unknown) = InitializeNonLocal : +# 1590| r1590_4(glval) = VariableAddress[#this] : +# 1590| m1590_5(glval) = InitializeParameter[#this] : &:r1590_4 +# 1590| r1590_6(glval) = Load[#this] : &:r1590_4, m1590_5 +# 1590| mu1590_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1590_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1590| r1590_9(glval) = FieldAddress[i] : r1590_7 -# 1590| r1590_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1590| r1590_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1590_10, m0_2 -# 1590| r1590_12(glval) = CopyValue : r1590_11 -# 1590| r1590_13(glval) = FieldAddress[i] : r1590_12 -# 1590| r1590_14(int) = Load[?] : &:r1590_13, ~m0_4 -# 1590| m1590_15(int) = Store[?] : &:r1590_9, r1590_14 -# 1590| m1590_16(unknown) = Chi : total:m1590_8, partial:m1590_15 -# 1590| r1590_17(glval) = FieldAddress[d] : r1590_7 -# 1590| r1590_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1590| r1590_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1590_18, m0_2 -# 1590| r1590_20(glval) = CopyValue : r1590_19 -# 1590| r1590_21(glval) = FieldAddress[d] : r1590_20 -# 1590| r1590_22(double) = Load[?] : &:r1590_21, ~m0_4 -# 1590| m1590_23(double) = Store[?] : &:r1590_17, r1590_22 -# 1590| m1590_24(unknown) = Chi : total:m1590_16, partial:m1590_23 -# 1590| r1590_25(glval) = FieldAddress[r] : r1590_7 -# 1590| r1590_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1590| r1590_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1590_26, m0_2 -# 1590| r1590_28(glval) = CopyValue : r1590_27 -# 1590| r1590_29(glval) = FieldAddress[r] : r1590_28 -# 1590| r1590_30(int &) = Load[?] : &:r1590_29, ~m0_4 -# 1590| m1590_31(int &) = Store[?] : &:r1590_25, r1590_30 -# 1590| m1590_32(unknown) = Chi : total:m1590_24, partial:m1590_31 -# 1590| v1590_33(void) = NoOp : -# 1590| v1590_34(void) = ReturnIndirection[#this] : &:r1590_7, m1590_32 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1590| v1590_35(void) = ReturnVoid : -# 1590| v1590_36(void) = AliasedUse : m1590_3 -# 1590| v1590_37(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1590| r1590_8(glval) = FieldAddress[i] : r1590_6 +# 1590| r1590_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1590| r1590_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1590_9, m0_2 +# 1590| r1590_11(glval) = CopyValue : r1590_10 +# 1590| r1590_12(glval) = FieldAddress[i] : r1590_11 +# 1590| r1590_13(int) = Load[?] : &:r1590_12, ~m? +# 1590| mu1590_14(int) = Store[?] : &:r1590_8, r1590_13 +# 1590| r1590_15(glval) = FieldAddress[d] : r1590_6 +# 1590| r1590_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1590| r1590_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1590_16, m0_2 +# 1590| r1590_18(glval) = CopyValue : r1590_17 +# 1590| r1590_19(glval) = FieldAddress[d] : r1590_18 +# 1590| r1590_20(double) = Load[?] : &:r1590_19, ~m? +# 1590| mu1590_21(double) = Store[?] : &:r1590_15, r1590_20 +# 1590| r1590_22(glval) = FieldAddress[r] : r1590_6 +# 1590| r1590_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1590| r1590_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1590_23, m0_2 +# 1590| r1590_25(glval) = CopyValue : r1590_24 +# 1590| r1590_26(glval) = FieldAddress[r] : r1590_25 +# 1590| r1590_27(int &) = Load[?] : &:r1590_26, ~m? +# 1590| mu1590_28(int &) = Store[?] : &:r1590_22, r1590_27 +# 1590| v1590_29(void) = NoOp : +# 1590| v1590_30(void) = ReturnIndirection[#this] : &:r1590_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1590| v1590_31(void) = ReturnVoid : +# 1590| v1590_32(void) = AliasedUse : ~m? +# 1590| v1590_33(void) = ExitFunction : # 1618| std::tuple_element::type& StructuredBindingTupleRefGet::get() # 1618| Block 0 # 1618| v1618_1(void) = EnterFunction : -# 1618| m1618_2(unknown) = AliasedDefinition : -# 1618| m1618_3(unknown) = InitializeNonLocal : -# 1618| m1618_4(unknown) = Chi : total:m1618_2, partial:m1618_3 -# 1618| r1618_5(glval) = VariableAddress[#this] : -# 1618| m1618_6(glval) = InitializeParameter[#this] : &:r1618_5 -# 1618| r1618_7(glval) = Load[#this] : &:r1618_5, m1618_6 -# 1618| m1618_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1618_7 +# 1618| mu1618_2(unknown) = AliasedDefinition : +# 1618| mu1618_3(unknown) = InitializeNonLocal : +# 1618| r1618_4(glval) = VariableAddress[#this] : +# 1618| m1618_5(glval) = InitializeParameter[#this] : &:r1618_4 +# 1618| r1618_6(glval) = Load[#this] : &:r1618_4, m1618_5 +# 1618| mu1618_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1618_6 # 1619| r1619_1(glval) = VariableAddress[#return] : # 1619| r1619_2(glval) = VariableAddress[#this] : -# 1619| r1619_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1619_2, m1618_6 +# 1619| r1619_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1619_2, m1618_5 # 1619| r1619_4(glval) = FieldAddress[i] : r1619_3 #-----| r0_1(int &) = CopyValue : r1619_4 #-----| m0_2(int &) = Store[#return] : &:r1619_1, r0_1 -# 1618| v1618_9(void) = ReturnIndirection[#this] : &:r1618_7, m1618_8 -# 1618| r1618_10(glval) = VariableAddress[#return] : -# 1618| v1618_11(void) = ReturnValue : &:r1618_10, m0_2 -# 1618| v1618_12(void) = AliasedUse : m1618_3 -# 1618| v1618_13(void) = ExitFunction : +# 1618| v1618_8(void) = ReturnIndirection[#this] : &:r1618_6, ~m? +# 1618| r1618_9(glval) = VariableAddress[#return] : +# 1618| v1618_10(void) = ReturnValue : &:r1618_9, m0_2 +# 1618| v1618_11(void) = AliasedUse : ~m? +# 1618| v1618_12(void) = ExitFunction : # 1622| std::tuple_element::type& StructuredBindingTupleRefGet::get() # 1622| Block 0 # 1622| v1622_1(void) = EnterFunction : -# 1622| m1622_2(unknown) = AliasedDefinition : -# 1622| m1622_3(unknown) = InitializeNonLocal : -# 1622| m1622_4(unknown) = Chi : total:m1622_2, partial:m1622_3 -# 1622| r1622_5(glval) = VariableAddress[#this] : -# 1622| m1622_6(glval) = InitializeParameter[#this] : &:r1622_5 -# 1622| r1622_7(glval) = Load[#this] : &:r1622_5, m1622_6 -# 1622| m1622_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1622_7 +# 1622| mu1622_2(unknown) = AliasedDefinition : +# 1622| mu1622_3(unknown) = InitializeNonLocal : +# 1622| r1622_4(glval) = VariableAddress[#this] : +# 1622| m1622_5(glval) = InitializeParameter[#this] : &:r1622_4 +# 1622| r1622_6(glval) = Load[#this] : &:r1622_4, m1622_5 +# 1622| mu1622_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1622_6 # 1623| r1623_1(glval) = VariableAddress[#return] : # 1623| r1623_2(glval) = VariableAddress[#this] : -# 1623| r1623_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1623_2, m1622_6 +# 1623| r1623_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1623_2, m1622_5 # 1623| r1623_4(glval) = FieldAddress[d] : r1623_3 #-----| r0_1(double &) = CopyValue : r1623_4 #-----| m0_2(double &) = Store[#return] : &:r1623_1, r0_1 -# 1622| v1622_9(void) = ReturnIndirection[#this] : &:r1622_7, m1622_8 -# 1622| r1622_10(glval) = VariableAddress[#return] : -# 1622| v1622_11(void) = ReturnValue : &:r1622_10, m0_2 -# 1622| v1622_12(void) = AliasedUse : m1622_3 -# 1622| v1622_13(void) = ExitFunction : +# 1622| v1622_8(void) = ReturnIndirection[#this] : &:r1622_6, ~m? +# 1622| r1622_9(glval) = VariableAddress[#return] : +# 1622| v1622_10(void) = ReturnValue : &:r1622_9, m0_2 +# 1622| v1622_11(void) = AliasedUse : ~m? +# 1622| v1622_12(void) = ExitFunction : # 1626| std::tuple_element::type StructuredBindingTupleRefGet::get() # 1626| Block 0 # 1626| v1626_1(void) = EnterFunction : -# 1626| m1626_2(unknown) = AliasedDefinition : -# 1626| m1626_3(unknown) = InitializeNonLocal : -# 1626| m1626_4(unknown) = Chi : total:m1626_2, partial:m1626_3 -# 1626| r1626_5(glval) = VariableAddress[#this] : -# 1626| m1626_6(glval) = InitializeParameter[#this] : &:r1626_5 -# 1626| r1626_7(glval) = Load[#this] : &:r1626_5, m1626_6 -# 1626| m1626_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1626_7 +# 1626| mu1626_2(unknown) = AliasedDefinition : +# 1626| mu1626_3(unknown) = InitializeNonLocal : +# 1626| r1626_4(glval) = VariableAddress[#this] : +# 1626| m1626_5(glval) = InitializeParameter[#this] : &:r1626_4 +# 1626| r1626_6(glval) = Load[#this] : &:r1626_4, m1626_5 +# 1626| mu1626_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1626_6 # 1627| r1627_1(glval) = VariableAddress[#return] : # 1627| r1627_2(glval) = VariableAddress[#this] : -# 1627| r1627_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1627_2, m1626_6 +# 1627| r1627_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1627_2, m1626_5 # 1627| r1627_4(glval) = FieldAddress[r] : r1627_3 -# 1627| r1627_5(int &) = Load[?] : &:r1627_4, ~m1626_8 +# 1627| r1627_5(int &) = Load[?] : &:r1627_4, ~m? # 1627| r1627_6(glval) = CopyValue : r1627_5 # 1627| r1627_7(int &) = CopyValue : r1627_6 # 1627| m1627_8(int &) = Store[#return] : &:r1627_1, r1627_7 -# 1626| v1626_9(void) = ReturnIndirection[#this] : &:r1626_7, m1626_8 -# 1626| r1626_10(glval) = VariableAddress[#return] : -# 1626| v1626_11(void) = ReturnValue : &:r1626_10, m1627_8 -# 1626| v1626_12(void) = AliasedUse : m1626_3 -# 1626| v1626_13(void) = ExitFunction : +# 1626| v1626_8(void) = ReturnIndirection[#this] : &:r1626_6, ~m? +# 1626| r1626_9(glval) = VariableAddress[#return] : +# 1626| v1626_10(void) = ReturnValue : &:r1626_9, m1627_8 +# 1626| v1626_11(void) = AliasedUse : ~m? +# 1626| v1626_12(void) = ExitFunction : # 1630| void tuple_structured_binding_ref_get() # 1630| Block 0 # 1630| v1630_1(void) = EnterFunction : -# 1630| m1630_2(unknown) = AliasedDefinition : -# 1630| m1630_3(unknown) = InitializeNonLocal : -# 1630| m1630_4(unknown) = Chi : total:m1630_2, partial:m1630_3 +# 1630| mu1630_2(unknown) = AliasedDefinition : +# 1630| mu1630_3(unknown) = InitializeNonLocal : # 1631| r1631_1(glval) = VariableAddress[t] : -# 1631| m1631_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1631_1 +# 1631| mu1631_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1631_1 # 1631| r1631_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : # 1631| v1631_4(void) = Call[StructuredBindingTupleRefGet] : func:r1631_3, this:r1631_1 -# 1631| m1631_5(unknown) = ^CallSideEffect : ~m1630_4 -# 1631| m1631_6(unknown) = Chi : total:m1630_4, partial:m1631_5 -# 1631| m1631_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1631_1 -# 1631| m1631_8(StructuredBindingTupleRefGet) = Chi : total:m1631_2, partial:m1631_7 +# 1631| mu1631_5(unknown) = ^CallSideEffect : ~m? +# 1631| mu1631_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1631_1 # 1634| r1634_1(glval) = VariableAddress[(unnamed local variable)] : # 1634| r1634_2(glval) = VariableAddress[t] : -# 1634| r1634_3(StructuredBindingTupleRefGet) = Load[t] : &:r1634_2, m1631_8 -# 1634| m1634_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1634_1, r1634_3 +# 1634| r1634_3(StructuredBindingTupleRefGet) = Load[t] : &:r1634_2, ~m? +# 1634| mu1634_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1634_1, r1634_3 # 1634| r1634_5(glval) = VariableAddress[i] : # 1634| r1634_6(glval) = VariableAddress[(unnamed local variable)] : # 1634| r1634_7(glval) = FunctionAddress[get] : # 1634| r1634_8(int &) = Call[get] : func:r1634_7, this:r1634_6 -# 1634| m1634_9(unknown) = ^CallSideEffect : ~m1631_6 -# 1634| m1634_10(unknown) = Chi : total:m1631_6, partial:m1634_9 -# 1634| v1634_11(void) = ^IndirectReadSideEffect[-1] : &:r1634_6, m1634_4 -# 1634| m1634_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_6 -# 1634| m1634_13(StructuredBindingTupleRefGet) = Chi : total:m1634_4, partial:m1634_12 -# 1634| r1634_14(glval) = CopyValue : r1634_8 -# 1634| r1634_15(int &) = CopyValue : r1634_14 -# 1634| m1634_16(int &) = Store[i] : &:r1634_5, r1634_15 -# 1634| r1634_17(glval) = VariableAddress[d] : -# 1634| r1634_18(glval) = VariableAddress[(unnamed local variable)] : -# 1634| r1634_19(glval) = FunctionAddress[get] : -# 1634| r1634_20(double &) = Call[get] : func:r1634_19, this:r1634_18 -# 1634| m1634_21(unknown) = ^CallSideEffect : ~m1634_10 -# 1634| m1634_22(unknown) = Chi : total:m1634_10, partial:m1634_21 -# 1634| v1634_23(void) = ^IndirectReadSideEffect[-1] : &:r1634_18, m1634_13 -# 1634| m1634_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_18 -# 1634| m1634_25(StructuredBindingTupleRefGet) = Chi : total:m1634_13, partial:m1634_24 -# 1634| r1634_26(glval) = CopyValue : r1634_20 -# 1634| r1634_27(double &) = CopyValue : r1634_26 -# 1634| m1634_28(double &) = Store[d] : &:r1634_17, r1634_27 -# 1634| r1634_29(glval) = VariableAddress[r] : -# 1634| r1634_30(glval) = VariableAddress[(unnamed local variable)] : -# 1634| r1634_31(glval) = FunctionAddress[get] : -# 1634| r1634_32(int &) = Call[get] : func:r1634_31, this:r1634_30 -# 1634| m1634_33(unknown) = ^CallSideEffect : ~m1634_22 -# 1634| m1634_34(unknown) = Chi : total:m1634_22, partial:m1634_33 -# 1634| v1634_35(void) = ^IndirectReadSideEffect[-1] : &:r1634_30, m1634_25 -# 1634| m1634_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_30 -# 1634| m1634_37(StructuredBindingTupleRefGet) = Chi : total:m1634_25, partial:m1634_36 -# 1634| r1634_38(glval) = CopyValue : r1634_32 -# 1634| r1634_39(int &) = CopyValue : r1634_38 -# 1634| m1634_40(int &) = Store[r] : &:r1634_29, r1634_39 +# 1634| mu1634_9(unknown) = ^CallSideEffect : ~m? +# 1634| v1634_10(void) = ^IndirectReadSideEffect[-1] : &:r1634_6, ~m? +# 1634| mu1634_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_6 +# 1634| r1634_12(glval) = CopyValue : r1634_8 +# 1634| r1634_13(int &) = CopyValue : r1634_12 +# 1634| m1634_14(int &) = Store[i] : &:r1634_5, r1634_13 +# 1634| r1634_15(glval) = VariableAddress[d] : +# 1634| r1634_16(glval) = VariableAddress[(unnamed local variable)] : +# 1634| r1634_17(glval) = FunctionAddress[get] : +# 1634| r1634_18(double &) = Call[get] : func:r1634_17, this:r1634_16 +# 1634| mu1634_19(unknown) = ^CallSideEffect : ~m? +# 1634| v1634_20(void) = ^IndirectReadSideEffect[-1] : &:r1634_16, ~m? +# 1634| mu1634_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_16 +# 1634| r1634_22(glval) = CopyValue : r1634_18 +# 1634| r1634_23(double &) = CopyValue : r1634_22 +# 1634| m1634_24(double &) = Store[d] : &:r1634_15, r1634_23 +# 1634| r1634_25(glval) = VariableAddress[r] : +# 1634| r1634_26(glval) = VariableAddress[(unnamed local variable)] : +# 1634| r1634_27(glval) = FunctionAddress[get] : +# 1634| r1634_28(int &) = Call[get] : func:r1634_27, this:r1634_26 +# 1634| mu1634_29(unknown) = ^CallSideEffect : ~m? +# 1634| v1634_30(void) = ^IndirectReadSideEffect[-1] : &:r1634_26, ~m? +# 1634| mu1634_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_26 +# 1634| r1634_32(glval) = CopyValue : r1634_28 +# 1634| r1634_33(int &) = CopyValue : r1634_32 +# 1634| m1634_34(int &) = Store[r] : &:r1634_25, r1634_33 # 1635| r1635_1(double) = Constant[4.0] : # 1635| r1635_2(glval) = VariableAddress[d] : -# 1635| r1635_3(double &) = Load[d] : &:r1635_2, m1634_28 +# 1635| r1635_3(double &) = Load[d] : &:r1635_2, m1634_24 # 1635| r1635_4(glval) = CopyValue : r1635_3 -# 1635| m1635_5(double) = Store[?] : &:r1635_4, r1635_1 -# 1635| m1635_6(StructuredBindingTupleRefGet) = Chi : total:m1634_37, partial:m1635_5 +# 1635| mu1635_5(double) = Store[?] : &:r1635_4, r1635_1 # 1636| r1636_1(glval) = VariableAddress[rd] : # 1636| r1636_2(glval) = VariableAddress[d] : -# 1636| r1636_3(double &) = Load[d] : &:r1636_2, m1634_28 +# 1636| r1636_3(double &) = Load[d] : &:r1636_2, m1634_24 # 1636| r1636_4(glval) = CopyValue : r1636_3 # 1636| r1636_5(double &) = CopyValue : r1636_4 # 1636| m1636_6(double &) = Store[rd] : &:r1636_1, r1636_5 # 1637| r1637_1(glval) = VariableAddress[v] : # 1637| r1637_2(glval) = VariableAddress[i] : -# 1637| r1637_3(int &) = Load[i] : &:r1637_2, m1634_16 -# 1637| r1637_4(int) = Load[?] : &:r1637_3, ~m1634_37 +# 1637| r1637_3(int &) = Load[i] : &:r1637_2, m1634_14 +# 1637| r1637_4(int) = Load[?] : &:r1637_3, ~m? # 1637| m1637_5(int) = Store[v] : &:r1637_1, r1637_4 # 1638| r1638_1(int) = Constant[5] : # 1638| r1638_2(glval) = VariableAddress[r] : -# 1638| r1638_3(int &) = Load[r] : &:r1638_2, m1634_40 +# 1638| r1638_3(int &) = Load[r] : &:r1638_2, m1634_34 # 1638| r1638_4(glval) = CopyValue : r1638_3 -# 1638| m1638_5(int) = Store[?] : &:r1638_4, r1638_1 -# 1638| m1638_6(unknown) = Chi : total:m1634_34, partial:m1638_5 +# 1638| mu1638_5(int) = Store[?] : &:r1638_4, r1638_1 # 1639| r1639_1(glval) = VariableAddress[rr] : # 1639| r1639_2(glval) = VariableAddress[r] : -# 1639| r1639_3(int &) = Load[r] : &:r1639_2, m1634_40 +# 1639| r1639_3(int &) = Load[r] : &:r1639_2, m1634_34 # 1639| r1639_4(glval) = CopyValue : r1639_3 # 1639| r1639_5(int &) = CopyValue : r1639_4 # 1639| m1639_6(int &) = Store[rr] : &:r1639_1, r1639_5 # 1640| r1640_1(glval) = VariableAddress[w] : # 1640| r1640_2(glval) = VariableAddress[r] : -# 1640| r1640_3(int &) = Load[r] : &:r1640_2, m1634_40 -# 1640| r1640_4(int) = Load[?] : &:r1640_3, ~m1638_6 +# 1640| r1640_3(int &) = Load[r] : &:r1640_2, m1634_34 +# 1640| r1640_4(int) = Load[?] : &:r1640_3, ~m? # 1640| m1640_5(int) = Store[w] : &:r1640_1, r1640_4 # 1644| r1644_1(glval) = VariableAddress[unnamed_local_variable] : # 1644| r1644_2(glval) = VariableAddress[t] : -# 1644| r1644_3(StructuredBindingTupleRefGet) = Load[t] : &:r1644_2, m1631_8 -# 1644| m1644_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1644_1, r1644_3 +# 1644| r1644_3(StructuredBindingTupleRefGet) = Load[t] : &:r1644_2, ~m? +# 1644| mu1644_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1644_1, r1644_3 # 1645| r1645_1(glval) = VariableAddress[i] : # 1645| r1645_2(glval) = VariableAddress[unnamed_local_variable] : # 1645| r1645_3(glval) = FunctionAddress[get] : # 1645| r1645_4(int &) = Call[get] : func:r1645_3, this:r1645_2 -# 1645| m1645_5(unknown) = ^CallSideEffect : ~m1638_6 -# 1645| m1645_6(unknown) = Chi : total:m1638_6, partial:m1645_5 -# 1645| v1645_7(void) = ^IndirectReadSideEffect[-1] : &:r1645_2, m1644_4 -# 1645| m1645_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1645_2 -# 1645| m1645_9(StructuredBindingTupleRefGet) = Chi : total:m1644_4, partial:m1645_8 -# 1645| r1645_10(glval) = CopyValue : r1645_4 -# 1645| r1645_11(int &) = CopyValue : r1645_10 -# 1645| m1645_12(int &) = Store[i] : &:r1645_1, r1645_11 +# 1645| mu1645_5(unknown) = ^CallSideEffect : ~m? +# 1645| v1645_6(void) = ^IndirectReadSideEffect[-1] : &:r1645_2, ~m? +# 1645| mu1645_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1645_2 +# 1645| r1645_8(glval) = CopyValue : r1645_4 +# 1645| r1645_9(int &) = CopyValue : r1645_8 +# 1645| m1645_10(int &) = Store[i] : &:r1645_1, r1645_9 # 1646| r1646_1(glval) = VariableAddress[d] : # 1646| r1646_2(glval) = VariableAddress[unnamed_local_variable] : # 1646| r1646_3(glval) = FunctionAddress[get] : # 1646| r1646_4(double &) = Call[get] : func:r1646_3, this:r1646_2 -# 1646| m1646_5(unknown) = ^CallSideEffect : ~m1645_6 -# 1646| m1646_6(unknown) = Chi : total:m1645_6, partial:m1646_5 -# 1646| v1646_7(void) = ^IndirectReadSideEffect[-1] : &:r1646_2, m1645_9 -# 1646| m1646_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1646_2 -# 1646| m1646_9(StructuredBindingTupleRefGet) = Chi : total:m1645_9, partial:m1646_8 -# 1646| r1646_10(glval) = CopyValue : r1646_4 -# 1646| r1646_11(double &) = CopyValue : r1646_10 -# 1646| m1646_12(double &) = Store[d] : &:r1646_1, r1646_11 +# 1646| mu1646_5(unknown) = ^CallSideEffect : ~m? +# 1646| v1646_6(void) = ^IndirectReadSideEffect[-1] : &:r1646_2, ~m? +# 1646| mu1646_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1646_2 +# 1646| r1646_8(glval) = CopyValue : r1646_4 +# 1646| r1646_9(double &) = CopyValue : r1646_8 +# 1646| m1646_10(double &) = Store[d] : &:r1646_1, r1646_9 # 1647| r1647_1(glval) = VariableAddress[r] : # 1647| r1647_2(glval) = VariableAddress[unnamed_local_variable] : # 1647| r1647_3(glval) = FunctionAddress[get] : # 1647| r1647_4(int &) = Call[get] : func:r1647_3, this:r1647_2 -# 1647| m1647_5(unknown) = ^CallSideEffect : ~m1646_6 -# 1647| m1647_6(unknown) = Chi : total:m1646_6, partial:m1647_5 -# 1647| v1647_7(void) = ^IndirectReadSideEffect[-1] : &:r1647_2, m1646_9 -# 1647| m1647_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1647_2 -# 1647| m1647_9(StructuredBindingTupleRefGet) = Chi : total:m1646_9, partial:m1647_8 -# 1647| r1647_10(glval) = CopyValue : r1647_4 -# 1647| r1647_11(int &) = CopyValue : r1647_10 -# 1647| m1647_12(int &) = Store[r] : &:r1647_1, r1647_11 +# 1647| mu1647_5(unknown) = ^CallSideEffect : ~m? +# 1647| v1647_6(void) = ^IndirectReadSideEffect[-1] : &:r1647_2, ~m? +# 1647| mu1647_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1647_2 +# 1647| r1647_8(glval) = CopyValue : r1647_4 +# 1647| r1647_9(int &) = CopyValue : r1647_8 +# 1647| m1647_10(int &) = Store[r] : &:r1647_1, r1647_9 # 1648| r1648_1(double) = Constant[4.0] : # 1648| r1648_2(glval) = VariableAddress[d] : -# 1648| r1648_3(double &) = Load[d] : &:r1648_2, m1646_12 +# 1648| r1648_3(double &) = Load[d] : &:r1648_2, m1646_10 # 1648| r1648_4(glval) = CopyValue : r1648_3 -# 1648| m1648_5(double) = Store[?] : &:r1648_4, r1648_1 -# 1648| m1648_6(StructuredBindingTupleRefGet) = Chi : total:m1647_9, partial:m1648_5 +# 1648| mu1648_5(double) = Store[?] : &:r1648_4, r1648_1 # 1649| r1649_1(glval) = VariableAddress[rd] : # 1649| r1649_2(glval) = VariableAddress[d] : -# 1649| r1649_3(double &) = Load[d] : &:r1649_2, m1646_12 +# 1649| r1649_3(double &) = Load[d] : &:r1649_2, m1646_10 # 1649| r1649_4(glval) = CopyValue : r1649_3 # 1649| r1649_5(double &) = CopyValue : r1649_4 # 1649| m1649_6(double &) = Store[rd] : &:r1649_1, r1649_5 # 1650| r1650_1(glval) = VariableAddress[v] : # 1650| r1650_2(glval) = VariableAddress[i] : -# 1650| r1650_3(int &) = Load[i] : &:r1650_2, m1645_12 -# 1650| r1650_4(int) = Load[?] : &:r1650_3, ~m1647_9 +# 1650| r1650_3(int &) = Load[i] : &:r1650_2, m1645_10 +# 1650| r1650_4(int) = Load[?] : &:r1650_3, ~m? # 1650| m1650_5(int) = Store[v] : &:r1650_1, r1650_4 # 1651| r1651_1(int) = Constant[5] : # 1651| r1651_2(glval) = VariableAddress[r] : -# 1651| r1651_3(int &) = Load[r] : &:r1651_2, m1647_12 +# 1651| r1651_3(int &) = Load[r] : &:r1651_2, m1647_10 # 1651| r1651_4(glval) = CopyValue : r1651_3 -# 1651| m1651_5(int) = Store[?] : &:r1651_4, r1651_1 -# 1651| m1651_6(unknown) = Chi : total:m1647_6, partial:m1651_5 +# 1651| mu1651_5(int) = Store[?] : &:r1651_4, r1651_1 # 1652| r1652_1(glval) = VariableAddress[rr] : # 1652| r1652_2(glval) = VariableAddress[r] : -# 1652| r1652_3(int &) = Load[r] : &:r1652_2, m1647_12 +# 1652| r1652_3(int &) = Load[r] : &:r1652_2, m1647_10 # 1652| r1652_4(glval) = CopyValue : r1652_3 # 1652| r1652_5(int &) = CopyValue : r1652_4 # 1652| m1652_6(int &) = Store[rr] : &:r1652_1, r1652_5 # 1653| r1653_1(glval) = VariableAddress[w] : # 1653| r1653_2(glval) = VariableAddress[r] : -# 1653| r1653_3(int &) = Load[r] : &:r1653_2, m1647_12 -# 1653| r1653_4(int) = Load[?] : &:r1653_3, ~m1651_6 +# 1653| r1653_3(int &) = Load[r] : &:r1653_2, m1647_10 +# 1653| r1653_4(int) = Load[?] : &:r1653_3, ~m? # 1653| m1653_5(int) = Store[w] : &:r1653_1, r1653_4 # 1655| v1655_1(void) = NoOp : -# 1630| v1630_5(void) = ReturnVoid : -# 1630| v1630_6(void) = AliasedUse : ~m1651_6 -# 1630| v1630_7(void) = ExitFunction : +# 1630| v1630_4(void) = ReturnVoid : +# 1630| v1630_5(void) = AliasedUse : ~m? +# 1630| v1630_6(void) = ExitFunction : # 1657| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() # 1657| Block 0 # 1657| v1657_1(void) = EnterFunction : -# 1657| m1657_2(unknown) = AliasedDefinition : -# 1657| m1657_3(unknown) = InitializeNonLocal : -# 1657| m1657_4(unknown) = Chi : total:m1657_2, partial:m1657_3 -# 1657| r1657_5(glval) = VariableAddress[#this] : -# 1657| m1657_6(glval) = InitializeParameter[#this] : &:r1657_5 -# 1657| r1657_7(glval) = Load[#this] : &:r1657_5, m1657_6 -# 1657| m1657_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1657_7 -# 1657| v1657_9(void) = NoOp : -# 1657| v1657_10(void) = ReturnIndirection[#this] : &:r1657_7, m1657_8 -# 1657| v1657_11(void) = ReturnVoid : -# 1657| v1657_12(void) = AliasedUse : m1657_3 -# 1657| v1657_13(void) = ExitFunction : +# 1657| mu1657_2(unknown) = AliasedDefinition : +# 1657| mu1657_3(unknown) = InitializeNonLocal : +# 1657| r1657_4(glval) = VariableAddress[#this] : +# 1657| m1657_5(glval) = InitializeParameter[#this] : &:r1657_4 +# 1657| r1657_6(glval) = Load[#this] : &:r1657_4, m1657_5 +# 1657| mu1657_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1657_6 +# 1657| v1657_8(void) = NoOp : +# 1657| v1657_9(void) = ReturnIndirection[#this] : &:r1657_6, ~m? +# 1657| v1657_10(void) = ReturnVoid : +# 1657| v1657_11(void) = AliasedUse : ~m? +# 1657| v1657_12(void) = ExitFunction : # 1684| std::tuple_element::type StructuredBindingTupleNoRefGet::get() # 1684| Block 0 # 1684| v1684_1(void) = EnterFunction : -# 1684| m1684_2(unknown) = AliasedDefinition : -# 1684| m1684_3(unknown) = InitializeNonLocal : -# 1684| m1684_4(unknown) = Chi : total:m1684_2, partial:m1684_3 -# 1684| r1684_5(glval) = VariableAddress[#this] : -# 1684| m1684_6(glval) = InitializeParameter[#this] : &:r1684_5 -# 1684| r1684_7(glval) = Load[#this] : &:r1684_5, m1684_6 -# 1684| m1684_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1684_7 +# 1684| mu1684_2(unknown) = AliasedDefinition : +# 1684| mu1684_3(unknown) = InitializeNonLocal : +# 1684| r1684_4(glval) = VariableAddress[#this] : +# 1684| m1684_5(glval) = InitializeParameter[#this] : &:r1684_4 +# 1684| r1684_6(glval) = Load[#this] : &:r1684_4, m1684_5 +# 1684| mu1684_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1684_6 # 1685| r1685_1(glval) = VariableAddress[#return] : # 1685| r1685_2(glval) = VariableAddress[#this] : -# 1685| r1685_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1685_2, m1684_6 +# 1685| r1685_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1685_2, m1684_5 # 1685| r1685_4(glval) = FieldAddress[i] : r1685_3 -# 1685| r1685_5(int) = Load[?] : &:r1685_4, ~m1684_8 +# 1685| r1685_5(int) = Load[?] : &:r1685_4, ~m? # 1685| m1685_6(int) = Store[#return] : &:r1685_1, r1685_5 -# 1684| v1684_9(void) = ReturnIndirection[#this] : &:r1684_7, m1684_8 -# 1684| r1684_10(glval) = VariableAddress[#return] : -# 1684| v1684_11(void) = ReturnValue : &:r1684_10, m1685_6 -# 1684| v1684_12(void) = AliasedUse : m1684_3 -# 1684| v1684_13(void) = ExitFunction : +# 1684| v1684_8(void) = ReturnIndirection[#this] : &:r1684_6, ~m? +# 1684| r1684_9(glval) = VariableAddress[#return] : +# 1684| v1684_10(void) = ReturnValue : &:r1684_9, m1685_6 +# 1684| v1684_11(void) = AliasedUse : ~m? +# 1684| v1684_12(void) = ExitFunction : # 1688| std::tuple_element::type StructuredBindingTupleNoRefGet::get() # 1688| Block 0 # 1688| v1688_1(void) = EnterFunction : -# 1688| m1688_2(unknown) = AliasedDefinition : -# 1688| m1688_3(unknown) = InitializeNonLocal : -# 1688| m1688_4(unknown) = Chi : total:m1688_2, partial:m1688_3 -# 1688| r1688_5(glval) = VariableAddress[#this] : -# 1688| m1688_6(glval) = InitializeParameter[#this] : &:r1688_5 -# 1688| r1688_7(glval) = Load[#this] : &:r1688_5, m1688_6 -# 1688| m1688_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1688_7 +# 1688| mu1688_2(unknown) = AliasedDefinition : +# 1688| mu1688_3(unknown) = InitializeNonLocal : +# 1688| r1688_4(glval) = VariableAddress[#this] : +# 1688| m1688_5(glval) = InitializeParameter[#this] : &:r1688_4 +# 1688| r1688_6(glval) = Load[#this] : &:r1688_4, m1688_5 +# 1688| mu1688_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1688_6 # 1689| r1689_1(glval) = VariableAddress[#return] : # 1689| r1689_2(glval) = VariableAddress[#this] : -# 1689| r1689_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1689_2, m1688_6 +# 1689| r1689_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1689_2, m1688_5 # 1689| r1689_4(glval) = FieldAddress[r] : r1689_3 -# 1689| r1689_5(int &) = Load[?] : &:r1689_4, ~m1688_8 +# 1689| r1689_5(int &) = Load[?] : &:r1689_4, ~m? # 1689| r1689_6(glval) = CopyValue : r1689_5 # 1689| r1689_7(int &) = CopyValue : r1689_6 # 1689| m1689_8(int &) = Store[#return] : &:r1689_1, r1689_7 -# 1688| v1688_9(void) = ReturnIndirection[#this] : &:r1688_7, m1688_8 -# 1688| r1688_10(glval) = VariableAddress[#return] : -# 1688| v1688_11(void) = ReturnValue : &:r1688_10, m1689_8 -# 1688| v1688_12(void) = AliasedUse : m1688_3 -# 1688| v1688_13(void) = ExitFunction : +# 1688| v1688_8(void) = ReturnIndirection[#this] : &:r1688_6, ~m? +# 1688| r1688_9(glval) = VariableAddress[#return] : +# 1688| v1688_10(void) = ReturnValue : &:r1688_9, m1689_8 +# 1688| v1688_11(void) = AliasedUse : ~m? +# 1688| v1688_12(void) = ExitFunction : # 1692| std::tuple_element::type StructuredBindingTupleNoRefGet::get() # 1692| Block 0 # 1692| v1692_1(void) = EnterFunction : -# 1692| m1692_2(unknown) = AliasedDefinition : -# 1692| m1692_3(unknown) = InitializeNonLocal : -# 1692| m1692_4(unknown) = Chi : total:m1692_2, partial:m1692_3 -# 1692| r1692_5(glval) = VariableAddress[#this] : -# 1692| m1692_6(glval) = InitializeParameter[#this] : &:r1692_5 -# 1692| r1692_7(glval) = Load[#this] : &:r1692_5, m1692_6 -# 1692| m1692_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1692_7 +# 1692| mu1692_2(unknown) = AliasedDefinition : +# 1692| mu1692_3(unknown) = InitializeNonLocal : +# 1692| r1692_4(glval) = VariableAddress[#this] : +# 1692| m1692_5(glval) = InitializeParameter[#this] : &:r1692_4 +# 1692| r1692_6(glval) = Load[#this] : &:r1692_4, m1692_5 +# 1692| mu1692_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1692_6 # 1693| r1693_1(glval) = VariableAddress[#return] : # 1693| r1693_2(glval) = VariableAddress[#temp1693:12] : # 1693| r1693_3(int) = Constant[5] : -# 1693| m1693_4(int) = Store[#temp1693:12] : &:r1693_2, r1693_3 +# 1693| mu1693_4(int) = Store[#temp1693:12] : &:r1693_2, r1693_3 # 1693| r1693_5(int &) = CopyValue : r1693_2 # 1693| m1693_6(int &&) = Store[#return] : &:r1693_1, r1693_5 -# 1692| v1692_9(void) = ReturnIndirection[#this] : &:r1692_7, m1692_8 -# 1692| r1692_10(glval) = VariableAddress[#return] : -# 1692| v1692_11(void) = ReturnValue : &:r1692_10, m1693_6 -# 1692| v1692_12(void) = AliasedUse : m1692_3 -# 1692| v1692_13(void) = ExitFunction : +# 1692| v1692_8(void) = ReturnIndirection[#this] : &:r1692_6, ~m? +# 1692| r1692_9(glval) = VariableAddress[#return] : +# 1692| v1692_10(void) = ReturnValue : &:r1692_9, m1693_6 +# 1692| v1692_11(void) = AliasedUse : ~m? +# 1692| v1692_12(void) = ExitFunction : # 1696| void tuple_structured_binding_no_ref_get() # 1696| Block 0 # 1696| v1696_1(void) = EnterFunction : -# 1696| m1696_2(unknown) = AliasedDefinition : -# 1696| m1696_3(unknown) = InitializeNonLocal : -# 1696| m1696_4(unknown) = Chi : total:m1696_2, partial:m1696_3 +# 1696| mu1696_2(unknown) = AliasedDefinition : +# 1696| mu1696_3(unknown) = InitializeNonLocal : # 1697| r1697_1(glval) = VariableAddress[t] : -# 1697| m1697_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1697_1 +# 1697| mu1697_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1697_1 # 1697| r1697_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : # 1697| v1697_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1697_3, this:r1697_1 -# 1697| m1697_5(unknown) = ^CallSideEffect : ~m1696_4 -# 1697| m1697_6(unknown) = Chi : total:m1696_4, partial:m1697_5 -# 1697| m1697_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1697_1 -# 1697| m1697_8(StructuredBindingTupleNoRefGet) = Chi : total:m1697_2, partial:m1697_7 +# 1697| mu1697_5(unknown) = ^CallSideEffect : ~m? +# 1697| mu1697_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1697_1 # 1700| r1700_1(glval) = VariableAddress[(unnamed local variable)] : # 1700| r1700_2(glval) = VariableAddress[t] : # 1700| r1700_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1700_2 @@ -13055,74 +11937,67 @@ ir.cpp: # 1700| r1700_9(glval) = CopyValue : r1700_8 # 1700| r1700_10(glval) = FunctionAddress[get] : # 1700| r1700_11(int) = Call[get] : func:r1700_10, this:r1700_9 -# 1700| m1700_12(unknown) = ^CallSideEffect : ~m1697_6 -# 1700| m1700_13(unknown) = Chi : total:m1697_6, partial:m1700_12 -# 1700| v1700_14(void) = ^IndirectReadSideEffect[-1] : &:r1700_9, m1697_8 -# 1700| m1700_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_9 -# 1700| m1700_16(StructuredBindingTupleNoRefGet) = Chi : total:m1697_8, partial:m1700_15 -# 1700| m1700_17(int) = Store[#temp1700:16] : &:r1700_6, r1700_11 -# 1700| r1700_18(int &) = CopyValue : r1700_6 -# 1700| m1700_19(int &&) = Store[i] : &:r1700_5, r1700_18 -# 1700| r1700_20(glval) = VariableAddress[r] : -# 1700| r1700_21(glval) = VariableAddress[(unnamed local variable)] : -# 1700| r1700_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1700_21, m1700_4 -# 1700| r1700_23(glval) = CopyValue : r1700_22 -# 1700| r1700_24(glval) = FunctionAddress[get] : -# 1700| r1700_25(int &) = Call[get] : func:r1700_24, this:r1700_23 -# 1700| m1700_26(unknown) = ^CallSideEffect : ~m1700_13 -# 1700| m1700_27(unknown) = Chi : total:m1700_13, partial:m1700_26 -# 1700| v1700_28(void) = ^IndirectReadSideEffect[-1] : &:r1700_23, m1700_16 -# 1700| m1700_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_23 -# 1700| m1700_30(StructuredBindingTupleNoRefGet) = Chi : total:m1700_16, partial:m1700_29 -# 1700| r1700_31(glval) = CopyValue : r1700_25 -# 1700| r1700_32(int &) = CopyValue : r1700_31 -# 1700| m1700_33(int &) = Store[r] : &:r1700_20, r1700_32 -# 1700| r1700_34(glval) = VariableAddress[rv] : -# 1700| r1700_35(glval) = VariableAddress[(unnamed local variable)] : -# 1700| r1700_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1700_35, m1700_4 -# 1700| r1700_37(glval) = CopyValue : r1700_36 -# 1700| r1700_38(glval) = FunctionAddress[get] : -# 1700| r1700_39(int &&) = Call[get] : func:r1700_38, this:r1700_37 -# 1700| m1700_40(unknown) = ^CallSideEffect : ~m1700_27 -# 1700| m1700_41(unknown) = Chi : total:m1700_27, partial:m1700_40 -# 1700| v1700_42(void) = ^IndirectReadSideEffect[-1] : &:r1700_37, m1700_30 -# 1700| m1700_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_37 -# 1700| m1700_44(StructuredBindingTupleNoRefGet) = Chi : total:m1700_30, partial:m1700_43 -# 1700| r1700_45(glval) = CopyValue : r1700_39 -# 1700| r1700_46(int &) = CopyValue : r1700_45 -# 1700| m1700_47(int &&) = Store[rv] : &:r1700_34, r1700_46 +# 1700| mu1700_12(unknown) = ^CallSideEffect : ~m? +# 1700| v1700_13(void) = ^IndirectReadSideEffect[-1] : &:r1700_9, ~m? +# 1700| mu1700_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_9 +# 1700| mu1700_15(int) = Store[#temp1700:16] : &:r1700_6, r1700_11 +# 1700| r1700_16(int &) = CopyValue : r1700_6 +# 1700| m1700_17(int &&) = Store[i] : &:r1700_5, r1700_16 +# 1700| r1700_18(glval) = VariableAddress[r] : +# 1700| r1700_19(glval) = VariableAddress[(unnamed local variable)] : +# 1700| r1700_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1700_19, m1700_4 +# 1700| r1700_21(glval) = CopyValue : r1700_20 +# 1700| r1700_22(glval) = FunctionAddress[get] : +# 1700| r1700_23(int &) = Call[get] : func:r1700_22, this:r1700_21 +# 1700| mu1700_24(unknown) = ^CallSideEffect : ~m? +# 1700| v1700_25(void) = ^IndirectReadSideEffect[-1] : &:r1700_21, ~m? +# 1700| mu1700_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_21 +# 1700| r1700_27(glval) = CopyValue : r1700_23 +# 1700| r1700_28(int &) = CopyValue : r1700_27 +# 1700| m1700_29(int &) = Store[r] : &:r1700_18, r1700_28 +# 1700| r1700_30(glval) = VariableAddress[rv] : +# 1700| r1700_31(glval) = VariableAddress[(unnamed local variable)] : +# 1700| r1700_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1700_31, m1700_4 +# 1700| r1700_33(glval) = CopyValue : r1700_32 +# 1700| r1700_34(glval) = FunctionAddress[get] : +# 1700| r1700_35(int &&) = Call[get] : func:r1700_34, this:r1700_33 +# 1700| mu1700_36(unknown) = ^CallSideEffect : ~m? +# 1700| v1700_37(void) = ^IndirectReadSideEffect[-1] : &:r1700_33, ~m? +# 1700| mu1700_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_33 +# 1700| r1700_39(glval) = CopyValue : r1700_35 +# 1700| r1700_40(int &) = CopyValue : r1700_39 +# 1700| m1700_41(int &&) = Store[rv] : &:r1700_30, r1700_40 # 1701| r1701_1(int) = Constant[4] : # 1701| r1701_2(glval) = VariableAddress[i] : -# 1701| r1701_3(int &&) = Load[i] : &:r1701_2, m1700_19 +# 1701| r1701_3(int &&) = Load[i] : &:r1701_2, m1700_17 # 1701| r1701_4(glval) = CopyValue : r1701_3 -# 1701| m1701_5(int) = Store[?] : &:r1701_4, r1701_1 +# 1701| mu1701_5(int) = Store[?] : &:r1701_4, r1701_1 # 1702| r1702_1(glval) = VariableAddress[ri] : # 1702| r1702_2(glval) = VariableAddress[i] : -# 1702| r1702_3(int &&) = Load[i] : &:r1702_2, m1700_19 +# 1702| r1702_3(int &&) = Load[i] : &:r1702_2, m1700_17 # 1702| r1702_4(glval) = CopyValue : r1702_3 # 1702| r1702_5(int &) = CopyValue : r1702_4 # 1702| m1702_6(int &) = Store[ri] : &:r1702_1, r1702_5 # 1703| r1703_1(glval) = VariableAddress[v] : # 1703| r1703_2(glval) = VariableAddress[i] : -# 1703| r1703_3(int &&) = Load[i] : &:r1703_2, m1700_19 -# 1703| r1703_4(int) = Load[?] : &:r1703_3, m1701_5 +# 1703| r1703_3(int &&) = Load[i] : &:r1703_2, m1700_17 +# 1703| r1703_4(int) = Load[?] : &:r1703_3, ~m? # 1703| m1703_5(int) = Store[v] : &:r1703_1, r1703_4 # 1704| r1704_1(int) = Constant[5] : # 1704| r1704_2(glval) = VariableAddress[r] : -# 1704| r1704_3(int &) = Load[r] : &:r1704_2, m1700_33 +# 1704| r1704_3(int &) = Load[r] : &:r1704_2, m1700_29 # 1704| r1704_4(glval) = CopyValue : r1704_3 -# 1704| m1704_5(int) = Store[?] : &:r1704_4, r1704_1 -# 1704| m1704_6(unknown) = Chi : total:m1700_41, partial:m1704_5 +# 1704| mu1704_5(int) = Store[?] : &:r1704_4, r1704_1 # 1705| r1705_1(glval) = VariableAddress[rr] : # 1705| r1705_2(glval) = VariableAddress[r] : -# 1705| r1705_3(int &) = Load[r] : &:r1705_2, m1700_33 +# 1705| r1705_3(int &) = Load[r] : &:r1705_2, m1700_29 # 1705| r1705_4(glval) = CopyValue : r1705_3 # 1705| r1705_5(int &) = CopyValue : r1705_4 # 1705| m1705_6(int &) = Store[rr] : &:r1705_1, r1705_5 # 1706| r1706_1(glval) = VariableAddress[w] : # 1706| r1706_2(glval) = VariableAddress[r] : -# 1706| r1706_3(int &) = Load[r] : &:r1706_2, m1700_33 -# 1706| r1706_4(int) = Load[?] : &:r1706_3, ~m1704_6 +# 1706| r1706_3(int &) = Load[r] : &:r1706_2, m1700_29 +# 1706| r1706_4(int) = Load[?] : &:r1706_3, ~m? # 1706| m1706_5(int) = Store[w] : &:r1706_1, r1706_4 # 1710| r1710_1(glval) = VariableAddress[unnamed_local_variable] : # 1710| r1710_2(glval) = VariableAddress[t] : @@ -13135,102 +12010,92 @@ ir.cpp: # 1711| r1711_5(glval) = CopyValue : r1711_4 # 1711| r1711_6(glval) = FunctionAddress[get] : # 1711| r1711_7(int) = Call[get] : func:r1711_6, this:r1711_5 -# 1711| m1711_8(unknown) = ^CallSideEffect : ~m1704_6 -# 1711| m1711_9(unknown) = Chi : total:m1704_6, partial:m1711_8 -# 1711| v1711_10(void) = ^IndirectReadSideEffect[-1] : &:r1711_5, m1700_44 -# 1711| m1711_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1711_5 -# 1711| m1711_12(StructuredBindingTupleNoRefGet) = Chi : total:m1700_44, partial:m1711_11 -# 1711| m1711_13(int) = Store[#temp1711:20] : &:r1711_2, r1711_7 -# 1711| r1711_14(int &) = CopyValue : r1711_2 -# 1711| m1711_15(int &&) = Store[i] : &:r1711_1, r1711_14 +# 1711| mu1711_8(unknown) = ^CallSideEffect : ~m? +# 1711| v1711_9(void) = ^IndirectReadSideEffect[-1] : &:r1711_5, ~m? +# 1711| mu1711_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1711_5 +# 1711| mu1711_11(int) = Store[#temp1711:20] : &:r1711_2, r1711_7 +# 1711| r1711_12(int &) = CopyValue : r1711_2 +# 1711| m1711_13(int &&) = Store[i] : &:r1711_1, r1711_12 # 1712| r1712_1(glval) = VariableAddress[r] : # 1712| r1712_2(glval) = VariableAddress[unnamed_local_variable] : # 1712| r1712_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1712_2, m1710_4 # 1712| r1712_4(glval) = CopyValue : r1712_3 # 1712| r1712_5(glval) = FunctionAddress[get] : # 1712| r1712_6(int &) = Call[get] : func:r1712_5, this:r1712_4 -# 1712| m1712_7(unknown) = ^CallSideEffect : ~m1711_9 -# 1712| m1712_8(unknown) = Chi : total:m1711_9, partial:m1712_7 -# 1712| v1712_9(void) = ^IndirectReadSideEffect[-1] : &:r1712_4, m1711_12 -# 1712| m1712_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1712_4 -# 1712| m1712_11(StructuredBindingTupleNoRefGet) = Chi : total:m1711_12, partial:m1712_10 -# 1712| r1712_12(glval) = CopyValue : r1712_6 -# 1712| r1712_13(int &) = CopyValue : r1712_12 -# 1712| m1712_14(int &) = Store[r] : &:r1712_1, r1712_13 +# 1712| mu1712_7(unknown) = ^CallSideEffect : ~m? +# 1712| v1712_8(void) = ^IndirectReadSideEffect[-1] : &:r1712_4, ~m? +# 1712| mu1712_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1712_4 +# 1712| r1712_10(glval) = CopyValue : r1712_6 +# 1712| r1712_11(int &) = CopyValue : r1712_10 +# 1712| m1712_12(int &) = Store[r] : &:r1712_1, r1712_11 # 1713| r1713_1(glval) = VariableAddress[rv] : # 1713| r1713_2(glval) = VariableAddress[unnamed_local_variable] : # 1713| r1713_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1713_2, m1710_4 # 1713| r1713_4(glval) = CopyValue : r1713_3 # 1713| r1713_5(glval) = FunctionAddress[get] : # 1713| r1713_6(int &&) = Call[get] : func:r1713_5, this:r1713_4 -# 1713| m1713_7(unknown) = ^CallSideEffect : ~m1712_8 -# 1713| m1713_8(unknown) = Chi : total:m1712_8, partial:m1713_7 -# 1713| v1713_9(void) = ^IndirectReadSideEffect[-1] : &:r1713_4, m1712_11 -# 1713| m1713_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1713_4 -# 1713| m1713_11(StructuredBindingTupleNoRefGet) = Chi : total:m1712_11, partial:m1713_10 -# 1713| r1713_12(glval) = CopyValue : r1713_6 -# 1713| r1713_13(int &) = CopyValue : r1713_12 -# 1713| m1713_14(int &&) = Store[rv] : &:r1713_1, r1713_13 +# 1713| mu1713_7(unknown) = ^CallSideEffect : ~m? +# 1713| v1713_8(void) = ^IndirectReadSideEffect[-1] : &:r1713_4, ~m? +# 1713| mu1713_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1713_4 +# 1713| r1713_10(glval) = CopyValue : r1713_6 +# 1713| r1713_11(int &) = CopyValue : r1713_10 +# 1713| m1713_12(int &&) = Store[rv] : &:r1713_1, r1713_11 # 1714| r1714_1(int) = Constant[4] : # 1714| r1714_2(glval) = VariableAddress[i] : -# 1714| r1714_3(int &&) = Load[i] : &:r1714_2, m1711_15 +# 1714| r1714_3(int &&) = Load[i] : &:r1714_2, m1711_13 # 1714| r1714_4(glval) = CopyValue : r1714_3 -# 1714| m1714_5(int) = Store[?] : &:r1714_4, r1714_1 +# 1714| mu1714_5(int) = Store[?] : &:r1714_4, r1714_1 # 1715| r1715_1(glval) = VariableAddress[ri] : # 1715| r1715_2(glval) = VariableAddress[i] : -# 1715| r1715_3(int &&) = Load[i] : &:r1715_2, m1711_15 +# 1715| r1715_3(int &&) = Load[i] : &:r1715_2, m1711_13 # 1715| r1715_4(glval) = CopyValue : r1715_3 # 1715| r1715_5(int &) = CopyValue : r1715_4 # 1715| m1715_6(int &) = Store[ri] : &:r1715_1, r1715_5 # 1716| r1716_1(glval) = VariableAddress[v] : # 1716| r1716_2(glval) = VariableAddress[i] : -# 1716| r1716_3(int &&) = Load[i] : &:r1716_2, m1711_15 -# 1716| r1716_4(int) = Load[?] : &:r1716_3, m1714_5 +# 1716| r1716_3(int &&) = Load[i] : &:r1716_2, m1711_13 +# 1716| r1716_4(int) = Load[?] : &:r1716_3, ~m? # 1716| m1716_5(int) = Store[v] : &:r1716_1, r1716_4 # 1717| r1717_1(int) = Constant[5] : # 1717| r1717_2(glval) = VariableAddress[r] : -# 1717| r1717_3(int &) = Load[r] : &:r1717_2, m1712_14 +# 1717| r1717_3(int &) = Load[r] : &:r1717_2, m1712_12 # 1717| r1717_4(glval) = CopyValue : r1717_3 -# 1717| m1717_5(int) = Store[?] : &:r1717_4, r1717_1 -# 1717| m1717_6(unknown) = Chi : total:m1713_8, partial:m1717_5 +# 1717| mu1717_5(int) = Store[?] : &:r1717_4, r1717_1 # 1718| r1718_1(glval) = VariableAddress[rr] : # 1718| r1718_2(glval) = VariableAddress[r] : -# 1718| r1718_3(int &) = Load[r] : &:r1718_2, m1712_14 +# 1718| r1718_3(int &) = Load[r] : &:r1718_2, m1712_12 # 1718| r1718_4(glval) = CopyValue : r1718_3 # 1718| r1718_5(int &) = CopyValue : r1718_4 # 1718| m1718_6(int &) = Store[rr] : &:r1718_1, r1718_5 # 1719| r1719_1(glval) = VariableAddress[w] : # 1719| r1719_2(glval) = VariableAddress[r] : -# 1719| r1719_3(int &) = Load[r] : &:r1719_2, m1712_14 -# 1719| r1719_4(int) = Load[?] : &:r1719_3, ~m1717_6 +# 1719| r1719_3(int &) = Load[r] : &:r1719_2, m1712_12 +# 1719| r1719_4(int) = Load[?] : &:r1719_3, ~m? # 1719| m1719_5(int) = Store[w] : &:r1719_1, r1719_4 # 1721| v1721_1(void) = NoOp : -# 1696| v1696_5(void) = ReturnVoid : -# 1696| v1696_6(void) = AliasedUse : ~m1717_6 -# 1696| v1696_7(void) = ExitFunction : +# 1696| v1696_4(void) = ReturnVoid : +# 1696| v1696_5(void) = AliasedUse : ~m? +# 1696| v1696_6(void) = ExitFunction : # 1723| void array_structured_binding_non_ref_init() # 1723| Block 0 # 1723| v1723_1(void) = EnterFunction : -# 1723| m1723_2(unknown) = AliasedDefinition : -# 1723| m1723_3(unknown) = InitializeNonLocal : -# 1723| m1723_4(unknown) = Chi : total:m1723_2, partial:m1723_3 +# 1723| mu1723_2(unknown) = AliasedDefinition : +# 1723| mu1723_3(unknown) = InitializeNonLocal : # 1724| r1724_1(glval) = VariableAddress[xs] : -# 1724| m1724_2(int[2]) = Uninitialized[xs] : &:r1724_1 +# 1724| mu1724_2(int[2]) = Uninitialized[xs] : &:r1724_1 # 1724| r1724_3(int) = Constant[0] : # 1724| r1724_4(glval) = PointerAdd[4] : r1724_1, r1724_3 # 1724| r1724_5(int) = Constant[1] : -# 1724| m1724_6(int) = Store[?] : &:r1724_4, r1724_5 -# 1724| m1724_7(int[2]) = Chi : total:m1724_2, partial:m1724_6 -# 1724| r1724_8(int) = Constant[1] : -# 1724| r1724_9(glval) = PointerAdd[4] : r1724_1, r1724_8 -# 1724| r1724_10(int) = Constant[2] : -# 1724| m1724_11(int) = Store[?] : &:r1724_9, r1724_10 -# 1724| m1724_12(int[2]) = Chi : total:m1724_7, partial:m1724_11 +# 1724| mu1724_6(int) = Store[?] : &:r1724_4, r1724_5 +# 1724| r1724_7(int) = Constant[1] : +# 1724| r1724_8(glval) = PointerAdd[4] : r1724_1, r1724_7 +# 1724| r1724_9(int) = Constant[2] : +# 1724| mu1724_10(int) = Store[?] : &:r1724_8, r1724_9 # 1725| r1725_1(glval) = VariableAddress[(unnamed local variable)] : # 1725| r1725_2(glval) = VariableAddress[xs] : -# 1725| r1725_3(int[2]) = Load[xs] : &:r1725_2, m1724_12 -# 1725| m1725_4(int[2]) = Store[(unnamed local variable)] : &:r1725_1, r1725_3 +# 1725| r1725_3(int[2]) = Load[xs] : &:r1725_2, ~m? +# 1725| mu1725_4(int[2]) = Store[(unnamed local variable)] : &:r1725_1, r1725_3 # 1725| r1725_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 @@ -13244,181 +12109,162 @@ ir.cpp: #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 #-----| m0_10(int &) = Store[x1] : &:r1725_6, r0_9 # 1726| v1726_1(void) = NoOp : -# 1723| v1723_5(void) = ReturnVoid : -# 1723| v1723_6(void) = AliasedUse : m1723_3 -# 1723| v1723_7(void) = ExitFunction : +# 1723| v1723_4(void) = ReturnVoid : +# 1723| v1723_5(void) = AliasedUse : ~m? +# 1723| v1723_6(void) = ExitFunction : # 1731| void CapturedLambdaMyObj::CapturedLambdaMyObj() # 1731| Block 0 # 1731| v1731_1(void) = EnterFunction : -# 1731| m1731_2(unknown) = AliasedDefinition : -# 1731| m1731_3(unknown) = InitializeNonLocal : -# 1731| m1731_4(unknown) = Chi : total:m1731_2, partial:m1731_3 -# 1731| r1731_5(glval) = VariableAddress[#this] : -# 1731| m1731_6(glval) = InitializeParameter[#this] : &:r1731_5 -# 1731| r1731_7(glval) = Load[#this] : &:r1731_5, m1731_6 -# 1731| m1731_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1731_7 -# 1731| v1731_9(void) = NoOp : -# 1731| v1731_10(void) = ReturnIndirection[#this] : &:r1731_7, m1731_8 -# 1731| v1731_11(void) = ReturnVoid : -# 1731| v1731_12(void) = AliasedUse : m1731_3 -# 1731| v1731_13(void) = ExitFunction : +# 1731| mu1731_2(unknown) = AliasedDefinition : +# 1731| mu1731_3(unknown) = InitializeNonLocal : +# 1731| r1731_4(glval) = VariableAddress[#this] : +# 1731| m1731_5(glval) = InitializeParameter[#this] : &:r1731_4 +# 1731| r1731_6(glval) = Load[#this] : &:r1731_4, m1731_5 +# 1731| mu1731_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1731_6 +# 1731| v1731_8(void) = NoOp : +# 1731| v1731_9(void) = ReturnIndirection[#this] : &:r1731_6, ~m? +# 1731| v1731_10(void) = ReturnVoid : +# 1731| v1731_11(void) = AliasedUse : ~m? +# 1731| v1731_12(void) = ExitFunction : # 1734| void captured_lambda(int, int&, int&&) # 1734| Block 0 # 1734| v1734_1(void) = EnterFunction : -# 1734| m1734_2(unknown) = AliasedDefinition : -# 1734| m1734_3(unknown) = InitializeNonLocal : -# 1734| m1734_4(unknown) = Chi : total:m1734_2, partial:m1734_3 -# 1734| r1734_5(glval) = VariableAddress[x] : -# 1734| m1734_6(int) = InitializeParameter[x] : &:r1734_5 -# 1734| r1734_7(glval) = VariableAddress[y] : -# 1734| m1734_8(int &) = InitializeParameter[y] : &:r1734_7 -# 1734| r1734_9(int &) = Load[y] : &:r1734_7, m1734_8 -# 1734| m1734_10(unknown) = InitializeIndirection[y] : &:r1734_9 -# 1734| r1734_11(glval) = VariableAddress[z] : -# 1734| m1734_12(int &&) = InitializeParameter[z] : &:r1734_11 -# 1734| r1734_13(int &&) = Load[z] : &:r1734_11, m1734_12 -# 1734| m1734_14(unknown) = InitializeIndirection[z] : &:r1734_13 +# 1734| mu1734_2(unknown) = AliasedDefinition : +# 1734| mu1734_3(unknown) = InitializeNonLocal : +# 1734| r1734_4(glval) = VariableAddress[x] : +# 1734| m1734_5(int) = InitializeParameter[x] : &:r1734_4 +# 1734| r1734_6(glval) = VariableAddress[y] : +# 1734| m1734_7(int &) = InitializeParameter[y] : &:r1734_6 +# 1734| r1734_8(int &) = Load[y] : &:r1734_6, m1734_7 +# 1734| mu1734_9(unknown) = InitializeIndirection[y] : &:r1734_8 +# 1734| r1734_10(glval) = VariableAddress[z] : +# 1734| m1734_11(int &&) = InitializeParameter[z] : &:r1734_10 +# 1734| r1734_12(int &&) = Load[z] : &:r1734_10, m1734_11 +# 1734| mu1734_13(unknown) = InitializeIndirection[z] : &:r1734_12 # 1736| r1736_1(glval) = VariableAddress[obj1] : # 1736| r1736_2(glval) = VariableAddress[#temp1736:24] : -# 1736| m1736_3(CapturedLambdaMyObj) = Uninitialized[#temp1736:24] : &:r1736_2 +# 1736| mu1736_3(CapturedLambdaMyObj) = Uninitialized[#temp1736:24] : &:r1736_2 # 1736| r1736_4(glval) = FunctionAddress[CapturedLambdaMyObj] : # 1736| v1736_5(void) = Call[CapturedLambdaMyObj] : func:r1736_4, this:r1736_2 -# 1736| m1736_6(unknown) = ^CallSideEffect : ~m1734_4 -# 1736| m1736_7(unknown) = Chi : total:m1734_4, partial:m1736_6 -# 1736| m1736_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1736_2 -# 1736| m1736_9(CapturedLambdaMyObj) = Chi : total:m1736_3, partial:m1736_8 -# 1736| r1736_10(glval) = Convert : r1736_2 -# 1736| r1736_11(CapturedLambdaMyObj &) = CopyValue : r1736_10 -# 1736| m1736_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1736_1, r1736_11 +# 1736| mu1736_6(unknown) = ^CallSideEffect : ~m? +# 1736| mu1736_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1736_2 +# 1736| r1736_8(glval) = Convert : r1736_2 +# 1736| r1736_9(CapturedLambdaMyObj &) = CopyValue : r1736_8 +# 1736| m1736_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1736_1, r1736_9 # 1737| r1737_1(glval) = VariableAddress[obj2] : -# 1737| m1737_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1737_1 +# 1737| mu1737_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1737_1 # 1737| r1737_3(glval) = FunctionAddress[CapturedLambdaMyObj] : # 1737| v1737_4(void) = Call[CapturedLambdaMyObj] : func:r1737_3, this:r1737_1 -# 1737| m1737_5(unknown) = ^CallSideEffect : ~m1736_7 -# 1737| m1737_6(unknown) = Chi : total:m1736_7, partial:m1737_5 -# 1737| m1737_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1737_1 -# 1737| m1737_8(CapturedLambdaMyObj) = Chi : total:m1737_2, partial:m1737_7 +# 1737| mu1737_5(unknown) = ^CallSideEffect : ~m? +# 1737| mu1737_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1737_1 # 1739| r1739_1(glval) = VariableAddress[lambda_outer] : # 1739| r1739_2(glval) = VariableAddress[#temp1739:24] : -# 1739| m1739_3(decltype([...](...){...})) = Uninitialized[#temp1739:24] : &:r1739_2 +# 1739| mu1739_3(decltype([...](...){...})) = Uninitialized[#temp1739:24] : &:r1739_2 # 1739| r1739_4(glval) = FieldAddress[obj1] : r1739_2 # 1739| r1739_5(glval) = VariableAddress[obj1] : -# 1739| r1739_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1739_5, m1736_12 -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1739_6, m1736_9 -#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1739_4, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1739_3, partial:m0_2 +# 1739| r1739_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1739_5, m1736_10 +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1739_6, ~m? +#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1739_4, r0_1 # 1739| r1739_7(glval) = FieldAddress[obj2] : r1739_2 # 1739| r1739_8(glval) = VariableAddress[obj2] : -# 1739| r1739_9(CapturedLambdaMyObj) = Load[obj2] : &:r1739_8, m1737_8 -# 1739| m1739_10(CapturedLambdaMyObj) = Store[?] : &:r1739_7, r1739_9 -# 1739| m1739_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1739_10 -# 1739| r1739_12(glval) = FieldAddress[x] : r1739_2 -# 1739| r1739_13(glval) = VariableAddress[x] : -# 1739| r1739_14(int) = Load[x] : &:r1739_13, m1734_6 -# 1739| m1739_15(int) = Store[?] : &:r1739_12, r1739_14 -# 1739| m1739_16(decltype([...](...){...})) = Chi : total:m1739_11, partial:m1739_15 -# 1739| r1739_17(glval) = FieldAddress[y] : r1739_2 -# 1739| r1739_18(glval) = VariableAddress[y] : -# 1739| r1739_19(int &) = Load[y] : &:r1739_18, m1734_8 -# 1741| r1741_1(int) = Load[?] : &:r1739_19, ~m1734_10 -# 1741| m1741_2(int) = Store[?] : &:r1739_17, r1741_1 -# 1741| m1741_3(decltype([...](...){...})) = Chi : total:m1739_16, partial:m1741_2 -# 1739| r1739_20(glval) = FieldAddress[z] : r1739_2 -# 1739| r1739_21(glval) = VariableAddress[z] : -# 1739| r1739_22(int &&) = Load[z] : &:r1739_21, m1734_12 -# 1741| r1741_4(int) = Load[?] : &:r1739_22, ~m1734_14 -# 1741| m1741_5(int) = Store[?] : &:r1739_20, r1741_4 -# 1741| m1741_6(decltype([...](...){...})) = Chi : total:m1741_3, partial:m1741_5 -# 1739| r1739_23(decltype([...](...){...})) = Load[#temp1739:24] : &:r1739_2, m1741_6 -# 1739| m1739_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1739_1, r1739_23 +# 1739| r1739_9(CapturedLambdaMyObj) = Load[obj2] : &:r1739_8, ~m? +# 1739| mu1739_10(CapturedLambdaMyObj) = Store[?] : &:r1739_7, r1739_9 +# 1739| r1739_11(glval) = FieldAddress[x] : r1739_2 +# 1739| r1739_12(glval) = VariableAddress[x] : +# 1739| r1739_13(int) = Load[x] : &:r1739_12, m1734_5 +# 1739| mu1739_14(int) = Store[?] : &:r1739_11, r1739_13 +# 1739| r1739_15(glval) = FieldAddress[y] : r1739_2 +# 1739| r1739_16(glval) = VariableAddress[y] : +# 1739| r1739_17(int &) = Load[y] : &:r1739_16, m1734_7 +# 1741| r1741_1(int) = Load[?] : &:r1739_17, ~m? +# 1741| mu1741_2(int) = Store[?] : &:r1739_15, r1741_1 +# 1739| r1739_18(glval) = FieldAddress[z] : r1739_2 +# 1739| r1739_19(glval) = VariableAddress[z] : +# 1739| r1739_20(int &&) = Load[z] : &:r1739_19, m1734_11 +# 1741| r1741_3(int) = Load[?] : &:r1739_20, ~m? +# 1741| mu1741_4(int) = Store[?] : &:r1739_18, r1741_3 +# 1739| r1739_21(decltype([...](...){...})) = Load[#temp1739:24] : &:r1739_2, ~m? +# 1739| m1739_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1739_1, r1739_21 # 1742| v1742_1(void) = NoOp : -# 1734| v1734_15(void) = ReturnIndirection[y] : &:r1734_9, m1734_10 -# 1734| v1734_16(void) = ReturnIndirection[z] : &:r1734_13, m1734_14 -# 1734| v1734_17(void) = ReturnVoid : -# 1734| v1734_18(void) = AliasedUse : ~m1737_6 -# 1734| v1734_19(void) = ExitFunction : +# 1734| v1734_14(void) = ReturnIndirection[y] : &:r1734_8, ~m? +# 1734| v1734_15(void) = ReturnIndirection[z] : &:r1734_12, ~m? +# 1734| v1734_16(void) = ReturnVoid : +# 1734| v1734_17(void) = AliasedUse : ~m? +# 1734| v1734_18(void) = ExitFunction : # 1739| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1739, col. 25)::operator()() const # 1739| Block 0 # 1739| v1739_1(void) = EnterFunction : -# 1739| m1739_2(unknown) = AliasedDefinition : -# 1739| m1739_3(unknown) = InitializeNonLocal : -# 1739| m1739_4(unknown) = Chi : total:m1739_2, partial:m1739_3 -# 1739| r1739_5(glval) = VariableAddress[#this] : -# 1739| m1739_6(glval) = InitializeParameter[#this] : &:r1739_5 -# 1739| r1739_7(glval) = Load[#this] : &:r1739_5, m1739_6 -# 1739| m1739_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1739_7 +# 1739| mu1739_2(unknown) = AliasedDefinition : +# 1739| mu1739_3(unknown) = InitializeNonLocal : +# 1739| r1739_4(glval) = VariableAddress[#this] : +# 1739| m1739_5(glval) = InitializeParameter[#this] : &:r1739_4 +# 1739| r1739_6(glval) = Load[#this] : &:r1739_4, m1739_5 +# 1739| mu1739_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1739_6 # 1740| r1740_1(glval) = VariableAddress[lambda_inner] : # 1740| r1740_2(glval) = VariableAddress[#temp1740:28] : -# 1740| m1740_3(decltype([...](...){...})) = Uninitialized[#temp1740:28] : &:r1740_2 +# 1740| mu1740_3(decltype([...](...){...})) = Uninitialized[#temp1740:28] : &:r1740_2 # 1740| r1740_4(glval) = FieldAddress[obj1] : r1740_2 # 1740| r1740_5(glval) = VariableAddress[#this] : -# 1740| r1740_6(lambda [] type at line 1740, col. 29 *) = Load[#this] : &:r1740_5, m1739_6 +# 1740| r1740_6(lambda [] type at line 1740, col. 29 *) = Load[#this] : &:r1740_5, m1739_5 # 1740| r1740_7(glval) = FieldAddress[obj1] : r1740_6 -# 1740| r1740_8(CapturedLambdaMyObj) = Load[?] : &:r1740_7, ~m1739_8 -# 1740| m1740_9(CapturedLambdaMyObj) = Store[?] : &:r1740_4, r1740_8 -# 1740| m1740_10(decltype([...](...){...})) = Chi : total:m1740_3, partial:m1740_9 -# 1740| r1740_11(glval) = FieldAddress[obj2] : r1740_2 -# 1740| r1740_12(glval) = VariableAddress[#this] : -# 1740| r1740_13(lambda [] type at line 1740, col. 29 *) = Load[#this] : &:r1740_12, m1739_6 -# 1740| r1740_14(glval) = FieldAddress[obj2] : r1740_13 -# 1740| r1740_15(CapturedLambdaMyObj) = Load[?] : &:r1740_14, ~m1739_8 -# 1740| m1740_16(CapturedLambdaMyObj) = Store[?] : &:r1740_11, r1740_15 -# 1740| m1740_17(decltype([...](...){...})) = Chi : total:m1740_10, partial:m1740_16 -# 1740| r1740_18(glval) = FieldAddress[x] : r1740_2 -# 1740| r1740_19(glval) = VariableAddress[#this] : -# 1740| r1740_20(lambda [] type at line 1739, col. 25 *) = Load[#this] : &:r1740_19, m1739_6 -# 1740| r1740_21(glval) = FieldAddress[x] : r1740_20 -# 1740| r1740_22(int) = Load[?] : &:r1740_21, ~m1739_8 -# 1740| m1740_23(int) = Store[?] : &:r1740_18, r1740_22 -# 1740| m1740_24(decltype([...](...){...})) = Chi : total:m1740_17, partial:m1740_23 -# 1740| r1740_25(glval) = FieldAddress[y] : r1740_2 -# 1740| r1740_26(glval) = VariableAddress[#this] : -# 1740| r1740_27(lambda [] type at line 1739, col. 25 *) = Load[#this] : &:r1740_26, m1739_6 -# 1740| r1740_28(glval) = FieldAddress[y] : r1740_27 -# 1740| r1740_29(int) = Load[?] : &:r1740_28, ~m1739_8 -# 1740| m1740_30(int) = Store[?] : &:r1740_25, r1740_29 -# 1740| m1740_31(decltype([...](...){...})) = Chi : total:m1740_24, partial:m1740_30 -# 1740| r1740_32(glval) = FieldAddress[z] : r1740_2 -# 1740| r1740_33(glval) = VariableAddress[#this] : -# 1740| r1740_34(lambda [] type at line 1739, col. 25 *) = Load[#this] : &:r1740_33, m1739_6 -# 1740| r1740_35(glval) = FieldAddress[z] : r1740_34 -# 1740| r1740_36(int) = Load[?] : &:r1740_35, ~m1739_8 -# 1740| m1740_37(int) = Store[?] : &:r1740_32, r1740_36 -# 1740| m1740_38(decltype([...](...){...})) = Chi : total:m1740_31, partial:m1740_37 -# 1740| r1740_39(decltype([...](...){...})) = Load[#temp1740:28] : &:r1740_2, m1740_38 -# 1740| m1740_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1740_1, r1740_39 +# 1740| r1740_8(CapturedLambdaMyObj) = Load[?] : &:r1740_7, ~m? +# 1740| mu1740_9(CapturedLambdaMyObj) = Store[?] : &:r1740_4, r1740_8 +# 1740| r1740_10(glval) = FieldAddress[obj2] : r1740_2 +# 1740| r1740_11(glval) = VariableAddress[#this] : +# 1740| r1740_12(lambda [] type at line 1740, col. 29 *) = Load[#this] : &:r1740_11, m1739_5 +# 1740| r1740_13(glval) = FieldAddress[obj2] : r1740_12 +# 1740| r1740_14(CapturedLambdaMyObj) = Load[?] : &:r1740_13, ~m? +# 1740| mu1740_15(CapturedLambdaMyObj) = Store[?] : &:r1740_10, r1740_14 +# 1740| r1740_16(glval) = FieldAddress[x] : r1740_2 +# 1740| r1740_17(glval) = VariableAddress[#this] : +# 1740| r1740_18(lambda [] type at line 1739, col. 25 *) = Load[#this] : &:r1740_17, m1739_5 +# 1740| r1740_19(glval) = FieldAddress[x] : r1740_18 +# 1740| r1740_20(int) = Load[?] : &:r1740_19, ~m? +# 1740| mu1740_21(int) = Store[?] : &:r1740_16, r1740_20 +# 1740| r1740_22(glval) = FieldAddress[y] : r1740_2 +# 1740| r1740_23(glval) = VariableAddress[#this] : +# 1740| r1740_24(lambda [] type at line 1739, col. 25 *) = Load[#this] : &:r1740_23, m1739_5 +# 1740| r1740_25(glval) = FieldAddress[y] : r1740_24 +# 1740| r1740_26(int) = Load[?] : &:r1740_25, ~m? +# 1740| mu1740_27(int) = Store[?] : &:r1740_22, r1740_26 +# 1740| r1740_28(glval) = FieldAddress[z] : r1740_2 +# 1740| r1740_29(glval) = VariableAddress[#this] : +# 1740| r1740_30(lambda [] type at line 1739, col. 25 *) = Load[#this] : &:r1740_29, m1739_5 +# 1740| r1740_31(glval) = FieldAddress[z] : r1740_30 +# 1740| r1740_32(int) = Load[?] : &:r1740_31, ~m? +# 1740| mu1740_33(int) = Store[?] : &:r1740_28, r1740_32 +# 1740| r1740_34(decltype([...](...){...})) = Load[#temp1740:28] : &:r1740_2, ~m? +# 1740| m1740_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1740_1, r1740_34 # 1741| v1741_1(void) = NoOp : -# 1739| v1739_9(void) = ReturnIndirection[#this] : &:r1739_7, m1739_8 -# 1739| v1739_10(void) = ReturnVoid : -# 1739| v1739_11(void) = AliasedUse : m1739_3 -# 1739| v1739_12(void) = ExitFunction : +# 1739| v1739_8(void) = ReturnIndirection[#this] : &:r1739_6, ~m? +# 1739| v1739_9(void) = ReturnVoid : +# 1739| v1739_10(void) = AliasedUse : ~m? +# 1739| v1739_11(void) = ExitFunction : # 1740| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1739, col. 25)::operator()() const)::(lambda [] type at line 1740, col. 29)::operator()() const # 1740| Block 0 # 1740| v1740_1(void) = EnterFunction : -# 1740| m1740_2(unknown) = AliasedDefinition : -# 1740| m1740_3(unknown) = InitializeNonLocal : -# 1740| m1740_4(unknown) = Chi : total:m1740_2, partial:m1740_3 -# 1740| r1740_5(glval) = VariableAddress[#this] : -# 1740| m1740_6(glval) = InitializeParameter[#this] : &:r1740_5 -# 1740| r1740_7(glval) = Load[#this] : &:r1740_5, m1740_6 -# 1740| m1740_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1740_7 +# 1740| mu1740_2(unknown) = AliasedDefinition : +# 1740| mu1740_3(unknown) = InitializeNonLocal : +# 1740| r1740_4(glval) = VariableAddress[#this] : +# 1740| m1740_5(glval) = InitializeParameter[#this] : &:r1740_4 +# 1740| r1740_6(glval) = Load[#this] : &:r1740_4, m1740_5 +# 1740| mu1740_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1740_6 +# 1740| v1740_8(void) = NoOp : # 1740| v1740_9(void) = NoOp : -# 1740| v1740_10(void) = NoOp : -# 1740| v1740_11(void) = ReturnIndirection[#this] : &:r1740_7, m1740_8 -# 1740| v1740_12(void) = ReturnVoid : -# 1740| v1740_13(void) = AliasedUse : m1740_3 -# 1740| v1740_14(void) = ExitFunction : +# 1740| v1740_10(void) = ReturnIndirection[#this] : &:r1740_6, ~m? +# 1740| v1740_11(void) = ReturnVoid : +# 1740| v1740_12(void) = AliasedUse : ~m? +# 1740| v1740_13(void) = ExitFunction : # 1744| int goto_on_same_line() # 1744| Block 0 # 1744| v1744_1(void) = EnterFunction : -# 1744| m1744_2(unknown) = AliasedDefinition : -# 1744| m1744_3(unknown) = InitializeNonLocal : -# 1744| m1744_4(unknown) = Chi : total:m1744_2, partial:m1744_3 +# 1744| mu1744_2(unknown) = AliasedDefinition : +# 1744| mu1744_3(unknown) = InitializeNonLocal : # 1745| r1745_1(glval) = VariableAddress[x] : # 1745| r1745_2(int) = Constant[42] : # 1745| m1745_3(int) = Store[x] : &:r1745_1, r1745_2 @@ -13428,463 +12274,421 @@ ir.cpp: # 1747| r1747_2(glval) = VariableAddress[x] : # 1747| r1747_3(int) = Load[x] : &:r1747_2, m1745_3 # 1747| m1747_4(int) = Store[#return] : &:r1747_1, r1747_3 -# 1744| r1744_5(glval) = VariableAddress[#return] : -# 1744| v1744_6(void) = ReturnValue : &:r1744_5, m1747_4 -# 1744| v1744_7(void) = AliasedUse : m1744_3 -# 1744| v1744_8(void) = ExitFunction : +# 1744| r1744_4(glval) = VariableAddress[#return] : +# 1744| v1744_5(void) = ReturnValue : &:r1744_4, m1747_4 +# 1744| v1744_6(void) = AliasedUse : ~m? +# 1744| v1744_7(void) = ExitFunction : # 1752| void TrivialLambdaClass::m() const # 1752| Block 0 # 1752| v1752_1(void) = EnterFunction : -# 1752| m1752_2(unknown) = AliasedDefinition : -# 1752| m1752_3(unknown) = InitializeNonLocal : -# 1752| m1752_4(unknown) = Chi : total:m1752_2, partial:m1752_3 -# 1752| r1752_5(glval) = VariableAddress[#this] : -# 1752| m1752_6(glval) = InitializeParameter[#this] : &:r1752_5 -# 1752| r1752_7(glval) = Load[#this] : &:r1752_5, m1752_6 -# 1752| m1752_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1752_7 +# 1752| mu1752_2(unknown) = AliasedDefinition : +# 1752| mu1752_3(unknown) = InitializeNonLocal : +# 1752| r1752_4(glval) = VariableAddress[#this] : +# 1752| m1752_5(glval) = InitializeParameter[#this] : &:r1752_4 +# 1752| r1752_6(glval) = Load[#this] : &:r1752_4, m1752_5 +# 1752| mu1752_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1752_6 # 1753| r1753_1(glval) = VariableAddress[l_m_outer] : # 1753| r1753_2(glval) = VariableAddress[#temp1753:25] : -# 1753| m1753_3(decltype([...](...){...})) = Uninitialized[#temp1753:25] : &:r1753_2 +# 1753| mu1753_3(decltype([...](...){...})) = Uninitialized[#temp1753:25] : &:r1753_2 # 1753| r1753_4(glval) = FieldAddress[(captured this)] : r1753_2 # 1753| r1753_5(glval) = VariableAddress[#this] : -# 1753| r1753_6(TrivialLambdaClass *) = Load[#this] : &:r1753_5, m1752_6 -# 1753| r1753_7(TrivialLambdaClass) = Load[?] : &:r1753_6, ~m1752_8 -# 1753| m1753_8(TrivialLambdaClass) = Store[?] : &:r1753_4, r1753_7 -# 1753| r1753_9(decltype([...](...){...})) = Load[#temp1753:25] : &:r1753_2, ~m1753_8 +# 1753| r1753_6(TrivialLambdaClass *) = Load[#this] : &:r1753_5, m1752_5 +# 1753| r1753_7(TrivialLambdaClass) = Load[?] : &:r1753_6, ~m? +# 1753| mu1753_8(TrivialLambdaClass) = Store[?] : &:r1753_4, r1753_7 +# 1753| r1753_9(decltype([...](...){...})) = Load[#temp1753:25] : &:r1753_2, ~m? # 1753| m1753_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1753_1, r1753_9 # 1760| v1760_1(void) = NoOp : -# 1752| v1752_9(void) = ReturnIndirection[#this] : &:r1752_7, m1752_8 -# 1752| v1752_10(void) = ReturnVoid : -# 1752| v1752_11(void) = AliasedUse : m1752_3 -# 1752| v1752_12(void) = ExitFunction : +# 1752| v1752_8(void) = ReturnIndirection[#this] : &:r1752_6, ~m? +# 1752| v1752_9(void) = ReturnVoid : +# 1752| v1752_10(void) = AliasedUse : ~m? +# 1752| v1752_11(void) = ExitFunction : # 1753| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1753, col. 26)::operator()() const # 1753| Block 0 # 1753| v1753_1(void) = EnterFunction : -# 1753| m1753_2(unknown) = AliasedDefinition : -# 1753| m1753_3(unknown) = InitializeNonLocal : -# 1753| m1753_4(unknown) = Chi : total:m1753_2, partial:m1753_3 -# 1753| r1753_5(glval) = VariableAddress[#this] : -# 1753| m1753_6(glval) = InitializeParameter[#this] : &:r1753_5 -# 1753| r1753_7(glval) = Load[#this] : &:r1753_5, m1753_6 -# 1753| m1753_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1753_7 +# 1753| mu1753_2(unknown) = AliasedDefinition : +# 1753| mu1753_3(unknown) = InitializeNonLocal : +# 1753| r1753_4(glval) = VariableAddress[#this] : +# 1753| m1753_5(glval) = InitializeParameter[#this] : &:r1753_4 +# 1753| r1753_6(glval) = Load[#this] : &:r1753_4, m1753_5 +# 1753| mu1753_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1753_6 # 1754| r1754_1(glval) = VariableAddress[#this] : -# 1754| r1754_2(lambda [] type at line 1753, col. 26 *) = Load[#this] : &:r1754_1, m1753_6 +# 1754| r1754_2(lambda [] type at line 1753, col. 26 *) = Load[#this] : &:r1754_1, m1753_5 # 1754| r1754_3(glval) = FieldAddress[(captured this)] : r1754_2 # 1754| r1754_4(TrivialLambdaClass *) = CopyValue : r1754_3 # 1754| r1754_5(glval) = FunctionAddress[m] : # 1754| v1754_6(void) = Call[m] : func:r1754_5, this:r1754_4 -# 1754| m1754_7(unknown) = ^CallSideEffect : ~m1753_4 -# 1754| m1754_8(unknown) = Chi : total:m1753_4, partial:m1754_7 -# 1754| v1754_9(void) = ^IndirectReadSideEffect[-1] : &:r1754_4, ~m1753_8 +# 1754| mu1754_7(unknown) = ^CallSideEffect : ~m? +# 1754| v1754_8(void) = ^IndirectReadSideEffect[-1] : &:r1754_4, ~m? # 1756| r1756_1(glval) = VariableAddress[l_m_inner] : # 1756| r1756_2(glval) = VariableAddress[#temp1756:29] : -# 1756| m1756_3(decltype([...](...){...})) = Uninitialized[#temp1756:29] : &:r1756_2 +# 1756| mu1756_3(decltype([...](...){...})) = Uninitialized[#temp1756:29] : &:r1756_2 # 1756| r1756_4(glval) = FieldAddress[(captured this)] : r1756_2 # 1756| r1756_5(glval) = VariableAddress[#this] : -# 1756| r1756_6(lambda [] type at line 1756, col. 30 *) = Load[#this] : &:r1756_5, m1753_6 +# 1756| r1756_6(lambda [] type at line 1756, col. 30 *) = Load[#this] : &:r1756_5, m1753_5 # 1756| r1756_7(glval) = FieldAddress[(captured this)] : r1756_6 -# 1756| r1756_8(TrivialLambdaClass) = Load[?] : &:r1756_7, ~m1753_8 -# 1756| m1756_9(TrivialLambdaClass) = Store[?] : &:r1756_4, r1756_8 -# 1756| r1756_10(decltype([...](...){...})) = Load[#temp1756:29] : &:r1756_2, ~m1756_9 +# 1756| r1756_8(TrivialLambdaClass) = Load[?] : &:r1756_7, ~m? +# 1756| mu1756_9(TrivialLambdaClass) = Store[?] : &:r1756_4, r1756_8 +# 1756| r1756_10(decltype([...](...){...})) = Load[#temp1756:29] : &:r1756_2, ~m? # 1756| m1756_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1756_1, r1756_10 # 1759| v1759_1(void) = NoOp : -# 1753| v1753_9(void) = ReturnIndirection[#this] : &:r1753_7, m1753_8 -# 1753| v1753_10(void) = ReturnVoid : -# 1753| v1753_11(void) = AliasedUse : ~m1754_8 -# 1753| v1753_12(void) = ExitFunction : +# 1753| v1753_8(void) = ReturnIndirection[#this] : &:r1753_6, ~m? +# 1753| v1753_9(void) = ReturnVoid : +# 1753| v1753_10(void) = AliasedUse : ~m? +# 1753| v1753_11(void) = ExitFunction : # 1756| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1753, col. 26)::operator()() const)::(lambda [] type at line 1756, col. 30)::operator()() const # 1756| Block 0 # 1756| v1756_1(void) = EnterFunction : -# 1756| m1756_2(unknown) = AliasedDefinition : -# 1756| m1756_3(unknown) = InitializeNonLocal : -# 1756| m1756_4(unknown) = Chi : total:m1756_2, partial:m1756_3 -# 1756| r1756_5(glval) = VariableAddress[#this] : -# 1756| m1756_6(glval) = InitializeParameter[#this] : &:r1756_5 -# 1756| r1756_7(glval) = Load[#this] : &:r1756_5, m1756_6 -# 1756| m1756_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1756_7 +# 1756| mu1756_2(unknown) = AliasedDefinition : +# 1756| mu1756_3(unknown) = InitializeNonLocal : +# 1756| r1756_4(glval) = VariableAddress[#this] : +# 1756| m1756_5(glval) = InitializeParameter[#this] : &:r1756_4 +# 1756| r1756_6(glval) = Load[#this] : &:r1756_4, m1756_5 +# 1756| mu1756_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1756_6 # 1757| r1757_1(glval) = VariableAddress[#this] : -# 1757| r1757_2(lambda [] type at line 1756, col. 30 *) = Load[#this] : &:r1757_1, m1756_6 +# 1757| r1757_2(lambda [] type at line 1756, col. 30 *) = Load[#this] : &:r1757_1, m1756_5 # 1757| r1757_3(glval) = FieldAddress[(captured this)] : r1757_2 # 1757| r1757_4(TrivialLambdaClass *) = CopyValue : r1757_3 # 1757| r1757_5(glval) = FunctionAddress[m] : # 1757| v1757_6(void) = Call[m] : func:r1757_5, this:r1757_4 -# 1757| m1757_7(unknown) = ^CallSideEffect : ~m1756_4 -# 1757| m1757_8(unknown) = Chi : total:m1756_4, partial:m1757_7 -# 1757| v1757_9(void) = ^IndirectReadSideEffect[-1] : &:r1757_4, ~m1756_8 +# 1757| mu1757_7(unknown) = ^CallSideEffect : ~m? +# 1757| v1757_8(void) = ^IndirectReadSideEffect[-1] : &:r1757_4, ~m? # 1758| v1758_1(void) = NoOp : -# 1756| v1756_9(void) = ReturnIndirection[#this] : &:r1756_7, m1756_8 -# 1756| v1756_10(void) = ReturnVoid : -# 1756| v1756_11(void) = AliasedUse : ~m1757_8 -# 1756| v1756_12(void) = ExitFunction : +# 1756| v1756_8(void) = ReturnIndirection[#this] : &:r1756_6, ~m? +# 1756| v1756_9(void) = ReturnVoid : +# 1756| v1756_10(void) = AliasedUse : ~m? +# 1756| v1756_11(void) = ExitFunction : # 1763| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) # 1763| Block 0 # 1763| v1763_1(void) = EnterFunction : -# 1763| m1763_2(unknown) = AliasedDefinition : -# 1763| m1763_3(unknown) = InitializeNonLocal : -# 1763| m1763_4(unknown) = Chi : total:m1763_2, partial:m1763_3 -# 1763| r1763_5(glval) = VariableAddress[p1] : -# 1763| m1763_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1763_5 -# 1763| r1763_7(glval) = VariableAddress[p2] : -# 1763| m1763_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1763_7 -# 1763| r1763_9(TrivialLambdaClass &) = Load[p2] : &:r1763_7, m1763_8 -# 1763| m1763_10(unknown) = InitializeIndirection[p2] : &:r1763_9 -# 1763| r1763_11(glval) = VariableAddress[p3] : -# 1763| m1763_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1763_11 -# 1763| r1763_13(TrivialLambdaClass &&) = Load[p3] : &:r1763_11, m1763_12 -# 1763| m1763_14(unknown) = InitializeIndirection[p3] : &:r1763_13 +# 1763| mu1763_2(unknown) = AliasedDefinition : +# 1763| mu1763_3(unknown) = InitializeNonLocal : +# 1763| r1763_4(glval) = VariableAddress[p1] : +# 1763| m1763_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1763_4 +# 1763| r1763_6(glval) = VariableAddress[p2] : +# 1763| m1763_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1763_6 +# 1763| r1763_8(TrivialLambdaClass &) = Load[p2] : &:r1763_6, m1763_7 +# 1763| mu1763_9(unknown) = InitializeIndirection[p2] : &:r1763_8 +# 1763| r1763_10(glval) = VariableAddress[p3] : +# 1763| m1763_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1763_10 +# 1763| r1763_12(TrivialLambdaClass &&) = Load[p3] : &:r1763_10, m1763_11 +# 1763| mu1763_13(unknown) = InitializeIndirection[p3] : &:r1763_12 # 1764| r1764_1(glval) = VariableAddress[l1] : # 1764| m1764_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1764_1 # 1765| r1765_1(glval) = VariableAddress[l2] : # 1765| r1765_2(glval) = VariableAddress[#temp1765:36] : # 1765| r1765_3(TrivialLambdaClass) = Constant[0] : -# 1765| m1765_4(TrivialLambdaClass) = Store[#temp1765:36] : &:r1765_2, r1765_3 +# 1765| mu1765_4(TrivialLambdaClass) = Store[#temp1765:36] : &:r1765_2, r1765_3 # 1765| r1765_5(glval) = Convert : r1765_2 # 1765| r1765_6(TrivialLambdaClass &) = CopyValue : r1765_5 # 1765| m1765_7(TrivialLambdaClass &) = Store[l2] : &:r1765_1, r1765_6 # 1767| r1767_1(glval) = VariableAddress[l_outer1] : # 1767| r1767_2(glval) = VariableAddress[#temp1767:20] : -# 1767| m1767_3(decltype([...](...){...})) = Uninitialized[#temp1767:20] : &:r1767_2 +# 1767| mu1767_3(decltype([...](...){...})) = Uninitialized[#temp1767:20] : &:r1767_2 # 1767| r1767_4(glval) = FieldAddress[p1] : r1767_2 # 1767| r1767_5(glval) = VariableAddress[p1] : -# 1767| r1767_6(TrivialLambdaClass) = Load[p1] : &:r1767_5, m1763_6 -# 1767| m1767_7(TrivialLambdaClass) = Store[?] : &:r1767_4, r1767_6 -# 1767| m1767_8(decltype([...](...){...})) = Chi : total:m1767_3, partial:m1767_7 -# 1767| r1767_9(glval) = FieldAddress[p2] : r1767_2 -# 1767| r1767_10(glval) = VariableAddress[p2] : -# 1767| r1767_11(TrivialLambdaClass &) = Load[p2] : &:r1767_10, m1763_8 -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1767_11, ~m1763_10 -#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1767_9, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1767_8, partial:m0_2 -# 1767| r1767_12(glval) = FieldAddress[p3] : r1767_2 -# 1767| r1767_13(glval) = VariableAddress[p3] : -# 1767| r1767_14(TrivialLambdaClass &&) = Load[p3] : &:r1767_13, m1763_12 -#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1767_14, ~m1763_14 -#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1767_12, r0_4 -#-----| m0_6(decltype([...](...){...})) = Chi : total:m0_3, partial:m0_5 -# 1767| r1767_15(glval) = FieldAddress[l1] : r1767_2 -# 1767| r1767_16(glval) = VariableAddress[l1] : -# 1767| r1767_17(TrivialLambdaClass) = Load[l1] : &:r1767_16, m1764_2 -# 1767| m1767_18(TrivialLambdaClass) = Store[?] : &:r1767_15, r1767_17 -# 1767| m1767_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1767_18 -# 1767| r1767_20(glval) = FieldAddress[l2] : r1767_2 -# 1767| r1767_21(glval) = VariableAddress[l2] : -# 1767| r1767_22(TrivialLambdaClass &) = Load[l2] : &:r1767_21, m1765_7 -#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1767_22, m1765_4 -#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1767_20, r0_7 -#-----| m0_9(decltype([...](...){...})) = Chi : total:m1767_19, partial:m0_8 -# 1767| r1767_23(decltype([...](...){...})) = Load[#temp1767:20] : &:r1767_2, m0_9 -# 1767| m1767_24(decltype([...](...){...})) = Store[l_outer1] : &:r1767_1, r1767_23 +# 1767| r1767_6(TrivialLambdaClass) = Load[p1] : &:r1767_5, m1763_5 +# 1767| mu1767_7(TrivialLambdaClass) = Store[?] : &:r1767_4, r1767_6 +# 1767| r1767_8(glval) = FieldAddress[p2] : r1767_2 +# 1767| r1767_9(glval) = VariableAddress[p2] : +# 1767| r1767_10(TrivialLambdaClass &) = Load[p2] : &:r1767_9, m1763_7 +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1767_10, ~m? +#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1767_8, r0_1 +# 1767| r1767_11(glval) = FieldAddress[p3] : r1767_2 +# 1767| r1767_12(glval) = VariableAddress[p3] : +# 1767| r1767_13(TrivialLambdaClass &&) = Load[p3] : &:r1767_12, m1763_11 +#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1767_13, ~m? +#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1767_11, r0_3 +# 1767| r1767_14(glval) = FieldAddress[l1] : r1767_2 +# 1767| r1767_15(glval) = VariableAddress[l1] : +# 1767| r1767_16(TrivialLambdaClass) = Load[l1] : &:r1767_15, m1764_2 +# 1767| mu1767_17(TrivialLambdaClass) = Store[?] : &:r1767_14, r1767_16 +# 1767| r1767_18(glval) = FieldAddress[l2] : r1767_2 +# 1767| r1767_19(glval) = VariableAddress[l2] : +# 1767| r1767_20(TrivialLambdaClass &) = Load[l2] : &:r1767_19, m1765_7 +#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1767_20, ~m? +#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1767_18, r0_5 +# 1767| r1767_21(decltype([...](...){...})) = Load[#temp1767:20] : &:r1767_2, ~m? +# 1767| m1767_22(decltype([...](...){...})) = Store[l_outer1] : &:r1767_1, r1767_21 # 1770| v1770_1(void) = NoOp : -# 1763| v1763_15(void) = ReturnIndirection[p2] : &:r1763_9, m1763_10 -# 1763| v1763_16(void) = ReturnIndirection[p3] : &:r1763_13, m1763_14 -# 1763| v1763_17(void) = ReturnVoid : -# 1763| v1763_18(void) = AliasedUse : m1763_3 -# 1763| v1763_19(void) = ExitFunction : +# 1763| v1763_14(void) = ReturnIndirection[p2] : &:r1763_8, ~m? +# 1763| v1763_15(void) = ReturnIndirection[p3] : &:r1763_12, ~m? +# 1763| v1763_16(void) = ReturnVoid : +# 1763| v1763_17(void) = AliasedUse : ~m? +# 1763| v1763_18(void) = ExitFunction : # 1767| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1767, col. 21)::operator()() const # 1767| Block 0 # 1767| v1767_1(void) = EnterFunction : -# 1767| m1767_2(unknown) = AliasedDefinition : -# 1767| m1767_3(unknown) = InitializeNonLocal : -# 1767| m1767_4(unknown) = Chi : total:m1767_2, partial:m1767_3 -# 1767| r1767_5(glval) = VariableAddress[#this] : -# 1767| m1767_6(glval) = InitializeParameter[#this] : &:r1767_5 -# 1767| r1767_7(glval) = Load[#this] : &:r1767_5, m1767_6 -# 1767| m1767_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1767_7 +# 1767| mu1767_2(unknown) = AliasedDefinition : +# 1767| mu1767_3(unknown) = InitializeNonLocal : +# 1767| r1767_4(glval) = VariableAddress[#this] : +# 1767| m1767_5(glval) = InitializeParameter[#this] : &:r1767_4 +# 1767| r1767_6(glval) = Load[#this] : &:r1767_4, m1767_5 +# 1767| mu1767_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1767_6 # 1768| r1768_1(glval) = VariableAddress[l_inner1] : # 1768| r1768_2(glval) = VariableAddress[#temp1768:24] : -# 1768| m1768_3(decltype([...](...){...})) = Uninitialized[#temp1768:24] : &:r1768_2 +# 1768| mu1768_3(decltype([...](...){...})) = Uninitialized[#temp1768:24] : &:r1768_2 # 1768| r1768_4(glval) = FieldAddress[p1] : r1768_2 # 1768| r1768_5(glval) = VariableAddress[#this] : -# 1768| r1768_6(lambda [] type at line 1768, col. 25 *) = Load[#this] : &:r1768_5, m1767_6 +# 1768| r1768_6(lambda [] type at line 1768, col. 25 *) = Load[#this] : &:r1768_5, m1767_5 # 1768| r1768_7(glval) = FieldAddress[p1] : r1768_6 -# 1768| r1768_8(TrivialLambdaClass) = Load[?] : &:r1768_7, ~m1767_8 -# 1768| m1768_9(TrivialLambdaClass) = Store[?] : &:r1768_4, r1768_8 -# 1768| r1768_10(decltype([...](...){...})) = Load[#temp1768:24] : &:r1768_2, ~m1768_9 +# 1768| r1768_8(TrivialLambdaClass) = Load[?] : &:r1768_7, ~m? +# 1768| mu1768_9(TrivialLambdaClass) = Store[?] : &:r1768_4, r1768_8 +# 1768| r1768_10(decltype([...](...){...})) = Load[#temp1768:24] : &:r1768_2, ~m? # 1768| m1768_11(decltype([...](...){...})) = Store[l_inner1] : &:r1768_1, r1768_10 # 1769| v1769_1(void) = NoOp : -# 1767| v1767_9(void) = ReturnIndirection[#this] : &:r1767_7, m1767_8 -# 1767| v1767_10(void) = ReturnVoid : -# 1767| v1767_11(void) = AliasedUse : m1767_3 -# 1767| v1767_12(void) = ExitFunction : +# 1767| v1767_8(void) = ReturnIndirection[#this] : &:r1767_6, ~m? +# 1767| v1767_9(void) = ReturnVoid : +# 1767| v1767_10(void) = AliasedUse : ~m? +# 1767| v1767_11(void) = ExitFunction : # 1768| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1767, col. 21)::operator()() const)::(lambda [] type at line 1768, col. 25)::operator()() const # 1768| Block 0 # 1768| v1768_1(void) = EnterFunction : -# 1768| m1768_2(unknown) = AliasedDefinition : -# 1768| m1768_3(unknown) = InitializeNonLocal : -# 1768| m1768_4(unknown) = Chi : total:m1768_2, partial:m1768_3 -# 1768| r1768_5(glval) = VariableAddress[#this] : -# 1768| m1768_6(glval) = InitializeParameter[#this] : &:r1768_5 -# 1768| r1768_7(glval) = Load[#this] : &:r1768_5, m1768_6 -# 1768| m1768_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1768_7 -# 1768| v1768_9(void) = NoOp : -# 1768| v1768_10(void) = ReturnIndirection[#this] : &:r1768_7, m1768_8 -# 1768| v1768_11(void) = ReturnVoid : -# 1768| v1768_12(void) = AliasedUse : m1768_3 -# 1768| v1768_13(void) = ExitFunction : +# 1768| mu1768_2(unknown) = AliasedDefinition : +# 1768| mu1768_3(unknown) = InitializeNonLocal : +# 1768| r1768_4(glval) = VariableAddress[#this] : +# 1768| m1768_5(glval) = InitializeParameter[#this] : &:r1768_4 +# 1768| r1768_6(glval) = Load[#this] : &:r1768_4, m1768_5 +# 1768| mu1768_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1768_6 +# 1768| v1768_8(void) = NoOp : +# 1768| v1768_9(void) = ReturnIndirection[#this] : &:r1768_6, ~m? +# 1768| v1768_10(void) = ReturnVoid : +# 1768| v1768_11(void) = AliasedUse : ~m? +# 1768| v1768_12(void) = ExitFunction : # 1775| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() # 1775| Block 0 # 1775| v1775_1(void) = EnterFunction : -# 1775| m1775_2(unknown) = AliasedDefinition : -# 1775| m1775_3(unknown) = InitializeNonLocal : -# 1775| m1775_4(unknown) = Chi : total:m1775_2, partial:m1775_3 -# 1775| r1775_5(glval) = VariableAddress[#this] : -# 1775| m1775_6(glval) = InitializeParameter[#this] : &:r1775_5 -# 1775| r1775_7(glval) = Load[#this] : &:r1775_5, m1775_6 -# 1775| m1775_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1775_7 -# 1775| v1775_9(void) = NoOp : -# 1775| v1775_10(void) = ReturnIndirection[#this] : &:r1775_7, m1775_8 -# 1775| v1775_11(void) = ReturnVoid : -# 1775| v1775_12(void) = AliasedUse : m1775_3 -# 1775| v1775_13(void) = ExitFunction : +# 1775| mu1775_2(unknown) = AliasedDefinition : +# 1775| mu1775_3(unknown) = InitializeNonLocal : +# 1775| r1775_4(glval) = VariableAddress[#this] : +# 1775| m1775_5(glval) = InitializeParameter[#this] : &:r1775_4 +# 1775| r1775_6(glval) = Load[#this] : &:r1775_4, m1775_5 +# 1775| mu1775_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1775_6 +# 1775| v1775_8(void) = NoOp : +# 1775| v1775_9(void) = ReturnIndirection[#this] : &:r1775_6, ~m? +# 1775| v1775_10(void) = ReturnVoid : +# 1775| v1775_11(void) = AliasedUse : ~m? +# 1775| v1775_12(void) = ExitFunction : # 1776| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) # 1776| Block 0 # 1776| v1776_1(void) = EnterFunction : -# 1776| m1776_2(unknown) = AliasedDefinition : -# 1776| m1776_3(unknown) = InitializeNonLocal : -# 1776| m1776_4(unknown) = Chi : total:m1776_2, partial:m1776_3 -# 1776| r1776_5(glval) = VariableAddress[#this] : -# 1776| m1776_6(glval) = InitializeParameter[#this] : &:r1776_5 -# 1776| r1776_7(glval) = Load[#this] : &:r1776_5, m1776_6 -# 1776| m1776_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1776_7 -# 1776| r1776_9(glval) = VariableAddress[c] : -# 1776| m1776_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1776_9 -# 1776| r1776_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1776_9, m1776_10 -# 1776| m1776_12(unknown) = InitializeIndirection[c] : &:r1776_11 +# 1776| mu1776_2(unknown) = AliasedDefinition : +# 1776| mu1776_3(unknown) = InitializeNonLocal : +# 1776| r1776_4(glval) = VariableAddress[#this] : +# 1776| m1776_5(glval) = InitializeParameter[#this] : &:r1776_4 +# 1776| r1776_6(glval) = Load[#this] : &:r1776_4, m1776_5 +# 1776| mu1776_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1776_6 +# 1776| r1776_8(glval) = VariableAddress[c] : +# 1776| m1776_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1776_8 +# 1776| r1776_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1776_8, m1776_9 +# 1776| mu1776_11(unknown) = InitializeIndirection[c] : &:r1776_10 # 1777| r1777_1(glval) = VariableAddress[c] : -# 1777| r1777_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1777_1, m1776_10 +# 1777| r1777_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1777_1, m1776_9 # 1777| r1777_3(glval) = CopyValue : r1777_2 # 1777| r1777_4(glval) = FieldAddress[x] : r1777_3 -# 1777| r1777_5(int) = Load[?] : &:r1777_4, ~m1776_12 +# 1777| r1777_5(int) = Load[?] : &:r1777_4, ~m? # 1777| r1777_6(glval) = VariableAddress[#this] : -# 1777| r1777_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1777_6, m1776_6 +# 1777| r1777_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1777_6, m1776_5 # 1777| r1777_8(glval) = FieldAddress[x] : r1777_7 -# 1777| m1777_9(int) = Store[?] : &:r1777_8, r1777_5 -# 1777| m1777_10(unknown) = Chi : total:m1776_8, partial:m1777_9 +# 1777| mu1777_9(int) = Store[?] : &:r1777_8, r1777_5 # 1778| v1778_1(void) = NoOp : -# 1776| v1776_13(void) = ReturnIndirection[#this] : &:r1776_7, m1777_10 -# 1776| v1776_14(void) = ReturnIndirection[c] : &:r1776_11, m1776_12 -# 1776| v1776_15(void) = ReturnVoid : -# 1776| v1776_16(void) = AliasedUse : m1776_3 -# 1776| v1776_17(void) = ExitFunction : +# 1776| v1776_12(void) = ReturnIndirection[#this] : &:r1776_6, ~m? +# 1776| v1776_13(void) = ReturnIndirection[c] : &:r1776_10, ~m? +# 1776| v1776_14(void) = ReturnVoid : +# 1776| v1776_15(void) = AliasedUse : ~m? +# 1776| v1776_16(void) = ExitFunction : # 1784| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() # 1784| Block 0 # 1784| v1784_1(void) = EnterFunction : -# 1784| m1784_2(unknown) = AliasedDefinition : -# 1784| m1784_3(unknown) = InitializeNonLocal : -# 1784| m1784_4(unknown) = Chi : total:m1784_2, partial:m1784_3 -# 1784| r1784_5(glval) = VariableAddress[#this] : -# 1784| m1784_6(glval) = InitializeParameter[#this] : &:r1784_5 -# 1784| r1784_7(glval) = Load[#this] : &:r1784_5, m1784_6 -# 1784| m1784_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1784_7 -# 1784| v1784_9(void) = NoOp : -# 1784| v1784_10(void) = ReturnIndirection[#this] : &:r1784_7, m1784_8 -# 1784| v1784_11(void) = ReturnVoid : -# 1784| v1784_12(void) = AliasedUse : m1784_3 -# 1784| v1784_13(void) = ExitFunction : +# 1784| mu1784_2(unknown) = AliasedDefinition : +# 1784| mu1784_3(unknown) = InitializeNonLocal : +# 1784| r1784_4(glval) = VariableAddress[#this] : +# 1784| m1784_5(glval) = InitializeParameter[#this] : &:r1784_4 +# 1784| r1784_6(glval) = Load[#this] : &:r1784_4, m1784_5 +# 1784| mu1784_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1784_6 +# 1784| v1784_8(void) = NoOp : +# 1784| v1784_9(void) = ReturnIndirection[#this] : &:r1784_6, ~m? +# 1784| v1784_10(void) = ReturnVoid : +# 1784| v1784_11(void) = AliasedUse : ~m? +# 1784| v1784_12(void) = ExitFunction : # 1787| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) # 1787| Block 0 # 1787| v1787_1(void) = EnterFunction : -# 1787| m1787_2(unknown) = AliasedDefinition : -# 1787| m1787_3(unknown) = InitializeNonLocal : -# 1787| m1787_4(unknown) = Chi : total:m1787_2, partial:m1787_3 -# 1787| r1787_5(glval) = VariableAddress[#this] : -# 1787| m1787_6(glval) = InitializeParameter[#this] : &:r1787_5 -# 1787| r1787_7(glval) = Load[#this] : &:r1787_5, m1787_6 -# 1787| m1787_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1787_7 +# 1787| mu1787_2(unknown) = AliasedDefinition : +# 1787| mu1787_3(unknown) = InitializeNonLocal : +# 1787| r1787_4(glval) = VariableAddress[#this] : +# 1787| m1787_5(glval) = InitializeParameter[#this] : &:r1787_4 +# 1787| r1787_6(glval) = Load[#this] : &:r1787_4, m1787_5 +# 1787| mu1787_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1787_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1787| r1787_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1787_7 -# 1787| r1787_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1787| r1787_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1787| r1787_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1787_11, m0_2 -# 1787| r1787_13(glval) = CopyValue : r1787_12 -# 1787| r1787_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1787_13 -# 1787| r1787_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1787_14 -# 1787| v1787_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1787_10, this:r1787_9, 0:r1787_15 -# 1787| m1787_17(unknown) = ^CallSideEffect : ~m1787_4 -# 1787| m1787_18(unknown) = Chi : total:m1787_4, partial:m1787_17 -# 1787| v1787_19(void) = ^BufferReadSideEffect[0] : &:r1787_15, ~m0_4 -# 1787| m1787_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1787_9 -# 1787| m1787_21(unknown) = Chi : total:m1787_8, partial:m1787_20 -# 1787| v1787_22(void) = NoOp : -# 1787| v1787_23(void) = ReturnIndirection[#this] : &:r1787_7, m1787_21 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1787| v1787_24(void) = ReturnVoid : -# 1787| v1787_25(void) = AliasedUse : ~m1787_18 -# 1787| v1787_26(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1787| r1787_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1787_6 +# 1787| r1787_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1787| r1787_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1787| r1787_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1787_10, m0_2 +# 1787| r1787_12(glval) = CopyValue : r1787_11 +# 1787| r1787_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1787_12 +# 1787| r1787_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1787_13 +# 1787| v1787_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1787_9, this:r1787_8, 0:r1787_14 +# 1787| mu1787_16(unknown) = ^CallSideEffect : ~m? +# 1787| v1787_17(void) = ^BufferReadSideEffect[0] : &:r1787_14, ~m? +# 1787| mu1787_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1787_8 +# 1787| v1787_19(void) = NoOp : +# 1787| v1787_20(void) = ReturnIndirection[#this] : &:r1787_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1787| v1787_21(void) = ReturnVoid : +# 1787| v1787_22(void) = AliasedUse : ~m? +# 1787| v1787_23(void) = ExitFunction : # 1791| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() # 1791| Block 0 # 1791| v1791_1(void) = EnterFunction : -# 1791| m1791_2(unknown) = AliasedDefinition : -# 1791| m1791_3(unknown) = InitializeNonLocal : -# 1791| m1791_4(unknown) = Chi : total:m1791_2, partial:m1791_3 -# 1791| r1791_5(glval) = VariableAddress[#this] : -# 1791| m1791_6(glval) = InitializeParameter[#this] : &:r1791_5 -# 1791| r1791_7(glval) = Load[#this] : &:r1791_5, m1791_6 -# 1791| m1791_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1791_7 -# 1791| r1791_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1791_7 -# 1791| r1791_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1791| v1791_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1791_10, this:r1791_9 -# 1791| m1791_12(unknown) = ^CallSideEffect : ~m1791_4 -# 1791| m1791_13(unknown) = Chi : total:m1791_4, partial:m1791_12 -# 1791| m1791_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1791_9 -# 1791| m1791_15(unknown) = Chi : total:m1791_8, partial:m1791_14 -# 1791| r1791_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1791_7 -# 1791| r1791_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1791| v1791_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1791_17, this:r1791_16 -# 1791| m1791_19(unknown) = ^CallSideEffect : ~m1791_13 -# 1791| m1791_20(unknown) = Chi : total:m1791_13, partial:m1791_19 -# 1791| m1791_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1791_16 -# 1791| m1791_22(unknown) = Chi : total:m1791_15, partial:m1791_21 -# 1791| v1791_23(void) = NoOp : -# 1791| v1791_24(void) = ReturnIndirection[#this] : &:r1791_7, m1791_22 -# 1791| v1791_25(void) = ReturnVoid : -# 1791| v1791_26(void) = AliasedUse : ~m1791_20 -# 1791| v1791_27(void) = ExitFunction : +# 1791| mu1791_2(unknown) = AliasedDefinition : +# 1791| mu1791_3(unknown) = InitializeNonLocal : +# 1791| r1791_4(glval) = VariableAddress[#this] : +# 1791| m1791_5(glval) = InitializeParameter[#this] : &:r1791_4 +# 1791| r1791_6(glval) = Load[#this] : &:r1791_4, m1791_5 +# 1791| mu1791_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1791_6 +# 1791| r1791_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1791_6 +# 1791| r1791_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1791| v1791_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1791_9, this:r1791_8 +# 1791| mu1791_11(unknown) = ^CallSideEffect : ~m? +# 1791| mu1791_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1791_8 +# 1791| r1791_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1791_6 +# 1791| r1791_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1791| v1791_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1791_14, this:r1791_13 +# 1791| mu1791_16(unknown) = ^CallSideEffect : ~m? +# 1791| mu1791_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1791_13 +# 1791| v1791_18(void) = NoOp : +# 1791| v1791_19(void) = ReturnIndirection[#this] : &:r1791_6, ~m? +# 1791| v1791_20(void) = ReturnVoid : +# 1791| v1791_21(void) = AliasedUse : ~m? +# 1791| v1791_22(void) = ExitFunction : # 1794| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) # 1794| Block 0 # 1794| v1794_1(void) = EnterFunction : -# 1794| m1794_2(unknown) = AliasedDefinition : -# 1794| m1794_3(unknown) = InitializeNonLocal : -# 1794| m1794_4(unknown) = Chi : total:m1794_2, partial:m1794_3 -# 1794| r1794_5(glval) = VariableAddress[#this] : -# 1794| m1794_6(glval) = InitializeParameter[#this] : &:r1794_5 -# 1794| r1794_7(glval) = Load[#this] : &:r1794_5, m1794_6 -# 1794| m1794_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1794_7 -# 1794| m1794_9(unknown) = Chi : total:m1794_4, partial:m1794_8 +# 1794| mu1794_2(unknown) = AliasedDefinition : +# 1794| mu1794_3(unknown) = InitializeNonLocal : +# 1794| r1794_4(glval) = VariableAddress[#this] : +# 1794| m1794_5(glval) = InitializeParameter[#this] : &:r1794_4 +# 1794| r1794_6(glval) = Load[#this] : &:r1794_4, m1794_5 +# 1794| mu1794_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1794_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1794| r1794_10(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1794_7 -# 1794| r1794_11(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1794| r1794_12(glval) = VariableAddress[(unnamed parameter 0)] : -# 1794| r1794_13(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1794_12, m0_2 -# 1794| r1794_14(glval) = CopyValue : r1794_13 -# 1794| r1794_15(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1794_14 -# 1794| r1794_16(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1794_15 -# 1794| v1794_17(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1794_11, this:r1794_10, 0:r1794_16 -# 1794| m1794_18(unknown) = ^CallSideEffect : ~m1794_9 -# 1794| m1794_19(unknown) = Chi : total:m1794_9, partial:m1794_18 -# 1794| v1794_20(void) = ^BufferReadSideEffect[0] : &:r1794_16, ~m0_4 -# 1794| m1794_21(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1794_10 -# 1794| m1794_22(unknown) = Chi : total:m1794_19, partial:m1794_21 -# 1794| v1794_23(void) = NoOp : -# 1794| v1794_24(void) = ReturnIndirection[#this] : &:r1794_7, ~m1794_22 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1794| v1794_25(void) = ReturnVoid : -# 1794| v1794_26(void) = AliasedUse : ~m1794_22 -# 1794| v1794_27(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1794| r1794_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1794_6 +# 1794| r1794_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1794| r1794_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1794| r1794_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1794_10, m0_2 +# 1794| r1794_12(glval) = CopyValue : r1794_11 +# 1794| r1794_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1794_12 +# 1794| r1794_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1794_13 +# 1794| v1794_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1794_9, this:r1794_8, 0:r1794_14 +# 1794| mu1794_16(unknown) = ^CallSideEffect : ~m? +# 1794| v1794_17(void) = ^BufferReadSideEffect[0] : &:r1794_14, ~m? +# 1794| mu1794_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1794_8 +# 1794| v1794_19(void) = NoOp : +# 1794| v1794_20(void) = ReturnIndirection[#this] : &:r1794_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1794| v1794_21(void) = ReturnVoid : +# 1794| v1794_22(void) = AliasedUse : ~m? +# 1794| v1794_23(void) = ExitFunction : # 1798| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() # 1798| Block 0 -# 1798| v1798_1(void) = EnterFunction : -# 1798| m1798_2(unknown) = AliasedDefinition : -# 1798| m1798_3(unknown) = InitializeNonLocal : -# 1798| m1798_4(unknown) = Chi : total:m1798_2, partial:m1798_3 -# 1798| r1798_5(glval) = VariableAddress[#this] : -# 1798| m1798_6(glval) = InitializeParameter[#this] : &:r1798_5 -# 1798| r1798_7(glval) = Load[#this] : &:r1798_5, m1798_6 -# 1798| m1798_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1798_7 -# 1798| m1798_9(unknown) = Chi : total:m1798_4, partial:m1798_8 -# 1798| r1798_10(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1798_7 -# 1798| r1798_11(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1798| v1798_12(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1798_11, this:r1798_10 -# 1798| m1798_13(unknown) = ^CallSideEffect : ~m1798_9 -# 1798| m1798_14(unknown) = Chi : total:m1798_9, partial:m1798_13 -# 1798| m1798_15(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1798_10 -# 1798| m1798_16(unknown) = Chi : total:m1798_14, partial:m1798_15 -# 1798| r1798_17(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1798_7 -# 1798| r1798_18(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1798| v1798_19(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1798_18, this:r1798_17 -# 1798| m1798_20(unknown) = ^CallSideEffect : ~m1798_16 -# 1798| m1798_21(unknown) = Chi : total:m1798_16, partial:m1798_20 -# 1798| m1798_22(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1798_17 -# 1798| m1798_23(unknown) = Chi : total:m1798_21, partial:m1798_22 -# 1798| v1798_24(void) = NoOp : -# 1798| v1798_25(void) = ReturnIndirection[#this] : &:r1798_7, ~m1798_23 -# 1798| v1798_26(void) = ReturnVoid : -# 1798| v1798_27(void) = AliasedUse : ~m1798_23 -# 1798| v1798_28(void) = ExitFunction : +# 1798| v1798_1(void) = EnterFunction : +# 1798| mu1798_2(unknown) = AliasedDefinition : +# 1798| mu1798_3(unknown) = InitializeNonLocal : +# 1798| r1798_4(glval) = VariableAddress[#this] : +# 1798| m1798_5(glval) = InitializeParameter[#this] : &:r1798_4 +# 1798| r1798_6(glval) = Load[#this] : &:r1798_4, m1798_5 +# 1798| mu1798_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1798_6 +# 1798| r1798_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1798_6 +# 1798| r1798_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1798| v1798_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1798_9, this:r1798_8 +# 1798| mu1798_11(unknown) = ^CallSideEffect : ~m? +# 1798| mu1798_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1798_8 +# 1798| r1798_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1798_6 +# 1798| r1798_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1798| v1798_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1798_14, this:r1798_13 +# 1798| mu1798_16(unknown) = ^CallSideEffect : ~m? +# 1798| mu1798_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1798_13 +# 1798| v1798_18(void) = NoOp : +# 1798| v1798_19(void) = ReturnIndirection[#this] : &:r1798_6, ~m? +# 1798| v1798_20(void) = ReturnVoid : +# 1798| v1798_21(void) = AliasedUse : ~m? +# 1798| v1798_22(void) = ExitFunction : # 1801| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) # 1801| Block 0 # 1801| v1801_1(void) = EnterFunction : -# 1801| m1801_2(unknown) = AliasedDefinition : -# 1801| m1801_3(unknown) = InitializeNonLocal : -# 1801| m1801_4(unknown) = Chi : total:m1801_2, partial:m1801_3 +# 1801| mu1801_2(unknown) = AliasedDefinition : +# 1801| mu1801_3(unknown) = InitializeNonLocal : # 1802| r1802_1(glval) = VariableAddress[x] : # 1802| m1802_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1802_1 # 1802| r1802_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1802_1, m1802_2 -# 1802| m1802_4(unknown) = InitializeIndirection[x] : &:r1802_3 +# 1802| mu1802_4(unknown) = InitializeIndirection[x] : &:r1802_3 # 1803| r1803_1(glval) = VariableAddress[y] : # 1803| m1803_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1803_1 # 1803| r1803_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1803_1, m1803_2 -# 1803| m1803_4(unknown) = InitializeIndirection[y] : &:r1803_3 +# 1803| mu1803_4(unknown) = InitializeIndirection[y] : &:r1803_3 # 1804| r1804_1(glval) = VariableAddress[cx] : -# 1804| m1804_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1804_1 +# 1804| mu1804_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1804_1 # 1804| r1804_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : # 1804| r1804_4(glval) = VariableAddress[x] : # 1804| r1804_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1804_4, m1802_2 # 1804| r1804_6(glval) = CopyValue : r1804_5 # 1804| r1804_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1804_6 # 1804| v1804_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1804_3, this:r1804_1, 0:r1804_7 -# 1804| m1804_9(unknown) = ^CallSideEffect : ~m1801_4 -# 1804| m1804_10(unknown) = Chi : total:m1801_4, partial:m1804_9 -# 1804| v1804_11(void) = ^BufferReadSideEffect[0] : &:r1804_7, ~m1802_4 -# 1804| m1804_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1804_1 -# 1804| m1804_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1804_2, partial:m1804_12 +# 1804| mu1804_9(unknown) = ^CallSideEffect : ~m? +# 1804| v1804_10(void) = ^BufferReadSideEffect[0] : &:r1804_7, ~m? +# 1804| mu1804_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1804_1 # 1805| r1805_1(glval) = VariableAddress[cy] : -# 1805| m1805_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1805_1 -# 1805| m1805_3(unknown) = Chi : total:m1804_10, partial:m1805_2 -# 1805| r1805_4(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1805| r1805_5(glval) = VariableAddress[y] : -# 1805| r1805_6(CopyConstructorTestVirtualClass &) = Load[y] : &:r1805_5, m1803_2 -# 1805| r1805_7(glval) = CopyValue : r1805_6 -# 1805| r1805_8(CopyConstructorTestVirtualClass &) = CopyValue : r1805_7 -# 1805| v1805_9(void) = Call[CopyConstructorTestVirtualClass] : func:r1805_4, this:r1805_1, 0:r1805_8 -# 1805| m1805_10(unknown) = ^CallSideEffect : ~m1805_3 -# 1805| m1805_11(unknown) = Chi : total:m1805_3, partial:m1805_10 -# 1805| v1805_12(void) = ^BufferReadSideEffect[0] : &:r1805_8, ~m1803_4 -# 1805| m1805_13(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1805_1 -# 1805| m1805_14(unknown) = Chi : total:m1805_11, partial:m1805_13 +# 1805| mu1805_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1805_1 +# 1805| r1805_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1805| r1805_4(glval) = VariableAddress[y] : +# 1805| r1805_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1805_4, m1803_2 +# 1805| r1805_6(glval) = CopyValue : r1805_5 +# 1805| r1805_7(CopyConstructorTestVirtualClass &) = CopyValue : r1805_6 +# 1805| v1805_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1805_3, this:r1805_1, 0:r1805_7 +# 1805| mu1805_9(unknown) = ^CallSideEffect : ~m? +# 1805| v1805_10(void) = ^BufferReadSideEffect[0] : &:r1805_7, ~m? +# 1805| mu1805_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1805_1 # 1806| r1806_1(glval) = VariableAddress[#return] : # 1806| m1806_2(int) = Uninitialized[#return] : &:r1806_1 -# 1802| v1802_5(void) = ReturnIndirection[x] : &:r1802_3, m1802_4 -# 1803| v1803_5(void) = ReturnIndirection[y] : &:r1803_3, m1803_4 -# 1801| r1801_5(glval) = VariableAddress[#return] : -# 1801| v1801_6(void) = ReturnValue : &:r1801_5, m1806_2 -# 1801| v1801_7(void) = AliasedUse : ~m1805_11 -# 1801| v1801_8(void) = ExitFunction : +# 1802| v1802_5(void) = ReturnIndirection[x] : &:r1802_3, ~m? +# 1803| v1803_5(void) = ReturnIndirection[y] : &:r1803_3, ~m? +# 1801| r1801_4(glval) = VariableAddress[#return] : +# 1801| v1801_5(void) = ReturnValue : &:r1801_4, m1806_2 +# 1801| v1801_6(void) = AliasedUse : ~m? +# 1801| v1801_7(void) = ExitFunction : # 1808| void if_initialization(int) # 1808| Block 0 # 1808| v1808_1(void) = EnterFunction : -# 1808| m1808_2(unknown) = AliasedDefinition : -# 1808| m1808_3(unknown) = InitializeNonLocal : -# 1808| m1808_4(unknown) = Chi : total:m1808_2, partial:m1808_3 -# 1808| r1808_5(glval) = VariableAddress[x] : -# 1808| m1808_6(int) = InitializeParameter[x] : &:r1808_5 +# 1808| mu1808_2(unknown) = AliasedDefinition : +# 1808| mu1808_3(unknown) = InitializeNonLocal : +# 1808| r1808_4(glval) = VariableAddress[x] : +# 1808| m1808_5(int) = InitializeParameter[x] : &:r1808_4 # 1809| r1809_1(glval) = VariableAddress[y] : # 1809| r1809_2(glval) = VariableAddress[x] : -# 1809| r1809_3(int) = Load[x] : &:r1809_2, m1808_6 +# 1809| r1809_3(int) = Load[x] : &:r1809_2, m1808_5 # 1809| m1809_4(int) = Store[y] : &:r1809_1, r1809_3 # 1809| r1809_5(glval) = VariableAddress[x] : -# 1809| r1809_6(int) = Load[x] : &:r1809_5, m1808_6 +# 1809| r1809_6(int) = Load[x] : &:r1809_5, m1808_5 # 1809| r1809_7(int) = Constant[1] : # 1809| r1809_8(int) = Add : r1809_6, r1809_7 # 1809| r1809_9(int) = Constant[0] : @@ -13895,7 +12699,7 @@ ir.cpp: # 1810| Block 1 # 1810| r1810_1(glval) = VariableAddress[x] : -# 1810| r1810_2(int) = Load[x] : &:r1810_1, m1808_6 +# 1810| r1810_2(int) = Load[x] : &:r1810_1, m1808_5 # 1810| r1810_3(glval) = VariableAddress[y] : # 1810| r1810_4(int) = Load[y] : &:r1810_3, m1809_4 # 1810| r1810_5(int) = Add : r1810_2, r1810_4 @@ -13904,7 +12708,7 @@ ir.cpp: #-----| Goto -> Block 2 # 1813| Block 2 -# 1813| m1813_1(int) = Phi : from 0:m1808_6, from 1:m1810_7 +# 1813| m1813_1(int) = Phi : from 0:m1808_5, from 1:m1810_7 # 1813| r1813_2(glval) = VariableAddress[w] : # 1813| m1813_3(int) = Uninitialized[w] : &:r1813_2 # 1814| r1814_1(glval) = VariableAddress[x] : @@ -14039,24 +12843,23 @@ ir.cpp: # 1834| Block 12 # 1834| v1834_1(void) = NoOp : -# 1808| v1808_7(void) = ReturnVoid : -# 1808| v1808_8(void) = AliasedUse : m1808_3 -# 1808| v1808_9(void) = ExitFunction : +# 1808| v1808_6(void) = ReturnVoid : +# 1808| v1808_7(void) = AliasedUse : ~m? +# 1808| v1808_8(void) = ExitFunction : # 1836| void switch_initialization(int) # 1836| Block 0 # 1836| v1836_1(void) = EnterFunction : -# 1836| m1836_2(unknown) = AliasedDefinition : -# 1836| m1836_3(unknown) = InitializeNonLocal : -# 1836| m1836_4(unknown) = Chi : total:m1836_2, partial:m1836_3 -# 1836| r1836_5(glval) = VariableAddress[x] : -# 1836| m1836_6(int) = InitializeParameter[x] : &:r1836_5 +# 1836| mu1836_2(unknown) = AliasedDefinition : +# 1836| mu1836_3(unknown) = InitializeNonLocal : +# 1836| r1836_4(glval) = VariableAddress[x] : +# 1836| m1836_5(int) = InitializeParameter[x] : &:r1836_4 # 1837| r1837_1(glval) = VariableAddress[y] : # 1837| r1837_2(glval) = VariableAddress[x] : -# 1837| r1837_3(int) = Load[x] : &:r1837_2, m1836_6 +# 1837| r1837_3(int) = Load[x] : &:r1837_2, m1836_5 # 1837| m1837_4(int) = Store[y] : &:r1837_1, r1837_3 # 1837| r1837_5(glval) = VariableAddress[x] : -# 1837| r1837_6(int) = Load[x] : &:r1837_5, m1836_6 +# 1837| r1837_6(int) = Load[x] : &:r1837_5, m1836_5 # 1837| r1837_7(int) = Constant[1] : # 1837| r1837_8(int) = Add : r1837_6, r1837_7 # 1837| v1837_9(void) = Switch : r1837_8 @@ -14065,7 +12868,7 @@ ir.cpp: # 1838| Block 1 # 1838| v1838_1(void) = NoOp : # 1839| r1839_1(glval) = VariableAddress[x] : -# 1839| r1839_2(int) = Load[x] : &:r1839_1, m1836_6 +# 1839| r1839_2(int) = Load[x] : &:r1839_1, m1836_5 # 1839| r1839_3(glval) = VariableAddress[y] : # 1839| r1839_4(int) = Load[y] : &:r1839_3, m1837_4 # 1839| r1839_5(int) = Add : r1839_2, r1839_4 @@ -14176,222 +12979,196 @@ ir.cpp: # 1866| r1866_5(int) = Add : r1866_4, r1866_2 # 1866| m1866_6(int) = Store[x] : &:r1866_3, r1866_5 # 1868| v1868_1(void) = NoOp : -# 1836| v1836_7(void) = ReturnVoid : -# 1836| v1836_8(void) = AliasedUse : m1836_3 -# 1836| v1836_9(void) = ExitFunction : +# 1836| v1836_6(void) = ReturnVoid : +# 1836| v1836_7(void) = AliasedUse : ~m? +# 1836| v1836_8(void) = ExitFunction : # 1872| int global_2 # 1872| Block 0 # 1872| v1872_1(void) = EnterFunction : -# 1872| m1872_2(unknown) = AliasedDefinition : +# 1872| mu1872_2(unknown) = AliasedDefinition : # 1872| r1872_3(glval) = VariableAddress[global_2] : # 1872| r1872_4(int) = Constant[1] : -# 1872| m1872_5(int) = Store[global_2] : &:r1872_3, r1872_4 -# 1872| m1872_6(unknown) = Chi : total:m1872_2, partial:m1872_5 -# 1872| v1872_7(void) = ReturnVoid : -# 1872| v1872_8(void) = AliasedUse : ~m1872_6 -# 1872| v1872_9(void) = ExitFunction : +# 1872| mu1872_5(int) = Store[global_2] : &:r1872_3, r1872_4 +# 1872| v1872_6(void) = ReturnVoid : +# 1872| v1872_7(void) = AliasedUse : ~m? +# 1872| v1872_8(void) = ExitFunction : # 1876| constructor_only global_4 # 1876| Block 0 # 1876| v1876_1(void) = EnterFunction : -# 1876| m1876_2(unknown) = AliasedDefinition : +# 1876| mu1876_2(unknown) = AliasedDefinition : # 1876| r1876_3(glval) = VariableAddress[global_4] : # 1876| r1876_4(glval) = FunctionAddress[constructor_only] : # 1876| r1876_5(int) = Constant[1] : # 1876| v1876_6(void) = Call[constructor_only] : func:r1876_4, this:r1876_3, 0:r1876_5 -# 1876| m1876_7(unknown) = ^CallSideEffect : ~m1876_2 -# 1876| m1876_8(unknown) = Chi : total:m1876_2, partial:m1876_7 -# 1876| m1876_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1876_3 -# 1876| m1876_10(unknown) = Chi : total:m1876_8, partial:m1876_9 -# 1876| v1876_11(void) = ReturnVoid : -# 1876| v1876_12(void) = AliasedUse : ~m1876_10 -# 1876| v1876_13(void) = ExitFunction : +# 1876| mu1876_7(unknown) = ^CallSideEffect : ~m? +# 1876| mu1876_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1876_3 +# 1876| v1876_9(void) = ReturnVoid : +# 1876| v1876_10(void) = AliasedUse : ~m? +# 1876| v1876_11(void) = ExitFunction : # 1878| constructor_only global_5 # 1878| Block 0 # 1878| v1878_1(void) = EnterFunction : -# 1878| m1878_2(unknown) = AliasedDefinition : +# 1878| mu1878_2(unknown) = AliasedDefinition : # 1878| r1878_3(glval) = VariableAddress[global_5] : # 1878| r1878_4(glval) = FunctionAddress[constructor_only] : # 1878| r1878_5(int) = Constant[2] : # 1878| v1878_6(void) = Call[constructor_only] : func:r1878_4, this:r1878_3, 0:r1878_5 -# 1878| m1878_7(unknown) = ^CallSideEffect : ~m1878_2 -# 1878| m1878_8(unknown) = Chi : total:m1878_2, partial:m1878_7 -# 1878| m1878_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1878_3 -# 1878| m1878_10(unknown) = Chi : total:m1878_8, partial:m1878_9 -# 1878| v1878_11(void) = ReturnVoid : -# 1878| v1878_12(void) = AliasedUse : ~m1878_10 -# 1878| v1878_13(void) = ExitFunction : +# 1878| mu1878_7(unknown) = ^CallSideEffect : ~m? +# 1878| mu1878_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1878_3 +# 1878| v1878_9(void) = ReturnVoid : +# 1878| v1878_10(void) = AliasedUse : ~m? +# 1878| v1878_11(void) = ExitFunction : # 1880| char* global_string # 1880| Block 0 # 1880| v1880_1(void) = EnterFunction : -# 1880| m1880_2(unknown) = AliasedDefinition : +# 1880| mu1880_2(unknown) = AliasedDefinition : # 1880| r1880_3(glval) = VariableAddress[global_string] : # 1880| r1880_4(glval) = StringConstant["global string"] : # 1880| r1880_5(char *) = Convert : r1880_4 # 1880| r1880_6(char *) = Convert : r1880_5 -# 1880| m1880_7(char *) = Store[global_string] : &:r1880_3, r1880_6 -# 1880| m1880_8(unknown) = Chi : total:m1880_2, partial:m1880_7 -# 1880| v1880_9(void) = ReturnVoid : -# 1880| v1880_10(void) = AliasedUse : ~m1880_8 -# 1880| v1880_11(void) = ExitFunction : +# 1880| mu1880_7(char *) = Store[global_string] : &:r1880_3, r1880_6 +# 1880| v1880_8(void) = ReturnVoid : +# 1880| v1880_9(void) = AliasedUse : ~m? +# 1880| v1880_10(void) = ExitFunction : # 1882| int global_6 # 1882| Block 0 # 1882| v1882_1(void) = EnterFunction : -# 1882| m1882_2(unknown) = AliasedDefinition : +# 1882| mu1882_2(unknown) = AliasedDefinition : # 1882| r1882_3(glval) = VariableAddress[global_6] : # 1882| r1882_4(glval) = VariableAddress[global_2] : -# 1882| r1882_5(int) = Load[global_2] : &:r1882_4, ~m1882_2 -# 1882| m1882_6(int) = Store[global_6] : &:r1882_3, r1882_5 -# 1882| m1882_7(unknown) = Chi : total:m1882_2, partial:m1882_6 -# 1882| v1882_8(void) = ReturnVoid : -# 1882| v1882_9(void) = AliasedUse : ~m1882_7 -# 1882| v1882_10(void) = ExitFunction : +# 1882| r1882_5(int) = Load[global_2] : &:r1882_4, ~m? +# 1882| mu1882_6(int) = Store[global_6] : &:r1882_3, r1882_5 +# 1882| v1882_7(void) = ReturnVoid : +# 1882| v1882_8(void) = AliasedUse : ~m? +# 1882| v1882_9(void) = ExitFunction : # 1885| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) # 1885| Block 0 # 1885| v1885_1(void) = EnterFunction : -# 1885| m1885_2(unknown) = AliasedDefinition : -# 1885| m1885_3(unknown) = InitializeNonLocal : -# 1885| m1885_4(unknown) = Chi : total:m1885_2, partial:m1885_3 -# 1885| r1885_5(glval) = VariableAddress[#this] : -# 1885| m1885_6(glval) = InitializeParameter[#this] : &:r1885_5 -# 1885| r1885_7(glval) = Load[#this] : &:r1885_5, m1885_6 -# 1885| m1885_8(A) = InitializeIndirection[#this] : &:r1885_7 +# 1885| mu1885_2(unknown) = AliasedDefinition : +# 1885| mu1885_3(unknown) = InitializeNonLocal : +# 1885| r1885_4(glval) = VariableAddress[#this] : +# 1885| m1885_5(glval) = InitializeParameter[#this] : &:r1885_4 +# 1885| r1885_6(glval) = Load[#this] : &:r1885_4, m1885_5 +# 1885| mu1885_7(A) = InitializeIndirection[#this] : &:r1885_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#this] : -#-----| r0_6(A *) = Load[#this] : &:r0_5, m1885_6 +#-----| r0_6(A *) = Load[#this] : &:r0_5, m1885_5 #-----| r0_7(glval[1]>) = FieldAddress[e] : r0_6 #-----| r0_8(glval) = VariableAddress[(unnamed parameter 0)] : #-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, m0_2 #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(glval[1]>) = FieldAddress[e] : r0_10 -#-----| r0_12(enum [1]) = Load[?] : &:r0_11, ~m0_4 -#-----| m0_13(enum [1]) = Store[?] : &:r0_7, r0_12 -#-----| m0_14(unknown) = Chi : total:m1885_8, partial:m0_13 -#-----| r0_15(glval) = VariableAddress[#return] : -#-----| r0_16(glval) = VariableAddress[#this] : -#-----| r0_17(A *) = Load[#this] : &:r0_16, m1885_6 -#-----| r0_18(glval) = CopyValue : r0_17 -#-----| r0_19(A &) = CopyValue : r0_18 -#-----| m0_20(A &) = Store[#return] : &:r0_15, r0_19 -# 1885| v1885_9(void) = ReturnIndirection[#this] : &:r1885_7, m0_14 -#-----| v0_21(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1885| r1885_10(glval) = VariableAddress[#return] : -# 1885| v1885_11(void) = ReturnValue : &:r1885_10, m0_20 -# 1885| v1885_12(void) = AliasedUse : m1885_3 -# 1885| v1885_13(void) = ExitFunction : +#-----| r0_12(enum [1]) = Load[?] : &:r0_11, ~m? +#-----| mu0_13(enum [1]) = Store[?] : &:r0_7, r0_12 +#-----| r0_14(glval) = VariableAddress[#return] : +#-----| r0_15(glval) = VariableAddress[#this] : +#-----| r0_16(A *) = Load[#this] : &:r0_15, m1885_5 +#-----| r0_17(glval) = CopyValue : r0_16 +#-----| r0_18(A &) = CopyValue : r0_17 +#-----| m0_19(A &) = Store[#return] : &:r0_14, r0_18 +# 1885| v1885_8(void) = ReturnIndirection[#this] : &:r1885_6, ~m? +#-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1885| r1885_9(glval) = VariableAddress[#return] : +# 1885| v1885_10(void) = ReturnValue : &:r1885_9, m0_19 +# 1885| v1885_11(void) = AliasedUse : ~m? +# 1885| v1885_12(void) = ExitFunction : # 1890| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) # 1890| Block 0 # 1890| v1890_1(void) = EnterFunction : -# 1890| m1890_2(unknown) = AliasedDefinition : -# 1890| m1890_3(unknown) = InitializeNonLocal : -# 1890| m1890_4(unknown) = Chi : total:m1890_2, partial:m1890_3 -# 1890| r1890_5(glval) = VariableAddress[#this] : -# 1890| m1890_6(glval) = InitializeParameter[#this] : &:r1890_5 -# 1890| r1890_7(glval) = Load[#this] : &:r1890_5, m1890_6 -# 1890| m1890_8(B) = InitializeIndirection[#this] : &:r1890_7 +# 1890| mu1890_2(unknown) = AliasedDefinition : +# 1890| mu1890_3(unknown) = InitializeNonLocal : +# 1890| r1890_4(glval) = VariableAddress[#this] : +# 1890| m1890_5(glval) = InitializeParameter[#this] : &:r1890_4 +# 1890| r1890_6(glval) = Load[#this] : &:r1890_4, m1890_5 +# 1890| mu1890_7(B) = InitializeIndirection[#this] : &:r1890_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1890| r1890_9(glval) = VariableAddress[#this] : -# 1890| r1890_10(B *) = Load[#this] : &:r1890_9, m1890_6 -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1890_10 -# 1890| r1890_11(glval) = FunctionAddress[operator=] : -# 1890| r1890_12(glval) = VariableAddress[(unnamed parameter 0)] : -# 1890| r1890_13(B &&) = Load[(unnamed parameter 0)] : &:r1890_12, m0_2 -#-----| r0_6(glval) = CopyValue : r1890_13 -# 1890| r1890_14(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1890_14 -# 1890| r1890_15(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1890_15 -# 1890| r1890_16(A &) = Call[operator=] : func:r1890_11, this:r0_5, 0:r0_8 -# 1890| m1890_17(unknown) = ^CallSideEffect : ~m1890_4 -# 1890| m1890_18(unknown) = Chi : total:m1890_4, partial:m1890_17 -#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1890_8 -#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m0_4 -#-----| m0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 -#-----| m0_12(unknown) = Chi : total:m1890_8, partial:m0_11 -#-----| m0_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 -#-----| m0_14(unknown) = Chi : total:m0_4, partial:m0_13 -#-----| r0_15(glval) = CopyValue : r1890_16 -#-----| r0_16(glval) = VariableAddress[#return] : -#-----| r0_17(glval) = VariableAddress[#this] : -#-----| r0_18(B *) = Load[#this] : &:r0_17, m1890_6 -#-----| r0_19(glval) = CopyValue : r0_18 -#-----| r0_20(B &) = CopyValue : r0_19 -#-----| m0_21(B &) = Store[#return] : &:r0_16, r0_20 -# 1890| v1890_19(void) = ReturnIndirection[#this] : &:r1890_7, m0_12 -#-----| v0_22(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_14 -# 1890| r1890_20(glval) = VariableAddress[#return] : -# 1890| v1890_21(void) = ReturnValue : &:r1890_20, m0_21 -# 1890| v1890_22(void) = AliasedUse : ~m1890_18 -# 1890| v1890_23(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1890| r1890_8(glval) = VariableAddress[#this] : +# 1890| r1890_9(B *) = Load[#this] : &:r1890_8, m1890_5 +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1890_9 +# 1890| r1890_10(glval) = FunctionAddress[operator=] : +# 1890| r1890_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1890| r1890_12(B &&) = Load[(unnamed parameter 0)] : &:r1890_11, m0_2 +#-----| r0_6(glval) = CopyValue : r1890_12 +# 1890| r1890_13(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1890_13 +# 1890| r1890_14(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1890_14 +# 1890| r1890_15(A &) = Call[operator=] : func:r1890_10, this:r0_5, 0:r0_8 +# 1890| mu1890_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) = CopyValue : r1890_15 +#-----| r0_14(glval) = VariableAddress[#return] : +#-----| r0_15(glval) = VariableAddress[#this] : +#-----| r0_16(B *) = Load[#this] : &:r0_15, m1890_5 +#-----| r0_17(glval) = CopyValue : r0_16 +#-----| r0_18(B &) = CopyValue : r0_17 +#-----| m0_19(B &) = Store[#return] : &:r0_14, r0_18 +# 1890| v1890_17(void) = ReturnIndirection[#this] : &:r1890_6, ~m? +#-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1890| r1890_18(glval) = VariableAddress[#return] : +# 1890| v1890_19(void) = ReturnValue : &:r1890_18, m0_19 +# 1890| v1890_20(void) = AliasedUse : ~m? +# 1890| v1890_21(void) = ExitFunction : # 1894| void block_assignment::foo() # 1894| Block 0 # 1894| v1894_1(void) = EnterFunction : -# 1894| m1894_2(unknown) = AliasedDefinition : -# 1894| m1894_3(unknown) = InitializeNonLocal : -# 1894| m1894_4(unknown) = Chi : total:m1894_2, partial:m1894_3 +# 1894| mu1894_2(unknown) = AliasedDefinition : +# 1894| mu1894_3(unknown) = InitializeNonLocal : # 1895| r1895_1(glval) = VariableAddress[v] : -# 1895| m1895_2(B) = Uninitialized[v] : &:r1895_1 -# 1895| m1895_3(unknown) = Chi : total:m1894_4, partial:m1895_2 -# 1895| r1895_4(glval) = FunctionAddress[B] : -# 1895| r1895_5(A *) = Constant[0] : -# 1895| v1895_6(void) = Call[B] : func:r1895_4, this:r1895_1, 0:r1895_5 -# 1895| m1895_7(unknown) = ^CallSideEffect : ~m1895_3 -# 1895| m1895_8(unknown) = Chi : total:m1895_3, partial:m1895_7 -# 1895| v1895_9(void) = ^BufferReadSideEffect[0] : &:r1895_5, ~m1895_8 -# 1895| m1895_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1895_1 -# 1895| m1895_11(unknown) = Chi : total:m1895_8, partial:m1895_10 -# 1895| m1895_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1895_5 -# 1895| m1895_13(unknown) = Chi : total:m1895_11, partial:m1895_12 +# 1895| mu1895_2(B) = Uninitialized[v] : &:r1895_1 +# 1895| r1895_3(glval) = FunctionAddress[B] : +# 1895| r1895_4(A *) = Constant[0] : +# 1895| v1895_5(void) = Call[B] : func:r1895_3, this:r1895_1, 0:r1895_4 +# 1895| mu1895_6(unknown) = ^CallSideEffect : ~m? +# 1895| v1895_7(void) = ^BufferReadSideEffect[0] : &:r1895_4, ~m? +# 1895| mu1895_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1895_1 +# 1895| mu1895_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1895_4 # 1896| r1896_1(glval) = VariableAddress[v] : # 1896| r1896_2(glval) = FunctionAddress[operator=] : # 1896| r1896_3(glval) = VariableAddress[#temp1896:13] : -# 1896| m1896_4(B) = Uninitialized[#temp1896:13] : &:r1896_3 -# 1896| m1896_5(unknown) = Chi : total:m1895_13, partial:m1896_4 -# 1896| r1896_6(glval) = FunctionAddress[B] : -# 1896| r1896_7(A *) = Constant[0] : -# 1896| v1896_8(void) = Call[B] : func:r1896_6, this:r1896_3, 0:r1896_7 -# 1896| m1896_9(unknown) = ^CallSideEffect : ~m1896_5 -# 1896| m1896_10(unknown) = Chi : total:m1896_5, partial:m1896_9 -# 1896| v1896_11(void) = ^BufferReadSideEffect[0] : &:r1896_7, ~m1896_10 -# 1896| m1896_12(B) = ^IndirectMayWriteSideEffect[-1] : &:r1896_3 -# 1896| m1896_13(unknown) = Chi : total:m1896_10, partial:m1896_12 -# 1896| m1896_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1896_7 -# 1896| m1896_15(unknown) = Chi : total:m1896_13, partial:m1896_14 -# 1896| r1896_16(B &) = CopyValue : r1896_3 -# 1896| r1896_17(B &) = Call[operator=] : func:r1896_2, this:r1896_1, 0:r1896_16 -# 1896| m1896_18(unknown) = ^CallSideEffect : ~m1896_15 -# 1896| m1896_19(unknown) = Chi : total:m1896_15, partial:m1896_18 -# 1896| v1896_20(void) = ^IndirectReadSideEffect[-1] : &:r1896_1, ~m1896_19 -# 1896| v1896_21(void) = ^BufferReadSideEffect[0] : &:r1896_16, ~m1896_19 -# 1896| m1896_22(B) = ^IndirectMayWriteSideEffect[-1] : &:r1896_1 -# 1896| m1896_23(unknown) = Chi : total:m1896_19, partial:m1896_22 -# 1896| m1896_24(unknown) = ^BufferMayWriteSideEffect[0] : &:r1896_16 -# 1896| m1896_25(unknown) = Chi : total:m1896_23, partial:m1896_24 -# 1896| r1896_26(glval) = CopyValue : r1896_17 +# 1896| mu1896_4(B) = Uninitialized[#temp1896:13] : &:r1896_3 +# 1896| r1896_5(glval) = FunctionAddress[B] : +# 1896| r1896_6(A *) = Constant[0] : +# 1896| v1896_7(void) = Call[B] : func:r1896_5, this:r1896_3, 0:r1896_6 +# 1896| mu1896_8(unknown) = ^CallSideEffect : ~m? +# 1896| v1896_9(void) = ^BufferReadSideEffect[0] : &:r1896_6, ~m? +# 1896| mu1896_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1896_3 +# 1896| mu1896_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1896_6 +# 1896| r1896_12(B &) = CopyValue : r1896_3 +# 1896| r1896_13(B &) = Call[operator=] : func:r1896_2, this:r1896_1, 0:r1896_12 +# 1896| mu1896_14(unknown) = ^CallSideEffect : ~m? +# 1896| v1896_15(void) = ^IndirectReadSideEffect[-1] : &:r1896_1, ~m? +# 1896| v1896_16(void) = ^BufferReadSideEffect[0] : &:r1896_12, ~m? +# 1896| mu1896_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1896_1 +# 1896| mu1896_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1896_12 +# 1896| r1896_19(glval) = CopyValue : r1896_13 # 1897| v1897_1(void) = NoOp : -# 1894| v1894_5(void) = ReturnVoid : -# 1894| v1894_6(void) = AliasedUse : ~m1896_19 -# 1894| v1894_7(void) = ExitFunction : +# 1894| v1894_4(void) = ReturnVoid : +# 1894| v1894_5(void) = AliasedUse : ~m? +# 1894| v1894_6(void) = ExitFunction : # 1900| void magicvars() # 1900| Block 0 # 1900| v1900_1(void) = EnterFunction : -# 1900| m1900_2(unknown) = AliasedDefinition : -# 1900| m1900_3(unknown) = InitializeNonLocal : -# 1900| m1900_4(unknown) = Chi : total:m1900_2, partial:m1900_3 +# 1900| mu1900_2(unknown) = AliasedDefinition : +# 1900| mu1900_3(unknown) = InitializeNonLocal : # 1901| r1901_1(glval) = VariableAddress[pf] : # 1901| r1901_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : # 1901| r1901_3(char *) = Convert : r1901_2 @@ -14401,227 +13178,207 @@ ir.cpp: # 1902| r1902_3(char *) = Convert : r1902_2 # 1902| m1902_4(char *) = Store[strfunc] : &:r1902_1, r1902_3 # 1903| v1903_1(void) = NoOp : -# 1900| v1900_5(void) = ReturnVoid : -# 1900| v1900_6(void) = AliasedUse : m1900_3 -# 1900| v1900_7(void) = ExitFunction : +# 1900| v1900_4(void) = ReturnVoid : +# 1900| v1900_5(void) = AliasedUse : ~m? +# 1900| v1900_6(void) = ExitFunction : # 1901| const char[17] __PRETTY_FUNCTION__ # 1901| Block 0 # 1901| v1901_1(void) = EnterFunction : -# 1901| m1901_2(unknown) = AliasedDefinition : +# 1901| mu1901_2(unknown) = AliasedDefinition : # 1901| r1901_3(glval) = VariableAddress[__PRETTY_FUNCTION__] : # 1901| r1901_4(glval) = StringConstant[__PRETTY_FUNCTION__] : # 1901| r1901_5(char[17]) = Load[?] : &:r1901_4, ~m? -# 1901| m1901_6(char[17]) = Store[__PRETTY_FUNCTION__] : &:r1901_3, r1901_5 -# 1901| m1901_7(unknown) = Chi : total:m1901_2, partial:m1901_6 -# 1901| v1901_8(void) = ReturnVoid : -# 1901| v1901_9(void) = AliasedUse : ~m1901_7 -# 1901| v1901_10(void) = ExitFunction : +# 1901| mu1901_6(char[17]) = Store[__PRETTY_FUNCTION__] : &:r1901_3, r1901_5 +# 1901| v1901_7(void) = ReturnVoid : +# 1901| v1901_8(void) = AliasedUse : ~m? +# 1901| v1901_9(void) = ExitFunction : # 1902| const char[10] __func__ # 1902| Block 0 # 1902| v1902_1(void) = EnterFunction : -# 1902| m1902_2(unknown) = AliasedDefinition : +# 1902| mu1902_2(unknown) = AliasedDefinition : # 1902| r1902_3(glval) = VariableAddress[__func__] : # 1902| r1902_4(glval) = StringConstant[__func__] : # 1902| r1902_5(char[10]) = Load[?] : &:r1902_4, ~m? -# 1902| m1902_6(char[10]) = Store[__func__] : &:r1902_3, r1902_5 -# 1902| m1902_7(unknown) = Chi : total:m1902_2, partial:m1902_6 -# 1902| v1902_8(void) = ReturnVoid : -# 1902| v1902_9(void) = AliasedUse : ~m1902_7 -# 1902| v1902_10(void) = ExitFunction : +# 1902| mu1902_6(char[10]) = Store[__func__] : &:r1902_3, r1902_5 +# 1902| v1902_7(void) = ReturnVoid : +# 1902| v1902_8(void) = AliasedUse : ~m? +# 1902| v1902_9(void) = ExitFunction : # 1913| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) # 1913| Block 0 # 1913| v1913_1(void) = EnterFunction : -# 1913| m1913_2(unknown) = AliasedDefinition : -# 1913| m1913_3(unknown) = InitializeNonLocal : -# 1913| m1913_4(unknown) = Chi : total:m1913_2, partial:m1913_3 -# 1913| r1913_5(glval) = VariableAddress[#this] : -# 1913| m1913_6(glval>) = InitializeParameter[#this] : &:r1913_5 -# 1913| r1913_7(glval>) = Load[#this] : &:r1913_5, m1913_6 -# 1913| m1913_8(Bar1) = InitializeIndirection[#this] : &:r1913_7 -# 1913| r1913_9(glval) = VariableAddress[p] : -# 1913| m1913_10(S *) = InitializeParameter[p] : &:r1913_9 -# 1913| r1913_11(S *) = Load[p] : &:r1913_9, m1913_10 -# 1913| m1913_12(unknown) = InitializeIndirection[p] : &:r1913_11 +# 1913| mu1913_2(unknown) = AliasedDefinition : +# 1913| mu1913_3(unknown) = InitializeNonLocal : +# 1913| r1913_4(glval) = VariableAddress[#this] : +# 1913| m1913_5(glval>) = InitializeParameter[#this] : &:r1913_4 +# 1913| r1913_6(glval>) = Load[#this] : &:r1913_4, m1913_5 +# 1913| mu1913_7(Bar1) = InitializeIndirection[#this] : &:r1913_6 +# 1913| r1913_8(glval) = VariableAddress[p] : +# 1913| m1913_9(S *) = InitializeParameter[p] : &:r1913_8 +# 1913| r1913_10(S *) = Load[p] : &:r1913_8, m1913_9 +# 1913| mu1913_11(unknown) = InitializeIndirection[p] : &:r1913_10 # 1915| r1915_1(glval) = VariableAddress[#return] : # 1915| r1915_2(glval) = VariableAddress[p] : -# 1915| r1915_3(S *) = Load[p] : &:r1915_2, m1913_10 +# 1915| r1915_3(S *) = Load[p] : &:r1915_2, m1913_9 # 1915| r1915_4(void *) = Convert : r1915_3 # 1915| m1915_5(void *) = Store[#return] : &:r1915_1, r1915_4 -# 1913| v1913_13(void) = ReturnIndirection[#this] : &:r1913_7, m1913_8 -# 1913| v1913_14(void) = ReturnIndirection[p] : &:r1913_11, m1913_12 -# 1913| r1913_15(glval) = VariableAddress[#return] : -# 1913| v1913_16(void) = ReturnValue : &:r1913_15, m1915_5 -# 1913| v1913_17(void) = AliasedUse : m1913_3 -# 1913| v1913_18(void) = ExitFunction : +# 1913| v1913_12(void) = ReturnIndirection[#this] : &:r1913_6, ~m? +# 1913| v1913_13(void) = ReturnIndirection[p] : &:r1913_10, ~m? +# 1913| r1913_14(glval) = VariableAddress[#return] : +# 1913| v1913_15(void) = ReturnValue : &:r1913_14, m1915_5 +# 1913| v1913_16(void) = AliasedUse : ~m? +# 1913| v1913_17(void) = ExitFunction : # 1919| void missing_declaration_entries::test1() # 1919| Block 0 # 1919| v1919_1(void) = EnterFunction : -# 1919| m1919_2(unknown) = AliasedDefinition : -# 1919| m1919_3(unknown) = InitializeNonLocal : -# 1919| m1919_4(unknown) = Chi : total:m1919_2, partial:m1919_3 +# 1919| mu1919_2(unknown) = AliasedDefinition : +# 1919| mu1919_3(unknown) = InitializeNonLocal : # 1920| r1920_1(glval>) = VariableAddress[b] : -# 1920| m1920_2(Bar1) = Uninitialized[b] : &:r1920_1 +# 1920| mu1920_2(Bar1) = Uninitialized[b] : &:r1920_1 # 1921| r1921_1(glval>) = VariableAddress[b] : # 1921| r1921_2(glval) = FunctionAddress[missing_type_decl_entry] : # 1921| r1921_3(S *) = Constant[0] : # 1921| r1921_4(void *) = Call[missing_type_decl_entry] : func:r1921_2, this:r1921_1, 0:r1921_3 -# 1921| m1921_5(unknown) = ^CallSideEffect : ~m1919_4 -# 1921| m1921_6(unknown) = Chi : total:m1919_4, partial:m1921_5 -# 1921| v1921_7(void) = ^IndirectReadSideEffect[-1] : &:r1921_1, m1920_2 -# 1921| v1921_8(void) = ^BufferReadSideEffect[0] : &:r1921_3, ~m1921_6 -# 1921| m1921_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 -# 1921| m1921_10(Bar1) = Chi : total:m1920_2, partial:m1921_9 -# 1921| m1921_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1921_3 -# 1921| m1921_12(unknown) = Chi : total:m1921_6, partial:m1921_11 +# 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? +# 1921| v1921_6(void) = ^IndirectReadSideEffect[-1] : &:r1921_1, ~m? +# 1921| v1921_7(void) = ^BufferReadSideEffect[0] : &:r1921_3, ~m? +# 1921| mu1921_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 +# 1921| mu1921_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1921_3 # 1922| v1922_1(void) = NoOp : -# 1919| v1919_5(void) = ReturnVoid : -# 1919| v1919_6(void) = AliasedUse : ~m1921_12 -# 1919| v1919_7(void) = ExitFunction : +# 1919| v1919_4(void) = ReturnVoid : +# 1919| v1919_5(void) = AliasedUse : ~m? +# 1919| v1919_6(void) = ExitFunction : # 1926| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() # 1926| Block 0 # 1926| v1926_1(void) = EnterFunction : -# 1926| m1926_2(unknown) = AliasedDefinition : -# 1926| m1926_3(unknown) = InitializeNonLocal : -# 1926| m1926_4(unknown) = Chi : total:m1926_2, partial:m1926_3 -# 1926| r1926_5(glval) = VariableAddress[#this] : -# 1926| m1926_6(glval>) = InitializeParameter[#this] : &:r1926_5 -# 1926| r1926_7(glval>) = Load[#this] : &:r1926_5, m1926_6 -# 1926| m1926_8(Bar2) = InitializeIndirection[#this] : &:r1926_7 +# 1926| mu1926_2(unknown) = AliasedDefinition : +# 1926| mu1926_3(unknown) = InitializeNonLocal : +# 1926| r1926_4(glval) = VariableAddress[#this] : +# 1926| m1926_5(glval>) = InitializeParameter[#this] : &:r1926_4 +# 1926| r1926_6(glval>) = Load[#this] : &:r1926_4, m1926_5 +# 1926| mu1926_7(Bar2) = InitializeIndirection[#this] : &:r1926_6 # 1927| r1927_1(glval) = VariableAddress[x] : -# 1927| m1927_2(int[10]) = Uninitialized[x] : &:r1927_1 +# 1927| mu1927_2(int[10]) = Uninitialized[x] : &:r1927_1 # 1927| r1927_3(glval) = VariableAddress[y] : -# 1927| m1927_4(int[10]) = Uninitialized[y] : &:r1927_3 +# 1927| mu1927_4(int[10]) = Uninitialized[y] : &:r1927_3 # 1928| r1928_1(int) = Constant[10] : # 1928| r1928_2(glval) = VariableAddress[x] : # 1928| r1928_3(int *) = Convert : r1928_2 # 1928| r1928_4(glval) = CopyValue : r1928_3 -# 1928| m1928_5(int) = Store[?] : &:r1928_4, r1928_1 -# 1928| m1928_6(int[10]) = Chi : total:m1927_2, partial:m1928_5 +# 1928| mu1928_5(int) = Store[?] : &:r1928_4, r1928_1 # 1929| r1929_1(int) = Constant[10] : # 1929| r1929_2(glval) = VariableAddress[y] : # 1929| r1929_3(int *) = Convert : r1929_2 # 1929| r1929_4(glval) = CopyValue : r1929_3 -# 1929| m1929_5(int) = Store[?] : &:r1929_4, r1929_1 -# 1929| m1929_6(int[10]) = Chi : total:m1927_4, partial:m1929_5 +# 1929| mu1929_5(int) = Store[?] : &:r1929_4, r1929_1 # 1930| r1930_1(glval) = VariableAddress[#return] : # 1930| r1930_2(glval) = VariableAddress[x] : # 1930| r1930_3(int *) = Convert : r1930_2 -# 1930| r1930_4(int) = Load[?] : &:r1930_3, m1928_5 +# 1930| r1930_4(int) = Load[?] : &:r1930_3, ~m? # 1930| r1930_5(glval) = VariableAddress[y] : # 1930| r1930_6(int *) = Convert : r1930_5 -# 1930| r1930_7(int) = Load[?] : &:r1930_6, m1929_5 +# 1930| r1930_7(int) = Load[?] : &:r1930_6, ~m? # 1930| r1930_8(int) = Add : r1930_4, r1930_7 # 1930| m1930_9(int) = Store[#return] : &:r1930_1, r1930_8 -# 1926| v1926_9(void) = ReturnIndirection[#this] : &:r1926_7, m1926_8 -# 1926| r1926_10(glval) = VariableAddress[#return] : -# 1926| v1926_11(void) = ReturnValue : &:r1926_10, m1930_9 -# 1926| v1926_12(void) = AliasedUse : m1926_3 -# 1926| v1926_13(void) = ExitFunction : +# 1926| v1926_8(void) = ReturnIndirection[#this] : &:r1926_6, ~m? +# 1926| r1926_9(glval) = VariableAddress[#return] : +# 1926| v1926_10(void) = ReturnValue : &:r1926_9, m1930_9 +# 1926| v1926_11(void) = AliasedUse : ~m? +# 1926| v1926_12(void) = ExitFunction : # 1934| void missing_declaration_entries::test2() # 1934| Block 0 # 1934| v1934_1(void) = EnterFunction : -# 1934| m1934_2(unknown) = AliasedDefinition : -# 1934| m1934_3(unknown) = InitializeNonLocal : -# 1934| m1934_4(unknown) = Chi : total:m1934_2, partial:m1934_3 +# 1934| mu1934_2(unknown) = AliasedDefinition : +# 1934| mu1934_3(unknown) = InitializeNonLocal : # 1935| r1935_1(glval>) = VariableAddress[b] : -# 1935| m1935_2(Bar2) = Uninitialized[b] : &:r1935_1 +# 1935| mu1935_2(Bar2) = Uninitialized[b] : &:r1935_1 # 1936| r1936_1(glval>) = VariableAddress[b] : # 1936| r1936_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : # 1936| r1936_3(int) = Call[two_missing_variable_declaration_entries] : func:r1936_2, this:r1936_1 -# 1936| m1936_4(unknown) = ^CallSideEffect : ~m1934_4 -# 1936| m1936_5(unknown) = Chi : total:m1934_4, partial:m1936_4 -# 1936| v1936_6(void) = ^IndirectReadSideEffect[-1] : &:r1936_1, m1935_2 -# 1936| m1936_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1936_1 -# 1936| m1936_8(Bar2) = Chi : total:m1935_2, partial:m1936_7 +# 1936| mu1936_4(unknown) = ^CallSideEffect : ~m? +# 1936| v1936_5(void) = ^IndirectReadSideEffect[-1] : &:r1936_1, ~m? +# 1936| mu1936_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1936_1 # 1937| v1937_1(void) = NoOp : -# 1934| v1934_5(void) = ReturnVoid : -# 1934| v1934_6(void) = AliasedUse : ~m1936_5 -# 1934| v1934_7(void) = ExitFunction : +# 1934| v1934_4(void) = ReturnVoid : +# 1934| v1934_5(void) = AliasedUse : ~m? +# 1934| v1934_6(void) = ExitFunction : # 1941| int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() # 1941| Block 0 # 1941| v1941_1(void) = EnterFunction : -# 1941| m1941_2(unknown) = AliasedDefinition : -# 1941| m1941_3(unknown) = InitializeNonLocal : -# 1941| m1941_4(unknown) = Chi : total:m1941_2, partial:m1941_3 -# 1941| r1941_5(glval) = VariableAddress[#this] : -# 1941| m1941_6(glval>) = InitializeParameter[#this] : &:r1941_5 -# 1941| r1941_7(glval>) = Load[#this] : &:r1941_5, m1941_6 -# 1941| m1941_8(Bar3) = InitializeIndirection[#this] : &:r1941_7 +# 1941| mu1941_2(unknown) = AliasedDefinition : +# 1941| mu1941_3(unknown) = InitializeNonLocal : +# 1941| r1941_4(glval) = VariableAddress[#this] : +# 1941| m1941_5(glval>) = InitializeParameter[#this] : &:r1941_4 +# 1941| r1941_6(glval>) = Load[#this] : &:r1941_4, m1941_5 +# 1941| mu1941_7(Bar3) = InitializeIndirection[#this] : &:r1941_6 # 1944| r1944_1(glval) = VariableAddress[#return] : # 1944| r1944_2(glval) = VariableAddress[g] : -# 1944| r1944_3(int) = Load[g] : &:r1944_2, ~m1941_3 +# 1944| r1944_3(int) = Load[g] : &:r1944_2, ~m? # 1944| m1944_4(int) = Store[#return] : &:r1944_1, r1944_3 -# 1941| v1941_9(void) = ReturnIndirection[#this] : &:r1941_7, m1941_8 -# 1941| r1941_10(glval) = VariableAddress[#return] : -# 1941| v1941_11(void) = ReturnValue : &:r1941_10, m1944_4 -# 1941| v1941_12(void) = AliasedUse : m1941_3 -# 1941| v1941_13(void) = ExitFunction : +# 1941| v1941_8(void) = ReturnIndirection[#this] : &:r1941_6, ~m? +# 1941| r1941_9(glval) = VariableAddress[#return] : +# 1941| v1941_10(void) = ReturnValue : &:r1941_9, m1944_4 +# 1941| v1941_11(void) = AliasedUse : ~m? +# 1941| v1941_12(void) = ExitFunction : # 1948| void missing_declaration_entries::test3() # 1948| Block 0 # 1948| v1948_1(void) = EnterFunction : -# 1948| m1948_2(unknown) = AliasedDefinition : -# 1948| m1948_3(unknown) = InitializeNonLocal : -# 1948| m1948_4(unknown) = Chi : total:m1948_2, partial:m1948_3 +# 1948| mu1948_2(unknown) = AliasedDefinition : +# 1948| mu1948_3(unknown) = InitializeNonLocal : # 1949| r1949_1(glval>) = VariableAddress[b] : -# 1949| m1949_2(Bar3) = Uninitialized[b] : &:r1949_1 +# 1949| mu1949_2(Bar3) = Uninitialized[b] : &:r1949_1 # 1950| r1950_1(glval>) = VariableAddress[b] : # 1950| r1950_2(glval) = FunctionAddress[two_more_missing_variable_declaration_entries] : # 1950| r1950_3(int) = Call[two_more_missing_variable_declaration_entries] : func:r1950_2, this:r1950_1 -# 1950| m1950_4(unknown) = ^CallSideEffect : ~m1948_4 -# 1950| m1950_5(unknown) = Chi : total:m1948_4, partial:m1950_4 -# 1950| v1950_6(void) = ^IndirectReadSideEffect[-1] : &:r1950_1, m1949_2 -# 1950| m1950_7(Bar3) = ^IndirectMayWriteSideEffect[-1] : &:r1950_1 -# 1950| m1950_8(Bar3) = Chi : total:m1949_2, partial:m1950_7 +# 1950| mu1950_4(unknown) = ^CallSideEffect : ~m? +# 1950| v1950_5(void) = ^IndirectReadSideEffect[-1] : &:r1950_1, ~m? +# 1950| mu1950_6(Bar3) = ^IndirectMayWriteSideEffect[-1] : &:r1950_1 # 1951| v1951_1(void) = NoOp : -# 1948| v1948_5(void) = ReturnVoid : -# 1948| v1948_6(void) = AliasedUse : ~m1950_5 -# 1948| v1948_7(void) = ExitFunction : +# 1948| v1948_4(void) = ReturnVoid : +# 1948| v1948_5(void) = AliasedUse : ~m? +# 1948| v1948_6(void) = ExitFunction : # 1954| char global_template # 1954| Block 0 # 1954| v1954_1(void) = EnterFunction : -# 1954| m1954_2(unknown) = AliasedDefinition : +# 1954| mu1954_2(unknown) = AliasedDefinition : # 1954| r1954_3(glval) = VariableAddress[global_template] : # 1954| r1954_4(char) = Constant[42] : -# 1954| m1954_5(char) = Store[global_template] : &:r1954_3, r1954_4 -# 1954| m1954_6(unknown) = Chi : total:m1954_2, partial:m1954_5 -# 1954| v1954_7(void) = ReturnVoid : -# 1954| v1954_8(void) = AliasedUse : ~m1954_6 -# 1954| v1954_9(void) = ExitFunction : +# 1954| mu1954_5(char) = Store[global_template] : &:r1954_3, r1954_4 +# 1954| v1954_6(void) = ReturnVoid : +# 1954| v1954_7(void) = AliasedUse : ~m? +# 1954| v1954_8(void) = ExitFunction : # 1954| int global_template # 1954| Block 0 # 1954| v1954_1(void) = EnterFunction : -# 1954| m1954_2(unknown) = AliasedDefinition : +# 1954| mu1954_2(unknown) = AliasedDefinition : # 1954| r1954_3(glval) = VariableAddress[global_template] : # 1954| r1954_4(int) = Constant[42] : -# 1954| m1954_5(int) = Store[global_template] : &:r1954_3, r1954_4 -# 1954| m1954_6(unknown) = Chi : total:m1954_2, partial:m1954_5 -# 1954| v1954_7(void) = ReturnVoid : -# 1954| v1954_8(void) = AliasedUse : ~m1954_6 -# 1954| v1954_9(void) = ExitFunction : +# 1954| mu1954_5(int) = Store[global_template] : &:r1954_3, r1954_4 +# 1954| v1954_6(void) = ReturnVoid : +# 1954| v1954_7(void) = AliasedUse : ~m? +# 1954| v1954_8(void) = ExitFunction : # 1956| int test_global_template_int() # 1956| Block 0 # 1956| v1956_1(void) = EnterFunction : -# 1956| m1956_2(unknown) = AliasedDefinition : -# 1956| m1956_3(unknown) = InitializeNonLocal : -# 1956| m1956_4(unknown) = Chi : total:m1956_2, partial:m1956_3 +# 1956| mu1956_2(unknown) = AliasedDefinition : +# 1956| mu1956_3(unknown) = InitializeNonLocal : # 1957| r1957_1(glval) = VariableAddress[local_int] : # 1957| r1957_2(glval) = VariableAddress[global_template] : -# 1957| r1957_3(int) = Load[global_template] : &:r1957_2, ~m1956_3 +# 1957| r1957_3(int) = Load[global_template] : &:r1957_2, ~m? # 1957| m1957_4(int) = Store[local_int] : &:r1957_1, r1957_3 # 1958| r1958_1(glval) = VariableAddress[local_char] : # 1958| r1958_2(glval) = VariableAddress[global_template] : -# 1958| r1958_3(char) = Load[global_template] : &:r1958_2, ~m1956_3 +# 1958| r1958_3(char) = Load[global_template] : &:r1958_2, ~m? # 1958| m1958_4(char) = Store[local_char] : &:r1958_1, r1958_3 # 1959| r1959_1(glval) = VariableAddress[#return] : # 1959| r1959_2(glval) = VariableAddress[local_int] : @@ -14631,21 +13388,20 @@ ir.cpp: # 1959| r1959_6(int) = Convert : r1959_5 # 1959| r1959_7(int) = Add : r1959_3, r1959_6 # 1959| m1959_8(int) = Store[#return] : &:r1959_1, r1959_7 -# 1956| r1956_5(glval) = VariableAddress[#return] : -# 1956| v1956_6(void) = ReturnValue : &:r1956_5, m1959_8 -# 1956| v1956_7(void) = AliasedUse : m1956_3 -# 1956| v1956_8(void) = ExitFunction : +# 1956| r1956_4(glval) = VariableAddress[#return] : +# 1956| v1956_5(void) = ReturnValue : &:r1956_4, m1959_8 +# 1956| v1956_6(void) = AliasedUse : ~m? +# 1956| v1956_7(void) = ExitFunction : # 1964| int noreturnTest(int) # 1964| Block 0 # 1964| v1964_1(void) = EnterFunction : -# 1964| m1964_2(unknown) = AliasedDefinition : -# 1964| m1964_3(unknown) = InitializeNonLocal : -# 1964| m1964_4(unknown) = Chi : total:m1964_2, partial:m1964_3 -# 1964| r1964_5(glval) = VariableAddress[x] : -# 1964| m1964_6(int) = InitializeParameter[x] : &:r1964_5 +# 1964| mu1964_2(unknown) = AliasedDefinition : +# 1964| mu1964_3(unknown) = InitializeNonLocal : +# 1964| r1964_4(glval) = VariableAddress[x] : +# 1964| m1964_5(int) = InitializeParameter[x] : &:r1964_4 # 1965| r1965_1(glval) = VariableAddress[x] : -# 1965| r1965_2(int) = Load[x] : &:r1965_1, m1964_6 +# 1965| r1965_2(int) = Load[x] : &:r1965_1, m1964_5 # 1965| r1965_3(int) = Constant[10] : # 1965| r1965_4(bool) = CompareLT : r1965_2, r1965_3 # 1965| v1965_5(void) = ConditionalBranch : r1965_4 @@ -14655,30 +13411,28 @@ ir.cpp: # 1966| Block 1 # 1966| r1966_1(glval) = VariableAddress[#return] : # 1966| r1966_2(glval) = VariableAddress[x] : -# 1966| r1966_3(int) = Load[x] : &:r1966_2, m1964_6 +# 1966| r1966_3(int) = Load[x] : &:r1966_2, m1964_5 # 1966| m1966_4(int) = Store[#return] : &:r1966_1, r1966_3 -# 1964| r1964_7(glval) = VariableAddress[#return] : -# 1964| v1964_8(void) = ReturnValue : &:r1964_7, m1966_4 -# 1964| v1964_9(void) = AliasedUse : m1964_3 -# 1964| v1964_10(void) = ExitFunction : +# 1964| r1964_6(glval) = VariableAddress[#return] : +# 1964| v1964_7(void) = ReturnValue : &:r1964_6, m1966_4 +# 1964| v1964_8(void) = AliasedUse : ~m? +# 1964| v1964_9(void) = ExitFunction : # 1968| Block 2 # 1968| r1968_1(glval) = FunctionAddress[noreturnFunc] : # 1968| v1968_2(void) = Call[noreturnFunc] : func:r1968_1 -# 1968| m1968_3(unknown) = ^CallSideEffect : ~m1964_4 -# 1968| m1968_4(unknown) = Chi : total:m1964_4, partial:m1968_3 -# 1964| v1964_11(void) = Unreached : +# 1968| mu1968_3(unknown) = ^CallSideEffect : ~m? +# 1964| v1964_10(void) = Unreached : # 1972| int noreturnTest2(int) # 1972| Block 0 # 1972| v1972_1(void) = EnterFunction : -# 1972| m1972_2(unknown) = AliasedDefinition : -# 1972| m1972_3(unknown) = InitializeNonLocal : -# 1972| m1972_4(unknown) = Chi : total:m1972_2, partial:m1972_3 -# 1972| r1972_5(glval) = VariableAddress[x] : -# 1972| m1972_6(int) = InitializeParameter[x] : &:r1972_5 +# 1972| mu1972_2(unknown) = AliasedDefinition : +# 1972| mu1972_3(unknown) = InitializeNonLocal : +# 1972| r1972_4(glval) = VariableAddress[x] : +# 1972| m1972_5(int) = InitializeParameter[x] : &:r1972_4 # 1973| r1973_1(glval) = VariableAddress[x] : -# 1973| r1973_2(int) = Load[x] : &:r1973_1, m1972_6 +# 1973| r1973_2(int) = Load[x] : &:r1973_1, m1972_5 # 1973| r1973_3(int) = Constant[10] : # 1973| r1973_4(bool) = CompareLT : r1973_2, r1973_3 # 1973| v1973_5(void) = ConditionalBranch : r1973_4 @@ -14688,99 +13442,87 @@ ir.cpp: # 1974| Block 1 # 1974| r1974_1(glval) = FunctionAddress[noreturnFunc] : # 1974| v1974_2(void) = Call[noreturnFunc] : func:r1974_1 -# 1974| m1974_3(unknown) = ^CallSideEffect : ~m1972_4 -# 1974| m1974_4(unknown) = Chi : total:m1972_4, partial:m1974_3 -# 1972| v1972_7(void) = Unreached : +# 1974| mu1974_3(unknown) = ^CallSideEffect : ~m? +# 1972| v1972_6(void) = Unreached : # 1976| Block 2 # 1976| r1976_1(glval) = VariableAddress[#return] : # 1976| r1976_2(glval) = VariableAddress[x] : -# 1976| r1976_3(int) = Load[x] : &:r1976_2, m1972_6 +# 1976| r1976_3(int) = Load[x] : &:r1976_2, m1972_5 # 1976| m1976_4(int) = Store[#return] : &:r1976_1, r1976_3 -# 1972| r1972_8(glval) = VariableAddress[#return] : -# 1972| v1972_9(void) = ReturnValue : &:r1972_8, m1976_4 -# 1972| v1972_10(void) = AliasedUse : m1972_3 -# 1972| v1972_11(void) = ExitFunction : +# 1972| r1972_7(glval) = VariableAddress[#return] : +# 1972| v1972_8(void) = ReturnValue : &:r1972_7, m1976_4 +# 1972| v1972_9(void) = AliasedUse : ~m? +# 1972| v1972_10(void) = ExitFunction : # 1979| int static_function(int) # 1979| Block 0 # 1979| v1979_1(void) = EnterFunction : -# 1979| m1979_2(unknown) = AliasedDefinition : -# 1979| m1979_3(unknown) = InitializeNonLocal : -# 1979| m1979_4(unknown) = Chi : total:m1979_2, partial:m1979_3 -# 1979| r1979_5(glval) = VariableAddress[x] : -# 1979| m1979_6(int) = InitializeParameter[x] : &:r1979_5 +# 1979| mu1979_2(unknown) = AliasedDefinition : +# 1979| mu1979_3(unknown) = InitializeNonLocal : +# 1979| r1979_4(glval) = VariableAddress[x] : +# 1979| m1979_5(int) = InitializeParameter[x] : &:r1979_4 # 1980| r1980_1(glval) = VariableAddress[#return] : # 1980| r1980_2(glval) = VariableAddress[x] : -# 1980| r1980_3(int) = Load[x] : &:r1980_2, m1979_6 +# 1980| r1980_3(int) = Load[x] : &:r1980_2, m1979_5 # 1980| m1980_4(int) = Store[#return] : &:r1980_1, r1980_3 -# 1979| r1979_7(glval) = VariableAddress[#return] : -# 1979| v1979_8(void) = ReturnValue : &:r1979_7, m1980_4 -# 1979| v1979_9(void) = AliasedUse : m1979_3 -# 1979| v1979_10(void) = ExitFunction : +# 1979| r1979_6(glval) = VariableAddress[#return] : +# 1979| v1979_7(void) = ReturnValue : &:r1979_6, m1980_4 +# 1979| v1979_8(void) = AliasedUse : ~m? +# 1979| v1979_9(void) = ExitFunction : # 1983| void test_static_functions_with_assignments() # 1983| Block 0 # 1983| v1983_1(void) = EnterFunction : -# 1983| m1983_2(unknown) = AliasedDefinition : -# 1983| m1983_3(unknown) = InitializeNonLocal : -# 1983| m1983_4(unknown) = Chi : total:m1983_2, partial:m1983_3 +# 1983| mu1983_2(unknown) = AliasedDefinition : +# 1983| mu1983_3(unknown) = InitializeNonLocal : # 1984| r1984_1(glval) = VariableAddress[c] : -# 1984| m1984_2(C) = Uninitialized[c] : &:r1984_1 -# 1984| m1984_3(unknown) = Chi : total:m1983_4, partial:m1984_2 -# 1984| r1984_4(glval) = FunctionAddress[C] : -# 1984| v1984_5(void) = Call[C] : func:r1984_4, this:r1984_1 -# 1984| m1984_6(unknown) = ^CallSideEffect : ~m1984_3 -# 1984| m1984_7(unknown) = Chi : total:m1984_3, partial:m1984_6 -# 1984| m1984_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1984_1 -# 1984| m1984_9(unknown) = Chi : total:m1984_7, partial:m1984_8 +# 1984| mu1984_2(C) = Uninitialized[c] : &:r1984_1 +# 1984| r1984_3(glval) = FunctionAddress[C] : +# 1984| v1984_4(void) = Call[C] : func:r1984_3, this:r1984_1 +# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? +# 1984| mu1984_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1984_1 # 1985| r1985_1(glval) = VariableAddress[x] : # 1985| m1985_2(int) = Uninitialized[x] : &:r1985_1 # 1986| r1986_1(glval) = VariableAddress[c] : # 1986| r1986_2(glval) = FunctionAddress[StaticMemberFunction] : # 1986| r1986_3(int) = Constant[10] : # 1986| r1986_4(int) = Call[StaticMemberFunction] : func:r1986_2, 0:r1986_3 -# 1986| m1986_5(unknown) = ^CallSideEffect : ~m1984_9 -# 1986| m1986_6(unknown) = Chi : total:m1984_9, partial:m1986_5 -# 1986| r1986_7(glval) = VariableAddress[x] : -# 1986| m1986_8(int) = Store[x] : &:r1986_7, r1986_4 +# 1986| mu1986_5(unknown) = ^CallSideEffect : ~m? +# 1986| r1986_6(glval) = VariableAddress[x] : +# 1986| m1986_7(int) = Store[x] : &:r1986_6, r1986_4 # 1987| r1987_1(glval) = VariableAddress[y] : # 1987| m1987_2(int) = Uninitialized[y] : &:r1987_1 # 1988| r1988_1(glval) = FunctionAddress[StaticMemberFunction] : # 1988| r1988_2(int) = Constant[10] : # 1988| r1988_3(int) = Call[StaticMemberFunction] : func:r1988_1, 0:r1988_2 -# 1988| m1988_4(unknown) = ^CallSideEffect : ~m1986_6 -# 1988| m1988_5(unknown) = Chi : total:m1986_6, partial:m1988_4 -# 1988| r1988_6(glval) = VariableAddress[y] : -# 1988| m1988_7(int) = Store[y] : &:r1988_6, r1988_3 +# 1988| mu1988_4(unknown) = ^CallSideEffect : ~m? +# 1988| r1988_5(glval) = VariableAddress[y] : +# 1988| m1988_6(int) = Store[y] : &:r1988_5, r1988_3 # 1989| r1989_1(glval) = VariableAddress[z] : # 1989| m1989_2(int) = Uninitialized[z] : &:r1989_1 # 1990| r1990_1(glval) = FunctionAddress[static_function] : # 1990| r1990_2(int) = Constant[10] : # 1990| r1990_3(int) = Call[static_function] : func:r1990_1, 0:r1990_2 -# 1990| m1990_4(unknown) = ^CallSideEffect : ~m1988_5 -# 1990| m1990_5(unknown) = Chi : total:m1988_5, partial:m1990_4 -# 1990| r1990_6(glval) = VariableAddress[z] : -# 1990| m1990_7(int) = Store[z] : &:r1990_6, r1990_3 +# 1990| mu1990_4(unknown) = ^CallSideEffect : ~m? +# 1990| r1990_5(glval) = VariableAddress[z] : +# 1990| m1990_6(int) = Store[z] : &:r1990_5, r1990_3 # 1991| v1991_1(void) = NoOp : # 1991| r1991_2(glval) = VariableAddress[c] : # 1991| r1991_3(glval) = FunctionAddress[~C] : # 1991| v1991_4(void) = Call[~C] : func:r1991_3, this:r1991_2 -# 1991| m1991_5(unknown) = ^CallSideEffect : ~m1990_5 -# 1991| m1991_6(unknown) = Chi : total:m1990_5, partial:m1991_5 -# 1991| v1991_7(void) = ^IndirectReadSideEffect[-1] : &:r1991_2, ~m1991_6 -# 1991| m1991_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1991_2 -# 1991| m1991_9(unknown) = Chi : total:m1991_6, partial:m1991_8 -# 1983| v1983_5(void) = ReturnVoid : -# 1983| v1983_6(void) = AliasedUse : ~m1991_6 -# 1983| v1983_7(void) = ExitFunction : +# 1991| mu1991_5(unknown) = ^CallSideEffect : ~m? +# 1991| v1991_6(void) = ^IndirectReadSideEffect[-1] : &:r1991_2, ~m? +# 1991| mu1991_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1991_2 +# 1983| v1983_4(void) = ReturnVoid : +# 1983| v1983_5(void) = AliasedUse : ~m? +# 1983| v1983_6(void) = ExitFunction : # 1993| void test_double_assign() # 1993| Block 0 # 1993| v1993_1(void) = EnterFunction : -# 1993| m1993_2(unknown) = AliasedDefinition : -# 1993| m1993_3(unknown) = InitializeNonLocal : -# 1993| m1993_4(unknown) = Chi : total:m1993_2, partial:m1993_3 +# 1993| mu1993_2(unknown) = AliasedDefinition : +# 1993| mu1993_3(unknown) = InitializeNonLocal : # 1994| r1994_1(glval) = VariableAddress[i] : # 1994| m1994_2(int) = Uninitialized[i] : &:r1994_1 # 1994| r1994_3(glval) = VariableAddress[j] : @@ -14792,16 +13534,15 @@ ir.cpp: # 1995| r1995_5(glval) = VariableAddress[i] : # 1995| m1995_6(int) = Store[i] : &:r1995_5, r1995_4 # 1996| v1996_1(void) = NoOp : -# 1993| v1993_5(void) = ReturnVoid : -# 1993| v1993_6(void) = AliasedUse : m1993_3 -# 1993| v1993_7(void) = ExitFunction : +# 1993| v1993_4(void) = ReturnVoid : +# 1993| v1993_5(void) = AliasedUse : ~m? +# 1993| v1993_6(void) = ExitFunction : # 1998| void test_assign_with_assign_operation() # 1998| Block 0 # 1998| v1998_1(void) = EnterFunction : -# 1998| m1998_2(unknown) = AliasedDefinition : -# 1998| m1998_3(unknown) = InitializeNonLocal : -# 1998| m1998_4(unknown) = Chi : total:m1998_2, partial:m1998_3 +# 1998| mu1998_2(unknown) = AliasedDefinition : +# 1998| mu1998_3(unknown) = InitializeNonLocal : # 1999| r1999_1(glval) = VariableAddress[i] : # 1999| m1999_2(int) = Uninitialized[i] : &:r1999_1 # 1999| r1999_3(glval) = VariableAddress[j] : @@ -14816,130 +13557,117 @@ ir.cpp: # 2000| r2000_7(glval) = VariableAddress[i] : # 2000| m2000_8(int) = Store[i] : &:r2000_7, r2000_6 # 2001| v2001_1(void) = NoOp : -# 1998| v1998_5(void) = ReturnVoid : -# 1998| v1998_6(void) = AliasedUse : m1998_3 -# 1998| v1998_7(void) = ExitFunction : +# 1998| v1998_4(void) = ReturnVoid : +# 1998| v1998_5(void) = AliasedUse : ~m? +# 1998| v1998_6(void) = ExitFunction : # 2007| D& D::ReferenceStaticMemberFunction() # 2007| Block 0 # 2007| v2007_1(void) = EnterFunction : -# 2007| m2007_2(unknown) = AliasedDefinition : -# 2007| m2007_3(unknown) = InitializeNonLocal : -# 2007| m2007_4(unknown) = Chi : total:m2007_2, partial:m2007_3 +# 2007| mu2007_2(unknown) = AliasedDefinition : +# 2007| mu2007_3(unknown) = InitializeNonLocal : # 2008| r2008_1(glval) = VariableAddress[#return] : # 2008| r2008_2(glval) = VariableAddress[x] : # 2008| r2008_3(D &) = CopyValue : r2008_2 # 2008| m2008_4(D &) = Store[#return] : &:r2008_1, r2008_3 -# 2007| r2007_5(glval) = VariableAddress[#return] : -# 2007| v2007_6(void) = ReturnValue : &:r2007_5, m2008_4 -# 2007| v2007_7(void) = AliasedUse : m2007_3 -# 2007| v2007_8(void) = ExitFunction : +# 2007| r2007_4(glval) = VariableAddress[#return] : +# 2007| v2007_5(void) = ReturnValue : &:r2007_4, m2008_4 +# 2007| v2007_6(void) = AliasedUse : ~m? +# 2007| v2007_7(void) = ExitFunction : # 2010| D D::ObjectStaticMemberFunction() # 2010| Block 0 # 2010| v2010_1(void) = EnterFunction : -# 2010| m2010_2(unknown) = AliasedDefinition : -# 2010| m2010_3(unknown) = InitializeNonLocal : -# 2010| m2010_4(unknown) = Chi : total:m2010_2, partial:m2010_3 +# 2010| mu2010_2(unknown) = AliasedDefinition : +# 2010| mu2010_3(unknown) = InitializeNonLocal : # 2011| r2011_1(glval) = VariableAddress[#return] : # 2011| r2011_2(glval) = VariableAddress[x] : -# 2011| r2011_3(D) = Load[x] : &:r2011_2, ~m2010_3 +# 2011| r2011_3(D) = Load[x] : &:r2011_2, ~m? # 2011| m2011_4(D) = Store[#return] : &:r2011_1, r2011_3 -# 2010| r2010_5(glval) = VariableAddress[#return] : -# 2010| v2010_6(void) = ReturnValue : &:r2010_5, m2011_4 -# 2010| v2010_7(void) = AliasedUse : m2010_3 -# 2010| v2010_8(void) = ExitFunction : +# 2010| r2010_4(glval) = VariableAddress[#return] : +# 2010| v2010_5(void) = ReturnValue : &:r2010_4, m2011_4 +# 2010| v2010_6(void) = AliasedUse : ~m? +# 2010| v2010_7(void) = ExitFunction : # 2015| void test_static_member_functions_with_reference_return() # 2015| Block 0 # 2015| v2015_1(void) = EnterFunction : -# 2015| m2015_2(unknown) = AliasedDefinition : -# 2015| m2015_3(unknown) = InitializeNonLocal : -# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : # 2016| r2016_1(glval) = VariableAddress[d] : # 2016| m2016_2(D) = Uninitialized[d] : &:r2016_1 # 2018| r2018_1(glval) = VariableAddress[d] : # 2018| r2018_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : # 2018| r2018_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2018_2 -# 2018| m2018_4(unknown) = ^CallSideEffect : ~m2015_4 -# 2018| m2018_5(unknown) = Chi : total:m2015_4, partial:m2018_4 -# 2018| r2018_6(glval) = CopyValue : r2018_3 +# 2018| mu2018_4(unknown) = ^CallSideEffect : ~m? +# 2018| r2018_5(glval) = CopyValue : r2018_3 # 2019| r2019_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : # 2019| r2019_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2019_1 -# 2019| m2019_3(unknown) = ^CallSideEffect : ~m2018_5 -# 2019| m2019_4(unknown) = Chi : total:m2018_5, partial:m2019_3 -# 2019| r2019_5(glval) = CopyValue : r2019_2 +# 2019| mu2019_3(unknown) = ^CallSideEffect : ~m? +# 2019| r2019_4(glval) = CopyValue : r2019_2 # 2020| r2020_1(glval) = VariableAddress[d] : # 2020| r2020_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : # 2020| r2020_3(D) = Call[ObjectStaticMemberFunction] : func:r2020_2 -# 2020| m2020_4(unknown) = ^CallSideEffect : ~m2019_4 -# 2020| m2020_5(unknown) = Chi : total:m2019_4, partial:m2020_4 +# 2020| mu2020_4(unknown) = ^CallSideEffect : ~m? # 2021| r2021_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : # 2021| r2021_2(D) = Call[ObjectStaticMemberFunction] : func:r2021_1 -# 2021| m2021_3(unknown) = ^CallSideEffect : ~m2020_5 -# 2021| m2021_4(unknown) = Chi : total:m2020_5, partial:m2021_3 +# 2021| mu2021_3(unknown) = ^CallSideEffect : ~m? # 2023| r2023_1(glval) = VariableAddress[x] : # 2023| m2023_2(D) = Uninitialized[x] : &:r2023_1 # 2024| r2024_1(glval) = VariableAddress[d] : # 2024| r2024_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : # 2024| r2024_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2024_2 -# 2024| m2024_4(unknown) = ^CallSideEffect : ~m2021_4 -# 2024| m2024_5(unknown) = Chi : total:m2021_4, partial:m2024_4 -# 2024| r2024_6(D) = Load[?] : &:r2024_3, ~m2024_5 -# 2024| r2024_7(glval) = VariableAddress[x] : -# 2024| m2024_8(D) = Store[x] : &:r2024_7, r2024_6 +# 2024| mu2024_4(unknown) = ^CallSideEffect : ~m? +# 2024| r2024_5(D) = Load[?] : &:r2024_3, ~m? +# 2024| r2024_6(glval) = VariableAddress[x] : +# 2024| m2024_7(D) = Store[x] : &:r2024_6, r2024_5 # 2025| r2025_1(glval) = VariableAddress[y] : # 2025| m2025_2(D) = Uninitialized[y] : &:r2025_1 # 2026| r2026_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : # 2026| r2026_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2026_1 -# 2026| m2026_3(unknown) = ^CallSideEffect : ~m2024_5 -# 2026| m2026_4(unknown) = Chi : total:m2024_5, partial:m2026_3 -# 2026| r2026_5(D) = Load[?] : &:r2026_2, ~m2026_4 -# 2026| r2026_6(glval) = VariableAddress[y] : -# 2026| m2026_7(D) = Store[y] : &:r2026_6, r2026_5 +# 2026| mu2026_3(unknown) = ^CallSideEffect : ~m? +# 2026| r2026_4(D) = Load[?] : &:r2026_2, ~m? +# 2026| r2026_5(glval) = VariableAddress[y] : +# 2026| m2026_6(D) = Store[y] : &:r2026_5, r2026_4 # 2027| r2027_1(glval) = VariableAddress[j] : # 2027| m2027_2(D) = Uninitialized[j] : &:r2027_1 # 2028| r2028_1(glval) = VariableAddress[d] : # 2028| r2028_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : # 2028| r2028_3(D) = Call[ObjectStaticMemberFunction] : func:r2028_2 -# 2028| m2028_4(unknown) = ^CallSideEffect : ~m2026_4 -# 2028| m2028_5(unknown) = Chi : total:m2026_4, partial:m2028_4 -# 2028| r2028_6(glval) = VariableAddress[j] : -# 2028| m2028_7(D) = Store[j] : &:r2028_6, r2028_3 +# 2028| mu2028_4(unknown) = ^CallSideEffect : ~m? +# 2028| r2028_5(glval) = VariableAddress[j] : +# 2028| m2028_6(D) = Store[j] : &:r2028_5, r2028_3 # 2029| r2029_1(glval) = VariableAddress[k] : # 2029| m2029_2(D) = Uninitialized[k] : &:r2029_1 # 2030| r2030_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : # 2030| r2030_2(D) = Call[ObjectStaticMemberFunction] : func:r2030_1 -# 2030| m2030_3(unknown) = ^CallSideEffect : ~m2028_5 -# 2030| m2030_4(unknown) = Chi : total:m2028_5, partial:m2030_3 -# 2030| r2030_5(glval) = VariableAddress[k] : -# 2030| m2030_6(D) = Store[k] : &:r2030_5, r2030_2 +# 2030| mu2030_3(unknown) = ^CallSideEffect : ~m? +# 2030| r2030_4(glval) = VariableAddress[k] : +# 2030| m2030_5(D) = Store[k] : &:r2030_4, r2030_2 # 2031| v2031_1(void) = NoOp : -# 2015| v2015_5(void) = ReturnVoid : -# 2015| v2015_6(void) = AliasedUse : ~m2030_4 -# 2015| v2015_7(void) = ExitFunction : +# 2015| v2015_4(void) = ReturnVoid : +# 2015| v2015_5(void) = AliasedUse : ~m? +# 2015| v2015_6(void) = ExitFunction : # 2033| void test_volatile() # 2033| Block 0 # 2033| v2033_1(void) = EnterFunction : -# 2033| m2033_2(unknown) = AliasedDefinition : -# 2033| m2033_3(unknown) = InitializeNonLocal : -# 2033| m2033_4(unknown) = Chi : total:m2033_2, partial:m2033_3 +# 2033| mu2033_2(unknown) = AliasedDefinition : +# 2033| mu2033_3(unknown) = InitializeNonLocal : # 2034| r2034_1(glval) = VariableAddress[x] : # 2034| m2034_2(int) = Uninitialized[x] : &:r2034_1 # 2035| r2035_1(glval) = VariableAddress[x] : # 2035| r2035_2(int) = Load[x] : &:r2035_1, m2034_2 # 2036| v2036_1(void) = NoOp : -# 2033| v2033_5(void) = ReturnVoid : -# 2033| v2033_6(void) = AliasedUse : m2033_3 -# 2033| v2033_7(void) = ExitFunction : +# 2033| v2033_4(void) = ReturnVoid : +# 2033| v2033_5(void) = AliasedUse : ~m? +# 2033| v2033_6(void) = ExitFunction : # 2044| void value_category_test() # 2044| Block 0 # 2044| v2044_1(void) = EnterFunction : -# 2044| m2044_2(unknown) = AliasedDefinition : -# 2044| m2044_3(unknown) = InitializeNonLocal : -# 2044| m2044_4(unknown) = Chi : total:m2044_2, partial:m2044_3 +# 2044| mu2044_2(unknown) = AliasedDefinition : +# 2044| mu2044_3(unknown) = InitializeNonLocal : # 2045| r2045_1(glval) = VariableAddress[c] : # 2045| m2045_2(ValCat) = Uninitialized[c] : &:r2045_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : @@ -14948,22 +13676,18 @@ ir.cpp: # 2047| r2047_1(glval) = VariableAddress[c] : # 2047| r2047_2(glval) = FunctionAddress[lvalue] : # 2047| r2047_3(ValCat &) = Call[lvalue] : func:r2047_2 -# 2047| m2047_4(unknown) = ^CallSideEffect : ~m2044_4 -# 2047| m2047_5(unknown) = Chi : total:m2044_4, partial:m2047_4 -# 2047| r2047_6(glval) = CopyValue : r2047_3 -# 2047| m2047_7(ValCat) = Store[?] : &:r2047_6, r0_3 -# 2047| m2047_8(unknown) = Chi : total:m2047_5, partial:m2047_7 +# 2047| mu2047_4(unknown) = ^CallSideEffect : ~m? +# 2047| r2047_5(glval) = CopyValue : r2047_3 +# 2047| mu2047_6(ValCat) = Store[?] : &:r2047_5, r0_3 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| m0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, m0_5 # 2048| r2048_1(glval) = VariableAddress[c] : # 2048| r2048_2(glval) = FunctionAddress[xvalue] : # 2048| r2048_3(ValCat &&) = Call[xvalue] : func:r2048_2 -# 2048| m2048_4(unknown) = ^CallSideEffect : ~m2047_8 -# 2048| m2048_5(unknown) = Chi : total:m2047_8, partial:m2048_4 -# 2048| r2048_6(glval) = CopyValue : r2048_3 -# 2048| m2048_7(ValCat) = Store[?] : &:r2048_6, r0_6 -# 2048| m2048_8(unknown) = Chi : total:m2048_5, partial:m2048_7 +# 2048| mu2048_4(unknown) = ^CallSideEffect : ~m? +# 2048| r2048_5(glval) = CopyValue : r2048_3 +# 2048| mu2048_6(ValCat) = Store[?] : &:r2048_5, r0_6 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| m0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, m0_8 @@ -14971,60 +13695,50 @@ ir.cpp: # 2049| r2049_2(glval) = VariableAddress[c] : # 2049| r2049_3(glval) = FunctionAddress[prvalue] : # 2049| r2049_4(ValCat) = Call[prvalue] : func:r2049_3 -# 2049| m2049_5(unknown) = ^CallSideEffect : ~m2048_8 -# 2049| m2049_6(unknown) = Chi : total:m2048_8, partial:m2049_5 -# 2049| m2049_7(ValCat) = Store[#temp2049:5] : &:r2049_1, r2049_4 -# 2049| m2049_8(ValCat) = Store[#temp2049:5] : &:r2049_1, r0_9 +# 2049| mu2049_5(unknown) = ^CallSideEffect : ~m? +# 2049| m2049_6(ValCat) = Store[#temp2049:5] : &:r2049_1, r2049_4 +# 2049| m2049_7(ValCat) = Store[#temp2049:5] : &:r2049_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| m0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, m0_11 # 2050| r2050_1(glval) = FunctionAddress[lvalue] : # 2050| r2050_2(ValCat &) = Call[lvalue] : func:r2050_1 -# 2050| m2050_3(unknown) = ^CallSideEffect : ~m2049_6 -# 2050| m2050_4(unknown) = Chi : total:m2049_6, partial:m2050_3 -# 2050| r2050_5(glval) = CopyValue : r2050_2 -# 2050| m2050_6(ValCat) = Store[?] : &:r2050_5, r0_12 -# 2050| m2050_7(unknown) = Chi : total:m2050_4, partial:m2050_6 +# 2050| mu2050_3(unknown) = ^CallSideEffect : ~m? +# 2050| r2050_4(glval) = CopyValue : r2050_2 +# 2050| mu2050_5(ValCat) = Store[?] : &:r2050_4, r0_12 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| m0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, m0_14 # 2051| r2051_1(glval) = FunctionAddress[xvalue] : # 2051| r2051_2(ValCat &&) = Call[xvalue] : func:r2051_1 -# 2051| m2051_3(unknown) = ^CallSideEffect : ~m2050_7 -# 2051| m2051_4(unknown) = Chi : total:m2050_7, partial:m2051_3 -# 2051| r2051_5(glval) = CopyValue : r2051_2 -# 2051| m2051_6(ValCat) = Store[?] : &:r2051_5, r0_15 -# 2051| m2051_7(unknown) = Chi : total:m2051_4, partial:m2051_6 +# 2051| mu2051_3(unknown) = ^CallSideEffect : ~m? +# 2051| r2051_4(glval) = CopyValue : r2051_2 +# 2051| mu2051_5(ValCat) = Store[?] : &:r2051_4, r0_15 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| m0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, m0_17 # 2052| r2052_1(glval) = VariableAddress[#temp2052:5] : # 2052| r2052_2(glval) = FunctionAddress[prvalue] : # 2052| r2052_3(ValCat) = Call[prvalue] : func:r2052_2 -# 2052| m2052_4(unknown) = ^CallSideEffect : ~m2051_7 -# 2052| m2052_5(unknown) = Chi : total:m2051_7, partial:m2052_4 -# 2052| m2052_6(ValCat) = Store[#temp2052:5] : &:r2052_1, r2052_3 -# 2052| m2052_7(ValCat) = Store[#temp2052:5] : &:r2052_1, r0_18 +# 2052| mu2052_4(unknown) = ^CallSideEffect : ~m? +# 2052| m2052_5(ValCat) = Store[#temp2052:5] : &:r2052_1, r2052_3 +# 2052| m2052_6(ValCat) = Store[#temp2052:5] : &:r2052_1, r0_18 # 2053| v2053_1(void) = NoOp : -# 2044| v2044_5(void) = ReturnVoid : -# 2044| v2044_6(void) = AliasedUse : ~m2052_5 -# 2044| v2044_7(void) = ExitFunction : +# 2044| v2044_4(void) = ReturnVoid : +# 2044| v2044_5(void) = AliasedUse : ~m? +# 2044| v2044_6(void) = ExitFunction : # 2055| void SetStaticFuncPtr() # 2055| Block 0 # 2055| v2055_1(void) = EnterFunction : -# 2055| m2055_2(unknown) = AliasedDefinition : -# 2055| m2055_3(unknown) = InitializeNonLocal : -# 2055| m2055_4(unknown) = Chi : total:m2055_2, partial:m2055_3 +# 2055| mu2055_2(unknown) = AliasedDefinition : +# 2055| mu2055_3(unknown) = InitializeNonLocal : # 2056| r2056_1(glval) = VariableAddress[c] : -# 2056| m2056_2(C) = Uninitialized[c] : &:r2056_1 -# 2056| m2056_3(unknown) = Chi : total:m2055_4, partial:m2056_2 -# 2056| r2056_4(glval) = FunctionAddress[C] : -# 2056| v2056_5(void) = Call[C] : func:r2056_4, this:r2056_1 -# 2056| m2056_6(unknown) = ^CallSideEffect : ~m2056_3 -# 2056| m2056_7(unknown) = Chi : total:m2056_3, partial:m2056_6 -# 2056| m2056_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2056_1 -# 2056| m2056_9(unknown) = Chi : total:m2056_7, partial:m2056_8 +# 2056| mu2056_2(C) = Uninitialized[c] : &:r2056_1 +# 2056| r2056_3(glval) = FunctionAddress[C] : +# 2056| v2056_4(void) = Call[C] : func:r2056_3, this:r2056_1 +# 2056| mu2056_5(unknown) = ^CallSideEffect : ~m? +# 2056| mu2056_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r2056_1 # 2057| r2057_1(glval<..(*)(..)>) = VariableAddress[pfn] : # 2057| r2057_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : # 2057| m2057_3(..(*)(..)) = Store[pfn] : &:r2057_1, r2057_2 @@ -15036,35 +13750,29 @@ ir.cpp: # 2059| r2059_2(glval) = VariableAddress[c] : # 2059| r2059_3(glval) = FunctionAddress[~C] : # 2059| v2059_4(void) = Call[~C] : func:r2059_3, this:r2059_2 -# 2059| m2059_5(unknown) = ^CallSideEffect : ~m2056_9 -# 2059| m2059_6(unknown) = Chi : total:m2056_9, partial:m2059_5 -# 2059| v2059_7(void) = ^IndirectReadSideEffect[-1] : &:r2059_2, ~m2059_6 -# 2059| m2059_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2059_2 -# 2059| m2059_9(unknown) = Chi : total:m2059_6, partial:m2059_8 -# 2055| v2055_5(void) = ReturnVoid : -# 2055| v2055_6(void) = AliasedUse : ~m2059_6 -# 2055| v2055_7(void) = ExitFunction : +# 2059| mu2059_5(unknown) = ^CallSideEffect : ~m? +# 2059| v2059_6(void) = ^IndirectReadSideEffect[-1] : &:r2059_2, ~m? +# 2059| mu2059_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2059_2 +# 2055| v2055_4(void) = ReturnVoid : +# 2055| v2055_5(void) = AliasedUse : ~m? +# 2055| v2055_6(void) = ExitFunction : # 2061| void TernaryTestInt(bool, int, int, int) # 2061| Block 0 -# 2061| v2061_1(void) = EnterFunction : -# 2061| m2061_2(unknown) = AliasedDefinition : -# 2061| m2061_3(unknown) = InitializeNonLocal : -# 2061| m2061_4(unknown) = Chi : total:m2061_2, partial:m2061_3 -# 2061| m2061_5(int) = UninitializedGroup[x,y] : -# 2061| r2061_6(glval) = VariableAddress[a] : -# 2061| m2061_7(bool) = InitializeParameter[a] : &:r2061_6 -# 2061| r2061_8(glval) = VariableAddress[x] : -# 2061| m2061_9(int) = InitializeParameter[x] : &:r2061_8 -# 2061| m2061_10(int) = Chi : total:m2061_5, partial:m2061_9 -# 2061| r2061_11(glval) = VariableAddress[y] : -# 2061| m2061_12(int) = InitializeParameter[y] : &:r2061_11 -# 2061| m2061_13(int) = Chi : total:m2061_10, partial:m2061_12 -# 2061| r2061_14(glval) = VariableAddress[z] : -# 2061| m2061_15(int) = InitializeParameter[z] : &:r2061_14 -# 2062| r2062_1(glval) = VariableAddress[a] : -# 2062| r2062_2(bool) = Load[a] : &:r2062_1, m2061_7 -# 2062| v2062_3(void) = ConditionalBranch : r2062_2 +# 2061| v2061_1(void) = EnterFunction : +# 2061| mu2061_2(unknown) = AliasedDefinition : +# 2061| mu2061_3(unknown) = InitializeNonLocal : +# 2061| r2061_4(glval) = VariableAddress[a] : +# 2061| m2061_5(bool) = InitializeParameter[a] : &:r2061_4 +# 2061| r2061_6(glval) = VariableAddress[x] : +# 2061| mu2061_7(int) = InitializeParameter[x] : &:r2061_6 +# 2061| r2061_8(glval) = VariableAddress[y] : +# 2061| mu2061_9(int) = InitializeParameter[y] : &:r2061_8 +# 2061| r2061_10(glval) = VariableAddress[z] : +# 2061| m2061_11(int) = InitializeParameter[z] : &:r2061_10 +# 2062| r2062_1(glval) = VariableAddress[a] : +# 2062| r2062_2(bool) = Load[a] : &:r2062_1, m2061_5 +# 2062| v2062_3(void) = ConditionalBranch : r2062_2 #-----| False -> Block 3 #-----| True -> Block 2 @@ -15075,21 +13783,21 @@ ir.cpp: # 2062| r2062_7(glval) = VariableAddress[z] : # 2062| m2062_8(int) = Store[z] : &:r2062_7, r2062_6 # 2063| r2063_1(glval) = VariableAddress[a] : -# 2063| r2063_2(bool) = Load[a] : &:r2063_1, m2061_7 +# 2063| r2063_2(bool) = Load[a] : &:r2063_1, m2061_5 # 2063| v2063_3(void) = ConditionalBranch : r2063_2 #-----| False -> Block 6 #-----| True -> Block 5 # 2062| Block 2 # 2062| r2062_9(glval) = VariableAddress[x] : -# 2062| r2062_10(int) = Load[x] : &:r2062_9, m2061_9 +# 2062| r2062_10(int) = Load[x] : &:r2062_9, ~m? # 2062| r2062_11(glval) = VariableAddress[#temp2062:9] : # 2062| m2062_12(int) = Store[#temp2062:9] : &:r2062_11, r2062_10 #-----| Goto -> Block 1 # 2062| Block 3 # 2062| r2062_13(glval) = VariableAddress[y] : -# 2062| r2062_14(int) = Load[y] : &:r2062_13, m2061_12 +# 2062| r2062_14(int) = Load[y] : &:r2062_13, ~m? # 2062| r2062_15(glval) = VariableAddress[#temp2062:9] : # 2062| m2062_16(int) = Store[#temp2062:9] : &:r2062_15, r2062_14 #-----| Goto -> Block 1 @@ -15101,14 +13809,14 @@ ir.cpp: # 2063| r2063_7(glval) = VariableAddress[z] : # 2063| m2063_8(int) = Store[z] : &:r2063_7, r2063_6 # 2064| r2064_1(glval) = VariableAddress[a] : -# 2064| r2064_2(bool) = Load[a] : &:r2064_1, m2061_7 +# 2064| r2064_2(bool) = Load[a] : &:r2064_1, m2061_5 # 2064| v2064_3(void) = ConditionalBranch : r2064_2 #-----| False -> Block 9 #-----| True -> Block 8 # 2063| Block 5 # 2063| r2063_9(glval) = VariableAddress[x] : -# 2063| r2063_10(int) = Load[x] : &:r2063_9, m2061_9 +# 2063| r2063_10(int) = Load[x] : &:r2063_9, ~m? # 2063| r2063_11(glval) = VariableAddress[#temp2063:9] : # 2063| m2063_12(int) = Store[#temp2063:9] : &:r2063_11, r2063_10 #-----| Goto -> Block 4 @@ -15127,7 +13835,7 @@ ir.cpp: # 2064| m2064_8(int) = Store[z] : &:r2064_7, r2064_6 # 2065| r2065_1(int) = Constant[7] : # 2065| r2065_2(glval) = VariableAddress[a] : -# 2065| r2065_3(bool) = Load[a] : &:r2065_2, m2061_7 +# 2065| r2065_3(bool) = Load[a] : &:r2065_2, m2061_5 # 2065| v2065_4(void) = ConditionalBranch : r2065_3 #-----| False -> Block 12 #-----| True -> Block 11 @@ -15145,44 +13853,42 @@ ir.cpp: #-----| Goto -> Block 7 # 2065| Block 10 -# 2065| m2065_5(glval) = Phi : from 11:m2065_12, from 12:m2065_15 +# 2065| m2065_5(glval) = Phi : from 11:m2065_11, from 12:m2065_14 # 2065| r2065_6(glval) = VariableAddress[#temp2065:6] : # 2065| r2065_7(glval) = Load[#temp2065:6] : &:r2065_6, m2065_5 -# 2065| m2065_8(int) = Store[?] : &:r2065_7, r2065_1 -# 2065| m2065_9(int) = Chi : total:m2061_13, partial:m2065_8 +# 2065| mu2065_8(int) = Store[?] : &:r2065_7, r2065_1 # 2066| v2066_1(void) = NoOp : -# 2061| v2061_16(void) = ReturnVoid : -# 2061| v2061_17(void) = AliasedUse : m2061_3 -# 2061| v2061_18(void) = ExitFunction : +# 2061| v2061_12(void) = ReturnVoid : +# 2061| v2061_13(void) = AliasedUse : ~m? +# 2061| v2061_14(void) = ExitFunction : # 2065| Block 11 -# 2065| r2065_10(glval) = VariableAddress[x] : -# 2065| r2065_11(glval) = VariableAddress[#temp2065:6] : -# 2065| m2065_12(glval) = Store[#temp2065:6] : &:r2065_11, r2065_10 +# 2065| r2065_9(glval) = VariableAddress[x] : +# 2065| r2065_10(glval) = VariableAddress[#temp2065:6] : +# 2065| m2065_11(glval) = Store[#temp2065:6] : &:r2065_10, r2065_9 #-----| Goto -> Block 10 # 2065| Block 12 -# 2065| r2065_13(glval) = VariableAddress[y] : -# 2065| r2065_14(glval) = VariableAddress[#temp2065:6] : -# 2065| m2065_15(glval) = Store[#temp2065:6] : &:r2065_14, r2065_13 +# 2065| r2065_12(glval) = VariableAddress[y] : +# 2065| r2065_13(glval) = VariableAddress[#temp2065:6] : +# 2065| m2065_14(glval) = Store[#temp2065:6] : &:r2065_13, r2065_12 #-----| Goto -> Block 10 # 2071| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) # 2071| Block 0 # 2071| v2071_1(void) = EnterFunction : -# 2071| m2071_2(unknown) = AliasedDefinition : -# 2071| m2071_3(unknown) = InitializeNonLocal : -# 2071| m2071_4(unknown) = Chi : total:m2071_2, partial:m2071_3 -# 2071| r2071_5(glval) = VariableAddress[a] : -# 2071| m2071_6(bool) = InitializeParameter[a] : &:r2071_5 -# 2071| r2071_7(glval) = VariableAddress[x] : -# 2071| m2071_8(TernaryPodObj) = InitializeParameter[x] : &:r2071_7 -# 2071| r2071_9(glval) = VariableAddress[y] : -# 2071| m2071_10(TernaryPodObj) = InitializeParameter[y] : &:r2071_9 -# 2071| r2071_11(glval) = VariableAddress[z] : -# 2071| m2071_12(TernaryPodObj) = InitializeParameter[z] : &:r2071_11 +# 2071| mu2071_2(unknown) = AliasedDefinition : +# 2071| mu2071_3(unknown) = InitializeNonLocal : +# 2071| r2071_4(glval) = VariableAddress[a] : +# 2071| m2071_5(bool) = InitializeParameter[a] : &:r2071_4 +# 2071| r2071_6(glval) = VariableAddress[x] : +# 2071| m2071_7(TernaryPodObj) = InitializeParameter[x] : &:r2071_6 +# 2071| r2071_8(glval) = VariableAddress[y] : +# 2071| m2071_9(TernaryPodObj) = InitializeParameter[y] : &:r2071_8 +# 2071| r2071_10(glval) = VariableAddress[z] : +# 2071| m2071_11(TernaryPodObj) = InitializeParameter[z] : &:r2071_10 # 2072| r2072_1(glval) = VariableAddress[a] : -# 2072| r2072_2(bool) = Load[a] : &:r2072_1, m2071_6 +# 2072| r2072_2(bool) = Load[a] : &:r2072_1, m2071_5 # 2072| v2072_3(void) = ConditionalBranch : r2072_2 #-----| False -> Block 3 #-----| True -> Block 2 @@ -15195,21 +13901,21 @@ ir.cpp: # 2072| m2072_8(TernaryPodObj) = Store[z] : &:r2072_7, r2072_6 # 2073| r2073_1(glval) = VariableAddress[#temp2073:9] : # 2073| r2073_2(glval) = VariableAddress[a] : -# 2073| r2073_3(bool) = Load[a] : &:r2073_2, m2071_6 +# 2073| r2073_3(bool) = Load[a] : &:r2073_2, m2071_5 # 2073| v2073_4(void) = ConditionalBranch : r2073_3 #-----| False -> Block 6 #-----| True -> Block 5 # 2072| Block 2 # 2072| r2072_9(glval) = VariableAddress[x] : -# 2072| r2072_10(TernaryPodObj) = Load[x] : &:r2072_9, m2071_8 +# 2072| r2072_10(TernaryPodObj) = Load[x] : &:r2072_9, m2071_7 # 2072| r2072_11(glval) = VariableAddress[#temp2072:9] : # 2072| m2072_12(TernaryPodObj) = Store[#temp2072:9] : &:r2072_11, r2072_10 #-----| Goto -> Block 1 # 2072| Block 3 # 2072| r2072_13(glval) = VariableAddress[y] : -# 2072| r2072_14(TernaryPodObj) = Load[y] : &:r2072_13, m2071_10 +# 2072| r2072_14(TernaryPodObj) = Load[y] : &:r2072_13, m2071_9 # 2072| r2072_15(glval) = VariableAddress[#temp2072:9] : # 2072| m2072_16(TernaryPodObj) = Store[#temp2072:9] : &:r2072_15, r2072_14 #-----| Goto -> Block 1 @@ -15224,7 +13930,7 @@ ir.cpp: # 2073| m2073_11(TernaryPodObj) = Store[z] : &:r2073_10, r2073_9 # 2074| r2074_1(glval) = VariableAddress[#temp2074:9] : # 2074| r2074_2(glval) = VariableAddress[a] : -# 2074| r2074_3(bool) = Load[a] : &:r2074_2, m2071_6 +# 2074| r2074_3(bool) = Load[a] : &:r2074_2, m2071_5 # 2074| v2074_4(void) = ConditionalBranch : r2074_3 #-----| False -> Block 9 #-----| True -> Block 8 @@ -15232,7 +13938,7 @@ ir.cpp: # 2073| Block 5 # 2073| r2073_12(glval) = VariableAddress[#temp2073:13] : # 2073| r2073_13(glval) = VariableAddress[x] : -# 2073| r2073_14(TernaryPodObj) = Load[x] : &:r2073_13, m2071_8 +# 2073| r2073_14(TernaryPodObj) = Load[x] : &:r2073_13, m2071_7 # 2073| m2073_15(TernaryPodObj) = Store[#temp2073:13] : &:r2073_12, r2073_14 # 2073| r2073_16(TernaryPodObj) = Load[#temp2073:13] : &:r2073_12, m2073_15 # 2073| r2073_17(glval) = VariableAddress[#temp2073:9] : @@ -15261,7 +13967,7 @@ ir.cpp: # 2075| m2075_3(TernaryPodObj) = Store[#temp2075:23] : &:r2075_1, r2075_2 # 2075| r2075_4(TernaryPodObj) = Load[#temp2075:23] : &:r2075_1, m2075_3 # 2075| r2075_5(glval) = VariableAddress[a] : -# 2075| r2075_6(bool) = Load[a] : &:r2075_5, m2071_6 +# 2075| r2075_6(bool) = Load[a] : &:r2075_5, m2071_5 # 2075| v2075_7(void) = ConditionalBranch : r2075_6 #-----| False -> Block 12 #-----| True -> Block 11 @@ -15293,362 +13999,322 @@ ir.cpp: # 2075| r2075_13(glval) = CopyValue : r2075_11 # 2075| m2075_14(TernaryPodObj) = Store[?] : &:r2075_13, r2075_4 # 2076| v2076_1(void) = NoOp : -# 2071| v2071_13(void) = ReturnVoid : -# 2071| v2071_14(void) = AliasedUse : m2071_3 -# 2071| v2071_15(void) = ExitFunction : +# 2071| v2071_12(void) = ReturnVoid : +# 2071| v2071_13(void) = AliasedUse : ~m? +# 2071| v2071_14(void) = ExitFunction : # 2075| Block 11 # 2075| r2075_15(glval) = VariableAddress[x] : -# 2075| r2075_16(TernaryPodObj) = Load[x] : &:r2075_15, m2071_8 +# 2075| r2075_16(TernaryPodObj) = Load[x] : &:r2075_15, m2071_7 # 2075| r2075_17(glval) = VariableAddress[#temp2075:10] : # 2075| m2075_18(TernaryPodObj) = Store[#temp2075:10] : &:r2075_17, r2075_16 #-----| Goto -> Block 10 # 2075| Block 12 # 2075| r2075_19(glval) = VariableAddress[y] : -# 2075| r2075_20(TernaryPodObj) = Load[y] : &:r2075_19, m2071_10 +# 2075| r2075_20(TernaryPodObj) = Load[y] : &:r2075_19, m2071_9 # 2075| r2075_21(glval) = VariableAddress[#temp2075:10] : # 2075| m2075_22(TernaryPodObj) = Store[#temp2075:10] : &:r2075_21, r2075_20 #-----| Goto -> Block 10 # 2078| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) # 2078| Block 0 -# 2078| v2078_1(void) = EnterFunction : -# 2078| m2078_2(unknown) = AliasedDefinition : -# 2078| m2078_3(unknown) = InitializeNonLocal : -# 2078| m2078_4(unknown) = Chi : total:m2078_2, partial:m2078_3 -# 2078| r2078_5(glval) = VariableAddress[#this] : -# 2078| m2078_6(glval) = InitializeParameter[#this] : &:r2078_5 -# 2078| r2078_7(glval) = Load[#this] : &:r2078_5, m2078_6 -# 2078| m2078_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2078_7 -#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : -#-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 -#-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -#-----| r0_5(glval) = VariableAddress[#return] : -#-----| r0_6(glval) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2078_6 -#-----| r0_8(glval) = CopyValue : r0_7 -#-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 -#-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2078| v2078_9(void) = ReturnIndirection[#this] : &:r2078_7, m2078_8 -#-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2078| r2078_10(glval) = VariableAddress[#return] : -# 2078| v2078_11(void) = ReturnValue : &:r2078_10, m0_10 -# 2078| v2078_12(void) = AliasedUse : m2078_3 -# 2078| v2078_13(void) = ExitFunction : +# 2078| v2078_1(void) = EnterFunction : +# 2078| mu2078_2(unknown) = AliasedDefinition : +# 2078| mu2078_3(unknown) = InitializeNonLocal : +# 2078| r2078_4(glval) = VariableAddress[#this] : +# 2078| m2078_5(glval) = InitializeParameter[#this] : &:r2078_4 +# 2078| r2078_6(glval) = Load[#this] : &:r2078_4, m2078_5 +# 2078| mu2078_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2078_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +#-----| r0_5(glval) = VariableAddress[#return] : +#-----| r0_6(glval) = VariableAddress[#this] : +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2078_5 +#-----| r0_8(glval) = CopyValue : r0_7 +#-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 +#-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 +# 2078| v2078_8(void) = ReturnIndirection[#this] : &:r2078_6, ~m? +#-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 2078| r2078_9(glval) = VariableAddress[#return] : +# 2078| v2078_10(void) = ReturnValue : &:r2078_9, m0_10 +# 2078| v2078_11(void) = AliasedUse : ~m? +# 2078| v2078_12(void) = ExitFunction : # 2078| void TernaryNonPodObj::TernaryNonPodObj() # 2078| Block 0 # 2078| v2078_1(void) = EnterFunction : -# 2078| m2078_2(unknown) = AliasedDefinition : -# 2078| m2078_3(unknown) = InitializeNonLocal : -# 2078| m2078_4(unknown) = Chi : total:m2078_2, partial:m2078_3 -# 2078| r2078_5(glval) = VariableAddress[#this] : -# 2078| m2078_6(glval) = InitializeParameter[#this] : &:r2078_5 -# 2078| r2078_7(glval) = Load[#this] : &:r2078_5, m2078_6 -# 2078| m2078_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2078_7 -# 2078| v2078_9(void) = NoOp : -# 2078| v2078_10(void) = ReturnIndirection[#this] : &:r2078_7, m2078_8 -# 2078| v2078_11(void) = ReturnVoid : -# 2078| v2078_12(void) = AliasedUse : m2078_3 -# 2078| v2078_13(void) = ExitFunction : +# 2078| mu2078_2(unknown) = AliasedDefinition : +# 2078| mu2078_3(unknown) = InitializeNonLocal : +# 2078| r2078_4(glval) = VariableAddress[#this] : +# 2078| m2078_5(glval) = InitializeParameter[#this] : &:r2078_4 +# 2078| r2078_6(glval) = Load[#this] : &:r2078_4, m2078_5 +# 2078| mu2078_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2078_6 +# 2078| v2078_8(void) = NoOp : +# 2078| v2078_9(void) = ReturnIndirection[#this] : &:r2078_6, ~m? +# 2078| v2078_10(void) = ReturnVoid : +# 2078| v2078_11(void) = AliasedUse : ~m? +# 2078| v2078_12(void) = ExitFunction : # 2078| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) # 2078| Block 0 # 2078| v2078_1(void) = EnterFunction : -# 2078| m2078_2(unknown) = AliasedDefinition : -# 2078| m2078_3(unknown) = InitializeNonLocal : -# 2078| m2078_4(unknown) = Chi : total:m2078_2, partial:m2078_3 -# 2078| r2078_5(glval) = VariableAddress[#this] : -# 2078| m2078_6(glval) = InitializeParameter[#this] : &:r2078_5 -# 2078| r2078_7(glval) = Load[#this] : &:r2078_5, m2078_6 -# 2078| m2078_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2078_7 +# 2078| mu2078_2(unknown) = AliasedDefinition : +# 2078| mu2078_3(unknown) = InitializeNonLocal : +# 2078| r2078_4(glval) = VariableAddress[#this] : +# 2078| m2078_5(glval) = InitializeParameter[#this] : &:r2078_4 +# 2078| r2078_6(glval) = Load[#this] : &:r2078_4, m2078_5 +# 2078| mu2078_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2078_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2078| v2078_9(void) = NoOp : -# 2078| v2078_10(void) = ReturnIndirection[#this] : &:r2078_7, m2078_8 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2078| v2078_11(void) = ReturnVoid : -# 2078| v2078_12(void) = AliasedUse : m2078_3 -# 2078| v2078_13(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2078| v2078_8(void) = NoOp : +# 2078| v2078_9(void) = ReturnIndirection[#this] : &:r2078_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 2078| v2078_10(void) = ReturnVoid : +# 2078| v2078_11(void) = AliasedUse : ~m? +# 2078| v2078_12(void) = ExitFunction : # 2079| void TernaryNonPodObj::~TernaryNonPodObj() # 2079| Block 0 # 2079| v2079_1(void) = EnterFunction : -# 2079| m2079_2(unknown) = AliasedDefinition : -# 2079| m2079_3(unknown) = InitializeNonLocal : -# 2079| m2079_4(unknown) = Chi : total:m2079_2, partial:m2079_3 -# 2079| r2079_5(glval) = VariableAddress[#this] : -# 2079| m2079_6(glval) = InitializeParameter[#this] : &:r2079_5 -# 2079| r2079_7(glval) = Load[#this] : &:r2079_5, m2079_6 -# 2079| m2079_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2079_7 -# 2079| v2079_9(void) = NoOp : -# 2079| v2079_10(void) = ReturnIndirection[#this] : &:r2079_7, m2079_8 -# 2079| v2079_11(void) = ReturnVoid : -# 2079| v2079_12(void) = AliasedUse : m2079_3 -# 2079| v2079_13(void) = ExitFunction : +# 2079| mu2079_2(unknown) = AliasedDefinition : +# 2079| mu2079_3(unknown) = InitializeNonLocal : +# 2079| r2079_4(glval) = VariableAddress[#this] : +# 2079| m2079_5(glval) = InitializeParameter[#this] : &:r2079_4 +# 2079| r2079_6(glval) = Load[#this] : &:r2079_4, m2079_5 +# 2079| mu2079_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2079_6 +# 2079| v2079_8(void) = NoOp : +# 2079| v2079_9(void) = ReturnIndirection[#this] : &:r2079_6, ~m? +# 2079| v2079_10(void) = ReturnVoid : +# 2079| v2079_11(void) = AliasedUse : ~m? +# 2079| v2079_12(void) = ExitFunction : # 2082| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) # 2082| Block 0 # 2082| v2082_1(void) = EnterFunction : -# 2082| m2082_2(unknown) = AliasedDefinition : -# 2082| m2082_3(unknown) = InitializeNonLocal : -# 2082| m2082_4(unknown) = Chi : total:m2082_2, partial:m2082_3 -# 2082| m2082_5(unknown) = UninitializedGroup[x,y] : -# 2082| r2082_6(glval) = VariableAddress[a] : -# 2082| m2082_7(bool) = InitializeParameter[a] : &:r2082_6 -# 2082| r2082_8(glval) = VariableAddress[x] : -# 2082| m2082_9(TernaryNonPodObj) = InitializeParameter[x] : &:r2082_8 -# 2082| m2082_10(unknown) = Chi : total:m2082_5, partial:m2082_9 -# 2082| r2082_11(glval) = VariableAddress[y] : -# 2082| m2082_12(TernaryNonPodObj) = InitializeParameter[y] : &:r2082_11 -# 2082| m2082_13(unknown) = Chi : total:m2082_10, partial:m2082_12 -# 2082| r2082_14(glval) = VariableAddress[z] : -# 2082| m2082_15(TernaryNonPodObj) = InitializeParameter[z] : &:r2082_14 +# 2082| mu2082_2(unknown) = AliasedDefinition : +# 2082| mu2082_3(unknown) = InitializeNonLocal : +# 2082| r2082_4(glval) = VariableAddress[a] : +# 2082| m2082_5(bool) = InitializeParameter[a] : &:r2082_4 +# 2082| r2082_6(glval) = VariableAddress[x] : +# 2082| mu2082_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2082_6 +# 2082| r2082_8(glval) = VariableAddress[y] : +# 2082| mu2082_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2082_8 +# 2082| r2082_10(glval) = VariableAddress[z] : +# 2082| mu2082_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2082_10 # 2083| r2083_1(glval) = VariableAddress[z] : # 2083| r2083_2(glval) = FunctionAddress[operator=] : # 2083| r2083_3(glval) = VariableAddress[a] : -# 2083| r2083_4(bool) = Load[a] : &:r2083_3, m2082_7 +# 2083| r2083_4(bool) = Load[a] : &:r2083_3, m2082_5 # 2083| v2083_5(void) = ConditionalBranch : r2083_4 #-----| False -> Block 3 #-----| True -> Block 2 # 2083| Block 1 -# 2083| m2083_6(glval) = Phi : from 2:m2083_21, from 3:m2083_24 +# 2083| m2083_6(glval) = Phi : from 2:m2083_19, from 3:m2083_22 # 2083| r2083_7(glval) = VariableAddress[#temp2083:9] : # 2083| r2083_8(glval) = Load[#temp2083:9] : &:r2083_7, m2083_6 # 2083| r2083_9(glval) = Convert : r2083_8 # 2083| r2083_10(TernaryNonPodObj &) = CopyValue : r2083_9 # 2083| r2083_11(TernaryNonPodObj &) = Call[operator=] : func:r2083_2, this:r2083_1, 0:r2083_10 -# 2083| m2083_12(unknown) = ^CallSideEffect : ~m2082_4 -# 2083| m2083_13(unknown) = Chi : total:m2082_4, partial:m2083_12 -# 2083| v2083_14(void) = ^IndirectReadSideEffect[-1] : &:r2083_1, m2082_15 -# 2083| v2083_15(void) = ^BufferReadSideEffect[0] : &:r2083_10, ~m2082_13 -# 2083| m2083_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 -# 2083| m2083_17(TernaryNonPodObj) = Chi : total:m2082_15, partial:m2083_16 -# 2083| r2083_18(glval) = CopyValue : r2083_11 +# 2083| mu2083_12(unknown) = ^CallSideEffect : ~m? +# 2083| v2083_13(void) = ^IndirectReadSideEffect[-1] : &:r2083_1, ~m? +# 2083| v2083_14(void) = ^BufferReadSideEffect[0] : &:r2083_10, ~m? +# 2083| mu2083_15(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 +# 2083| r2083_16(glval) = CopyValue : r2083_11 # 2084| r2084_1(glval) = VariableAddress[z] : # 2084| r2084_2(glval) = FunctionAddress[operator=] : # 2084| r2084_3(glval) = VariableAddress[#temp2084:9] : # 2084| r2084_4(glval) = VariableAddress[a] : -# 2084| r2084_5(bool) = Load[a] : &:r2084_4, m2082_7 +# 2084| r2084_5(bool) = Load[a] : &:r2084_4, m2082_5 # 2084| v2084_6(void) = ConditionalBranch : r2084_5 #-----| False -> Block 6 #-----| True -> Block 5 # 2083| Block 2 -# 2083| r2083_19(glval) = VariableAddress[x] : -# 2083| r2083_20(glval) = VariableAddress[#temp2083:9] : -# 2083| m2083_21(glval) = Store[#temp2083:9] : &:r2083_20, r2083_19 +# 2083| r2083_17(glval) = VariableAddress[x] : +# 2083| r2083_18(glval) = VariableAddress[#temp2083:9] : +# 2083| m2083_19(glval) = Store[#temp2083:9] : &:r2083_18, r2083_17 #-----| Goto -> Block 1 # 2083| Block 3 -# 2083| r2083_22(glval) = VariableAddress[y] : -# 2083| r2083_23(glval) = VariableAddress[#temp2083:9] : -# 2083| m2083_24(glval) = Store[#temp2083:9] : &:r2083_23, r2083_22 +# 2083| r2083_20(glval) = VariableAddress[y] : +# 2083| r2083_21(glval) = VariableAddress[#temp2083:9] : +# 2083| m2083_22(glval) = Store[#temp2083:9] : &:r2083_21, r2083_20 #-----| Goto -> Block 1 # 2084| Block 4 -# 2084| m2084_7(unknown) = Phi : from 5:~m2084_39, from 6:~m2084_51 -# 2084| m2084_8(TernaryNonPodObj) = Phi : from 5:m2084_45, from 6:m2084_56 -# 2084| r2084_9(glval) = VariableAddress[#temp2084:9] : -# 2084| r2084_10(TernaryNonPodObj) = Load[#temp2084:9] : &:r2084_9, m2084_8 -# 2084| m2084_11(TernaryNonPodObj) = Store[#temp2084:9] : &:r2084_3, r2084_10 -# 2084| m2084_12(unknown) = Chi : total:m2084_7, partial:m2084_11 -# 2084| r2084_13(glval) = Convert : r2084_3 -# 2084| r2084_14(TernaryNonPodObj &) = CopyValue : r2084_13 -# 2084| r2084_15(TernaryNonPodObj &) = Call[operator=] : func:r2084_2, this:r2084_1, 0:r2084_14 -# 2084| m2084_16(unknown) = ^CallSideEffect : ~m2084_12 -# 2084| m2084_17(unknown) = Chi : total:m2084_12, partial:m2084_16 -# 2084| v2084_18(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, m2083_17 -# 2084| v2084_19(void) = ^BufferReadSideEffect[0] : &:r2084_14, ~m2084_17 -# 2084| m2084_20(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 -# 2084| m2084_21(TernaryNonPodObj) = Chi : total:m2083_17, partial:m2084_20 -# 2084| r2084_22(glval) = CopyValue : r2084_3 -# 2084| r2084_23(glval) = FunctionAddress[~TernaryNonPodObj] : -# 2084| v2084_24(void) = Call[~TernaryNonPodObj] : func:r2084_23, this:r2084_22 -# 2084| m2084_25(unknown) = ^CallSideEffect : ~m2084_17 -# 2084| m2084_26(unknown) = Chi : total:m2084_17, partial:m2084_25 -# 2084| v2084_27(void) = ^IndirectReadSideEffect[-1] : &:r2084_22, ~m2084_26 -# 2084| m2084_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_22 -# 2084| m2084_29(unknown) = Chi : total:m2084_26, partial:m2084_28 -# 2084| r2084_30(glval) = CopyValue : r2084_15 +# 2084| m2084_7(TernaryNonPodObj) = Phi : from 5:m2084_37, from 6:m2084_46 +# 2084| r2084_8(glval) = VariableAddress[#temp2084:9] : +# 2084| r2084_9(TernaryNonPodObj) = Load[#temp2084:9] : &:r2084_8, m2084_7 +# 2084| mu2084_10(TernaryNonPodObj) = Store[#temp2084:9] : &:r2084_3, r2084_9 +# 2084| r2084_11(glval) = Convert : r2084_3 +# 2084| r2084_12(TernaryNonPodObj &) = CopyValue : r2084_11 +# 2084| r2084_13(TernaryNonPodObj &) = Call[operator=] : func:r2084_2, this:r2084_1, 0:r2084_12 +# 2084| mu2084_14(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_15(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, ~m? +# 2084| v2084_16(void) = ^BufferReadSideEffect[0] : &:r2084_12, ~m? +# 2084| mu2084_17(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 +# 2084| r2084_18(glval) = CopyValue : r2084_3 +# 2084| r2084_19(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2084| v2084_20(void) = Call[~TernaryNonPodObj] : func:r2084_19, this:r2084_18 +# 2084| mu2084_21(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_22(void) = ^IndirectReadSideEffect[-1] : &:r2084_18, ~m? +# 2084| mu2084_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_18 +# 2084| r2084_24(glval) = CopyValue : r2084_13 # 2085| r2085_1(glval) = VariableAddress[z] : # 2085| r2085_2(glval) = FunctionAddress[operator=] : # 2085| r2085_3(glval) = VariableAddress[#temp2085:9] : # 2085| r2085_4(glval) = VariableAddress[a] : -# 2085| r2085_5(bool) = Load[a] : &:r2085_4, m2082_7 +# 2085| r2085_5(bool) = Load[a] : &:r2085_4, m2082_5 # 2085| v2085_6(void) = ConditionalBranch : r2085_5 #-----| False -> Block 9 #-----| True -> Block 8 # 2084| Block 5 -# 2084| r2084_31(glval) = VariableAddress[#temp2084:13] : -# 2084| m2084_32(TernaryNonPodObj) = Uninitialized[#temp2084:13] : &:r2084_31 -# 2084| r2084_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2084| r2084_34(glval) = VariableAddress[x] : -# 2084| r2084_35(glval) = Convert : r2084_34 -# 2084| r2084_36(TernaryNonPodObj &) = CopyValue : r2084_35 -# 2084| v2084_37(void) = Call[TernaryNonPodObj] : func:r2084_33, this:r2084_31, 0:r2084_36 -# 2084| m2084_38(unknown) = ^CallSideEffect : ~m2083_13 -# 2084| m2084_39(unknown) = Chi : total:m2083_13, partial:m2084_38 -# 2084| v2084_40(void) = ^BufferReadSideEffect[0] : &:r2084_36, ~m2082_9 -# 2084| m2084_41(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_31 -# 2084| m2084_42(TernaryNonPodObj) = Chi : total:m2084_32, partial:m2084_41 -# 2084| r2084_43(TernaryNonPodObj) = Load[#temp2084:13] : &:r2084_31, m2084_42 -# 2084| r2084_44(glval) = VariableAddress[#temp2084:9] : -# 2084| m2084_45(TernaryNonPodObj) = Store[#temp2084:9] : &:r2084_44, r2084_43 +# 2084| r2084_25(glval) = VariableAddress[#temp2084:13] : +# 2084| mu2084_26(TernaryNonPodObj) = Uninitialized[#temp2084:13] : &:r2084_25 +# 2084| r2084_27(glval) = FunctionAddress[TernaryNonPodObj] : +# 2084| r2084_28(glval) = VariableAddress[x] : +# 2084| r2084_29(glval) = Convert : r2084_28 +# 2084| r2084_30(TernaryNonPodObj &) = CopyValue : r2084_29 +# 2084| v2084_31(void) = Call[TernaryNonPodObj] : func:r2084_27, this:r2084_25, 0:r2084_30 +# 2084| mu2084_32(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_33(void) = ^BufferReadSideEffect[0] : &:r2084_30, ~m? +# 2084| mu2084_34(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_25 +# 2084| r2084_35(TernaryNonPodObj) = Load[#temp2084:13] : &:r2084_25, ~m? +# 2084| r2084_36(glval) = VariableAddress[#temp2084:9] : +# 2084| m2084_37(TernaryNonPodObj) = Store[#temp2084:9] : &:r2084_36, r2084_35 #-----| Goto -> Block 4 # 2084| Block 6 -# 2084| r2084_46(glval) = VariableAddress[#temp2084:17] : -# 2084| m2084_47(TernaryNonPodObj) = Uninitialized[#temp2084:17] : &:r2084_46 -# 2084| r2084_48(glval) = FunctionAddress[TernaryNonPodObj] : -# 2084| v2084_49(void) = Call[TernaryNonPodObj] : func:r2084_48, this:r2084_46 -# 2084| m2084_50(unknown) = ^CallSideEffect : ~m2083_13 -# 2084| m2084_51(unknown) = Chi : total:m2083_13, partial:m2084_50 -# 2084| m2084_52(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_46 -# 2084| m2084_53(TernaryNonPodObj) = Chi : total:m2084_47, partial:m2084_52 -# 2084| r2084_54(TernaryNonPodObj) = Load[#temp2084:17] : &:r2084_46, m2084_53 -# 2084| r2084_55(glval) = VariableAddress[#temp2084:9] : -# 2084| m2084_56(TernaryNonPodObj) = Store[#temp2084:9] : &:r2084_55, r2084_54 +# 2084| r2084_38(glval) = VariableAddress[#temp2084:17] : +# 2084| mu2084_39(TernaryNonPodObj) = Uninitialized[#temp2084:17] : &:r2084_38 +# 2084| r2084_40(glval) = FunctionAddress[TernaryNonPodObj] : +# 2084| v2084_41(void) = Call[TernaryNonPodObj] : func:r2084_40, this:r2084_38 +# 2084| mu2084_42(unknown) = ^CallSideEffect : ~m? +# 2084| mu2084_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_38 +# 2084| r2084_44(TernaryNonPodObj) = Load[#temp2084:17] : &:r2084_38, ~m? +# 2084| r2084_45(glval) = VariableAddress[#temp2084:9] : +# 2084| m2084_46(TernaryNonPodObj) = Store[#temp2084:9] : &:r2084_45, r2084_44 #-----| Goto -> Block 4 # 2085| Block 7 -# 2085| m2085_7(unknown) = Phi : from 8:~m2085_36, from 9:~m2085_47 -# 2085| m2085_8(TernaryNonPodObj) = Phi : from 8:m2085_41, from 9:m2085_52 -# 2085| r2085_9(glval) = VariableAddress[#temp2085:9] : -# 2085| r2085_10(TernaryNonPodObj) = Load[#temp2085:9] : &:r2085_9, m2085_8 -# 2085| m2085_11(TernaryNonPodObj) = Store[#temp2085:9] : &:r2085_3, r2085_10 -# 2085| m2085_12(unknown) = Chi : total:m2085_7, partial:m2085_11 -# 2085| r2085_13(glval) = Convert : r2085_3 -# 2085| r2085_14(TernaryNonPodObj &) = CopyValue : r2085_13 -# 2085| r2085_15(TernaryNonPodObj &) = Call[operator=] : func:r2085_2, this:r2085_1, 0:r2085_14 -# 2085| m2085_16(unknown) = ^CallSideEffect : ~m2085_12 -# 2085| m2085_17(unknown) = Chi : total:m2085_12, partial:m2085_16 -# 2085| v2085_18(void) = ^IndirectReadSideEffect[-1] : &:r2085_1, m2084_21 -# 2085| v2085_19(void) = ^BufferReadSideEffect[0] : &:r2085_14, ~m2085_17 -# 2085| m2085_20(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_1 -# 2085| m2085_21(TernaryNonPodObj) = Chi : total:m2084_21, partial:m2085_20 -# 2085| r2085_22(glval) = CopyValue : r2085_3 -# 2085| r2085_23(glval) = FunctionAddress[~TernaryNonPodObj] : -# 2085| v2085_24(void) = Call[~TernaryNonPodObj] : func:r2085_23, this:r2085_22 -# 2085| m2085_25(unknown) = ^CallSideEffect : ~m2085_17 -# 2085| m2085_26(unknown) = Chi : total:m2085_17, partial:m2085_25 -# 2085| v2085_27(void) = ^IndirectReadSideEffect[-1] : &:r2085_22, ~m2085_26 -# 2085| m2085_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_22 -# 2085| m2085_29(unknown) = Chi : total:m2085_26, partial:m2085_28 -# 2085| r2085_30(glval) = CopyValue : r2085_15 +# 2085| m2085_7(TernaryNonPodObj) = Phi : from 8:m2085_33, from 9:m2085_42 +# 2085| r2085_8(glval) = VariableAddress[#temp2085:9] : +# 2085| r2085_9(TernaryNonPodObj) = Load[#temp2085:9] : &:r2085_8, m2085_7 +# 2085| mu2085_10(TernaryNonPodObj) = Store[#temp2085:9] : &:r2085_3, r2085_9 +# 2085| r2085_11(glval) = Convert : r2085_3 +# 2085| r2085_12(TernaryNonPodObj &) = CopyValue : r2085_11 +# 2085| r2085_13(TernaryNonPodObj &) = Call[operator=] : func:r2085_2, this:r2085_1, 0:r2085_12 +# 2085| mu2085_14(unknown) = ^CallSideEffect : ~m? +# 2085| v2085_15(void) = ^IndirectReadSideEffect[-1] : &:r2085_1, ~m? +# 2085| v2085_16(void) = ^BufferReadSideEffect[0] : &:r2085_12, ~m? +# 2085| mu2085_17(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_1 +# 2085| r2085_18(glval) = CopyValue : r2085_3 +# 2085| r2085_19(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2085| v2085_20(void) = Call[~TernaryNonPodObj] : func:r2085_19, this:r2085_18 +# 2085| mu2085_21(unknown) = ^CallSideEffect : ~m? +# 2085| v2085_22(void) = ^IndirectReadSideEffect[-1] : &:r2085_18, ~m? +# 2085| mu2085_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_18 +# 2085| r2085_24(glval) = CopyValue : r2085_13 # 2086| r2086_1(glval) = VariableAddress[z] : # 2086| r2086_2(glval) = FunctionAddress[operator=] : # 2086| r2086_3(glval) = VariableAddress[a] : -# 2086| r2086_4(bool) = Load[a] : &:r2086_3, m2082_7 +# 2086| r2086_4(bool) = Load[a] : &:r2086_3, m2082_5 # 2086| v2086_5(void) = ConditionalBranch : r2086_4 #-----| False -> Block 12 #-----| True -> Block 11 # 2085| Block 8 -# 2085| r2085_31(glval) = VariableAddress[#temp2085:13] : -# 2085| m2085_32(TernaryNonPodObj) = Uninitialized[#temp2085:13] : &:r2085_31 -# 2085| r2085_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2085| v2085_34(void) = Call[TernaryNonPodObj] : func:r2085_33, this:r2085_31 -# 2085| m2085_35(unknown) = ^CallSideEffect : ~m2084_29 -# 2085| m2085_36(unknown) = Chi : total:m2084_29, partial:m2085_35 -# 2085| m2085_37(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_31 -# 2085| m2085_38(TernaryNonPodObj) = Chi : total:m2085_32, partial:m2085_37 -# 2085| r2085_39(TernaryNonPodObj) = Load[#temp2085:13] : &:r2085_31, m2085_38 -# 2085| r2085_40(glval) = VariableAddress[#temp2085:9] : -# 2085| m2085_41(TernaryNonPodObj) = Store[#temp2085:9] : &:r2085_40, r2085_39 +# 2085| r2085_25(glval) = VariableAddress[#temp2085:13] : +# 2085| mu2085_26(TernaryNonPodObj) = Uninitialized[#temp2085:13] : &:r2085_25 +# 2085| r2085_27(glval) = FunctionAddress[TernaryNonPodObj] : +# 2085| v2085_28(void) = Call[TernaryNonPodObj] : func:r2085_27, this:r2085_25 +# 2085| mu2085_29(unknown) = ^CallSideEffect : ~m? +# 2085| mu2085_30(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_25 +# 2085| r2085_31(TernaryNonPodObj) = Load[#temp2085:13] : &:r2085_25, ~m? +# 2085| r2085_32(glval) = VariableAddress[#temp2085:9] : +# 2085| m2085_33(TernaryNonPodObj) = Store[#temp2085:9] : &:r2085_32, r2085_31 #-----| Goto -> Block 7 # 2085| Block 9 -# 2085| r2085_42(glval) = VariableAddress[#temp2085:34] : -# 2085| m2085_43(TernaryNonPodObj) = Uninitialized[#temp2085:34] : &:r2085_42 -# 2085| r2085_44(glval) = FunctionAddress[TernaryNonPodObj] : -# 2085| v2085_45(void) = Call[TernaryNonPodObj] : func:r2085_44, this:r2085_42 -# 2085| m2085_46(unknown) = ^CallSideEffect : ~m2084_29 -# 2085| m2085_47(unknown) = Chi : total:m2084_29, partial:m2085_46 -# 2085| m2085_48(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_42 -# 2085| m2085_49(TernaryNonPodObj) = Chi : total:m2085_43, partial:m2085_48 -# 2085| r2085_50(TernaryNonPodObj) = Load[#temp2085:34] : &:r2085_42, m2085_49 -# 2085| r2085_51(glval) = VariableAddress[#temp2085:9] : -# 2085| m2085_52(TernaryNonPodObj) = Store[#temp2085:9] : &:r2085_51, r2085_50 +# 2085| r2085_34(glval) = VariableAddress[#temp2085:34] : +# 2085| mu2085_35(TernaryNonPodObj) = Uninitialized[#temp2085:34] : &:r2085_34 +# 2085| r2085_36(glval) = FunctionAddress[TernaryNonPodObj] : +# 2085| v2085_37(void) = Call[TernaryNonPodObj] : func:r2085_36, this:r2085_34 +# 2085| mu2085_38(unknown) = ^CallSideEffect : ~m? +# 2085| mu2085_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2085_34 +# 2085| r2085_40(TernaryNonPodObj) = Load[#temp2085:34] : &:r2085_34, ~m? +# 2085| r2085_41(glval) = VariableAddress[#temp2085:9] : +# 2085| m2085_42(TernaryNonPodObj) = Store[#temp2085:9] : &:r2085_41, r2085_40 #-----| Goto -> Block 7 # 2086| Block 10 -# 2086| m2086_6(glval) = Phi : from 11:m2086_49, from 12:m2086_52 +# 2086| m2086_6(glval) = Phi : from 11:m2086_40, from 12:m2086_43 # 2086| r2086_7(glval) = VariableAddress[#temp2086:10] : # 2086| r2086_8(glval) = Load[#temp2086:10] : &:r2086_7, m2086_6 # 2086| r2086_9(glval) = Convert : r2086_8 # 2086| r2086_10(TernaryNonPodObj &) = CopyValue : r2086_9 # 2086| r2086_11(TernaryNonPodObj &) = Call[operator=] : func:r2086_2, this:r2086_1, 0:r2086_10 -# 2086| m2086_12(unknown) = ^CallSideEffect : ~m2085_29 -# 2086| m2086_13(unknown) = Chi : total:m2085_29, partial:m2086_12 -# 2086| v2086_14(void) = ^IndirectReadSideEffect[-1] : &:r2086_1, m2085_21 -# 2086| v2086_15(void) = ^BufferReadSideEffect[0] : &:r2086_10, ~m2082_13 -# 2086| m2086_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_1 -# 2086| m2086_17(TernaryNonPodObj) = Chi : total:m2085_21, partial:m2086_16 -# 2086| r2086_18(glval) = CopyValue : r2086_11 -# 2086| r2086_19(glval) = FunctionAddress[operator=] : -# 2086| r2086_20(glval) = VariableAddress[#temp2086:23] : -# 2086| m2086_21(TernaryNonPodObj) = Uninitialized[#temp2086:23] : &:r2086_20 -# 2086| m2086_22(unknown) = Chi : total:m2086_13, partial:m2086_21 -# 2086| r2086_23(glval) = FunctionAddress[TernaryNonPodObj] : -# 2086| v2086_24(void) = Call[TernaryNonPodObj] : func:r2086_23, this:r2086_20 -# 2086| m2086_25(unknown) = ^CallSideEffect : ~m2086_22 -# 2086| m2086_26(unknown) = Chi : total:m2086_22, partial:m2086_25 -# 2086| m2086_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_20 -# 2086| m2086_28(unknown) = Chi : total:m2086_26, partial:m2086_27 -# 2086| r2086_29(glval) = Convert : r2086_20 -# 2086| r2086_30(TernaryNonPodObj &) = CopyValue : r2086_29 -# 2086| r2086_31(TernaryNonPodObj &) = Call[operator=] : func:r2086_19, this:r2086_18, 0:r2086_30 -# 2086| m2086_32(unknown) = ^CallSideEffect : ~m2086_28 -# 2086| m2086_33(unknown) = Chi : total:m2086_28, partial:m2086_32 -# 2086| v2086_34(void) = ^IndirectReadSideEffect[-1] : &:r2086_18, m2086_17 -# 2086| v2086_35(void) = ^BufferReadSideEffect[0] : &:r2086_30, ~m2086_33 -# 2086| m2086_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_18 -# 2086| m2086_37(TernaryNonPodObj) = Chi : total:m2086_17, partial:m2086_36 -# 2086| r2086_38(glval) = CopyValue : r2086_20 -# 2086| r2086_39(glval) = FunctionAddress[~TernaryNonPodObj] : -# 2086| v2086_40(void) = Call[~TernaryNonPodObj] : func:r2086_39, this:r2086_38 -# 2086| m2086_41(unknown) = ^CallSideEffect : ~m2086_33 -# 2086| m2086_42(unknown) = Chi : total:m2086_33, partial:m2086_41 -# 2086| v2086_43(void) = ^IndirectReadSideEffect[-1] : &:r2086_38, ~m2086_42 -# 2086| m2086_44(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_38 -# 2086| m2086_45(unknown) = Chi : total:m2086_42, partial:m2086_44 -# 2086| r2086_46(glval) = CopyValue : r2086_31 +# 2086| mu2086_12(unknown) = ^CallSideEffect : ~m? +# 2086| v2086_13(void) = ^IndirectReadSideEffect[-1] : &:r2086_1, ~m? +# 2086| v2086_14(void) = ^BufferReadSideEffect[0] : &:r2086_10, ~m? +# 2086| mu2086_15(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_1 +# 2086| r2086_16(glval) = CopyValue : r2086_11 +# 2086| r2086_17(glval) = FunctionAddress[operator=] : +# 2086| r2086_18(glval) = VariableAddress[#temp2086:23] : +# 2086| mu2086_19(TernaryNonPodObj) = Uninitialized[#temp2086:23] : &:r2086_18 +# 2086| r2086_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2086| v2086_21(void) = Call[TernaryNonPodObj] : func:r2086_20, this:r2086_18 +# 2086| mu2086_22(unknown) = ^CallSideEffect : ~m? +# 2086| mu2086_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_18 +# 2086| r2086_24(glval) = Convert : r2086_18 +# 2086| r2086_25(TernaryNonPodObj &) = CopyValue : r2086_24 +# 2086| r2086_26(TernaryNonPodObj &) = Call[operator=] : func:r2086_17, this:r2086_16, 0:r2086_25 +# 2086| mu2086_27(unknown) = ^CallSideEffect : ~m? +# 2086| v2086_28(void) = ^IndirectReadSideEffect[-1] : &:r2086_16, ~m? +# 2086| v2086_29(void) = ^BufferReadSideEffect[0] : &:r2086_25, ~m? +# 2086| mu2086_30(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_16 +# 2086| r2086_31(glval) = CopyValue : r2086_18 +# 2086| r2086_32(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2086| v2086_33(void) = Call[~TernaryNonPodObj] : func:r2086_32, this:r2086_31 +# 2086| mu2086_34(unknown) = ^CallSideEffect : ~m? +# 2086| v2086_35(void) = ^IndirectReadSideEffect[-1] : &:r2086_31, ~m? +# 2086| mu2086_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2086_31 +# 2086| r2086_37(glval) = CopyValue : r2086_26 # 2087| v2087_1(void) = NoOp : -# 2082| v2082_16(void) = ReturnVoid : -# 2082| v2082_17(void) = AliasedUse : ~m2086_42 -# 2082| v2082_18(void) = ExitFunction : +# 2082| v2082_12(void) = ReturnVoid : +# 2082| v2082_13(void) = AliasedUse : ~m? +# 2082| v2082_14(void) = ExitFunction : # 2086| Block 11 -# 2086| r2086_47(glval) = VariableAddress[x] : -# 2086| r2086_48(glval) = VariableAddress[#temp2086:10] : -# 2086| m2086_49(glval) = Store[#temp2086:10] : &:r2086_48, r2086_47 +# 2086| r2086_38(glval) = VariableAddress[x] : +# 2086| r2086_39(glval) = VariableAddress[#temp2086:10] : +# 2086| m2086_40(glval) = Store[#temp2086:10] : &:r2086_39, r2086_38 #-----| Goto -> Block 10 # 2086| Block 12 -# 2086| r2086_50(glval) = VariableAddress[y] : -# 2086| r2086_51(glval) = VariableAddress[#temp2086:10] : -# 2086| m2086_52(glval) = Store[#temp2086:10] : &:r2086_51, r2086_50 +# 2086| r2086_41(glval) = VariableAddress[y] : +# 2086| r2086_42(glval) = VariableAddress[#temp2086:10] : +# 2086| m2086_43(glval) = Store[#temp2086:10] : &:r2086_42, r2086_41 #-----| Goto -> Block 10 # 2091| unsigned int CommaTest(unsigned int) # 2091| Block 0 # 2091| v2091_1(void) = EnterFunction : -# 2091| m2091_2(unknown) = AliasedDefinition : -# 2091| m2091_3(unknown) = InitializeNonLocal : -# 2091| m2091_4(unknown) = Chi : total:m2091_2, partial:m2091_3 -# 2091| r2091_5(glval) = VariableAddress[x] : -# 2091| m2091_6(unsigned int) = InitializeParameter[x] : &:r2091_5 +# 2091| mu2091_2(unknown) = AliasedDefinition : +# 2091| mu2091_3(unknown) = InitializeNonLocal : +# 2091| r2091_4(glval) = VariableAddress[x] : +# 2091| m2091_5(unsigned int) = InitializeParameter[x] : &:r2091_4 # 2092| r2092_1(glval) = VariableAddress[y] : # 2092| m2092_2(unsigned int) = Uninitialized[y] : &:r2092_1 # 2093| r2093_1(glval) = VariableAddress[x] : -# 2093| r2093_2(unsigned int) = Load[x] : &:r2093_1, m2091_6 +# 2093| r2093_2(unsigned int) = Load[x] : &:r2093_1, m2091_5 # 2093| r2093_3(unsigned int) = Constant[100] : # 2093| r2093_4(bool) = CompareLT : r2093_2, r2093_3 # 2093| v2093_5(void) = ConditionalBranch : r2093_4 @@ -15656,331 +14322,284 @@ ir.cpp: #-----| True -> Block 2 # 2093| Block 1 -# 2093| m2093_6(unknown) = Phi : from 2:~m2094_6, from 3:~m2095_6 -# 2093| m2093_7(unsigned int) = Phi : from 2:m2093_13, from 3:m2093_15 -# 2093| r2093_8(glval) = VariableAddress[#temp2093:7] : -# 2093| r2093_9(unsigned int) = Load[#temp2093:7] : &:r2093_8, m2093_7 -# 2093| r2093_10(glval) = VariableAddress[y] : -# 2093| m2093_11(unsigned int) = Store[y] : &:r2093_10, r2093_9 -# 2096| r2096_1(glval) = VariableAddress[#return] : -# 2096| m2096_2(unsigned int) = Uninitialized[#return] : &:r2096_1 -# 2091| r2091_7(glval) = VariableAddress[#return] : -# 2091| v2091_8(void) = ReturnValue : &:r2091_7, m2096_2 -# 2091| v2091_9(void) = AliasedUse : ~m2093_6 -# 2091| v2091_10(void) = ExitFunction : +# 2093| m2093_6(unsigned int) = Phi : from 2:m2093_12, from 3:m2093_14 +# 2093| r2093_7(glval) = VariableAddress[#temp2093:7] : +# 2093| r2093_8(unsigned int) = Load[#temp2093:7] : &:r2093_7, m2093_6 +# 2093| r2093_9(glval) = VariableAddress[y] : +# 2093| m2093_10(unsigned int) = Store[y] : &:r2093_9, r2093_8 +# 2096| r2096_1(glval) = VariableAddress[#return] : +# 2096| m2096_2(unsigned int) = Uninitialized[#return] : &:r2096_1 +# 2091| r2091_6(glval) = VariableAddress[#return] : +# 2091| v2091_7(void) = ReturnValue : &:r2091_6, m2096_2 +# 2091| v2091_8(void) = AliasedUse : ~m? +# 2091| v2091_9(void) = ExitFunction : # 2094| Block 2 # 2094| r2094_1(glval) = FunctionAddress[CommaTestHelper] : # 2094| r2094_2(glval) = VariableAddress[x] : -# 2094| r2094_3(unsigned int) = Load[x] : &:r2094_2, m2091_6 +# 2094| r2094_3(unsigned int) = Load[x] : &:r2094_2, m2091_5 # 2094| v2094_4(void) = Call[CommaTestHelper] : func:r2094_1, 0:r2094_3 -# 2094| m2094_5(unknown) = ^CallSideEffect : ~m2091_4 -# 2094| m2094_6(unknown) = Chi : total:m2091_4, partial:m2094_5 -# 2094| r2094_7(glval) = VariableAddress[x] : -# 2094| r2094_8(unsigned int) = Load[x] : &:r2094_7, m2091_6 -# 2094| r2094_9(unsigned int) = CopyValue : r2094_8 -# 2093| r2093_12(glval) = VariableAddress[#temp2093:7] : -# 2093| m2093_13(unsigned int) = Store[#temp2093:7] : &:r2093_12, r2094_9 +# 2094| mu2094_5(unknown) = ^CallSideEffect : ~m? +# 2094| r2094_6(glval) = VariableAddress[x] : +# 2094| r2094_7(unsigned int) = Load[x] : &:r2094_6, m2091_5 +# 2094| r2094_8(unsigned int) = CopyValue : r2094_7 +# 2093| r2093_11(glval) = VariableAddress[#temp2093:7] : +# 2093| m2093_12(unsigned int) = Store[#temp2093:7] : &:r2093_11, r2094_8 #-----| Goto -> Block 1 # 2095| Block 3 # 2095| r2095_1(glval) = FunctionAddress[CommaTestHelper] : # 2095| r2095_2(glval) = VariableAddress[x] : -# 2095| r2095_3(unsigned int) = Load[x] : &:r2095_2, m2091_6 +# 2095| r2095_3(unsigned int) = Load[x] : &:r2095_2, m2091_5 # 2095| v2095_4(void) = Call[CommaTestHelper] : func:r2095_1, 0:r2095_3 -# 2095| m2095_5(unknown) = ^CallSideEffect : ~m2091_4 -# 2095| m2095_6(unknown) = Chi : total:m2091_4, partial:m2095_5 -# 2095| r2095_7(int) = Constant[10] : -# 2095| r2095_8(int) = CopyValue : r2095_7 -# 2095| r2095_9(unsigned int) = Convert : r2095_8 -# 2093| r2093_14(glval) = VariableAddress[#temp2093:7] : -# 2093| m2093_15(unsigned int) = Store[#temp2093:7] : &:r2093_14, r2095_9 +# 2095| mu2095_5(unknown) = ^CallSideEffect : ~m? +# 2095| r2095_6(int) = Constant[10] : +# 2095| r2095_7(int) = CopyValue : r2095_6 +# 2095| r2095_8(unsigned int) = Convert : r2095_7 +# 2093| r2093_13(glval) = VariableAddress[#temp2093:7] : +# 2093| m2093_14(unsigned int) = Store[#temp2093:7] : &:r2093_13, r2095_8 #-----| Goto -> Block 1 # 2098| void NewDeleteMem() # 2098| Block 0 # 2098| v2098_1(void) = EnterFunction : -# 2098| m2098_2(unknown) = AliasedDefinition : -# 2098| m2098_3(unknown) = InitializeNonLocal : -# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3 +# 2098| mu2098_2(unknown) = AliasedDefinition : +# 2098| mu2098_3(unknown) = InitializeNonLocal : # 2099| r2099_1(glval) = VariableAddress[x] : # 2099| r2099_2(glval) = FunctionAddress[operator new] : # 2099| r2099_3(unsigned long) = Constant[4] : # 2099| r2099_4(void *) = Call[operator new] : func:r2099_2, 0:r2099_3 -# 2099| m2099_5(unknown) = ^CallSideEffect : ~m2098_4 -# 2099| m2099_6(unknown) = Chi : total:m2098_4, partial:m2099_5 -# 2099| m2099_7(unknown) = ^InitializeDynamicAllocation : &:r2099_4 -# 2099| m2099_8(unknown) = Chi : total:m2099_6, partial:m2099_7 -# 2099| r2099_9(int *) = Convert : r2099_4 -# 2099| m2099_10(int *) = Store[x] : &:r2099_1, r2099_9 +# 2099| mu2099_5(unknown) = ^CallSideEffect : ~m? +# 2099| mu2099_6(unknown) = ^InitializeDynamicAllocation : &:r2099_4 +# 2099| r2099_7(int *) = Convert : r2099_4 +# 2099| m2099_8(int *) = Store[x] : &:r2099_1, r2099_7 # 2100| r2100_1(int) = Constant[6] : # 2100| r2100_2(glval) = VariableAddress[x] : -# 2100| r2100_3(int *) = Load[x] : &:r2100_2, m2099_10 +# 2100| r2100_3(int *) = Load[x] : &:r2100_2, m2099_8 # 2100| r2100_4(glval) = CopyValue : r2100_3 -# 2100| m2100_5(int) = Store[?] : &:r2100_4, r2100_1 -# 2100| m2100_6(unknown) = Chi : total:m2099_8, partial:m2100_5 +# 2100| mu2100_5(int) = Store[?] : &:r2100_4, r2100_1 # 2101| r2101_1(glval) = FunctionAddress[operator delete] : # 2101| r2101_2(glval) = VariableAddress[x] : -# 2101| r2101_3(int *) = Load[x] : &:r2101_2, m2099_10 +# 2101| r2101_3(int *) = Load[x] : &:r2101_2, m2099_8 # 2101| v2101_4(void) = Call[operator delete] : func:r2101_1, 0:r2101_3 -# 2101| m2101_5(unknown) = ^CallSideEffect : ~m2100_6 -# 2101| m2101_6(unknown) = Chi : total:m2100_6, partial:m2101_5 +# 2101| mu2101_5(unknown) = ^CallSideEffect : ~m? # 2102| v2102_1(void) = NoOp : -# 2098| v2098_5(void) = ReturnVoid : -# 2098| v2098_6(void) = AliasedUse : ~m2101_6 -# 2098| v2098_7(void) = ExitFunction : +# 2098| v2098_4(void) = ReturnVoid : +# 2098| v2098_5(void) = AliasedUse : ~m? +# 2098| v2098_6(void) = ExitFunction : # 2104| void Base2::Base2() # 2104| Block 0 # 2104| v2104_1(void) = EnterFunction : -# 2104| m2104_2(unknown) = AliasedDefinition : -# 2104| m2104_3(unknown) = InitializeNonLocal : -# 2104| m2104_4(unknown) = Chi : total:m2104_2, partial:m2104_3 -# 2104| r2104_5(glval) = VariableAddress[#this] : -# 2104| m2104_6(glval) = InitializeParameter[#this] : &:r2104_5 -# 2104| r2104_7(glval) = Load[#this] : &:r2104_5, m2104_6 -# 2104| m2104_8(Base2) = InitializeIndirection[#this] : &:r2104_7 -# 2104| v2104_9(void) = NoOp : -# 2104| v2104_10(void) = ReturnIndirection[#this] : &:r2104_7, m2104_8 -# 2104| v2104_11(void) = ReturnVoid : -# 2104| v2104_12(void) = AliasedUse : m2104_3 -# 2104| v2104_13(void) = ExitFunction : +# 2104| mu2104_2(unknown) = AliasedDefinition : +# 2104| mu2104_3(unknown) = InitializeNonLocal : +# 2104| r2104_4(glval) = VariableAddress[#this] : +# 2104| m2104_5(glval) = InitializeParameter[#this] : &:r2104_4 +# 2104| r2104_6(glval) = Load[#this] : &:r2104_4, m2104_5 +# 2104| mu2104_7(Base2) = InitializeIndirection[#this] : &:r2104_6 +# 2104| v2104_8(void) = NoOp : +# 2104| v2104_9(void) = ReturnIndirection[#this] : &:r2104_6, ~m? +# 2104| v2104_10(void) = ReturnVoid : +# 2104| v2104_11(void) = AliasedUse : ~m? +# 2104| v2104_12(void) = ExitFunction : # 2106| void Base2::operator delete(void*) # 2106| Block 0 # 2106| v2106_1(void) = EnterFunction : -# 2106| m2106_2(unknown) = AliasedDefinition : -# 2106| m2106_3(unknown) = InitializeNonLocal : -# 2106| m2106_4(unknown) = Chi : total:m2106_2, partial:m2106_3 -# 2106| r2106_5(glval) = VariableAddress[p] : -# 2106| m2106_6(void *) = InitializeParameter[p] : &:r2106_5 -# 2106| r2106_7(void *) = Load[p] : &:r2106_5, m2106_6 -# 2106| m2106_8(unknown) = InitializeIndirection[p] : &:r2106_7 +# 2106| mu2106_2(unknown) = AliasedDefinition : +# 2106| mu2106_3(unknown) = InitializeNonLocal : +# 2106| r2106_4(glval) = VariableAddress[p] : +# 2106| m2106_5(void *) = InitializeParameter[p] : &:r2106_4 +# 2106| r2106_6(void *) = Load[p] : &:r2106_4, m2106_5 +# 2106| mu2106_7(unknown) = InitializeIndirection[p] : &:r2106_6 # 2107| v2107_1(void) = NoOp : -# 2106| v2106_9(void) = ReturnIndirection[p] : &:r2106_7, m2106_8 -# 2106| v2106_10(void) = ReturnVoid : -# 2106| v2106_11(void) = AliasedUse : m2106_3 -# 2106| v2106_12(void) = ExitFunction : +# 2106| v2106_8(void) = ReturnIndirection[p] : &:r2106_6, ~m? +# 2106| v2106_9(void) = ReturnVoid : +# 2106| v2106_10(void) = AliasedUse : ~m? +# 2106| v2106_11(void) = ExitFunction : # 2108| void Base2::~Base2() # 2108| Block 0 # 2108| v2108_1(void) = EnterFunction : -# 2108| m2108_2(unknown) = AliasedDefinition : -# 2108| m2108_3(unknown) = InitializeNonLocal : -# 2108| m2108_4(unknown) = Chi : total:m2108_2, partial:m2108_3 -# 2108| r2108_5(glval) = VariableAddress[#this] : -# 2108| m2108_6(glval) = InitializeParameter[#this] : &:r2108_5 -# 2108| r2108_7(glval) = Load[#this] : &:r2108_5, m2108_6 -# 2108| m2108_8(Base2) = InitializeIndirection[#this] : &:r2108_7 -# 2108| v2108_9(void) = NoOp : -# 2108| v2108_10(void) = ReturnIndirection[#this] : &:r2108_7, m2108_8 -# 2108| v2108_11(void) = ReturnVoid : -# 2108| v2108_12(void) = AliasedUse : m2108_3 -# 2108| v2108_13(void) = ExitFunction : +# 2108| mu2108_2(unknown) = AliasedDefinition : +# 2108| mu2108_3(unknown) = InitializeNonLocal : +# 2108| r2108_4(glval) = VariableAddress[#this] : +# 2108| m2108_5(glval) = InitializeParameter[#this] : &:r2108_4 +# 2108| r2108_6(glval) = Load[#this] : &:r2108_4, m2108_5 +# 2108| mu2108_7(Base2) = InitializeIndirection[#this] : &:r2108_6 +# 2108| v2108_8(void) = NoOp : +# 2108| v2108_9(void) = ReturnIndirection[#this] : &:r2108_6, ~m? +# 2108| v2108_10(void) = ReturnVoid : +# 2108| v2108_11(void) = AliasedUse : ~m? +# 2108| v2108_12(void) = ExitFunction : # 2111| void Derived2::Derived2() # 2111| Block 0 # 2111| v2111_1(void) = EnterFunction : -# 2111| m2111_2(unknown) = AliasedDefinition : -# 2111| m2111_3(unknown) = InitializeNonLocal : -# 2111| m2111_4(unknown) = Chi : total:m2111_2, partial:m2111_3 -# 2111| r2111_5(glval) = VariableAddress[#this] : -# 2111| m2111_6(glval) = InitializeParameter[#this] : &:r2111_5 -# 2111| r2111_7(glval) = Load[#this] : &:r2111_5, m2111_6 -# 2111| m2111_8(Derived2) = InitializeIndirection[#this] : &:r2111_7 -# 2111| r2111_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2111_7 -# 2111| r2111_10(glval) = FunctionAddress[Base2] : -# 2111| v2111_11(void) = Call[Base2] : func:r2111_10, this:r2111_9 -# 2111| m2111_12(unknown) = ^CallSideEffect : ~m2111_4 -# 2111| m2111_13(unknown) = Chi : total:m2111_4, partial:m2111_12 -# 2111| m2111_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2111_9 -# 2111| m2111_15(unknown) = Chi : total:m2111_8, partial:m2111_14 -# 2111| v2111_16(void) = NoOp : -# 2111| v2111_17(void) = ReturnIndirection[#this] : &:r2111_7, m2111_15 -# 2111| v2111_18(void) = ReturnVoid : -# 2111| v2111_19(void) = AliasedUse : ~m2111_13 -# 2111| v2111_20(void) = ExitFunction : +# 2111| mu2111_2(unknown) = AliasedDefinition : +# 2111| mu2111_3(unknown) = InitializeNonLocal : +# 2111| r2111_4(glval) = VariableAddress[#this] : +# 2111| m2111_5(glval) = InitializeParameter[#this] : &:r2111_4 +# 2111| r2111_6(glval) = Load[#this] : &:r2111_4, m2111_5 +# 2111| mu2111_7(Derived2) = InitializeIndirection[#this] : &:r2111_6 +# 2111| r2111_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2111_6 +# 2111| r2111_9(glval) = FunctionAddress[Base2] : +# 2111| v2111_10(void) = Call[Base2] : func:r2111_9, this:r2111_8 +# 2111| mu2111_11(unknown) = ^CallSideEffect : ~m? +# 2111| mu2111_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2111_8 +# 2111| v2111_13(void) = NoOp : +# 2111| v2111_14(void) = ReturnIndirection[#this] : &:r2111_6, ~m? +# 2111| v2111_15(void) = ReturnVoid : +# 2111| v2111_16(void) = AliasedUse : ~m? +# 2111| v2111_17(void) = ExitFunction : # 2114| void Derived2::~Derived2() # 2114| Block 0 # 2114| v2114_1(void) = EnterFunction : -# 2114| m2114_2(unknown) = AliasedDefinition : -# 2114| m2114_3(unknown) = InitializeNonLocal : -# 2114| m2114_4(unknown) = Chi : total:m2114_2, partial:m2114_3 -# 2114| r2114_5(glval) = VariableAddress[#this] : -# 2114| m2114_6(glval) = InitializeParameter[#this] : &:r2114_5 -# 2114| r2114_7(glval) = Load[#this] : &:r2114_5, m2114_6 -# 2114| m2114_8(Derived2) = InitializeIndirection[#this] : &:r2114_7 -# 2114| m2114_9(unknown) = Chi : total:m2114_4, partial:m2114_8 -# 2114| v2114_10(void) = NoOp : -# 2114| r2114_11(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2114_7 -# 2114| r2114_12(glval) = FunctionAddress[~Base2] : -# 2114| v2114_13(void) = Call[~Base2] : func:r2114_12, this:r2114_11 -# 2114| m2114_14(unknown) = ^CallSideEffect : ~m2114_9 -# 2114| m2114_15(unknown) = Chi : total:m2114_9, partial:m2114_14 -# 2114| v2114_16(void) = ReturnIndirection[#this] : &:r2114_7, ~m2114_15 -# 2114| v2114_17(void) = ReturnVoid : -# 2114| v2114_18(void) = AliasedUse : ~m2114_15 -# 2114| v2114_19(void) = ExitFunction : +# 2114| mu2114_2(unknown) = AliasedDefinition : +# 2114| mu2114_3(unknown) = InitializeNonLocal : +# 2114| r2114_4(glval) = VariableAddress[#this] : +# 2114| m2114_5(glval) = InitializeParameter[#this] : &:r2114_4 +# 2114| r2114_6(glval) = Load[#this] : &:r2114_4, m2114_5 +# 2114| mu2114_7(Derived2) = InitializeIndirection[#this] : &:r2114_6 +# 2114| v2114_8(void) = NoOp : +# 2114| r2114_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2114_6 +# 2114| r2114_10(glval) = FunctionAddress[~Base2] : +# 2114| v2114_11(void) = Call[~Base2] : func:r2114_10, this:r2114_9 +# 2114| mu2114_12(unknown) = ^CallSideEffect : ~m? +# 2114| v2114_13(void) = ReturnIndirection[#this] : &:r2114_6, ~m? +# 2114| v2114_14(void) = ReturnVoid : +# 2114| v2114_15(void) = AliasedUse : ~m? +# 2114| v2114_16(void) = ExitFunction : # 2116| void Derived2::operator delete(void*) # 2116| Block 0 # 2116| v2116_1(void) = EnterFunction : -# 2116| m2116_2(unknown) = AliasedDefinition : -# 2116| m2116_3(unknown) = InitializeNonLocal : -# 2116| m2116_4(unknown) = Chi : total:m2116_2, partial:m2116_3 -# 2116| r2116_5(glval) = VariableAddress[p] : -# 2116| m2116_6(void *) = InitializeParameter[p] : &:r2116_5 -# 2116| r2116_7(void *) = Load[p] : &:r2116_5, m2116_6 -# 2116| m2116_8(unknown) = InitializeIndirection[p] : &:r2116_7 +# 2116| mu2116_2(unknown) = AliasedDefinition : +# 2116| mu2116_3(unknown) = InitializeNonLocal : +# 2116| r2116_4(glval) = VariableAddress[p] : +# 2116| m2116_5(void *) = InitializeParameter[p] : &:r2116_4 +# 2116| r2116_6(void *) = Load[p] : &:r2116_4, m2116_5 +# 2116| mu2116_7(unknown) = InitializeIndirection[p] : &:r2116_6 # 2117| v2117_1(void) = NoOp : -# 2116| v2116_9(void) = ReturnIndirection[p] : &:r2116_7, m2116_8 -# 2116| v2116_10(void) = ReturnVoid : -# 2116| v2116_11(void) = AliasedUse : m2116_3 -# 2116| v2116_12(void) = ExitFunction : +# 2116| v2116_8(void) = ReturnIndirection[p] : &:r2116_6, ~m? +# 2116| v2116_9(void) = ReturnVoid : +# 2116| v2116_10(void) = AliasedUse : ~m? +# 2116| v2116_11(void) = ExitFunction : # 2121| int virtual_delete() # 2121| Block 0 # 2121| v2121_1(void) = EnterFunction : -# 2121| m2121_2(unknown) = AliasedDefinition : -# 2121| m2121_3(unknown) = InitializeNonLocal : -# 2121| m2121_4(unknown) = Chi : total:m2121_2, partial:m2121_3 +# 2121| mu2121_2(unknown) = AliasedDefinition : +# 2121| mu2121_3(unknown) = InitializeNonLocal : # 2123| r2123_1(glval) = VariableAddress[b1] : # 2123| r2123_2(glval) = FunctionAddress[operator new] : # 2123| r2123_3(unsigned long) = Constant[8] : # 2123| r2123_4(void *) = Call[operator new] : func:r2123_2, 0:r2123_3 -# 2123| m2123_5(unknown) = ^CallSideEffect : ~m2121_4 -# 2123| m2123_6(unknown) = Chi : total:m2121_4, partial:m2123_5 -# 2123| m2123_7(unknown) = ^InitializeDynamicAllocation : &:r2123_4 -# 2123| m2123_8(unknown) = Chi : total:m2123_6, partial:m2123_7 -# 2123| r2123_9(Base2 *) = Convert : r2123_4 -# 2123| r2123_10(glval) = FunctionAddress[Base2] : -# 2123| v2123_11(void) = Call[Base2] : func:r2123_10, this:r2123_9 -# 2123| m2123_12(unknown) = ^CallSideEffect : ~m2123_8 -# 2123| m2123_13(unknown) = Chi : total:m2123_8, partial:m2123_12 -# 2123| m2123_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2123_9 -# 2123| m2123_15(unknown) = Chi : total:m2123_13, partial:m2123_14 -# 2123| m2123_16(Base2 *) = Store[b1] : &:r2123_1, r2123_9 -# 2123| m2123_17(unknown) = Chi : total:m2123_15, partial:m2123_16 +# 2123| mu2123_5(unknown) = ^CallSideEffect : ~m? +# 2123| mu2123_6(unknown) = ^InitializeDynamicAllocation : &:r2123_4 +# 2123| r2123_7(Base2 *) = Convert : r2123_4 +# 2123| r2123_8(glval) = FunctionAddress[Base2] : +# 2123| v2123_9(void) = Call[Base2] : func:r2123_8, this:r2123_7 +# 2123| mu2123_10(unknown) = ^CallSideEffect : ~m? +# 2123| mu2123_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2123_7 +# 2123| mu2123_12(Base2 *) = Store[b1] : &:r2123_1, r2123_7 # 2124| r2124_1(glval) = VariableAddress[b1] : -# 2124| r2124_2(Base2 *) = Load[b1] : &:r2124_1, m2123_16 +# 2124| r2124_2(Base2 *) = Load[b1] : &:r2124_1, ~m? # 2124| r2124_3(glval) = FunctionAddress[~Base2] : # 2124| v2124_4(void) = Call[~Base2] : func:r2124_3 -# 2124| m2124_5(unknown) = ^CallSideEffect : ~m2123_17 -# 2124| m2124_6(unknown) = Chi : total:m2123_17, partial:m2124_5 -# 2124| v2124_7(void) = ^IndirectReadSideEffect[-1] : &:r2124_2, ~m2124_6 -# 2124| m2124_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2124_2 -# 2124| m2124_9(unknown) = Chi : total:m2124_6, partial:m2124_8 -# 2124| r2124_10(glval) = VirtualDeleteFunctionAddress : -# 2124| r2124_11(Base2 *) = CopyValue : r2124_1 -# 2124| v2124_12(void) = Call[?] : func:r2124_10, 0:r2124_11 -# 2124| m2124_13(unknown) = ^CallSideEffect : ~m2124_9 -# 2124| m2124_14(unknown) = Chi : total:m2124_9, partial:m2124_13 +# 2124| mu2124_5(unknown) = ^CallSideEffect : ~m? +# 2124| v2124_6(void) = ^IndirectReadSideEffect[-1] : &:r2124_2, ~m? +# 2124| mu2124_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2124_2 +# 2124| r2124_8(glval) = VirtualDeleteFunctionAddress : +# 2124| r2124_9(Base2 *) = CopyValue : r2124_1 +# 2124| v2124_10(void) = Call[?] : func:r2124_8, 0:r2124_9 +# 2124| mu2124_11(unknown) = ^CallSideEffect : ~m? # 2126| r2126_1(glval) = VariableAddress[b2] : # 2126| r2126_2(glval) = FunctionAddress[operator new] : # 2126| r2126_3(unsigned long) = Constant[16] : # 2126| r2126_4(void *) = Call[operator new] : func:r2126_2, 0:r2126_3 -# 2126| m2126_5(unknown) = ^CallSideEffect : ~m2124_14 -# 2126| m2126_6(unknown) = Chi : total:m2124_14, partial:m2126_5 -# 2126| m2126_7(unknown) = ^InitializeDynamicAllocation : &:r2126_4 -# 2126| m2126_8(unknown) = Chi : total:m2126_6, partial:m2126_7 -# 2126| r2126_9(Derived2 *) = Convert : r2126_4 -# 2126| r2126_10(glval) = FunctionAddress[Derived2] : -# 2126| v2126_11(void) = Call[Derived2] : func:r2126_10, this:r2126_9 -# 2126| m2126_12(unknown) = ^CallSideEffect : ~m2126_8 -# 2126| m2126_13(unknown) = Chi : total:m2126_8, partial:m2126_12 -# 2126| m2126_14(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2126_9 -# 2126| m2126_15(unknown) = Chi : total:m2126_13, partial:m2126_14 -# 2126| r2126_16(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2126_9 -# 2126| m2126_17(Base2 *) = Store[b2] : &:r2126_1, r2126_16 -# 2126| m2126_18(unknown) = Chi : total:m2126_15, partial:m2126_17 +# 2126| mu2126_5(unknown) = ^CallSideEffect : ~m? +# 2126| mu2126_6(unknown) = ^InitializeDynamicAllocation : &:r2126_4 +# 2126| r2126_7(Derived2 *) = Convert : r2126_4 +# 2126| r2126_8(glval) = FunctionAddress[Derived2] : +# 2126| v2126_9(void) = Call[Derived2] : func:r2126_8, this:r2126_7 +# 2126| mu2126_10(unknown) = ^CallSideEffect : ~m? +# 2126| mu2126_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2126_7 +# 2126| r2126_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2126_7 +# 2126| mu2126_13(Base2 *) = Store[b2] : &:r2126_1, r2126_12 # 2127| r2127_1(glval) = VariableAddress[b2] : -# 2127| r2127_2(Base2 *) = Load[b2] : &:r2127_1, m2126_17 +# 2127| r2127_2(Base2 *) = Load[b2] : &:r2127_1, ~m? # 2127| r2127_3(glval) = FunctionAddress[~Base2] : # 2127| v2127_4(void) = Call[~Base2] : func:r2127_3 -# 2127| m2127_5(unknown) = ^CallSideEffect : ~m2126_18 -# 2127| m2127_6(unknown) = Chi : total:m2126_18, partial:m2127_5 -# 2127| v2127_7(void) = ^IndirectReadSideEffect[-1] : &:r2127_2, ~m2127_6 -# 2127| m2127_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2127_2 -# 2127| m2127_9(unknown) = Chi : total:m2127_6, partial:m2127_8 -# 2127| r2127_10(glval) = VirtualDeleteFunctionAddress : -# 2127| r2127_11(Base2 *) = CopyValue : r2127_1 -# 2127| v2127_12(void) = Call[?] : func:r2127_10, 0:r2127_11 -# 2127| m2127_13(unknown) = ^CallSideEffect : ~m2127_9 -# 2127| m2127_14(unknown) = Chi : total:m2127_9, partial:m2127_13 +# 2127| mu2127_5(unknown) = ^CallSideEffect : ~m? +# 2127| v2127_6(void) = ^IndirectReadSideEffect[-1] : &:r2127_2, ~m? +# 2127| mu2127_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2127_2 +# 2127| r2127_8(glval) = VirtualDeleteFunctionAddress : +# 2127| r2127_9(Base2 *) = CopyValue : r2127_1 +# 2127| v2127_10(void) = Call[?] : func:r2127_8, 0:r2127_9 +# 2127| mu2127_11(unknown) = ^CallSideEffect : ~m? # 2129| r2129_1(glval) = VariableAddress[d] : # 2129| r2129_2(glval) = FunctionAddress[operator new] : # 2129| r2129_3(unsigned long) = Constant[16] : # 2129| r2129_4(void *) = Call[operator new] : func:r2129_2, 0:r2129_3 -# 2129| m2129_5(unknown) = ^CallSideEffect : ~m2127_14 -# 2129| m2129_6(unknown) = Chi : total:m2127_14, partial:m2129_5 -# 2129| m2129_7(unknown) = ^InitializeDynamicAllocation : &:r2129_4 -# 2129| m2129_8(unknown) = Chi : total:m2129_6, partial:m2129_7 -# 2129| r2129_9(Derived2 *) = Convert : r2129_4 -# 2129| r2129_10(glval) = FunctionAddress[Derived2] : -# 2129| v2129_11(void) = Call[Derived2] : func:r2129_10, this:r2129_9 -# 2129| m2129_12(unknown) = ^CallSideEffect : ~m2129_8 -# 2129| m2129_13(unknown) = Chi : total:m2129_8, partial:m2129_12 -# 2129| m2129_14(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2129_9 -# 2129| m2129_15(unknown) = Chi : total:m2129_13, partial:m2129_14 -# 2129| m2129_16(Derived2 *) = Store[d] : &:r2129_1, r2129_9 -# 2129| m2129_17(unknown) = Chi : total:m2129_15, partial:m2129_16 +# 2129| mu2129_5(unknown) = ^CallSideEffect : ~m? +# 2129| mu2129_6(unknown) = ^InitializeDynamicAllocation : &:r2129_4 +# 2129| r2129_7(Derived2 *) = Convert : r2129_4 +# 2129| r2129_8(glval) = FunctionAddress[Derived2] : +# 2129| v2129_9(void) = Call[Derived2] : func:r2129_8, this:r2129_7 +# 2129| mu2129_10(unknown) = ^CallSideEffect : ~m? +# 2129| mu2129_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2129_7 +# 2129| mu2129_12(Derived2 *) = Store[d] : &:r2129_1, r2129_7 # 2130| r2130_1(glval) = VariableAddress[d] : -# 2130| r2130_2(Derived2 *) = Load[d] : &:r2130_1, m2129_16 +# 2130| r2130_2(Derived2 *) = Load[d] : &:r2130_1, ~m? # 2130| r2130_3(glval) = FunctionAddress[~Derived2] : # 2130| v2130_4(void) = Call[~Derived2] : func:r2130_3 -# 2130| m2130_5(unknown) = ^CallSideEffect : ~m2129_17 -# 2130| m2130_6(unknown) = Chi : total:m2129_17, partial:m2130_5 -# 2130| v2130_7(void) = ^IndirectReadSideEffect[-1] : &:r2130_2, ~m2130_6 -# 2130| m2130_8(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2130_2 -# 2130| m2130_9(unknown) = Chi : total:m2130_6, partial:m2130_8 -# 2130| r2130_10(glval) = VirtualDeleteFunctionAddress : -# 2130| r2130_11(Derived2 *) = CopyValue : r2130_1 -# 2130| v2130_12(void) = Call[?] : func:r2130_10, 0:r2130_11 -# 2130| m2130_13(unknown) = ^CallSideEffect : ~m2130_9 -# 2130| m2130_14(unknown) = Chi : total:m2130_9, partial:m2130_13 +# 2130| mu2130_5(unknown) = ^CallSideEffect : ~m? +# 2130| v2130_6(void) = ^IndirectReadSideEffect[-1] : &:r2130_2, ~m? +# 2130| mu2130_7(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2130_2 +# 2130| r2130_8(glval) = VirtualDeleteFunctionAddress : +# 2130| r2130_9(Derived2 *) = CopyValue : r2130_1 +# 2130| v2130_10(void) = Call[?] : func:r2130_8, 0:r2130_9 +# 2130| mu2130_11(unknown) = ^CallSideEffect : ~m? # 2131| r2131_1(glval) = VariableAddress[#return] : # 2131| m2131_2(int) = Uninitialized[#return] : &:r2131_1 -# 2121| r2121_5(glval) = VariableAddress[#return] : -# 2121| v2121_6(void) = ReturnValue : &:r2121_5, m2131_2 -# 2121| v2121_7(void) = AliasedUse : ~m2130_14 -# 2121| v2121_8(void) = ExitFunction : +# 2121| r2121_4(glval) = VariableAddress[#return] : +# 2121| v2121_5(void) = ReturnValue : &:r2121_4, m2131_2 +# 2121| v2121_6(void) = AliasedUse : ~m? +# 2121| v2121_7(void) = ExitFunction : # 2135| void test_constant_folding() # 2135| Block 0 # 2135| v2135_1(void) = EnterFunction : -# 2135| m2135_2(unknown) = AliasedDefinition : -# 2135| m2135_3(unknown) = InitializeNonLocal : -# 2135| m2135_4(unknown) = Chi : total:m2135_2, partial:m2135_3 +# 2135| mu2135_2(unknown) = AliasedDefinition : +# 2135| mu2135_3(unknown) = InitializeNonLocal : # 2136| r2136_1(glval) = VariableAddress[x] : # 2136| r2136_2(int) = Constant[116] : # 2136| m2136_3(int) = Store[x] : &:r2136_1, r2136_2 # 2137| r2137_1(glval) = FunctionAddress[test_constant_folding_use] : # 2137| r2137_2(int) = Constant[116] : # 2137| v2137_3(void) = Call[test_constant_folding_use] : func:r2137_1, 0:r2137_2 -# 2137| m2137_4(unknown) = ^CallSideEffect : ~m2135_4 -# 2137| m2137_5(unknown) = Chi : total:m2135_4, partial:m2137_4 +# 2137| mu2137_4(unknown) = ^CallSideEffect : ~m? # 2138| v2138_1(void) = NoOp : -# 2135| v2135_5(void) = ReturnVoid : -# 2135| v2135_6(void) = AliasedUse : ~m2137_5 -# 2135| v2135_7(void) = ExitFunction : +# 2135| v2135_4(void) = ReturnVoid : +# 2135| v2135_5(void) = AliasedUse : ~m? +# 2135| v2135_6(void) = ExitFunction : # 2142| int NonExit() # 2142| Block 0 # 2142| v2142_1(void) = EnterFunction : -# 2142| m2142_2(unknown) = AliasedDefinition : -# 2142| m2142_3(unknown) = InitializeNonLocal : -# 2142| m2142_4(unknown) = Chi : total:m2142_2, partial:m2142_3 +# 2142| mu2142_2(unknown) = AliasedDefinition : +# 2142| mu2142_3(unknown) = InitializeNonLocal : # 2143| r2143_1(glval) = VariableAddress[x] : # 2143| r2143_2(glval) = FunctionAddress[Add] : # 2143| r2143_3(int) = Constant[3] : # 2143| r2143_4(int) = Constant[4] : # 2143| r2143_5(int) = Call[Add] : func:r2143_2, 0:r2143_3, 1:r2143_4 -# 2143| m2143_6(unknown) = ^CallSideEffect : ~m2142_4 -# 2143| m2143_7(unknown) = Chi : total:m2142_4, partial:m2143_6 -# 2143| m2143_8(int) = Store[x] : &:r2143_1, r2143_5 +# 2143| mu2143_6(unknown) = ^CallSideEffect : ~m? +# 2143| m2143_7(int) = Store[x] : &:r2143_1, r2143_5 # 2144| r2144_1(glval) = VariableAddress[x] : -# 2144| r2144_2(int) = Load[x] : &:r2144_1, m2143_8 +# 2144| r2144_2(int) = Load[x] : &:r2144_1, m2143_7 # 2144| r2144_3(int) = Constant[7] : # 2144| r2144_4(bool) = CompareEQ : r2144_2, r2144_3 # 2144| v2144_5(void) = ConditionalBranch : r2144_4 @@ -15991,465 +14610,417 @@ ir.cpp: # 2145| r2145_1(glval) = FunctionAddress[exit] : # 2145| r2145_2(int) = Constant[3] : # 2145| v2145_3(void) = Call[exit] : func:r2145_1, 0:r2145_2 -# 2145| m2145_4(unknown) = ^CallSideEffect : ~m2143_7 -# 2145| m2145_5(unknown) = Chi : total:m2143_7, partial:m2145_4 -# 2142| v2142_5(void) = Unreached : +# 2145| mu2145_4(unknown) = ^CallSideEffect : ~m? +# 2142| v2142_4(void) = Unreached : # 2146| Block 2 # 2146| r2146_1(glval) = FunctionAddress[VoidFunc] : # 2146| v2146_2(void) = Call[VoidFunc] : func:r2146_1 -# 2146| m2146_3(unknown) = ^CallSideEffect : ~m2143_7 -# 2146| m2146_4(unknown) = Chi : total:m2143_7, partial:m2146_3 +# 2146| mu2146_3(unknown) = ^CallSideEffect : ~m? # 2147| r2147_1(glval) = VariableAddress[#return] : # 2147| r2147_2(glval) = VariableAddress[x] : -# 2147| r2147_3(int) = Load[x] : &:r2147_2, m2143_8 +# 2147| r2147_3(int) = Load[x] : &:r2147_2, m2143_7 # 2147| m2147_4(int) = Store[#return] : &:r2147_1, r2147_3 -# 2142| r2142_6(glval) = VariableAddress[#return] : -# 2142| v2142_7(void) = ReturnValue : &:r2142_6, m2147_4 -# 2142| v2142_8(void) = AliasedUse : ~m2146_4 -# 2142| v2142_9(void) = ExitFunction : +# 2142| r2142_5(glval) = VariableAddress[#return] : +# 2142| v2142_6(void) = ReturnValue : &:r2142_5, m2147_4 +# 2142| v2142_7(void) = AliasedUse : ~m? +# 2142| v2142_8(void) = ExitFunction : # 2150| void CallsNonExit() # 2150| Block 0 # 2150| v2150_1(void) = EnterFunction : -# 2150| m2150_2(unknown) = AliasedDefinition : -# 2150| m2150_3(unknown) = InitializeNonLocal : -# 2150| m2150_4(unknown) = Chi : total:m2150_2, partial:m2150_3 +# 2150| mu2150_2(unknown) = AliasedDefinition : +# 2150| mu2150_3(unknown) = InitializeNonLocal : # 2151| r2151_1(glval) = FunctionAddress[VoidFunc] : # 2151| v2151_2(void) = Call[VoidFunc] : func:r2151_1 -# 2151| m2151_3(unknown) = ^CallSideEffect : ~m2150_4 -# 2151| m2151_4(unknown) = Chi : total:m2150_4, partial:m2151_3 +# 2151| mu2151_3(unknown) = ^CallSideEffect : ~m? # 2152| r2152_1(glval) = FunctionAddress[exit] : # 2152| r2152_2(int) = Constant[3] : # 2152| v2152_3(void) = Call[exit] : func:r2152_1, 0:r2152_2 -# 2152| m2152_4(unknown) = ^CallSideEffect : ~m2151_4 -# 2152| m2152_5(unknown) = Chi : total:m2151_4, partial:m2152_4 -# 2150| v2150_5(void) = Unreached : +# 2152| mu2152_4(unknown) = ^CallSideEffect : ~m? +# 2150| v2150_4(void) = Unreached : # 2155| int TransNonExit() # 2155| Block 0 # 2155| v2155_1(void) = EnterFunction : -# 2155| m2155_2(unknown) = AliasedDefinition : -# 2155| m2155_3(unknown) = InitializeNonLocal : -# 2155| m2155_4(unknown) = Chi : total:m2155_2, partial:m2155_3 +# 2155| mu2155_2(unknown) = AliasedDefinition : +# 2155| mu2155_3(unknown) = InitializeNonLocal : # 2156| r2156_1(glval) = VariableAddress[x] : # 2156| r2156_2(glval) = FunctionAddress[Add] : # 2156| r2156_3(int) = Constant[3] : # 2156| r2156_4(int) = Constant[4] : # 2156| r2156_5(int) = Call[Add] : func:r2156_2, 0:r2156_3, 1:r2156_4 -# 2156| m2156_6(unknown) = ^CallSideEffect : ~m2155_4 -# 2156| m2156_7(unknown) = Chi : total:m2155_4, partial:m2156_6 -# 2156| m2156_8(int) = Store[x] : &:r2156_1, r2156_5 +# 2156| mu2156_6(unknown) = ^CallSideEffect : ~m? +# 2156| m2156_7(int) = Store[x] : &:r2156_1, r2156_5 # 2157| r2157_1(glval) = VariableAddress[x] : -# 2157| r2157_2(int) = Load[x] : &:r2157_1, m2156_8 +# 2157| r2157_2(int) = Load[x] : &:r2157_1, m2156_7 # 2157| r2157_3(int) = Constant[7] : # 2157| r2157_4(bool) = CompareEQ : r2157_2, r2157_3 # 2157| v2157_5(void) = ConditionalBranch : r2157_4 -#-----| False -> Block 2 +#-----| False -> Block 3 #-----| True -> Block 1 # 2158| Block 1 # 2158| r2158_1(glval) = FunctionAddress[CallsNonExit] : # 2158| v2158_2(void) = Call[CallsNonExit] : func:r2158_1 -# 2155| v2155_5(void) = Unreached : +# 2155| v2155_4(void) = Unreached : + +# 2158| Block 2 +# 2158| mu2158_3(unknown) = ^CallSideEffect : ~m? +#-----| Goto -> Block 3 -# 2159| Block 2 +# 2159| Block 3 # 2159| r2159_1(glval) = FunctionAddress[VoidFunc] : # 2159| v2159_2(void) = Call[VoidFunc] : func:r2159_1 -# 2159| m2159_3(unknown) = ^CallSideEffect : ~m2156_7 -# 2159| m2159_4(unknown) = Chi : total:m2156_7, partial:m2159_3 +# 2159| mu2159_3(unknown) = ^CallSideEffect : ~m? # 2160| r2160_1(glval) = VariableAddress[#return] : # 2160| r2160_2(glval) = VariableAddress[x] : -# 2160| r2160_3(int) = Load[x] : &:r2160_2, m2156_8 +# 2160| r2160_3(int) = Load[x] : &:r2160_2, m2156_7 # 2160| m2160_4(int) = Store[#return] : &:r2160_1, r2160_3 -# 2155| r2155_6(glval) = VariableAddress[#return] : -# 2155| v2155_7(void) = ReturnValue : &:r2155_6, m2160_4 -# 2155| v2155_8(void) = AliasedUse : ~m2159_4 -# 2155| v2155_9(void) = ExitFunction : +# 2155| r2155_5(glval) = VariableAddress[#return] : +# 2155| v2155_6(void) = ReturnValue : &:r2155_5, m2160_4 +# 2155| v2155_7(void) = AliasedUse : ~m? +# 2155| v2155_8(void) = ExitFunction : # 2163| void newArrayCorrectType(size_t) # 2163| Block 0 -# 2163| v2163_1(void) = EnterFunction : -# 2163| m2163_2(unknown) = AliasedDefinition : -# 2163| m2163_3(unknown) = InitializeNonLocal : -# 2163| m2163_4(unknown) = Chi : total:m2163_2, partial:m2163_3 -# 2163| r2163_5(glval) = VariableAddress[n] : -# 2163| m2163_6(unsigned long) = InitializeParameter[n] : &:r2163_5 -# 2164| r2164_1(glval) = FunctionAddress[operator new[]] : -# 2164| r2164_2(glval) = VariableAddress[n] : -# 2164| r2164_3(unsigned long) = Load[n] : &:r2164_2, m2163_6 -# 2164| r2164_4(unsigned long) = Constant[4] : -# 2164| r2164_5(unsigned long) = Mul : r2164_3, r2164_4 -# 2164| r2164_6(void *) = Call[operator new[]] : func:r2164_1, 0:r2164_5 -# 2164| m2164_7(unknown) = ^CallSideEffect : ~m2163_4 -# 2164| m2164_8(unknown) = Chi : total:m2163_4, partial:m2164_7 -# 2164| m2164_9(unknown) = ^InitializeDynamicAllocation : &:r2164_6 -# 2164| r2164_10(int *) = Convert : r2164_6 -# 2165| r2165_1(glval) = FunctionAddress[operator new[]] : -# 2165| r2165_2(glval) = VariableAddress[n] : -# 2165| r2165_3(unsigned long) = Load[n] : &:r2165_2, m2163_6 -# 2165| r2165_4(unsigned long) = Constant[4] : -# 2165| r2165_5(unsigned long) = Mul : r2165_3, r2165_4 -# 2165| r2165_6(float) = Constant[1.0] : -# 2165| r2165_7(void *) = Call[operator new[]] : func:r2165_1, 0:r2165_5, 1:r2165_6 -# 2165| m2165_8(unknown) = ^CallSideEffect : ~m2164_8 -# 2165| m2165_9(unknown) = Chi : total:m2164_8, partial:m2165_8 -# 2165| m2165_10(unknown) = ^InitializeDynamicAllocation : &:r2165_7 -# 2165| r2165_11(int *) = Convert : r2165_7 -# 2166| r2166_1(glval) = FunctionAddress[operator new[]] : -# 2166| r2166_2(glval) = VariableAddress[n] : -# 2166| r2166_3(unsigned long) = Load[n] : &:r2166_2, m2163_6 -# 2166| r2166_4(unsigned long) = Constant[8] : -# 2166| r2166_5(unsigned long) = Mul : r2166_3, r2166_4 -# 2166| r2166_6(void *) = Call[operator new[]] : func:r2166_1, 0:r2166_5 -# 2166| m2166_7(unknown) = ^CallSideEffect : ~m2165_9 -# 2166| m2166_8(unknown) = Chi : total:m2165_9, partial:m2166_7 -# 2166| m2166_9(unknown) = ^InitializeDynamicAllocation : &:r2166_6 -# 2166| r2166_10(String *) = Convert : r2166_6 -# 2167| r2167_1(glval) = FunctionAddress[operator new[]] : -# 2167| r2167_2(glval) = VariableAddress[n] : -# 2167| r2167_3(unsigned long) = Load[n] : &:r2167_2, m2163_6 -# 2167| r2167_4(unsigned long) = Constant[256] : -# 2167| r2167_5(unsigned long) = Mul : r2167_3, r2167_4 -# 2167| r2167_6(align_val_t) = Constant[128] : -# 2167| r2167_7(void *) = Call[operator new[]] : func:r2167_1, 0:r2167_5, 1:r2167_6 -# 2167| m2167_8(unknown) = ^CallSideEffect : ~m2166_8 -# 2167| m2167_9(unknown) = Chi : total:m2166_8, partial:m2167_8 -# 2167| m2167_10(unknown) = ^InitializeDynamicAllocation : &:r2167_7 -# 2167| r2167_11(Overaligned *) = Convert : r2167_7 -# 2168| r2168_1(glval) = FunctionAddress[operator new[]] : -# 2168| r2168_2(glval) = VariableAddress[n] : -# 2168| r2168_3(unsigned long) = Load[n] : &:r2168_2, m2163_6 -# 2168| r2168_4(unsigned long) = Constant[1] : -# 2168| r2168_5(unsigned long) = Mul : r2168_3, r2168_4 -# 2168| r2168_6(void *) = Call[operator new[]] : func:r2168_1, 0:r2168_5 -# 2168| m2168_7(unknown) = ^CallSideEffect : ~m2167_9 -# 2168| m2168_8(unknown) = Chi : total:m2167_9, partial:m2168_7 -# 2168| m2168_9(unknown) = ^InitializeDynamicAllocation : &:r2168_6 -# 2168| r2168_10(DefaultCtorWithDefaultParam *) = Convert : r2168_6 -# 2169| r2169_1(glval) = FunctionAddress[operator new[]] : -# 2169| r2169_2(glval) = VariableAddress[n] : -# 2169| r2169_3(unsigned long) = Load[n] : &:r2169_2, m2163_6 -# 2169| r2169_4(unsigned long) = Constant[4] : -# 2169| r2169_5(unsigned long) = Mul : r2169_3, r2169_4 -# 2169| r2169_6(void *) = Call[operator new[]] : func:r2169_1, 0:r2169_5 -# 2169| m2169_7(unknown) = ^CallSideEffect : ~m2168_8 -# 2169| m2169_8(unknown) = Chi : total:m2168_8, partial:m2169_7 -# 2169| m2169_9(unknown) = ^InitializeDynamicAllocation : &:r2169_6 -# 2169| r2169_10(int *) = Convert : r2169_6 -# 2170| v2170_1(void) = NoOp : -# 2163| v2163_7(void) = ReturnVoid : -# 2163| v2163_8(void) = AliasedUse : ~m2169_8 -# 2163| v2163_9(void) = ExitFunction : +# 2163| v2163_1(void) = EnterFunction : +# 2163| mu2163_2(unknown) = AliasedDefinition : +# 2163| mu2163_3(unknown) = InitializeNonLocal : +# 2163| r2163_4(glval) = VariableAddress[n] : +# 2163| m2163_5(unsigned long) = InitializeParameter[n] : &:r2163_4 +# 2164| r2164_1(glval) = FunctionAddress[operator new[]] : +# 2164| r2164_2(glval) = VariableAddress[n] : +# 2164| r2164_3(unsigned long) = Load[n] : &:r2164_2, m2163_5 +# 2164| r2164_4(unsigned long) = Constant[4] : +# 2164| r2164_5(unsigned long) = Mul : r2164_3, r2164_4 +# 2164| r2164_6(void *) = Call[operator new[]] : func:r2164_1, 0:r2164_5 +# 2164| mu2164_7(unknown) = ^CallSideEffect : ~m? +# 2164| mu2164_8(unknown) = ^InitializeDynamicAllocation : &:r2164_6 +# 2164| r2164_9(int *) = Convert : r2164_6 +# 2165| r2165_1(glval) = FunctionAddress[operator new[]] : +# 2165| r2165_2(glval) = VariableAddress[n] : +# 2165| r2165_3(unsigned long) = Load[n] : &:r2165_2, m2163_5 +# 2165| r2165_4(unsigned long) = Constant[4] : +# 2165| r2165_5(unsigned long) = Mul : r2165_3, r2165_4 +# 2165| r2165_6(float) = Constant[1.0] : +# 2165| r2165_7(void *) = Call[operator new[]] : func:r2165_1, 0:r2165_5, 1:r2165_6 +# 2165| mu2165_8(unknown) = ^CallSideEffect : ~m? +# 2165| mu2165_9(unknown) = ^InitializeDynamicAllocation : &:r2165_7 +# 2165| r2165_10(int *) = Convert : r2165_7 +# 2166| r2166_1(glval) = FunctionAddress[operator new[]] : +# 2166| r2166_2(glval) = VariableAddress[n] : +# 2166| r2166_3(unsigned long) = Load[n] : &:r2166_2, m2163_5 +# 2166| r2166_4(unsigned long) = Constant[8] : +# 2166| r2166_5(unsigned long) = Mul : r2166_3, r2166_4 +# 2166| r2166_6(void *) = Call[operator new[]] : func:r2166_1, 0:r2166_5 +# 2166| mu2166_7(unknown) = ^CallSideEffect : ~m? +# 2166| mu2166_8(unknown) = ^InitializeDynamicAllocation : &:r2166_6 +# 2166| r2166_9(String *) = Convert : r2166_6 +# 2167| r2167_1(glval) = FunctionAddress[operator new[]] : +# 2167| r2167_2(glval) = VariableAddress[n] : +# 2167| r2167_3(unsigned long) = Load[n] : &:r2167_2, m2163_5 +# 2167| r2167_4(unsigned long) = Constant[256] : +# 2167| r2167_5(unsigned long) = Mul : r2167_3, r2167_4 +# 2167| r2167_6(align_val_t) = Constant[128] : +# 2167| r2167_7(void *) = Call[operator new[]] : func:r2167_1, 0:r2167_5, 1:r2167_6 +# 2167| mu2167_8(unknown) = ^CallSideEffect : ~m? +# 2167| mu2167_9(unknown) = ^InitializeDynamicAllocation : &:r2167_7 +# 2167| r2167_10(Overaligned *) = Convert : r2167_7 +# 2168| r2168_1(glval) = FunctionAddress[operator new[]] : +# 2168| r2168_2(glval) = VariableAddress[n] : +# 2168| r2168_3(unsigned long) = Load[n] : &:r2168_2, m2163_5 +# 2168| r2168_4(unsigned long) = Constant[1] : +# 2168| r2168_5(unsigned long) = Mul : r2168_3, r2168_4 +# 2168| r2168_6(void *) = Call[operator new[]] : func:r2168_1, 0:r2168_5 +# 2168| mu2168_7(unknown) = ^CallSideEffect : ~m? +# 2168| mu2168_8(unknown) = ^InitializeDynamicAllocation : &:r2168_6 +# 2168| r2168_9(DefaultCtorWithDefaultParam *) = Convert : r2168_6 +# 2169| r2169_1(glval) = FunctionAddress[operator new[]] : +# 2169| r2169_2(glval) = VariableAddress[n] : +# 2169| r2169_3(unsigned long) = Load[n] : &:r2169_2, m2163_5 +# 2169| r2169_4(unsigned long) = Constant[4] : +# 2169| r2169_5(unsigned long) = Mul : r2169_3, r2169_4 +# 2169| r2169_6(void *) = Call[operator new[]] : func:r2169_1, 0:r2169_5 +# 2169| mu2169_7(unknown) = ^CallSideEffect : ~m? +# 2169| mu2169_8(unknown) = ^InitializeDynamicAllocation : &:r2169_6 +# 2169| r2169_9(int *) = Convert : r2169_6 +# 2170| v2170_1(void) = NoOp : +# 2163| v2163_6(void) = ReturnVoid : +# 2163| v2163_7(void) = AliasedUse : ~m? +# 2163| v2163_8(void) = ExitFunction : # 2174| char* test_strtod(char*) # 2174| Block 0 # 2174| v2174_1(void) = EnterFunction : -# 2174| m2174_2(unknown) = AliasedDefinition : -# 2174| m2174_3(unknown) = InitializeNonLocal : -# 2174| m2174_4(unknown) = Chi : total:m2174_2, partial:m2174_3 -# 2174| r2174_5(glval) = VariableAddress[s] : -# 2174| m2174_6(char *) = InitializeParameter[s] : &:r2174_5 -# 2174| r2174_7(char *) = Load[s] : &:r2174_5, m2174_6 -# 2174| m2174_8(unknown) = InitializeIndirection[s] : &:r2174_7 -# 2174| m2174_9(unknown) = Chi : total:m2174_4, partial:m2174_8 +# 2174| mu2174_2(unknown) = AliasedDefinition : +# 2174| mu2174_3(unknown) = InitializeNonLocal : +# 2174| r2174_4(glval) = VariableAddress[s] : +# 2174| m2174_5(char *) = InitializeParameter[s] : &:r2174_4 +# 2174| r2174_6(char *) = Load[s] : &:r2174_4, m2174_5 +# 2174| mu2174_7(unknown) = InitializeIndirection[s] : &:r2174_6 # 2175| r2175_1(glval) = VariableAddress[end] : -# 2175| m2175_2(char *) = Uninitialized[end] : &:r2175_1 +# 2175| mu2175_2(char *) = Uninitialized[end] : &:r2175_1 # 2176| r2176_1(glval) = VariableAddress[d] : # 2176| r2176_2(glval) = FunctionAddress[strtod] : # 2176| r2176_3(glval) = VariableAddress[s] : -# 2176| r2176_4(char *) = Load[s] : &:r2176_3, m2174_6 +# 2176| r2176_4(char *) = Load[s] : &:r2176_3, m2174_5 # 2176| r2176_5(char *) = Convert : r2176_4 # 2176| r2176_6(glval) = VariableAddress[end] : # 2176| r2176_7(char **) = CopyValue : r2176_6 # 2176| r2176_8(double) = Call[strtod] : func:r2176_2, 0:r2176_5, 1:r2176_7 -# 2176| v2176_9(void) = ^BufferReadSideEffect[0] : &:r2176_5, ~m2174_8 -# 2176| m2176_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2176_7 -# 2176| m2176_11(char *) = Chi : total:m2175_2, partial:m2176_10 -# 2176| m2176_12(double) = Store[d] : &:r2176_1, r2176_8 +# 2176| v2176_9(void) = ^BufferReadSideEffect[0] : &:r2176_5, ~m? +# 2176| mu2176_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2176_7 +# 2176| m2176_11(double) = Store[d] : &:r2176_1, r2176_8 # 2177| r2177_1(glval) = VariableAddress[#return] : # 2177| r2177_2(glval) = VariableAddress[end] : -# 2177| r2177_3(char *) = Load[end] : &:r2177_2, m2176_11 +# 2177| r2177_3(char *) = Load[end] : &:r2177_2, ~m? # 2177| m2177_4(char *) = Store[#return] : &:r2177_1, r2177_3 -# 2174| v2174_10(void) = ReturnIndirection[s] : &:r2174_7, m2174_8 -# 2174| r2174_11(glval) = VariableAddress[#return] : -# 2174| v2174_12(void) = ReturnValue : &:r2174_11, m2177_4 -# 2174| v2174_13(void) = AliasedUse : ~m2174_9 -# 2174| v2174_14(void) = ExitFunction : +# 2174| v2174_8(void) = ReturnIndirection[s] : &:r2174_6, ~m? +# 2174| r2174_9(glval) = VariableAddress[#return] : +# 2174| v2174_10(void) = ReturnValue : &:r2174_9, m2177_4 +# 2174| v2174_11(void) = AliasedUse : ~m? +# 2174| v2174_12(void) = ExitFunction : # 2184| void call_as_child_of_ConditionDeclExpr() # 2184| Block 0 # 2184| v2184_1(void) = EnterFunction : -# 2184| m2184_2(unknown) = AliasedDefinition : -# 2184| m2184_3(unknown) = InitializeNonLocal : -# 2184| m2184_4(unknown) = Chi : total:m2184_2, partial:m2184_3 +# 2184| mu2184_2(unknown) = AliasedDefinition : +# 2184| mu2184_3(unknown) = InitializeNonLocal : # 2185| r2185_1(glval) = VariableAddress[b] : # 2185| r2185_2(HasOperatorBool) = Constant[0] : -# 2185| m2185_3(HasOperatorBool) = Store[b] : &:r2185_1, r2185_2 -# 2185| m2185_4(unknown) = Chi : total:m2184_4, partial:m2185_3 -# 2185| r2185_5(glval) = VariableAddress[b] : -# 2185| r2185_6(glval) = FunctionAddress[operator bool] : -# 2185| r2185_7(bool) = Call[operator bool] : func:r2185_6, this:r2185_5 -# 2185| m2185_8(unknown) = ^CallSideEffect : ~m2185_4 -# 2185| m2185_9(unknown) = Chi : total:m2185_4, partial:m2185_8 -# 2185| v2185_10(void) = ^IndirectReadSideEffect[-1] : &:r2185_5, ~m2185_9 -# 2185| m2185_11(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2185_5 -# 2185| m2185_12(unknown) = Chi : total:m2185_9, partial:m2185_11 -# 2185| r2185_13(bool) = CopyValue : r2185_7 -# 2185| v2185_14(void) = ConditionalBranch : r2185_13 +# 2185| mu2185_3(HasOperatorBool) = Store[b] : &:r2185_1, r2185_2 +# 2185| r2185_4(glval) = VariableAddress[b] : +# 2185| r2185_5(glval) = FunctionAddress[operator bool] : +# 2185| r2185_6(bool) = Call[operator bool] : func:r2185_5, this:r2185_4 +# 2185| mu2185_7(unknown) = ^CallSideEffect : ~m? +# 2185| v2185_8(void) = ^IndirectReadSideEffect[-1] : &:r2185_4, ~m? +# 2185| mu2185_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2185_4 +# 2185| r2185_10(bool) = CopyValue : r2185_6 +# 2185| v2185_11(void) = ConditionalBranch : r2185_10 #-----| False -> Block 2 #-----| True -> Block 1 # 2185| Block 1 -# 2185| v2185_15(void) = NoOp : +# 2185| v2185_12(void) = NoOp : #-----| Goto -> Block 2 # 2186| Block 2 # 2186| v2186_1(void) = NoOp : -# 2184| v2184_5(void) = ReturnVoid : -# 2184| v2184_6(void) = AliasedUse : ~m2185_9 -# 2184| v2184_7(void) = ExitFunction : +# 2184| v2184_4(void) = ReturnVoid : +# 2184| v2184_5(void) = AliasedUse : ~m? +# 2184| v2184_6(void) = ExitFunction : # 2188| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) # 2188| Block 0 -# 2188| v2188_1(void) = EnterFunction : -# 2188| m2188_2(unknown) = AliasedDefinition : -# 2188| m2188_3(unknown) = InitializeNonLocal : -# 2188| m2188_4(unknown) = Chi : total:m2188_2, partial:m2188_3 -# 2188| r2188_5(glval) = VariableAddress[#this] : -# 2188| m2188_6(glval) = InitializeParameter[#this] : &:r2188_5 -# 2188| r2188_7(glval) = Load[#this] : &:r2188_5, m2188_6 -# 2188| m2188_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2188_7 -#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : -#-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 -#-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2188| r2188_9(glval) = FieldAddress[x] : r2188_7 -# 2188| r2188_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 2188| r2188_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2188_10, m0_2 -# 2188| r2188_12(glval) = CopyValue : r2188_11 -# 2188| r2188_13(glval) = FieldAddress[x] : r2188_12 -# 2188| r2188_14(char *) = Load[?] : &:r2188_13, ~m0_4 -# 2188| m2188_15(char *) = Store[?] : &:r2188_9, r2188_14 -# 2188| m2188_16(unknown) = Chi : total:m2188_8, partial:m2188_15 -# 2188| v2188_17(void) = NoOp : -# 2188| v2188_18(void) = ReturnIndirection[#this] : &:r2188_7, m2188_16 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2188| v2188_19(void) = ReturnVoid : -# 2188| v2188_20(void) = AliasedUse : m2188_3 -# 2188| v2188_21(void) = ExitFunction : +# 2188| v2188_1(void) = EnterFunction : +# 2188| mu2188_2(unknown) = AliasedDefinition : +# 2188| mu2188_3(unknown) = InitializeNonLocal : +# 2188| r2188_4(glval) = VariableAddress[#this] : +# 2188| m2188_5(glval) = InitializeParameter[#this] : &:r2188_4 +# 2188| r2188_6(glval) = Load[#this] : &:r2188_4, m2188_5 +# 2188| mu2188_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2188_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2188| r2188_8(glval) = FieldAddress[x] : r2188_6 +# 2188| r2188_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 2188| r2188_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2188_9, m0_2 +# 2188| r2188_11(glval) = CopyValue : r2188_10 +# 2188| r2188_12(glval) = FieldAddress[x] : r2188_11 +# 2188| r2188_13(char *) = Load[?] : &:r2188_12, ~m? +# 2188| mu2188_14(char *) = Store[?] : &:r2188_8, r2188_13 +# 2188| v2188_15(void) = NoOp : +# 2188| v2188_16(void) = ReturnIndirection[#this] : &:r2188_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 2188| v2188_17(void) = ReturnVoid : +# 2188| v2188_18(void) = AliasedUse : ~m? +# 2188| v2188_19(void) = ExitFunction : # 2191| void ClassWithDestructor::ClassWithDestructor() # 2191| Block 0 # 2191| v2191_1(void) = EnterFunction : -# 2191| m2191_2(unknown) = AliasedDefinition : -# 2191| m2191_3(unknown) = InitializeNonLocal : -# 2191| m2191_4(unknown) = Chi : total:m2191_2, partial:m2191_3 -# 2191| r2191_5(glval) = VariableAddress[#this] : -# 2191| m2191_6(glval) = InitializeParameter[#this] : &:r2191_5 -# 2191| r2191_7(glval) = Load[#this] : &:r2191_5, m2191_6 -# 2191| m2191_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2191_7 -# 2191| r2191_9(glval) = FunctionAddress[operator new] : -# 2191| r2191_10(unsigned long) = Constant[1] : -# 2191| r2191_11(void *) = Call[operator new] : func:r2191_9, 0:r2191_10 -# 2191| m2191_12(unknown) = ^CallSideEffect : ~m2191_4 -# 2191| m2191_13(unknown) = Chi : total:m2191_4, partial:m2191_12 -# 2191| m2191_14(unknown) = ^InitializeDynamicAllocation : &:r2191_11 -# 2191| m2191_15(unknown) = Chi : total:m2191_13, partial:m2191_14 -# 2191| r2191_16(char *) = Convert : r2191_11 -# 2191| r2191_17(glval) = VariableAddress[#this] : -# 2191| r2191_18(ClassWithDestructor *) = Load[#this] : &:r2191_17, m2191_6 -# 2191| r2191_19(glval) = FieldAddress[x] : r2191_18 -# 2191| m2191_20(char *) = Store[?] : &:r2191_19, r2191_16 -# 2191| m2191_21(unknown) = Chi : total:m2191_8, partial:m2191_20 -# 2191| v2191_22(void) = NoOp : -# 2191| v2191_23(void) = ReturnIndirection[#this] : &:r2191_7, m2191_21 -# 2191| v2191_24(void) = ReturnVoid : -# 2191| v2191_25(void) = AliasedUse : ~m2191_15 -# 2191| v2191_26(void) = ExitFunction : +# 2191| mu2191_2(unknown) = AliasedDefinition : +# 2191| mu2191_3(unknown) = InitializeNonLocal : +# 2191| r2191_4(glval) = VariableAddress[#this] : +# 2191| m2191_5(glval) = InitializeParameter[#this] : &:r2191_4 +# 2191| r2191_6(glval) = Load[#this] : &:r2191_4, m2191_5 +# 2191| mu2191_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2191_6 +# 2191| r2191_8(glval) = FunctionAddress[operator new] : +# 2191| r2191_9(unsigned long) = Constant[1] : +# 2191| r2191_10(void *) = Call[operator new] : func:r2191_8, 0:r2191_9 +# 2191| mu2191_11(unknown) = ^CallSideEffect : ~m? +# 2191| mu2191_12(unknown) = ^InitializeDynamicAllocation : &:r2191_10 +# 2191| r2191_13(char *) = Convert : r2191_10 +# 2191| r2191_14(glval) = VariableAddress[#this] : +# 2191| r2191_15(ClassWithDestructor *) = Load[#this] : &:r2191_14, m2191_5 +# 2191| r2191_16(glval) = FieldAddress[x] : r2191_15 +# 2191| mu2191_17(char *) = Store[?] : &:r2191_16, r2191_13 +# 2191| v2191_18(void) = NoOp : +# 2191| v2191_19(void) = ReturnIndirection[#this] : &:r2191_6, ~m? +# 2191| v2191_20(void) = ReturnVoid : +# 2191| v2191_21(void) = AliasedUse : ~m? +# 2191| v2191_22(void) = ExitFunction : # 2192| void ClassWithDestructor::~ClassWithDestructor() # 2192| Block 0 # 2192| v2192_1(void) = EnterFunction : -# 2192| m2192_2(unknown) = AliasedDefinition : -# 2192| m2192_3(unknown) = InitializeNonLocal : -# 2192| m2192_4(unknown) = Chi : total:m2192_2, partial:m2192_3 -# 2192| r2192_5(glval) = VariableAddress[#this] : -# 2192| m2192_6(glval) = InitializeParameter[#this] : &:r2192_5 -# 2192| r2192_7(glval) = Load[#this] : &:r2192_5, m2192_6 -# 2192| m2192_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2192_7 -# 2192| r2192_9(glval) = FunctionAddress[operator delete] : -# 2192| r2192_10(glval) = VariableAddress[#this] : -# 2192| r2192_11(ClassWithDestructor *) = Load[#this] : &:r2192_10, m2192_6 -# 2192| r2192_12(glval) = FieldAddress[x] : r2192_11 -# 2192| r2192_13(char *) = Load[?] : &:r2192_12, ~m2192_8 -# 2192| v2192_14(void) = Call[operator delete] : func:r2192_9, 0:r2192_13 -# 2192| m2192_15(unknown) = ^CallSideEffect : ~m2192_4 -# 2192| m2192_16(unknown) = Chi : total:m2192_4, partial:m2192_15 -# 2192| v2192_17(void) = NoOp : -# 2192| v2192_18(void) = ReturnIndirection[#this] : &:r2192_7, m2192_8 -# 2192| v2192_19(void) = ReturnVoid : -# 2192| v2192_20(void) = AliasedUse : ~m2192_16 -# 2192| v2192_21(void) = ExitFunction : +# 2192| mu2192_2(unknown) = AliasedDefinition : +# 2192| mu2192_3(unknown) = InitializeNonLocal : +# 2192| r2192_4(glval) = VariableAddress[#this] : +# 2192| m2192_5(glval) = InitializeParameter[#this] : &:r2192_4 +# 2192| r2192_6(glval) = Load[#this] : &:r2192_4, m2192_5 +# 2192| mu2192_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2192_6 +# 2192| r2192_8(glval) = FunctionAddress[operator delete] : +# 2192| r2192_9(glval) = VariableAddress[#this] : +# 2192| r2192_10(ClassWithDestructor *) = Load[#this] : &:r2192_9, m2192_5 +# 2192| r2192_11(glval) = FieldAddress[x] : r2192_10 +# 2192| r2192_12(char *) = Load[?] : &:r2192_11, ~m? +# 2192| v2192_13(void) = Call[operator delete] : func:r2192_8, 0:r2192_12 +# 2192| mu2192_14(unknown) = ^CallSideEffect : ~m? +# 2192| v2192_15(void) = NoOp : +# 2192| v2192_16(void) = ReturnIndirection[#this] : &:r2192_6, ~m? +# 2192| v2192_17(void) = ReturnVoid : +# 2192| v2192_18(void) = AliasedUse : ~m? +# 2192| v2192_19(void) = ExitFunction : # 2194| void ClassWithDestructor::set_x(char) # 2194| Block 0 # 2194| v2194_1(void) = EnterFunction : -# 2194| m2194_2(unknown) = AliasedDefinition : -# 2194| m2194_3(unknown) = InitializeNonLocal : -# 2194| m2194_4(unknown) = Chi : total:m2194_2, partial:m2194_3 -# 2194| r2194_5(glval) = VariableAddress[#this] : -# 2194| m2194_6(glval) = InitializeParameter[#this] : &:r2194_5 -# 2194| r2194_7(glval) = Load[#this] : &:r2194_5, m2194_6 -# 2194| m2194_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2194_7 -# 2194| r2194_9(glval) = VariableAddress[y] : -# 2194| m2194_10(char) = InitializeParameter[y] : &:r2194_9 -# 2194| r2194_11(glval) = VariableAddress[y] : -# 2194| r2194_12(char) = Load[y] : &:r2194_11, m2194_10 -# 2194| r2194_13(glval) = VariableAddress[#this] : -# 2194| r2194_14(ClassWithDestructor *) = Load[#this] : &:r2194_13, m2194_6 -# 2194| r2194_15(glval) = FieldAddress[x] : r2194_14 -# 2194| r2194_16(char *) = Load[?] : &:r2194_15, ~m2194_8 -# 2194| r2194_17(glval) = CopyValue : r2194_16 -# 2194| m2194_18(char) = Store[?] : &:r2194_17, r2194_12 -# 2194| m2194_19(unknown) = Chi : total:m2194_4, partial:m2194_18 -# 2194| v2194_20(void) = NoOp : -# 2194| v2194_21(void) = ReturnIndirection[#this] : &:r2194_7, m2194_8 -# 2194| v2194_22(void) = ReturnVoid : -# 2194| v2194_23(void) = AliasedUse : ~m2194_19 -# 2194| v2194_24(void) = ExitFunction : +# 2194| mu2194_2(unknown) = AliasedDefinition : +# 2194| mu2194_3(unknown) = InitializeNonLocal : +# 2194| r2194_4(glval) = VariableAddress[#this] : +# 2194| m2194_5(glval) = InitializeParameter[#this] : &:r2194_4 +# 2194| r2194_6(glval) = Load[#this] : &:r2194_4, m2194_5 +# 2194| mu2194_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2194_6 +# 2194| r2194_8(glval) = VariableAddress[y] : +# 2194| m2194_9(char) = InitializeParameter[y] : &:r2194_8 +# 2194| r2194_10(glval) = VariableAddress[y] : +# 2194| r2194_11(char) = Load[y] : &:r2194_10, m2194_9 +# 2194| r2194_12(glval) = VariableAddress[#this] : +# 2194| r2194_13(ClassWithDestructor *) = Load[#this] : &:r2194_12, m2194_5 +# 2194| r2194_14(glval) = FieldAddress[x] : r2194_13 +# 2194| r2194_15(char *) = Load[?] : &:r2194_14, ~m? +# 2194| r2194_16(glval) = CopyValue : r2194_15 +# 2194| mu2194_17(char) = Store[?] : &:r2194_16, r2194_11 +# 2194| v2194_18(void) = NoOp : +# 2194| v2194_19(void) = ReturnIndirection[#this] : &:r2194_6, ~m? +# 2194| v2194_20(void) = ReturnVoid : +# 2194| v2194_21(void) = AliasedUse : ~m? +# 2194| v2194_22(void) = ExitFunction : # 2195| char ClassWithDestructor::get_x() # 2195| Block 0 # 2195| v2195_1(void) = EnterFunction : -# 2195| m2195_2(unknown) = AliasedDefinition : -# 2195| m2195_3(unknown) = InitializeNonLocal : -# 2195| m2195_4(unknown) = Chi : total:m2195_2, partial:m2195_3 -# 2195| r2195_5(glval) = VariableAddress[#this] : -# 2195| m2195_6(glval) = InitializeParameter[#this] : &:r2195_5 -# 2195| r2195_7(glval) = Load[#this] : &:r2195_5, m2195_6 -# 2195| m2195_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2195_7 -# 2195| r2195_9(glval) = VariableAddress[#return] : -# 2195| r2195_10(glval) = VariableAddress[#this] : -# 2195| r2195_11(ClassWithDestructor *) = Load[#this] : &:r2195_10, m2195_6 -# 2195| r2195_12(glval) = FieldAddress[x] : r2195_11 -# 2195| r2195_13(char *) = Load[?] : &:r2195_12, ~m2195_8 -# 2195| r2195_14(char) = Load[?] : &:r2195_13, ~m2195_4 -# 2195| m2195_15(char) = Store[#return] : &:r2195_9, r2195_14 -# 2195| v2195_16(void) = ReturnIndirection[#this] : &:r2195_7, m2195_8 -# 2195| r2195_17(glval) = VariableAddress[#return] : -# 2195| v2195_18(void) = ReturnValue : &:r2195_17, m2195_15 -# 2195| v2195_19(void) = AliasedUse : m2195_3 -# 2195| v2195_20(void) = ExitFunction : +# 2195| mu2195_2(unknown) = AliasedDefinition : +# 2195| mu2195_3(unknown) = InitializeNonLocal : +# 2195| r2195_4(glval) = VariableAddress[#this] : +# 2195| m2195_5(glval) = InitializeParameter[#this] : &:r2195_4 +# 2195| r2195_6(glval) = Load[#this] : &:r2195_4, m2195_5 +# 2195| mu2195_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2195_6 +# 2195| r2195_8(glval) = VariableAddress[#return] : +# 2195| r2195_9(glval) = VariableAddress[#this] : +# 2195| r2195_10(ClassWithDestructor *) = Load[#this] : &:r2195_9, m2195_5 +# 2195| r2195_11(glval) = FieldAddress[x] : r2195_10 +# 2195| r2195_12(char *) = Load[?] : &:r2195_11, ~m? +# 2195| r2195_13(char) = Load[?] : &:r2195_12, ~m? +# 2195| m2195_14(char) = Store[#return] : &:r2195_8, r2195_13 +# 2195| v2195_15(void) = ReturnIndirection[#this] : &:r2195_6, ~m? +# 2195| r2195_16(glval) = VariableAddress[#return] : +# 2195| v2195_17(void) = ReturnValue : &:r2195_16, m2195_14 +# 2195| v2195_18(void) = AliasedUse : ~m? +# 2195| v2195_19(void) = ExitFunction : # 2199| bool initialization_with_destructor_bool # 2199| Block 0 # 2199| v2199_1(void) = EnterFunction : -# 2199| m2199_2(unknown) = AliasedDefinition : +# 2199| mu2199_2(unknown) = AliasedDefinition : # 2199| r2199_3(glval) = VariableAddress[initialization_with_destructor_bool] : # 2199| r2199_4(bool) = Constant[1] : -# 2199| m2199_5(bool) = Store[initialization_with_destructor_bool] : &:r2199_3, r2199_4 -# 2199| m2199_6(unknown) = Chi : total:m2199_2, partial:m2199_5 -# 2199| v2199_7(void) = ReturnVoid : -# 2199| v2199_8(void) = AliasedUse : ~m2199_6 -# 2199| v2199_9(void) = ExitFunction : +# 2199| mu2199_5(bool) = Store[initialization_with_destructor_bool] : &:r2199_3, r2199_4 +# 2199| v2199_6(void) = ReturnVoid : +# 2199| v2199_7(void) = AliasedUse : ~m? +# 2199| v2199_8(void) = ExitFunction : # 2201| void initialization_with_destructor(bool, char) # 2201| Block 0 # 2201| v2201_1(void) = EnterFunction : -# 2201| m2201_2(unknown) = AliasedDefinition : -# 2201| m2201_3(unknown) = InitializeNonLocal : -# 2201| m2201_4(unknown) = Chi : total:m2201_2, partial:m2201_3 -# 2201| r2201_5(glval) = VariableAddress[b] : -# 2201| m2201_6(bool) = InitializeParameter[b] : &:r2201_5 -# 2201| r2201_7(glval) = VariableAddress[c] : -# 2201| m2201_8(char) = InitializeParameter[c] : &:r2201_7 +# 2201| mu2201_2(unknown) = AliasedDefinition : +# 2201| mu2201_3(unknown) = InitializeNonLocal : +# 2201| r2201_4(glval) = VariableAddress[b] : +# 2201| m2201_5(bool) = InitializeParameter[b] : &:r2201_4 +# 2201| r2201_6(glval) = VariableAddress[c] : +# 2201| m2201_7(char) = InitializeParameter[c] : &:r2201_6 # 2202| r2202_1(glval) = VariableAddress[x] : -# 2202| m2202_2(ClassWithDestructor) = Uninitialized[x] : &:r2202_1 +# 2202| mu2202_2(ClassWithDestructor) = Uninitialized[x] : &:r2202_1 # 2202| r2202_3(glval) = FunctionAddress[ClassWithDestructor] : # 2202| v2202_4(void) = Call[ClassWithDestructor] : func:r2202_3, this:r2202_1 -# 2202| m2202_5(unknown) = ^CallSideEffect : ~m2201_4 -# 2202| m2202_6(unknown) = Chi : total:m2201_4, partial:m2202_5 -# 2202| m2202_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2202| m2202_8(ClassWithDestructor) = Chi : total:m2202_2, partial:m2202_7 -# 2202| r2202_9(glval) = VariableAddress[b] : -# 2202| r2202_10(bool) = Load[b] : &:r2202_9, m2201_6 -# 2202| v2202_11(void) = ConditionalBranch : r2202_10 +# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? +# 2202| mu2202_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 +# 2202| r2202_7(glval) = VariableAddress[b] : +# 2202| r2202_8(bool) = Load[b] : &:r2202_7, m2201_5 +# 2202| v2202_9(void) = ConditionalBranch : r2202_8 #-----| False -> Block 3 #-----| True -> Block 2 # 2201| Block 1 -# 2201| m2201_9(unknown) = Phi : from 14:~m2236_5, from 19:~m2236_13, from 23:~m2236_22 -# 2201| v2201_10(void) = ReturnVoid : -# 2201| v2201_11(void) = AliasedUse : ~m2201_9 -# 2201| v2201_12(void) = ExitFunction : +# 2201| v2201_8(void) = ReturnVoid : +# 2201| v2201_9(void) = AliasedUse : ~m? +# 2201| v2201_10(void) = ExitFunction : # 2203| Block 2 # 2203| r2203_1(glval) = VariableAddress[x] : # 2203| r2203_2(glval) = FunctionAddress[set_x] : # 2203| r2203_3(char) = Constant[97] : # 2203| v2203_4(void) = Call[set_x] : func:r2203_2, this:r2203_1, 0:r2203_3 -# 2203| m2203_5(unknown) = ^CallSideEffect : ~m2202_6 -# 2203| m2203_6(unknown) = Chi : total:m2202_6, partial:m2203_5 -# 2203| v2203_7(void) = ^IndirectReadSideEffect[-1] : &:r2203_1, m2202_8 -# 2203| m2203_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 -# 2203| m2203_9(ClassWithDestructor) = Chi : total:m2202_8, partial:m2203_8 +# 2203| mu2203_5(unknown) = ^CallSideEffect : ~m? +# 2203| v2203_6(void) = ^IndirectReadSideEffect[-1] : &:r2203_1, ~m? +# 2203| mu2203_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 #-----| Goto -> Block 3 # 2203| Block 3 -# 2203| m2203_10(ClassWithDestructor) = Phi : from 0:m2202_8, from 2:m2203_9 -# 2203| m2203_11(unknown) = Phi : from 0:~m2202_6, from 2:~m2203_6 -# 2203| r2203_12(glval) = VariableAddress[x] : -# 2203| r2203_13(glval) = FunctionAddress[~ClassWithDestructor] : -# 2203| v2203_14(void) = Call[~ClassWithDestructor] : func:r2203_13, this:r2203_12 -# 2203| m2203_15(unknown) = ^CallSideEffect : ~m2203_11 -# 2203| m2203_16(unknown) = Chi : total:m2203_11, partial:m2203_15 -# 2203| v2203_17(void) = ^IndirectReadSideEffect[-1] : &:r2203_12, m2203_10 -# 2203| m2203_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_12 -# 2203| m2203_19(ClassWithDestructor) = Chi : total:m2203_10, partial:m2203_18 -# 2205| r2205_1(glval) = VariableAddress[x] : -# 2205| m2205_2(ClassWithDestructor) = Uninitialized[x] : &:r2205_1 -# 2205| r2205_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2205| v2205_4(void) = Call[ClassWithDestructor] : func:r2205_3, this:r2205_1 -# 2205| m2205_5(unknown) = ^CallSideEffect : ~m2203_16 -# 2205| m2205_6(unknown) = Chi : total:m2203_16, partial:m2205_5 -# 2205| m2205_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 -# 2205| m2205_8(ClassWithDestructor) = Chi : total:m2205_2, partial:m2205_7 -# 2205| r2205_9(bool) = Constant[1] : -# 2205| v2205_10(void) = ConditionalBranch : r2205_9 +# 2203| r2203_8(glval) = VariableAddress[x] : +# 2203| r2203_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2203| v2203_10(void) = Call[~ClassWithDestructor] : func:r2203_9, this:r2203_8 +# 2203| mu2203_11(unknown) = ^CallSideEffect : ~m? +# 2203| v2203_12(void) = ^IndirectReadSideEffect[-1] : &:r2203_8, ~m? +# 2203| mu2203_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_8 +# 2205| r2205_1(glval) = VariableAddress[x] : +# 2205| mu2205_2(ClassWithDestructor) = Uninitialized[x] : &:r2205_1 +# 2205| r2205_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2205| v2205_4(void) = Call[ClassWithDestructor] : func:r2205_3, this:r2205_1 +# 2205| mu2205_5(unknown) = ^CallSideEffect : ~m? +# 2205| mu2205_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| r2205_7(bool) = Constant[1] : +# 2205| v2205_8(void) = ConditionalBranch : r2205_7 #-----| False -> Block 24 #-----| True -> Block 4 # 2206| Block 4 -# 2206| r2206_1(glval) = VariableAddress[x] : -# 2206| r2206_2(glval) = FunctionAddress[set_x] : -# 2206| r2206_3(char) = Constant[97] : -# 2206| v2206_4(void) = Call[set_x] : func:r2206_2, this:r2206_1, 0:r2206_3 -# 2206| m2206_5(unknown) = ^CallSideEffect : ~m2205_6 -# 2206| m2206_6(unknown) = Chi : total:m2205_6, partial:m2206_5 -# 2206| v2206_7(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, m2205_8 -# 2206| m2206_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2206| m2206_9(ClassWithDestructor) = Chi : total:m2205_8, partial:m2206_8 -# 2206| r2206_10(glval) = VariableAddress[x] : -# 2206| r2206_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2206| v2206_12(void) = Call[~ClassWithDestructor] : func:r2206_11, this:r2206_10 -# 2206| m2206_13(unknown) = ^CallSideEffect : ~m2206_6 -# 2206| m2206_14(unknown) = Chi : total:m2206_6, partial:m2206_13 -# 2206| v2206_15(void) = ^IndirectReadSideEffect[-1] : &:r2206_10, m2206_9 -# 2206| m2206_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_10 -# 2206| m2206_17(ClassWithDestructor) = Chi : total:m2206_9, partial:m2206_16 -# 2208| r2208_1(glval) = VariableAddress[x] : -# 2208| m2208_2(ClassWithDestructor) = Uninitialized[x] : &:r2208_1 -# 2208| r2208_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2208| v2208_4(void) = Call[ClassWithDestructor] : func:r2208_3, this:r2208_1 -# 2208| m2208_5(unknown) = ^CallSideEffect : ~m2206_14 -# 2208| m2208_6(unknown) = Chi : total:m2206_14, partial:m2208_5 -# 2208| m2208_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2208_1 -# 2208| m2208_8(ClassWithDestructor) = Chi : total:m2208_2, partial:m2208_7 -# 2208| r2208_9(glval) = VariableAddress[c] : -# 2208| r2208_10(char) = Load[c] : &:r2208_9, m2201_8 -# 2208| r2208_11(int) = Convert : r2208_10 -# 2208| v2208_12(void) = Switch : r2208_11 +# 2206| r2206_1(glval) = VariableAddress[x] : +# 2206| r2206_2(glval) = FunctionAddress[set_x] : +# 2206| r2206_3(char) = Constant[97] : +# 2206| v2206_4(void) = Call[set_x] : func:r2206_2, this:r2206_1, 0:r2206_3 +# 2206| mu2206_5(unknown) = ^CallSideEffect : ~m? +# 2206| v2206_6(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, ~m? +# 2206| mu2206_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 +# 2206| r2206_8(glval) = VariableAddress[x] : +# 2206| r2206_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2206| v2206_10(void) = Call[~ClassWithDestructor] : func:r2206_9, this:r2206_8 +# 2206| mu2206_11(unknown) = ^CallSideEffect : ~m? +# 2206| v2206_12(void) = ^IndirectReadSideEffect[-1] : &:r2206_8, ~m? +# 2206| mu2206_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_8 +# 2208| r2208_1(glval) = VariableAddress[x] : +# 2208| mu2208_2(ClassWithDestructor) = Uninitialized[x] : &:r2208_1 +# 2208| r2208_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2208| v2208_4(void) = Call[ClassWithDestructor] : func:r2208_3, this:r2208_1 +# 2208| mu2208_5(unknown) = ^CallSideEffect : ~m? +# 2208| mu2208_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2208_1 +# 2208| r2208_7(glval) = VariableAddress[c] : +# 2208| r2208_8(char) = Load[c] : &:r2208_7, m2201_7 +# 2208| r2208_9(int) = Convert : r2208_8 +# 2208| v2208_10(void) = Switch : r2208_9 #-----| Case[97] -> Block 5 #-----| Default -> Block 6 @@ -16459,19 +15030,15 @@ ir.cpp: # 2210| r2210_2(glval) = FunctionAddress[set_x] : # 2210| r2210_3(char) = Constant[97] : # 2210| v2210_4(void) = Call[set_x] : func:r2210_2, this:r2210_1, 0:r2210_3 -# 2210| m2210_5(unknown) = ^CallSideEffect : ~m2208_6 -# 2210| m2210_6(unknown) = Chi : total:m2208_6, partial:m2210_5 -# 2210| v2210_7(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, m2208_8 -# 2210| m2210_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| m2210_9(ClassWithDestructor) = Chi : total:m2208_8, partial:m2210_8 +# 2210| mu2210_5(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_6(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, ~m? +# 2210| mu2210_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 # 2215| r2215_1(glval) = VariableAddress[x] : # 2215| r2215_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2215| v2215_3(void) = Call[~ClassWithDestructor] : func:r2215_2, this:r2215_1 -# 2215| m2215_4(unknown) = ^CallSideEffect : ~m2210_6 -# 2215| m2215_5(unknown) = Chi : total:m2210_6, partial:m2215_4 -# 2215| v2215_6(void) = ^IndirectReadSideEffect[-1] : &:r2215_1, m2210_9 -# 2215| m2215_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2215| m2215_8(ClassWithDestructor) = Chi : total:m2210_9, partial:m2215_7 +# 2215| mu2215_4(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_5(void) = ^IndirectReadSideEffect[-1] : &:r2215_1, ~m? +# 2215| mu2215_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 # 2211| v2211_1(void) = NoOp : #-----| Goto -> Block 7 @@ -16481,300 +15048,261 @@ ir.cpp: # 2213| r2213_2(glval) = FunctionAddress[set_x] : # 2213| r2213_3(char) = Constant[98] : # 2213| v2213_4(void) = Call[set_x] : func:r2213_2, this:r2213_1, 0:r2213_3 -# 2213| m2213_5(unknown) = ^CallSideEffect : ~m2208_6 -# 2213| m2213_6(unknown) = Chi : total:m2208_6, partial:m2213_5 -# 2213| v2213_7(void) = ^IndirectReadSideEffect[-1] : &:r2213_1, m2208_8 -# 2213| m2213_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2213_1 -# 2213| m2213_9(ClassWithDestructor) = Chi : total:m2208_8, partial:m2213_8 -# 2215| r2215_9(glval) = VariableAddress[x] : -# 2215| r2215_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2215| v2215_11(void) = Call[~ClassWithDestructor] : func:r2215_10, this:r2215_9 -# 2215| m2215_12(unknown) = ^CallSideEffect : ~m2213_6 -# 2215| m2215_13(unknown) = Chi : total:m2213_6, partial:m2215_12 -# 2215| v2215_14(void) = ^IndirectReadSideEffect[-1] : &:r2215_9, m2213_9 -# 2215| m2215_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_9 -# 2215| m2215_16(ClassWithDestructor) = Chi : total:m2213_9, partial:m2215_15 +# 2213| mu2213_5(unknown) = ^CallSideEffect : ~m? +# 2213| v2213_6(void) = ^IndirectReadSideEffect[-1] : &:r2213_1, ~m? +# 2213| mu2213_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2213_1 +# 2215| r2215_7(glval) = VariableAddress[x] : +# 2215| r2215_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_9(void) = Call[~ClassWithDestructor] : func:r2215_8, this:r2215_7 +# 2215| mu2215_10(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_11(void) = ^IndirectReadSideEffect[-1] : &:r2215_7, ~m? +# 2215| mu2215_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_7 # 2214| v2214_1(void) = NoOp : #-----| Goto -> Block 7 # 2215| Block 7 -# 2215| m2215_17(unknown) = Phi : from 5:~m2215_5, from 6:~m2215_13 -# 2215| v2215_18(void) = NoOp : +# 2215| v2215_13(void) = NoOp : # 2217| r2217_1(glval) = VariableAddress[x] : -# 2217| m2217_2(ClassWithDestructor) = Uninitialized[x] : &:r2217_1 +# 2217| mu2217_2(ClassWithDestructor) = Uninitialized[x] : &:r2217_1 # 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : # 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 -# 2217| m2217_5(unknown) = ^CallSideEffect : ~m2215_17 -# 2217| m2217_6(unknown) = Chi : total:m2215_17, partial:m2217_5 -# 2217| m2217_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 -# 2217| m2217_8(ClassWithDestructor) = Chi : total:m2217_2, partial:m2217_7 +# 2217| mu2217_5(unknown) = ^CallSideEffect : ~m? +# 2217| mu2217_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 # 2218| r2218_1(glval>) = VariableAddress[ys] : -# 2218| m2218_2(vector) = Uninitialized[ys] : &:r2218_1 +# 2218| mu2218_2(vector) = Uninitialized[ys] : &:r2218_1 # 2218| r2218_3(glval) = FunctionAddress[vector] : # 2218| r2218_4(glval) = VariableAddress[#temp2218:45] : # 2218| r2218_5(glval) = VariableAddress[x] : -# 2218| r2218_6(ClassWithDestructor) = Load[x] : &:r2218_5, m2217_8 -# 2218| m2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 -# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, m2218_7 +# 2218| r2218_6(ClassWithDestructor) = Load[x] : &:r2218_5, ~m? +# 2218| mu2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 +# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, ~m? # 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8 -# 2218| m2218_10(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2218_1 +# 2218| mu2218_10(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2218_1 # 2218| r2218_11(glval) = CopyValue : r2218_4 # 2218| r2218_12(glval) = FunctionAddress[~ClassWithDestructor] : # 2218| v2218_13(void) = Call[~ClassWithDestructor] : func:r2218_12, this:r2218_11 -# 2218| m2218_14(unknown) = ^CallSideEffect : ~m2217_6 -# 2218| m2218_15(unknown) = Chi : total:m2217_6, partial:m2218_14 -# 2218| v2218_16(void) = ^IndirectReadSideEffect[-1] : &:r2218_11, m2218_7 -# 2218| m2218_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_11 -# 2218| m2218_18(ClassWithDestructor) = Chi : total:m2218_7, partial:m2218_17 -# 2218| r2218_19(glval &>) = VariableAddress[(__range)] : -# 2218| r2218_20(glval>) = VariableAddress[ys] : -# 2218| r2218_21(vector &) = CopyValue : r2218_20 -# 2218| m2218_22(vector &) = Store[(__range)] : &:r2218_19, r2218_21 -# 2218| r2218_23(glval>) = VariableAddress[(__begin)] : -# 2218| r2218_24(glval &>) = VariableAddress[(__range)] : -# 2218| r2218_25(vector &) = Load[(__range)] : &:r2218_24, m2218_22 -#-----| r0_1(glval>) = CopyValue : r2218_25 +# 2218| mu2218_14(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_15(void) = ^IndirectReadSideEffect[-1] : &:r2218_11, ~m? +# 2218| mu2218_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_11 +# 2218| r2218_17(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_18(glval>) = VariableAddress[ys] : +# 2218| r2218_19(vector &) = CopyValue : r2218_18 +# 2218| m2218_20(vector &) = Store[(__range)] : &:r2218_17, r2218_19 +# 2218| r2218_21(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_22(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_23(vector &) = Load[(__range)] : &:r2218_22, m2218_20 +#-----| r0_1(glval>) = CopyValue : r2218_23 #-----| r0_2(glval>) = Convert : r0_1 -# 2218| r2218_26(glval) = FunctionAddress[begin] : -# 2218| r2218_27(iterator) = Call[begin] : func:r2218_26, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2218_10 -# 2218| m2218_28(iterator) = Store[(__begin)] : &:r2218_23, r2218_27 -# 2218| r2218_29(glval>) = VariableAddress[(__end)] : -# 2218| r2218_30(glval &>) = VariableAddress[(__range)] : -# 2218| r2218_31(vector &) = Load[(__range)] : &:r2218_30, m2218_22 -#-----| r0_4(glval>) = CopyValue : r2218_31 +# 2218| r2218_24(glval) = FunctionAddress[begin] : +# 2218| r2218_25(iterator) = Call[begin] : func:r2218_24, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2218| mu2218_26(iterator) = Store[(__begin)] : &:r2218_21, r2218_25 +# 2218| r2218_27(glval>) = VariableAddress[(__end)] : +# 2218| r2218_28(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_29(vector &) = Load[(__range)] : &:r2218_28, m2218_20 +#-----| r0_4(glval>) = CopyValue : r2218_29 #-----| r0_5(glval>) = Convert : r0_4 -# 2218| r2218_32(glval) = FunctionAddress[end] : -# 2218| r2218_33(iterator) = Call[end] : func:r2218_32, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2218_10 -# 2218| m2218_34(iterator) = Store[(__end)] : &:r2218_29, r2218_33 -# 2218| m2218_35(unknown) = Chi : total:m2218_15, partial:m2218_34 +# 2218| r2218_30(glval) = FunctionAddress[end] : +# 2218| r2218_31(iterator) = Call[end] : func:r2218_30, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2218| mu2218_32(iterator) = Store[(__end)] : &:r2218_27, r2218_31 #-----| Goto -> Block 8 # 2218| Block 8 -# 2218| m2218_36(iterator) = Phi : from 7:m2218_28, from 9:m2218_60 -# 2218| m2218_37(unknown) = Phi : from 7:~m2218_35, from 9:~m2218_65 -# 2218| r2218_38(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2218_38 -# 2218| r2218_39(glval) = FunctionAddress[operator!=] : +# 2218| r2218_33(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2218_33 +# 2218| r2218_34(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -#-----| m0_10(unknown) = Chi : total:m2218_37, partial:m0_9 -# 2218| r2218_40(glval) = FunctionAddress[iterator] : -# 2218| r2218_41(glval>) = VariableAddress[(__end)] : -#-----| r0_11(glval>) = Convert : r2218_41 -#-----| r0_12(iterator &) = CopyValue : r0_11 -# 2218| v2218_42(void) = Call[iterator] : func:r2218_40, this:r0_8, 0:r0_12 -# 2218| m2218_43(unknown) = ^CallSideEffect : ~m0_10 -# 2218| m2218_44(unknown) = Chi : total:m0_10, partial:m2218_43 -#-----| v0_13(void) = ^BufferReadSideEffect[0] : &:r0_12, ~m2218_44 -# 2218| m2218_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2218| m2218_46(unknown) = Chi : total:m2218_44, partial:m2218_45 -#-----| r0_14(iterator) = Load[#temp0:0] : &:r0_8, ~m2218_46 -# 2218| r2218_47(bool) = Call[operator!=] : func:r2218_39, this:r0_7, 0:r0_14 -#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2218_36 -# 2218| v2218_48(void) = ConditionalBranch : r2218_47 +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2218| r2218_35(glval) = FunctionAddress[iterator] : +# 2218| r2218_36(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2218_36 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2218| v2218_37(void) = Call[iterator] : func:r2218_35, this:r0_8, 0:r0_11 +# 2218| mu2218_38(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2218| mu2218_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2218| r2218_40(bool) = Call[operator!=] : func:r2218_34, this:r0_7, 0:r0_13 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2218| v2218_41(void) = ConditionalBranch : r2218_40 #-----| False -> Block 10 #-----| True -> Block 9 # 2218| Block 9 -# 2218| r2218_49(glval) = VariableAddress[y] : -# 2218| r2218_50(glval>) = VariableAddress[(__begin)] : -#-----| r0_16(glval>) = Convert : r2218_50 -# 2218| r2218_51(glval) = FunctionAddress[operator*] : -# 2218| r2218_52(ClassWithDestructor &) = Call[operator*] : func:r2218_51, this:r0_16 -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, m2218_36 -# 2218| r2218_53(ClassWithDestructor) = Load[?] : &:r2218_52, ~m2218_46 -# 2218| m2218_54(ClassWithDestructor) = Store[y] : &:r2218_49, r2218_53 +# 2218| r2218_42(glval) = VariableAddress[y] : +# 2218| r2218_43(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2218_43 +# 2218| r2218_44(glval) = FunctionAddress[operator*] : +# 2218| r2218_45(ClassWithDestructor &) = Call[operator*] : func:r2218_44, this:r0_15 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2218| r2218_46(ClassWithDestructor) = Load[?] : &:r2218_45, ~m? +# 2218| mu2218_47(ClassWithDestructor) = Store[y] : &:r2218_42, r2218_46 # 2219| r2219_1(glval) = VariableAddress[y] : # 2219| r2219_2(glval) = FunctionAddress[set_x] : # 2219| r2219_3(char) = Constant[97] : # 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3 -# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_46 -# 2219| m2219_6(unknown) = Chi : total:m2218_46, partial:m2219_5 -# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_54 -# 2219| m2219_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_54, partial:m2219_8 -# 2218| r2218_55(glval>) = VariableAddress[(__begin)] : -# 2218| r2218_56(glval) = FunctionAddress[operator++] : -# 2218| r2218_57(iterator &) = Call[operator++] : func:r2218_56, this:r2218_55 -# 2218| v2218_58(void) = ^IndirectReadSideEffect[-1] : &:r2218_55, m2218_36 -# 2218| m2218_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_55 -# 2218| m2218_60(iterator) = Chi : total:m2218_36, partial:m2218_59 -# 2218| r2218_61(glval) = VariableAddress[y] : -# 2218| r2218_62(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_63(void) = Call[~ClassWithDestructor] : func:r2218_62, this:r2218_61 -# 2218| m2218_64(unknown) = ^CallSideEffect : ~m2219_6 -# 2218| m2218_65(unknown) = Chi : total:m2219_6, partial:m2218_64 -# 2218| v2218_66(void) = ^IndirectReadSideEffect[-1] : &:r2218_61, m2219_9 -# 2218| m2218_67(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_61 -# 2218| m2218_68(ClassWithDestructor) = Chi : total:m2219_9, partial:m2218_67 -# 2218| r2218_69(glval>) = CopyValue : r2218_57 +# 2219| mu2219_5(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? +# 2219| mu2219_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +# 2218| r2218_48(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_49(glval) = FunctionAddress[operator++] : +# 2218| r2218_50(iterator &) = Call[operator++] : func:r2218_49, this:r2218_48 +# 2218| v2218_51(void) = ^IndirectReadSideEffect[-1] : &:r2218_48, ~m? +# 2218| mu2218_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_48 +# 2218| r2218_53(glval) = VariableAddress[y] : +# 2218| r2218_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_55(void) = Call[~ClassWithDestructor] : func:r2218_54, this:r2218_53 +# 2218| mu2218_56(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_57(void) = ^IndirectReadSideEffect[-1] : &:r2218_53, ~m? +# 2218| mu2218_58(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_53 +# 2218| r2218_59(glval>) = CopyValue : r2218_50 #-----| Goto (back edge) -> Block 8 # 2218| Block 10 -# 2218| r2218_70(glval>) = VariableAddress[ys] : -# 2218| r2218_71(glval) = FunctionAddress[~vector] : -# 2218| v2218_72(void) = Call[~vector] : func:r2218_71, this:r2218_70 -# 2218| v2218_73(void) = ^IndirectReadSideEffect[-1] : &:r2218_70, m2218_10 -# 2218| m2218_74(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2218_70 +# 2218| r2218_60(glval>) = VariableAddress[ys] : +# 2218| r2218_61(glval) = FunctionAddress[~vector] : +# 2218| v2218_62(void) = Call[~vector] : func:r2218_61, this:r2218_60 +# 2218| v2218_63(void) = ^IndirectReadSideEffect[-1] : &:r2218_60, ~m? +# 2218| mu2218_64(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2218_60 # 2221| r2221_1(glval>) = VariableAddress[ys] : -# 2221| m2221_2(vector) = Uninitialized[ys] : &:r2221_1 +# 2221| mu2221_2(vector) = Uninitialized[ys] : &:r2221_1 # 2221| r2221_3(glval) = FunctionAddress[vector] : # 2221| r2221_4(glval) = VariableAddress[#temp2221:45] : # 2221| r2221_5(glval) = VariableAddress[x] : -# 2221| r2221_6(ClassWithDestructor) = Load[x] : &:r2221_5, m2217_8 -# 2221| m2221_7(ClassWithDestructor) = Store[#temp2221:45] : &:r2221_4, r2221_6 -# 2221| r2221_8(ClassWithDestructor) = Load[#temp2221:45] : &:r2221_4, m2221_7 +# 2221| r2221_6(ClassWithDestructor) = Load[x] : &:r2221_5, ~m? +# 2221| mu2221_7(ClassWithDestructor) = Store[#temp2221:45] : &:r2221_4, r2221_6 +# 2221| r2221_8(ClassWithDestructor) = Load[#temp2221:45] : &:r2221_4, ~m? # 2221| v2221_9(void) = Call[vector] : func:r2221_3, this:r2221_1, 0:r2221_8 -# 2221| m2221_10(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2221_1 +# 2221| mu2221_10(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2221_1 # 2221| r2221_11(glval) = CopyValue : r2221_4 # 2221| r2221_12(glval) = FunctionAddress[~ClassWithDestructor] : # 2221| v2221_13(void) = Call[~ClassWithDestructor] : func:r2221_12, this:r2221_11 -# 2221| m2221_14(unknown) = ^CallSideEffect : ~m2218_46 -# 2221| m2221_15(unknown) = Chi : total:m2218_46, partial:m2221_14 -# 2221| v2221_16(void) = ^IndirectReadSideEffect[-1] : &:r2221_11, m2221_7 -# 2221| m2221_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2221_11 -# 2221| m2221_18(ClassWithDestructor) = Chi : total:m2221_7, partial:m2221_17 -# 2221| r2221_19(glval &>) = VariableAddress[(__range)] : -# 2221| r2221_20(glval>) = VariableAddress[ys] : -# 2221| r2221_21(vector &) = CopyValue : r2221_20 -# 2221| m2221_22(vector &) = Store[(__range)] : &:r2221_19, r2221_21 -# 2221| r2221_23(glval>) = VariableAddress[(__begin)] : -# 2221| r2221_24(glval &>) = VariableAddress[(__range)] : -# 2221| r2221_25(vector &) = Load[(__range)] : &:r2221_24, m2221_22 -#-----| r0_18(glval>) = CopyValue : r2221_25 -#-----| r0_19(glval>) = Convert : r0_18 -# 2221| r2221_26(glval) = FunctionAddress[begin] : -# 2221| r2221_27(iterator) = Call[begin] : func:r2221_26, this:r0_19 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m2221_10 -# 2221| m2221_28(iterator) = Store[(__begin)] : &:r2221_23, r2221_27 -# 2221| r2221_29(glval>) = VariableAddress[(__end)] : -# 2221| r2221_30(glval &>) = VariableAddress[(__range)] : -# 2221| r2221_31(vector &) = Load[(__range)] : &:r2221_30, m2221_22 -#-----| r0_21(glval>) = CopyValue : r2221_31 -#-----| r0_22(glval>) = Convert : r0_21 -# 2221| r2221_32(glval) = FunctionAddress[end] : -# 2221| r2221_33(iterator) = Call[end] : func:r2221_32, this:r0_22 -#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, m2221_10 -# 2221| m2221_34(iterator) = Store[(__end)] : &:r2221_29, r2221_33 -# 2221| m2221_35(unknown) = Chi : total:m2221_15, partial:m2221_34 +# 2221| mu2221_14(unknown) = ^CallSideEffect : ~m? +# 2221| v2221_15(void) = ^IndirectReadSideEffect[-1] : &:r2221_11, ~m? +# 2221| mu2221_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2221_11 +# 2221| r2221_17(glval &>) = VariableAddress[(__range)] : +# 2221| r2221_18(glval>) = VariableAddress[ys] : +# 2221| r2221_19(vector &) = CopyValue : r2221_18 +# 2221| m2221_20(vector &) = Store[(__range)] : &:r2221_17, r2221_19 +# 2221| r2221_21(glval>) = VariableAddress[(__begin)] : +# 2221| r2221_22(glval &>) = VariableAddress[(__range)] : +# 2221| r2221_23(vector &) = Load[(__range)] : &:r2221_22, m2221_20 +#-----| r0_17(glval>) = CopyValue : r2221_23 +#-----| r0_18(glval>) = Convert : r0_17 +# 2221| r2221_24(glval) = FunctionAddress[begin] : +# 2221| r2221_25(iterator) = Call[begin] : func:r2221_24, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +# 2221| mu2221_26(iterator) = Store[(__begin)] : &:r2221_21, r2221_25 +# 2221| r2221_27(glval>) = VariableAddress[(__end)] : +# 2221| r2221_28(glval &>) = VariableAddress[(__range)] : +# 2221| r2221_29(vector &) = Load[(__range)] : &:r2221_28, m2221_20 +#-----| r0_20(glval>) = CopyValue : r2221_29 +#-----| r0_21(glval>) = Convert : r0_20 +# 2221| r2221_30(glval) = FunctionAddress[end] : +# 2221| r2221_31(iterator) = Call[end] : func:r2221_30, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +# 2221| mu2221_32(iterator) = Store[(__end)] : &:r2221_27, r2221_31 #-----| Goto -> Block 11 # 2221| Block 11 -# 2221| m2221_36(iterator) = Phi : from 10:m2221_28, from 12:m2221_54 -# 2221| m2221_37(unknown) = Phi : from 10:~m2221_35, from 12:~m2221_59 -# 2221| r2221_38(glval>) = VariableAddress[(__begin)] : -#-----| r0_24(glval>) = Convert : r2221_38 -# 2221| r2221_39(glval) = FunctionAddress[operator!=] : -#-----| r0_25(glval>) = VariableAddress[#temp0:0] : -#-----| m0_26(iterator) = Uninitialized[#temp0:0] : &:r0_25 -#-----| m0_27(unknown) = Chi : total:m2221_37, partial:m0_26 -# 2221| r2221_40(glval) = FunctionAddress[iterator] : -# 2221| r2221_41(glval>) = VariableAddress[(__end)] : -#-----| r0_28(glval>) = Convert : r2221_41 -#-----| r0_29(iterator &) = CopyValue : r0_28 -# 2221| v2221_42(void) = Call[iterator] : func:r2221_40, this:r0_25, 0:r0_29 -# 2221| m2221_43(unknown) = ^CallSideEffect : ~m0_27 -# 2221| m2221_44(unknown) = Chi : total:m0_27, partial:m2221_43 -#-----| v0_30(void) = ^BufferReadSideEffect[0] : &:r0_29, ~m2221_44 -# 2221| m2221_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_25 -# 2221| m2221_46(unknown) = Chi : total:m2221_44, partial:m2221_45 -#-----| r0_31(iterator) = Load[#temp0:0] : &:r0_25, ~m2221_46 -# 2221| r2221_47(bool) = Call[operator!=] : func:r2221_39, this:r0_24, 0:r0_31 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_24, m2221_36 -# 2221| v2221_48(void) = ConditionalBranch : r2221_47 +# 2221| r2221_33(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2221_33 +# 2221| r2221_34(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2221| r2221_35(glval) = FunctionAddress[iterator] : +# 2221| r2221_36(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2221_36 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2221| v2221_37(void) = Call[iterator] : func:r2221_35, this:r0_24, 0:r0_27 +# 2221| mu2221_38(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? +# 2221| mu2221_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? +# 2221| r2221_40(bool) = Call[operator!=] : func:r2221_34, this:r0_23, 0:r0_29 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? +# 2221| v2221_41(void) = ConditionalBranch : r2221_40 #-----| False -> Block 15 #-----| True -> Block 13 # 2221| Block 12 -# 2221| r2221_49(glval>) = VariableAddress[(__begin)] : -# 2221| r2221_50(glval) = FunctionAddress[operator++] : -# 2221| r2221_51(iterator &) = Call[operator++] : func:r2221_50, this:r2221_49 -# 2221| v2221_52(void) = ^IndirectReadSideEffect[-1] : &:r2221_49, m2221_36 -# 2221| m2221_53(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2221_49 -# 2221| m2221_54(iterator) = Chi : total:m2221_36, partial:m2221_53 -# 2221| r2221_55(glval) = VariableAddress[y] : -# 2221| r2221_56(glval) = FunctionAddress[~ClassWithDestructor] : -# 2221| v2221_57(void) = Call[~ClassWithDestructor] : func:r2221_56, this:r2221_55 -# 2221| m2221_58(unknown) = ^CallSideEffect : ~m2223_5 -# 2221| m2221_59(unknown) = Chi : total:m2223_5, partial:m2221_58 -# 2221| v2221_60(void) = ^IndirectReadSideEffect[-1] : &:r2221_55, m2223_8 -# 2221| m2221_61(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2221_55 -# 2221| m2221_62(ClassWithDestructor) = Chi : total:m2223_8, partial:m2221_61 -# 2221| r2221_63(glval>) = CopyValue : r2221_51 +# 2221| r2221_42(glval>) = VariableAddress[(__begin)] : +# 2221| r2221_43(glval) = FunctionAddress[operator++] : +# 2221| r2221_44(iterator &) = Call[operator++] : func:r2221_43, this:r2221_42 +# 2221| v2221_45(void) = ^IndirectReadSideEffect[-1] : &:r2221_42, ~m? +# 2221| mu2221_46(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2221_42 +# 2221| r2221_47(glval) = VariableAddress[y] : +# 2221| r2221_48(glval) = FunctionAddress[~ClassWithDestructor] : +# 2221| v2221_49(void) = Call[~ClassWithDestructor] : func:r2221_48, this:r2221_47 +# 2221| mu2221_50(unknown) = ^CallSideEffect : ~m? +# 2221| v2221_51(void) = ^IndirectReadSideEffect[-1] : &:r2221_47, ~m? +# 2221| mu2221_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2221_47 +# 2221| r2221_53(glval>) = CopyValue : r2221_44 #-----| Goto (back edge) -> Block 11 # 2221| Block 13 -# 2221| r2221_64(glval) = VariableAddress[y] : -# 2221| r2221_65(glval>) = VariableAddress[(__begin)] : -#-----| r0_33(glval>) = Convert : r2221_65 -# 2221| r2221_66(glval) = FunctionAddress[operator*] : -# 2221| r2221_67(ClassWithDestructor &) = Call[operator*] : func:r2221_66, this:r0_33 -#-----| v0_34(void) = ^IndirectReadSideEffect[-1] : &:r0_33, m2221_36 -# 2221| r2221_68(ClassWithDestructor) = Load[?] : &:r2221_67, ~m2221_46 -# 2221| m2221_69(ClassWithDestructor) = Store[y] : &:r2221_64, r2221_68 +# 2221| r2221_54(glval) = VariableAddress[y] : +# 2221| r2221_55(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2221_55 +# 2221| r2221_56(glval) = FunctionAddress[operator*] : +# 2221| r2221_57(ClassWithDestructor &) = Call[operator*] : func:r2221_56, this:r0_31 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +# 2221| r2221_58(ClassWithDestructor) = Load[?] : &:r2221_57, ~m? +# 2221| mu2221_59(ClassWithDestructor) = Store[y] : &:r2221_54, r2221_58 # 2222| r2222_1(glval) = VariableAddress[y] : # 2222| r2222_2(glval) = FunctionAddress[set_x] : # 2222| r2222_3(char) = Constant[97] : # 2222| v2222_4(void) = Call[set_x] : func:r2222_2, this:r2222_1, 0:r2222_3 -# 2222| m2222_5(unknown) = ^CallSideEffect : ~m2221_46 -# 2222| m2222_6(unknown) = Chi : total:m2221_46, partial:m2222_5 -# 2222| v2222_7(void) = ^IndirectReadSideEffect[-1] : &:r2222_1, m2221_69 -# 2222| m2222_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2222| m2222_9(ClassWithDestructor) = Chi : total:m2221_69, partial:m2222_8 +# 2222| mu2222_5(unknown) = ^CallSideEffect : ~m? +# 2222| v2222_6(void) = ^IndirectReadSideEffect[-1] : &:r2222_1, ~m? +# 2222| mu2222_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 # 2223| r2223_1(glval) = VariableAddress[y] : # 2223| r2223_2(glval) = FunctionAddress[get_x] : # 2223| r2223_3(char) = Call[get_x] : func:r2223_2, this:r2223_1 -# 2223| m2223_4(unknown) = ^CallSideEffect : ~m2222_6 -# 2223| m2223_5(unknown) = Chi : total:m2222_6, partial:m2223_4 -# 2223| v2223_6(void) = ^IndirectReadSideEffect[-1] : &:r2223_1, m2222_9 -# 2223| m2223_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_1 -# 2223| m2223_8(ClassWithDestructor) = Chi : total:m2222_9, partial:m2223_7 -# 2223| r2223_9(int) = Convert : r2223_3 -# 2223| r2223_10(int) = Constant[98] : -# 2223| r2223_11(bool) = CompareEQ : r2223_9, r2223_10 -# 2223| v2223_12(void) = ConditionalBranch : r2223_11 +# 2223| mu2223_4(unknown) = ^CallSideEffect : ~m? +# 2223| v2223_5(void) = ^IndirectReadSideEffect[-1] : &:r2223_1, ~m? +# 2223| mu2223_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_1 +# 2223| r2223_7(int) = Convert : r2223_3 +# 2223| r2223_8(int) = Constant[98] : +# 2223| r2223_9(bool) = CompareEQ : r2223_7, r2223_8 +# 2223| v2223_10(void) = ConditionalBranch : r2223_9 #-----| False -> Block 12 #-----| True -> Block 14 # 2224| Block 14 # 2224| v2224_1(void) = NoOp : -# 2221| r2221_70(glval) = VariableAddress[y] : -# 2221| r2221_71(glval) = FunctionAddress[~ClassWithDestructor] : -# 2221| v2221_72(void) = Call[~ClassWithDestructor] : func:r2221_71, this:r2221_70 -# 2221| m2221_73(unknown) = ^CallSideEffect : ~m2223_5 -# 2221| m2221_74(unknown) = Chi : total:m2223_5, partial:m2221_73 -# 2221| v2221_75(void) = ^IndirectReadSideEffect[-1] : &:r2221_70, m2223_8 -# 2221| m2221_76(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2221_70 -# 2221| m2221_77(ClassWithDestructor) = Chi : total:m2223_8, partial:m2221_76 -# 2221| r2221_78(glval>) = VariableAddress[ys] : -# 2221| r2221_79(glval) = FunctionAddress[~vector] : -# 2221| v2221_80(void) = Call[~vector] : func:r2221_79, this:r2221_78 -# 2221| v2221_81(void) = ^IndirectReadSideEffect[-1] : &:r2221_78, m2221_10 -# 2221| m2221_82(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2221_78 +# 2221| r2221_60(glval) = VariableAddress[y] : +# 2221| r2221_61(glval) = FunctionAddress[~ClassWithDestructor] : +# 2221| v2221_62(void) = Call[~ClassWithDestructor] : func:r2221_61, this:r2221_60 +# 2221| mu2221_63(unknown) = ^CallSideEffect : ~m? +# 2221| v2221_64(void) = ^IndirectReadSideEffect[-1] : &:r2221_60, ~m? +# 2221| mu2221_65(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2221_60 +# 2221| r2221_66(glval>) = VariableAddress[ys] : +# 2221| r2221_67(glval) = FunctionAddress[~vector] : +# 2221| v2221_68(void) = Call[~vector] : func:r2221_67, this:r2221_66 +# 2221| v2221_69(void) = ^IndirectReadSideEffect[-1] : &:r2221_66, ~m? +# 2221| mu2221_70(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2221_66 # 2236| r2236_1(glval) = VariableAddress[x] : # 2236| r2236_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2236| v2236_3(void) = Call[~ClassWithDestructor] : func:r2236_2, this:r2236_1 -# 2236| m2236_4(unknown) = ^CallSideEffect : ~m2221_74 -# 2236| m2236_5(unknown) = Chi : total:m2221_74, partial:m2236_4 -# 2236| v2236_6(void) = ^IndirectReadSideEffect[-1] : &:r2236_1, m2217_8 -# 2236| m2236_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 -# 2236| m2236_8(ClassWithDestructor) = Chi : total:m2217_8, partial:m2236_7 +# 2236| mu2236_4(unknown) = ^CallSideEffect : ~m? +# 2236| v2236_5(void) = ^IndirectReadSideEffect[-1] : &:r2236_1, ~m? +# 2236| mu2236_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 #-----| Goto -> Block 1 # 2221| Block 15 -# 2221| r2221_83(glval>) = VariableAddress[ys] : -# 2221| r2221_84(glval) = FunctionAddress[~vector] : -# 2221| v2221_85(void) = Call[~vector] : func:r2221_84, this:r2221_83 -# 2221| v2221_86(void) = ^IndirectReadSideEffect[-1] : &:r2221_83, m2221_10 -# 2221| m2221_87(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2221_83 +# 2221| r2221_71(glval>) = VariableAddress[ys] : +# 2221| r2221_72(glval) = FunctionAddress[~vector] : +# 2221| v2221_73(void) = Call[~vector] : func:r2221_72, this:r2221_71 +# 2221| v2221_74(void) = ^IndirectReadSideEffect[-1] : &:r2221_71, ~m? +# 2221| mu2221_75(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2221_71 # 2227| r2227_1(glval>) = VariableAddress[ys] : -# 2227| m2227_2(vector) = Uninitialized[ys] : &:r2227_1 +# 2227| mu2227_2(vector) = Uninitialized[ys] : &:r2227_1 # 2227| r2227_3(glval) = FunctionAddress[vector] : # 2227| r2227_4(int) = Constant[1] : # 2227| v2227_5(void) = Call[vector] : func:r2227_3, this:r2227_1, 0:r2227_4 -# 2227| m2227_6(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2227_1 +# 2227| mu2227_6(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2227_1 # 2227| r2227_7(glval &>) = VariableAddress[(__range)] : # 2227| r2227_8(glval>) = VariableAddress[ys] : # 2227| r2227_9(vector &) = CopyValue : r2227_8 @@ -16782,71 +15310,64 @@ ir.cpp: # 2227| r2227_11(glval>) = VariableAddress[(__begin)] : # 2227| r2227_12(glval &>) = VariableAddress[(__range)] : # 2227| r2227_13(vector &) = Load[(__range)] : &:r2227_12, m2227_10 -#-----| r0_35(glval>) = CopyValue : r2227_13 -#-----| r0_36(glval>) = Convert : r0_35 +#-----| r0_33(glval>) = CopyValue : r2227_13 +#-----| r0_34(glval>) = Convert : r0_33 # 2227| r2227_14(glval) = FunctionAddress[begin] : -# 2227| r2227_15(iterator) = Call[begin] : func:r2227_14, this:r0_36 -#-----| v0_37(void) = ^IndirectReadSideEffect[-1] : &:r0_36, m2227_6 -# 2227| m2227_16(iterator) = Store[(__begin)] : &:r2227_11, r2227_15 +# 2227| r2227_15(iterator) = Call[begin] : func:r2227_14, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +# 2227| mu2227_16(iterator) = Store[(__begin)] : &:r2227_11, r2227_15 # 2227| r2227_17(glval>) = VariableAddress[(__end)] : # 2227| r2227_18(glval &>) = VariableAddress[(__range)] : # 2227| r2227_19(vector &) = Load[(__range)] : &:r2227_18, m2227_10 -#-----| r0_38(glval>) = CopyValue : r2227_19 -#-----| r0_39(glval>) = Convert : r0_38 +#-----| r0_36(glval>) = CopyValue : r2227_19 +#-----| r0_37(glval>) = Convert : r0_36 # 2227| r2227_20(glval) = FunctionAddress[end] : -# 2227| r2227_21(iterator) = Call[end] : func:r2227_20, this:r0_39 -#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2227_6 -# 2227| m2227_22(iterator) = Store[(__end)] : &:r2227_17, r2227_21 -# 2227| m2227_23(unknown) = Chi : total:m2221_46, partial:m2227_22 +# 2227| r2227_21(iterator) = Call[end] : func:r2227_20, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? +# 2227| mu2227_22(iterator) = Store[(__end)] : &:r2227_17, r2227_21 #-----| Goto -> Block 16 # 2227| Block 16 -# 2227| m2227_24(iterator) = Phi : from 15:m2227_16, from 17:m2227_42 -# 2227| m2227_25(unknown) = Phi : from 15:~m2227_23, from 17:~m2227_34 -# 2227| r2227_26(glval>) = VariableAddress[(__begin)] : -#-----| r0_41(glval>) = Convert : r2227_26 -# 2227| r2227_27(glval) = FunctionAddress[operator!=] : -#-----| r0_42(glval>) = VariableAddress[#temp0:0] : -#-----| m0_43(iterator) = Uninitialized[#temp0:0] : &:r0_42 -#-----| m0_44(unknown) = Chi : total:m2227_25, partial:m0_43 -# 2227| r2227_28(glval) = FunctionAddress[iterator] : -# 2227| r2227_29(glval>) = VariableAddress[(__end)] : -#-----| r0_45(glval>) = Convert : r2227_29 -#-----| r0_46(iterator &) = CopyValue : r0_45 -# 2227| v2227_30(void) = Call[iterator] : func:r2227_28, this:r0_42, 0:r0_46 -# 2227| m2227_31(unknown) = ^CallSideEffect : ~m0_44 -# 2227| m2227_32(unknown) = Chi : total:m0_44, partial:m2227_31 -#-----| v0_47(void) = ^BufferReadSideEffect[0] : &:r0_46, ~m2227_32 -# 2227| m2227_33(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_42 -# 2227| m2227_34(unknown) = Chi : total:m2227_32, partial:m2227_33 -#-----| r0_48(iterator) = Load[#temp0:0] : &:r0_42, ~m2227_34 -# 2227| r2227_35(bool) = Call[operator!=] : func:r2227_27, this:r0_41, 0:r0_48 -#-----| v0_49(void) = ^IndirectReadSideEffect[-1] : &:r0_41, m2227_24 -# 2227| v2227_36(void) = ConditionalBranch : r2227_35 +# 2227| r2227_23(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2227_23 +# 2227| r2227_24(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2227| r2227_25(glval) = FunctionAddress[iterator] : +# 2227| r2227_26(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2227_26 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2227| v2227_27(void) = Call[iterator] : func:r2227_25, this:r0_40, 0:r0_43 +# 2227| mu2227_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? +# 2227| mu2227_29(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? +# 2227| r2227_30(bool) = Call[operator!=] : func:r2227_24, this:r0_39, 0:r0_45 +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 2227| v2227_31(void) = ConditionalBranch : r2227_30 #-----| False -> Block 20 #-----| True -> Block 18 # 2227| Block 17 -# 2227| r2227_37(glval>) = VariableAddress[(__begin)] : -# 2227| r2227_38(glval) = FunctionAddress[operator++] : -# 2227| r2227_39(iterator &) = Call[operator++] : func:r2227_38, this:r2227_37 -# 2227| v2227_40(void) = ^IndirectReadSideEffect[-1] : &:r2227_37, m2227_24 -# 2227| m2227_41(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2227_37 -# 2227| m2227_42(iterator) = Chi : total:m2227_24, partial:m2227_41 -# 2227| r2227_43(glval>) = CopyValue : r2227_39 +# 2227| r2227_32(glval>) = VariableAddress[(__begin)] : +# 2227| r2227_33(glval) = FunctionAddress[operator++] : +# 2227| r2227_34(iterator &) = Call[operator++] : func:r2227_33, this:r2227_32 +# 2227| v2227_35(void) = ^IndirectReadSideEffect[-1] : &:r2227_32, ~m? +# 2227| mu2227_36(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2227_32 +# 2227| r2227_37(glval>) = CopyValue : r2227_34 #-----| Goto (back edge) -> Block 16 # 2227| Block 18 -# 2227| r2227_44(glval) = VariableAddress[y] : -# 2227| r2227_45(glval>) = VariableAddress[(__begin)] : -#-----| r0_50(glval>) = Convert : r2227_45 -# 2227| r2227_46(glval) = FunctionAddress[operator*] : -# 2227| r2227_47(int &) = Call[operator*] : func:r2227_46, this:r0_50 -#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2227_24 -# 2227| r2227_48(int) = Load[?] : &:r2227_47, ~m2227_34 -# 2227| m2227_49(int) = Store[y] : &:r2227_44, r2227_48 +# 2227| r2227_38(glval) = VariableAddress[y] : +# 2227| r2227_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2227_39 +# 2227| r2227_40(glval) = FunctionAddress[operator*] : +# 2227| r2227_41(int &) = Call[operator*] : func:r2227_40, this:r0_47 +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? +# 2227| r2227_42(int) = Load[?] : &:r2227_41, ~m? +# 2227| m2227_43(int) = Store[y] : &:r2227_38, r2227_42 # 2228| r2228_1(glval) = VariableAddress[y] : -# 2228| r2228_2(int) = Load[y] : &:r2228_1, m2227_49 +# 2228| r2228_2(int) = Load[y] : &:r2228_1, m2227_43 # 2228| r2228_3(int) = Constant[1] : # 2228| r2228_4(bool) = CompareEQ : r2228_2, r2228_3 # 2228| v2228_5(void) = ConditionalBranch : r2228_4 @@ -16855,190 +15376,164 @@ ir.cpp: # 2229| Block 19 # 2229| v2229_1(void) = NoOp : -# 2227| r2227_50(glval>) = VariableAddress[ys] : -# 2227| r2227_51(glval) = FunctionAddress[~vector] : -# 2227| v2227_52(void) = Call[~vector] : func:r2227_51, this:r2227_50 -# 2227| v2227_53(void) = ^IndirectReadSideEffect[-1] : &:r2227_50, m2227_6 -# 2227| m2227_54(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2227_50 -# 2236| r2236_9(glval) = VariableAddress[x] : -# 2236| r2236_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2236| v2236_11(void) = Call[~ClassWithDestructor] : func:r2236_10, this:r2236_9 -# 2236| m2236_12(unknown) = ^CallSideEffect : ~m2227_34 -# 2236| m2236_13(unknown) = Chi : total:m2227_34, partial:m2236_12 -# 2236| v2236_14(void) = ^IndirectReadSideEffect[-1] : &:r2236_9, m2217_8 -# 2236| m2236_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_9 -# 2236| m2236_16(ClassWithDestructor) = Chi : total:m2217_8, partial:m2236_15 +# 2227| r2227_44(glval>) = VariableAddress[ys] : +# 2227| r2227_45(glval) = FunctionAddress[~vector] : +# 2227| v2227_46(void) = Call[~vector] : func:r2227_45, this:r2227_44 +# 2227| v2227_47(void) = ^IndirectReadSideEffect[-1] : &:r2227_44, ~m? +# 2227| mu2227_48(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2227_44 +# 2236| r2236_7(glval) = VariableAddress[x] : +# 2236| r2236_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2236| v2236_9(void) = Call[~ClassWithDestructor] : func:r2236_8, this:r2236_7 +# 2236| mu2236_10(unknown) = ^CallSideEffect : ~m? +# 2236| v2236_11(void) = ^IndirectReadSideEffect[-1] : &:r2236_7, ~m? +# 2236| mu2236_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_7 #-----| Goto -> Block 1 # 2227| Block 20 -# 2227| r2227_55(glval>) = VariableAddress[ys] : -# 2227| r2227_56(glval) = FunctionAddress[~vector] : -# 2227| v2227_57(void) = Call[~vector] : func:r2227_56, this:r2227_55 -# 2227| v2227_58(void) = ^IndirectReadSideEffect[-1] : &:r2227_55, m2227_6 -# 2227| m2227_59(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2227_55 +# 2227| r2227_49(glval>) = VariableAddress[ys] : +# 2227| r2227_50(glval) = FunctionAddress[~vector] : +# 2227| v2227_51(void) = Call[~vector] : func:r2227_50, this:r2227_49 +# 2227| v2227_52(void) = ^IndirectReadSideEffect[-1] : &:r2227_49, ~m? +# 2227| mu2227_53(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2227_49 # 2232| r2232_1(glval>) = VariableAddress[ys] : -# 2232| m2232_2(vector) = Uninitialized[ys] : &:r2232_1 +# 2232| mu2232_2(vector) = Uninitialized[ys] : &:r2232_1 # 2232| r2232_3(glval) = FunctionAddress[vector] : # 2232| r2232_4(glval) = VariableAddress[#temp2232:45] : # 2232| r2232_5(glval) = VariableAddress[x] : -# 2232| r2232_6(ClassWithDestructor) = Load[x] : &:r2232_5, m2217_8 -# 2232| m2232_7(ClassWithDestructor) = Store[#temp2232:45] : &:r2232_4, r2232_6 -# 2232| r2232_8(ClassWithDestructor) = Load[#temp2232:45] : &:r2232_4, m2232_7 +# 2232| r2232_6(ClassWithDestructor) = Load[x] : &:r2232_5, ~m? +# 2232| mu2232_7(ClassWithDestructor) = Store[#temp2232:45] : &:r2232_4, r2232_6 +# 2232| r2232_8(ClassWithDestructor) = Load[#temp2232:45] : &:r2232_4, ~m? # 2232| v2232_9(void) = Call[vector] : func:r2232_3, this:r2232_1, 0:r2232_8 -# 2232| m2232_10(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2232_1 +# 2232| mu2232_10(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2232_1 # 2232| r2232_11(glval) = CopyValue : r2232_4 # 2232| r2232_12(glval) = FunctionAddress[~ClassWithDestructor] : # 2232| v2232_13(void) = Call[~ClassWithDestructor] : func:r2232_12, this:r2232_11 -# 2232| m2232_14(unknown) = ^CallSideEffect : ~m2227_34 -# 2232| m2232_15(unknown) = Chi : total:m2227_34, partial:m2232_14 -# 2232| v2232_16(void) = ^IndirectReadSideEffect[-1] : &:r2232_11, m2232_7 -# 2232| m2232_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_11 -# 2232| m2232_18(ClassWithDestructor) = Chi : total:m2232_7, partial:m2232_17 -# 2232| r2232_19(glval &>) = VariableAddress[(__range)] : -# 2232| r2232_20(glval>) = VariableAddress[ys] : -# 2232| r2232_21(vector &) = CopyValue : r2232_20 -# 2232| m2232_22(vector &) = Store[(__range)] : &:r2232_19, r2232_21 -# 2232| r2232_23(glval>) = VariableAddress[(__begin)] : -# 2232| r2232_24(glval &>) = VariableAddress[(__range)] : -# 2232| r2232_25(vector &) = Load[(__range)] : &:r2232_24, m2232_22 -#-----| r0_52(glval>) = CopyValue : r2232_25 +# 2232| mu2232_14(unknown) = ^CallSideEffect : ~m? +# 2232| v2232_15(void) = ^IndirectReadSideEffect[-1] : &:r2232_11, ~m? +# 2232| mu2232_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_11 +# 2232| r2232_17(glval &>) = VariableAddress[(__range)] : +# 2232| r2232_18(glval>) = VariableAddress[ys] : +# 2232| r2232_19(vector &) = CopyValue : r2232_18 +# 2232| m2232_20(vector &) = Store[(__range)] : &:r2232_17, r2232_19 +# 2232| r2232_21(glval>) = VariableAddress[(__begin)] : +# 2232| r2232_22(glval &>) = VariableAddress[(__range)] : +# 2232| r2232_23(vector &) = Load[(__range)] : &:r2232_22, m2232_20 +#-----| r0_49(glval>) = CopyValue : r2232_23 +#-----| r0_50(glval>) = Convert : r0_49 +# 2232| r2232_24(glval) = FunctionAddress[begin] : +# 2232| r2232_25(iterator) = Call[begin] : func:r2232_24, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? +# 2232| mu2232_26(iterator) = Store[(__begin)] : &:r2232_21, r2232_25 +# 2232| r2232_27(glval>) = VariableAddress[(__end)] : +# 2232| r2232_28(glval &>) = VariableAddress[(__range)] : +# 2232| r2232_29(vector &) = Load[(__range)] : &:r2232_28, m2232_20 +#-----| r0_52(glval>) = CopyValue : r2232_29 #-----| r0_53(glval>) = Convert : r0_52 -# 2232| r2232_26(glval) = FunctionAddress[begin] : -# 2232| r2232_27(iterator) = Call[begin] : func:r2232_26, this:r0_53 -#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2232_10 -# 2232| m2232_28(iterator) = Store[(__begin)] : &:r2232_23, r2232_27 -# 2232| r2232_29(glval>) = VariableAddress[(__end)] : -# 2232| r2232_30(glval &>) = VariableAddress[(__range)] : -# 2232| r2232_31(vector &) = Load[(__range)] : &:r2232_30, m2232_22 -#-----| r0_55(glval>) = CopyValue : r2232_31 -#-----| r0_56(glval>) = Convert : r0_55 -# 2232| r2232_32(glval) = FunctionAddress[end] : -# 2232| r2232_33(iterator) = Call[end] : func:r2232_32, this:r0_56 -#-----| v0_57(void) = ^IndirectReadSideEffect[-1] : &:r0_56, m2232_10 -# 2232| m2232_34(iterator) = Store[(__end)] : &:r2232_29, r2232_33 -# 2232| m2232_35(unknown) = Chi : total:m2232_15, partial:m2232_34 +# 2232| r2232_30(glval) = FunctionAddress[end] : +# 2232| r2232_31(iterator) = Call[end] : func:r2232_30, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? +# 2232| mu2232_32(iterator) = Store[(__end)] : &:r2232_27, r2232_31 #-----| Goto -> Block 21 # 2232| Block 21 -# 2232| m2232_36(iterator) = Phi : from 20:m2232_28, from 22:m2232_60 -# 2232| m2232_37(unknown) = Phi : from 20:~m2232_35, from 22:~m2232_65 -# 2232| r2232_38(glval>) = VariableAddress[(__begin)] : -#-----| r0_58(glval>) = Convert : r2232_38 -# 2232| r2232_39(glval) = FunctionAddress[operator!=] : -#-----| r0_59(glval>) = VariableAddress[#temp0:0] : -#-----| m0_60(iterator) = Uninitialized[#temp0:0] : &:r0_59 -#-----| m0_61(unknown) = Chi : total:m2232_37, partial:m0_60 -# 2232| r2232_40(glval) = FunctionAddress[iterator] : -# 2232| r2232_41(glval>) = VariableAddress[(__end)] : -#-----| r0_62(glval>) = Convert : r2232_41 -#-----| r0_63(iterator &) = CopyValue : r0_62 -# 2232| v2232_42(void) = Call[iterator] : func:r2232_40, this:r0_59, 0:r0_63 -# 2232| m2232_43(unknown) = ^CallSideEffect : ~m0_61 -# 2232| m2232_44(unknown) = Chi : total:m0_61, partial:m2232_43 -#-----| v0_64(void) = ^BufferReadSideEffect[0] : &:r0_63, ~m2232_44 -# 2232| m2232_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_59 -# 2232| m2232_46(unknown) = Chi : total:m2232_44, partial:m2232_45 -#-----| r0_65(iterator) = Load[#temp0:0] : &:r0_59, ~m2232_46 -# 2232| r2232_47(bool) = Call[operator!=] : func:r2232_39, this:r0_58, 0:r0_65 -#-----| v0_66(void) = ^IndirectReadSideEffect[-1] : &:r0_58, m2232_36 -# 2232| v2232_48(void) = ConditionalBranch : r2232_47 +# 2232| r2232_33(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2232_33 +# 2232| r2232_34(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2232| r2232_35(glval) = FunctionAddress[iterator] : +# 2232| r2232_36(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2232_36 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2232| v2232_37(void) = Call[iterator] : func:r2232_35, this:r0_56, 0:r0_59 +# 2232| mu2232_38(unknown) = ^CallSideEffect : ~m? +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? +# 2232| mu2232_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? +# 2232| r2232_40(bool) = Call[operator!=] : func:r2232_34, this:r0_55, 0:r0_61 +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? +# 2232| v2232_41(void) = ConditionalBranch : r2232_40 #-----| False -> Block 23 #-----| True -> Block 22 # 2232| Block 22 -# 2232| r2232_49(glval) = VariableAddress[y] : -# 2232| r2232_50(glval>) = VariableAddress[(__begin)] : -#-----| r0_67(glval>) = Convert : r2232_50 -# 2232| r2232_51(glval) = FunctionAddress[operator*] : -# 2232| r2232_52(ClassWithDestructor &) = Call[operator*] : func:r2232_51, this:r0_67 -#-----| v0_68(void) = ^IndirectReadSideEffect[-1] : &:r0_67, m2232_36 -# 2232| r2232_53(ClassWithDestructor) = Load[?] : &:r2232_52, ~m2232_46 -# 2232| m2232_54(ClassWithDestructor) = Store[y] : &:r2232_49, r2232_53 +# 2232| r2232_42(glval) = VariableAddress[y] : +# 2232| r2232_43(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2232_43 +# 2232| r2232_44(glval) = FunctionAddress[operator*] : +# 2232| r2232_45(ClassWithDestructor &) = Call[operator*] : func:r2232_44, this:r0_63 +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +# 2232| r2232_46(ClassWithDestructor) = Load[?] : &:r2232_45, ~m? +# 2232| mu2232_47(ClassWithDestructor) = Store[y] : &:r2232_42, r2232_46 # 2233| r2233_1(glval) = VariableAddress[z1] : -# 2233| m2233_2(ClassWithDestructor) = Uninitialized[z1] : &:r2233_1 +# 2233| mu2233_2(ClassWithDestructor) = Uninitialized[z1] : &:r2233_1 # 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : # 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 -# 2233| m2233_5(unknown) = ^CallSideEffect : ~m2232_46 -# 2233| m2233_6(unknown) = Chi : total:m2232_46, partial:m2233_5 -# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2233_2, partial:m2233_7 +# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? +# 2233| mu2233_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 # 2234| r2234_1(glval) = VariableAddress[z2] : -# 2234| m2234_2(ClassWithDestructor) = Uninitialized[z2] : &:r2234_1 +# 2234| mu2234_2(ClassWithDestructor) = Uninitialized[z2] : &:r2234_1 # 2234| r2234_3(glval) = FunctionAddress[ClassWithDestructor] : # 2234| v2234_4(void) = Call[ClassWithDestructor] : func:r2234_3, this:r2234_1 -# 2234| m2234_5(unknown) = ^CallSideEffect : ~m2233_6 -# 2234| m2234_6(unknown) = Chi : total:m2233_6, partial:m2234_5 -# 2234| m2234_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_1 -# 2234| m2234_8(ClassWithDestructor) = Chi : total:m2234_2, partial:m2234_7 +# 2234| mu2234_5(unknown) = ^CallSideEffect : ~m? +# 2234| mu2234_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_1 # 2235| r2235_1(glval) = VariableAddress[z2] : # 2235| r2235_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2235| v2235_3(void) = Call[~ClassWithDestructor] : func:r2235_2, this:r2235_1 -# 2235| m2235_4(unknown) = ^CallSideEffect : ~m2234_6 -# 2235| m2235_5(unknown) = Chi : total:m2234_6, partial:m2235_4 -# 2235| v2235_6(void) = ^IndirectReadSideEffect[-1] : &:r2235_1, m2234_8 -# 2235| m2235_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_1 -# 2235| m2235_8(ClassWithDestructor) = Chi : total:m2234_8, partial:m2235_7 -# 2235| r2235_9(glval) = VariableAddress[z1] : -# 2235| r2235_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_11(void) = Call[~ClassWithDestructor] : func:r2235_10, this:r2235_9 -# 2235| m2235_12(unknown) = ^CallSideEffect : ~m2235_5 -# 2235| m2235_13(unknown) = Chi : total:m2235_5, partial:m2235_12 -# 2235| v2235_14(void) = ^IndirectReadSideEffect[-1] : &:r2235_9, m2233_8 -# 2235| m2235_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_9 -# 2235| m2235_16(ClassWithDestructor) = Chi : total:m2233_8, partial:m2235_15 -# 2232| r2232_55(glval>) = VariableAddress[(__begin)] : -# 2232| r2232_56(glval) = FunctionAddress[operator++] : -# 2232| r2232_57(iterator &) = Call[operator++] : func:r2232_56, this:r2232_55 -# 2232| v2232_58(void) = ^IndirectReadSideEffect[-1] : &:r2232_55, m2232_36 -# 2232| m2232_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2232_55 -# 2232| m2232_60(iterator) = Chi : total:m2232_36, partial:m2232_59 -# 2232| r2232_61(glval) = VariableAddress[y] : -# 2232| r2232_62(glval) = FunctionAddress[~ClassWithDestructor] : -# 2232| v2232_63(void) = Call[~ClassWithDestructor] : func:r2232_62, this:r2232_61 -# 2232| m2232_64(unknown) = ^CallSideEffect : ~m2235_13 -# 2232| m2232_65(unknown) = Chi : total:m2235_13, partial:m2232_64 -# 2232| v2232_66(void) = ^IndirectReadSideEffect[-1] : &:r2232_61, m2232_54 -# 2232| m2232_67(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_61 -# 2232| m2232_68(ClassWithDestructor) = Chi : total:m2232_54, partial:m2232_67 -# 2232| r2232_69(glval>) = CopyValue : r2232_57 +# 2235| mu2235_4(unknown) = ^CallSideEffect : ~m? +# 2235| v2235_5(void) = ^IndirectReadSideEffect[-1] : &:r2235_1, ~m? +# 2235| mu2235_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_1 +# 2235| r2235_7(glval) = VariableAddress[z1] : +# 2235| r2235_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2235| v2235_9(void) = Call[~ClassWithDestructor] : func:r2235_8, this:r2235_7 +# 2235| mu2235_10(unknown) = ^CallSideEffect : ~m? +# 2235| v2235_11(void) = ^IndirectReadSideEffect[-1] : &:r2235_7, ~m? +# 2235| mu2235_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_7 +# 2232| r2232_48(glval>) = VariableAddress[(__begin)] : +# 2232| r2232_49(glval) = FunctionAddress[operator++] : +# 2232| r2232_50(iterator &) = Call[operator++] : func:r2232_49, this:r2232_48 +# 2232| v2232_51(void) = ^IndirectReadSideEffect[-1] : &:r2232_48, ~m? +# 2232| mu2232_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2232_48 +# 2232| r2232_53(glval) = VariableAddress[y] : +# 2232| r2232_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_55(void) = Call[~ClassWithDestructor] : func:r2232_54, this:r2232_53 +# 2232| mu2232_56(unknown) = ^CallSideEffect : ~m? +# 2232| v2232_57(void) = ^IndirectReadSideEffect[-1] : &:r2232_53, ~m? +# 2232| mu2232_58(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_53 +# 2232| r2232_59(glval>) = CopyValue : r2232_50 #-----| Goto (back edge) -> Block 21 # 2232| Block 23 -# 2232| r2232_70(glval>) = VariableAddress[ys] : -# 2232| r2232_71(glval) = FunctionAddress[~vector] : -# 2232| v2232_72(void) = Call[~vector] : func:r2232_71, this:r2232_70 -# 2232| v2232_73(void) = ^IndirectReadSideEffect[-1] : &:r2232_70, m2232_10 -# 2232| m2232_74(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2232_70 -# 2236| v2236_17(void) = NoOp : -# 2236| r2236_18(glval) = VariableAddress[x] : -# 2236| r2236_19(glval) = FunctionAddress[~ClassWithDestructor] : -# 2236| v2236_20(void) = Call[~ClassWithDestructor] : func:r2236_19, this:r2236_18 -# 2236| m2236_21(unknown) = ^CallSideEffect : ~m2232_46 -# 2236| m2236_22(unknown) = Chi : total:m2232_46, partial:m2236_21 -# 2236| v2236_23(void) = ^IndirectReadSideEffect[-1] : &:r2236_18, m2217_8 -# 2236| m2236_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_18 -# 2236| m2236_25(ClassWithDestructor) = Chi : total:m2217_8, partial:m2236_24 +# 2232| r2232_60(glval>) = VariableAddress[ys] : +# 2232| r2232_61(glval) = FunctionAddress[~vector] : +# 2232| v2232_62(void) = Call[~vector] : func:r2232_61, this:r2232_60 +# 2232| v2232_63(void) = ^IndirectReadSideEffect[-1] : &:r2232_60, ~m? +# 2232| mu2232_64(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2232_60 +# 2236| v2236_13(void) = NoOp : +# 2236| r2236_14(glval) = VariableAddress[x] : +# 2236| r2236_15(glval) = FunctionAddress[~ClassWithDestructor] : +# 2236| v2236_16(void) = Call[~ClassWithDestructor] : func:r2236_15, this:r2236_14 +# 2236| mu2236_17(unknown) = ^CallSideEffect : ~m? +# 2236| v2236_18(void) = ^IndirectReadSideEffect[-1] : &:r2236_14, ~m? +# 2236| mu2236_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_14 #-----| Goto -> Block 1 # 2201| Block 24 -# 2201| v2201_13(void) = Unreached : +# 2201| v2201_11(void) = Unreached : # 2238| void static_variable_with_destructor_1() # 2238| Block 0 # 2238| v2238_1(void) = EnterFunction : -# 2238| m2238_2(unknown) = AliasedDefinition : -# 2238| m2238_3(unknown) = InitializeNonLocal : -# 2238| m2238_4(unknown) = Chi : total:m2238_2, partial:m2238_3 +# 2238| mu2238_2(unknown) = AliasedDefinition : +# 2238| mu2238_3(unknown) = InitializeNonLocal : # 2239| r2239_1(glval) = VariableAddress[a] : -# 2239| m2239_2(ClassWithDestructor) = Uninitialized[a] : &:r2239_1 +# 2239| mu2239_2(ClassWithDestructor) = Uninitialized[a] : &:r2239_1 # 2239| r2239_3(glval) = FunctionAddress[ClassWithDestructor] : # 2239| v2239_4(void) = Call[ClassWithDestructor] : func:r2239_3, this:r2239_1 -# 2239| m2239_5(unknown) = ^CallSideEffect : ~m2238_4 -# 2239| m2239_6(unknown) = Chi : total:m2238_4, partial:m2239_5 -# 2239| m2239_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2239_1 -# 2239| m2239_8(ClassWithDestructor) = Chi : total:m2239_2, partial:m2239_7 +# 2239| mu2239_5(unknown) = ^CallSideEffect : ~m? +# 2239| mu2239_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2239_1 # 2240| r2240_1(glval) = VariableAddress[b#init] : -# 2240| r2240_2(bool) = Load[b#init] : &:r2240_1, ~m2239_6 +# 2240| r2240_2(bool) = Load[b#init] : &:r2240_1, ~m? # 2240| v2240_3(void) = ConditionalBranch : r2240_2 #-----| False -> Block 1 #-----| True -> Block 2 @@ -17047,38 +15542,31 @@ ir.cpp: # 2240| r2240_4(glval) = VariableAddress[b] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : #-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2240_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2239_6 -#-----| m0_4(unknown) = Chi : total:m2239_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2240_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2240_4 # 2240| r2240_5(bool) = Constant[1] : -# 2240| m2240_6(bool) = Store[b#init] : &:r2240_1, r2240_5 -# 2240| m2240_7(unknown) = Chi : total:m0_6, partial:m2240_6 +# 2240| mu2240_6(bool) = Store[b#init] : &:r2240_1, r2240_5 #-----| Goto -> Block 2 # 2241| Block 2 -# 2241| m2241_1(unknown) = Phi : from 0:~m2239_6, from 1:~m2240_7 -# 2241| v2241_2(void) = NoOp : -# 2241| r2241_3(glval) = VariableAddress[a] : -# 2241| r2241_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2241| v2241_5(void) = Call[~ClassWithDestructor] : func:r2241_4, this:r2241_3 -# 2241| m2241_6(unknown) = ^CallSideEffect : ~m2241_1 -# 2241| m2241_7(unknown) = Chi : total:m2241_1, partial:m2241_6 -# 2241| v2241_8(void) = ^IndirectReadSideEffect[-1] : &:r2241_3, m2239_8 -# 2241| m2241_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2241_3 -# 2241| m2241_10(ClassWithDestructor) = Chi : total:m2239_8, partial:m2241_9 -# 2238| v2238_5(void) = ReturnVoid : -# 2238| v2238_6(void) = AliasedUse : ~m2241_7 -# 2238| v2238_7(void) = ExitFunction : +# 2241| v2241_1(void) = NoOp : +# 2241| r2241_2(glval) = VariableAddress[a] : +# 2241| r2241_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2241| v2241_4(void) = Call[~ClassWithDestructor] : func:r2241_3, this:r2241_2 +# 2241| mu2241_5(unknown) = ^CallSideEffect : ~m? +# 2241| v2241_6(void) = ^IndirectReadSideEffect[-1] : &:r2241_2, ~m? +# 2241| mu2241_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2241_2 +# 2238| v2238_4(void) = ReturnVoid : +# 2238| v2238_5(void) = AliasedUse : ~m? +# 2238| v2238_6(void) = ExitFunction : # 2243| void static_variable_with_destructor_2() # 2243| Block 0 # 2243| v2243_1(void) = EnterFunction : -# 2243| m2243_2(unknown) = AliasedDefinition : -# 2243| m2243_3(unknown) = InitializeNonLocal : -# 2243| m2243_4(unknown) = Chi : total:m2243_2, partial:m2243_3 +# 2243| mu2243_2(unknown) = AliasedDefinition : +# 2243| mu2243_3(unknown) = InitializeNonLocal : # 2244| r2244_1(glval) = VariableAddress[a#init] : -# 2244| r2244_2(bool) = Load[a#init] : &:r2244_1, ~m2243_3 +# 2244| r2244_2(bool) = Load[a#init] : &:r2244_1, ~m? # 2244| v2244_3(void) = ConditionalBranch : r2244_2 #-----| False -> Block 1 #-----| True -> Block 2 @@ -17087,62 +15575,49 @@ ir.cpp: # 2244| r2244_4(glval) = VariableAddress[a] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : #-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2244_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2243_4 -#-----| m0_4(unknown) = Chi : total:m2243_4, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2244_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2244_4 # 2244| r2244_5(bool) = Constant[1] : -# 2244| m2244_6(bool) = Store[a#init] : &:r2244_1, r2244_5 -# 2244| m2244_7(unknown) = Chi : total:m0_6, partial:m2244_6 +# 2244| mu2244_6(bool) = Store[a#init] : &:r2244_1, r2244_5 #-----| Goto -> Block 2 # 2245| Block 2 -# 2245| m2245_1(unknown) = Phi : from 0:~m2243_4, from 1:~m2244_7 -# 2245| r2245_2(glval) = VariableAddress[b] : -# 2245| m2245_3(ClassWithDestructor) = Uninitialized[b] : &:r2245_2 -# 2245| r2245_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2245| v2245_5(void) = Call[ClassWithDestructor] : func:r2245_4, this:r2245_2 -# 2245| m2245_6(unknown) = ^CallSideEffect : ~m2245_1 -# 2245| m2245_7(unknown) = Chi : total:m2245_1, partial:m2245_6 -# 2245| m2245_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_2 -# 2245| m2245_9(ClassWithDestructor) = Chi : total:m2245_3, partial:m2245_8 +# 2245| r2245_1(glval) = VariableAddress[b] : +# 2245| mu2245_2(ClassWithDestructor) = Uninitialized[b] : &:r2245_1 +# 2245| r2245_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2245| v2245_4(void) = Call[ClassWithDestructor] : func:r2245_3, this:r2245_1 +# 2245| mu2245_5(unknown) = ^CallSideEffect : ~m? +# 2245| mu2245_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_1 # 2246| v2246_1(void) = NoOp : # 2246| r2246_2(glval) = VariableAddress[b] : # 2246| r2246_3(glval) = FunctionAddress[~ClassWithDestructor] : # 2246| v2246_4(void) = Call[~ClassWithDestructor] : func:r2246_3, this:r2246_2 -# 2246| m2246_5(unknown) = ^CallSideEffect : ~m2245_7 -# 2246| m2246_6(unknown) = Chi : total:m2245_7, partial:m2246_5 -# 2246| v2246_7(void) = ^IndirectReadSideEffect[-1] : &:r2246_2, m2245_9 -# 2246| m2246_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 -# 2246| m2246_9(ClassWithDestructor) = Chi : total:m2245_9, partial:m2246_8 -# 2243| v2243_5(void) = ReturnVoid : -# 2243| v2243_6(void) = AliasedUse : ~m2246_6 -# 2243| v2243_7(void) = ExitFunction : +# 2246| mu2246_5(unknown) = ^CallSideEffect : ~m? +# 2246| v2246_6(void) = ^IndirectReadSideEffect[-1] : &:r2246_2, ~m? +# 2246| mu2246_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 +# 2243| v2243_4(void) = ReturnVoid : +# 2243| v2243_5(void) = AliasedUse : ~m? +# 2243| v2243_6(void) = ExitFunction : # 2248| void static_variable_with_destructor_3() # 2248| Block 0 # 2248| v2248_1(void) = EnterFunction : -# 2248| m2248_2(unknown) = AliasedDefinition : -# 2248| m2248_3(unknown) = InitializeNonLocal : -# 2248| m2248_4(unknown) = Chi : total:m2248_2, partial:m2248_3 +# 2248| mu2248_2(unknown) = AliasedDefinition : +# 2248| mu2248_3(unknown) = InitializeNonLocal : # 2249| r2249_1(glval) = VariableAddress[a] : -# 2249| m2249_2(ClassWithDestructor) = Uninitialized[a] : &:r2249_1 +# 2249| mu2249_2(ClassWithDestructor) = Uninitialized[a] : &:r2249_1 # 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : # 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 -# 2249| m2249_5(unknown) = ^CallSideEffect : ~m2248_4 -# 2249| m2249_6(unknown) = Chi : total:m2248_4, partial:m2249_5 -# 2249| m2249_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2249| m2249_8(ClassWithDestructor) = Chi : total:m2249_2, partial:m2249_7 +# 2249| mu2249_5(unknown) = ^CallSideEffect : ~m? +# 2249| mu2249_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 # 2250| r2250_1(glval) = VariableAddress[b] : -# 2250| m2250_2(ClassWithDestructor) = Uninitialized[b] : &:r2250_1 +# 2250| mu2250_2(ClassWithDestructor) = Uninitialized[b] : &:r2250_1 # 2250| r2250_3(glval) = FunctionAddress[ClassWithDestructor] : # 2250| v2250_4(void) = Call[ClassWithDestructor] : func:r2250_3, this:r2250_1 -# 2250| m2250_5(unknown) = ^CallSideEffect : ~m2249_6 -# 2250| m2250_6(unknown) = Chi : total:m2249_6, partial:m2250_5 -# 2250| m2250_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2250_1 -# 2250| m2250_8(ClassWithDestructor) = Chi : total:m2250_2, partial:m2250_7 +# 2250| mu2250_5(unknown) = ^CallSideEffect : ~m? +# 2250| mu2250_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2250_1 # 2251| r2251_1(glval) = VariableAddress[c#init] : -# 2251| r2251_2(bool) = Load[c#init] : &:r2251_1, ~m2250_6 +# 2251| r2251_2(bool) = Load[c#init] : &:r2251_1, ~m? # 2251| v2251_3(void) = ConditionalBranch : r2251_2 #-----| False -> Block 1 #-----| True -> Block 2 @@ -17151,251 +15626,215 @@ ir.cpp: # 2251| r2251_4(glval) = VariableAddress[c] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : #-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2251_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2250_6 -#-----| m0_4(unknown) = Chi : total:m2250_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_4 # 2251| r2251_5(bool) = Constant[1] : -# 2251| m2251_6(bool) = Store[c#init] : &:r2251_1, r2251_5 -# 2251| m2251_7(unknown) = Chi : total:m0_6, partial:m2251_6 +# 2251| mu2251_6(bool) = Store[c#init] : &:r2251_1, r2251_5 #-----| Goto -> Block 2 # 2252| Block 2 -# 2252| m2252_1(unknown) = Phi : from 0:~m2250_6, from 1:~m2251_7 -# 2252| v2252_2(void) = NoOp : -# 2252| r2252_3(glval) = VariableAddress[b] : -# 2252| r2252_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2252| v2252_5(void) = Call[~ClassWithDestructor] : func:r2252_4, this:r2252_3 -# 2252| m2252_6(unknown) = ^CallSideEffect : ~m2252_1 -# 2252| m2252_7(unknown) = Chi : total:m2252_1, partial:m2252_6 -# 2252| v2252_8(void) = ^IndirectReadSideEffect[-1] : &:r2252_3, m2250_8 -# 2252| m2252_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2252_3 -# 2252| m2252_10(ClassWithDestructor) = Chi : total:m2250_8, partial:m2252_9 -# 2252| r2252_11(glval) = VariableAddress[a] : -# 2252| r2252_12(glval) = FunctionAddress[~ClassWithDestructor] : -# 2252| v2252_13(void) = Call[~ClassWithDestructor] : func:r2252_12, this:r2252_11 -# 2252| m2252_14(unknown) = ^CallSideEffect : ~m2252_7 -# 2252| m2252_15(unknown) = Chi : total:m2252_7, partial:m2252_14 -# 2252| v2252_16(void) = ^IndirectReadSideEffect[-1] : &:r2252_11, m2249_8 -# 2252| m2252_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2252_11 -# 2252| m2252_18(ClassWithDestructor) = Chi : total:m2249_8, partial:m2252_17 -# 2248| v2248_5(void) = ReturnVoid : -# 2248| v2248_6(void) = AliasedUse : ~m2252_15 -# 2248| v2248_7(void) = ExitFunction : +# 2252| v2252_1(void) = NoOp : +# 2252| r2252_2(glval) = VariableAddress[b] : +# 2252| r2252_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2252| v2252_4(void) = Call[~ClassWithDestructor] : func:r2252_3, this:r2252_2 +# 2252| mu2252_5(unknown) = ^CallSideEffect : ~m? +# 2252| v2252_6(void) = ^IndirectReadSideEffect[-1] : &:r2252_2, ~m? +# 2252| mu2252_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2252_2 +# 2252| r2252_8(glval) = VariableAddress[a] : +# 2252| r2252_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2252| v2252_10(void) = Call[~ClassWithDestructor] : func:r2252_9, this:r2252_8 +# 2252| mu2252_11(unknown) = ^CallSideEffect : ~m? +# 2252| v2252_12(void) = ^IndirectReadSideEffect[-1] : &:r2252_8, ~m? +# 2252| mu2252_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2252_8 +# 2248| v2248_4(void) = ReturnVoid : +# 2248| v2248_5(void) = AliasedUse : ~m? +# 2248| v2248_6(void) = ExitFunction : # 2254| ClassWithDestructor global_class_with_destructor # 2254| Block 0 # 2254| v2254_1(void) = EnterFunction : -# 2254| m2254_2(unknown) = AliasedDefinition : +# 2254| mu2254_2(unknown) = AliasedDefinition : # 2254| r2254_3(glval) = VariableAddress[global_class_with_destructor] : # 2254| r2254_4(glval) = FunctionAddress[ClassWithDestructor] : # 2254| v2254_5(void) = Call[ClassWithDestructor] : func:r2254_4, this:r2254_3 -# 2254| m2254_6(unknown) = ^CallSideEffect : ~m2254_2 -# 2254| m2254_7(unknown) = Chi : total:m2254_2, partial:m2254_6 -# 2254| m2254_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2254_3 -# 2254| m2254_9(unknown) = Chi : total:m2254_7, partial:m2254_8 -# 2254| v2254_10(void) = ReturnVoid : -# 2254| v2254_11(void) = AliasedUse : ~m2254_9 -# 2254| v2254_12(void) = ExitFunction : +# 2254| mu2254_6(unknown) = ^CallSideEffect : ~m? +# 2254| mu2254_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2254_3 +# 2254| v2254_8(void) = ReturnVoid : +# 2254| v2254_9(void) = AliasedUse : ~m? +# 2254| v2254_10(void) = ExitFunction : # 2258| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) # 2258| Block 0 # 2258| v2258_1(void) = EnterFunction : -# 2258| m2258_2(unknown) = AliasedDefinition : -# 2258| m2258_3(unknown) = InitializeNonLocal : -# 2258| m2258_4(unknown) = Chi : total:m2258_2, partial:m2258_3 -# 2258| r2258_5(glval) = VariableAddress[t] : -# 2258| m2258_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2258_5 -# 2258| r2258_7(ClassWithDestructor &) = Load[t] : &:r2258_5, m2258_6 -# 2258| m2258_8(unknown) = InitializeIndirection[t] : &:r2258_7 -# 2258| r2258_9(glval) = VariableAddress[#return] : -# 2258| r2258_10(glval) = VariableAddress[t] : -# 2258| r2258_11(ClassWithDestructor &) = Load[t] : &:r2258_10, m2258_6 -# 2258| r2258_12(glval) = CopyValue : r2258_11 -# 2258| r2258_13(ClassWithDestructor &) = CopyValue : r2258_12 -# 2258| m2258_14(ClassWithDestructor &) = Store[#return] : &:r2258_9, r2258_13 -# 2258| v2258_15(void) = ReturnIndirection[t] : &:r2258_7, m2258_8 -# 2258| r2258_16(glval) = VariableAddress[#return] : -# 2258| v2258_17(void) = ReturnValue : &:r2258_16, m2258_14 -# 2258| v2258_18(void) = AliasedUse : m2258_3 -# 2258| v2258_19(void) = ExitFunction : +# 2258| mu2258_2(unknown) = AliasedDefinition : +# 2258| mu2258_3(unknown) = InitializeNonLocal : +# 2258| r2258_4(glval) = VariableAddress[t] : +# 2258| m2258_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2258_4 +# 2258| r2258_6(ClassWithDestructor &) = Load[t] : &:r2258_4, m2258_5 +# 2258| mu2258_7(unknown) = InitializeIndirection[t] : &:r2258_6 +# 2258| r2258_8(glval) = VariableAddress[#return] : +# 2258| r2258_9(glval) = VariableAddress[t] : +# 2258| r2258_10(ClassWithDestructor &) = Load[t] : &:r2258_9, m2258_5 +# 2258| r2258_11(glval) = CopyValue : r2258_10 +# 2258| r2258_12(ClassWithDestructor &) = CopyValue : r2258_11 +# 2258| m2258_13(ClassWithDestructor &) = Store[#return] : &:r2258_8, r2258_12 +# 2258| v2258_14(void) = ReturnIndirection[t] : &:r2258_6, ~m? +# 2258| r2258_15(glval) = VariableAddress[#return] : +# 2258| v2258_16(void) = ReturnValue : &:r2258_15, m2258_13 +# 2258| v2258_17(void) = AliasedUse : ~m? +# 2258| v2258_18(void) = ExitFunction : # 2258| int& vacuous_destructor_call::get(int&) # 2258| Block 0 # 2258| v2258_1(void) = EnterFunction : -# 2258| m2258_2(unknown) = AliasedDefinition : -# 2258| m2258_3(unknown) = InitializeNonLocal : -# 2258| m2258_4(unknown) = Chi : total:m2258_2, partial:m2258_3 -# 2258| r2258_5(glval) = VariableAddress[t] : -# 2258| m2258_6(int &) = InitializeParameter[t] : &:r2258_5 -# 2258| r2258_7(int &) = Load[t] : &:r2258_5, m2258_6 -# 2258| m2258_8(unknown) = InitializeIndirection[t] : &:r2258_7 -# 2258| r2258_9(glval) = VariableAddress[#return] : -# 2258| r2258_10(glval) = VariableAddress[t] : -# 2258| r2258_11(int &) = Load[t] : &:r2258_10, m2258_6 -# 2258| r2258_12(glval) = CopyValue : r2258_11 -# 2258| r2258_13(int &) = CopyValue : r2258_12 -# 2258| m2258_14(int &) = Store[#return] : &:r2258_9, r2258_13 -# 2258| v2258_15(void) = ReturnIndirection[t] : &:r2258_7, m2258_8 -# 2258| r2258_16(glval) = VariableAddress[#return] : -# 2258| v2258_17(void) = ReturnValue : &:r2258_16, m2258_14 -# 2258| v2258_18(void) = AliasedUse : m2258_3 -# 2258| v2258_19(void) = ExitFunction : +# 2258| mu2258_2(unknown) = AliasedDefinition : +# 2258| mu2258_3(unknown) = InitializeNonLocal : +# 2258| r2258_4(glval) = VariableAddress[t] : +# 2258| m2258_5(int &) = InitializeParameter[t] : &:r2258_4 +# 2258| r2258_6(int &) = Load[t] : &:r2258_4, m2258_5 +# 2258| mu2258_7(unknown) = InitializeIndirection[t] : &:r2258_6 +# 2258| r2258_8(glval) = VariableAddress[#return] : +# 2258| r2258_9(glval) = VariableAddress[t] : +# 2258| r2258_10(int &) = Load[t] : &:r2258_9, m2258_5 +# 2258| r2258_11(glval) = CopyValue : r2258_10 +# 2258| r2258_12(int &) = CopyValue : r2258_11 +# 2258| m2258_13(int &) = Store[#return] : &:r2258_8, r2258_12 +# 2258| v2258_14(void) = ReturnIndirection[t] : &:r2258_6, ~m? +# 2258| r2258_15(glval) = VariableAddress[#return] : +# 2258| v2258_16(void) = ReturnValue : &:r2258_15, m2258_13 +# 2258| v2258_17(void) = AliasedUse : ~m? +# 2258| v2258_18(void) = ExitFunction : # 2261| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) # 2261| Block 0 # 2261| v2261_1(void) = EnterFunction : -# 2261| m2261_2(unknown) = AliasedDefinition : -# 2261| m2261_3(unknown) = InitializeNonLocal : -# 2261| m2261_4(unknown) = Chi : total:m2261_2, partial:m2261_3 -# 2261| r2261_5(glval) = VariableAddress[t] : -# 2261| m2261_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2261_5 -# 2261| r2261_7(ClassWithDestructor &) = Load[t] : &:r2261_5, m2261_6 -# 2261| m2261_8(unknown) = InitializeIndirection[t] : &:r2261_7 +# 2261| mu2261_2(unknown) = AliasedDefinition : +# 2261| mu2261_3(unknown) = InitializeNonLocal : +# 2261| r2261_4(glval) = VariableAddress[t] : +# 2261| m2261_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2261_4 +# 2261| r2261_6(ClassWithDestructor &) = Load[t] : &:r2261_4, m2261_5 +# 2261| mu2261_7(unknown) = InitializeIndirection[t] : &:r2261_6 # 2262| r2262_1(glval) = FunctionAddress[get] : # 2262| r2262_2(glval) = VariableAddress[t] : -# 2262| r2262_3(ClassWithDestructor &) = Load[t] : &:r2262_2, m2261_6 +# 2262| r2262_3(ClassWithDestructor &) = Load[t] : &:r2262_2, m2261_5 # 2262| r2262_4(glval) = CopyValue : r2262_3 # 2262| r2262_5(ClassWithDestructor &) = CopyValue : r2262_4 # 2262| r2262_6(ClassWithDestructor &) = Call[get] : func:r2262_1, 0:r2262_5 -# 2262| m2262_7(unknown) = ^CallSideEffect : ~m2261_4 -# 2262| m2262_8(unknown) = Chi : total:m2261_4, partial:m2262_7 -# 2262| v2262_9(void) = ^BufferReadSideEffect[0] : &:r2262_5, ~m2261_8 -# 2262| m2262_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2262_5 -# 2262| m2262_11(unknown) = Chi : total:m2261_8, partial:m2262_10 -# 2262| r2262_12(glval) = CopyValue : r2262_6 -# 2262| r2262_13(glval) = FunctionAddress[~ClassWithDestructor] : -# 2262| v2262_14(void) = Call[~ClassWithDestructor] : func:r2262_13 -# 2262| m2262_15(unknown) = ^CallSideEffect : ~m2262_8 -# 2262| m2262_16(unknown) = Chi : total:m2262_8, partial:m2262_15 -# 2262| v2262_17(void) = ^IndirectReadSideEffect[-1] : &:r2262_12, ~m2262_11 -# 2262| m2262_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2262_12 -# 2262| m2262_19(unknown) = Chi : total:m2262_11, partial:m2262_18 +# 2262| mu2262_7(unknown) = ^CallSideEffect : ~m? +# 2262| v2262_8(void) = ^BufferReadSideEffect[0] : &:r2262_5, ~m? +# 2262| mu2262_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2262_5 +# 2262| r2262_10(glval) = CopyValue : r2262_6 +# 2262| r2262_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2262| v2262_12(void) = Call[~ClassWithDestructor] : func:r2262_11 +# 2262| mu2262_13(unknown) = ^CallSideEffect : ~m? +# 2262| v2262_14(void) = ^IndirectReadSideEffect[-1] : &:r2262_10, ~m? +# 2262| mu2262_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2262_10 # 2263| v2263_1(void) = NoOp : -# 2261| v2261_9(void) = ReturnIndirection[t] : &:r2261_7, m2262_19 -# 2261| v2261_10(void) = ReturnVoid : -# 2261| v2261_11(void) = AliasedUse : ~m2262_16 -# 2261| v2261_12(void) = ExitFunction : +# 2261| v2261_8(void) = ReturnIndirection[t] : &:r2261_6, ~m? +# 2261| v2261_9(void) = ReturnVoid : +# 2261| v2261_10(void) = AliasedUse : ~m? +# 2261| v2261_11(void) = ExitFunction : # 2261| void vacuous_destructor_call::call_destructor(int&) # 2261| Block 0 # 2261| v2261_1(void) = EnterFunction : -# 2261| m2261_2(unknown) = AliasedDefinition : -# 2261| m2261_3(unknown) = InitializeNonLocal : -# 2261| m2261_4(unknown) = Chi : total:m2261_2, partial:m2261_3 -# 2261| r2261_5(glval) = VariableAddress[t] : -# 2261| m2261_6(int &) = InitializeParameter[t] : &:r2261_5 -# 2261| r2261_7(int &) = Load[t] : &:r2261_5, m2261_6 -# 2261| m2261_8(unknown) = InitializeIndirection[t] : &:r2261_7 +# 2261| mu2261_2(unknown) = AliasedDefinition : +# 2261| mu2261_3(unknown) = InitializeNonLocal : +# 2261| r2261_4(glval) = VariableAddress[t] : +# 2261| m2261_5(int &) = InitializeParameter[t] : &:r2261_4 +# 2261| r2261_6(int &) = Load[t] : &:r2261_4, m2261_5 +# 2261| mu2261_7(unknown) = InitializeIndirection[t] : &:r2261_6 # 2262| r2262_1(glval) = FunctionAddress[get] : # 2262| r2262_2(glval) = VariableAddress[t] : -# 2262| r2262_3(int &) = Load[t] : &:r2262_2, m2261_6 +# 2262| r2262_3(int &) = Load[t] : &:r2262_2, m2261_5 # 2262| r2262_4(glval) = CopyValue : r2262_3 # 2262| r2262_5(int &) = CopyValue : r2262_4 # 2262| r2262_6(int &) = Call[get] : func:r2262_1, 0:r2262_5 -# 2262| m2262_7(unknown) = ^CallSideEffect : ~m2261_4 -# 2262| m2262_8(unknown) = Chi : total:m2261_4, partial:m2262_7 -# 2262| v2262_9(void) = ^BufferReadSideEffect[0] : &:r2262_5, ~m2261_8 -# 2262| m2262_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2262_5 -# 2262| m2262_11(unknown) = Chi : total:m2261_8, partial:m2262_10 -# 2262| r2262_12(glval) = CopyValue : r2262_6 +# 2262| mu2262_7(unknown) = ^CallSideEffect : ~m? +# 2262| v2262_8(void) = ^BufferReadSideEffect[0] : &:r2262_5, ~m? +# 2262| mu2262_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2262_5 +# 2262| r2262_10(glval) = CopyValue : r2262_6 # 2263| v2263_1(void) = NoOp : -# 2261| v2261_9(void) = ReturnIndirection[t] : &:r2261_7, m2262_11 -# 2261| v2261_10(void) = ReturnVoid : -# 2261| v2261_11(void) = AliasedUse : ~m2262_8 -# 2261| v2261_12(void) = ExitFunction : +# 2261| v2261_8(void) = ReturnIndirection[t] : &:r2261_6, ~m? +# 2261| v2261_9(void) = ReturnVoid : +# 2261| v2261_10(void) = AliasedUse : ~m? +# 2261| v2261_11(void) = ExitFunction : # 2265| void vacuous_destructor_call::non_vacuous_destructor_call() # 2265| Block 0 # 2265| v2265_1(void) = EnterFunction : -# 2265| m2265_2(unknown) = AliasedDefinition : -# 2265| m2265_3(unknown) = InitializeNonLocal : -# 2265| m2265_4(unknown) = Chi : total:m2265_2, partial:m2265_3 +# 2265| mu2265_2(unknown) = AliasedDefinition : +# 2265| mu2265_3(unknown) = InitializeNonLocal : # 2266| r2266_1(glval) = VariableAddress[c] : -# 2266| m2266_2(ClassWithDestructor) = Uninitialized[c] : &:r2266_1 +# 2266| mu2266_2(ClassWithDestructor) = Uninitialized[c] : &:r2266_1 # 2266| r2266_3(glval) = FunctionAddress[ClassWithDestructor] : # 2266| v2266_4(void) = Call[ClassWithDestructor] : func:r2266_3, this:r2266_1 -# 2266| m2266_5(unknown) = ^CallSideEffect : ~m2265_4 -# 2266| m2266_6(unknown) = Chi : total:m2265_4, partial:m2266_5 -# 2266| m2266_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2266| m2266_8(ClassWithDestructor) = Chi : total:m2266_2, partial:m2266_7 +# 2266| mu2266_5(unknown) = ^CallSideEffect : ~m? +# 2266| mu2266_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 # 2267| r2267_1(glval) = FunctionAddress[call_destructor] : # 2267| r2267_2(glval) = VariableAddress[c] : # 2267| r2267_3(ClassWithDestructor &) = CopyValue : r2267_2 # 2267| v2267_4(void) = Call[call_destructor] : func:r2267_1, 0:r2267_3 -# 2267| m2267_5(unknown) = ^CallSideEffect : ~m2266_6 -# 2267| m2267_6(unknown) = Chi : total:m2266_6, partial:m2267_5 -# 2267| v2267_7(void) = ^BufferReadSideEffect[0] : &:r2267_3, ~m2266_8 -# 2267| m2267_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2267_3 -# 2267| m2267_9(ClassWithDestructor) = Chi : total:m2266_8, partial:m2267_8 +# 2267| mu2267_5(unknown) = ^CallSideEffect : ~m? +# 2267| v2267_6(void) = ^BufferReadSideEffect[0] : &:r2267_3, ~m? +# 2267| mu2267_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2267_3 # 2268| v2268_1(void) = NoOp : # 2268| r2268_2(glval) = VariableAddress[c] : # 2268| r2268_3(glval) = FunctionAddress[~ClassWithDestructor] : # 2268| v2268_4(void) = Call[~ClassWithDestructor] : func:r2268_3, this:r2268_2 -# 2268| m2268_5(unknown) = ^CallSideEffect : ~m2267_6 -# 2268| m2268_6(unknown) = Chi : total:m2267_6, partial:m2268_5 -# 2268| v2268_7(void) = ^IndirectReadSideEffect[-1] : &:r2268_2, m2267_9 -# 2268| m2268_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2268_2 -# 2268| m2268_9(ClassWithDestructor) = Chi : total:m2267_9, partial:m2268_8 -# 2265| v2265_5(void) = ReturnVoid : -# 2265| v2265_6(void) = AliasedUse : ~m2268_6 -# 2265| v2265_7(void) = ExitFunction : +# 2268| mu2268_5(unknown) = ^CallSideEffect : ~m? +# 2268| v2268_6(void) = ^IndirectReadSideEffect[-1] : &:r2268_2, ~m? +# 2268| mu2268_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2268_2 +# 2265| v2265_4(void) = ReturnVoid : +# 2265| v2265_5(void) = AliasedUse : ~m? +# 2265| v2265_6(void) = ExitFunction : # 2270| void vacuous_destructor_call::vacuous_destructor_call() # 2270| Block 0 # 2270| v2270_1(void) = EnterFunction : -# 2270| m2270_2(unknown) = AliasedDefinition : -# 2270| m2270_3(unknown) = InitializeNonLocal : -# 2270| m2270_4(unknown) = Chi : total:m2270_2, partial:m2270_3 +# 2270| mu2270_2(unknown) = AliasedDefinition : +# 2270| mu2270_3(unknown) = InitializeNonLocal : # 2271| r2271_1(glval) = VariableAddress[i] : -# 2271| m2271_2(int) = Uninitialized[i] : &:r2271_1 +# 2271| mu2271_2(int) = Uninitialized[i] : &:r2271_1 # 2272| r2272_1(glval) = FunctionAddress[call_destructor] : # 2272| r2272_2(glval) = VariableAddress[i] : # 2272| r2272_3(int &) = CopyValue : r2272_2 # 2272| v2272_4(void) = Call[call_destructor] : func:r2272_1, 0:r2272_3 -# 2272| m2272_5(unknown) = ^CallSideEffect : ~m2270_4 -# 2272| m2272_6(unknown) = Chi : total:m2270_4, partial:m2272_5 -# 2272| v2272_7(void) = ^BufferReadSideEffect[0] : &:r2272_3, ~m2271_2 -# 2272| m2272_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2272_3 -# 2272| m2272_9(int) = Chi : total:m2271_2, partial:m2272_8 +# 2272| mu2272_5(unknown) = ^CallSideEffect : ~m? +# 2272| v2272_6(void) = ^BufferReadSideEffect[0] : &:r2272_3, ~m? +# 2272| mu2272_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2272_3 # 2273| v2273_1(void) = NoOp : -# 2270| v2270_5(void) = ReturnVoid : -# 2270| v2270_6(void) = AliasedUse : ~m2272_6 -# 2270| v2270_7(void) = ExitFunction : +# 2270| v2270_4(void) = ReturnVoid : +# 2270| v2270_5(void) = AliasedUse : ~m? +# 2270| v2270_6(void) = ExitFunction : # 2276| void TryCatchDestructors(bool) # 2276| Block 0 # 2276| v2276_1(void) = EnterFunction : -# 2276| m2276_2(unknown) = AliasedDefinition : -# 2276| m2276_3(unknown) = InitializeNonLocal : -# 2276| m2276_4(unknown) = Chi : total:m2276_2, partial:m2276_3 -# 2276| r2276_5(glval) = VariableAddress[b] : -# 2276| m2276_6(bool) = InitializeParameter[b] : &:r2276_5 +# 2276| mu2276_2(unknown) = AliasedDefinition : +# 2276| mu2276_3(unknown) = InitializeNonLocal : +# 2276| r2276_4(glval) = VariableAddress[b] : +# 2276| m2276_5(bool) = InitializeParameter[b] : &:r2276_4 # 2278| r2278_1(glval) = VariableAddress[s] : -# 2278| m2278_2(String) = Uninitialized[s] : &:r2278_1 -# 2278| m2278_3(unknown) = Chi : total:m2276_4, partial:m2278_2 -# 2278| r2278_4(glval) = FunctionAddress[String] : -# 2278| v2278_5(void) = Call[String] : func:r2278_4, this:r2278_1 -# 2278| m2278_6(unknown) = ^CallSideEffect : ~m2278_3 -# 2278| m2278_7(unknown) = Chi : total:m2278_3, partial:m2278_6 -# 2278| m2278_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 -# 2278| m2278_9(unknown) = Chi : total:m2278_7, partial:m2278_8 +# 2278| mu2278_2(String) = Uninitialized[s] : &:r2278_1 +# 2278| r2278_3(glval) = FunctionAddress[String] : +# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 +# 2278| mu2278_5(unknown) = ^CallSideEffect : ~m? +# 2278| mu2278_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 #-----| C++ Exception -> Block 7 #-----| Goto -> Block 3 # 2276| Block 1 -# 2276| m2276_7(unknown) = Phi : from 2:~m2276_10, from 12:~m2292_1 -# 2276| v2276_8(void) = AliasedUse : ~m2276_7 -# 2276| v2276_9(void) = ExitFunction : +# 2276| v2276_6(void) = AliasedUse : ~m? +# 2276| v2276_7(void) = ExitFunction : # 2276| Block 2 -# 2276| m2276_10(unknown) = Phi : from 8:~m2285_12, from 11:~m2284_1 -# 2276| v2276_11(void) = Unwind : +# 2276| v2276_8(void) = Unwind : #-----| Goto -> Block 1 # 2279| Block 3 # 2279| r2279_1(glval) = VariableAddress[b] : -# 2279| r2279_2(bool) = Load[b] : &:r2279_1, m2276_6 +# 2279| r2279_2(bool) = Load[b] : &:r2279_1, m2276_5 # 2279| v2279_3(void) = ConditionalBranch : r2279_2 #-----| False -> Block 5 #-----| True -> Block 4 @@ -17409,70 +15848,56 @@ ir.cpp: # 2283| r2283_1(glval) = VariableAddress[s] : # 2283| r2283_2(glval) = FunctionAddress[~String] : # 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 -# 2283| m2283_4(unknown) = ^CallSideEffect : ~m2278_9 -# 2283| m2283_5(unknown) = Chi : total:m2278_9, partial:m2283_4 -# 2283| v2283_6(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, ~m2283_5 -# 2283| m2283_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 -# 2283| m2283_8(unknown) = Chi : total:m2283_5, partial:m2283_7 +# 2283| mu2283_4(unknown) = ^CallSideEffect : ~m? +# 2283| v2283_5(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, ~m? +# 2283| mu2283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 #-----| C++ Exception -> Block 7 # 2282| Block 5 # 2282| r2282_1(glval) = VariableAddress[s2] : -# 2282| m2282_2(String) = Uninitialized[s2] : &:r2282_1 -# 2282| m2282_3(unknown) = Chi : total:m2278_9, partial:m2282_2 -# 2282| r2282_4(glval) = FunctionAddress[String] : -# 2282| v2282_5(void) = Call[String] : func:r2282_4, this:r2282_1 -# 2282| m2282_6(unknown) = ^CallSideEffect : ~m2282_3 -# 2282| m2282_7(unknown) = Chi : total:m2282_3, partial:m2282_6 -# 2282| m2282_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2282| m2282_9(unknown) = Chi : total:m2282_7, partial:m2282_8 +# 2282| mu2282_2(String) = Uninitialized[s2] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 +# 2282| mu2282_5(unknown) = ^CallSideEffect : ~m? +# 2282| mu2282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 #-----| C++ Exception -> Block 7 #-----| Goto -> Block 6 # 2283| Block 6 -# 2283| r2283_9(glval) = VariableAddress[s2] : -# 2283| r2283_10(glval) = FunctionAddress[~String] : -# 2283| v2283_11(void) = Call[~String] : func:r2283_10, this:r2283_9 -# 2283| m2283_12(unknown) = ^CallSideEffect : ~m2282_9 -# 2283| m2283_13(unknown) = Chi : total:m2282_9, partial:m2283_12 -# 2283| v2283_14(void) = ^IndirectReadSideEffect[-1] : &:r2283_9, ~m2283_13 -# 2283| m2283_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_9 -# 2283| m2283_16(unknown) = Chi : total:m2283_13, partial:m2283_15 -# 2283| r2283_17(glval) = VariableAddress[s] : -# 2283| r2283_18(glval) = FunctionAddress[~String] : -# 2283| v2283_19(void) = Call[~String] : func:r2283_18, this:r2283_17 -# 2283| m2283_20(unknown) = ^CallSideEffect : ~m2283_16 -# 2283| m2283_21(unknown) = Chi : total:m2283_16, partial:m2283_20 -# 2283| v2283_22(void) = ^IndirectReadSideEffect[-1] : &:r2283_17, ~m2283_21 -# 2283| m2283_23(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_17 -# 2283| m2283_24(unknown) = Chi : total:m2283_21, partial:m2283_23 +# 2283| r2283_7(glval) = VariableAddress[s2] : +# 2283| r2283_8(glval) = FunctionAddress[~String] : +# 2283| v2283_9(void) = Call[~String] : func:r2283_8, this:r2283_7 +# 2283| mu2283_10(unknown) = ^CallSideEffect : ~m? +# 2283| v2283_11(void) = ^IndirectReadSideEffect[-1] : &:r2283_7, ~m? +# 2283| mu2283_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_7 +# 2283| r2283_13(glval) = VariableAddress[s] : +# 2283| r2283_14(glval) = FunctionAddress[~String] : +# 2283| v2283_15(void) = Call[~String] : func:r2283_14, this:r2283_13 +# 2283| mu2283_16(unknown) = ^CallSideEffect : ~m? +# 2283| v2283_17(void) = ^IndirectReadSideEffect[-1] : &:r2283_13, ~m? +# 2283| mu2283_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_13 #-----| Goto -> Block 12 # 2284| Block 7 -# 2284| m2284_1(unknown) = Phi : from 0:~m2278_9, from 4:~m2283_8, from 5:~m2282_9 -# 2284| v2284_2(void) = CatchByType[const char *] : +# 2284| v2284_1(void) = CatchByType[const char *] : #-----| C++ Exception -> Block 9 #-----| Goto -> Block 8 # 2284| Block 8 -# 2284| r2284_3(glval) = VariableAddress[s] : -# 2284| m2284_4(char *) = InitializeParameter[s] : &:r2284_3 -# 2284| r2284_5(char *) = Load[s] : &:r2284_3, m2284_4 -# 2284| m2284_6(unknown) = InitializeIndirection[s] : &:r2284_5 -# 2284| m2284_7(unknown) = Chi : total:m2284_1, partial:m2284_6 +# 2284| r2284_2(glval) = VariableAddress[s] : +# 2284| m2284_3(char *) = InitializeParameter[s] : &:r2284_2 +# 2284| r2284_4(char *) = Load[s] : &:r2284_2, m2284_3 +# 2284| mu2284_5(unknown) = InitializeIndirection[s] : &:r2284_4 # 2285| r2285_1(glval) = VariableAddress[#throw2285:5] : -# 2285| m2285_2(String) = Uninitialized[#throw2285:5] : &:r2285_1 -# 2285| m2285_3(unknown) = Chi : total:m2284_7, partial:m2285_2 -# 2285| r2285_4(glval) = FunctionAddress[String] : -# 2285| r2285_5(glval) = VariableAddress[s] : -# 2285| r2285_6(char *) = Load[s] : &:r2285_5, m2284_4 -# 2285| v2285_7(void) = Call[String] : func:r2285_4, this:r2285_1, 0:r2285_6 -# 2285| m2285_8(unknown) = ^CallSideEffect : ~m2285_3 -# 2285| m2285_9(unknown) = Chi : total:m2285_3, partial:m2285_8 -# 2285| v2285_10(void) = ^BufferReadSideEffect[0] : &:r2285_6, ~m2285_9 -# 2285| m2285_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_1 -# 2285| m2285_12(unknown) = Chi : total:m2285_9, partial:m2285_11 -# 2285| v2285_13(void) = ThrowValue : &:r2285_1, ~m2285_12 +# 2285| mu2285_2(String) = Uninitialized[#throw2285:5] : &:r2285_1 +# 2285| r2285_3(glval) = FunctionAddress[String] : +# 2285| r2285_4(glval) = VariableAddress[s] : +# 2285| r2285_5(char *) = Load[s] : &:r2285_4, m2284_3 +# 2285| v2285_6(void) = Call[String] : func:r2285_3, this:r2285_1, 0:r2285_5 +# 2285| mu2285_7(unknown) = ^CallSideEffect : ~m? +# 2285| v2285_8(void) = ^BufferReadSideEffect[0] : &:r2285_5, ~m? +# 2285| mu2285_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_1 +# 2285| v2285_10(void) = ThrowValue : &:r2285_1, ~m? #-----| C++ Exception -> Block 2 # 2287| Block 9 @@ -17484,7 +15909,7 @@ ir.cpp: # 2287| r2287_2(glval) = VariableAddress[e] : # 2287| m2287_3(String &) = InitializeParameter[e] : &:r2287_2 # 2287| r2287_4(String &) = Load[e] : &:r2287_2, m2287_3 -# 2287| m2287_5(unknown) = InitializeIndirection[e] : &:r2287_4 +# 2287| mu2287_5(unknown) = InitializeIndirection[e] : &:r2287_4 # 2287| v2287_6(void) = NoOp : #-----| Goto -> Block 12 @@ -17494,350 +15919,284 @@ ir.cpp: #-----| C++ Exception -> Block 2 # 2292| Block 12 -# 2292| m2292_1(unknown) = Phi : from 6:~m2283_24, from 10:~m2284_1 -# 2292| v2292_2(void) = NoOp : -# 2276| v2276_12(void) = ReturnVoid : +# 2292| v2292_1(void) = NoOp : +# 2276| v2276_9(void) = ReturnVoid : #-----| Goto -> Block 1 # 2294| void IfDestructors(bool) # 2294| Block 0 # 2294| v2294_1(void) = EnterFunction : -# 2294| m2294_2(unknown) = AliasedDefinition : -# 2294| m2294_3(unknown) = InitializeNonLocal : -# 2294| m2294_4(unknown) = Chi : total:m2294_2, partial:m2294_3 -# 2294| r2294_5(glval) = VariableAddress[b] : -# 2294| m2294_6(bool) = InitializeParameter[b] : &:r2294_5 +# 2294| mu2294_2(unknown) = AliasedDefinition : +# 2294| mu2294_3(unknown) = InitializeNonLocal : +# 2294| r2294_4(glval) = VariableAddress[b] : +# 2294| m2294_5(bool) = InitializeParameter[b] : &:r2294_4 # 2295| r2295_1(glval) = VariableAddress[s1] : -# 2295| m2295_2(String) = Uninitialized[s1] : &:r2295_1 -# 2295| m2295_3(unknown) = Chi : total:m2294_4, partial:m2295_2 -# 2295| r2295_4(glval) = FunctionAddress[String] : -# 2295| v2295_5(void) = Call[String] : func:r2295_4, this:r2295_1 -# 2295| m2295_6(unknown) = ^CallSideEffect : ~m2295_3 -# 2295| m2295_7(unknown) = Chi : total:m2295_3, partial:m2295_6 -# 2295| m2295_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 -# 2295| m2295_9(unknown) = Chi : total:m2295_7, partial:m2295_8 +# 2295| mu2295_2(String) = Uninitialized[s1] : &:r2295_1 +# 2295| r2295_3(glval) = FunctionAddress[String] : +# 2295| v2295_4(void) = Call[String] : func:r2295_3, this:r2295_1 +# 2295| mu2295_5(unknown) = ^CallSideEffect : ~m? +# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 # 2296| r2296_1(glval) = VariableAddress[b] : -# 2296| r2296_2(bool) = Load[b] : &:r2296_1, m2294_6 +# 2296| r2296_2(bool) = Load[b] : &:r2296_1, m2294_5 # 2296| v2296_3(void) = ConditionalBranch : r2296_2 #-----| False -> Block 2 #-----| True -> Block 1 # 2297| Block 1 # 2297| r2297_1(glval) = VariableAddress[s2] : -# 2297| m2297_2(String) = Uninitialized[s2] : &:r2297_1 -# 2297| m2297_3(unknown) = Chi : total:m2295_9, partial:m2297_2 -# 2297| r2297_4(glval) = FunctionAddress[String] : -# 2297| v2297_5(void) = Call[String] : func:r2297_4, this:r2297_1 -# 2297| m2297_6(unknown) = ^CallSideEffect : ~m2297_3 -# 2297| m2297_7(unknown) = Chi : total:m2297_3, partial:m2297_6 -# 2297| m2297_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 -# 2297| m2297_9(unknown) = Chi : total:m2297_7, partial:m2297_8 +# 2297| mu2297_2(String) = Uninitialized[s2] : &:r2297_1 +# 2297| r2297_3(glval) = FunctionAddress[String] : +# 2297| v2297_4(void) = Call[String] : func:r2297_3, this:r2297_1 +# 2297| mu2297_5(unknown) = ^CallSideEffect : ~m? +# 2297| mu2297_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 # 2298| r2298_1(glval) = VariableAddress[s2] : # 2298| r2298_2(glval) = FunctionAddress[~String] : # 2298| v2298_3(void) = Call[~String] : func:r2298_2, this:r2298_1 -# 2298| m2298_4(unknown) = ^CallSideEffect : ~m2297_9 -# 2298| m2298_5(unknown) = Chi : total:m2297_9, partial:m2298_4 -# 2298| v2298_6(void) = ^IndirectReadSideEffect[-1] : &:r2298_1, ~m2298_5 -# 2298| m2298_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2298_1 -# 2298| m2298_8(unknown) = Chi : total:m2298_5, partial:m2298_7 +# 2298| mu2298_4(unknown) = ^CallSideEffect : ~m? +# 2298| v2298_5(void) = ^IndirectReadSideEffect[-1] : &:r2298_1, ~m? +# 2298| mu2298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2298_1 #-----| Goto -> Block 3 # 2299| Block 2 # 2299| r2299_1(glval) = VariableAddress[s3] : -# 2299| m2299_2(String) = Uninitialized[s3] : &:r2299_1 -# 2299| m2299_3(unknown) = Chi : total:m2295_9, partial:m2299_2 -# 2299| r2299_4(glval) = FunctionAddress[String] : -# 2299| v2299_5(void) = Call[String] : func:r2299_4, this:r2299_1 -# 2299| m2299_6(unknown) = ^CallSideEffect : ~m2299_3 -# 2299| m2299_7(unknown) = Chi : total:m2299_3, partial:m2299_6 -# 2299| m2299_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_1 -# 2299| m2299_9(unknown) = Chi : total:m2299_7, partial:m2299_8 +# 2299| mu2299_2(String) = Uninitialized[s3] : &:r2299_1 +# 2299| r2299_3(glval) = FunctionAddress[String] : +# 2299| v2299_4(void) = Call[String] : func:r2299_3, this:r2299_1 +# 2299| mu2299_5(unknown) = ^CallSideEffect : ~m? +# 2299| mu2299_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_1 # 2300| r2300_1(glval) = VariableAddress[s3] : # 2300| r2300_2(glval) = FunctionAddress[~String] : # 2300| v2300_3(void) = Call[~String] : func:r2300_2, this:r2300_1 -# 2300| m2300_4(unknown) = ^CallSideEffect : ~m2299_9 -# 2300| m2300_5(unknown) = Chi : total:m2299_9, partial:m2300_4 -# 2300| v2300_6(void) = ^IndirectReadSideEffect[-1] : &:r2300_1, ~m2300_5 -# 2300| m2300_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2300_1 -# 2300| m2300_8(unknown) = Chi : total:m2300_5, partial:m2300_7 +# 2300| mu2300_4(unknown) = ^CallSideEffect : ~m? +# 2300| v2300_5(void) = ^IndirectReadSideEffect[-1] : &:r2300_1, ~m? +# 2300| mu2300_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2300_1 #-----| Goto -> Block 3 # 2301| Block 3 -# 2301| m2301_1(unknown) = Phi : from 1:~m2298_8, from 2:~m2300_8 -# 2301| r2301_2(glval) = VariableAddress[s4] : -# 2301| m2301_3(String) = Uninitialized[s4] : &:r2301_2 -# 2301| m2301_4(unknown) = Chi : total:m2301_1, partial:m2301_3 -# 2301| r2301_5(glval) = FunctionAddress[String] : -# 2301| v2301_6(void) = Call[String] : func:r2301_5, this:r2301_2 -# 2301| m2301_7(unknown) = ^CallSideEffect : ~m2301_4 -# 2301| m2301_8(unknown) = Chi : total:m2301_4, partial:m2301_7 -# 2301| m2301_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2301_2 -# 2301| m2301_10(unknown) = Chi : total:m2301_8, partial:m2301_9 -# 2302| v2302_1(void) = NoOp : -# 2302| r2302_2(glval) = VariableAddress[s4] : -# 2302| r2302_3(glval) = FunctionAddress[~String] : -# 2302| v2302_4(void) = Call[~String] : func:r2302_3, this:r2302_2 -# 2302| m2302_5(unknown) = ^CallSideEffect : ~m2301_10 -# 2302| m2302_6(unknown) = Chi : total:m2301_10, partial:m2302_5 -# 2302| v2302_7(void) = ^IndirectReadSideEffect[-1] : &:r2302_2, ~m2302_6 -# 2302| m2302_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2302_2 -# 2302| m2302_9(unknown) = Chi : total:m2302_6, partial:m2302_8 -# 2302| r2302_10(glval) = VariableAddress[s1] : -# 2302| r2302_11(glval) = FunctionAddress[~String] : -# 2302| v2302_12(void) = Call[~String] : func:r2302_11, this:r2302_10 -# 2302| m2302_13(unknown) = ^CallSideEffect : ~m2302_9 -# 2302| m2302_14(unknown) = Chi : total:m2302_9, partial:m2302_13 -# 2302| v2302_15(void) = ^IndirectReadSideEffect[-1] : &:r2302_10, ~m2302_14 -# 2302| m2302_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2302_10 -# 2302| m2302_17(unknown) = Chi : total:m2302_14, partial:m2302_16 -# 2294| v2294_7(void) = ReturnVoid : -# 2294| v2294_8(void) = AliasedUse : ~m2302_14 -# 2294| v2294_9(void) = ExitFunction : +# 2301| r2301_1(glval) = VariableAddress[s4] : +# 2301| mu2301_2(String) = Uninitialized[s4] : &:r2301_1 +# 2301| r2301_3(glval) = FunctionAddress[String] : +# 2301| v2301_4(void) = Call[String] : func:r2301_3, this:r2301_1 +# 2301| mu2301_5(unknown) = ^CallSideEffect : ~m? +# 2301| mu2301_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2301_1 +# 2302| v2302_1(void) = NoOp : +# 2302| r2302_2(glval) = VariableAddress[s4] : +# 2302| r2302_3(glval) = FunctionAddress[~String] : +# 2302| v2302_4(void) = Call[~String] : func:r2302_3, this:r2302_2 +# 2302| mu2302_5(unknown) = ^CallSideEffect : ~m? +# 2302| v2302_6(void) = ^IndirectReadSideEffect[-1] : &:r2302_2, ~m? +# 2302| mu2302_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2302_2 +# 2302| r2302_8(glval) = VariableAddress[s1] : +# 2302| r2302_9(glval) = FunctionAddress[~String] : +# 2302| v2302_10(void) = Call[~String] : func:r2302_9, this:r2302_8 +# 2302| mu2302_11(unknown) = ^CallSideEffect : ~m? +# 2302| v2302_12(void) = ^IndirectReadSideEffect[-1] : &:r2302_8, ~m? +# 2302| mu2302_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2302_8 +# 2294| v2294_6(void) = ReturnVoid : +# 2294| v2294_7(void) = AliasedUse : ~m? +# 2294| v2294_8(void) = ExitFunction : # 2304| void ForDestructors() # 2304| Block 0 # 2304| v2304_1(void) = EnterFunction : -# 2304| m2304_2(unknown) = AliasedDefinition : -# 2304| m2304_3(unknown) = InitializeNonLocal : -# 2304| m2304_4(unknown) = Chi : total:m2304_2, partial:m2304_3 +# 2304| mu2304_2(unknown) = AliasedDefinition : +# 2304| mu2304_3(unknown) = InitializeNonLocal : # 2305| r2305_1(glval) = VariableAddress[c] : # 2305| r2305_2(char) = Constant[97] : # 2305| m2305_3(char) = Store[c] : &:r2305_1, r2305_2 # 2306| r2306_1(glval) = VariableAddress[s] : -# 2306| m2306_2(String) = Uninitialized[s] : &:r2306_1 -# 2306| m2306_3(unknown) = Chi : total:m2304_4, partial:m2306_2 -# 2306| r2306_4(glval) = FunctionAddress[String] : -# 2306| r2306_5(glval) = StringConstant["hello"] : -# 2306| r2306_6(char *) = Convert : r2306_5 -# 2306| v2306_7(void) = Call[String] : func:r2306_4, this:r2306_1, 0:r2306_6 -# 2306| m2306_8(unknown) = ^CallSideEffect : ~m2306_3 -# 2306| m2306_9(unknown) = Chi : total:m2306_3, partial:m2306_8 -# 2306| v2306_10(void) = ^BufferReadSideEffect[0] : &:r2306_6, ~m2304_3 -# 2306| m2306_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_1 -# 2306| m2306_12(unknown) = Chi : total:m2306_9, partial:m2306_11 +# 2306| mu2306_2(String) = Uninitialized[s] : &:r2306_1 +# 2306| r2306_3(glval) = FunctionAddress[String] : +# 2306| r2306_4(glval) = StringConstant["hello"] : +# 2306| r2306_5(char *) = Convert : r2306_4 +# 2306| v2306_6(void) = Call[String] : func:r2306_3, this:r2306_1, 0:r2306_5 +# 2306| mu2306_7(unknown) = ^CallSideEffect : ~m? +# 2306| v2306_8(void) = ^BufferReadSideEffect[0] : &:r2306_5, ~m? +# 2306| mu2306_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_1 #-----| Goto -> Block 1 # 2306| Block 1 -# 2306| m2306_13(unknown) = Phi : from 0:~m2306_12, from 2:~m2306_28 -# 2306| m2306_14(char) = Phi : from 0:m2305_3, from 2:m2306_30 -# 2306| r2306_15(glval) = VariableAddress[c] : -# 2306| r2306_16(char) = Load[c] : &:r2306_15, m2306_14 -# 2306| r2306_17(int) = Convert : r2306_16 -# 2306| r2306_18(int) = Constant[0] : -# 2306| r2306_19(bool) = CompareNE : r2306_17, r2306_18 -# 2306| v2306_20(void) = ConditionalBranch : r2306_19 +# 2306| m2306_10(char) = Phi : from 0:m2305_3, from 2:m2306_24 +# 2306| r2306_11(glval) = VariableAddress[c] : +# 2306| r2306_12(char) = Load[c] : &:r2306_11, m2306_10 +# 2306| r2306_13(int) = Convert : r2306_12 +# 2306| r2306_14(int) = Constant[0] : +# 2306| r2306_15(bool) = CompareNE : r2306_13, r2306_14 +# 2306| v2306_16(void) = ConditionalBranch : r2306_15 #-----| False -> Block 3 #-----| True -> Block 2 # 2307| Block 2 # 2307| r2307_1(glval) = VariableAddress[s2] : -# 2307| m2307_2(String) = Uninitialized[s2] : &:r2307_1 -# 2307| m2307_3(unknown) = Chi : total:m2306_13, partial:m2307_2 -# 2307| r2307_4(glval) = FunctionAddress[String] : -# 2307| v2307_5(void) = Call[String] : func:r2307_4, this:r2307_1 -# 2307| m2307_6(unknown) = ^CallSideEffect : ~m2307_3 -# 2307| m2307_7(unknown) = Chi : total:m2307_3, partial:m2307_6 -# 2307| m2307_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2307| m2307_9(unknown) = Chi : total:m2307_7, partial:m2307_8 +# 2307| mu2307_2(String) = Uninitialized[s2] : &:r2307_1 +# 2307| r2307_3(glval) = FunctionAddress[String] : +# 2307| v2307_4(void) = Call[String] : func:r2307_3, this:r2307_1 +# 2307| mu2307_5(unknown) = ^CallSideEffect : ~m? +# 2307| mu2307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 # 2308| r2308_1(glval) = VariableAddress[s2] : # 2308| r2308_2(glval) = FunctionAddress[~String] : # 2308| v2308_3(void) = Call[~String] : func:r2308_2, this:r2308_1 -# 2308| m2308_4(unknown) = ^CallSideEffect : ~m2307_9 -# 2308| m2308_5(unknown) = Chi : total:m2307_9, partial:m2308_4 -# 2308| v2308_6(void) = ^IndirectReadSideEffect[-1] : &:r2308_1, ~m2308_5 -# 2308| m2308_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 -# 2308| m2308_8(unknown) = Chi : total:m2308_5, partial:m2308_7 -# 2306| r2306_21(glval) = VariableAddress[s] : -# 2306| r2306_22(glval) = FunctionAddress[pop_back] : -# 2306| r2306_23(char) = Call[pop_back] : func:r2306_22, this:r2306_21 -# 2306| m2306_24(unknown) = ^CallSideEffect : ~m2308_8 -# 2306| m2306_25(unknown) = Chi : total:m2308_8, partial:m2306_24 -# 2306| v2306_26(void) = ^IndirectReadSideEffect[-1] : &:r2306_21, ~m2306_25 -# 2306| m2306_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_21 -# 2306| m2306_28(unknown) = Chi : total:m2306_25, partial:m2306_27 -# 2306| r2306_29(glval) = VariableAddress[c] : -# 2306| m2306_30(char) = Store[c] : &:r2306_29, r2306_23 +# 2308| mu2308_4(unknown) = ^CallSideEffect : ~m? +# 2308| v2308_5(void) = ^IndirectReadSideEffect[-1] : &:r2308_1, ~m? +# 2308| mu2308_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 +# 2306| r2306_17(glval) = VariableAddress[s] : +# 2306| r2306_18(glval) = FunctionAddress[pop_back] : +# 2306| r2306_19(char) = Call[pop_back] : func:r2306_18, this:r2306_17 +# 2306| mu2306_20(unknown) = ^CallSideEffect : ~m? +# 2306| v2306_21(void) = ^IndirectReadSideEffect[-1] : &:r2306_17, ~m? +# 2306| mu2306_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_17 +# 2306| r2306_23(glval) = VariableAddress[c] : +# 2306| m2306_24(char) = Store[c] : &:r2306_23, r2306_19 #-----| Goto (back edge) -> Block 1 # 2306| Block 3 -# 2306| r2306_31(glval) = VariableAddress[s] : -# 2306| r2306_32(glval) = FunctionAddress[~String] : -# 2306| v2306_33(void) = Call[~String] : func:r2306_32, this:r2306_31 -# 2306| m2306_34(unknown) = ^CallSideEffect : ~m2306_13 -# 2306| m2306_35(unknown) = Chi : total:m2306_13, partial:m2306_34 -# 2306| v2306_36(void) = ^IndirectReadSideEffect[-1] : &:r2306_31, ~m2306_35 -# 2306| m2306_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_31 -# 2306| m2306_38(unknown) = Chi : total:m2306_35, partial:m2306_37 +# 2306| r2306_25(glval) = VariableAddress[s] : +# 2306| r2306_26(glval) = FunctionAddress[~String] : +# 2306| v2306_27(void) = Call[~String] : func:r2306_26, this:r2306_25 +# 2306| mu2306_28(unknown) = ^CallSideEffect : ~m? +# 2306| v2306_29(void) = ^IndirectReadSideEffect[-1] : &:r2306_25, ~m? +# 2306| mu2306_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_25 # 2310| r2310_1(glval &&>) = VariableAddress[(__range)] : # 2310| r2310_2(glval>) = VariableAddress[#temp2310:20] : -# 2310| m2310_3(vector) = Uninitialized[#temp2310:20] : &:r2310_2 +# 2310| mu2310_3(vector) = Uninitialized[#temp2310:20] : &:r2310_2 # 2310| r2310_4(glval) = FunctionAddress[vector] : # 2310| r2310_5(glval) = VariableAddress[#temp2310:40] : -# 2310| m2310_6(String) = Uninitialized[#temp2310:40] : &:r2310_5 -# 2310| m2310_7(unknown) = Chi : total:m2306_38, partial:m2310_6 -# 2310| r2310_8(glval) = FunctionAddress[String] : -# 2310| r2310_9(glval) = StringConstant["hello"] : -# 2310| r2310_10(char *) = Convert : r2310_9 -# 2310| v2310_11(void) = Call[String] : func:r2310_8, this:r2310_5, 0:r2310_10 -# 2310| m2310_12(unknown) = ^CallSideEffect : ~m2310_7 -# 2310| m2310_13(unknown) = Chi : total:m2310_7, partial:m2310_12 -# 2310| v2310_14(void) = ^BufferReadSideEffect[0] : &:r2310_10, ~m2304_3 -# 2310| m2310_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_5 -# 2310| m2310_16(unknown) = Chi : total:m2310_13, partial:m2310_15 -# 2310| r2310_17(String) = Load[#temp2310:40] : &:r2310_5, ~m2310_16 -# 2310| v2310_18(void) = Call[vector] : func:r2310_4, this:r2310_2, 0:r2310_17 -# 2310| m2310_19(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2310_2 -# 2310| r2310_20(glval) = CopyValue : r2310_5 -# 2310| r2310_21(glval) = FunctionAddress[~String] : -# 2310| v2310_22(void) = Call[~String] : func:r2310_21, this:r2310_20 -# 2310| m2310_23(unknown) = ^CallSideEffect : ~m2310_16 -# 2310| m2310_24(unknown) = Chi : total:m2310_16, partial:m2310_23 -# 2310| v2310_25(void) = ^IndirectReadSideEffect[-1] : &:r2310_20, ~m2310_24 -# 2310| m2310_26(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_20 -# 2310| m2310_27(unknown) = Chi : total:m2310_24, partial:m2310_26 -# 2310| r2310_28(vector &) = CopyValue : r2310_2 -# 2310| m2310_29(vector &&) = Store[(__range)] : &:r2310_1, r2310_28 -# 2310| r2310_30(glval>) = VariableAddress[(__begin)] : -# 2310| r2310_31(glval &&>) = VariableAddress[(__range)] : -# 2310| r2310_32(vector &&) = Load[(__range)] : &:r2310_31, m2310_29 -#-----| r0_1(glval>) = CopyValue : r2310_32 +# 2310| mu2310_6(String) = Uninitialized[#temp2310:40] : &:r2310_5 +# 2310| r2310_7(glval) = FunctionAddress[String] : +# 2310| r2310_8(glval) = StringConstant["hello"] : +# 2310| r2310_9(char *) = Convert : r2310_8 +# 2310| v2310_10(void) = Call[String] : func:r2310_7, this:r2310_5, 0:r2310_9 +# 2310| mu2310_11(unknown) = ^CallSideEffect : ~m? +# 2310| v2310_12(void) = ^BufferReadSideEffect[0] : &:r2310_9, ~m? +# 2310| mu2310_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_5 +# 2310| r2310_14(String) = Load[#temp2310:40] : &:r2310_5, ~m? +# 2310| v2310_15(void) = Call[vector] : func:r2310_4, this:r2310_2, 0:r2310_14 +# 2310| mu2310_16(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2310_2 +# 2310| r2310_17(glval) = CopyValue : r2310_5 +# 2310| r2310_18(glval) = FunctionAddress[~String] : +# 2310| v2310_19(void) = Call[~String] : func:r2310_18, this:r2310_17 +# 2310| mu2310_20(unknown) = ^CallSideEffect : ~m? +# 2310| v2310_21(void) = ^IndirectReadSideEffect[-1] : &:r2310_17, ~m? +# 2310| mu2310_22(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_17 +# 2310| r2310_23(vector &) = CopyValue : r2310_2 +# 2310| m2310_24(vector &&) = Store[(__range)] : &:r2310_1, r2310_23 +# 2310| r2310_25(glval>) = VariableAddress[(__begin)] : +# 2310| r2310_26(glval &&>) = VariableAddress[(__range)] : +# 2310| r2310_27(vector &&) = Load[(__range)] : &:r2310_26, m2310_24 +#-----| r0_1(glval>) = CopyValue : r2310_27 #-----| r0_2(glval>) = Convert : r0_1 -# 2310| r2310_33(glval) = FunctionAddress[begin] : -# 2310| r2310_34(iterator) = Call[begin] : func:r2310_33, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2310_19 -# 2310| m2310_35(iterator) = Store[(__begin)] : &:r2310_30, r2310_34 -# 2310| r2310_36(glval>) = VariableAddress[(__end)] : -# 2310| r2310_37(glval &&>) = VariableAddress[(__range)] : -# 2310| r2310_38(vector &&) = Load[(__range)] : &:r2310_37, m2310_29 -#-----| r0_4(glval>) = CopyValue : r2310_38 +# 2310| r2310_28(glval) = FunctionAddress[begin] : +# 2310| r2310_29(iterator) = Call[begin] : func:r2310_28, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2310| mu2310_30(iterator) = Store[(__begin)] : &:r2310_25, r2310_29 +# 2310| r2310_31(glval>) = VariableAddress[(__end)] : +# 2310| r2310_32(glval &&>) = VariableAddress[(__range)] : +# 2310| r2310_33(vector &&) = Load[(__range)] : &:r2310_32, m2310_24 +#-----| r0_4(glval>) = CopyValue : r2310_33 #-----| r0_5(glval>) = Convert : r0_4 -# 2310| r2310_39(glval) = FunctionAddress[end] : -# 2310| r2310_40(iterator) = Call[end] : func:r2310_39, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2310_19 -# 2310| m2310_41(iterator) = Store[(__end)] : &:r2310_36, r2310_40 -# 2310| m2310_42(unknown) = Chi : total:m2310_27, partial:m2310_41 +# 2310| r2310_34(glval) = FunctionAddress[end] : +# 2310| r2310_35(iterator) = Call[end] : func:r2310_34, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2310| mu2310_36(iterator) = Store[(__end)] : &:r2310_31, r2310_35 #-----| Goto -> Block 4 # 2310| Block 4 -# 2310| m2310_43(iterator) = Phi : from 3:m2310_35, from 5:m2310_77 -# 2310| m2310_44(unknown) = Phi : from 3:~m2310_42, from 5:~m2310_85 -# 2310| r2310_45(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2310_45 -# 2310| r2310_46(glval) = FunctionAddress[operator!=] : +# 2310| r2310_37(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2310_37 +# 2310| r2310_38(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -#-----| m0_10(unknown) = Chi : total:m2310_44, partial:m0_9 -# 2310| r2310_47(glval) = FunctionAddress[iterator] : -# 2310| r2310_48(glval>) = VariableAddress[(__end)] : -#-----| r0_11(glval>) = Convert : r2310_48 -#-----| r0_12(iterator &) = CopyValue : r0_11 -# 2310| v2310_49(void) = Call[iterator] : func:r2310_47, this:r0_8, 0:r0_12 -# 2310| m2310_50(unknown) = ^CallSideEffect : ~m0_10 -# 2310| m2310_51(unknown) = Chi : total:m0_10, partial:m2310_50 -#-----| v0_13(void) = ^BufferReadSideEffect[0] : &:r0_12, ~m2310_51 -# 2310| m2310_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2310| m2310_53(unknown) = Chi : total:m2310_51, partial:m2310_52 -#-----| r0_14(iterator) = Load[#temp0:0] : &:r0_8, ~m2310_53 -# 2310| r2310_54(bool) = Call[operator!=] : func:r2310_46, this:r0_7, 0:r0_14 -#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2310_43 -# 2310| v2310_55(void) = ConditionalBranch : r2310_54 +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2310| r2310_39(glval) = FunctionAddress[iterator] : +# 2310| r2310_40(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2310_40 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2310| v2310_41(void) = Call[iterator] : func:r2310_39, this:r0_8, 0:r0_11 +# 2310| mu2310_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2310| mu2310_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2310| r2310_44(bool) = Call[operator!=] : func:r2310_38, this:r0_7, 0:r0_13 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2310| v2310_45(void) = ConditionalBranch : r2310_44 #-----| False -> Block 6 #-----| True -> Block 5 # 2310| Block 5 -# 2310| r2310_56(glval) = VariableAddress[s] : -# 2310| m2310_57(String) = Uninitialized[s] : &:r2310_56 -# 2310| m2310_58(unknown) = Chi : total:m2310_53, partial:m2310_57 -# 2310| r2310_59(glval) = FunctionAddress[String] : -# 2310| r2310_60(glval>) = VariableAddress[(__begin)] : -#-----| r0_16(glval>) = Convert : r2310_60 -# 2310| r2310_61(glval) = FunctionAddress[operator*] : -# 2310| r2310_62(String &) = Call[operator*] : func:r2310_61, this:r0_16 -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, m2310_43 -# 2310| r2310_63(glval) = CopyValue : r2310_62 -# 2310| r2310_64(glval) = Convert : r2310_63 -# 2310| r2310_65(String &) = CopyValue : r2310_64 -# 2310| v2310_66(void) = Call[String] : func:r2310_59, this:r2310_56, 0:r2310_65 -# 2310| m2310_67(unknown) = ^CallSideEffect : ~m2310_58 -# 2310| m2310_68(unknown) = Chi : total:m2310_58, partial:m2310_67 -# 2310| v2310_69(void) = ^BufferReadSideEffect[0] : &:r2310_65, ~m2310_68 -# 2310| m2310_70(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_56 -# 2310| m2310_71(unknown) = Chi : total:m2310_68, partial:m2310_70 +# 2310| r2310_46(glval) = VariableAddress[s] : +# 2310| mu2310_47(String) = Uninitialized[s] : &:r2310_46 +# 2310| r2310_48(glval) = FunctionAddress[String] : +# 2310| r2310_49(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2310_49 +# 2310| r2310_50(glval) = FunctionAddress[operator*] : +# 2310| r2310_51(String &) = Call[operator*] : func:r2310_50, this:r0_15 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2310| r2310_52(glval) = CopyValue : r2310_51 +# 2310| r2310_53(glval) = Convert : r2310_52 +# 2310| r2310_54(String &) = CopyValue : r2310_53 +# 2310| v2310_55(void) = Call[String] : func:r2310_48, this:r2310_46, 0:r2310_54 +# 2310| mu2310_56(unknown) = ^CallSideEffect : ~m? +# 2310| v2310_57(void) = ^BufferReadSideEffect[0] : &:r2310_54, ~m? +# 2310| mu2310_58(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_46 # 2311| r2311_1(glval) = VariableAddress[s2] : -# 2311| m2311_2(String) = Uninitialized[s2] : &:r2311_1 -# 2311| m2311_3(unknown) = Chi : total:m2310_71, partial:m2311_2 -# 2311| r2311_4(glval) = FunctionAddress[String] : -# 2311| v2311_5(void) = Call[String] : func:r2311_4, this:r2311_1 -# 2311| m2311_6(unknown) = ^CallSideEffect : ~m2311_3 -# 2311| m2311_7(unknown) = Chi : total:m2311_3, partial:m2311_6 -# 2311| m2311_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 -# 2311| m2311_9(unknown) = Chi : total:m2311_7, partial:m2311_8 +# 2311| mu2311_2(String) = Uninitialized[s2] : &:r2311_1 +# 2311| r2311_3(glval) = FunctionAddress[String] : +# 2311| v2311_4(void) = Call[String] : func:r2311_3, this:r2311_1 +# 2311| mu2311_5(unknown) = ^CallSideEffect : ~m? +# 2311| mu2311_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 # 2312| r2312_1(glval) = VariableAddress[s2] : # 2312| r2312_2(glval) = FunctionAddress[~String] : # 2312| v2312_3(void) = Call[~String] : func:r2312_2, this:r2312_1 -# 2312| m2312_4(unknown) = ^CallSideEffect : ~m2311_9 -# 2312| m2312_5(unknown) = Chi : total:m2311_9, partial:m2312_4 -# 2312| v2312_6(void) = ^IndirectReadSideEffect[-1] : &:r2312_1, ~m2312_5 -# 2312| m2312_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_1 -# 2312| m2312_8(unknown) = Chi : total:m2312_5, partial:m2312_7 -# 2310| r2310_72(glval>) = VariableAddress[(__begin)] : -# 2310| r2310_73(glval) = FunctionAddress[operator++] : -# 2310| r2310_74(iterator &) = Call[operator++] : func:r2310_73, this:r2310_72 -# 2310| v2310_75(void) = ^IndirectReadSideEffect[-1] : &:r2310_72, m2310_43 -# 2310| m2310_76(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2310_72 -# 2310| m2310_77(iterator) = Chi : total:m2310_43, partial:m2310_76 -# 2310| r2310_78(glval) = VariableAddress[s] : -# 2310| r2310_79(glval) = FunctionAddress[~String] : -# 2310| v2310_80(void) = Call[~String] : func:r2310_79, this:r2310_78 -# 2310| m2310_81(unknown) = ^CallSideEffect : ~m2312_8 -# 2310| m2310_82(unknown) = Chi : total:m2312_8, partial:m2310_81 -# 2310| v2310_83(void) = ^IndirectReadSideEffect[-1] : &:r2310_78, ~m2310_82 -# 2310| m2310_84(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_78 -# 2310| m2310_85(unknown) = Chi : total:m2310_82, partial:m2310_84 -# 2310| r2310_86(glval>) = CopyValue : r2310_74 +# 2312| mu2312_4(unknown) = ^CallSideEffect : ~m? +# 2312| v2312_5(void) = ^IndirectReadSideEffect[-1] : &:r2312_1, ~m? +# 2312| mu2312_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_1 +# 2310| r2310_59(glval>) = VariableAddress[(__begin)] : +# 2310| r2310_60(glval) = FunctionAddress[operator++] : +# 2310| r2310_61(iterator &) = Call[operator++] : func:r2310_60, this:r2310_59 +# 2310| v2310_62(void) = ^IndirectReadSideEffect[-1] : &:r2310_59, ~m? +# 2310| mu2310_63(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2310_59 +# 2310| r2310_64(glval) = VariableAddress[s] : +# 2310| r2310_65(glval) = FunctionAddress[~String] : +# 2310| v2310_66(void) = Call[~String] : func:r2310_65, this:r2310_64 +# 2310| mu2310_67(unknown) = ^CallSideEffect : ~m? +# 2310| v2310_68(void) = ^IndirectReadSideEffect[-1] : &:r2310_64, ~m? +# 2310| mu2310_69(String) = ^IndirectMayWriteSideEffect[-1] : &:r2310_64 +# 2310| r2310_70(glval>) = CopyValue : r2310_61 #-----| Goto (back edge) -> Block 4 # 2310| Block 6 -# 2310| r2310_87(glval>) = CopyValue : r2310_2 -# 2310| r2310_88(glval) = FunctionAddress[~vector] : -# 2310| v2310_89(void) = Call[~vector] : func:r2310_88, this:r2310_87 -# 2310| v2310_90(void) = ^IndirectReadSideEffect[-1] : &:r2310_87, m2310_19 -# 2310| m2310_91(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2310_87 +# 2310| r2310_71(glval>) = CopyValue : r2310_2 +# 2310| r2310_72(glval) = FunctionAddress[~vector] : +# 2310| v2310_73(void) = Call[~vector] : func:r2310_72, this:r2310_71 +# 2310| v2310_74(void) = ^IndirectReadSideEffect[-1] : &:r2310_71, ~m? +# 2310| mu2310_75(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2310_71 # 2314| r2314_1(glval) = VariableAddress[s] : -# 2314| m2314_2(String) = Uninitialized[s] : &:r2314_1 -# 2314| m2314_3(unknown) = Chi : total:m2310_53, partial:m2314_2 -# 2314| r2314_4(glval) = FunctionAddress[String] : -# 2314| r2314_5(glval) = StringConstant["hello"] : -# 2314| r2314_6(char *) = Convert : r2314_5 -# 2314| v2314_7(void) = Call[String] : func:r2314_4, this:r2314_1, 0:r2314_6 -# 2314| m2314_8(unknown) = ^CallSideEffect : ~m2314_3 -# 2314| m2314_9(unknown) = Chi : total:m2314_3, partial:m2314_8 -# 2314| v2314_10(void) = ^BufferReadSideEffect[0] : &:r2314_6, ~m2304_3 -# 2314| m2314_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_1 -# 2314| m2314_12(unknown) = Chi : total:m2314_9, partial:m2314_11 -# 2314| r2314_13(glval) = VariableAddress[s2] : -# 2314| m2314_14(String) = Uninitialized[s2] : &:r2314_13 -# 2314| m2314_15(unknown) = Chi : total:m2314_12, partial:m2314_14 -# 2314| r2314_16(glval) = FunctionAddress[String] : -# 2314| r2314_17(glval) = StringConstant["world"] : -# 2314| r2314_18(char *) = Convert : r2314_17 -# 2314| v2314_19(void) = Call[String] : func:r2314_16, this:r2314_13, 0:r2314_18 -# 2314| m2314_20(unknown) = ^CallSideEffect : ~m2314_15 -# 2314| m2314_21(unknown) = Chi : total:m2314_15, partial:m2314_20 -# 2314| v2314_22(void) = ^BufferReadSideEffect[0] : &:r2314_18, ~m2304_3 -# 2314| m2314_23(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_13 -# 2314| m2314_24(unknown) = Chi : total:m2314_21, partial:m2314_23 +# 2314| mu2314_2(String) = Uninitialized[s] : &:r2314_1 +# 2314| r2314_3(glval) = FunctionAddress[String] : +# 2314| r2314_4(glval) = StringConstant["hello"] : +# 2314| r2314_5(char *) = Convert : r2314_4 +# 2314| v2314_6(void) = Call[String] : func:r2314_3, this:r2314_1, 0:r2314_5 +# 2314| mu2314_7(unknown) = ^CallSideEffect : ~m? +# 2314| v2314_8(void) = ^BufferReadSideEffect[0] : &:r2314_5, ~m? +# 2314| mu2314_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_1 +# 2314| r2314_10(glval) = VariableAddress[s2] : +# 2314| mu2314_11(String) = Uninitialized[s2] : &:r2314_10 +# 2314| r2314_12(glval) = FunctionAddress[String] : +# 2314| r2314_13(glval) = StringConstant["world"] : +# 2314| r2314_14(char *) = Convert : r2314_13 +# 2314| v2314_15(void) = Call[String] : func:r2314_12, this:r2314_10, 0:r2314_14 +# 2314| mu2314_16(unknown) = ^CallSideEffect : ~m? +# 2314| v2314_17(void) = ^BufferReadSideEffect[0] : &:r2314_14, ~m? +# 2314| mu2314_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_10 #-----| Goto -> Block 7 # 2314| Block 7 -# 2314| m2314_25(unknown) = Phi : from 6:~m2314_24, from 8:~m2314_40 -# 2314| m2314_26(char) = Phi : from 6:m2306_14, from 8:m2314_42 -# 2314| r2314_27(glval) = VariableAddress[c] : -# 2314| r2314_28(char) = Load[c] : &:r2314_27, m2314_26 -# 2314| r2314_29(int) = Convert : r2314_28 -# 2314| r2314_30(int) = Constant[0] : -# 2314| r2314_31(bool) = CompareNE : r2314_29, r2314_30 -# 2314| v2314_32(void) = ConditionalBranch : r2314_31 +# 2314| m2314_19(char) = Phi : from 6:m2306_10, from 8:m2314_33 +# 2314| r2314_20(glval) = VariableAddress[c] : +# 2314| r2314_21(char) = Load[c] : &:r2314_20, m2314_19 +# 2314| r2314_22(int) = Convert : r2314_21 +# 2314| r2314_23(int) = Constant[0] : +# 2314| r2314_24(bool) = CompareNE : r2314_22, r2314_23 +# 2314| v2314_25(void) = ConditionalBranch : r2314_24 #-----| False -> Block 9 #-----| True -> Block 8 @@ -17845,63 +16204,53 @@ ir.cpp: # 2315| r2315_1(char) = Constant[0] : # 2315| r2315_2(glval) = VariableAddress[c] : # 2315| m2315_3(char) = Store[c] : &:r2315_2, r2315_1 -# 2314| r2314_33(glval) = VariableAddress[s] : -# 2314| r2314_34(glval) = FunctionAddress[pop_back] : -# 2314| r2314_35(char) = Call[pop_back] : func:r2314_34, this:r2314_33 -# 2314| m2314_36(unknown) = ^CallSideEffect : ~m2314_25 -# 2314| m2314_37(unknown) = Chi : total:m2314_25, partial:m2314_36 -# 2314| v2314_38(void) = ^IndirectReadSideEffect[-1] : &:r2314_33, ~m2314_37 -# 2314| m2314_39(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_33 -# 2314| m2314_40(unknown) = Chi : total:m2314_37, partial:m2314_39 -# 2314| r2314_41(glval) = VariableAddress[c] : -# 2314| m2314_42(char) = Store[c] : &:r2314_41, r2314_35 +# 2314| r2314_26(glval) = VariableAddress[s] : +# 2314| r2314_27(glval) = FunctionAddress[pop_back] : +# 2314| r2314_28(char) = Call[pop_back] : func:r2314_27, this:r2314_26 +# 2314| mu2314_29(unknown) = ^CallSideEffect : ~m? +# 2314| v2314_30(void) = ^IndirectReadSideEffect[-1] : &:r2314_26, ~m? +# 2314| mu2314_31(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_26 +# 2314| r2314_32(glval) = VariableAddress[c] : +# 2314| m2314_33(char) = Store[c] : &:r2314_32, r2314_28 #-----| Goto (back edge) -> Block 7 # 2314| Block 9 -# 2314| r2314_43(glval) = VariableAddress[s2] : -# 2314| r2314_44(glval) = FunctionAddress[~String] : -# 2314| v2314_45(void) = Call[~String] : func:r2314_44, this:r2314_43 -# 2314| m2314_46(unknown) = ^CallSideEffect : ~m2314_25 -# 2314| m2314_47(unknown) = Chi : total:m2314_25, partial:m2314_46 -# 2314| v2314_48(void) = ^IndirectReadSideEffect[-1] : &:r2314_43, ~m2314_47 -# 2314| m2314_49(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_43 -# 2314| m2314_50(unknown) = Chi : total:m2314_47, partial:m2314_49 -# 2314| r2314_51(glval) = VariableAddress[s] : -# 2314| r2314_52(glval) = FunctionAddress[~String] : -# 2314| v2314_53(void) = Call[~String] : func:r2314_52, this:r2314_51 -# 2314| m2314_54(unknown) = ^CallSideEffect : ~m2314_50 -# 2314| m2314_55(unknown) = Chi : total:m2314_50, partial:m2314_54 -# 2314| v2314_56(void) = ^IndirectReadSideEffect[-1] : &:r2314_51, ~m2314_55 -# 2314| m2314_57(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_51 -# 2314| m2314_58(unknown) = Chi : total:m2314_55, partial:m2314_57 +# 2314| r2314_34(glval) = VariableAddress[s2] : +# 2314| r2314_35(glval) = FunctionAddress[~String] : +# 2314| v2314_36(void) = Call[~String] : func:r2314_35, this:r2314_34 +# 2314| mu2314_37(unknown) = ^CallSideEffect : ~m? +# 2314| v2314_38(void) = ^IndirectReadSideEffect[-1] : &:r2314_34, ~m? +# 2314| mu2314_39(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_34 +# 2314| r2314_40(glval) = VariableAddress[s] : +# 2314| r2314_41(glval) = FunctionAddress[~String] : +# 2314| v2314_42(void) = Call[~String] : func:r2314_41, this:r2314_40 +# 2314| mu2314_43(unknown) = ^CallSideEffect : ~m? +# 2314| v2314_44(void) = ^IndirectReadSideEffect[-1] : &:r2314_40, ~m? +# 2314| mu2314_45(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_40 # 2317| v2317_1(void) = NoOp : -# 2304| v2304_5(void) = ReturnVoid : -# 2304| v2304_6(void) = AliasedUse : ~m2314_55 -# 2304| v2304_7(void) = ExitFunction : +# 2304| v2304_4(void) = ReturnVoid : +# 2304| v2304_5(void) = AliasedUse : ~m? +# 2304| v2304_6(void) = ExitFunction : # 2319| void IfDestructors2(bool) # 2319| Block 0 # 2319| v2319_1(void) = EnterFunction : -# 2319| m2319_2(unknown) = AliasedDefinition : -# 2319| m2319_3(unknown) = InitializeNonLocal : -# 2319| m2319_4(unknown) = Chi : total:m2319_2, partial:m2319_3 -# 2319| r2319_5(glval) = VariableAddress[b] : -# 2319| m2319_6(bool) = InitializeParameter[b] : &:r2319_5 +# 2319| mu2319_2(unknown) = AliasedDefinition : +# 2319| mu2319_3(unknown) = InitializeNonLocal : +# 2319| r2319_4(glval) = VariableAddress[b] : +# 2319| m2319_5(bool) = InitializeParameter[b] : &:r2319_4 # 2320| r2320_1(glval) = VariableAddress[s] : -# 2320| m2320_2(String) = Uninitialized[s] : &:r2320_1 -# 2320| m2320_3(unknown) = Chi : total:m2319_4, partial:m2320_2 -# 2320| r2320_4(glval) = FunctionAddress[String] : -# 2320| r2320_5(glval) = StringConstant["hello"] : -# 2320| r2320_6(char *) = Convert : r2320_5 -# 2320| v2320_7(void) = Call[String] : func:r2320_4, this:r2320_1, 0:r2320_6 -# 2320| m2320_8(unknown) = ^CallSideEffect : ~m2320_3 -# 2320| m2320_9(unknown) = Chi : total:m2320_3, partial:m2320_8 -# 2320| v2320_10(void) = ^BufferReadSideEffect[0] : &:r2320_6, ~m2319_3 -# 2320| m2320_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -# 2320| m2320_12(unknown) = Chi : total:m2320_9, partial:m2320_11 -# 2320| r2320_13(glval) = VariableAddress[b] : -# 2320| r2320_14(bool) = Load[b] : &:r2320_13, m2319_6 -# 2320| v2320_15(void) = ConditionalBranch : r2320_14 +# 2320| mu2320_2(String) = Uninitialized[s] : &:r2320_1 +# 2320| r2320_3(glval) = FunctionAddress[String] : +# 2320| r2320_4(glval) = StringConstant["hello"] : +# 2320| r2320_5(char *) = Convert : r2320_4 +# 2320| v2320_6(void) = Call[String] : func:r2320_3, this:r2320_1, 0:r2320_5 +# 2320| mu2320_7(unknown) = ^CallSideEffect : ~m? +# 2320| v2320_8(void) = ^BufferReadSideEffect[0] : &:r2320_5, ~m? +# 2320| mu2320_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 +# 2320| r2320_10(glval) = VariableAddress[b] : +# 2320| r2320_11(bool) = Load[b] : &:r2320_10, m2319_5 +# 2320| v2320_12(void) = ConditionalBranch : r2320_11 #-----| False -> Block 2 #-----| True -> Block 1 @@ -17921,124 +16270,99 @@ ir.cpp: # 2324| r2324_1(glval) = VariableAddress[s] : # 2324| r2324_2(glval) = FunctionAddress[~String] : # 2324| v2324_3(void) = Call[~String] : func:r2324_2, this:r2324_1 -# 2324| m2324_4(unknown) = ^CallSideEffect : ~m2320_12 -# 2324| m2324_5(unknown) = Chi : total:m2320_12, partial:m2324_4 -# 2324| v2324_6(void) = ^IndirectReadSideEffect[-1] : &:r2324_1, ~m2324_5 -# 2324| m2324_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2324_1 -# 2324| m2324_8(unknown) = Chi : total:m2324_5, partial:m2324_7 +# 2324| mu2324_4(unknown) = ^CallSideEffect : ~m? +# 2324| v2324_5(void) = ^IndirectReadSideEffect[-1] : &:r2324_1, ~m? +# 2324| mu2324_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2324_1 # 2325| v2325_1(void) = NoOp : -# 2319| v2319_7(void) = ReturnVoid : -# 2319| v2319_8(void) = AliasedUse : ~m2324_5 -# 2319| v2319_9(void) = ExitFunction : +# 2319| v2319_6(void) = ReturnVoid : +# 2319| v2319_7(void) = AliasedUse : ~m? +# 2319| v2319_8(void) = ExitFunction : # 2334| void IfDestructors3(bool) # 2334| Block 0 # 2334| v2334_1(void) = EnterFunction : -# 2334| m2334_2(unknown) = AliasedDefinition : -# 2334| m2334_3(unknown) = InitializeNonLocal : -# 2334| m2334_4(unknown) = Chi : total:m2334_2, partial:m2334_3 -# 2334| r2334_5(glval) = VariableAddress[b] : -# 2334| m2334_6(bool) = InitializeParameter[b] : &:r2334_5 +# 2334| mu2334_2(unknown) = AliasedDefinition : +# 2334| mu2334_3(unknown) = InitializeNonLocal : +# 2334| r2334_4(glval) = VariableAddress[b] : +# 2334| m2334_5(bool) = InitializeParameter[b] : &:r2334_4 # 2335| r2335_1(glval) = VariableAddress[B] : -# 2335| m2335_2(Bool) = Uninitialized[B] : &:r2335_1 -# 2335| m2335_3(unknown) = Chi : total:m2334_4, partial:m2335_2 -# 2335| r2335_4(glval) = FunctionAddress[Bool] : -# 2335| r2335_5(glval) = VariableAddress[b] : -# 2335| r2335_6(bool) = Load[b] : &:r2335_5, m2334_6 -# 2335| v2335_7(void) = Call[Bool] : func:r2335_4, this:r2335_1, 0:r2335_6 -# 2335| m2335_8(unknown) = ^CallSideEffect : ~m2335_3 -# 2335| m2335_9(unknown) = Chi : total:m2335_3, partial:m2335_8 -# 2335| m2335_10(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2335_1 -# 2335| m2335_11(unknown) = Chi : total:m2335_9, partial:m2335_10 -# 2335| r2335_12(glval) = VariableAddress[B] : -# 2335| r2335_13(glval) = FunctionAddress[operator bool] : -# 2335| r2335_14(bool) = Call[operator bool] : func:r2335_13, this:r2335_12 -# 2335| m2335_15(unknown) = ^CallSideEffect : ~m2335_11 -# 2335| m2335_16(unknown) = Chi : total:m2335_11, partial:m2335_15 -# 2335| v2335_17(void) = ^IndirectReadSideEffect[-1] : &:r2335_12, ~m2335_16 -# 2335| m2335_18(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2335_12 -# 2335| m2335_19(unknown) = Chi : total:m2335_16, partial:m2335_18 -# 2335| r2335_20(bool) = CopyValue : r2335_14 -# 2335| v2335_21(void) = ConditionalBranch : r2335_20 +# 2335| mu2335_2(Bool) = Uninitialized[B] : &:r2335_1 +# 2335| r2335_3(glval) = FunctionAddress[Bool] : +# 2335| r2335_4(glval) = VariableAddress[b] : +# 2335| r2335_5(bool) = Load[b] : &:r2335_4, m2334_5 +# 2335| v2335_6(void) = Call[Bool] : func:r2335_3, this:r2335_1, 0:r2335_5 +# 2335| mu2335_7(unknown) = ^CallSideEffect : ~m? +# 2335| mu2335_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2335_1 +# 2335| r2335_9(glval) = VariableAddress[B] : +# 2335| r2335_10(glval) = FunctionAddress[operator bool] : +# 2335| r2335_11(bool) = Call[operator bool] : func:r2335_10, this:r2335_9 +# 2335| mu2335_12(unknown) = ^CallSideEffect : ~m? +# 2335| v2335_13(void) = ^IndirectReadSideEffect[-1] : &:r2335_9, ~m? +# 2335| mu2335_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2335_9 +# 2335| r2335_15(bool) = CopyValue : r2335_11 +# 2335| v2335_16(void) = ConditionalBranch : r2335_15 #-----| False -> Block 2 #-----| True -> Block 1 # 2336| Block 1 # 2336| r2336_1(glval) = VariableAddress[s1] : -# 2336| m2336_2(String) = Uninitialized[s1] : &:r2336_1 -# 2336| m2336_3(unknown) = Chi : total:m2335_19, partial:m2336_2 -# 2336| r2336_4(glval) = FunctionAddress[String] : -# 2336| v2336_5(void) = Call[String] : func:r2336_4, this:r2336_1 -# 2336| m2336_6(unknown) = ^CallSideEffect : ~m2336_3 -# 2336| m2336_7(unknown) = Chi : total:m2336_3, partial:m2336_6 -# 2336| m2336_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 -# 2336| m2336_9(unknown) = Chi : total:m2336_7, partial:m2336_8 +# 2336| mu2336_2(String) = Uninitialized[s1] : &:r2336_1 +# 2336| r2336_3(glval) = FunctionAddress[String] : +# 2336| v2336_4(void) = Call[String] : func:r2336_3, this:r2336_1 +# 2336| mu2336_5(unknown) = ^CallSideEffect : ~m? +# 2336| mu2336_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 # 2337| r2337_1(glval) = VariableAddress[s1] : # 2337| r2337_2(glval) = FunctionAddress[~String] : # 2337| v2337_3(void) = Call[~String] : func:r2337_2, this:r2337_1 -# 2337| m2337_4(unknown) = ^CallSideEffect : ~m2336_9 -# 2337| m2337_5(unknown) = Chi : total:m2336_9, partial:m2337_4 -# 2337| v2337_6(void) = ^IndirectReadSideEffect[-1] : &:r2337_1, ~m2337_5 -# 2337| m2337_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2337_1 -# 2337| m2337_8(unknown) = Chi : total:m2337_5, partial:m2337_7 +# 2337| mu2337_4(unknown) = ^CallSideEffect : ~m? +# 2337| v2337_5(void) = ^IndirectReadSideEffect[-1] : &:r2337_1, ~m? +# 2337| mu2337_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2337_1 #-----| Goto -> Block 3 # 2338| Block 2 # 2338| r2338_1(glval) = VariableAddress[s2] : -# 2338| m2338_2(String) = Uninitialized[s2] : &:r2338_1 -# 2338| m2338_3(unknown) = Chi : total:m2335_19, partial:m2338_2 -# 2338| r2338_4(glval) = FunctionAddress[String] : -# 2338| v2338_5(void) = Call[String] : func:r2338_4, this:r2338_1 -# 2338| m2338_6(unknown) = ^CallSideEffect : ~m2338_3 -# 2338| m2338_7(unknown) = Chi : total:m2338_3, partial:m2338_6 -# 2338| m2338_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2338_1 -# 2338| m2338_9(unknown) = Chi : total:m2338_7, partial:m2338_8 +# 2338| mu2338_2(String) = Uninitialized[s2] : &:r2338_1 +# 2338| r2338_3(glval) = FunctionAddress[String] : +# 2338| v2338_4(void) = Call[String] : func:r2338_3, this:r2338_1 +# 2338| mu2338_5(unknown) = ^CallSideEffect : ~m? +# 2338| mu2338_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2338_1 # 2339| r2339_1(glval) = VariableAddress[s2] : # 2339| r2339_2(glval) = FunctionAddress[~String] : # 2339| v2339_3(void) = Call[~String] : func:r2339_2, this:r2339_1 -# 2339| m2339_4(unknown) = ^CallSideEffect : ~m2338_9 -# 2339| m2339_5(unknown) = Chi : total:m2338_9, partial:m2339_4 -# 2339| v2339_6(void) = ^IndirectReadSideEffect[-1] : &:r2339_1, ~m2339_5 -# 2339| m2339_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2339_1 -# 2339| m2339_8(unknown) = Chi : total:m2339_5, partial:m2339_7 +# 2339| mu2339_4(unknown) = ^CallSideEffect : ~m? +# 2339| v2339_5(void) = ^IndirectReadSideEffect[-1] : &:r2339_1, ~m? +# 2339| mu2339_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2339_1 #-----| Goto -> Block 3 # 2339| Block 3 -# 2339| m2339_9(unknown) = Phi : from 1:~m2337_8, from 2:~m2339_8 -# 2339| r2339_10(glval) = VariableAddress[B] : -# 2339| r2339_11(glval) = FunctionAddress[~Bool] : -# 2339| v2339_12(void) = Call[~Bool] : func:r2339_11, this:r2339_10 -# 2339| m2339_13(unknown) = ^CallSideEffect : ~m2339_9 -# 2339| m2339_14(unknown) = Chi : total:m2339_9, partial:m2339_13 -# 2339| v2339_15(void) = ^IndirectReadSideEffect[-1] : &:r2339_10, ~m2339_14 -# 2339| m2339_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2339_10 -# 2339| m2339_17(unknown) = Chi : total:m2339_14, partial:m2339_16 -# 2340| v2340_1(void) = NoOp : -# 2334| v2334_7(void) = ReturnVoid : -# 2334| v2334_8(void) = AliasedUse : ~m2339_14 -# 2334| v2334_9(void) = ExitFunction : +# 2339| r2339_7(glval) = VariableAddress[B] : +# 2339| r2339_8(glval) = FunctionAddress[~Bool] : +# 2339| v2339_9(void) = Call[~Bool] : func:r2339_8, this:r2339_7 +# 2339| mu2339_10(unknown) = ^CallSideEffect : ~m? +# 2339| v2339_11(void) = ^IndirectReadSideEffect[-1] : &:r2339_7, ~m? +# 2339| mu2339_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2339_7 +# 2340| v2340_1(void) = NoOp : +# 2334| v2334_6(void) = ReturnVoid : +# 2334| v2334_7(void) = AliasedUse : ~m? +# 2334| v2334_8(void) = ExitFunction : # 2342| void WhileLoopDestructors(bool) # 2342| Block 0 # 2342| v2342_1(void) = EnterFunction : -# 2342| m2342_2(unknown) = AliasedDefinition : -# 2342| m2342_3(unknown) = InitializeNonLocal : -# 2342| m2342_4(unknown) = Chi : total:m2342_2, partial:m2342_3 -# 2342| r2342_5(glval) = VariableAddress[b] : -# 2342| m2342_6(bool) = InitializeParameter[b] : &:r2342_5 +# 2342| mu2342_2(unknown) = AliasedDefinition : +# 2342| mu2342_3(unknown) = InitializeNonLocal : +# 2342| r2342_4(glval) = VariableAddress[b] : +# 2342| m2342_5(bool) = InitializeParameter[b] : &:r2342_4 # 2344| r2344_1(glval) = VariableAddress[s] : -# 2344| m2344_2(String) = Uninitialized[s] : &:r2344_1 -# 2344| m2344_3(unknown) = Chi : total:m2342_4, partial:m2344_2 -# 2344| r2344_4(glval) = FunctionAddress[String] : -# 2344| v2344_5(void) = Call[String] : func:r2344_4, this:r2344_1 -# 2344| m2344_6(unknown) = ^CallSideEffect : ~m2344_3 -# 2344| m2344_7(unknown) = Chi : total:m2344_3, partial:m2344_6 -# 2344| m2344_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2344_1 -# 2344| m2344_9(unknown) = Chi : total:m2344_7, partial:m2344_8 +# 2344| mu2344_2(String) = Uninitialized[s] : &:r2344_1 +# 2344| r2344_3(glval) = FunctionAddress[String] : +# 2344| v2344_4(void) = Call[String] : func:r2344_3, this:r2344_1 +# 2344| mu2344_5(unknown) = ^CallSideEffect : ~m? +# 2344| mu2344_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2344_1 #-----| Goto -> Block 1 # 2345| Block 1 -# 2345| m2345_1(bool) = Phi : from 0:m2342_6, from 2:m2346_3 +# 2345| m2345_1(bool) = Phi : from 0:m2342_5, from 2:m2346_3 # 2345| r2345_2(glval) = VariableAddress[b] : # 2345| r2345_3(bool) = Load[b] : &:r2345_2, m2345_1 # 2345| v2345_4(void) = ConditionalBranch : r2345_3 @@ -18055,37 +16379,29 @@ ir.cpp: # 2348| r2348_1(glval) = VariableAddress[s] : # 2348| r2348_2(glval) = FunctionAddress[~String] : # 2348| v2348_3(void) = Call[~String] : func:r2348_2, this:r2348_1 -# 2348| m2348_4(unknown) = ^CallSideEffect : ~m2344_9 -# 2348| m2348_5(unknown) = Chi : total:m2344_9, partial:m2348_4 -# 2348| v2348_6(void) = ^IndirectReadSideEffect[-1] : &:r2348_1, ~m2348_5 -# 2348| m2348_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2348_1 -# 2348| m2348_8(unknown) = Chi : total:m2348_5, partial:m2348_7 +# 2348| mu2348_4(unknown) = ^CallSideEffect : ~m? +# 2348| v2348_5(void) = ^IndirectReadSideEffect[-1] : &:r2348_1, ~m? +# 2348| mu2348_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2348_1 #-----| Goto -> Block 4 # 2351| Block 4 -# 2351| m2351_1(unknown) = Phi : from 3:~m2348_8, from 5:~m2353_8 -# 2351| m2351_2(bool) = Phi : from 3:m2345_1, from 5:m2352_3 -# 2351| r2351_3(glval) = VariableAddress[B] : -# 2351| m2351_4(Bool) = Uninitialized[B] : &:r2351_3 -# 2351| m2351_5(unknown) = Chi : total:m2351_1, partial:m2351_4 -# 2351| r2351_6(glval) = FunctionAddress[Bool] : -# 2351| r2351_7(glval) = VariableAddress[b] : -# 2351| r2351_8(bool) = Load[b] : &:r2351_7, m2351_2 -# 2351| v2351_9(void) = Call[Bool] : func:r2351_6, this:r2351_3, 0:r2351_8 -# 2351| m2351_10(unknown) = ^CallSideEffect : ~m2351_5 -# 2351| m2351_11(unknown) = Chi : total:m2351_5, partial:m2351_10 -# 2351| m2351_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2351_3 -# 2351| m2351_13(unknown) = Chi : total:m2351_11, partial:m2351_12 -# 2351| r2351_14(glval) = VariableAddress[B] : -# 2351| r2351_15(glval) = FunctionAddress[operator bool] : -# 2351| r2351_16(bool) = Call[operator bool] : func:r2351_15, this:r2351_14 -# 2351| m2351_17(unknown) = ^CallSideEffect : ~m2351_13 -# 2351| m2351_18(unknown) = Chi : total:m2351_13, partial:m2351_17 -# 2351| v2351_19(void) = ^IndirectReadSideEffect[-1] : &:r2351_14, ~m2351_18 -# 2351| m2351_20(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2351_14 -# 2351| m2351_21(unknown) = Chi : total:m2351_18, partial:m2351_20 -# 2351| r2351_22(bool) = CopyValue : r2351_16 -# 2351| v2351_23(void) = ConditionalBranch : r2351_22 +# 2351| m2351_1(bool) = Phi : from 3:m2345_1, from 5:m2352_3 +# 2351| r2351_2(glval) = VariableAddress[B] : +# 2351| mu2351_3(Bool) = Uninitialized[B] : &:r2351_2 +# 2351| r2351_4(glval) = FunctionAddress[Bool] : +# 2351| r2351_5(glval) = VariableAddress[b] : +# 2351| r2351_6(bool) = Load[b] : &:r2351_5, m2351_1 +# 2351| v2351_7(void) = Call[Bool] : func:r2351_4, this:r2351_2, 0:r2351_6 +# 2351| mu2351_8(unknown) = ^CallSideEffect : ~m? +# 2351| mu2351_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2351_2 +# 2351| r2351_10(glval) = VariableAddress[B] : +# 2351| r2351_11(glval) = FunctionAddress[operator bool] : +# 2351| r2351_12(bool) = Call[operator bool] : func:r2351_11, this:r2351_10 +# 2351| mu2351_13(unknown) = ^CallSideEffect : ~m? +# 2351| v2351_14(void) = ^IndirectReadSideEffect[-1] : &:r2351_10, ~m? +# 2351| mu2351_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2351_10 +# 2351| r2351_16(bool) = CopyValue : r2351_12 +# 2351| v2351_17(void) = ConditionalBranch : r2351_16 #-----| False -> Block 6 #-----| True -> Block 5 @@ -18096,145 +16412,123 @@ ir.cpp: # 2353| r2353_1(glval) = VariableAddress[B] : # 2353| r2353_2(glval) = FunctionAddress[~Bool] : # 2353| v2353_3(void) = Call[~Bool] : func:r2353_2, this:r2353_1 -# 2353| m2353_4(unknown) = ^CallSideEffect : ~m2351_21 -# 2353| m2353_5(unknown) = Chi : total:m2351_21, partial:m2353_4 -# 2353| v2353_6(void) = ^IndirectReadSideEffect[-1] : &:r2353_1, ~m2353_5 -# 2353| m2353_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2353_1 -# 2353| m2353_8(unknown) = Chi : total:m2353_5, partial:m2353_7 +# 2353| mu2353_4(unknown) = ^CallSideEffect : ~m? +# 2353| v2353_5(void) = ^IndirectReadSideEffect[-1] : &:r2353_1, ~m? +# 2353| mu2353_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2353_1 #-----| Goto (back edge) -> Block 4 # 2353| Block 6 -# 2353| r2353_9(glval) = VariableAddress[B] : -# 2353| r2353_10(glval) = FunctionAddress[~Bool] : -# 2353| v2353_11(void) = Call[~Bool] : func:r2353_10, this:r2353_9 -# 2353| m2353_12(unknown) = ^CallSideEffect : ~m2351_21 -# 2353| m2353_13(unknown) = Chi : total:m2351_21, partial:m2353_12 -# 2353| v2353_14(void) = ^IndirectReadSideEffect[-1] : &:r2353_9, ~m2353_13 -# 2353| m2353_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2353_9 -# 2353| m2353_16(unknown) = Chi : total:m2353_13, partial:m2353_15 -# 2355| v2355_1(void) = NoOp : -# 2342| v2342_7(void) = ReturnVoid : -# 2342| v2342_8(void) = AliasedUse : ~m2353_13 -# 2342| v2342_9(void) = ExitFunction : +# 2353| r2353_7(glval) = VariableAddress[B] : +# 2353| r2353_8(glval) = FunctionAddress[~Bool] : +# 2353| v2353_9(void) = Call[~Bool] : func:r2353_8, this:r2353_7 +# 2353| mu2353_10(unknown) = ^CallSideEffect : ~m? +# 2353| v2353_11(void) = ^IndirectReadSideEffect[-1] : &:r2353_7, ~m? +# 2353| mu2353_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2353_7 +# 2355| v2355_1(void) = NoOp : +# 2342| v2342_6(void) = ReturnVoid : +# 2342| v2342_7(void) = AliasedUse : ~m? +# 2342| v2342_8(void) = ExitFunction : # 2357| void VoidFunc() # 2357| Block 0 -# 2357| v2357_1(void) = EnterFunction : -# 2357| m2357_2(unknown) = AliasedDefinition : -# 2357| m2357_3(unknown) = InitializeNonLocal : -# 2357| m2357_4(unknown) = Chi : total:m2357_2, partial:m2357_3 -# 2357| v2357_5(void) = NoOp : -# 2357| v2357_6(void) = ReturnVoid : -# 2357| v2357_7(void) = AliasedUse : m2357_3 -# 2357| v2357_8(void) = ExitFunction : +# 2357| v2357_1(void) = EnterFunction : +# 2357| mu2357_2(unknown) = AliasedDefinition : +# 2357| mu2357_3(unknown) = InitializeNonLocal : +# 2357| v2357_4(void) = NoOp : +# 2357| v2357_5(void) = ReturnVoid : +# 2357| v2357_6(void) = AliasedUse : ~m? +# 2357| v2357_7(void) = ExitFunction : # 2359| void IfReturnDestructors(bool) # 2359| Block 0 # 2359| v2359_1(void) = EnterFunction : -# 2359| m2359_2(unknown) = AliasedDefinition : -# 2359| m2359_3(unknown) = InitializeNonLocal : -# 2359| m2359_4(unknown) = Chi : total:m2359_2, partial:m2359_3 -# 2359| r2359_5(glval) = VariableAddress[b] : -# 2359| m2359_6(bool) = InitializeParameter[b] : &:r2359_5 +# 2359| mu2359_2(unknown) = AliasedDefinition : +# 2359| mu2359_3(unknown) = InitializeNonLocal : +# 2359| r2359_4(glval) = VariableAddress[b] : +# 2359| m2359_5(bool) = InitializeParameter[b] : &:r2359_4 # 2360| r2360_1(glval) = VariableAddress[s] : -# 2360| m2360_2(String) = Uninitialized[s] : &:r2360_1 -# 2360| m2360_3(unknown) = Chi : total:m2359_4, partial:m2360_2 -# 2360| r2360_4(glval) = FunctionAddress[String] : -# 2360| v2360_5(void) = Call[String] : func:r2360_4, this:r2360_1 -# 2360| m2360_6(unknown) = ^CallSideEffect : ~m2360_3 -# 2360| m2360_7(unknown) = Chi : total:m2360_3, partial:m2360_6 -# 2360| m2360_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2360_1 -# 2360| m2360_9(unknown) = Chi : total:m2360_7, partial:m2360_8 +# 2360| mu2360_2(String) = Uninitialized[s] : &:r2360_1 +# 2360| r2360_3(glval) = FunctionAddress[String] : +# 2360| v2360_4(void) = Call[String] : func:r2360_3, this:r2360_1 +# 2360| mu2360_5(unknown) = ^CallSideEffect : ~m? +# 2360| mu2360_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2360_1 # 2361| r2361_1(glval) = VariableAddress[b] : -# 2361| r2361_2(bool) = Load[b] : &:r2361_1, m2359_6 +# 2361| r2361_2(bool) = Load[b] : &:r2361_1, m2359_5 # 2361| v2361_3(void) = ConditionalBranch : r2361_2 #-----| False -> Block 3 #-----| True -> Block 2 # 2359| Block 1 -# 2359| m2359_7(unknown) = Phi : from 2:~m2368_8, from 4:~m2368_16, from 5:~m2368_25 -# 2359| v2359_8(void) = ReturnVoid : -# 2359| v2359_9(void) = AliasedUse : ~m2359_7 -# 2359| v2359_10(void) = ExitFunction : +# 2359| v2359_6(void) = ReturnVoid : +# 2359| v2359_7(void) = AliasedUse : ~m? +# 2359| v2359_8(void) = ExitFunction : # 2362| Block 2 # 2362| v2362_1(void) = NoOp : # 2368| r2368_1(glval) = VariableAddress[s] : # 2368| r2368_2(glval) = FunctionAddress[~String] : # 2368| v2368_3(void) = Call[~String] : func:r2368_2, this:r2368_1 -# 2368| m2368_4(unknown) = ^CallSideEffect : ~m2360_9 -# 2368| m2368_5(unknown) = Chi : total:m2360_9, partial:m2368_4 -# 2368| v2368_6(void) = ^IndirectReadSideEffect[-1] : &:r2368_1, ~m2368_5 -# 2368| m2368_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_1 -# 2368| m2368_8(unknown) = Chi : total:m2368_5, partial:m2368_7 +# 2368| mu2368_4(unknown) = ^CallSideEffect : ~m? +# 2368| v2368_5(void) = ^IndirectReadSideEffect[-1] : &:r2368_1, ~m? +# 2368| mu2368_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_1 #-----| Goto -> Block 1 # 2364| Block 3 # 2364| r2364_1(glval) = VariableAddress[b] : -# 2364| r2364_2(bool) = Load[b] : &:r2364_1, m2359_6 +# 2364| r2364_2(bool) = Load[b] : &:r2364_1, m2359_5 # 2364| v2364_3(void) = ConditionalBranch : r2364_2 #-----| False -> Block 5 #-----| True -> Block 4 # 2365| Block 4 -# 2365| r2365_1(glval) = FunctionAddress[VoidFunc] : -# 2365| v2365_2(void) = Call[VoidFunc] : func:r2365_1 -# 2365| m2365_3(unknown) = ^CallSideEffect : ~m2360_9 -# 2365| m2365_4(unknown) = Chi : total:m2360_9, partial:m2365_3 -# 2365| v2365_5(void) = NoOp : -# 2368| r2368_9(glval) = VariableAddress[s] : -# 2368| r2368_10(glval) = FunctionAddress[~String] : -# 2368| v2368_11(void) = Call[~String] : func:r2368_10, this:r2368_9 -# 2368| m2368_12(unknown) = ^CallSideEffect : ~m2365_4 -# 2368| m2368_13(unknown) = Chi : total:m2365_4, partial:m2368_12 -# 2368| v2368_14(void) = ^IndirectReadSideEffect[-1] : &:r2368_9, ~m2368_13 -# 2368| m2368_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_9 -# 2368| m2368_16(unknown) = Chi : total:m2368_13, partial:m2368_15 +# 2365| r2365_1(glval) = FunctionAddress[VoidFunc] : +# 2365| v2365_2(void) = Call[VoidFunc] : func:r2365_1 +# 2365| mu2365_3(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_4(void) = NoOp : +# 2368| r2368_7(glval) = VariableAddress[s] : +# 2368| r2368_8(glval) = FunctionAddress[~String] : +# 2368| v2368_9(void) = Call[~String] : func:r2368_8, this:r2368_7 +# 2368| mu2368_10(unknown) = ^CallSideEffect : ~m? +# 2368| v2368_11(void) = ^IndirectReadSideEffect[-1] : &:r2368_7, ~m? +# 2368| mu2368_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_7 #-----| Goto -> Block 1 # 2367| Block 5 # 2367| r2367_1(glval) = VariableAddress[s] : -# 2368| v2368_17(void) = NoOp : -# 2368| r2368_18(glval) = VariableAddress[s] : -# 2368| r2368_19(glval) = FunctionAddress[~String] : -# 2368| v2368_20(void) = Call[~String] : func:r2368_19, this:r2368_18 -# 2368| m2368_21(unknown) = ^CallSideEffect : ~m2360_9 -# 2368| m2368_22(unknown) = Chi : total:m2360_9, partial:m2368_21 -# 2368| v2368_23(void) = ^IndirectReadSideEffect[-1] : &:r2368_18, ~m2368_22 -# 2368| m2368_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_18 -# 2368| m2368_25(unknown) = Chi : total:m2368_22, partial:m2368_24 +# 2368| v2368_13(void) = NoOp : +# 2368| r2368_14(glval) = VariableAddress[s] : +# 2368| r2368_15(glval) = FunctionAddress[~String] : +# 2368| v2368_16(void) = Call[~String] : func:r2368_15, this:r2368_14 +# 2368| mu2368_17(unknown) = ^CallSideEffect : ~m? +# 2368| v2368_18(void) = ^IndirectReadSideEffect[-1] : &:r2368_14, ~m? +# 2368| mu2368_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_14 #-----| Goto -> Block 1 # 2370| int IfReturnDestructors3(bool) # 2370| Block 0 # 2370| v2370_1(void) = EnterFunction : -# 2370| m2370_2(unknown) = AliasedDefinition : -# 2370| m2370_3(unknown) = InitializeNonLocal : -# 2370| m2370_4(unknown) = Chi : total:m2370_2, partial:m2370_3 -# 2370| r2370_5(glval) = VariableAddress[b] : -# 2370| m2370_6(bool) = InitializeParameter[b] : &:r2370_5 +# 2370| mu2370_2(unknown) = AliasedDefinition : +# 2370| mu2370_3(unknown) = InitializeNonLocal : +# 2370| r2370_4(glval) = VariableAddress[b] : +# 2370| m2370_5(bool) = InitializeParameter[b] : &:r2370_4 # 2371| r2371_1(glval) = VariableAddress[s] : -# 2371| m2371_2(String) = Uninitialized[s] : &:r2371_1 -# 2371| m2371_3(unknown) = Chi : total:m2370_4, partial:m2371_2 -# 2371| r2371_4(glval) = FunctionAddress[String] : -# 2371| v2371_5(void) = Call[String] : func:r2371_4, this:r2371_1 -# 2371| m2371_6(unknown) = ^CallSideEffect : ~m2371_3 -# 2371| m2371_7(unknown) = Chi : total:m2371_3, partial:m2371_6 -# 2371| m2371_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2371_1 -# 2371| m2371_9(unknown) = Chi : total:m2371_7, partial:m2371_8 +# 2371| mu2371_2(String) = Uninitialized[s] : &:r2371_1 +# 2371| r2371_3(glval) = FunctionAddress[String] : +# 2371| v2371_4(void) = Call[String] : func:r2371_3, this:r2371_1 +# 2371| mu2371_5(unknown) = ^CallSideEffect : ~m? +# 2371| mu2371_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2371_1 # 2372| r2372_1(glval) = VariableAddress[b] : -# 2372| r2372_2(bool) = Load[b] : &:r2372_1, m2370_6 +# 2372| r2372_2(bool) = Load[b] : &:r2372_1, m2370_5 # 2372| v2372_3(void) = ConditionalBranch : r2372_2 #-----| False -> Block 3 #-----| True -> Block 2 # 2370| Block 1 -# 2370| m2370_7(unknown) = Phi : from 2:~m2376_8, from 3:~m2376_16 -# 2370| m2370_8(int) = Phi : from 2:m2373_3, from 3:m2375_3 -# 2370| r2370_9(glval) = VariableAddress[#return] : -# 2370| v2370_10(void) = ReturnValue : &:r2370_9, m2370_8 -# 2370| v2370_11(void) = AliasedUse : ~m2370_7 -# 2370| v2370_12(void) = ExitFunction : +# 2370| m2370_6(int) = Phi : from 2:m2373_3, from 3:m2375_3 +# 2370| r2370_7(glval) = VariableAddress[#return] : +# 2370| v2370_8(void) = ReturnValue : &:r2370_7, m2370_6 +# 2370| v2370_9(void) = AliasedUse : ~m? +# 2370| v2370_10(void) = ExitFunction : # 2373| Block 2 # 2373| r2373_1(glval) = VariableAddress[#return] : @@ -18243,146 +16537,125 @@ ir.cpp: # 2376| r2376_1(glval) = VariableAddress[s] : # 2376| r2376_2(glval) = FunctionAddress[~String] : # 2376| v2376_3(void) = Call[~String] : func:r2376_2, this:r2376_1 -# 2376| m2376_4(unknown) = ^CallSideEffect : ~m2371_9 -# 2376| m2376_5(unknown) = Chi : total:m2371_9, partial:m2376_4 -# 2376| v2376_6(void) = ^IndirectReadSideEffect[-1] : &:r2376_1, ~m2376_5 -# 2376| m2376_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_1 -# 2376| m2376_8(unknown) = Chi : total:m2376_5, partial:m2376_7 +# 2376| mu2376_4(unknown) = ^CallSideEffect : ~m? +# 2376| v2376_5(void) = ^IndirectReadSideEffect[-1] : &:r2376_1, ~m? +# 2376| mu2376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_1 #-----| Goto -> Block 1 # 2375| Block 3 -# 2375| r2375_1(glval) = VariableAddress[#return] : -# 2375| r2375_2(int) = Constant[0] : -# 2375| m2375_3(int) = Store[#return] : &:r2375_1, r2375_2 -# 2376| r2376_9(glval) = VariableAddress[s] : -# 2376| r2376_10(glval) = FunctionAddress[~String] : -# 2376| v2376_11(void) = Call[~String] : func:r2376_10, this:r2376_9 -# 2376| m2376_12(unknown) = ^CallSideEffect : ~m2371_9 -# 2376| m2376_13(unknown) = Chi : total:m2371_9, partial:m2376_12 -# 2376| v2376_14(void) = ^IndirectReadSideEffect[-1] : &:r2376_9, ~m2376_13 -# 2376| m2376_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_9 -# 2376| m2376_16(unknown) = Chi : total:m2376_13, partial:m2376_15 +# 2375| r2375_1(glval) = VariableAddress[#return] : +# 2375| r2375_2(int) = Constant[0] : +# 2375| m2375_3(int) = Store[#return] : &:r2375_1, r2375_2 +# 2376| r2376_7(glval) = VariableAddress[s] : +# 2376| r2376_8(glval) = FunctionAddress[~String] : +# 2376| v2376_9(void) = Call[~String] : func:r2376_8, this:r2376_7 +# 2376| mu2376_10(unknown) = ^CallSideEffect : ~m? +# 2376| v2376_11(void) = ^IndirectReadSideEffect[-1] : &:r2376_7, ~m? +# 2376| mu2376_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_7 #-----| Goto -> Block 1 # 2378| void VoidReturnDestructors() # 2378| Block 0 # 2378| v2378_1(void) = EnterFunction : -# 2378| m2378_2(unknown) = AliasedDefinition : -# 2378| m2378_3(unknown) = InitializeNonLocal : -# 2378| m2378_4(unknown) = Chi : total:m2378_2, partial:m2378_3 +# 2378| mu2378_2(unknown) = AliasedDefinition : +# 2378| mu2378_3(unknown) = InitializeNonLocal : # 2379| r2379_1(glval) = VariableAddress[s] : -# 2379| m2379_2(String) = Uninitialized[s] : &:r2379_1 -# 2379| m2379_3(unknown) = Chi : total:m2378_4, partial:m2379_2 -# 2379| r2379_4(glval) = FunctionAddress[String] : -# 2379| v2379_5(void) = Call[String] : func:r2379_4, this:r2379_1 -# 2379| m2379_6(unknown) = ^CallSideEffect : ~m2379_3 -# 2379| m2379_7(unknown) = Chi : total:m2379_3, partial:m2379_6 -# 2379| m2379_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2379_1 -# 2379| m2379_9(unknown) = Chi : total:m2379_7, partial:m2379_8 +# 2379| mu2379_2(String) = Uninitialized[s] : &:r2379_1 +# 2379| r2379_3(glval) = FunctionAddress[String] : +# 2379| v2379_4(void) = Call[String] : func:r2379_3, this:r2379_1 +# 2379| mu2379_5(unknown) = ^CallSideEffect : ~m? +# 2379| mu2379_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2379_1 # 2380| r2380_1(glval) = FunctionAddress[VoidFunc] : # 2380| v2380_2(void) = Call[VoidFunc] : func:r2380_1 -# 2380| m2380_3(unknown) = ^CallSideEffect : ~m2379_9 -# 2380| m2380_4(unknown) = Chi : total:m2379_9, partial:m2380_3 -# 2380| v2380_5(void) = NoOp : +# 2380| mu2380_3(unknown) = ^CallSideEffect : ~m? +# 2380| v2380_4(void) = NoOp : # 2381| r2381_1(glval) = VariableAddress[s] : # 2381| r2381_2(glval) = FunctionAddress[~String] : # 2381| v2381_3(void) = Call[~String] : func:r2381_2, this:r2381_1 -# 2381| m2381_4(unknown) = ^CallSideEffect : ~m2380_4 -# 2381| m2381_5(unknown) = Chi : total:m2380_4, partial:m2381_4 -# 2381| v2381_6(void) = ^IndirectReadSideEffect[-1] : &:r2381_1, ~m2381_5 -# 2381| m2381_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2381_1 -# 2381| m2381_8(unknown) = Chi : total:m2381_5, partial:m2381_7 -# 2378| v2378_5(void) = ReturnVoid : -# 2378| v2378_6(void) = AliasedUse : ~m2381_5 -# 2378| v2378_7(void) = ExitFunction : +# 2381| mu2381_4(unknown) = ^CallSideEffect : ~m? +# 2381| v2381_5(void) = ^IndirectReadSideEffect[-1] : &:r2381_1, ~m? +# 2381| mu2381_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2381_1 +# 2378| v2378_4(void) = ReturnVoid : +# 2378| v2378_5(void) = AliasedUse : ~m? +# 2378| v2378_6(void) = ExitFunction : # 2391| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() # 2391| Block 0 # 2391| v2391_1(void) = EnterFunction : -# 2391| m2391_2(unknown) = AliasedDefinition : -# 2391| m2391_3(unknown) = InitializeNonLocal : -# 2391| m2391_4(unknown) = Chi : total:m2391_2, partial:m2391_3 +# 2391| mu2391_2(unknown) = AliasedDefinition : +# 2391| mu2391_3(unknown) = InitializeNonLocal : # 2393| r2393_1(glval<..:: *>) = VariableAddress[#return] : # 2393| r2393_2(..()(..)) = FunctionAddress[VoidToInt] : # 2393| m2393_3(..:: *) = Store[#return] : &:r2393_1, r2393_2 -# 2391| r2391_5(glval<..:: *>) = VariableAddress[#return] : -# 2391| v2391_6(void) = ReturnValue : &:r2391_5, m2393_3 -# 2391| v2391_7(void) = AliasedUse : m2391_3 -# 2391| v2391_8(void) = ExitFunction : +# 2391| r2391_4(glval<..:: *>) = VariableAddress[#return] : +# 2391| v2391_5(void) = ReturnValue : &:r2391_4, m2393_3 +# 2391| v2391_6(void) = AliasedUse : ~m? +# 2391| v2391_7(void) = ExitFunction : # 2398| int small_operation_should_not_be_constant_folded() # 2398| Block 0 # 2398| v2398_1(void) = EnterFunction : -# 2398| m2398_2(unknown) = AliasedDefinition : -# 2398| m2398_3(unknown) = InitializeNonLocal : -# 2398| m2398_4(unknown) = Chi : total:m2398_2, partial:m2398_3 +# 2398| mu2398_2(unknown) = AliasedDefinition : +# 2398| mu2398_3(unknown) = InitializeNonLocal : # 2399| r2399_1(glval) = VariableAddress[#return] : # 2399| r2399_2(int) = Constant[1] : # 2399| r2399_3(int) = Constant[2] : # 2399| r2399_4(int) = BitXor : r2399_2, r2399_3 # 2399| m2399_5(int) = Store[#return] : &:r2399_1, r2399_4 -# 2398| r2398_5(glval) = VariableAddress[#return] : -# 2398| v2398_6(void) = ReturnValue : &:r2398_5, m2399_5 -# 2398| v2398_7(void) = AliasedUse : m2398_3 -# 2398| v2398_8(void) = ExitFunction : +# 2398| r2398_4(glval) = VariableAddress[#return] : +# 2398| v2398_5(void) = ReturnValue : &:r2398_4, m2399_5 +# 2398| v2398_6(void) = AliasedUse : ~m? +# 2398| v2398_7(void) = ExitFunction : # 2409| int large_operation_should_be_constant_folded() # 2409| Block 0 # 2409| v2409_1(void) = EnterFunction : -# 2409| m2409_2(unknown) = AliasedDefinition : -# 2409| m2409_3(unknown) = InitializeNonLocal : -# 2409| m2409_4(unknown) = Chi : total:m2409_2, partial:m2409_3 +# 2409| mu2409_2(unknown) = AliasedDefinition : +# 2409| mu2409_3(unknown) = InitializeNonLocal : # 2410| r2410_1(glval) = VariableAddress[#return] : # 2410| r2410_2(int) = Constant[0] : # 2410| m2410_3(int) = Store[#return] : &:r2410_1, r2410_2 -# 2409| r2409_5(glval) = VariableAddress[#return] : -# 2409| v2409_6(void) = ReturnValue : &:r2409_5, m2410_3 -# 2409| v2409_7(void) = AliasedUse : m2409_3 -# 2409| v2409_8(void) = ExitFunction : +# 2409| r2409_4(glval) = VariableAddress[#return] : +# 2409| v2409_5(void) = ReturnValue : &:r2409_4, m2410_3 +# 2409| v2409_6(void) = AliasedUse : ~m? +# 2409| v2409_7(void) = ExitFunction : # 2413| void initialization_with_temp_destructor() # 2413| Block 0 # 2413| v2413_1(void) = EnterFunction : -# 2413| m2413_2(unknown) = AliasedDefinition : -# 2413| m2413_3(unknown) = InitializeNonLocal : -# 2413| m2413_4(unknown) = Chi : total:m2413_2, partial:m2413_3 +# 2413| mu2413_2(unknown) = AliasedDefinition : +# 2413| mu2413_3(unknown) = InitializeNonLocal : # 2414| r2414_1(glval) = VariableAddress[x] : # 2414| r2414_2(glval) = VariableAddress[#temp2414:18] : -# 2414| m2414_3(ClassWithDestructor) = Uninitialized[#temp2414:18] : &:r2414_2 +# 2414| mu2414_3(ClassWithDestructor) = Uninitialized[#temp2414:18] : &:r2414_2 # 2414| r2414_4(glval) = FunctionAddress[ClassWithDestructor] : # 2414| v2414_5(void) = Call[ClassWithDestructor] : func:r2414_4, this:r2414_2 -# 2414| m2414_6(unknown) = ^CallSideEffect : ~m2413_4 -# 2414| m2414_7(unknown) = Chi : total:m2413_4, partial:m2414_6 -# 2414| m2414_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 -# 2414| m2414_9(ClassWithDestructor) = Chi : total:m2414_3, partial:m2414_8 -# 2414| r2414_10(glval) = FunctionAddress[get_x] : -# 2414| r2414_11(char) = Call[get_x] : func:r2414_10, this:r2414_2 -# 2414| m2414_12(unknown) = ^CallSideEffect : ~m2414_7 -# 2414| m2414_13(unknown) = Chi : total:m2414_7, partial:m2414_12 -# 2414| v2414_14(void) = ^IndirectReadSideEffect[-1] : &:r2414_2, m2414_9 -# 2414| m2414_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 -# 2414| m2414_16(ClassWithDestructor) = Chi : total:m2414_9, partial:m2414_15 -# 2414| r2414_17(glval) = CopyValue : r2414_2 -# 2414| r2414_18(glval) = FunctionAddress[~ClassWithDestructor] : -# 2414| v2414_19(void) = Call[~ClassWithDestructor] : func:r2414_18, this:r2414_17 -# 2414| m2414_20(unknown) = ^CallSideEffect : ~m2414_13 -# 2414| m2414_21(unknown) = Chi : total:m2414_13, partial:m2414_20 -# 2414| v2414_22(void) = ^IndirectReadSideEffect[-1] : &:r2414_17, m2414_16 -# 2414| m2414_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_17 -# 2414| m2414_24(ClassWithDestructor) = Chi : total:m2414_16, partial:m2414_23 -# 2414| m2414_25(char) = Store[x] : &:r2414_1, r2414_11 -# 2414| r2414_26(glval) = VariableAddress[x] : -# 2414| r2414_27(char) = Load[x] : &:r2414_26, m2414_25 -# 2414| r2414_28(char) = Constant[0] : -# 2414| r2414_29(bool) = CompareNE : r2414_27, r2414_28 -# 2414| r2414_30(bool) = CopyValue : r2414_29 -# 2414| v2414_31(void) = ConditionalBranch : r2414_30 +# 2414| mu2414_6(unknown) = ^CallSideEffect : ~m? +# 2414| mu2414_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| r2414_8(glval) = FunctionAddress[get_x] : +# 2414| r2414_9(char) = Call[get_x] : func:r2414_8, this:r2414_2 +# 2414| mu2414_10(unknown) = ^CallSideEffect : ~m? +# 2414| v2414_11(void) = ^IndirectReadSideEffect[-1] : &:r2414_2, ~m? +# 2414| mu2414_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| r2414_13(glval) = CopyValue : r2414_2 +# 2414| r2414_14(glval) = FunctionAddress[~ClassWithDestructor] : +# 2414| v2414_15(void) = Call[~ClassWithDestructor] : func:r2414_14, this:r2414_13 +# 2414| mu2414_16(unknown) = ^CallSideEffect : ~m? +# 2414| v2414_17(void) = ^IndirectReadSideEffect[-1] : &:r2414_13, ~m? +# 2414| mu2414_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_13 +# 2414| m2414_19(char) = Store[x] : &:r2414_1, r2414_9 +# 2414| r2414_20(glval) = VariableAddress[x] : +# 2414| r2414_21(char) = Load[x] : &:r2414_20, m2414_19 +# 2414| r2414_22(char) = Constant[0] : +# 2414| r2414_23(bool) = CompareNE : r2414_21, r2414_22 +# 2414| r2414_24(bool) = CopyValue : r2414_23 +# 2414| v2414_25(void) = ConditionalBranch : r2414_24 #-----| False -> Block 2 #-----| True -> Block 1 # 2415| Block 1 # 2415| r2415_1(glval) = VariableAddress[x] : -# 2415| r2415_2(char) = Load[x] : &:r2415_1, m2414_25 +# 2415| r2415_2(char) = Load[x] : &:r2415_1, m2414_19 # 2415| r2415_3(char) = Constant[1] : # 2415| r2415_4(char) = Add : r2415_2, r2415_3 # 2415| m2415_5(char) = Store[x] : &:r2415_1, r2415_4 @@ -18391,40 +16664,34 @@ ir.cpp: # 2417| Block 2 # 2417| r2417_1(glval) = VariableAddress[x] : # 2417| r2417_2(glval) = VariableAddress[#temp2417:18] : -# 2417| m2417_3(ClassWithDestructor) = Uninitialized[#temp2417:18] : &:r2417_2 +# 2417| mu2417_3(ClassWithDestructor) = Uninitialized[#temp2417:18] : &:r2417_2 # 2417| r2417_4(glval) = FunctionAddress[ClassWithDestructor] : # 2417| v2417_5(void) = Call[ClassWithDestructor] : func:r2417_4, this:r2417_2 -# 2417| m2417_6(unknown) = ^CallSideEffect : ~m2414_21 -# 2417| m2417_7(unknown) = Chi : total:m2414_21, partial:m2417_6 -# 2417| m2417_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 -# 2417| m2417_9(ClassWithDestructor) = Chi : total:m2417_3, partial:m2417_8 -# 2417| r2417_10(glval) = FunctionAddress[get_x] : -# 2417| r2417_11(char) = Call[get_x] : func:r2417_10, this:r2417_2 -# 2417| m2417_12(unknown) = ^CallSideEffect : ~m2417_7 -# 2417| m2417_13(unknown) = Chi : total:m2417_7, partial:m2417_12 -# 2417| v2417_14(void) = ^IndirectReadSideEffect[-1] : &:r2417_2, m2417_9 -# 2417| m2417_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 -# 2417| m2417_16(ClassWithDestructor) = Chi : total:m2417_9, partial:m2417_15 -# 2417| r2417_17(glval) = CopyValue : r2417_2 -# 2417| r2417_18(glval) = FunctionAddress[~ClassWithDestructor] : -# 2417| v2417_19(void) = Call[~ClassWithDestructor] : func:r2417_18, this:r2417_17 -# 2417| m2417_20(unknown) = ^CallSideEffect : ~m2417_13 -# 2417| m2417_21(unknown) = Chi : total:m2417_13, partial:m2417_20 -# 2417| v2417_22(void) = ^IndirectReadSideEffect[-1] : &:r2417_17, m2417_16 -# 2417| m2417_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_17 -# 2417| m2417_24(ClassWithDestructor) = Chi : total:m2417_16, partial:m2417_23 -# 2417| m2417_25(char) = Store[x] : &:r2417_1, r2417_11 -# 2417| r2417_26(glval) = VariableAddress[x] : -# 2417| r2417_27(char) = Load[x] : &:r2417_26, m2417_25 -# 2417| r2417_28(char) = Constant[0] : -# 2417| r2417_29(bool) = CompareNE : r2417_27, r2417_28 -# 2417| v2417_30(void) = ConditionalBranch : r2417_29 +# 2417| mu2417_6(unknown) = ^CallSideEffect : ~m? +# 2417| mu2417_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| r2417_8(glval) = FunctionAddress[get_x] : +# 2417| r2417_9(char) = Call[get_x] : func:r2417_8, this:r2417_2 +# 2417| mu2417_10(unknown) = ^CallSideEffect : ~m? +# 2417| v2417_11(void) = ^IndirectReadSideEffect[-1] : &:r2417_2, ~m? +# 2417| mu2417_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| r2417_13(glval) = CopyValue : r2417_2 +# 2417| r2417_14(glval) = FunctionAddress[~ClassWithDestructor] : +# 2417| v2417_15(void) = Call[~ClassWithDestructor] : func:r2417_14, this:r2417_13 +# 2417| mu2417_16(unknown) = ^CallSideEffect : ~m? +# 2417| v2417_17(void) = ^IndirectReadSideEffect[-1] : &:r2417_13, ~m? +# 2417| mu2417_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_13 +# 2417| m2417_19(char) = Store[x] : &:r2417_1, r2417_9 +# 2417| r2417_20(glval) = VariableAddress[x] : +# 2417| r2417_21(char) = Load[x] : &:r2417_20, m2417_19 +# 2417| r2417_22(char) = Constant[0] : +# 2417| r2417_23(bool) = CompareNE : r2417_21, r2417_22 +# 2417| v2417_24(void) = ConditionalBranch : r2417_23 #-----| False -> Block 4 #-----| True -> Block 3 # 2418| Block 3 # 2418| r2418_1(glval) = VariableAddress[x] : -# 2418| r2418_2(char) = Load[x] : &:r2418_1, m2417_25 +# 2418| r2418_2(char) = Load[x] : &:r2418_1, m2417_19 # 2418| r2418_3(char) = Constant[1] : # 2418| r2418_4(char) = Add : r2418_2, r2418_3 # 2418| m2418_5(char) = Store[x] : &:r2418_1, r2418_4 @@ -18433,77 +16700,65 @@ ir.cpp: # 2420| Block 4 # 2420| r2420_1(glval) = VariableAddress[x] : # 2420| r2420_2(glval) = VariableAddress[#temp2420:28] : -# 2420| m2420_3(ClassWithDestructor) = Uninitialized[#temp2420:28] : &:r2420_2 +# 2420| mu2420_3(ClassWithDestructor) = Uninitialized[#temp2420:28] : &:r2420_2 # 2420| r2420_4(glval) = FunctionAddress[ClassWithDestructor] : # 2420| v2420_5(void) = Call[ClassWithDestructor] : func:r2420_4, this:r2420_2 -# 2420| m2420_6(unknown) = ^CallSideEffect : ~m2417_21 -# 2420| m2420_7(unknown) = Chi : total:m2417_21, partial:m2420_6 -# 2420| m2420_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 -# 2420| m2420_9(ClassWithDestructor) = Chi : total:m2420_3, partial:m2420_8 -# 2420| r2420_10(glval) = FunctionAddress[get_x] : -# 2420| r2420_11(char) = Call[get_x] : func:r2420_10, this:r2420_2 -# 2420| m2420_12(unknown) = ^CallSideEffect : ~m2420_7 -# 2420| m2420_13(unknown) = Chi : total:m2420_7, partial:m2420_12 -# 2420| v2420_14(void) = ^IndirectReadSideEffect[-1] : &:r2420_2, m2420_9 -# 2420| m2420_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 -# 2420| m2420_16(ClassWithDestructor) = Chi : total:m2420_9, partial:m2420_15 -# 2420| r2420_17(glval) = CopyValue : r2420_2 -# 2420| r2420_18(glval) = FunctionAddress[~ClassWithDestructor] : -# 2420| v2420_19(void) = Call[~ClassWithDestructor] : func:r2420_18, this:r2420_17 -# 2420| m2420_20(unknown) = ^CallSideEffect : ~m2420_13 -# 2420| m2420_21(unknown) = Chi : total:m2420_13, partial:m2420_20 -# 2420| v2420_22(void) = ^IndirectReadSideEffect[-1] : &:r2420_17, m2420_16 -# 2420| m2420_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_17 -# 2420| m2420_24(ClassWithDestructor) = Chi : total:m2420_16, partial:m2420_23 -# 2420| m2420_25(char) = Store[x] : &:r2420_1, r2420_11 -# 2420| r2420_26(bool) = Constant[1] : -# 2420| v2420_27(void) = ConditionalBranch : r2420_26 +# 2420| mu2420_6(unknown) = ^CallSideEffect : ~m? +# 2420| mu2420_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| r2420_8(glval) = FunctionAddress[get_x] : +# 2420| r2420_9(char) = Call[get_x] : func:r2420_8, this:r2420_2 +# 2420| mu2420_10(unknown) = ^CallSideEffect : ~m? +# 2420| v2420_11(void) = ^IndirectReadSideEffect[-1] : &:r2420_2, ~m? +# 2420| mu2420_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| r2420_13(glval) = CopyValue : r2420_2 +# 2420| r2420_14(glval) = FunctionAddress[~ClassWithDestructor] : +# 2420| v2420_15(void) = Call[~ClassWithDestructor] : func:r2420_14, this:r2420_13 +# 2420| mu2420_16(unknown) = ^CallSideEffect : ~m? +# 2420| v2420_17(void) = ^IndirectReadSideEffect[-1] : &:r2420_13, ~m? +# 2420| mu2420_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_13 +# 2420| m2420_19(char) = Store[x] : &:r2420_1, r2420_9 +# 2420| r2420_20(bool) = Constant[1] : +# 2420| v2420_21(void) = ConditionalBranch : r2420_20 #-----| False -> Block 13 #-----| True -> Block 5 # 2421| Block 5 # 2421| r2421_1(glval) = VariableAddress[x] : -# 2421| r2421_2(char) = Load[x] : &:r2421_1, m2420_25 +# 2421| r2421_2(char) = Load[x] : &:r2421_1, m2420_19 # 2421| r2421_3(char) = Constant[1] : # 2421| r2421_4(char) = Add : r2421_2, r2421_3 # 2421| m2421_5(char) = Store[x] : &:r2421_1, r2421_4 # 2423| r2423_1(glval) = VariableAddress[x] : # 2423| r2423_2(glval) = VariableAddress[#temp2423:21] : -# 2423| m2423_3(ClassWithDestructor) = Uninitialized[#temp2423:21] : &:r2423_2 +# 2423| mu2423_3(ClassWithDestructor) = Uninitialized[#temp2423:21] : &:r2423_2 # 2423| r2423_4(glval) = FunctionAddress[ClassWithDestructor] : # 2423| v2423_5(void) = Call[ClassWithDestructor] : func:r2423_4, this:r2423_2 -# 2423| m2423_6(unknown) = ^CallSideEffect : ~m2420_21 -# 2423| m2423_7(unknown) = Chi : total:m2420_21, partial:m2423_6 -# 2423| m2423_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2423_2 -# 2423| m2423_9(ClassWithDestructor) = Chi : total:m2423_3, partial:m2423_8 -# 2423| r2423_10(glval) = FunctionAddress[get_x] : -# 2423| r2423_11(char) = Call[get_x] : func:r2423_10, this:r2423_2 -# 2423| m2423_12(unknown) = ^CallSideEffect : ~m2423_7 -# 2423| m2423_13(unknown) = Chi : total:m2423_7, partial:m2423_12 -# 2423| v2423_14(void) = ^IndirectReadSideEffect[-1] : &:r2423_2, m2423_9 -# 2423| m2423_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2423_2 -# 2423| m2423_16(ClassWithDestructor) = Chi : total:m2423_9, partial:m2423_15 -# 2423| r2423_17(glval) = CopyValue : r2423_2 -# 2423| r2423_18(glval) = FunctionAddress[~ClassWithDestructor] : -# 2423| v2423_19(void) = Call[~ClassWithDestructor] : func:r2423_18, this:r2423_17 -# 2423| m2423_20(unknown) = ^CallSideEffect : ~m2423_13 -# 2423| m2423_21(unknown) = Chi : total:m2423_13, partial:m2423_20 -# 2423| v2423_22(void) = ^IndirectReadSideEffect[-1] : &:r2423_17, m2423_16 -# 2423| m2423_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2423_17 -# 2423| m2423_24(ClassWithDestructor) = Chi : total:m2423_16, partial:m2423_23 -# 2423| m2423_25(char) = Store[x] : &:r2423_1, r2423_11 -# 2423| r2423_26(glval) = VariableAddress[x] : -# 2423| r2423_27(char) = Load[x] : &:r2423_26, m2423_25 -# 2423| r2423_28(int) = Convert : r2423_27 -# 2423| r2423_29(int) = CopyValue : r2423_28 -# 2423| v2423_30(void) = Switch : r2423_29 +# 2423| mu2423_6(unknown) = ^CallSideEffect : ~m? +# 2423| mu2423_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2423_2 +# 2423| r2423_8(glval) = FunctionAddress[get_x] : +# 2423| r2423_9(char) = Call[get_x] : func:r2423_8, this:r2423_2 +# 2423| mu2423_10(unknown) = ^CallSideEffect : ~m? +# 2423| v2423_11(void) = ^IndirectReadSideEffect[-1] : &:r2423_2, ~m? +# 2423| mu2423_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2423_2 +# 2423| r2423_13(glval) = CopyValue : r2423_2 +# 2423| r2423_14(glval) = FunctionAddress[~ClassWithDestructor] : +# 2423| v2423_15(void) = Call[~ClassWithDestructor] : func:r2423_14, this:r2423_13 +# 2423| mu2423_16(unknown) = ^CallSideEffect : ~m? +# 2423| v2423_17(void) = ^IndirectReadSideEffect[-1] : &:r2423_13, ~m? +# 2423| mu2423_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2423_13 +# 2423| m2423_19(char) = Store[x] : &:r2423_1, r2423_9 +# 2423| r2423_20(glval) = VariableAddress[x] : +# 2423| r2423_21(char) = Load[x] : &:r2423_20, m2423_19 +# 2423| r2423_22(int) = Convert : r2423_21 +# 2423| r2423_23(int) = CopyValue : r2423_22 +# 2423| v2423_24(void) = Switch : r2423_23 #-----| Case[97] -> Block 6 #-----| Default -> Block 7 # 2424| Block 6 # 2424| v2424_1(void) = NoOp : # 2425| r2425_1(glval) = VariableAddress[x] : -# 2425| r2425_2(char) = Load[x] : &:r2425_1, m2423_25 +# 2425| r2425_2(char) = Load[x] : &:r2425_1, m2423_19 # 2425| r2425_3(char) = Constant[1] : # 2425| r2425_4(char) = Add : r2425_2, r2425_3 # 2425| m2425_5(char) = Store[x] : &:r2425_1, r2425_4 @@ -18512,40 +16767,34 @@ ir.cpp: # 2428| Block 7 # 2428| r2428_1(glval) = VariableAddress[x] : # 2428| r2428_2(glval) = VariableAddress[#temp2428:21] : -# 2428| m2428_3(ClassWithDestructor) = Uninitialized[#temp2428:21] : &:r2428_2 +# 2428| mu2428_3(ClassWithDestructor) = Uninitialized[#temp2428:21] : &:r2428_2 # 2428| r2428_4(glval) = FunctionAddress[ClassWithDestructor] : # 2428| v2428_5(void) = Call[ClassWithDestructor] : func:r2428_4, this:r2428_2 -# 2428| m2428_6(unknown) = ^CallSideEffect : ~m2423_21 -# 2428| m2428_7(unknown) = Chi : total:m2423_21, partial:m2428_6 -# 2428| m2428_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2428_2 -# 2428| m2428_9(ClassWithDestructor) = Chi : total:m2428_3, partial:m2428_8 -# 2428| r2428_10(glval) = FunctionAddress[get_x] : -# 2428| r2428_11(char) = Call[get_x] : func:r2428_10, this:r2428_2 -# 2428| m2428_12(unknown) = ^CallSideEffect : ~m2428_7 -# 2428| m2428_13(unknown) = Chi : total:m2428_7, partial:m2428_12 -# 2428| v2428_14(void) = ^IndirectReadSideEffect[-1] : &:r2428_2, m2428_9 -# 2428| m2428_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2428_2 -# 2428| m2428_16(ClassWithDestructor) = Chi : total:m2428_9, partial:m2428_15 -# 2428| r2428_17(glval) = CopyValue : r2428_2 -# 2428| r2428_18(glval) = FunctionAddress[~ClassWithDestructor] : -# 2428| v2428_19(void) = Call[~ClassWithDestructor] : func:r2428_18, this:r2428_17 -# 2428| m2428_20(unknown) = ^CallSideEffect : ~m2428_13 -# 2428| m2428_21(unknown) = Chi : total:m2428_13, partial:m2428_20 -# 2428| v2428_22(void) = ^IndirectReadSideEffect[-1] : &:r2428_17, m2428_16 -# 2428| m2428_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2428_17 -# 2428| m2428_24(ClassWithDestructor) = Chi : total:m2428_16, partial:m2428_23 -# 2428| m2428_25(char) = Store[x] : &:r2428_1, r2428_11 -# 2428| r2428_26(glval) = VariableAddress[x] : -# 2428| r2428_27(char) = Load[x] : &:r2428_26, m2428_25 -# 2428| r2428_28(int) = Convert : r2428_27 -# 2428| v2428_29(void) = Switch : r2428_28 +# 2428| mu2428_6(unknown) = ^CallSideEffect : ~m? +# 2428| mu2428_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2428_2 +# 2428| r2428_8(glval) = FunctionAddress[get_x] : +# 2428| r2428_9(char) = Call[get_x] : func:r2428_8, this:r2428_2 +# 2428| mu2428_10(unknown) = ^CallSideEffect : ~m? +# 2428| v2428_11(void) = ^IndirectReadSideEffect[-1] : &:r2428_2, ~m? +# 2428| mu2428_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2428_2 +# 2428| r2428_13(glval) = CopyValue : r2428_2 +# 2428| r2428_14(glval) = FunctionAddress[~ClassWithDestructor] : +# 2428| v2428_15(void) = Call[~ClassWithDestructor] : func:r2428_14, this:r2428_13 +# 2428| mu2428_16(unknown) = ^CallSideEffect : ~m? +# 2428| v2428_17(void) = ^IndirectReadSideEffect[-1] : &:r2428_13, ~m? +# 2428| mu2428_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2428_13 +# 2428| m2428_19(char) = Store[x] : &:r2428_1, r2428_9 +# 2428| r2428_20(glval) = VariableAddress[x] : +# 2428| r2428_21(char) = Load[x] : &:r2428_20, m2428_19 +# 2428| r2428_22(int) = Convert : r2428_21 +# 2428| v2428_23(void) = Switch : r2428_22 #-----| Case[97] -> Block 8 #-----| Default -> Block 9 # 2429| Block 8 # 2429| v2429_1(void) = NoOp : # 2430| r2430_1(glval) = VariableAddress[x] : -# 2430| r2430_2(char) = Load[x] : &:r2430_1, m2428_25 +# 2430| r2430_2(char) = Load[x] : &:r2430_1, m2428_19 # 2430| r2430_3(char) = Constant[1] : # 2430| r2430_4(char) = Add : r2430_2, r2430_3 # 2430| m2430_5(char) = Store[x] : &:r2430_1, r2430_4 @@ -18554,402 +16803,348 @@ ir.cpp: # 2433| Block 9 # 2433| r2433_1(glval) = VariableAddress[x] : # 2433| r2433_2(glval) = VariableAddress[#temp2433:18] : -# 2433| m2433_3(ClassWithDestructor) = Uninitialized[#temp2433:18] : &:r2433_2 +# 2433| mu2433_3(ClassWithDestructor) = Uninitialized[#temp2433:18] : &:r2433_2 # 2433| r2433_4(glval) = FunctionAddress[ClassWithDestructor] : # 2433| v2433_5(void) = Call[ClassWithDestructor] : func:r2433_4, this:r2433_2 -# 2433| m2433_6(unknown) = ^CallSideEffect : ~m2428_21 -# 2433| m2433_7(unknown) = Chi : total:m2428_21, partial:m2433_6 -# 2433| m2433_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2433_2 -# 2433| m2433_9(ClassWithDestructor) = Chi : total:m2433_3, partial:m2433_8 -# 2433| r2433_10(glval) = FunctionAddress[get_x] : -# 2433| r2433_11(char) = Call[get_x] : func:r2433_10, this:r2433_2 -# 2433| m2433_12(unknown) = ^CallSideEffect : ~m2433_7 -# 2433| m2433_13(unknown) = Chi : total:m2433_7, partial:m2433_12 -# 2433| v2433_14(void) = ^IndirectReadSideEffect[-1] : &:r2433_2, m2433_9 -# 2433| m2433_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2433_2 -# 2433| m2433_16(ClassWithDestructor) = Chi : total:m2433_9, partial:m2433_15 -# 2433| r2433_17(glval) = CopyValue : r2433_2 -# 2433| r2433_18(glval) = FunctionAddress[~ClassWithDestructor] : -# 2433| v2433_19(void) = Call[~ClassWithDestructor] : func:r2433_18, this:r2433_17 -# 2433| m2433_20(unknown) = ^CallSideEffect : ~m2433_13 -# 2433| m2433_21(unknown) = Chi : total:m2433_13, partial:m2433_20 -# 2433| v2433_22(void) = ^IndirectReadSideEffect[-1] : &:r2433_17, m2433_16 -# 2433| m2433_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2433_17 -# 2433| m2433_24(ClassWithDestructor) = Chi : total:m2433_16, partial:m2433_23 -# 2433| m2433_25(char) = Store[x] : &:r2433_1, r2433_11 -# 2433| r2433_26(glval &&>) = VariableAddress[(__range)] : -# 2433| r2433_27(glval>) = VariableAddress[#temp2433:58] : -# 2433| m2433_28(vector) = Uninitialized[#temp2433:58] : &:r2433_27 -# 2433| r2433_29(glval) = FunctionAddress[vector] : -# 2433| r2433_30(glval) = VariableAddress[x] : -# 2433| r2433_31(char) = Load[x] : &:r2433_30, m2433_25 -# 2433| v2433_32(void) = Call[vector] : func:r2433_29, this:r2433_27, 0:r2433_31 -# 2433| m2433_33(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2433_27 -# 2433| r2433_34(vector &) = CopyValue : r2433_27 -# 2433| m2433_35(vector &&) = Store[(__range)] : &:r2433_26, r2433_34 -# 2433| r2433_36(glval>) = VariableAddress[(__begin)] : -# 2433| r2433_37(glval &&>) = VariableAddress[(__range)] : -# 2433| r2433_38(vector &&) = Load[(__range)] : &:r2433_37, m2433_35 -#-----| r0_1(glval>) = CopyValue : r2433_38 +# 2433| mu2433_6(unknown) = ^CallSideEffect : ~m? +# 2433| mu2433_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2433_2 +# 2433| r2433_8(glval) = FunctionAddress[get_x] : +# 2433| r2433_9(char) = Call[get_x] : func:r2433_8, this:r2433_2 +# 2433| mu2433_10(unknown) = ^CallSideEffect : ~m? +# 2433| v2433_11(void) = ^IndirectReadSideEffect[-1] : &:r2433_2, ~m? +# 2433| mu2433_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2433_2 +# 2433| r2433_13(glval) = CopyValue : r2433_2 +# 2433| r2433_14(glval) = FunctionAddress[~ClassWithDestructor] : +# 2433| v2433_15(void) = Call[~ClassWithDestructor] : func:r2433_14, this:r2433_13 +# 2433| mu2433_16(unknown) = ^CallSideEffect : ~m? +# 2433| v2433_17(void) = ^IndirectReadSideEffect[-1] : &:r2433_13, ~m? +# 2433| mu2433_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2433_13 +# 2433| m2433_19(char) = Store[x] : &:r2433_1, r2433_9 +# 2433| r2433_20(glval &&>) = VariableAddress[(__range)] : +# 2433| r2433_21(glval>) = VariableAddress[#temp2433:58] : +# 2433| mu2433_22(vector) = Uninitialized[#temp2433:58] : &:r2433_21 +# 2433| r2433_23(glval) = FunctionAddress[vector] : +# 2433| r2433_24(glval) = VariableAddress[x] : +# 2433| r2433_25(char) = Load[x] : &:r2433_24, m2433_19 +# 2433| v2433_26(void) = Call[vector] : func:r2433_23, this:r2433_21, 0:r2433_25 +# 2433| mu2433_27(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2433_21 +# 2433| r2433_28(vector &) = CopyValue : r2433_21 +# 2433| m2433_29(vector &&) = Store[(__range)] : &:r2433_20, r2433_28 +# 2433| r2433_30(glval>) = VariableAddress[(__begin)] : +# 2433| r2433_31(glval &&>) = VariableAddress[(__range)] : +# 2433| r2433_32(vector &&) = Load[(__range)] : &:r2433_31, m2433_29 +#-----| r0_1(glval>) = CopyValue : r2433_32 #-----| r0_2(glval>) = Convert : r0_1 -# 2433| r2433_39(glval) = FunctionAddress[begin] : -# 2433| r2433_40(iterator) = Call[begin] : func:r2433_39, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2433_33 -# 2433| m2433_41(iterator) = Store[(__begin)] : &:r2433_36, r2433_40 -# 2433| r2433_42(glval>) = VariableAddress[(__end)] : -# 2433| r2433_43(glval &&>) = VariableAddress[(__range)] : -# 2433| r2433_44(vector &&) = Load[(__range)] : &:r2433_43, m2433_35 -#-----| r0_4(glval>) = CopyValue : r2433_44 +# 2433| r2433_33(glval) = FunctionAddress[begin] : +# 2433| r2433_34(iterator) = Call[begin] : func:r2433_33, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2433| mu2433_35(iterator) = Store[(__begin)] : &:r2433_30, r2433_34 +# 2433| r2433_36(glval>) = VariableAddress[(__end)] : +# 2433| r2433_37(glval &&>) = VariableAddress[(__range)] : +# 2433| r2433_38(vector &&) = Load[(__range)] : &:r2433_37, m2433_29 +#-----| r0_4(glval>) = CopyValue : r2433_38 #-----| r0_5(glval>) = Convert : r0_4 -# 2433| r2433_45(glval) = FunctionAddress[end] : -# 2433| r2433_46(iterator) = Call[end] : func:r2433_45, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2433_33 -# 2433| m2433_47(iterator) = Store[(__end)] : &:r2433_42, r2433_46 -# 2433| m2433_48(unknown) = Chi : total:m2433_21, partial:m2433_47 +# 2433| r2433_39(glval) = FunctionAddress[end] : +# 2433| r2433_40(iterator) = Call[end] : func:r2433_39, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2433| mu2433_41(iterator) = Store[(__end)] : &:r2433_36, r2433_40 #-----| Goto -> Block 10 # 2433| Block 10 -# 2433| m2433_49(iterator) = Phi : from 9:m2433_41, from 11:m2433_73 -# 2433| m2433_50(unknown) = Phi : from 9:~m2433_48, from 11:~m2433_59 -# 2433| r2433_51(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2433_51 -# 2433| r2433_52(glval) = FunctionAddress[operator!=] : +# 2433| r2433_42(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2433_42 +# 2433| r2433_43(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -#-----| m0_10(unknown) = Chi : total:m2433_50, partial:m0_9 -# 2433| r2433_53(glval) = FunctionAddress[iterator] : -# 2433| r2433_54(glval>) = VariableAddress[(__end)] : -#-----| r0_11(glval>) = Convert : r2433_54 -#-----| r0_12(iterator &) = CopyValue : r0_11 -# 2433| v2433_55(void) = Call[iterator] : func:r2433_53, this:r0_8, 0:r0_12 -# 2433| m2433_56(unknown) = ^CallSideEffect : ~m0_10 -# 2433| m2433_57(unknown) = Chi : total:m0_10, partial:m2433_56 -#-----| v0_13(void) = ^BufferReadSideEffect[0] : &:r0_12, ~m2433_57 -# 2433| m2433_58(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2433| m2433_59(unknown) = Chi : total:m2433_57, partial:m2433_58 -#-----| r0_14(iterator) = Load[#temp0:0] : &:r0_8, ~m2433_59 -# 2433| r2433_60(bool) = Call[operator!=] : func:r2433_52, this:r0_7, 0:r0_14 -#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2433_49 -# 2433| v2433_61(void) = ConditionalBranch : r2433_60 +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2433| r2433_44(glval) = FunctionAddress[iterator] : +# 2433| r2433_45(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2433_45 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2433| v2433_46(void) = Call[iterator] : func:r2433_44, this:r0_8, 0:r0_11 +# 2433| mu2433_47(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2433| mu2433_48(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2433| r2433_49(bool) = Call[operator!=] : func:r2433_43, this:r0_7, 0:r0_13 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2433| v2433_50(void) = ConditionalBranch : r2433_49 #-----| False -> Block 12 #-----| True -> Block 11 # 2433| Block 11 -# 2433| r2433_62(glval) = VariableAddress[y] : -# 2433| r2433_63(glval>) = VariableAddress[(__begin)] : -#-----| r0_16(glval>) = Convert : r2433_63 -# 2433| r2433_64(glval) = FunctionAddress[operator*] : -# 2433| r2433_65(char &) = Call[operator*] : func:r2433_64, this:r0_16 -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, m2433_49 -# 2433| r2433_66(char) = Load[?] : &:r2433_65, ~m2433_59 -# 2433| m2433_67(char) = Store[y] : &:r2433_62, r2433_66 +# 2433| r2433_51(glval) = VariableAddress[y] : +# 2433| r2433_52(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2433_52 +# 2433| r2433_53(glval) = FunctionAddress[operator*] : +# 2433| r2433_54(char &) = Call[operator*] : func:r2433_53, this:r0_15 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2433| r2433_55(char) = Load[?] : &:r2433_54, ~m? +# 2433| m2433_56(char) = Store[y] : &:r2433_51, r2433_55 # 2434| r2434_1(glval) = VariableAddress[x] : -# 2434| r2434_2(char) = Load[x] : &:r2434_1, m2433_25 +# 2434| r2434_2(char) = Load[x] : &:r2434_1, m2433_19 # 2434| r2434_3(int) = Convert : r2434_2 # 2434| r2434_4(glval) = VariableAddress[y] : -# 2434| r2434_5(char) = Load[y] : &:r2434_4, m2433_67 +# 2434| r2434_5(char) = Load[y] : &:r2434_4, m2433_56 # 2434| r2434_6(int) = Convert : r2434_5 # 2434| r2434_7(int) = Add : r2434_6, r2434_3 # 2434| r2434_8(char) = Convert : r2434_7 # 2434| m2434_9(char) = Store[y] : &:r2434_4, r2434_8 -# 2433| r2433_68(glval>) = VariableAddress[(__begin)] : -# 2433| r2433_69(glval) = FunctionAddress[operator++] : -# 2433| r2433_70(iterator &) = Call[operator++] : func:r2433_69, this:r2433_68 -# 2433| v2433_71(void) = ^IndirectReadSideEffect[-1] : &:r2433_68, m2433_49 -# 2433| m2433_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2433_68 -# 2433| m2433_73(iterator) = Chi : total:m2433_49, partial:m2433_72 -# 2433| r2433_74(glval>) = CopyValue : r2433_70 +# 2433| r2433_57(glval>) = VariableAddress[(__begin)] : +# 2433| r2433_58(glval) = FunctionAddress[operator++] : +# 2433| r2433_59(iterator &) = Call[operator++] : func:r2433_58, this:r2433_57 +# 2433| v2433_60(void) = ^IndirectReadSideEffect[-1] : &:r2433_57, ~m? +# 2433| mu2433_61(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2433_57 +# 2433| r2433_62(glval>) = CopyValue : r2433_59 #-----| Goto (back edge) -> Block 10 # 2433| Block 12 -# 2433| r2433_75(glval>) = CopyValue : r2433_27 -# 2433| r2433_76(glval) = FunctionAddress[~vector] : -# 2433| v2433_77(void) = Call[~vector] : func:r2433_76, this:r2433_75 -# 2433| v2433_78(void) = ^IndirectReadSideEffect[-1] : &:r2433_75, m2433_33 -# 2433| m2433_79(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2433_75 +# 2433| r2433_63(glval>) = CopyValue : r2433_21 +# 2433| r2433_64(glval) = FunctionAddress[~vector] : +# 2433| v2433_65(void) = Call[~vector] : func:r2433_64, this:r2433_63 +# 2433| v2433_66(void) = ^IndirectReadSideEffect[-1] : &:r2433_63, ~m? +# 2433| mu2433_67(vector) = ^IndirectMustWriteSideEffect[-1] : &:r2433_63 # 2435| v2435_1(void) = NoOp : -# 2413| v2413_5(void) = ReturnVoid : -# 2413| v2413_6(void) = AliasedUse : ~m2433_57 -# 2413| v2413_7(void) = ExitFunction : +# 2413| v2413_4(void) = ReturnVoid : +# 2413| v2413_5(void) = AliasedUse : ~m? +# 2413| v2413_6(void) = ExitFunction : # 2413| Block 13 -# 2413| v2413_8(void) = Unreached : +# 2413| v2413_7(void) = Unreached : # 2437| void param_with_destructor_by_value(ClassWithDestructor) # 2437| Block 0 # 2437| v2437_1(void) = EnterFunction : -# 2437| m2437_2(unknown) = AliasedDefinition : -# 2437| m2437_3(unknown) = InitializeNonLocal : -# 2437| m2437_4(unknown) = Chi : total:m2437_2, partial:m2437_3 -# 2437| r2437_5(glval) = VariableAddress[c] : -# 2437| m2437_6(ClassWithDestructor) = InitializeParameter[c] : &:r2437_5 +# 2437| mu2437_2(unknown) = AliasedDefinition : +# 2437| mu2437_3(unknown) = InitializeNonLocal : +# 2437| r2437_4(glval) = VariableAddress[c] : +# 2437| m2437_5(ClassWithDestructor) = InitializeParameter[c] : &:r2437_4 # 2439| v2439_1(void) = NoOp : -# 2437| v2437_7(void) = ReturnVoid : -# 2437| v2437_8(void) = AliasedUse : m2437_3 -# 2437| v2437_9(void) = ExitFunction : +# 2437| v2437_6(void) = ReturnVoid : +# 2437| v2437_7(void) = AliasedUse : ~m? +# 2437| v2437_8(void) = ExitFunction : # 2441| void param_with_destructor_by_pointer(ClassWithDestructor*) # 2441| Block 0 # 2441| v2441_1(void) = EnterFunction : -# 2441| m2441_2(unknown) = AliasedDefinition : -# 2441| m2441_3(unknown) = InitializeNonLocal : -# 2441| m2441_4(unknown) = Chi : total:m2441_2, partial:m2441_3 -# 2441| r2441_5(glval) = VariableAddress[c] : -# 2441| m2441_6(ClassWithDestructor *) = InitializeParameter[c] : &:r2441_5 -# 2441| r2441_7(ClassWithDestructor *) = Load[c] : &:r2441_5, m2441_6 -# 2441| m2441_8(unknown) = InitializeIndirection[c] : &:r2441_7 +# 2441| mu2441_2(unknown) = AliasedDefinition : +# 2441| mu2441_3(unknown) = InitializeNonLocal : +# 2441| r2441_4(glval) = VariableAddress[c] : +# 2441| m2441_5(ClassWithDestructor *) = InitializeParameter[c] : &:r2441_4 +# 2441| r2441_6(ClassWithDestructor *) = Load[c] : &:r2441_4, m2441_5 +# 2441| mu2441_7(unknown) = InitializeIndirection[c] : &:r2441_6 # 2443| v2443_1(void) = NoOp : -# 2441| v2441_9(void) = ReturnIndirection[c] : &:r2441_7, m2441_8 -# 2441| v2441_10(void) = ReturnVoid : -# 2441| v2441_11(void) = AliasedUse : m2441_3 -# 2441| v2441_12(void) = ExitFunction : +# 2441| v2441_8(void) = ReturnIndirection[c] : &:r2441_6, ~m? +# 2441| v2441_9(void) = ReturnVoid : +# 2441| v2441_10(void) = AliasedUse : ~m? +# 2441| v2441_11(void) = ExitFunction : # 2445| void param_with_destructor_by_ref(ClassWithDestructor&) # 2445| Block 0 # 2445| v2445_1(void) = EnterFunction : -# 2445| m2445_2(unknown) = AliasedDefinition : -# 2445| m2445_3(unknown) = InitializeNonLocal : -# 2445| m2445_4(unknown) = Chi : total:m2445_2, partial:m2445_3 -# 2445| r2445_5(glval) = VariableAddress[c] : -# 2445| m2445_6(ClassWithDestructor &) = InitializeParameter[c] : &:r2445_5 -# 2445| r2445_7(ClassWithDestructor &) = Load[c] : &:r2445_5, m2445_6 -# 2445| m2445_8(unknown) = InitializeIndirection[c] : &:r2445_7 +# 2445| mu2445_2(unknown) = AliasedDefinition : +# 2445| mu2445_3(unknown) = InitializeNonLocal : +# 2445| r2445_4(glval) = VariableAddress[c] : +# 2445| m2445_5(ClassWithDestructor &) = InitializeParameter[c] : &:r2445_4 +# 2445| r2445_6(ClassWithDestructor &) = Load[c] : &:r2445_4, m2445_5 +# 2445| mu2445_7(unknown) = InitializeIndirection[c] : &:r2445_6 # 2447| v2447_1(void) = NoOp : -# 2445| v2445_9(void) = ReturnIndirection[c] : &:r2445_7, m2445_8 -# 2445| v2445_10(void) = ReturnVoid : -# 2445| v2445_11(void) = AliasedUse : m2445_3 -# 2445| v2445_12(void) = ExitFunction : +# 2445| v2445_8(void) = ReturnIndirection[c] : &:r2445_6, ~m? +# 2445| v2445_9(void) = ReturnVoid : +# 2445| v2445_10(void) = AliasedUse : ~m? +# 2445| v2445_11(void) = ExitFunction : # 2449| void param_with_destructor_by_rref(ClassWithDestructor&&) # 2449| Block 0 # 2449| v2449_1(void) = EnterFunction : -# 2449| m2449_2(unknown) = AliasedDefinition : -# 2449| m2449_3(unknown) = InitializeNonLocal : -# 2449| m2449_4(unknown) = Chi : total:m2449_2, partial:m2449_3 -# 2449| r2449_5(glval) = VariableAddress[c] : -# 2449| m2449_6(ClassWithDestructor &&) = InitializeParameter[c] : &:r2449_5 -# 2449| r2449_7(ClassWithDestructor &&) = Load[c] : &:r2449_5, m2449_6 -# 2449| m2449_8(unknown) = InitializeIndirection[c] : &:r2449_7 +# 2449| mu2449_2(unknown) = AliasedDefinition : +# 2449| mu2449_3(unknown) = InitializeNonLocal : +# 2449| r2449_4(glval) = VariableAddress[c] : +# 2449| m2449_5(ClassWithDestructor &&) = InitializeParameter[c] : &:r2449_4 +# 2449| r2449_6(ClassWithDestructor &&) = Load[c] : &:r2449_4, m2449_5 +# 2449| mu2449_7(unknown) = InitializeIndirection[c] : &:r2449_6 # 2451| v2451_1(void) = NoOp : -# 2449| v2449_9(void) = ReturnIndirection[c] : &:r2449_7, m2449_8 -# 2449| v2449_10(void) = ReturnVoid : -# 2449| v2449_11(void) = AliasedUse : m2449_3 -# 2449| v2449_12(void) = ExitFunction : +# 2449| v2449_8(void) = ReturnIndirection[c] : &:r2449_6, ~m? +# 2449| v2449_9(void) = ReturnVoid : +# 2449| v2449_10(void) = AliasedUse : ~m? +# 2449| v2449_11(void) = ExitFunction : # 2453| void rethrow_with_destruction(int) # 2453| Block 0 # 2453| v2453_1(void) = EnterFunction : -# 2453| m2453_2(unknown) = AliasedDefinition : -# 2453| m2453_3(unknown) = InitializeNonLocal : -# 2453| m2453_4(unknown) = Chi : total:m2453_2, partial:m2453_3 -# 2453| r2453_5(glval) = VariableAddress[x] : -# 2453| m2453_6(int) = InitializeParameter[x] : &:r2453_5 +# 2453| mu2453_2(unknown) = AliasedDefinition : +# 2453| mu2453_3(unknown) = InitializeNonLocal : +# 2453| r2453_4(glval) = VariableAddress[x] : +# 2453| m2453_5(int) = InitializeParameter[x] : &:r2453_4 # 2454| r2454_1(glval) = VariableAddress[c] : -# 2454| m2454_2(ClassWithDestructor) = Uninitialized[c] : &:r2454_1 +# 2454| mu2454_2(ClassWithDestructor) = Uninitialized[c] : &:r2454_1 # 2454| r2454_3(glval) = FunctionAddress[ClassWithDestructor] : # 2454| v2454_4(void) = Call[ClassWithDestructor] : func:r2454_3, this:r2454_1 -# 2454| m2454_5(unknown) = ^CallSideEffect : ~m2453_4 -# 2454| m2454_6(unknown) = Chi : total:m2453_4, partial:m2454_5 -# 2454| m2454_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2454_1 -# 2454| m2454_8(ClassWithDestructor) = Chi : total:m2454_2, partial:m2454_7 +# 2454| mu2454_5(unknown) = ^CallSideEffect : ~m? +# 2454| mu2454_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2454_1 # 2455| v2455_1(void) = ReThrow : # 2456| r2456_1(glval) = VariableAddress[c] : # 2456| r2456_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2456| v2456_3(void) = Call[~ClassWithDestructor] : func:r2456_2, this:r2456_1 -# 2456| m2456_4(unknown) = ^CallSideEffect : ~m2454_6 -# 2456| m2456_5(unknown) = Chi : total:m2454_6, partial:m2456_4 -# 2456| v2456_6(void) = ^IndirectReadSideEffect[-1] : &:r2456_1, m2454_8 -# 2456| m2456_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2456_1 -# 2456| m2456_8(ClassWithDestructor) = Chi : total:m2454_8, partial:m2456_7 +# 2456| mu2456_4(unknown) = ^CallSideEffect : ~m? +# 2456| v2456_5(void) = ^IndirectReadSideEffect[-1] : &:r2456_1, ~m? +# 2456| mu2456_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2456_1 #-----| C++ Exception -> Block 1 # 2453| Block 1 -# 2453| v2453_7(void) = Unwind : -# 2453| v2453_8(void) = AliasedUse : ~m2456_5 -# 2453| v2453_9(void) = ExitFunction : +# 2453| v2453_6(void) = Unwind : +# 2453| v2453_7(void) = AliasedUse : ~m? +# 2453| v2453_8(void) = ExitFunction : # 2462| void new_with_destructor(ClassWithDestructor) # 2462| Block 0 # 2462| v2462_1(void) = EnterFunction : -# 2462| m2462_2(unknown) = AliasedDefinition : -# 2462| m2462_3(unknown) = InitializeNonLocal : -# 2462| m2462_4(unknown) = Chi : total:m2462_2, partial:m2462_3 -# 2462| r2462_5(glval) = VariableAddress[a] : -# 2462| m2462_6(ClassWithDestructor) = InitializeParameter[a] : &:r2462_5 +# 2462| mu2462_2(unknown) = AliasedDefinition : +# 2462| mu2462_3(unknown) = InitializeNonLocal : +# 2462| r2462_4(glval) = VariableAddress[a] : +# 2462| m2462_5(ClassWithDestructor) = InitializeParameter[a] : &:r2462_4 # 2464| r2464_1(glval) = VariableAddress[b] : # 2464| r2464_2(glval) = FunctionAddress[operator new] : # 2464| r2464_3(unsigned long) = Constant[1] : # 2464| r2464_4(void *) = Call[operator new] : func:r2464_2, 0:r2464_3 -# 2464| m2464_5(unknown) = ^CallSideEffect : ~m2462_4 -# 2464| m2464_6(unknown) = Chi : total:m2462_4, partial:m2464_5 -# 2464| m2464_7(unknown) = ^InitializeDynamicAllocation : &:r2464_4 -# 2464| m2464_8(unknown) = Chi : total:m2464_6, partial:m2464_7 -# 2464| r2464_9(ByValueConstructor *) = Convert : r2464_4 -# 2464| r2464_10(glval) = FunctionAddress[ByValueConstructor] : -# 2464| r2464_11(glval) = VariableAddress[#temp2464:52] : -# 2464| r2464_12(glval) = VariableAddress[a] : -# 2464| r2464_13(ClassWithDestructor) = Load[a] : &:r2464_12, m2462_6 -# 2464| m2464_14(ClassWithDestructor) = Store[#temp2464:52] : &:r2464_11, r2464_13 -# 2464| r2464_15(ClassWithDestructor) = Load[#temp2464:52] : &:r2464_11, m2464_14 -# 2464| v2464_16(void) = Call[ByValueConstructor] : func:r2464_10, this:r2464_9, 0:r2464_15 -# 2464| m2464_17(unknown) = ^CallSideEffect : ~m2464_8 -# 2464| m2464_18(unknown) = Chi : total:m2464_8, partial:m2464_17 -# 2464| m2464_19(ByValueConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r2464_9 -# 2464| m2464_20(unknown) = Chi : total:m2464_18, partial:m2464_19 -# 2464| r2464_21(glval) = CopyValue : r2464_11 -# 2464| r2464_22(glval) = FunctionAddress[~ClassWithDestructor] : -# 2464| v2464_23(void) = Call[~ClassWithDestructor] : func:r2464_22, this:r2464_21 -# 2464| m2464_24(unknown) = ^CallSideEffect : ~m2464_20 -# 2464| m2464_25(unknown) = Chi : total:m2464_20, partial:m2464_24 -# 2464| v2464_26(void) = ^IndirectReadSideEffect[-1] : &:r2464_21, m2464_14 -# 2464| m2464_27(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2464_21 -# 2464| m2464_28(ClassWithDestructor) = Chi : total:m2464_14, partial:m2464_27 -# 2464| m2464_29(ByValueConstructor *) = Store[b] : &:r2464_1, r2464_9 +# 2464| mu2464_5(unknown) = ^CallSideEffect : ~m? +# 2464| mu2464_6(unknown) = ^InitializeDynamicAllocation : &:r2464_4 +# 2464| r2464_7(ByValueConstructor *) = Convert : r2464_4 +# 2464| r2464_8(glval) = FunctionAddress[ByValueConstructor] : +# 2464| r2464_9(glval) = VariableAddress[#temp2464:52] : +# 2464| r2464_10(glval) = VariableAddress[a] : +# 2464| r2464_11(ClassWithDestructor) = Load[a] : &:r2464_10, m2462_5 +# 2464| mu2464_12(ClassWithDestructor) = Store[#temp2464:52] : &:r2464_9, r2464_11 +# 2464| r2464_13(ClassWithDestructor) = Load[#temp2464:52] : &:r2464_9, ~m? +# 2464| v2464_14(void) = Call[ByValueConstructor] : func:r2464_8, this:r2464_7, 0:r2464_13 +# 2464| mu2464_15(unknown) = ^CallSideEffect : ~m? +# 2464| mu2464_16(ByValueConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r2464_7 +# 2464| r2464_17(glval) = CopyValue : r2464_9 +# 2464| r2464_18(glval) = FunctionAddress[~ClassWithDestructor] : +# 2464| v2464_19(void) = Call[~ClassWithDestructor] : func:r2464_18, this:r2464_17 +# 2464| mu2464_20(unknown) = ^CallSideEffect : ~m? +# 2464| v2464_21(void) = ^IndirectReadSideEffect[-1] : &:r2464_17, ~m? +# 2464| mu2464_22(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2464_17 +# 2464| m2464_23(ByValueConstructor *) = Store[b] : &:r2464_1, r2464_7 # 2465| v2465_1(void) = NoOp : -# 2462| v2462_7(void) = ReturnVoid : -# 2462| v2462_8(void) = AliasedUse : ~m2464_25 -# 2462| v2462_9(void) = ExitFunction : +# 2462| v2462_6(void) = ReturnVoid : +# 2462| v2462_7(void) = AliasedUse : ~m? +# 2462| v2462_8(void) = ExitFunction : # 2481| void rvalue_conversion_with_destructor::test() # 2481| Block 0 # 2481| v2481_1(void) = EnterFunction : -# 2481| m2481_2(unknown) = AliasedDefinition : -# 2481| m2481_3(unknown) = InitializeNonLocal : -# 2481| m2481_4(unknown) = Chi : total:m2481_2, partial:m2481_3 +# 2481| mu2481_2(unknown) = AliasedDefinition : +# 2481| mu2481_3(unknown) = InitializeNonLocal : # 2483| r2483_1(glval) = VariableAddress[a] : # 2483| r2483_2(glval) = VariableAddress[#temp2483:18] : # 2483| r2483_3(glval) = FunctionAddress[get] : # 2483| r2483_4(B) = Call[get] : func:r2483_3 -# 2483| m2483_5(unknown) = ^CallSideEffect : ~m2481_4 -# 2483| m2483_6(unknown) = Chi : total:m2481_4, partial:m2483_5 -# 2483| m2483_7(B) = Store[#temp2483:18] : &:r2483_2, r2483_4 -# 2483| m2483_8(unknown) = Chi : total:m2483_6, partial:m2483_7 -# 2483| r2483_9(glval) = Convert : r2483_2 -# 2483| r2483_10(glval) = FunctionAddress[operator->] : -# 2483| r2483_11(A *) = Call[operator->] : func:r2483_10, this:r2483_9 -# 2483| m2483_12(unknown) = ^CallSideEffect : ~m2483_8 -# 2483| m2483_13(unknown) = Chi : total:m2483_8, partial:m2483_12 -# 2483| v2483_14(void) = ^IndirectReadSideEffect[-1] : &:r2483_9, ~m2483_13 -# 2483| r2483_15(glval) = FieldAddress[a] : r2483_11 -# 2483| r2483_16(glval) = CopyValue : r2483_2 -# 2483| r2483_17(glval) = FunctionAddress[~B] : -# 2483| v2483_18(void) = Call[~B] : func:r2483_17, this:r2483_16 -# 2483| m2483_19(unknown) = ^CallSideEffect : ~m2483_13 -# 2483| m2483_20(unknown) = Chi : total:m2483_13, partial:m2483_19 -# 2483| v2483_21(void) = ^IndirectReadSideEffect[-1] : &:r2483_16, ~m2483_20 -# 2483| m2483_22(B) = ^IndirectMayWriteSideEffect[-1] : &:r2483_16 -# 2483| m2483_23(unknown) = Chi : total:m2483_20, partial:m2483_22 -# 2483| r2483_24(unsigned int) = Load[?] : &:r2483_15, ~m2483_23 -# 2483| m2483_25(unsigned int) = Store[a] : &:r2483_1, r2483_24 +# 2483| mu2483_5(unknown) = ^CallSideEffect : ~m? +# 2483| mu2483_6(B) = Store[#temp2483:18] : &:r2483_2, r2483_4 +# 2483| r2483_7(glval) = Convert : r2483_2 +# 2483| r2483_8(glval) = FunctionAddress[operator->] : +# 2483| r2483_9(A *) = Call[operator->] : func:r2483_8, this:r2483_7 +# 2483| mu2483_10(unknown) = ^CallSideEffect : ~m? +# 2483| v2483_11(void) = ^IndirectReadSideEffect[-1] : &:r2483_7, ~m? +# 2483| r2483_12(glval) = FieldAddress[a] : r2483_9 +# 2483| r2483_13(glval) = CopyValue : r2483_2 +# 2483| r2483_14(glval) = FunctionAddress[~B] : +# 2483| v2483_15(void) = Call[~B] : func:r2483_14, this:r2483_13 +# 2483| mu2483_16(unknown) = ^CallSideEffect : ~m? +# 2483| v2483_17(void) = ^IndirectReadSideEffect[-1] : &:r2483_13, ~m? +# 2483| mu2483_18(B) = ^IndirectMayWriteSideEffect[-1] : &:r2483_13 +# 2483| r2483_19(unsigned int) = Load[?] : &:r2483_12, ~m? +# 2483| m2483_20(unsigned int) = Store[a] : &:r2483_1, r2483_19 # 2484| v2484_1(void) = NoOp : -# 2481| v2481_5(void) = ReturnVoid : -# 2481| v2481_6(void) = AliasedUse : ~m2483_20 -# 2481| v2481_7(void) = ExitFunction : +# 2481| v2481_4(void) = ReturnVoid : +# 2481| v2481_5(void) = AliasedUse : ~m? +# 2481| v2481_6(void) = ExitFunction : # 2487| void destructor_without_block(bool) # 2487| Block 0 # 2487| v2487_1(void) = EnterFunction : -# 2487| m2487_2(unknown) = AliasedDefinition : -# 2487| m2487_3(unknown) = InitializeNonLocal : -# 2487| m2487_4(unknown) = Chi : total:m2487_2, partial:m2487_3 -# 2487| r2487_5(glval) = VariableAddress[b] : -# 2487| m2487_6(bool) = InitializeParameter[b] : &:r2487_5 +# 2487| mu2487_2(unknown) = AliasedDefinition : +# 2487| mu2487_3(unknown) = InitializeNonLocal : +# 2487| r2487_4(glval) = VariableAddress[b] : +# 2487| m2487_5(bool) = InitializeParameter[b] : &:r2487_4 # 2489| r2489_1(glval) = VariableAddress[b] : -# 2489| r2489_2(bool) = Load[b] : &:r2489_1, m2487_6 +# 2489| r2489_2(bool) = Load[b] : &:r2489_1, m2487_5 # 2489| v2489_3(void) = ConditionalBranch : r2489_2 #-----| False -> Block 2 #-----| True -> Block 1 # 2490| Block 1 # 2490| r2490_1(glval) = VariableAddress[c] : -# 2490| m2490_2(ClassWithDestructor) = Uninitialized[c] : &:r2490_1 +# 2490| mu2490_2(ClassWithDestructor) = Uninitialized[c] : &:r2490_1 # 2490| r2490_3(glval) = FunctionAddress[ClassWithDestructor] : # 2490| v2490_4(void) = Call[ClassWithDestructor] : func:r2490_3, this:r2490_1 -# 2490| m2490_5(unknown) = ^CallSideEffect : ~m2487_4 -# 2490| m2490_6(unknown) = Chi : total:m2487_4, partial:m2490_5 -# 2490| m2490_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2490_1 -# 2490| m2490_8(ClassWithDestructor) = Chi : total:m2490_2, partial:m2490_7 +# 2490| mu2490_5(unknown) = ^CallSideEffect : ~m? +# 2490| mu2490_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2490_1 #-----| r0_1(glval) = VariableAddress[c] : #-----| r0_2(glval) = FunctionAddress[~ClassWithDestructor] : #-----| v0_3(void) = Call[~ClassWithDestructor] : func:r0_2, this:r0_1 -#-----| m0_4(unknown) = ^CallSideEffect : ~m2490_6 -#-----| m0_5(unknown) = Chi : total:m2490_6, partial:m0_4 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_1, m2490_8 -#-----| m0_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_1 -#-----| m0_8(ClassWithDestructor) = Chi : total:m2490_8, partial:m0_7 +#-----| mu0_4(unknown) = ^CallSideEffect : ~m? +#-----| v0_5(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? +#-----| mu0_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_1 #-----| Goto -> Block 2 # 2492| Block 2 -# 2492| m2492_1(unknown) = Phi : from 0:~m2487_4, from 1:~m0_5 -# 2492| r2492_2(glval) = VariableAddress[b] : -# 2492| r2492_3(bool) = Load[b] : &:r2492_2, m2487_6 -# 2492| v2492_4(void) = ConditionalBranch : r2492_3 +# 2492| r2492_1(glval) = VariableAddress[b] : +# 2492| r2492_2(bool) = Load[b] : &:r2492_1, m2487_5 +# 2492| v2492_3(void) = ConditionalBranch : r2492_2 #-----| False -> Block 4 #-----| True -> Block 3 # 2493| Block 3 # 2493| r2493_1(glval) = VariableAddress[d] : -# 2493| m2493_2(ClassWithDestructor) = Uninitialized[d] : &:r2493_1 +# 2493| mu2493_2(ClassWithDestructor) = Uninitialized[d] : &:r2493_1 # 2493| r2493_3(glval) = FunctionAddress[ClassWithDestructor] : # 2493| v2493_4(void) = Call[ClassWithDestructor] : func:r2493_3, this:r2493_1 -# 2493| m2493_5(unknown) = ^CallSideEffect : ~m2492_1 -# 2493| m2493_6(unknown) = Chi : total:m2492_1, partial:m2493_5 -# 2493| m2493_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2493_1 -# 2493| m2493_8(ClassWithDestructor) = Chi : total:m2493_2, partial:m2493_7 -#-----| r0_9(glval) = VariableAddress[d] : -#-----| r0_10(glval) = FunctionAddress[~ClassWithDestructor] : -#-----| v0_11(void) = Call[~ClassWithDestructor] : func:r0_10, this:r0_9 -#-----| m0_12(unknown) = ^CallSideEffect : ~m2493_6 -#-----| m0_13(unknown) = Chi : total:m2493_6, partial:m0_12 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2493_8 -#-----| m0_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_9 -#-----| m0_16(ClassWithDestructor) = Chi : total:m2493_8, partial:m0_15 +# 2493| mu2493_5(unknown) = ^CallSideEffect : ~m? +# 2493| mu2493_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2493_1 +#-----| r0_7(glval) = VariableAddress[d] : +#-----| r0_8(glval) = FunctionAddress[~ClassWithDestructor] : +#-----| v0_9(void) = Call[~ClassWithDestructor] : func:r0_8, this:r0_7 +#-----| mu0_10(unknown) = ^CallSideEffect : ~m? +#-----| v0_11(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +#-----| mu0_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_7 #-----| Goto -> Block 5 # 2495| Block 4 # 2495| r2495_1(glval) = VariableAddress[e] : -# 2495| m2495_2(ClassWithDestructor) = Uninitialized[e] : &:r2495_1 +# 2495| mu2495_2(ClassWithDestructor) = Uninitialized[e] : &:r2495_1 # 2495| r2495_3(glval) = FunctionAddress[ClassWithDestructor] : # 2495| v2495_4(void) = Call[ClassWithDestructor] : func:r2495_3, this:r2495_1 -# 2495| m2495_5(unknown) = ^CallSideEffect : ~m2492_1 -# 2495| m2495_6(unknown) = Chi : total:m2492_1, partial:m2495_5 -# 2495| m2495_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2495_1 -# 2495| m2495_8(ClassWithDestructor) = Chi : total:m2495_2, partial:m2495_7 -#-----| r0_17(glval) = VariableAddress[e] : -#-----| r0_18(glval) = FunctionAddress[~ClassWithDestructor] : -#-----| v0_19(void) = Call[~ClassWithDestructor] : func:r0_18, this:r0_17 -#-----| m0_20(unknown) = ^CallSideEffect : ~m2495_6 -#-----| m0_21(unknown) = Chi : total:m2495_6, partial:m0_20 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_17, m2495_8 -#-----| m0_23(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_17 -#-----| m0_24(ClassWithDestructor) = Chi : total:m2495_8, partial:m0_23 +# 2495| mu2495_5(unknown) = ^CallSideEffect : ~m? +# 2495| mu2495_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2495_1 +#-----| r0_13(glval) = VariableAddress[e] : +#-----| r0_14(glval) = FunctionAddress[~ClassWithDestructor] : +#-----| v0_15(void) = Call[~ClassWithDestructor] : func:r0_14, this:r0_13 +#-----| mu0_16(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? +#-----| mu0_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_13 #-----| Goto -> Block 5 # 2497| Block 5 -# 2497| m2497_1(unknown) = Phi : from 3:~m0_13, from 4:~m0_21, from 6:~m0_29 -# 2497| r2497_2(glval) = VariableAddress[b] : -# 2497| r2497_3(bool) = Load[b] : &:r2497_2, m2487_6 -# 2497| v2497_4(void) = ConditionalBranch : r2497_3 +# 2497| r2497_1(glval) = VariableAddress[b] : +# 2497| r2497_2(bool) = Load[b] : &:r2497_1, m2487_5 +# 2497| v2497_3(void) = ConditionalBranch : r2497_2 #-----| False -> Block 7 #-----| True -> Block 6 # 2498| Block 6 # 2498| r2498_1(glval) = VariableAddress[f] : -# 2498| m2498_2(ClassWithDestructor) = Uninitialized[f] : &:r2498_1 +# 2498| mu2498_2(ClassWithDestructor) = Uninitialized[f] : &:r2498_1 # 2498| r2498_3(glval) = FunctionAddress[ClassWithDestructor] : # 2498| v2498_4(void) = Call[ClassWithDestructor] : func:r2498_3, this:r2498_1 -# 2498| m2498_5(unknown) = ^CallSideEffect : ~m2497_1 -# 2498| m2498_6(unknown) = Chi : total:m2497_1, partial:m2498_5 -# 2498| m2498_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2498_1 -# 2498| m2498_8(ClassWithDestructor) = Chi : total:m2498_2, partial:m2498_7 -#-----| r0_25(glval) = VariableAddress[f] : -#-----| r0_26(glval) = FunctionAddress[~ClassWithDestructor] : -#-----| v0_27(void) = Call[~ClassWithDestructor] : func:r0_26, this:r0_25 -#-----| m0_28(unknown) = ^CallSideEffect : ~m2498_6 -#-----| m0_29(unknown) = Chi : total:m2498_6, partial:m0_28 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_25, m2498_8 -#-----| m0_31(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_25 -#-----| m0_32(ClassWithDestructor) = Chi : total:m2498_8, partial:m0_31 +# 2498| mu2498_5(unknown) = ^CallSideEffect : ~m? +# 2498| mu2498_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2498_1 +#-----| r0_19(glval) = VariableAddress[f] : +#-----| r0_20(glval) = FunctionAddress[~ClassWithDestructor] : +#-----| v0_21(void) = Call[~ClassWithDestructor] : func:r0_20, this:r0_19 +#-----| mu0_22(unknown) = ^CallSideEffect : ~m? +#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? +#-----| mu0_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_19 #-----| Goto (back edge) -> Block 5 # 2500| Block 7 @@ -18959,56 +17154,50 @@ ir.cpp: #-----| Goto -> Block 8 # 2500| Block 8 -# 2500| m2500_4(unknown) = Phi : from 7:~m2497_1, from 9:~m0_37 -# 2500| m2500_5(int) = Phi : from 7:m2500_3, from 9:m2500_15 -# 2500| r2500_6(glval) = VariableAddress[i] : -# 2500| r2500_7(int) = Load[i] : &:r2500_6, m2500_5 -# 2500| r2500_8(int) = Constant[42] : -# 2500| r2500_9(bool) = CompareLT : r2500_7, r2500_8 -# 2500| v2500_10(void) = ConditionalBranch : r2500_9 +# 2500| m2500_4(int) = Phi : from 7:m2500_3, from 9:m2500_14 +# 2500| r2500_5(glval) = VariableAddress[i] : +# 2500| r2500_6(int) = Load[i] : &:r2500_5, m2500_4 +# 2500| r2500_7(int) = Constant[42] : +# 2500| r2500_8(bool) = CompareLT : r2500_6, r2500_7 +# 2500| v2500_9(void) = ConditionalBranch : r2500_8 #-----| False -> Block 10 #-----| True -> Block 9 # 2501| Block 9 # 2501| r2501_1(glval) = VariableAddress[g] : -# 2501| m2501_2(ClassWithDestructor) = Uninitialized[g] : &:r2501_1 +# 2501| mu2501_2(ClassWithDestructor) = Uninitialized[g] : &:r2501_1 # 2501| r2501_3(glval) = FunctionAddress[ClassWithDestructor] : # 2501| v2501_4(void) = Call[ClassWithDestructor] : func:r2501_3, this:r2501_1 -# 2501| m2501_5(unknown) = ^CallSideEffect : ~m2500_4 -# 2501| m2501_6(unknown) = Chi : total:m2500_4, partial:m2501_5 -# 2501| m2501_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2501_1 -# 2501| m2501_8(ClassWithDestructor) = Chi : total:m2501_2, partial:m2501_7 -#-----| r0_33(glval) = VariableAddress[g] : -#-----| r0_34(glval) = FunctionAddress[~ClassWithDestructor] : -#-----| v0_35(void) = Call[~ClassWithDestructor] : func:r0_34, this:r0_33 -#-----| m0_36(unknown) = ^CallSideEffect : ~m2501_6 -#-----| m0_37(unknown) = Chi : total:m2501_6, partial:m0_36 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_33, m2501_8 -#-----| m0_39(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_33 -#-----| m0_40(ClassWithDestructor) = Chi : total:m2501_8, partial:m0_39 -# 2500| r2500_11(glval) = VariableAddress[i] : -# 2500| r2500_12(int) = Load[i] : &:r2500_11, m2500_5 -# 2500| r2500_13(int) = Constant[1] : -# 2500| r2500_14(int) = Add : r2500_12, r2500_13 -# 2500| m2500_15(int) = Store[i] : &:r2500_11, r2500_14 +# 2501| mu2501_5(unknown) = ^CallSideEffect : ~m? +# 2501| mu2501_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2501_1 +#-----| r0_25(glval) = VariableAddress[g] : +#-----| r0_26(glval) = FunctionAddress[~ClassWithDestructor] : +#-----| v0_27(void) = Call[~ClassWithDestructor] : func:r0_26, this:r0_25 +#-----| mu0_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_29(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m? +#-----| mu0_30(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r0_25 +# 2500| r2500_10(glval) = VariableAddress[i] : +# 2500| r2500_11(int) = Load[i] : &:r2500_10, m2500_4 +# 2500| r2500_12(int) = Constant[1] : +# 2500| r2500_13(int) = Add : r2500_11, r2500_12 +# 2500| m2500_14(int) = Store[i] : &:r2500_10, r2500_13 #-----| Goto (back edge) -> Block 8 # 2502| Block 10 # 2502| v2502_1(void) = NoOp : -# 2487| v2487_7(void) = ReturnVoid : -# 2487| v2487_8(void) = AliasedUse : ~m2500_4 -# 2487| v2487_9(void) = ExitFunction : +# 2487| v2487_6(void) = ReturnVoid : +# 2487| v2487_7(void) = AliasedUse : ~m? +# 2487| v2487_8(void) = ExitFunction : # 2504| void destruction_in_switch_1(int) # 2504| Block 0 # 2504| v2504_1(void) = EnterFunction : -# 2504| m2504_2(unknown) = AliasedDefinition : -# 2504| m2504_3(unknown) = InitializeNonLocal : -# 2504| m2504_4(unknown) = Chi : total:m2504_2, partial:m2504_3 -# 2504| r2504_5(glval) = VariableAddress[c] : -# 2504| m2504_6(int) = InitializeParameter[c] : &:r2504_5 +# 2504| mu2504_2(unknown) = AliasedDefinition : +# 2504| mu2504_3(unknown) = InitializeNonLocal : +# 2504| r2504_4(glval) = VariableAddress[c] : +# 2504| m2504_5(int) = InitializeParameter[c] : &:r2504_4 # 2505| r2505_1(glval) = VariableAddress[c] : -# 2505| r2505_2(int) = Load[c] : &:r2505_1, m2504_6 +# 2505| r2505_2(int) = Load[c] : &:r2505_1, m2504_5 # 2505| v2505_3(void) = Switch : r2505_2 #-----| Case[0] -> Block 1 #-----| Default -> Block 2 @@ -19016,51 +17205,43 @@ ir.cpp: # 2506| Block 1 # 2506| v2506_1(void) = NoOp : # 2507| r2507_1(glval) = VariableAddress[x] : -# 2507| m2507_2(ClassWithDestructor) = Uninitialized[x] : &:r2507_1 +# 2507| mu2507_2(ClassWithDestructor) = Uninitialized[x] : &:r2507_1 # 2507| r2507_3(glval) = FunctionAddress[ClassWithDestructor] : # 2507| v2507_4(void) = Call[ClassWithDestructor] : func:r2507_3, this:r2507_1 -# 2507| m2507_5(unknown) = ^CallSideEffect : ~m2504_4 -# 2507| m2507_6(unknown) = Chi : total:m2504_4, partial:m2507_5 -# 2507| m2507_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2507_1 -# 2507| m2507_8(ClassWithDestructor) = Chi : total:m2507_2, partial:m2507_7 +# 2507| mu2507_5(unknown) = ^CallSideEffect : ~m? +# 2507| mu2507_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2507_1 # 2509| r2509_1(glval) = VariableAddress[x] : # 2509| r2509_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2509| v2509_3(void) = Call[~ClassWithDestructor] : func:r2509_2, this:r2509_1 -# 2509| m2509_4(unknown) = ^CallSideEffect : ~m2507_6 -# 2509| m2509_5(unknown) = Chi : total:m2507_6, partial:m2509_4 -# 2509| v2509_6(void) = ^IndirectReadSideEffect[-1] : &:r2509_1, m2507_8 -# 2509| m2509_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2509_1 -# 2509| m2509_8(ClassWithDestructor) = Chi : total:m2507_8, partial:m2509_7 +# 2509| mu2509_4(unknown) = ^CallSideEffect : ~m? +# 2509| v2509_5(void) = ^IndirectReadSideEffect[-1] : &:r2509_1, ~m? +# 2509| mu2509_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2509_1 # 2508| v2508_1(void) = NoOp : #-----| Goto -> Block 2 # 2510| Block 2 -# 2510| m2510_1(unknown) = Phi : from 0:~m2504_4, from 1:~m2509_5 -# 2510| v2510_2(void) = NoOp : -# 2511| v2511_1(void) = NoOp : -# 2504| v2504_7(void) = ReturnVoid : -# 2504| v2504_8(void) = AliasedUse : ~m2510_1 -# 2504| v2504_9(void) = ExitFunction : +# 2510| v2510_1(void) = NoOp : +# 2511| v2511_1(void) = NoOp : +# 2504| v2504_6(void) = ReturnVoid : +# 2504| v2504_7(void) = AliasedUse : ~m? +# 2504| v2504_8(void) = ExitFunction : # 2513| void destruction_in_switch_2(int) # 2513| Block 0 # 2513| v2513_1(void) = EnterFunction : -# 2513| m2513_2(unknown) = AliasedDefinition : -# 2513| m2513_3(unknown) = InitializeNonLocal : -# 2513| m2513_4(unknown) = Chi : total:m2513_2, partial:m2513_3 -# 2513| r2513_5(glval) = VariableAddress[c] : -# 2513| m2513_6(int) = InitializeParameter[c] : &:r2513_5 +# 2513| mu2513_2(unknown) = AliasedDefinition : +# 2513| mu2513_3(unknown) = InitializeNonLocal : +# 2513| r2513_4(glval) = VariableAddress[c] : +# 2513| m2513_5(int) = InitializeParameter[c] : &:r2513_4 # 2514| r2514_1(glval) = VariableAddress[y] : -# 2514| m2514_2(ClassWithDestructor) = Uninitialized[y] : &:r2514_1 +# 2514| mu2514_2(ClassWithDestructor) = Uninitialized[y] : &:r2514_1 # 2514| r2514_3(glval) = FunctionAddress[ClassWithDestructor] : # 2514| v2514_4(void) = Call[ClassWithDestructor] : func:r2514_3, this:r2514_1 -# 2514| m2514_5(unknown) = ^CallSideEffect : ~m2513_4 -# 2514| m2514_6(unknown) = Chi : total:m2513_4, partial:m2514_5 -# 2514| m2514_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2514_1 -# 2514| m2514_8(ClassWithDestructor) = Chi : total:m2514_2, partial:m2514_7 -# 2514| r2514_9(glval) = VariableAddress[c] : -# 2514| r2514_10(int) = Load[c] : &:r2514_9, m2513_6 -# 2514| v2514_11(void) = Switch : r2514_10 +# 2514| mu2514_5(unknown) = ^CallSideEffect : ~m? +# 2514| mu2514_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2514_1 +# 2514| r2514_7(glval) = VariableAddress[c] : +# 2514| r2514_8(int) = Load[c] : &:r2514_7, m2513_5 +# 2514| v2514_9(void) = Switch : r2514_8 #-----| Case[0] -> Block 1 #-----| Default -> Block 2 @@ -19069,121 +17250,101 @@ ir.cpp: # 2521| r2521_1(glval) = VariableAddress[y] : # 2521| r2521_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2521| v2521_3(void) = Call[~ClassWithDestructor] : func:r2521_2, this:r2521_1 -# 2521| m2521_4(unknown) = ^CallSideEffect : ~m2514_6 -# 2521| m2521_5(unknown) = Chi : total:m2514_6, partial:m2521_4 -# 2521| v2521_6(void) = ^IndirectReadSideEffect[-1] : &:r2521_1, m2514_8 -# 2521| m2521_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2521_1 -# 2521| m2521_8(ClassWithDestructor) = Chi : total:m2514_8, partial:m2521_7 +# 2521| mu2521_4(unknown) = ^CallSideEffect : ~m? +# 2521| v2521_5(void) = ^IndirectReadSideEffect[-1] : &:r2521_1, ~m? +# 2521| mu2521_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2521_1 # 2516| v2516_1(void) = NoOp : #-----| Goto -> Block 3 # 2518| Block 2 # 2518| v2518_1(void) = NoOp : -# 2521| r2521_9(glval) = VariableAddress[y] : -# 2521| r2521_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2521| v2521_11(void) = Call[~ClassWithDestructor] : func:r2521_10, this:r2521_9 -# 2521| m2521_12(unknown) = ^CallSideEffect : ~m2514_6 -# 2521| m2521_13(unknown) = Chi : total:m2514_6, partial:m2521_12 -# 2521| v2521_14(void) = ^IndirectReadSideEffect[-1] : &:r2521_9, m2514_8 -# 2521| m2521_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2521_9 -# 2521| m2521_16(ClassWithDestructor) = Chi : total:m2514_8, partial:m2521_15 +# 2521| r2521_7(glval) = VariableAddress[y] : +# 2521| r2521_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2521| v2521_9(void) = Call[~ClassWithDestructor] : func:r2521_8, this:r2521_7 +# 2521| mu2521_10(unknown) = ^CallSideEffect : ~m? +# 2521| v2521_11(void) = ^IndirectReadSideEffect[-1] : &:r2521_7, ~m? +# 2521| mu2521_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2521_7 # 2519| v2519_1(void) = NoOp : #-----| Goto -> Block 3 # 2521| Block 3 -# 2521| m2521_17(unknown) = Phi : from 1:~m2521_5, from 2:~m2521_13 -# 2521| v2521_18(void) = NoOp : -# 2522| v2522_1(void) = NoOp : -# 2513| v2513_7(void) = ReturnVoid : -# 2513| v2513_8(void) = AliasedUse : ~m2521_17 -# 2513| v2513_9(void) = ExitFunction : +# 2521| v2521_13(void) = NoOp : +# 2522| v2522_1(void) = NoOp : +# 2513| v2513_6(void) = ReturnVoid : +# 2513| v2513_7(void) = AliasedUse : ~m? +# 2513| v2513_8(void) = ExitFunction : # 2524| void destruction_in_switch_3(int) # 2524| Block 0 # 2524| v2524_1(void) = EnterFunction : -# 2524| m2524_2(unknown) = AliasedDefinition : -# 2524| m2524_3(unknown) = InitializeNonLocal : -# 2524| m2524_4(unknown) = Chi : total:m2524_2, partial:m2524_3 -# 2524| r2524_5(glval) = VariableAddress[c] : -# 2524| m2524_6(int) = InitializeParameter[c] : &:r2524_5 +# 2524| mu2524_2(unknown) = AliasedDefinition : +# 2524| mu2524_3(unknown) = InitializeNonLocal : +# 2524| r2524_4(glval) = VariableAddress[c] : +# 2524| m2524_5(int) = InitializeParameter[c] : &:r2524_4 # 2525| r2525_1(glval) = VariableAddress[y] : -# 2525| m2525_2(ClassWithDestructor) = Uninitialized[y] : &:r2525_1 +# 2525| mu2525_2(ClassWithDestructor) = Uninitialized[y] : &:r2525_1 # 2525| r2525_3(glval) = FunctionAddress[ClassWithDestructor] : # 2525| v2525_4(void) = Call[ClassWithDestructor] : func:r2525_3, this:r2525_1 -# 2525| m2525_5(unknown) = ^CallSideEffect : ~m2524_4 -# 2525| m2525_6(unknown) = Chi : total:m2524_4, partial:m2525_5 -# 2525| m2525_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2525_1 -# 2525| m2525_8(ClassWithDestructor) = Chi : total:m2525_2, partial:m2525_7 -# 2525| r2525_9(glval) = VariableAddress[c] : -# 2525| r2525_10(int) = Load[c] : &:r2525_9, m2524_6 -# 2525| v2525_11(void) = Switch : r2525_10 +# 2525| mu2525_5(unknown) = ^CallSideEffect : ~m? +# 2525| mu2525_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2525_1 +# 2525| r2525_7(glval) = VariableAddress[c] : +# 2525| r2525_8(int) = Load[c] : &:r2525_7, m2524_5 +# 2525| v2525_9(void) = Switch : r2525_8 #-----| Case[0] -> Block 1 #-----| Default -> Block 2 # 2526| Block 1 # 2526| v2526_1(void) = NoOp : # 2527| r2527_1(glval) = VariableAddress[x] : -# 2527| m2527_2(ClassWithDestructor) = Uninitialized[x] : &:r2527_1 +# 2527| mu2527_2(ClassWithDestructor) = Uninitialized[x] : &:r2527_1 # 2527| r2527_3(glval) = FunctionAddress[ClassWithDestructor] : # 2527| v2527_4(void) = Call[ClassWithDestructor] : func:r2527_3, this:r2527_1 -# 2527| m2527_5(unknown) = ^CallSideEffect : ~m2525_6 -# 2527| m2527_6(unknown) = Chi : total:m2525_6, partial:m2527_5 -# 2527| m2527_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2527_1 -# 2527| m2527_8(ClassWithDestructor) = Chi : total:m2527_2, partial:m2527_7 +# 2527| mu2527_5(unknown) = ^CallSideEffect : ~m? +# 2527| mu2527_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2527_1 # 2529| r2529_1(glval) = VariableAddress[x] : # 2529| r2529_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2529| v2529_3(void) = Call[~ClassWithDestructor] : func:r2529_2, this:r2529_1 -# 2529| m2529_4(unknown) = ^CallSideEffect : ~m2527_6 -# 2529| m2529_5(unknown) = Chi : total:m2527_6, partial:m2529_4 -# 2529| v2529_6(void) = ^IndirectReadSideEffect[-1] : &:r2529_1, m2527_8 -# 2529| m2529_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2529_1 -# 2529| m2529_8(ClassWithDestructor) = Chi : total:m2527_8, partial:m2529_7 +# 2529| mu2529_4(unknown) = ^CallSideEffect : ~m? +# 2529| v2529_5(void) = ^IndirectReadSideEffect[-1] : &:r2529_1, ~m? +# 2529| mu2529_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2529_1 # 2533| r2533_1(glval) = VariableAddress[y] : # 2533| r2533_2(glval) = FunctionAddress[~ClassWithDestructor] : # 2533| v2533_3(void) = Call[~ClassWithDestructor] : func:r2533_2, this:r2533_1 -# 2533| m2533_4(unknown) = ^CallSideEffect : ~m2529_5 -# 2533| m2533_5(unknown) = Chi : total:m2529_5, partial:m2533_4 -# 2533| v2533_6(void) = ^IndirectReadSideEffect[-1] : &:r2533_1, m2525_8 -# 2533| m2533_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2533_1 -# 2533| m2533_8(ClassWithDestructor) = Chi : total:m2525_8, partial:m2533_7 +# 2533| mu2533_4(unknown) = ^CallSideEffect : ~m? +# 2533| v2533_5(void) = ^IndirectReadSideEffect[-1] : &:r2533_1, ~m? +# 2533| mu2533_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2533_1 # 2528| v2528_1(void) = NoOp : #-----| Goto -> Block 3 # 2530| Block 2 # 2530| v2530_1(void) = NoOp : -# 2533| r2533_9(glval) = VariableAddress[y] : -# 2533| r2533_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2533| v2533_11(void) = Call[~ClassWithDestructor] : func:r2533_10, this:r2533_9 -# 2533| m2533_12(unknown) = ^CallSideEffect : ~m2525_6 -# 2533| m2533_13(unknown) = Chi : total:m2525_6, partial:m2533_12 -# 2533| v2533_14(void) = ^IndirectReadSideEffect[-1] : &:r2533_9, m2525_8 -# 2533| m2533_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2533_9 -# 2533| m2533_16(ClassWithDestructor) = Chi : total:m2525_8, partial:m2533_15 +# 2533| r2533_7(glval) = VariableAddress[y] : +# 2533| r2533_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2533| v2533_9(void) = Call[~ClassWithDestructor] : func:r2533_8, this:r2533_7 +# 2533| mu2533_10(unknown) = ^CallSideEffect : ~m? +# 2533| v2533_11(void) = ^IndirectReadSideEffect[-1] : &:r2533_7, ~m? +# 2533| mu2533_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2533_7 # 2531| v2531_1(void) = NoOp : #-----| Goto -> Block 3 # 2533| Block 3 -# 2533| m2533_17(unknown) = Phi : from 1:~m2533_5, from 2:~m2533_13 -# 2533| v2533_18(void) = NoOp : -# 2534| v2534_1(void) = NoOp : -# 2524| v2524_7(void) = ReturnVoid : -# 2524| v2524_8(void) = AliasedUse : ~m2533_17 -# 2524| v2524_9(void) = ExitFunction : +# 2533| v2533_13(void) = NoOp : +# 2534| v2534_1(void) = NoOp : +# 2524| v2524_6(void) = ReturnVoid : +# 2524| v2524_7(void) = AliasedUse : ~m? +# 2524| v2524_8(void) = ExitFunction : # 2536| void destructor_possibly_not_handled() # 2536| Block 0 # 2536| v2536_1(void) = EnterFunction : -# 2536| m2536_2(unknown) = AliasedDefinition : -# 2536| m2536_3(unknown) = InitializeNonLocal : -# 2536| m2536_4(unknown) = Chi : total:m2536_2, partial:m2536_3 +# 2536| mu2536_2(unknown) = AliasedDefinition : +# 2536| mu2536_3(unknown) = InitializeNonLocal : # 2537| r2537_1(glval) = VariableAddress[x] : -# 2537| m2537_2(ClassWithDestructor) = Uninitialized[x] : &:r2537_1 +# 2537| mu2537_2(ClassWithDestructor) = Uninitialized[x] : &:r2537_1 # 2537| r2537_3(glval) = FunctionAddress[ClassWithDestructor] : # 2537| v2537_4(void) = Call[ClassWithDestructor] : func:r2537_3, this:r2537_1 -# 2537| m2537_5(unknown) = ^CallSideEffect : ~m2536_4 -# 2537| m2537_6(unknown) = Chi : total:m2536_4, partial:m2537_5 -# 2537| m2537_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2537_1 -# 2537| m2537_8(ClassWithDestructor) = Chi : total:m2537_2, partial:m2537_7 +# 2537| mu2537_5(unknown) = ^CallSideEffect : ~m? +# 2537| mu2537_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2537_1 # 2539| r2539_1(glval) = VariableAddress[#throw2539:5] : # 2539| r2539_2(int) = Constant[42] : # 2539| m2539_3(int) = Store[#throw2539:5] : &:r2539_1, r2539_2 @@ -19191,9 +17352,8 @@ ir.cpp: #-----| C++ Exception -> Block 2 # 2536| Block 1 -# 2536| m2536_5(unknown) = Phi : from 3:~m2543_6, from 4:~m2543_14 -# 2536| v2536_6(void) = AliasedUse : ~m2536_5 -# 2536| v2536_7(void) = ExitFunction : +# 2536| v2536_4(void) = AliasedUse : ~m? +# 2536| v2536_5(void) = ExitFunction : # 2541| Block 2 # 2541| v2541_1(void) = CatchByType[char] : @@ -19208,55 +17368,47 @@ ir.cpp: # 2543| r2543_2(glval) = VariableAddress[x] : # 2543| r2543_3(glval) = FunctionAddress[~ClassWithDestructor] : # 2543| v2543_4(void) = Call[~ClassWithDestructor] : func:r2543_3, this:r2543_2 -# 2543| m2543_5(unknown) = ^CallSideEffect : ~m2537_6 -# 2543| m2543_6(unknown) = Chi : total:m2537_6, partial:m2543_5 -# 2543| v2543_7(void) = ^IndirectReadSideEffect[-1] : &:r2543_2, m2537_8 -# 2543| m2543_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2543_2 -# 2543| m2543_9(ClassWithDestructor) = Chi : total:m2537_8, partial:m2543_8 -# 2536| v2536_8(void) = ReturnVoid : +# 2543| mu2543_5(unknown) = ^CallSideEffect : ~m? +# 2543| v2543_6(void) = ^IndirectReadSideEffect[-1] : &:r2543_2, ~m? +# 2543| mu2543_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2543_2 +# 2536| v2536_6(void) = ReturnVoid : #-----| Goto -> Block 1 # 2543| Block 4 -# 2543| r2543_10(glval) = VariableAddress[x] : -# 2543| r2543_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2543| v2543_12(void) = Call[~ClassWithDestructor] : func:r2543_11, this:r2543_10 -# 2543| m2543_13(unknown) = ^CallSideEffect : ~m2537_6 -# 2543| m2543_14(unknown) = Chi : total:m2537_6, partial:m2543_13 -# 2543| v2543_15(void) = ^IndirectReadSideEffect[-1] : &:r2543_10, m2537_8 -# 2543| m2543_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2543_10 -# 2543| m2543_17(ClassWithDestructor) = Chi : total:m2537_8, partial:m2543_16 -# 2536| v2536_9(void) = Unwind : +# 2543| r2543_8(glval) = VariableAddress[x] : +# 2543| r2543_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2543| v2543_10(void) = Call[~ClassWithDestructor] : func:r2543_9, this:r2543_8 +# 2543| mu2543_11(unknown) = ^CallSideEffect : ~m? +# 2543| v2543_12(void) = ^IndirectReadSideEffect[-1] : &:r2543_8, ~m? +# 2543| mu2543_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2543_8 +# 2536| v2536_7(void) = Unwind : #-----| Goto -> Block 1 # 2547| void this_inconsistency(bool) # 2547| Block 0 # 2547| v2547_1(void) = EnterFunction : -# 2547| m2547_2(unknown) = AliasedDefinition : -# 2547| m2547_3(unknown) = InitializeNonLocal : -# 2547| m2547_4(unknown) = Chi : total:m2547_2, partial:m2547_3 -# 2547| r2547_5(glval) = VariableAddress[b] : -# 2547| m2547_6(bool) = InitializeParameter[b] : &:r2547_5 +# 2547| mu2547_2(unknown) = AliasedDefinition : +# 2547| mu2547_3(unknown) = InitializeNonLocal : +# 2547| r2547_4(glval) = VariableAddress[b] : +# 2547| m2547_5(bool) = InitializeParameter[b] : &:r2547_4 # 2548| r2548_1(glval) = VariableAddress[a] : # 2548| r2548_2(glval) = VariableAddress[#temp2548:38] : # 2548| r2548_3(glval) = FunctionAddress[getClassWithDestructor] : # 2548| r2548_4(ClassWithDestructor) = Call[getClassWithDestructor] : func:r2548_3 -# 2548| m2548_5(unknown) = ^CallSideEffect : ~m2547_4 -# 2548| m2548_6(unknown) = Chi : total:m2547_4, partial:m2548_5 -# 2548| m2548_7(ClassWithDestructor) = Store[#temp2548:38] : &:r2548_2, r2548_4 -# 2548| m2548_8(unknown) = Chi : total:m2548_6, partial:m2548_7 -# 2548| r2548_9(glval) = Convert : r2548_2 -# 2548| r2548_10(ClassWithDestructor &) = CopyValue : r2548_9 -# 2548| m2548_11(ClassWithDestructor &) = Store[a] : &:r2548_1, r2548_10 -# 2548| r2548_12(glval) = VariableAddress[a] : -# 2548| r2548_13(ClassWithDestructor &) = Load[a] : &:r2548_12, m2548_11 -# 2548| r2548_14(ClassWithDestructor) = CopyValue : r2548_13 -# 2548| r2548_15(glval) = FunctionAddress[operator bool] : -# 2548| r2548_16(bool) = Call[operator bool] : func:r2548_15, this:r2548_14 -# 2548| m2548_17(unknown) = ^CallSideEffect : ~m2548_8 -# 2548| m2548_18(unknown) = Chi : total:m2548_8, partial:m2548_17 -# 2548| v2548_19(void) = ^IndirectReadSideEffect[-1] : &:r2548_14, ~m2548_18 -# 2548| r2548_20(bool) = CopyValue : r2548_16 -# 2548| v2548_21(void) = ConditionalBranch : r2548_20 +# 2548| mu2548_5(unknown) = ^CallSideEffect : ~m? +# 2548| mu2548_6(ClassWithDestructor) = Store[#temp2548:38] : &:r2548_2, r2548_4 +# 2548| r2548_7(glval) = Convert : r2548_2 +# 2548| r2548_8(ClassWithDestructor &) = CopyValue : r2548_7 +# 2548| m2548_9(ClassWithDestructor &) = Store[a] : &:r2548_1, r2548_8 +# 2548| r2548_10(glval) = VariableAddress[a] : +# 2548| r2548_11(ClassWithDestructor &) = Load[a] : &:r2548_10, m2548_9 +# 2548| r2548_12(ClassWithDestructor) = CopyValue : r2548_11 +# 2548| r2548_13(glval) = FunctionAddress[operator bool] : +# 2548| r2548_14(bool) = Call[operator bool] : func:r2548_13, this:r2548_12 +# 2548| mu2548_15(unknown) = ^CallSideEffect : ~m? +# 2548| v2548_16(void) = ^IndirectReadSideEffect[-1] : &:r2548_12, ~m? +# 2548| r2548_17(bool) = CopyValue : r2548_14 +# 2548| v2548_18(void) = ConditionalBranch : r2548_17 #-----| False -> Block 2 #-----| True -> Block 1 @@ -19268,36 +17420,32 @@ ir.cpp: # 2549| r2549_2(glval) = CopyValue : r2548_2 # 2549| r2549_3(glval) = FunctionAddress[~ClassWithDestructor] : # 2549| v2549_4(void) = Call[~ClassWithDestructor] : func:r2549_3, this:r2549_2 -# 2549| m2549_5(unknown) = ^CallSideEffect : ~m2548_18 -# 2549| m2549_6(unknown) = Chi : total:m2548_18, partial:m2549_5 -# 2549| v2549_7(void) = ^IndirectReadSideEffect[-1] : &:r2549_2, ~m2549_6 -# 2549| m2549_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2549_2 -# 2549| m2549_9(unknown) = Chi : total:m2549_6, partial:m2549_8 +# 2549| mu2549_5(unknown) = ^CallSideEffect : ~m? +# 2549| v2549_6(void) = ^IndirectReadSideEffect[-1] : &:r2549_2, ~m? +# 2549| mu2549_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2549_2 # 2550| v2550_1(void) = NoOp : -# 2547| v2547_7(void) = ReturnVoid : -# 2547| v2547_8(void) = AliasedUse : ~m2549_6 -# 2547| v2547_9(void) = ExitFunction : +# 2547| v2547_6(void) = ReturnVoid : +# 2547| v2547_7(void) = AliasedUse : ~m? +# 2547| v2547_8(void) = ExitFunction : # 2552| void constexpr_inconsistency(bool) # 2552| Block 0 # 2552| v2552_1(void) = EnterFunction : -# 2552| m2552_2(unknown) = AliasedDefinition : -# 2552| m2552_3(unknown) = InitializeNonLocal : -# 2552| m2552_4(unknown) = Chi : total:m2552_2, partial:m2552_3 -# 2552| r2552_5(glval) = VariableAddress[b] : -# 2552| m2552_6(bool) = InitializeParameter[b] : &:r2552_5 +# 2552| mu2552_2(unknown) = AliasedDefinition : +# 2552| mu2552_3(unknown) = InitializeNonLocal : +# 2552| r2552_4(glval) = VariableAddress[b] : +# 2552| m2552_5(bool) = InitializeParameter[b] : &:r2552_4 # 2553| r2553_1(glval) = VariableAddress[a] : # 2553| r2553_2(glval) = VariableAddress[#temp2553:48] : # 2553| r2553_3(glval) = FunctionAddress[getClassWithDestructor] : # 2553| r2553_4(ClassWithDestructor) = Call[getClassWithDestructor] : func:r2553_3 -# 2553| m2553_5(unknown) = ^CallSideEffect : ~m2552_4 -# 2553| m2553_6(unknown) = Chi : total:m2552_4, partial:m2553_5 -# 2553| m2553_7(ClassWithDestructor) = Store[#temp2553:48] : &:r2553_2, r2553_4 -# 2553| r2553_8(glval) = Convert : r2553_2 -# 2553| r2553_9(ClassWithDestructor &) = CopyValue : r2553_8 -# 2553| m2553_10(ClassWithDestructor &) = Store[a] : &:r2553_1, r2553_9 -# 2553| r2553_11(bool) = Constant[1] : -# 2553| v2553_12(void) = ConditionalBranch : r2553_11 +# 2553| mu2553_5(unknown) = ^CallSideEffect : ~m? +# 2553| mu2553_6(ClassWithDestructor) = Store[#temp2553:48] : &:r2553_2, r2553_4 +# 2553| r2553_7(glval) = Convert : r2553_2 +# 2553| r2553_8(ClassWithDestructor &) = CopyValue : r2553_7 +# 2553| m2553_9(ClassWithDestructor &) = Store[a] : &:r2553_1, r2553_8 +# 2553| r2553_10(bool) = Constant[1] : +# 2553| v2553_11(void) = ConditionalBranch : r2553_10 #-----| False -> Block 2 #-----| True -> Block 1 @@ -19306,62 +17454,55 @@ ir.cpp: # 2554| r2554_2(glval) = CopyValue : r2553_2 # 2554| r2554_3(glval) = FunctionAddress[~ClassWithDestructor] : # 2554| v2554_4(void) = Call[~ClassWithDestructor] : func:r2554_3, this:r2554_2 -# 2554| m2554_5(unknown) = ^CallSideEffect : ~m2553_6 -# 2554| m2554_6(unknown) = Chi : total:m2553_6, partial:m2554_5 -# 2554| v2554_7(void) = ^IndirectReadSideEffect[-1] : &:r2554_2, m2553_7 -# 2554| m2554_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2554_2 -# 2554| m2554_9(ClassWithDestructor) = Chi : total:m2553_7, partial:m2554_8 +# 2554| mu2554_5(unknown) = ^CallSideEffect : ~m? +# 2554| v2554_6(void) = ^IndirectReadSideEffect[-1] : &:r2554_2, ~m? +# 2554| mu2554_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2554_2 # 2555| v2555_1(void) = NoOp : -# 2552| v2552_7(void) = ReturnVoid : -# 2552| v2552_8(void) = AliasedUse : ~m2554_6 -# 2552| v2552_9(void) = ExitFunction : +# 2552| v2552_6(void) = ReturnVoid : +# 2552| v2552_7(void) = AliasedUse : ~m? +# 2552| v2552_8(void) = ExitFunction : # 2552| Block 2 -# 2552| v2552_10(void) = Unreached : +# 2552| v2552_9(void) = Unreached : # 2557| void builtin_bitcast(unsigned long) # 2557| Block 0 # 2557| v2557_1(void) = EnterFunction : -# 2557| m2557_2(unknown) = AliasedDefinition : -# 2557| m2557_3(unknown) = InitializeNonLocal : -# 2557| m2557_4(unknown) = Chi : total:m2557_2, partial:m2557_3 -# 2557| r2557_5(glval) = VariableAddress[ul] : -# 2557| m2557_6(unsigned long) = InitializeParameter[ul] : &:r2557_5 +# 2557| mu2557_2(unknown) = AliasedDefinition : +# 2557| mu2557_3(unknown) = InitializeNonLocal : +# 2557| r2557_4(glval) = VariableAddress[ul] : +# 2557| m2557_5(unsigned long) = InitializeParameter[ul] : &:r2557_4 # 2558| r2558_1(glval) = VariableAddress[d] : # 2558| r2558_2(glval) = VariableAddress[ul] : -# 2558| r2558_3(unsigned long) = Load[ul] : &:r2558_2, m2557_6 +# 2558| r2558_3(unsigned long) = Load[ul] : &:r2558_2, m2557_5 # 2558| r2558_4(double) = BuiltIn[__builtin_bit_cast] : 0:r2558_3 # 2558| m2558_5(double) = Store[d] : &:r2558_1, r2558_4 # 2559| v2559_1(void) = NoOp : -# 2557| v2557_7(void) = ReturnVoid : -# 2557| v2557_8(void) = AliasedUse : m2557_3 -# 2557| v2557_9(void) = ExitFunction : +# 2557| v2557_6(void) = ReturnVoid : +# 2557| v2557_7(void) = AliasedUse : ~m? +# 2557| v2557_8(void) = ExitFunction : # 2561| void p_points_to_x_or_y(int, int) # 2561| Block 0 -# 2561| v2561_1(void) = EnterFunction : -# 2561| m2561_2(unknown) = AliasedDefinition : -# 2561| m2561_3(unknown) = InitializeNonLocal : -# 2561| m2561_4(unknown) = Chi : total:m2561_2, partial:m2561_3 -# 2561| m2561_5(int) = UninitializedGroup[x,y] : -# 2561| r2561_6(glval) = VariableAddress[a] : -# 2561| m2561_7(int) = InitializeParameter[a] : &:r2561_6 -# 2561| r2561_8(glval) = VariableAddress[b] : -# 2561| m2561_9(int) = InitializeParameter[b] : &:r2561_8 -# 2562| r2562_1(glval) = VariableAddress[x] : -# 2562| m2562_2(int) = Uninitialized[x] : &:r2562_1 -# 2562| m2562_3(int) = Chi : total:m2561_5, partial:m2562_2 -# 2563| r2563_1(glval) = VariableAddress[y] : -# 2563| m2563_2(int) = Uninitialized[y] : &:r2563_1 -# 2563| m2563_3(int) = Chi : total:m2562_3, partial:m2563_2 -# 2564| r2564_1(glval) = VariableAddress[p] : -# 2564| m2564_2(int *) = Uninitialized[p] : &:r2564_1 -# 2565| r2565_1(glval) = VariableAddress[a] : -# 2565| r2565_2(int) = Load[a] : &:r2565_1, m2561_7 -# 2565| r2565_3(glval) = VariableAddress[b] : -# 2565| r2565_4(int) = Load[b] : &:r2565_3, m2561_9 -# 2565| r2565_5(bool) = CompareLT : r2565_2, r2565_4 -# 2565| v2565_6(void) = ConditionalBranch : r2565_5 +# 2561| v2561_1(void) = EnterFunction : +# 2561| mu2561_2(unknown) = AliasedDefinition : +# 2561| mu2561_3(unknown) = InitializeNonLocal : +# 2561| r2561_4(glval) = VariableAddress[a] : +# 2561| m2561_5(int) = InitializeParameter[a] : &:r2561_4 +# 2561| r2561_6(glval) = VariableAddress[b] : +# 2561| m2561_7(int) = InitializeParameter[b] : &:r2561_6 +# 2562| r2562_1(glval) = VariableAddress[x] : +# 2562| mu2562_2(int) = Uninitialized[x] : &:r2562_1 +# 2563| r2563_1(glval) = VariableAddress[y] : +# 2563| mu2563_2(int) = Uninitialized[y] : &:r2563_1 +# 2564| r2564_1(glval) = VariableAddress[p] : +# 2564| m2564_2(int *) = Uninitialized[p] : &:r2564_1 +# 2565| r2565_1(glval) = VariableAddress[a] : +# 2565| r2565_2(int) = Load[a] : &:r2565_1, m2561_5 +# 2565| r2565_3(glval) = VariableAddress[b] : +# 2565| r2565_4(int) = Load[b] : &:r2565_3, m2561_7 +# 2565| r2565_5(bool) = CompareLT : r2565_2, r2565_4 +# 2565| v2565_6(void) = ConditionalBranch : r2565_5 #-----| False -> Block 2 #-----| True -> Block 1 @@ -19385,61 +17526,52 @@ ir.cpp: # 2570| r2570_3(glval) = VariableAddress[p] : # 2570| r2570_4(int *) = Load[p] : &:r2570_3, m2570_1 # 2570| r2570_5(glval) = CopyValue : r2570_4 -# 2570| m2570_6(int) = Store[?] : &:r2570_5, r2570_2 -# 2570| m2570_7(int) = Chi : total:m2563_3, partial:m2570_6 +# 2570| mu2570_6(int) = Store[?] : &:r2570_5, r2570_2 # 2571| r2571_1(glval) = VariableAddress[z] : # 2571| r2571_2(glval) = VariableAddress[x] : -# 2571| r2571_3(int) = Load[x] : &:r2571_2, ~m2570_7 +# 2571| r2571_3(int) = Load[x] : &:r2571_2, ~m? # 2571| m2571_4(int) = Store[z] : &:r2571_1, r2571_3 # 2572| r2572_1(glval) = VariableAddress[w] : # 2572| r2572_2(glval) = VariableAddress[y] : -# 2572| r2572_3(int) = Load[y] : &:r2572_2, ~m2570_7 +# 2572| r2572_3(int) = Load[y] : &:r2572_2, ~m? # 2572| m2572_4(int) = Store[w] : &:r2572_1, r2572_3 # 2573| v2573_1(void) = NoOp : -# 2561| v2561_10(void) = ReturnVoid : -# 2561| v2561_11(void) = AliasedUse : m2561_3 -# 2561| v2561_12(void) = ExitFunction : +# 2561| v2561_8(void) = ReturnVoid : +# 2561| v2561_9(void) = AliasedUse : ~m? +# 2561| v2561_10(void) = ExitFunction : # 2575| int phi_after_while() # 2575| Block 0 -# 2575| v2575_1(void) = EnterFunction : -# 2575| m2575_2(unknown) = AliasedDefinition : -# 2575| m2575_3(unknown) = InitializeNonLocal : -# 2575| m2575_4(unknown) = Chi : total:m2575_2, partial:m2575_3 -# 2575| m2575_5(int) = UninitializedGroup[r,s] : -# 2576| r2576_1(glval) = VariableAddress[r] : -# 2576| m2576_2(int) = Uninitialized[r] : &:r2576_1 -# 2576| m2576_3(int) = Chi : total:m2575_5, partial:m2576_2 -# 2577| r2577_1(glval) = VariableAddress[rP] : -# 2577| r2577_2(glval) = VariableAddress[r] : -# 2577| r2577_3(int *) = CopyValue : r2577_2 -# 2577| m2577_4(int *) = Store[rP] : &:r2577_1, r2577_3 +# 2575| v2575_1(void) = EnterFunction : +# 2575| mu2575_2(unknown) = AliasedDefinition : +# 2575| mu2575_3(unknown) = InitializeNonLocal : +# 2576| r2576_1(glval) = VariableAddress[r] : +# 2576| mu2576_2(int) = Uninitialized[r] : &:r2576_1 +# 2577| r2577_1(glval) = VariableAddress[rP] : +# 2577| r2577_2(glval) = VariableAddress[r] : +# 2577| r2577_3(int *) = CopyValue : r2577_2 +# 2577| m2577_4(int *) = Store[rP] : &:r2577_1, r2577_3 #-----| Goto -> Block 1 # 2579| Block 1 -# 2579| m2579_1(int) = Phi : from 0:m2576_3, from 2:m2581_7 -# 2579| m2579_2(unknown) = Phi : from 0:~m2575_4, from 2:~m2579_7 -# 2579| m2579_3(int *) = Phi : from 0:m2577_4, from 2:m2582_4 -# 2579| r2579_4(glval) = FunctionAddress[predicateA] : -# 2579| r2579_5(bool) = Call[predicateA] : func:r2579_4 -# 2579| m2579_6(unknown) = ^CallSideEffect : ~m2579_2 -# 2579| m2579_7(unknown) = Chi : total:m2579_2, partial:m2579_6 -# 2579| v2579_8(void) = ConditionalBranch : r2579_5 +# 2579| m2579_1(int *) = Phi : from 0:m2577_4, from 2:m2582_4 +# 2579| r2579_2(glval) = FunctionAddress[predicateA] : +# 2579| r2579_3(bool) = Call[predicateA] : func:r2579_2 +# 2579| mu2579_4(unknown) = ^CallSideEffect : ~m? +# 2579| v2579_5(void) = ConditionalBranch : r2579_3 #-----| False -> Block 3 #-----| True -> Block 2 # 2580| Block 2 # 2580| r2580_1(glval) = VariableAddress[s] : # 2580| r2580_2(int) = Constant[0] : -# 2580| m2580_3(int) = Store[s] : &:r2580_1, r2580_2 -# 2580| m2580_4(int) = Chi : total:m2579_1, partial:m2580_3 +# 2580| mu2580_3(int) = Store[s] : &:r2580_1, r2580_2 # 2581| r2581_1(glval) = VariableAddress[s] : -# 2581| r2581_2(int) = Load[s] : &:r2581_1, m2580_3 +# 2581| r2581_2(int) = Load[s] : &:r2581_1, ~m? # 2581| r2581_3(glval) = VariableAddress[rP] : -# 2581| r2581_4(int *) = Load[rP] : &:r2581_3, m2579_3 +# 2581| r2581_4(int *) = Load[rP] : &:r2581_3, m2579_1 # 2581| r2581_5(glval) = CopyValue : r2581_4 -# 2581| m2581_6(int) = Store[?] : &:r2581_5, r2581_2 -# 2581| m2581_7(int) = Chi : total:m2580_4, partial:m2581_6 +# 2581| mu2581_6(int) = Store[?] : &:r2581_5, r2581_2 # 2582| r2582_1(glval) = VariableAddress[s] : # 2582| r2582_2(int *) = CopyValue : r2582_1 # 2582| r2582_3(glval) = VariableAddress[rP] : @@ -19449,27 +17581,26 @@ ir.cpp: # 2585| Block 3 # 2585| r2585_1(glval) = VariableAddress[#return] : # 2585| r2585_2(glval) = VariableAddress[r] : -# 2585| r2585_3(int) = Load[r] : &:r2585_2, ~m2579_1 +# 2585| r2585_3(int) = Load[r] : &:r2585_2, ~m? # 2585| m2585_4(int) = Store[#return] : &:r2585_1, r2585_3 -# 2575| r2575_6(glval) = VariableAddress[#return] : -# 2575| v2575_7(void) = ReturnValue : &:r2575_6, m2585_4 -# 2575| v2575_8(void) = AliasedUse : ~m2579_7 -# 2575| v2575_9(void) = ExitFunction : +# 2575| r2575_4(glval) = VariableAddress[#return] : +# 2575| v2575_5(void) = ReturnValue : &:r2575_4, m2585_4 +# 2575| v2575_6(void) = AliasedUse : ~m? +# 2575| v2575_7(void) = ExitFunction : # 2590| char* recursive_conditional_call_with_increment(char*, bool) # 2590| Block 0 # 2590| v2590_1(void) = EnterFunction : -# 2590| m2590_2(unknown) = AliasedDefinition : -# 2590| m2590_3(unknown) = InitializeNonLocal : -# 2590| m2590_4(unknown) = Chi : total:m2590_2, partial:m2590_3 -# 2590| r2590_5(glval) = VariableAddress[d] : -# 2590| m2590_6(char *) = InitializeParameter[d] : &:r2590_5 -# 2590| r2590_7(char *) = Load[d] : &:r2590_5, m2590_6 -# 2590| m2590_8(unknown) = InitializeIndirection[d] : &:r2590_7 -# 2590| r2590_9(glval) = VariableAddress[b] : -# 2590| m2590_10(bool) = InitializeParameter[b] : &:r2590_9 +# 2590| mu2590_2(unknown) = AliasedDefinition : +# 2590| mu2590_3(unknown) = InitializeNonLocal : +# 2590| r2590_4(glval) = VariableAddress[d] : +# 2590| m2590_5(char *) = InitializeParameter[d] : &:r2590_4 +# 2590| r2590_6(char *) = Load[d] : &:r2590_4, m2590_5 +# 2590| mu2590_7(unknown) = InitializeIndirection[d] : &:r2590_6 +# 2590| r2590_8(glval) = VariableAddress[b] : +# 2590| m2590_9(bool) = InitializeParameter[b] : &:r2590_8 # 2592| r2592_1(glval) = VariableAddress[b] : -# 2592| r2592_2(bool) = Load[b] : &:r2592_1, m2590_10 +# 2592| r2592_2(bool) = Load[b] : &:r2592_1, m2590_9 # 2592| v2592_3(void) = ConditionalBranch : r2592_2 #-----| False -> Block 2 #-----| True -> Block 1 @@ -19477,54 +17608,45 @@ ir.cpp: # 2593| Block 1 # 2593| r2593_1(glval) = FunctionAddress[recursive_conditional_call_with_increment] : # 2593| r2593_2(glval) = VariableAddress[d] : -# 2593| r2593_3(char *) = Load[d] : &:r2593_2, m2590_6 +# 2593| r2593_3(char *) = Load[d] : &:r2593_2, m2590_5 # 2593| r2593_4(glval) = VariableAddress[b] : -# 2593| r2593_5(bool) = Load[b] : &:r2593_4, m2590_10 +# 2593| r2593_5(bool) = Load[b] : &:r2593_4, m2590_9 # 2593| r2593_6(char *) = Call[recursive_conditional_call_with_increment] : func:r2593_1, 0:r2593_3, 1:r2593_5 -# 2593| m2593_7(unknown) = ^CallSideEffect : ~m2590_4 -# 2593| m2593_8(unknown) = Chi : total:m2590_4, partial:m2593_7 -# 2593| v2593_9(void) = ^BufferReadSideEffect[0] : &:r2593_3, ~m2590_8 -# 2593| m2593_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2593_3 -# 2593| m2593_11(unknown) = Chi : total:m2590_8, partial:m2593_10 -# 2593| r2593_12(glval) = VariableAddress[d] : -# 2593| m2593_13(char *) = Store[d] : &:r2593_12, r2593_6 +# 2593| mu2593_7(unknown) = ^CallSideEffect : ~m? +# 2593| v2593_8(void) = ^BufferReadSideEffect[0] : &:r2593_3, ~m? +# 2593| mu2593_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2593_3 +# 2593| r2593_10(glval) = VariableAddress[d] : +# 2593| m2593_11(char *) = Store[d] : &:r2593_10, r2593_6 #-----| Goto -> Block 2 # 2595| Block 2 -# 2595| m2595_1(unknown) = Phi : from 0:m2590_8, from 1:m2593_11 -# 2595| m2595_2(unknown) = Phi : from 0:~m2590_4, from 1:~m2593_8 -# 2595| m2595_3(char *) = Phi : from 0:m2590_6, from 1:m2593_13 -# 2595| r2595_4(glval) = VariableAddress[d] : -# 2595| r2595_5(char *) = Load[d] : &:r2595_4, m2595_3 -# 2595| r2595_6(int) = Constant[1] : -# 2595| r2595_7(char *) = PointerAdd[1] : r2595_5, r2595_6 -# 2595| m2595_8(char *) = Store[d] : &:r2595_4, r2595_7 +# 2595| m2595_1(char *) = Phi : from 0:m2590_5, from 1:m2593_11 +# 2595| r2595_2(glval) = VariableAddress[d] : +# 2595| r2595_3(char *) = Load[d] : &:r2595_2, m2595_1 +# 2595| r2595_4(int) = Constant[1] : +# 2595| r2595_5(char *) = PointerAdd[1] : r2595_3, r2595_4 +# 2595| m2595_6(char *) = Store[d] : &:r2595_2, r2595_5 # 2596| r2596_1(glval) = VariableAddress[#return] : # 2596| r2596_2(glval) = VariableAddress[d] : -# 2596| r2596_3(char *) = Load[d] : &:r2596_2, m2595_8 +# 2596| r2596_3(char *) = Load[d] : &:r2596_2, m2595_6 # 2596| m2596_4(char *) = Store[#return] : &:r2596_1, r2596_3 -# 2590| v2590_11(void) = ReturnIndirection[d] : &:r2590_7, m2595_1 -# 2590| r2590_12(glval) = VariableAddress[#return] : -# 2590| v2590_13(void) = ReturnValue : &:r2590_12, m2596_4 -# 2590| v2590_14(void) = AliasedUse : ~m2595_2 -# 2590| v2590_15(void) = ExitFunction : +# 2590| v2590_10(void) = ReturnIndirection[d] : &:r2590_6, ~m? +# 2590| r2590_11(glval) = VariableAddress[#return] : +# 2590| v2590_12(void) = ReturnValue : &:r2590_11, m2596_4 +# 2590| v2590_13(void) = AliasedUse : ~m? +# 2590| v2590_14(void) = ExitFunction : # 2604| Recursive* merge(Recursive*) # 2604| Block 0 # 2604| v2604_1(void) = EnterFunction : -# 2604| m2604_2(unknown) = AliasedDefinition : -# 2604| m2604_3(unknown) = InitializeNonLocal : -# 2604| m2604_4(unknown) = Chi : total:m2604_2, partial:m2604_3 -# 2604| m2604_5(Recursive *) = UninitializedGroup[a,b] : -# 2604| m2604_6(unknown) = Chi : total:m2604_4, partial:m2604_5 -# 2604| r2604_7(glval) = VariableAddress[a] : -# 2604| m2604_8(Recursive *) = InitializeParameter[a] : &:r2604_7 -# 2604| r2604_9(Recursive *) = Load[a] : &:r2604_7, m2604_8 -# 2604| m2604_10(unknown) = InitializeIndirection[a] : &:r2604_9 -# 2604| m2604_11(unknown) = Chi : total:m2604_6, partial:m2604_10 +# 2604| mu2604_2(unknown) = AliasedDefinition : +# 2604| mu2604_3(unknown) = InitializeNonLocal : +# 2604| r2604_4(glval) = VariableAddress[a] : +# 2604| m2604_5(Recursive *) = InitializeParameter[a] : &:r2604_4 +# 2604| r2604_6(Recursive *) = Load[a] : &:r2604_4, m2604_5 +# 2604| mu2604_7(unknown) = InitializeIndirection[a] : &:r2604_6 # 2606| r2606_1(glval) = VariableAddress[b] : -# 2606| m2606_2(Recursive *) = Uninitialized[b] : &:r2606_1 -# 2606| m2606_3(unknown) = Chi : total:m2604_11, partial:m2606_2 +# 2606| mu2606_2(Recursive *) = Uninitialized[b] : &:r2606_1 # 2607| r2607_1(glval) = VariableAddress[p] : # 2607| r2607_2(glval) = VariableAddress[b] : # 2607| r2607_3(Recursive **) = CopyValue : r2607_2 @@ -19532,26 +17654,23 @@ ir.cpp: #-----| Goto -> Block 1 # 2609| Block 1 -# 2609| m2609_1(unknown) = Phi : from 0:~m2606_3, from 2:~m2611_7 -# 2609| m2609_2(Recursive **) = Phi : from 0:m2607_4, from 2:m2612_6 -# 2609| r2609_3(glval) = FunctionAddress[predicateA] : -# 2609| r2609_4(bool) = Call[predicateA] : func:r2609_3 -# 2609| m2609_5(unknown) = ^CallSideEffect : ~m2609_1 -# 2609| m2609_6(unknown) = Chi : total:m2609_1, partial:m2609_5 -# 2609| v2609_7(void) = ConditionalBranch : r2609_4 +# 2609| m2609_1(Recursive **) = Phi : from 0:m2607_4, from 2:m2612_6 +# 2609| r2609_2(glval) = FunctionAddress[predicateA] : +# 2609| r2609_3(bool) = Call[predicateA] : func:r2609_2 +# 2609| mu2609_4(unknown) = ^CallSideEffect : ~m? +# 2609| v2609_5(void) = ConditionalBranch : r2609_3 #-----| False -> Block 3 #-----| True -> Block 2 # 2611| Block 2 # 2611| r2611_1(glval) = VariableAddress[a] : -# 2611| r2611_2(Recursive *) = Load[a] : &:r2611_1, m2604_8 +# 2611| r2611_2(Recursive *) = Load[a] : &:r2611_1, m2604_5 # 2611| r2611_3(glval) = VariableAddress[p] : -# 2611| r2611_4(Recursive **) = Load[p] : &:r2611_3, m2609_2 +# 2611| r2611_4(Recursive **) = Load[p] : &:r2611_3, m2609_1 # 2611| r2611_5(glval) = CopyValue : r2611_4 -# 2611| m2611_6(Recursive *) = Store[?] : &:r2611_5, r2611_2 -# 2611| m2611_7(unknown) = Chi : total:m2609_6, partial:m2611_6 +# 2611| mu2611_6(Recursive *) = Store[?] : &:r2611_5, r2611_2 # 2612| r2612_1(glval) = VariableAddress[a] : -# 2612| r2612_2(Recursive *) = Load[a] : &:r2612_1, m2604_8 +# 2612| r2612_2(Recursive *) = Load[a] : &:r2612_1, m2604_5 # 2612| r2612_3(glval) = FieldAddress[next] : r2612_2 # 2612| r2612_4(Recursive **) = CopyValue : r2612_3 # 2612| r2612_5(glval) = VariableAddress[p] : @@ -19559,37 +17678,32 @@ ir.cpp: #-----| Goto (back edge) -> Block 1 # 2615| Block 3 -# 2615| r2615_1(glval) = VariableAddress[#return] : -# 2615| r2615_2(glval) = VariableAddress[b] : -# 2615| r2615_3(Recursive *) = Load[b] : &:r2615_2, ~m2609_6 -# 2615| m2615_4(Recursive *) = Store[#return] : &:r2615_1, r2615_3 -# 2604| v2604_12(void) = ReturnIndirection[a] : &:r2604_9, ~m2609_6 -# 2604| r2604_13(glval) = VariableAddress[#return] : -# 2604| v2604_14(void) = ReturnValue : &:r2604_13, m2615_4 -# 2604| v2604_15(void) = AliasedUse : ~m2609_6 -# 2604| v2604_16(void) = ExitFunction : +# 2615| r2615_1(glval) = VariableAddress[#return] : +# 2615| r2615_2(glval) = VariableAddress[b] : +# 2615| r2615_3(Recursive *) = Load[b] : &:r2615_2, ~m? +# 2615| m2615_4(Recursive *) = Store[#return] : &:r2615_1, r2615_3 +# 2604| v2604_8(void) = ReturnIndirection[a] : &:r2604_6, ~m? +# 2604| r2604_9(glval) = VariableAddress[#return] : +# 2604| v2604_10(void) = ReturnValue : &:r2604_9, m2615_4 +# 2604| v2604_11(void) = AliasedUse : ~m? +# 2604| v2604_12(void) = ExitFunction : # 2620| void escaping_pointer(bool) # 2620| Block 0 -# 2620| v2620_1(void) = EnterFunction : -# 2620| m2620_2(unknown) = AliasedDefinition : -# 2620| m2620_3(unknown) = InitializeNonLocal : -# 2620| m2620_4(unknown) = Chi : total:m2620_2, partial:m2620_3 -# 2620| m2620_5(unknown) = UninitializedGroup[l1,l2] : -# 2620| m2620_6(unknown) = Chi : total:m2620_4, partial:m2620_5 -# 2620| r2620_7(glval) = VariableAddress[b] : -# 2620| m2620_8(bool) = InitializeParameter[b] : &:r2620_7 -# 2622| r2622_1(glval) = VariableAddress[data] : -# 2622| m2622_2(int *) = Uninitialized[data] : &:r2622_1 -# 2623| r2623_1(glval) = VariableAddress[l1] : -# 2623| m2623_2(int) = Uninitialized[l1] : &:r2623_1 -# 2623| m2623_3(unknown) = Chi : total:m2620_6, partial:m2623_2 -# 2623| r2623_4(glval) = VariableAddress[l2] : -# 2623| m2623_5(int) = Uninitialized[l2] : &:r2623_4 -# 2623| m2623_6(unknown) = Chi : total:m2623_3, partial:m2623_5 -# 2624| r2624_1(glval) = VariableAddress[b] : -# 2624| r2624_2(bool) = Load[b] : &:r2624_1, m2620_8 -# 2624| v2624_3(void) = ConditionalBranch : r2624_2 +# 2620| v2620_1(void) = EnterFunction : +# 2620| mu2620_2(unknown) = AliasedDefinition : +# 2620| mu2620_3(unknown) = InitializeNonLocal : +# 2620| r2620_4(glval) = VariableAddress[b] : +# 2620| m2620_5(bool) = InitializeParameter[b] : &:r2620_4 +# 2622| r2622_1(glval) = VariableAddress[data] : +# 2622| m2622_2(int *) = Uninitialized[data] : &:r2622_1 +# 2623| r2623_1(glval) = VariableAddress[l1] : +# 2623| mu2623_2(int) = Uninitialized[l1] : &:r2623_1 +# 2623| r2623_3(glval) = VariableAddress[l2] : +# 2623| mu2623_4(int) = Uninitialized[l2] : &:r2623_3 +# 2624| r2624_1(glval) = VariableAddress[b] : +# 2624| r2624_2(bool) = Load[b] : &:r2624_1, m2620_5 +# 2624| v2624_3(void) = ConditionalBranch : r2624_2 #-----| False -> Block 2 #-----| True -> Block 1 @@ -19614,29 +17728,22 @@ ir.cpp: # 2632| r2632_4(int *) = Load[data] : &:r2632_3, m2632_1 # 2632| r2632_5(int *) = Convert : r2632_4 # 2632| v2632_6(void) = Call[use_const_int] : func:r2632_2, 0:r2632_5 -# 2632| m2632_7(unknown) = ^CallSideEffect : ~m2623_6 -# 2632| m2632_8(unknown) = Chi : total:m2623_6, partial:m2632_7 -# 2632| v2632_9(void) = ^BufferReadSideEffect[0] : &:r2632_5, ~m2632_8 +# 2632| mu2632_7(unknown) = ^CallSideEffect : ~m? +# 2632| v2632_8(void) = ^BufferReadSideEffect[0] : &:r2632_5, ~m? # 2633| v2633_1(void) = NoOp : -# 2620| v2620_9(void) = ReturnVoid : -# 2620| v2620_10(void) = AliasedUse : ~m2632_8 -# 2620| v2620_11(void) = ExitFunction : +# 2620| v2620_6(void) = ReturnVoid : +# 2620| v2620_7(void) = AliasedUse : ~m? +# 2620| v2620_8(void) = ExitFunction : # 2641| void needs_chi_for_initialize_groups() # 2641| Block 0 # 2641| v2641_1(void) = EnterFunction : -# 2641| m2641_2(unknown) = AliasedDefinition : -# 2641| m2641_3(unknown) = InitializeNonLocal : -# 2641| m2641_4(unknown) = Chi : total:m2641_2, partial:m2641_3 -# 2641| m2641_5(unknown) = UninitializedGroup : -# 2641| m2641_6(unknown) = Chi : total:m2641_4, partial:m2641_5 -# 2641| m2641_7(unknown) = UninitializedGroup : -# 2641| m2641_8(unknown) = Chi : total:m2641_6, partial:m2641_7 +# 2641| mu2641_2(unknown) = AliasedDefinition : +# 2641| mu2641_3(unknown) = InitializeNonLocal : # 2643| r2643_1(glval) = FunctionAddress[predicateA] : # 2643| r2643_2(bool) = Call[predicateA] : func:r2643_1 -# 2643| m2643_3(unknown) = ^CallSideEffect : ~m2641_8 -# 2643| m2643_4(unknown) = Chi : total:m2641_8, partial:m2643_3 -# 2643| v2643_5(void) = ConditionalBranch : r2643_2 +# 2643| mu2643_3(unknown) = ^CallSideEffect : ~m? +# 2643| v2643_4(void) = ConditionalBranch : r2643_2 #-----| False -> Block 4 #-----| True -> Block 1 @@ -19645,14 +17752,12 @@ ir.cpp: # 2645| r2645_2(glval) = FunctionAddress[malloc] : # 2645| r2645_3(unsigned long) = Constant[100] : # 2645| r2645_4(void *) = Call[malloc] : func:r2645_2, 0:r2645_3 -# 2645| m2645_5(unknown) = ^CallSideEffect : ~m2643_4 -# 2645| m2645_6(unknown) = Chi : total:m2643_4, partial:m2645_5 -# 2645| m2645_7(unknown) = ^InitializeDynamicAllocation : &:r2645_4 -# 2645| m2645_8(unknown) = Chi : total:m2645_6, partial:m2645_7 -# 2645| r2645_9(long long *) = Convert : r2645_4 -# 2645| m2645_10(long long *) = Store[data] : &:r2645_1, r2645_9 +# 2645| mu2645_5(unknown) = ^CallSideEffect : ~m? +# 2645| mu2645_6(unknown) = ^InitializeDynamicAllocation : &:r2645_4 +# 2645| r2645_7(long long *) = Convert : r2645_4 +# 2645| m2645_8(long long *) = Store[data] : &:r2645_1, r2645_7 # 2646| r2646_1(glval) = VariableAddress[data] : -# 2646| r2646_2(long long *) = Load[data] : &:r2646_1, m2645_10 +# 2646| r2646_2(long long *) = Load[data] : &:r2646_1, m2645_8 # 2646| r2646_3(void *) = Convert : r2646_2 # 2646| r2646_4(void *) = Constant[0] : # 2646| r2646_5(bool) = CompareNE : r2646_3, r2646_4 @@ -19664,26 +17769,22 @@ ir.cpp: # 2648| r2648_1(glval) = FunctionAddress[malloc] : # 2648| r2648_2(unsigned long) = Constant[100] : # 2648| r2648_3(void *) = Call[malloc] : func:r2648_1, 0:r2648_2 -# 2648| m2648_4(unknown) = ^CallSideEffect : ~m2645_8 -# 2648| m2648_5(unknown) = Chi : total:m2645_8, partial:m2648_4 -# 2648| m2648_6(unknown) = ^InitializeDynamicAllocation : &:r2648_3 -# 2648| m2648_7(unknown) = Chi : total:m2648_5, partial:m2648_6 -# 2648| r2648_8(long long *) = Convert : r2648_3 -# 2648| r2648_9(glval) = VariableAddress[data] : -# 2648| m2648_10(long long *) = Store[data] : &:r2648_9, r2648_8 +# 2648| mu2648_4(unknown) = ^CallSideEffect : ~m? +# 2648| mu2648_5(unknown) = ^InitializeDynamicAllocation : &:r2648_3 +# 2648| r2648_6(long long *) = Convert : r2648_3 +# 2648| r2648_7(glval) = VariableAddress[data] : +# 2648| m2648_8(long long *) = Store[data] : &:r2648_7, r2648_6 #-----| Goto -> Block 3 # 2650| Block 3 -# 2650| m2650_1(unknown) = Phi : from 1:~m2645_8, from 2:~m2648_7 -# 2650| m2650_2(long long *) = Phi : from 1:m2645_10, from 2:m2648_10 -# 2650| r2650_3(glval) = FunctionAddress[use_const_void_pointer] : -# 2650| r2650_4(glval) = VariableAddress[data] : -# 2650| r2650_5(long long *) = Load[data] : &:r2650_4, m2650_2 -# 2650| r2650_6(void *) = Convert : r2650_5 -# 2650| v2650_7(void) = Call[use_const_void_pointer] : func:r2650_3, 0:r2650_6 -# 2650| m2650_8(unknown) = ^CallSideEffect : ~m2650_1 -# 2650| m2650_9(unknown) = Chi : total:m2650_1, partial:m2650_8 -# 2650| v2650_10(void) = ^BufferReadSideEffect[0] : &:r2650_6, ~m2650_9 +# 2650| m2650_1(long long *) = Phi : from 1:m2645_8, from 2:m2648_8 +# 2650| r2650_2(glval) = FunctionAddress[use_const_void_pointer] : +# 2650| r2650_3(glval) = VariableAddress[data] : +# 2650| r2650_4(long long *) = Load[data] : &:r2650_3, m2650_1 +# 2650| r2650_5(void *) = Convert : r2650_4 +# 2650| v2650_6(void) = Call[use_const_void_pointer] : func:r2650_2, 0:r2650_5 +# 2650| mu2650_7(unknown) = ^CallSideEffect : ~m? +# 2650| v2650_8(void) = ^BufferReadSideEffect[0] : &:r2650_5, ~m? #-----| Goto -> Block 7 # 2654| Block 4 @@ -19691,14 +17792,12 @@ ir.cpp: # 2654| r2654_2(glval) = FunctionAddress[malloc] : # 2654| r2654_3(unsigned long) = Constant[100] : # 2654| r2654_4(void *) = Call[malloc] : func:r2654_2, 0:r2654_3 -# 2654| m2654_5(unknown) = ^CallSideEffect : ~m2643_4 -# 2654| m2654_6(unknown) = Chi : total:m2643_4, partial:m2654_5 -# 2654| m2654_7(unknown) = ^InitializeDynamicAllocation : &:r2654_4 -# 2654| m2654_8(unknown) = Chi : total:m2654_6, partial:m2654_7 -# 2654| r2654_9(long long *) = Convert : r2654_4 -# 2654| m2654_10(long long *) = Store[data] : &:r2654_1, r2654_9 +# 2654| mu2654_5(unknown) = ^CallSideEffect : ~m? +# 2654| mu2654_6(unknown) = ^InitializeDynamicAllocation : &:r2654_4 +# 2654| r2654_7(long long *) = Convert : r2654_4 +# 2654| m2654_8(long long *) = Store[data] : &:r2654_1, r2654_7 # 2655| r2655_1(glval) = VariableAddress[data] : -# 2655| r2655_2(long long *) = Load[data] : &:r2655_1, m2654_10 +# 2655| r2655_2(long long *) = Load[data] : &:r2655_1, m2654_8 # 2655| r2655_3(void *) = Convert : r2655_2 # 2655| r2655_4(void *) = Constant[0] : # 2655| r2655_5(bool) = CompareNE : r2655_3, r2655_4 @@ -19710,48 +17809,42 @@ ir.cpp: # 2657| r2657_1(glval) = FunctionAddress[malloc] : # 2657| r2657_2(unsigned long) = Constant[200] : # 2657| r2657_3(void *) = Call[malloc] : func:r2657_1, 0:r2657_2 -# 2657| m2657_4(unknown) = ^CallSideEffect : ~m2654_8 -# 2657| m2657_5(unknown) = Chi : total:m2654_8, partial:m2657_4 -# 2657| m2657_6(unknown) = ^InitializeDynamicAllocation : &:r2657_3 -# 2657| m2657_7(unknown) = Chi : total:m2657_5, partial:m2657_6 -# 2657| r2657_8(long long *) = Convert : r2657_3 -# 2657| r2657_9(glval) = VariableAddress[data] : -# 2657| m2657_10(long long *) = Store[data] : &:r2657_9, r2657_8 +# 2657| mu2657_4(unknown) = ^CallSideEffect : ~m? +# 2657| mu2657_5(unknown) = ^InitializeDynamicAllocation : &:r2657_3 +# 2657| r2657_6(long long *) = Convert : r2657_3 +# 2657| r2657_7(glval) = VariableAddress[data] : +# 2657| m2657_8(long long *) = Store[data] : &:r2657_7, r2657_6 #-----| Goto -> Block 6 # 2659| Block 6 -# 2659| m2659_1(unknown) = Phi : from 4:~m2654_8, from 5:~m2657_7 -# 2659| m2659_2(long long *) = Phi : from 4:m2654_10, from 5:m2657_10 -# 2659| r2659_3(glval) = FunctionAddress[use_const_void_pointer] : -# 2659| r2659_4(glval) = VariableAddress[data] : -# 2659| r2659_5(long long *) = Load[data] : &:r2659_4, m2659_2 -# 2659| r2659_6(void *) = Convert : r2659_5 -# 2659| v2659_7(void) = Call[use_const_void_pointer] : func:r2659_3, 0:r2659_6 -# 2659| m2659_8(unknown) = ^CallSideEffect : ~m2659_1 -# 2659| m2659_9(unknown) = Chi : total:m2659_1, partial:m2659_8 -# 2659| v2659_10(void) = ^BufferReadSideEffect[0] : &:r2659_6, ~m2659_9 +# 2659| m2659_1(long long *) = Phi : from 4:m2654_8, from 5:m2657_8 +# 2659| r2659_2(glval) = FunctionAddress[use_const_void_pointer] : +# 2659| r2659_3(glval) = VariableAddress[data] : +# 2659| r2659_4(long long *) = Load[data] : &:r2659_3, m2659_1 +# 2659| r2659_5(void *) = Convert : r2659_4 +# 2659| v2659_6(void) = Call[use_const_void_pointer] : func:r2659_2, 0:r2659_5 +# 2659| mu2659_7(unknown) = ^CallSideEffect : ~m? +# 2659| v2659_8(void) = ^BufferReadSideEffect[0] : &:r2659_5, ~m? #-----| Goto -> Block 7 # 2661| Block 7 -# 2661| m2661_1(unknown) = Phi : from 3:~m2650_9, from 6:~m2659_9 -# 2661| v2661_2(void) = NoOp : -# 2641| v2641_9(void) = ReturnVoid : -# 2641| v2641_10(void) = AliasedUse : ~m2661_1 -# 2641| v2641_11(void) = ExitFunction : +# 2661| v2661_1(void) = NoOp : +# 2641| v2641_4(void) = ReturnVoid : +# 2641| v2641_5(void) = AliasedUse : ~m? +# 2641| v2641_6(void) = ExitFunction : # 2665| void phi_with_single_input_at_merge(bool) # 2665| Block 0 # 2665| v2665_1(void) = EnterFunction : -# 2665| m2665_2(unknown) = AliasedDefinition : -# 2665| m2665_3(unknown) = InitializeNonLocal : -# 2665| m2665_4(unknown) = Chi : total:m2665_2, partial:m2665_3 -# 2665| r2665_5(glval) = VariableAddress[b] : -# 2665| m2665_6(bool) = InitializeParameter[b] : &:r2665_5 +# 2665| mu2665_2(unknown) = AliasedDefinition : +# 2665| mu2665_3(unknown) = InitializeNonLocal : +# 2665| r2665_4(glval) = VariableAddress[b] : +# 2665| m2665_5(bool) = InitializeParameter[b] : &:r2665_4 # 2667| r2667_1(glval) = VariableAddress[data] : # 2667| r2667_2(int *) = Constant[0] : # 2667| m2667_3(int *) = Store[data] : &:r2667_1, r2667_2 # 2668| r2668_1(glval) = VariableAddress[b] : -# 2668| r2668_2(bool) = Load[b] : &:r2668_1, m2665_6 +# 2668| r2668_2(bool) = Load[b] : &:r2668_1, m2665_5 # 2668| v2668_3(void) = ConditionalBranch : r2668_2 #-----| False -> Block 2 #-----| True -> Block 1 @@ -19759,8 +17852,7 @@ ir.cpp: # 2669| Block 1 # 2669| r2669_1(glval) = VariableAddress[intBuffer] : # 2669| r2669_2(int) = Constant[8] : -# 2669| m2669_3(int) = Store[intBuffer] : &:r2669_1, r2669_2 -# 2669| m2669_4(unknown) = Chi : total:m2665_4, partial:m2669_3 +# 2669| mu2669_3(int) = Store[intBuffer] : &:r2669_1, r2669_2 # 2670| r2670_1(glval) = VariableAddress[intBuffer] : # 2670| r2670_2(int *) = CopyValue : r2670_1 # 2670| r2670_3(glval) = VariableAddress[data] : @@ -19768,110 +17860,100 @@ ir.cpp: #-----| Goto -> Block 2 # 2672| Block 2 -# 2672| m2672_1(unknown) = Phi : from 0:~m2665_4, from 1:~m2669_4 -# 2672| m2672_2(int *) = Phi : from 0:m2667_3, from 1:m2670_4 -# 2672| r2672_3(glval) = FunctionAddress[use_int] : -# 2672| r2672_4(glval) = VariableAddress[data] : -# 2672| r2672_5(int *) = Load[data] : &:r2672_4, m2672_2 -# 2672| r2672_6(int) = Load[?] : &:r2672_5, ~m2672_1 -# 2672| v2672_7(void) = Call[use_int] : func:r2672_3, 0:r2672_6 -# 2672| m2672_8(unknown) = ^CallSideEffect : ~m2672_1 -# 2672| m2672_9(unknown) = Chi : total:m2672_1, partial:m2672_8 +# 2672| m2672_1(int *) = Phi : from 0:m2667_3, from 1:m2670_4 +# 2672| r2672_2(glval) = FunctionAddress[use_int] : +# 2672| r2672_3(glval) = VariableAddress[data] : +# 2672| r2672_4(int *) = Load[data] : &:r2672_3, m2672_1 +# 2672| r2672_5(int) = Load[?] : &:r2672_4, ~m? +# 2672| v2672_6(void) = Call[use_int] : func:r2672_2, 0:r2672_5 +# 2672| mu2672_7(unknown) = ^CallSideEffect : ~m? # 2673| v2673_1(void) = NoOp : -# 2665| v2665_7(void) = ReturnVoid : -# 2665| v2665_8(void) = AliasedUse : ~m2672_9 -# 2665| v2665_9(void) = ExitFunction : +# 2665| v2665_6(void) = ReturnVoid : +# 2665| v2665_7(void) = AliasedUse : ~m? +# 2665| v2665_8(void) = ExitFunction : # 2686| void test(bool) # 2686| Block 0 -# 2686| v2686_1(void) = EnterFunction : -# 2686| m2686_2(unknown) = AliasedDefinition : -# 2686| m2686_3(unknown) = InitializeNonLocal : -# 2686| m2686_4(unknown) = Chi : total:m2686_2, partial:m2686_3 -# 2686| m2686_5(unknown) = UninitializedGroup[#string2688:22,#string2688:27] : -# 2686| m2686_6(unknown) = Chi : total:m2686_4, partial:m2686_5 -# 2686| m2686_7(unknown) = UninitializedGroup[#string2688:22,#string2688:27] : -# 2686| m2686_8(unknown) = Chi : total:m2686_6, partial:m2686_7 -# 2686| r2686_9(glval) = VariableAddress[b] : -# 2686| m2686_10(bool) = InitializeParameter[b] : &:r2686_9 -# 2688| r2688_1(glval) = FunctionAddress[use] : -# 2688| r2688_2(glval) = VariableAddress[b] : -# 2688| r2688_3(bool) = Load[b] : &:r2688_2, m2686_10 -# 2688| v2688_4(void) = ConditionalBranch : r2688_3 +# 2686| v2686_1(void) = EnterFunction : +# 2686| mu2686_2(unknown) = AliasedDefinition : +# 2686| mu2686_3(unknown) = InitializeNonLocal : +# 2686| r2686_4(glval) = VariableAddress[b] : +# 2686| m2686_5(bool) = InitializeParameter[b] : &:r2686_4 +# 2688| r2688_1(glval) = FunctionAddress[use] : +# 2688| r2688_2(glval) = VariableAddress[b] : +# 2688| r2688_3(bool) = Load[b] : &:r2688_2, m2686_5 +# 2688| v2688_4(void) = ConditionalBranch : r2688_3 #-----| False -> Block 3 #-----| True -> Block 2 # 2688| Block 1 -# 2688| m2688_5(char *) = Phi : from 2:m2688_19, from 3:m2688_23 +# 2688| m2688_5(char *) = Phi : from 2:m2688_18, from 3:m2688_22 # 2688| r2688_6(glval) = VariableAddress[#temp2688:18] : # 2688| r2688_7(char *) = Load[#temp2688:18] : &:r2688_6, m2688_5 # 2688| v2688_8(void) = Call[use] : func:r2688_1, 0:r2688_7 -# 2688| m2688_9(unknown) = ^CallSideEffect : ~m2686_8 -# 2688| m2688_10(unknown) = Chi : total:m2686_8, partial:m2688_9 -# 2688| v2688_11(void) = ^BufferReadSideEffect[0] : &:r2688_7, ~m2688_10 -# 2688| r2688_12(glval) = FunctionAddress[use] : -# 2688| r2688_13(glval) = VariableAddress[b] : -# 2688| r2688_14(bool) = Load[b] : &:r2688_13, m2686_10 -# 2688| v2688_15(void) = ConditionalBranch : r2688_14 +# 2688| mu2688_9(unknown) = ^CallSideEffect : ~m? +# 2688| v2688_10(void) = ^BufferReadSideEffect[0] : &:r2688_7, ~m? +# 2688| r2688_11(glval) = FunctionAddress[use] : +# 2688| r2688_12(glval) = VariableAddress[b] : +# 2688| r2688_13(bool) = Load[b] : &:r2688_12, m2686_5 +# 2688| v2688_14(void) = ConditionalBranch : r2688_13 #-----| False -> Block 6 #-----| True -> Block 5 # 2688| Block 2 -# 2688| r2688_16(glval) = StringConstant[] : -# 2688| r2688_17(char *) = Convert : r2688_16 -# 2688| r2688_18(glval) = VariableAddress[#temp2688:18] : -# 2688| m2688_19(char *) = Store[#temp2688:18] : &:r2688_18, r2688_17 +# 2688| r2688_15(glval) = StringConstant[] : +# 2688| r2688_16(char *) = Convert : r2688_15 +# 2688| r2688_17(glval) = VariableAddress[#temp2688:18] : +# 2688| m2688_18(char *) = Store[#temp2688:18] : &:r2688_17, r2688_16 #-----| Goto -> Block 1 # 2688| Block 3 -# 2688| r2688_20(glval) = StringConstant[] : -# 2688| r2688_21(char *) = Convert : r2688_20 -# 2688| r2688_22(glval) = VariableAddress[#temp2688:18] : -# 2688| m2688_23(char *) = Store[#temp2688:18] : &:r2688_22, r2688_21 +# 2688| r2688_19(glval) = StringConstant[] : +# 2688| r2688_20(char *) = Convert : r2688_19 +# 2688| r2688_21(glval) = VariableAddress[#temp2688:18] : +# 2688| m2688_22(char *) = Store[#temp2688:18] : &:r2688_21, r2688_20 #-----| Goto -> Block 1 # 2688| Block 4 -# 2688| m2688_24(char *) = Phi : from 5:m2688_36, from 6:m2688_40 -# 2688| r2688_25(glval) = VariableAddress[#temp2688:18] : -# 2688| r2688_26(char *) = Load[#temp2688:18] : &:r2688_25, m2688_24 -# 2688| v2688_27(void) = Call[use] : func:r2688_12, 0:r2688_26 -# 2688| m2688_28(unknown) = ^CallSideEffect : ~m2688_10 -# 2688| m2688_29(unknown) = Chi : total:m2688_10, partial:m2688_28 -# 2688| v2688_30(void) = ^BufferReadSideEffect[0] : &:r2688_26, ~m2688_29 -# 2688| r2688_31(bool) = Constant[0] : -# 2688| v2688_32(void) = ConditionalBranch : r2688_31 +# 2688| m2688_23(char *) = Phi : from 5:m2688_34, from 6:m2688_38 +# 2688| r2688_24(glval) = VariableAddress[#temp2688:18] : +# 2688| r2688_25(char *) = Load[#temp2688:18] : &:r2688_24, m2688_23 +# 2688| v2688_26(void) = Call[use] : func:r2688_11, 0:r2688_25 +# 2688| mu2688_27(unknown) = ^CallSideEffect : ~m? +# 2688| v2688_28(void) = ^BufferReadSideEffect[0] : &:r2688_25, ~m? +# 2688| r2688_29(bool) = Constant[0] : +# 2688| v2688_30(void) = ConditionalBranch : r2688_29 #-----| False -> Block 7 #-----| True -> Block 8 # 2688| Block 5 -# 2688| r2688_33(glval) = StringConstant[] : -# 2688| r2688_34(char *) = Convert : r2688_33 -# 2688| r2688_35(glval) = VariableAddress[#temp2688:18] : -# 2688| m2688_36(char *) = Store[#temp2688:18] : &:r2688_35, r2688_34 +# 2688| r2688_31(glval) = StringConstant[] : +# 2688| r2688_32(char *) = Convert : r2688_31 +# 2688| r2688_33(glval) = VariableAddress[#temp2688:18] : +# 2688| m2688_34(char *) = Store[#temp2688:18] : &:r2688_33, r2688_32 #-----| Goto -> Block 4 # 2688| Block 6 -# 2688| r2688_37(glval) = StringConstant[] : -# 2688| r2688_38(char *) = Convert : r2688_37 -# 2688| r2688_39(glval) = VariableAddress[#temp2688:18] : -# 2688| m2688_40(char *) = Store[#temp2688:18] : &:r2688_39, r2688_38 +# 2688| r2688_35(glval) = StringConstant[] : +# 2688| r2688_36(char *) = Convert : r2688_35 +# 2688| r2688_37(glval) = VariableAddress[#temp2688:18] : +# 2688| m2688_38(char *) = Store[#temp2688:18] : &:r2688_37, r2688_36 #-----| Goto -> Block 4 # 2689| Block 7 -# 2689| v2689_1(void) = NoOp : -# 2686| v2686_11(void) = ReturnVoid : -# 2686| v2686_12(void) = AliasedUse : ~m2688_29 -# 2686| v2686_13(void) = ExitFunction : +# 2689| v2689_1(void) = NoOp : +# 2686| v2686_6(void) = ReturnVoid : +# 2686| v2686_7(void) = AliasedUse : ~m? +# 2686| v2686_8(void) = ExitFunction : # 2686| Block 8 -# 2686| v2686_14(void) = Unreached : +# 2686| v2686_9(void) = Unreached : # 2693| int concepts::requires_use() # 2693| Block 0 # 2693| v2693_1(void) = EnterFunction : -# 2693| m2693_2(unknown) = AliasedDefinition : -# 2693| m2693_3(unknown) = InitializeNonLocal : -# 2693| m2693_4(unknown) = Chi : total:m2693_2, partial:m2693_3 +# 2693| mu2693_2(unknown) = AliasedDefinition : +# 2693| mu2693_3(unknown) = InitializeNonLocal : # 2694| r2694_1(glval) = VariableAddress[y] : # 2694| r2694_2(int) = Constant[1] : # 2694| m2694_3(int) = Store[y] : &:r2694_1, r2694_2 @@ -19879,23 +17961,22 @@ ir.cpp: # 2695| r2695_2(glval) = VariableAddress[y] : # 2695| r2695_3(int) = Load[y] : &:r2695_2, m2694_3 # 2695| m2695_4(int) = Store[#return] : &:r2695_1, r2695_3 -# 2693| r2693_5(glval) = VariableAddress[#return] : -# 2693| v2693_6(void) = ReturnValue : &:r2693_5, m2695_4 -# 2693| v2693_7(void) = AliasedUse : m2693_3 -# 2693| v2693_8(void) = ExitFunction : +# 2693| r2693_4(glval) = VariableAddress[#return] : +# 2693| v2693_5(void) = ReturnValue : &:r2693_4, m2695_4 +# 2693| v2693_6(void) = AliasedUse : ~m? +# 2693| v2693_7(void) = ExitFunction : # 2700| void branch_on_integral_in_cpp(int, int) # 2700| Block 0 # 2700| v2700_1(void) = EnterFunction : -# 2700| m2700_2(unknown) = AliasedDefinition : -# 2700| m2700_3(unknown) = InitializeNonLocal : -# 2700| m2700_4(unknown) = Chi : total:m2700_2, partial:m2700_3 -# 2700| r2700_5(glval) = VariableAddress[x1] : -# 2700| m2700_6(int) = InitializeParameter[x1] : &:r2700_5 -# 2700| r2700_7(glval) = VariableAddress[x2] : -# 2700| m2700_8(int) = InitializeParameter[x2] : &:r2700_7 +# 2700| mu2700_2(unknown) = AliasedDefinition : +# 2700| mu2700_3(unknown) = InitializeNonLocal : +# 2700| r2700_4(glval) = VariableAddress[x1] : +# 2700| m2700_5(int) = InitializeParameter[x1] : &:r2700_4 +# 2700| r2700_6(glval) = VariableAddress[x2] : +# 2700| m2700_7(int) = InitializeParameter[x2] : &:r2700_6 # 2701| r2701_1(glval) = VariableAddress[x1] : -# 2701| r2701_2(int) = Load[x1] : &:r2701_1, m2700_6 +# 2701| r2701_2(int) = Load[x1] : &:r2701_1, m2700_5 # 2701| r2701_3(int) = Constant[0] : # 2701| r2701_4(bool) = CompareNE : r2701_2, r2701_3 # 2701| v2701_5(void) = ConditionalBranch : r2701_4 @@ -19908,7 +17989,7 @@ ir.cpp: # 2702| Block 2 # 2702| r2702_1(glval) = VariableAddress[x1] : -# 2702| r2702_2(int) = Load[x1] : &:r2702_1, m2700_6 +# 2702| r2702_2(int) = Load[x1] : &:r2702_1, m2700_5 # 2702| r2702_3(int) = Constant[0] : # 2702| r2702_4(bool) = CompareNE : r2702_2, r2702_3 # 2702| r2702_5(bool) = LogicalNot : r2702_4 @@ -19923,7 +18004,7 @@ ir.cpp: # 2704| Block 4 # 2704| r2704_1(glval) = VariableAddress[y] : # 2704| r2704_2(glval) = VariableAddress[x1] : -# 2704| r2704_3(int) = Load[x1] : &:r2704_2, m2700_6 +# 2704| r2704_3(int) = Load[x1] : &:r2704_2, m2700_5 # 2704| r2704_4(int) = Constant[0] : # 2704| r2704_5(bool) = CompareNE : r2704_3, r2704_4 # 2704| r2704_6(bool) = LogicalNot : r2704_5 @@ -19957,7 +18038,7 @@ ir.cpp: # 2708| Block 8 # 2708| r2708_1(glval) = VariableAddress[x1] : -# 2708| r2708_2(int) = Load[x1] : &:r2708_1, m2700_6 +# 2708| r2708_2(int) = Load[x1] : &:r2708_1, m2700_5 # 2708| r2708_3(int) = Constant[0] : # 2708| r2708_4(bool) = CompareNE : r2708_2, r2708_3 # 2708| v2708_5(void) = ConditionalBranch : r2708_4 @@ -19966,7 +18047,7 @@ ir.cpp: # 2708| Block 9 # 2708| r2708_6(glval) = VariableAddress[x2] : -# 2708| r2708_7(int) = Load[x2] : &:r2708_6, m2700_8 +# 2708| r2708_7(int) = Load[x2] : &:r2708_6, m2700_7 # 2708| r2708_8(int) = Constant[0] : # 2708| r2708_9(bool) = CompareNE : r2708_7, r2708_8 # 2708| v2708_10(void) = ConditionalBranch : r2708_9 @@ -19979,7 +18060,7 @@ ir.cpp: # 2709| Block 11 # 2709| r2709_1(glval) = VariableAddress[x1] : -# 2709| r2709_2(int) = Load[x1] : &:r2709_1, m2700_6 +# 2709| r2709_2(int) = Load[x1] : &:r2709_1, m2700_5 # 2709| r2709_3(int) = Constant[0] : # 2709| r2709_4(bool) = CompareNE : r2709_2, r2709_3 # 2709| r2709_5(bool) = LogicalNot : r2709_4 @@ -19989,7 +18070,7 @@ ir.cpp: # 2709| Block 12 # 2709| r2709_7(glval) = VariableAddress[x2] : -# 2709| r2709_8(int) = Load[x2] : &:r2709_7, m2700_8 +# 2709| r2709_8(int) = Load[x2] : &:r2709_7, m2700_7 # 2709| r2709_9(int) = Constant[0] : # 2709| r2709_10(bool) = CompareNE : r2709_8, r2709_9 # 2709| v2709_11(void) = ConditionalBranch : r2709_10 @@ -20002,7 +18083,7 @@ ir.cpp: # 2710| Block 14 # 2710| r2710_1(glval) = VariableAddress[x1] : -# 2710| r2710_2(int) = Load[x1] : &:r2710_1, m2700_6 +# 2710| r2710_2(int) = Load[x1] : &:r2710_1, m2700_5 # 2710| r2710_3(int) = Constant[0] : # 2710| r2710_4(bool) = CompareNE : r2710_2, r2710_3 # 2710| v2710_5(void) = ConditionalBranch : r2710_4 @@ -20011,7 +18092,7 @@ ir.cpp: # 2710| Block 15 # 2710| r2710_6(glval) = VariableAddress[x2] : -# 2710| r2710_7(int) = Load[x2] : &:r2710_6, m2700_8 +# 2710| r2710_7(int) = Load[x2] : &:r2710_6, m2700_7 # 2710| r2710_8(int) = Constant[0] : # 2710| r2710_9(bool) = CompareNE : r2710_7, r2710_8 # 2710| r2710_10(bool) = LogicalNot : r2710_9 @@ -20025,7 +18106,7 @@ ir.cpp: # 2711| Block 17 # 2711| r2711_1(glval) = VariableAddress[x1] : -# 2711| r2711_2(int) = Load[x1] : &:r2711_1, m2700_6 +# 2711| r2711_2(int) = Load[x1] : &:r2711_1, m2700_5 # 2711| r2711_3(int) = Constant[0] : # 2711| r2711_4(bool) = CompareNE : r2711_2, r2711_3 # 2711| r2711_5(bool) = LogicalNot : r2711_4 @@ -20035,7 +18116,7 @@ ir.cpp: # 2711| Block 18 # 2711| r2711_7(glval) = VariableAddress[x2] : -# 2711| r2711_8(int) = Load[x2] : &:r2711_7, m2700_8 +# 2711| r2711_8(int) = Load[x2] : &:r2711_7, m2700_7 # 2711| r2711_9(int) = Constant[0] : # 2711| r2711_10(bool) = CompareNE : r2711_8, r2711_9 # 2711| r2711_11(bool) = LogicalNot : r2711_10 @@ -20049,7 +18130,7 @@ ir.cpp: # 2712| Block 20 # 2712| r2712_1(glval) = VariableAddress[x1] : -# 2712| r2712_2(int) = Load[x1] : &:r2712_1, m2700_6 +# 2712| r2712_2(int) = Load[x1] : &:r2712_1, m2700_5 # 2712| r2712_3(int) = Constant[0] : # 2712| r2712_4(bool) = CompareNE : r2712_2, r2712_3 # 2712| v2712_5(void) = ConditionalBranch : r2712_4 @@ -20058,7 +18139,7 @@ ir.cpp: # 2712| Block 21 # 2712| r2712_6(glval) = VariableAddress[x2] : -# 2712| r2712_7(int) = Load[x2] : &:r2712_6, m2700_8 +# 2712| r2712_7(int) = Load[x2] : &:r2712_6, m2700_7 # 2712| r2712_8(int) = Constant[0] : # 2712| r2712_9(bool) = CompareNE : r2712_7, r2712_8 # 2712| v2712_10(void) = ConditionalBranch : r2712_9 @@ -20071,7 +18152,7 @@ ir.cpp: # 2713| Block 23 # 2713| r2713_1(glval) = VariableAddress[x1] : -# 2713| r2713_2(int) = Load[x1] : &:r2713_1, m2700_6 +# 2713| r2713_2(int) = Load[x1] : &:r2713_1, m2700_5 # 2713| r2713_3(int) = Constant[0] : # 2713| r2713_4(bool) = CompareNE : r2713_2, r2713_3 # 2713| r2713_5(bool) = LogicalNot : r2713_4 @@ -20081,7 +18162,7 @@ ir.cpp: # 2713| Block 24 # 2713| r2713_7(glval) = VariableAddress[x2] : -# 2713| r2713_8(int) = Load[x2] : &:r2713_7, m2700_8 +# 2713| r2713_8(int) = Load[x2] : &:r2713_7, m2700_7 # 2713| r2713_9(int) = Constant[0] : # 2713| r2713_10(bool) = CompareNE : r2713_8, r2713_9 # 2713| v2713_11(void) = ConditionalBranch : r2713_10 @@ -20094,7 +18175,7 @@ ir.cpp: # 2714| Block 26 # 2714| r2714_1(glval) = VariableAddress[x1] : -# 2714| r2714_2(int) = Load[x1] : &:r2714_1, m2700_6 +# 2714| r2714_2(int) = Load[x1] : &:r2714_1, m2700_5 # 2714| r2714_3(int) = Constant[0] : # 2714| r2714_4(bool) = CompareNE : r2714_2, r2714_3 # 2714| v2714_5(void) = ConditionalBranch : r2714_4 @@ -20103,7 +18184,7 @@ ir.cpp: # 2714| Block 27 # 2714| r2714_6(glval) = VariableAddress[x2] : -# 2714| r2714_7(int) = Load[x2] : &:r2714_6, m2700_8 +# 2714| r2714_7(int) = Load[x2] : &:r2714_6, m2700_7 # 2714| r2714_8(int) = Constant[0] : # 2714| r2714_9(bool) = CompareNE : r2714_7, r2714_8 # 2714| r2714_10(bool) = LogicalNot : r2714_9 @@ -20117,7 +18198,7 @@ ir.cpp: # 2715| Block 29 # 2715| r2715_1(glval) = VariableAddress[x1] : -# 2715| r2715_2(int) = Load[x1] : &:r2715_1, m2700_6 +# 2715| r2715_2(int) = Load[x1] : &:r2715_1, m2700_5 # 2715| r2715_3(int) = Constant[0] : # 2715| r2715_4(bool) = CompareNE : r2715_2, r2715_3 # 2715| r2715_5(bool) = LogicalNot : r2715_4 @@ -20127,7 +18208,7 @@ ir.cpp: # 2715| Block 30 # 2715| r2715_7(glval) = VariableAddress[x2] : -# 2715| r2715_8(int) = Load[x2] : &:r2715_7, m2700_8 +# 2715| r2715_8(int) = Load[x2] : &:r2715_7, m2700_7 # 2715| r2715_9(int) = Constant[0] : # 2715| r2715_10(bool) = CompareNE : r2715_8, r2715_9 # 2715| r2715_11(bool) = LogicalNot : r2715_10 @@ -20142,7 +18223,7 @@ ir.cpp: # 2717| Block 32 # 2717| r2717_1(glval) = VariableAddress[x_1_and_2] : # 2717| r2717_2(glval) = VariableAddress[x1] : -# 2717| r2717_3(int) = Load[x1] : &:r2717_2, m2700_6 +# 2717| r2717_3(int) = Load[x1] : &:r2717_2, m2700_5 # 2717| r2717_4(int) = Constant[0] : # 2717| r2717_5(bool) = CompareNE : r2717_3, r2717_4 # 2717| v2717_6(void) = ConditionalBranch : r2717_5 @@ -20177,7 +18258,7 @@ ir.cpp: # 2717| Block 36 # 2717| r2717_18(glval) = VariableAddress[x2] : -# 2717| r2717_19(int) = Load[x2] : &:r2717_18, m2700_8 +# 2717| r2717_19(int) = Load[x2] : &:r2717_18, m2700_7 # 2717| r2717_20(int) = Constant[0] : # 2717| r2717_21(bool) = CompareNE : r2717_19, r2717_20 # 2717| v2717_22(void) = ConditionalBranch : r2717_21 @@ -20204,57 +18285,52 @@ ir.cpp: # 2720| Block 40 # 2720| v2720_1(void) = NoOp : -# 2700| v2700_9(void) = ReturnVoid : -# 2700| v2700_10(void) = AliasedUse : m2700_3 -# 2700| v2700_11(void) = ExitFunction : +# 2700| v2700_8(void) = ReturnVoid : +# 2700| v2700_9(void) = AliasedUse : ~m? +# 2700| v2700_10(void) = ExitFunction : # 2726| char UseBracketOperator(WithBracketOperator const, int) # 2726| Block 0 # 2726| v2726_1(void) = EnterFunction : -# 2726| m2726_2(unknown) = AliasedDefinition : -# 2726| m2726_3(unknown) = InitializeNonLocal : -# 2726| m2726_4(unknown) = Chi : total:m2726_2, partial:m2726_3 -# 2726| r2726_5(glval) = VariableAddress[x] : -# 2726| m2726_6(WithBracketOperator) = InitializeParameter[x] : &:r2726_5 -# 2726| m2726_7(unknown) = Chi : total:m2726_4, partial:m2726_6 -# 2726| r2726_8(glval) = VariableAddress[i] : -# 2726| m2726_9(int) = InitializeParameter[i] : &:r2726_8 +# 2726| mu2726_2(unknown) = AliasedDefinition : +# 2726| mu2726_3(unknown) = InitializeNonLocal : +# 2726| r2726_4(glval) = VariableAddress[x] : +# 2726| mu2726_5(WithBracketOperator) = InitializeParameter[x] : &:r2726_4 +# 2726| r2726_6(glval) = VariableAddress[i] : +# 2726| m2726_7(int) = InitializeParameter[i] : &:r2726_6 # 2727| r2727_1(glval) = VariableAddress[#return] : # 2727| r2727_2(glval) = VariableAddress[x] : # 2727| r2727_3(glval) = FunctionAddress[operator[]] : # 2727| r2727_4(glval) = VariableAddress[i] : -# 2727| r2727_5(int) = Load[i] : &:r2727_4, m2726_9 +# 2727| r2727_5(int) = Load[i] : &:r2727_4, m2726_7 # 2727| r2727_6(char &) = Call[operator[]] : func:r2727_3, this:r2727_2, 0:r2727_5 -# 2727| m2727_7(unknown) = ^CallSideEffect : ~m2726_7 -# 2727| m2727_8(unknown) = Chi : total:m2726_7, partial:m2727_7 -# 2727| v2727_9(void) = ^IndirectReadSideEffect[-1] : &:r2727_2, ~m2727_8 -# 2727| r2727_10(char) = Load[?] : &:r2727_6, ~m2727_8 -# 2727| m2727_11(char) = Store[#return] : &:r2727_1, r2727_10 -# 2726| r2726_10(glval) = VariableAddress[#return] : -# 2726| v2726_11(void) = ReturnValue : &:r2726_10, m2727_11 -# 2726| v2726_12(void) = AliasedUse : ~m2727_8 -# 2726| v2726_13(void) = ExitFunction : +# 2727| mu2727_7(unknown) = ^CallSideEffect : ~m? +# 2727| v2727_8(void) = ^IndirectReadSideEffect[-1] : &:r2727_2, ~m? +# 2727| r2727_9(char) = Load[?] : &:r2727_6, ~m? +# 2727| m2727_10(char) = Store[#return] : &:r2727_1, r2727_9 +# 2726| r2726_8(glval) = VariableAddress[#return] : +# 2726| v2726_9(void) = ReturnValue : &:r2726_8, m2727_10 +# 2726| v2726_10(void) = AliasedUse : ~m? +# 2726| v2726_11(void) = ExitFunction : # 2730| void test_postfix_crement(int*, int) # 2730| Block 0 # 2730| v2730_1(void) = EnterFunction : -# 2730| m2730_2(unknown) = AliasedDefinition : -# 2730| m2730_3(unknown) = InitializeNonLocal : -# 2730| m2730_4(unknown) = Chi : total:m2730_2, partial:m2730_3 -# 2730| r2730_5(glval) = VariableAddress[p] : -# 2730| m2730_6(int *) = InitializeParameter[p] : &:r2730_5 -# 2730| r2730_7(int *) = Load[p] : &:r2730_5, m2730_6 -# 2730| m2730_8(unknown) = InitializeIndirection[p] : &:r2730_7 -# 2730| m2730_9(unknown) = Chi : total:m2730_4, partial:m2730_8 -# 2730| r2730_10(glval) = VariableAddress[q] : -# 2730| m2730_11(int) = InitializeParameter[q] : &:r2730_10 +# 2730| mu2730_2(unknown) = AliasedDefinition : +# 2730| mu2730_3(unknown) = InitializeNonLocal : +# 2730| r2730_4(glval) = VariableAddress[p] : +# 2730| m2730_5(int *) = InitializeParameter[p] : &:r2730_4 +# 2730| r2730_6(int *) = Load[p] : &:r2730_4, m2730_5 +# 2730| mu2730_7(unknown) = InitializeIndirection[p] : &:r2730_6 +# 2730| r2730_8(glval) = VariableAddress[q] : +# 2730| m2730_9(int) = InitializeParameter[q] : &:r2730_8 # 2731| r2731_1(glval) = VariableAddress[p] : -# 2731| r2731_2(int *) = Load[p] : &:r2731_1, m2730_6 +# 2731| r2731_2(int *) = Load[p] : &:r2731_1, m2730_5 # 2731| r2731_3(int) = Constant[1] : # 2731| r2731_4(int *) = PointerAdd[4] : r2731_2, r2731_3 # 2731| m2731_5(int *) = Store[p] : &:r2731_1, r2731_4 # 2732| r2732_1(glval) = VariableAddress[q] : -# 2732| r2732_2(int) = Load[q] : &:r2732_1, m2730_11 +# 2732| r2732_2(int) = Load[q] : &:r2732_1, m2730_9 # 2732| r2732_3(int) = Constant[1] : # 2732| r2732_4(int) = Add : r2732_2, r2732_3 # 2732| m2732_5(int) = Store[q] : &:r2732_1, r2732_4 @@ -20347,102 +18423,98 @@ ir.cpp: # 2744| r2744_8(int) = Convert : r2744_7 # 2744| m2744_9(int) = Store[q2] : &:r2744_1, r2744_8 # 2745| v2745_1(void) = NoOp : -# 2730| v2730_12(void) = ReturnIndirection[p] : &:r2730_7, m2730_8 -# 2730| v2730_13(void) = ReturnVoid : -# 2730| v2730_14(void) = AliasedUse : ~m2730_9 -# 2730| v2730_15(void) = ExitFunction : +# 2730| v2730_10(void) = ReturnIndirection[p] : &:r2730_6, ~m? +# 2730| v2730_11(void) = ReturnVoid : +# 2730| v2730_12(void) = AliasedUse : ~m? +# 2730| v2730_13(void) = ExitFunction : # 2749| void std::strong_ordering::strong_ordering(std::strong_ordering&&) # 2749| Block 0 # 2749| v2749_1(void) = EnterFunction : -# 2749| m2749_2(unknown) = AliasedDefinition : -# 2749| m2749_3(unknown) = InitializeNonLocal : -# 2749| m2749_4(unknown) = Chi : total:m2749_2, partial:m2749_3 -# 2749| r2749_5(glval) = VariableAddress[#this] : -# 2749| m2749_6(glval) = InitializeParameter[#this] : &:r2749_5 -# 2749| r2749_7(glval) = Load[#this] : &:r2749_5, m2749_6 -# 2749| m2749_8(strong_ordering) = InitializeIndirection[#this] : &:r2749_7 +# 2749| mu2749_2(unknown) = AliasedDefinition : +# 2749| mu2749_3(unknown) = InitializeNonLocal : +# 2749| r2749_4(glval) = VariableAddress[#this] : +# 2749| m2749_5(glval) = InitializeParameter[#this] : &:r2749_4 +# 2749| r2749_6(glval) = Load[#this] : &:r2749_4, m2749_5 +# 2749| mu2749_7(strong_ordering) = InitializeIndirection[#this] : &:r2749_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(strong_ordering &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(strong_ordering &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 -#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2749| v2749_9(void) = NoOp : -# 2749| v2749_10(void) = ReturnIndirection[#this] : &:r2749_7, m2749_8 -#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2749| v2749_11(void) = ReturnVoid : -# 2749| v2749_12(void) = AliasedUse : m2749_3 -# 2749| v2749_13(void) = ExitFunction : +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2749| v2749_8(void) = NoOp : +# 2749| v2749_9(void) = ReturnIndirection[#this] : &:r2749_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 2749| v2749_10(void) = ReturnVoid : +# 2749| v2749_11(void) = AliasedUse : ~m? +# 2749| v2749_12(void) = ExitFunction : # 2750| void std::strong_ordering::strong_ordering(std::_Order) # 2750| Block 0 # 2750| v2750_1(void) = EnterFunction : -# 2750| m2750_2(unknown) = AliasedDefinition : -# 2750| m2750_3(unknown) = InitializeNonLocal : -# 2750| m2750_4(unknown) = Chi : total:m2750_2, partial:m2750_3 -# 2750| r2750_5(glval) = VariableAddress[#this] : -# 2750| m2750_6(glval) = InitializeParameter[#this] : &:r2750_5 -# 2750| r2750_7(glval) = Load[#this] : &:r2750_5, m2750_6 -# 2750| m2750_8(strong_ordering) = InitializeIndirection[#this] : &:r2750_7 -# 2750| r2750_9(glval<_Order>) = VariableAddress[v] : -# 2750| m2750_10(_Order) = InitializeParameter[v] : &:r2750_9 -# 2750| v2750_11(void) = NoOp : -# 2750| v2750_12(void) = ReturnIndirection[#this] : &:r2750_7, m2750_8 -# 2750| v2750_13(void) = ReturnVoid : -# 2750| v2750_14(void) = AliasedUse : m2750_3 -# 2750| v2750_15(void) = ExitFunction : +# 2750| mu2750_2(unknown) = AliasedDefinition : +# 2750| mu2750_3(unknown) = InitializeNonLocal : +# 2750| r2750_4(glval) = VariableAddress[#this] : +# 2750| m2750_5(glval) = InitializeParameter[#this] : &:r2750_4 +# 2750| r2750_6(glval) = Load[#this] : &:r2750_4, m2750_5 +# 2750| mu2750_7(strong_ordering) = InitializeIndirection[#this] : &:r2750_6 +# 2750| r2750_8(glval<_Order>) = VariableAddress[v] : +# 2750| m2750_9(_Order) = InitializeParameter[v] : &:r2750_8 +# 2750| v2750_10(void) = NoOp : +# 2750| v2750_11(void) = ReturnIndirection[#this] : &:r2750_6, ~m? +# 2750| v2750_12(void) = ReturnVoid : +# 2750| v2750_13(void) = AliasedUse : ~m? +# 2750| v2750_14(void) = ExitFunction : # 2768| std::strong_ordering ThreeWay::operator<=>(ThreeWay&) # 2768| Block 0 # 2768| v2768_1(void) = EnterFunction : -# 2768| m2768_2(unknown) = AliasedDefinition : -# 2768| m2768_3(unknown) = InitializeNonLocal : -# 2768| m2768_4(unknown) = Chi : total:m2768_2, partial:m2768_3 -# 2768| r2768_5(glval) = VariableAddress[#this] : -# 2768| m2768_6(glval) = InitializeParameter[#this] : &:r2768_5 -# 2768| r2768_7(glval) = Load[#this] : &:r2768_5, m2768_6 -# 2768| m2768_8(ThreeWay) = InitializeIndirection[#this] : &:r2768_7 -# 2768| r2768_9(glval) = VariableAddress[y] : -# 2768| m2768_10(ThreeWay &) = InitializeParameter[y] : &:r2768_9 -# 2768| r2768_11(ThreeWay &) = Load[y] : &:r2768_9, m2768_10 -# 2768| m2768_12(unknown) = InitializeIndirection[y] : &:r2768_11 -# 2768| r2768_13(glval) = VariableAddress[#return] : -# 2768| r2768_14(glval) = VariableAddress[#this] : -# 2768| r2768_15(ThreeWay *) = Load[#this] : &:r2768_14, m2768_6 -# 2768| r2768_16(glval) = FieldAddress[x] : r2768_15 -# 2768| r2768_17(int) = Load[?] : &:r2768_16, ~m2768_8 -# 2768| r2768_18(glval) = VariableAddress[y] : -# 2768| r2768_19(ThreeWay &) = Load[y] : &:r2768_18, m2768_10 -# 2768| r2768_20(glval) = CopyValue : r2768_19 -# 2768| r2768_21(glval) = FieldAddress[x] : r2768_20 -# 2768| r2768_22(int) = Load[?] : &:r2768_21, ~m2768_12 -# 2768| r2768_23(strong_ordering) = Spaceship : r2768_17, r2768_22 -# 2768| m2768_24(strong_ordering) = Store[#return] : &:r2768_13, r2768_23 -# 2768| v2768_25(void) = ReturnIndirection[#this] : &:r2768_7, m2768_8 -# 2768| v2768_26(void) = ReturnIndirection[y] : &:r2768_11, m2768_12 -# 2768| r2768_27(glval) = VariableAddress[#return] : -# 2768| v2768_28(void) = ReturnValue : &:r2768_27, m2768_24 -# 2768| v2768_29(void) = AliasedUse : m2768_3 -# 2768| v2768_30(void) = ExitFunction : +# 2768| mu2768_2(unknown) = AliasedDefinition : +# 2768| mu2768_3(unknown) = InitializeNonLocal : +# 2768| r2768_4(glval) = VariableAddress[#this] : +# 2768| m2768_5(glval) = InitializeParameter[#this] : &:r2768_4 +# 2768| r2768_6(glval) = Load[#this] : &:r2768_4, m2768_5 +# 2768| mu2768_7(ThreeWay) = InitializeIndirection[#this] : &:r2768_6 +# 2768| r2768_8(glval) = VariableAddress[y] : +# 2768| m2768_9(ThreeWay &) = InitializeParameter[y] : &:r2768_8 +# 2768| r2768_10(ThreeWay &) = Load[y] : &:r2768_8, m2768_9 +# 2768| mu2768_11(unknown) = InitializeIndirection[y] : &:r2768_10 +# 2768| r2768_12(glval) = VariableAddress[#return] : +# 2768| r2768_13(glval) = VariableAddress[#this] : +# 2768| r2768_14(ThreeWay *) = Load[#this] : &:r2768_13, m2768_5 +# 2768| r2768_15(glval) = FieldAddress[x] : r2768_14 +# 2768| r2768_16(int) = Load[?] : &:r2768_15, ~m? +# 2768| r2768_17(glval) = VariableAddress[y] : +# 2768| r2768_18(ThreeWay &) = Load[y] : &:r2768_17, m2768_9 +# 2768| r2768_19(glval) = CopyValue : r2768_18 +# 2768| r2768_20(glval) = FieldAddress[x] : r2768_19 +# 2768| r2768_21(int) = Load[?] : &:r2768_20, ~m? +# 2768| r2768_22(strong_ordering) = Spaceship : r2768_16, r2768_21 +# 2768| m2768_23(strong_ordering) = Store[#return] : &:r2768_12, r2768_22 +# 2768| v2768_24(void) = ReturnIndirection[#this] : &:r2768_6, ~m? +# 2768| v2768_25(void) = ReturnIndirection[y] : &:r2768_10, ~m? +# 2768| r2768_26(glval) = VariableAddress[#return] : +# 2768| v2768_27(void) = ReturnValue : &:r2768_26, m2768_23 +# 2768| v2768_28(void) = AliasedUse : ~m? +# 2768| v2768_29(void) = ExitFunction : # 2771| void test_three_way(int, int, ThreeWay, ThreeWay) # 2771| Block 0 # 2771| v2771_1(void) = EnterFunction : -# 2771| m2771_2(unknown) = AliasedDefinition : -# 2771| m2771_3(unknown) = InitializeNonLocal : -# 2771| m2771_4(unknown) = Chi : total:m2771_2, partial:m2771_3 -# 2771| r2771_5(glval) = VariableAddress[a] : -# 2771| m2771_6(int) = InitializeParameter[a] : &:r2771_5 -# 2771| r2771_7(glval) = VariableAddress[b] : -# 2771| m2771_8(int) = InitializeParameter[b] : &:r2771_7 -# 2771| r2771_9(glval) = VariableAddress[c] : -# 2771| m2771_10(ThreeWay) = InitializeParameter[c] : &:r2771_9 -# 2771| r2771_11(glval) = VariableAddress[d] : -# 2771| m2771_12(ThreeWay) = InitializeParameter[d] : &:r2771_11 +# 2771| mu2771_2(unknown) = AliasedDefinition : +# 2771| mu2771_3(unknown) = InitializeNonLocal : +# 2771| r2771_4(glval) = VariableAddress[a] : +# 2771| m2771_5(int) = InitializeParameter[a] : &:r2771_4 +# 2771| r2771_6(glval) = VariableAddress[b] : +# 2771| m2771_7(int) = InitializeParameter[b] : &:r2771_6 +# 2771| r2771_8(glval) = VariableAddress[c] : +# 2771| mu2771_9(ThreeWay) = InitializeParameter[c] : &:r2771_8 +# 2771| r2771_10(glval) = VariableAddress[d] : +# 2771| mu2771_11(ThreeWay) = InitializeParameter[d] : &:r2771_10 # 2772| r2772_1(glval) = VariableAddress[x] : # 2772| r2772_2(glval) = VariableAddress[a] : -# 2772| r2772_3(int) = Load[a] : &:r2772_2, m2771_6 +# 2772| r2772_3(int) = Load[a] : &:r2772_2, m2771_5 # 2772| r2772_4(glval) = VariableAddress[b] : -# 2772| r2772_5(int) = Load[b] : &:r2772_4, m2771_8 +# 2772| r2772_5(int) = Load[b] : &:r2772_4, m2771_7 # 2772| r2772_6(strong_ordering) = Spaceship : r2772_3, r2772_5 # 2772| m2772_7(strong_ordering) = Store[x] : &:r2772_1, r2772_6 # 2773| r2773_1(glval) = VariableAddress[y] : @@ -20451,71 +18523,62 @@ ir.cpp: # 2773| r2773_4(glval) = VariableAddress[d] : # 2773| r2773_5(ThreeWay &) = CopyValue : r2773_4 # 2773| r2773_6(strong_ordering) = Call[operator<=>] : func:r2773_3, this:r2773_2, 0:r2773_5 -# 2773| m2773_7(unknown) = ^CallSideEffect : ~m2771_4 -# 2773| m2773_8(unknown) = Chi : total:m2771_4, partial:m2773_7 -# 2773| v2773_9(void) = ^IndirectReadSideEffect[-1] : &:r2773_2, m2771_10 -# 2773| v2773_10(void) = ^BufferReadSideEffect[0] : &:r2773_5, ~m2771_12 -# 2773| m2773_11(ThreeWay) = ^IndirectMayWriteSideEffect[-1] : &:r2773_2 -# 2773| m2773_12(ThreeWay) = Chi : total:m2771_10, partial:m2773_11 -# 2773| m2773_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r2773_5 -# 2773| m2773_14(ThreeWay) = Chi : total:m2771_12, partial:m2773_13 -# 2773| m2773_15(strong_ordering) = Store[y] : &:r2773_1, r2773_6 +# 2773| mu2773_7(unknown) = ^CallSideEffect : ~m? +# 2773| v2773_8(void) = ^IndirectReadSideEffect[-1] : &:r2773_2, ~m? +# 2773| v2773_9(void) = ^BufferReadSideEffect[0] : &:r2773_5, ~m? +# 2773| mu2773_10(ThreeWay) = ^IndirectMayWriteSideEffect[-1] : &:r2773_2 +# 2773| mu2773_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r2773_5 +# 2773| m2773_12(strong_ordering) = Store[y] : &:r2773_1, r2773_6 # 2774| v2774_1(void) = NoOp : -# 2771| v2771_13(void) = ReturnVoid : -# 2771| v2771_14(void) = AliasedUse : ~m2773_8 -# 2771| v2771_15(void) = ExitFunction : +# 2771| v2771_12(void) = ReturnVoid : +# 2771| v2771_13(void) = AliasedUse : ~m? +# 2771| v2771_14(void) = ExitFunction : # 2776| void test_allocation_with_initializer() # 2776| Block 0 # 2776| v2776_1(void) = EnterFunction : -# 2776| m2776_2(unknown) = AliasedDefinition : -# 2776| m2776_3(unknown) = InitializeNonLocal : -# 2776| m2776_4(unknown) = Chi : total:m2776_2, partial:m2776_3 +# 2776| mu2776_2(unknown) = AliasedDefinition : +# 2776| mu2776_3(unknown) = InitializeNonLocal : # 2777| r2777_1(glval) = VariableAddress[p1] : # 2777| r2777_2(glval) = FunctionAddress[operator new] : # 2777| r2777_3(unsigned long) = Constant[4] : # 2777| r2777_4(void *) = Call[operator new] : func:r2777_2, 0:r2777_3 -# 2777| m2777_5(unknown) = ^CallSideEffect : ~m2776_4 -# 2777| m2777_6(unknown) = Chi : total:m2776_4, partial:m2777_5 -# 2777| m2777_7(unknown) = ^InitializeDynamicAllocation : &:r2777_4 -# 2777| r2777_8(int *) = Convert : r2777_4 -# 2777| r2777_9(int) = Constant[42] : -# 2777| m2777_10(int) = Store[?] : &:r2777_8, r2777_9 -# 2777| m2777_11(unknown) = Chi : total:m2777_7, partial:m2777_10 -# 2777| m2777_12(int *) = Store[p1] : &:r2777_1, r2777_8 +# 2777| mu2777_5(unknown) = ^CallSideEffect : ~m? +# 2777| mu2777_6(unknown) = ^InitializeDynamicAllocation : &:r2777_4 +# 2777| r2777_7(int *) = Convert : r2777_4 +# 2777| r2777_8(int) = Constant[42] : +# 2777| mu2777_9(int) = Store[?] : &:r2777_7, r2777_8 +# 2777| m2777_10(int *) = Store[p1] : &:r2777_1, r2777_7 # 2778| r2778_1(glval) = VariableAddress[p2] : # 2778| r2778_2(glval) = FunctionAddress[operator new] : # 2778| r2778_3(unsigned long) = Constant[8] : # 2778| r2778_4(void *) = Call[operator new] : func:r2778_2, 0:r2778_3 -# 2778| m2778_5(unknown) = ^CallSideEffect : ~m2777_6 -# 2778| m2778_6(unknown) = Chi : total:m2777_6, partial:m2778_5 -# 2778| m2778_7(unknown) = ^InitializeDynamicAllocation : &:r2778_4 -# 2778| r2778_8(long *) = Convert : r2778_4 -# 2778| r2778_9(long) = Constant[42] : -# 2778| m2778_10(long) = Store[?] : &:r2778_8, r2778_9 -# 2778| m2778_11(unknown) = Chi : total:m2778_7, partial:m2778_10 -# 2778| m2778_12(long *) = Store[p2] : &:r2778_1, r2778_8 +# 2778| mu2778_5(unknown) = ^CallSideEffect : ~m? +# 2778| mu2778_6(unknown) = ^InitializeDynamicAllocation : &:r2778_4 +# 2778| r2778_7(long *) = Convert : r2778_4 +# 2778| r2778_8(long) = Constant[42] : +# 2778| mu2778_9(long) = Store[?] : &:r2778_7, r2778_8 +# 2778| m2778_10(long *) = Store[p2] : &:r2778_1, r2778_7 # 2779| v2779_1(void) = NoOp : -# 2776| v2776_5(void) = ReturnVoid : -# 2776| v2776_6(void) = AliasedUse : ~m2778_6 -# 2776| v2776_7(void) = ExitFunction : +# 2776| v2776_4(void) = ReturnVoid : +# 2776| v2776_5(void) = AliasedUse : ~m? +# 2776| v2776_6(void) = ExitFunction : # 2781| void vla_sizeof_test(int, size_t, char) # 2781| Block 0 # 2781| v2781_1(void) = EnterFunction : -# 2781| m2781_2(unknown) = AliasedDefinition : -# 2781| m2781_3(unknown) = InitializeNonLocal : -# 2781| m2781_4(unknown) = Chi : total:m2781_2, partial:m2781_3 -# 2781| r2781_5(glval) = VariableAddress[len1] : -# 2781| m2781_6(int) = InitializeParameter[len1] : &:r2781_5 -# 2781| r2781_7(glval) = VariableAddress[len2] : -# 2781| m2781_8(unsigned long) = InitializeParameter[len2] : &:r2781_7 -# 2781| r2781_9(glval) = VariableAddress[len3] : -# 2781| m2781_10(char) = InitializeParameter[len3] : &:r2781_9 +# 2781| mu2781_2(unknown) = AliasedDefinition : +# 2781| mu2781_3(unknown) = InitializeNonLocal : +# 2781| r2781_4(glval) = VariableAddress[len1] : +# 2781| m2781_5(int) = InitializeParameter[len1] : &:r2781_4 +# 2781| r2781_6(glval) = VariableAddress[len2] : +# 2781| m2781_7(unsigned long) = InitializeParameter[len2] : &:r2781_6 +# 2781| r2781_8(glval) = VariableAddress[len3] : +# 2781| m2781_9(char) = InitializeParameter[len3] : &:r2781_8 # 2782| r2782_1(glval) = VariableAddress[tmp1] : # 2782| m2782_2(char[]) = Uninitialized[tmp1] : &:r2782_1 # 2782| r2782_3(glval) = VariableAddress[len1] : -# 2782| r2782_4(int) = Load[len1] : &:r2782_3, m2781_6 +# 2782| r2782_4(int) = Load[len1] : &:r2782_3, m2781_5 # 2782| v2782_5(void) = NoOp : # 2783| r2783_1(glval) = VariableAddress[x] : # 2783| r2783_2(unsigned long) = Constant[1] : @@ -20525,9 +18588,9 @@ ir.cpp: # 2784| r2784_1(glval) = VariableAddress[tmp2] : # 2784| m2784_2(int[][]) = Uninitialized[tmp2] : &:r2784_1 # 2784| r2784_3(glval) = VariableAddress[len1] : -# 2784| r2784_4(int) = Load[len1] : &:r2784_3, m2781_6 +# 2784| r2784_4(int) = Load[len1] : &:r2784_3, m2781_5 # 2784| r2784_5(glval) = VariableAddress[len2] : -# 2784| r2784_6(unsigned long) = Load[len2] : &:r2784_5, m2781_8 +# 2784| r2784_6(unsigned long) = Load[len2] : &:r2784_5, m2781_7 # 2784| v2784_7(void) = NoOp : # 2785| r2785_1(glval) = VariableAddress[y] : # 2785| r2785_2(unsigned long) = Constant[4] : @@ -20544,11 +18607,11 @@ ir.cpp: # 2787| r2787_1(glval) = VariableAddress[tmp3] : # 2787| m2787_2(int[][][]) = Uninitialized[tmp3] : &:r2787_1 # 2787| r2787_3(glval) = VariableAddress[len1] : -# 2787| r2787_4(int) = Load[len1] : &:r2787_3, m2781_6 +# 2787| r2787_4(int) = Load[len1] : &:r2787_3, m2781_5 # 2787| r2787_5(glval) = VariableAddress[len2] : -# 2787| r2787_6(unsigned long) = Load[len2] : &:r2787_5, m2781_8 +# 2787| r2787_6(unsigned long) = Load[len2] : &:r2787_5, m2781_7 # 2787| r2787_7(glval) = VariableAddress[len3] : -# 2787| r2787_8(char) = Load[len3] : &:r2787_7, m2781_10 +# 2787| r2787_8(char) = Load[len3] : &:r2787_7, m2781_9 # 2787| v2787_9(void) = NoOp : # 2788| r2788_1(glval) = VariableAddress[w] : # 2788| r2788_2(unsigned long) = Constant[4] : @@ -20575,28 +18638,27 @@ ir.cpp: # 2791| r2791_2(unsigned long) = Constant[4] : # 2791| m2791_3(unsigned long) = Store[t] : &:r2791_1, r2791_2 # 2792| v2792_1(void) = NoOp : -# 2781| v2781_11(void) = ReturnVoid : -# 2781| v2781_12(void) = AliasedUse : m2781_3 -# 2781| v2781_13(void) = ExitFunction : +# 2781| v2781_10(void) = ReturnVoid : +# 2781| v2781_11(void) = AliasedUse : ~m? +# 2781| v2781_12(void) = ExitFunction : # 2794| void vla_sizeof_test2(int, size_t, char) # 2794| Block 0 # 2794| v2794_1(void) = EnterFunction : -# 2794| m2794_2(unknown) = AliasedDefinition : -# 2794| m2794_3(unknown) = InitializeNonLocal : -# 2794| m2794_4(unknown) = Chi : total:m2794_2, partial:m2794_3 -# 2794| r2794_5(glval) = VariableAddress[len1] : -# 2794| m2794_6(int) = InitializeParameter[len1] : &:r2794_5 -# 2794| r2794_7(glval) = VariableAddress[len2] : -# 2794| m2794_8(unsigned long) = InitializeParameter[len2] : &:r2794_7 -# 2794| r2794_9(glval) = VariableAddress[len3] : -# 2794| m2794_10(char) = InitializeParameter[len3] : &:r2794_9 +# 2794| mu2794_2(unknown) = AliasedDefinition : +# 2794| mu2794_3(unknown) = InitializeNonLocal : +# 2794| r2794_4(glval) = VariableAddress[len1] : +# 2794| m2794_5(int) = InitializeParameter[len1] : &:r2794_4 +# 2794| r2794_6(glval) = VariableAddress[len2] : +# 2794| m2794_7(unsigned long) = InitializeParameter[len2] : &:r2794_6 +# 2794| r2794_8(glval) = VariableAddress[len3] : +# 2794| m2794_9(char) = InitializeParameter[len3] : &:r2794_8 # 2795| r2795_1(glval) = VariableAddress[tmp1] : # 2795| m2795_2(int[][]) = Uninitialized[tmp1] : &:r2795_1 # 2795| r2795_3(glval) = VariableAddress[len1] : -# 2795| r2795_4(int) = Load[len1] : &:r2795_3, m2794_6 +# 2795| r2795_4(int) = Load[len1] : &:r2795_3, m2794_5 # 2795| r2795_5(glval) = VariableAddress[len2] : -# 2795| r2795_6(unsigned long) = Load[len2] : &:r2795_5, m2794_8 +# 2795| r2795_6(unsigned long) = Load[len2] : &:r2795_5, m2794_7 # 2795| v2795_7(void) = NoOp : # 2796| r2796_1(glval) = VariableAddress[z] : # 2796| r2796_2(unsigned long) = Constant[4] : @@ -20606,11 +18668,11 @@ ir.cpp: # 2797| r2797_1(glval) = VariableAddress[tmp2] : # 2797| m2797_2(int[][][]) = Uninitialized[tmp2] : &:r2797_1 # 2797| r2797_3(glval) = VariableAddress[len1] : -# 2797| r2797_4(int) = Load[len1] : &:r2797_3, m2794_6 +# 2797| r2797_4(int) = Load[len1] : &:r2797_3, m2794_5 # 2797| r2797_5(glval) = VariableAddress[len2] : -# 2797| r2797_6(unsigned long) = Load[len2] : &:r2797_5, m2794_8 +# 2797| r2797_6(unsigned long) = Load[len2] : &:r2797_5, m2794_7 # 2797| r2797_7(glval) = VariableAddress[len3] : -# 2797| r2797_8(char) = Load[len3] : &:r2797_7, m2794_10 +# 2797| r2797_8(char) = Load[len3] : &:r2797_7, m2794_9 # 2797| v2797_9(void) = NoOp : # 2798| r2798_1(glval) = VariableAddress[v] : # 2798| r2798_2(unsigned long) = Constant[4] : @@ -20628,45 +18690,44 @@ ir.cpp: # 2800| r2800_2(unsigned long) = Constant[4] : # 2800| m2800_3(unsigned long) = Store[t] : &:r2800_1, r2800_2 # 2801| v2801_1(void) = NoOp : -# 2794| v2794_11(void) = ReturnVoid : -# 2794| v2794_12(void) = AliasedUse : m2794_3 -# 2794| v2794_13(void) = ExitFunction : +# 2794| v2794_10(void) = ReturnVoid : +# 2794| v2794_11(void) = AliasedUse : ~m? +# 2794| v2794_12(void) = ExitFunction : # 2803| size_t vla_sizeof_test3(int, size_t, char, bool) # 2803| Block 0 # 2803| v2803_1(void) = EnterFunction : -# 2803| m2803_2(unknown) = AliasedDefinition : -# 2803| m2803_3(unknown) = InitializeNonLocal : -# 2803| m2803_4(unknown) = Chi : total:m2803_2, partial:m2803_3 -# 2803| r2803_5(glval) = VariableAddress[len1] : -# 2803| m2803_6(int) = InitializeParameter[len1] : &:r2803_5 -# 2803| r2803_7(glval) = VariableAddress[len2] : -# 2803| m2803_8(unsigned long) = InitializeParameter[len2] : &:r2803_7 -# 2803| r2803_9(glval) = VariableAddress[len3] : -# 2803| m2803_10(char) = InitializeParameter[len3] : &:r2803_9 -# 2803| r2803_11(glval) = VariableAddress[b] : -# 2803| m2803_12(bool) = InitializeParameter[b] : &:r2803_11 +# 2803| mu2803_2(unknown) = AliasedDefinition : +# 2803| mu2803_3(unknown) = InitializeNonLocal : +# 2803| r2803_4(glval) = VariableAddress[len1] : +# 2803| m2803_5(int) = InitializeParameter[len1] : &:r2803_4 +# 2803| r2803_6(glval) = VariableAddress[len2] : +# 2803| m2803_7(unsigned long) = InitializeParameter[len2] : &:r2803_6 +# 2803| r2803_8(glval) = VariableAddress[len3] : +# 2803| m2803_9(char) = InitializeParameter[len3] : &:r2803_8 +# 2803| r2803_10(glval) = VariableAddress[b] : +# 2803| m2803_11(bool) = InitializeParameter[b] : &:r2803_10 # 2804| r2804_1(glval) = VariableAddress[len1] : -# 2804| r2804_2(int) = Load[len1] : &:r2804_1, m2803_6 +# 2804| r2804_2(int) = Load[len1] : &:r2804_1, m2803_5 # 2804| r2804_3(glval) = VariableAddress[len2] : -# 2804| r2804_4(unsigned long) = Load[len2] : &:r2804_3, m2803_8 +# 2804| r2804_4(unsigned long) = Load[len2] : &:r2804_3, m2803_7 # 2804| v2804_5(void) = NoOp : # 2805| v2805_1(void) = NoOp : # 2806| r2806_1(glval) = VariableAddress[len3] : -# 2806| r2806_2(char) = Load[len3] : &:r2806_1, m2803_10 +# 2806| r2806_2(char) = Load[len3] : &:r2806_1, m2803_9 # 2806| v2806_3(void) = NoOp : # 2808| r2808_1(glval) = VariableAddress[b] : -# 2808| r2808_2(bool) = Load[b] : &:r2808_1, m2803_12 +# 2808| r2808_2(bool) = Load[b] : &:r2808_1, m2803_11 # 2808| v2808_3(void) = ConditionalBranch : r2808_2 #-----| False -> Block 3 #-----| True -> Block 2 # 2803| Block 1 -# 2803| m2803_13(unsigned long) = Phi : from 2:m2810_7, from 3:m2813_3 -# 2803| r2803_14(glval) = VariableAddress[#return] : -# 2803| v2803_15(void) = ReturnValue : &:r2803_14, m2803_13 -# 2803| v2803_16(void) = AliasedUse : m2803_3 -# 2803| v2803_17(void) = ExitFunction : +# 2803| m2803_12(unsigned long) = Phi : from 2:m2810_7, from 3:m2813_3 +# 2803| r2803_13(glval) = VariableAddress[#return] : +# 2803| v2803_14(void) = ReturnValue : &:r2803_13, m2803_12 +# 2803| v2803_15(void) = AliasedUse : ~m? +# 2803| v2803_16(void) = ExitFunction : # 2809| Block 2 # 2809| r2809_1(glval) = VariableAddress[tmp] : @@ -20690,19 +18751,18 @@ ir.cpp: # 2816| void vla_sizeof_test4(int, size_t) # 2816| Block 0 # 2816| v2816_1(void) = EnterFunction : -# 2816| m2816_2(unknown) = AliasedDefinition : -# 2816| m2816_3(unknown) = InitializeNonLocal : -# 2816| m2816_4(unknown) = Chi : total:m2816_2, partial:m2816_3 -# 2816| r2816_5(glval) = VariableAddress[len1] : -# 2816| m2816_6(int) = InitializeParameter[len1] : &:r2816_5 -# 2816| r2816_7(glval) = VariableAddress[len2] : -# 2816| m2816_8(unsigned long) = InitializeParameter[len2] : &:r2816_7 +# 2816| mu2816_2(unknown) = AliasedDefinition : +# 2816| mu2816_3(unknown) = InitializeNonLocal : +# 2816| r2816_4(glval) = VariableAddress[len1] : +# 2816| m2816_5(int) = InitializeParameter[len1] : &:r2816_4 +# 2816| r2816_6(glval) = VariableAddress[len2] : +# 2816| m2816_7(unsigned long) = InitializeParameter[len2] : &:r2816_6 # 2817| r2817_1(glval) = VariableAddress[tmp1] : # 2817| m2817_2(int[][]) = Uninitialized[tmp1] : &:r2817_1 # 2817| r2817_3(glval) = VariableAddress[len1] : -# 2817| r2817_4(int) = Load[len1] : &:r2817_3, m2816_6 +# 2817| r2817_4(int) = Load[len1] : &:r2817_3, m2816_5 # 2817| r2817_5(glval) = VariableAddress[len2] : -# 2817| r2817_6(unsigned long) = Load[len2] : &:r2817_5, m2816_8 +# 2817| r2817_6(unsigned long) = Load[len2] : &:r2817_5, m2816_7 # 2817| v2817_7(void) = NoOp : # 2818| r2818_1(glval) = VariableAddress[z] : # 2818| r2818_2(unsigned long) = Constant[4] : @@ -20710,26 +18770,25 @@ ir.cpp: # 2818| r2818_4(unsigned long) = Mul : r2818_2, r2818_3 # 2818| m2818_5(unsigned long) = Store[z] : &:r2818_1, r2818_4 # 2819| v2819_1(void) = NoOp : -# 2816| v2816_9(void) = ReturnVoid : -# 2816| v2816_10(void) = AliasedUse : m2816_3 -# 2816| v2816_11(void) = ExitFunction : +# 2816| v2816_8(void) = ReturnVoid : +# 2816| v2816_9(void) = AliasedUse : ~m? +# 2816| v2816_10(void) = ExitFunction : # 2821| void vla_sizeof_test5(int, size_t) # 2821| Block 0 # 2821| v2821_1(void) = EnterFunction : -# 2821| m2821_2(unknown) = AliasedDefinition : -# 2821| m2821_3(unknown) = InitializeNonLocal : -# 2821| m2821_4(unknown) = Chi : total:m2821_2, partial:m2821_3 -# 2821| r2821_5(glval) = VariableAddress[len1] : -# 2821| m2821_6(int) = InitializeParameter[len1] : &:r2821_5 -# 2821| r2821_7(glval) = VariableAddress[len2] : -# 2821| m2821_8(unsigned long) = InitializeParameter[len2] : &:r2821_7 +# 2821| mu2821_2(unknown) = AliasedDefinition : +# 2821| mu2821_3(unknown) = InitializeNonLocal : +# 2821| r2821_4(glval) = VariableAddress[len1] : +# 2821| m2821_5(int) = InitializeParameter[len1] : &:r2821_4 +# 2821| r2821_6(glval) = VariableAddress[len2] : +# 2821| m2821_7(unsigned long) = InitializeParameter[len2] : &:r2821_6 # 2822| r2822_1(glval) = VariableAddress[tmp1] : # 2822| m2822_2(int[][]) = Uninitialized[tmp1] : &:r2822_1 # 2822| r2822_3(glval) = VariableAddress[len1] : -# 2822| r2822_4(int) = Load[len1] : &:r2822_3, m2821_6 +# 2822| r2822_4(int) = Load[len1] : &:r2822_3, m2821_5 # 2822| r2822_5(glval) = VariableAddress[len2] : -# 2822| r2822_6(unsigned long) = Load[len2] : &:r2822_5, m2821_8 +# 2822| r2822_6(unsigned long) = Load[len2] : &:r2822_5, m2821_7 # 2822| v2822_7(void) = NoOp : # 2823| r2823_1(glval) = VariableAddress[z] : # 2823| r2823_2(unsigned long) = Constant[4] : @@ -20737,26 +18796,25 @@ ir.cpp: # 2823| r2823_4(unsigned long) = Mul : r2823_2, r2823_3 # 2823| m2823_5(unsigned long) = Store[z] : &:r2823_1, r2823_4 # 2824| v2824_1(void) = NoOp : -# 2821| v2821_9(void) = ReturnVoid : -# 2821| v2821_10(void) = AliasedUse : m2821_3 -# 2821| v2821_11(void) = ExitFunction : +# 2821| v2821_8(void) = ReturnVoid : +# 2821| v2821_9(void) = AliasedUse : ~m? +# 2821| v2821_10(void) = ExitFunction : # 2830| void test_assert_simple(int, int, unsigned int, int) # 2830| Block 0 # 2830| v2830_1(void) = EnterFunction : -# 2830| m2830_2(unknown) = AliasedDefinition : -# 2830| m2830_3(unknown) = InitializeNonLocal : -# 2830| m2830_4(unknown) = Chi : total:m2830_2, partial:m2830_3 -# 2830| r2830_5(glval) = VariableAddress[x] : -# 2830| m2830_6(int) = InitializeParameter[x] : &:r2830_5 -# 2830| r2830_7(glval) = VariableAddress[y] : -# 2830| m2830_8(int) = InitializeParameter[y] : &:r2830_7 -# 2830| r2830_9(glval) = VariableAddress[u] : -# 2830| m2830_10(unsigned int) = InitializeParameter[u] : &:r2830_9 -# 2830| r2830_11(glval) = VariableAddress[shadowed] : -# 2830| m2830_12(int) = InitializeParameter[shadowed] : &:r2830_11 +# 2830| mu2830_2(unknown) = AliasedDefinition : +# 2830| mu2830_3(unknown) = InitializeNonLocal : +# 2830| r2830_4(glval) = VariableAddress[x] : +# 2830| m2830_5(int) = InitializeParameter[x] : &:r2830_4 +# 2830| r2830_6(glval) = VariableAddress[y] : +# 2830| m2830_7(int) = InitializeParameter[y] : &:r2830_6 +# 2830| r2830_8(glval) = VariableAddress[u] : +# 2830| m2830_9(unsigned int) = InitializeParameter[u] : &:r2830_8 +# 2830| r2830_10(glval) = VariableAddress[shadowed] : +# 2830| m2830_11(int) = InitializeParameter[shadowed] : &:r2830_10 # 2831| r2831_1(glval) = VariableAddress[x] : -# 2831| r2831_2(int) = Load[x] : &:r2831_1, m2830_6 +# 2831| r2831_2(int) = Load[x] : &:r2831_1, m2830_5 # 2831| r2831_3(int) = Constant[0] : # 2831| r2831_4(bool) = CompareGT : r2831_2, r2831_3 # 2831| v2831_5(void) = ConditionalBranch : r2831_4 @@ -20765,23 +18823,23 @@ ir.cpp: # 2832| Block 1 # 2832| r2832_1(int) = Constant[0] : # 2832| r2832_2(glval) = VariableAddress[x] : -# 2832| r2832_3(int) = Load[x] : &:r2832_2, m2830_6 +# 2832| r2832_3(int) = Load[x] : &:r2832_2, m2830_5 # 2832| r2832_4(bool) = CompareLT : r2832_1, r2832_3 # 2832| v2832_5(void) = ConditionalBranch : r2832_4 #-----| True -> Block 2 # 2833| Block 2 # 2833| r2833_1(glval) = VariableAddress[x] : -# 2833| r2833_2(int) = Load[x] : &:r2833_1, m2830_6 +# 2833| r2833_2(int) = Load[x] : &:r2833_1, m2830_5 # 2833| r2833_3(glval) = VariableAddress[y] : -# 2833| r2833_4(int) = Load[y] : &:r2833_3, m2830_8 +# 2833| r2833_4(int) = Load[y] : &:r2833_3, m2830_7 # 2833| r2833_5(bool) = CompareLT : r2833_2, r2833_4 # 2833| v2833_6(void) = ConditionalBranch : r2833_5 #-----| True -> Block 3 # 2835| Block 3 # 2835| r2835_1(glval) = VariableAddress[x] : -# 2835| r2835_2(int) = Load[x] : &:r2835_1, m2830_6 +# 2835| r2835_2(int) = Load[x] : &:r2835_1, m2830_5 # 2835| r2835_3(int) = Constant[2] : # 2835| r2835_4(bool) = CompareNE : r2835_2, r2835_3 # 2835| v2835_5(void) = ConditionalBranch : r2835_4 @@ -20789,9 +18847,9 @@ ir.cpp: # 2837| Block 4 # 2837| r2837_1(glval) = VariableAddress[u] : -# 2837| r2837_2(unsigned int) = Load[u] : &:r2837_1, m2830_10 +# 2837| r2837_2(unsigned int) = Load[u] : &:r2837_1, m2830_9 # 2837| r2837_3(glval) = VariableAddress[x] : -# 2837| r2837_4(int) = Load[x] : &:r2837_3, m2830_6 +# 2837| r2837_4(int) = Load[x] : &:r2837_3, m2830_5 # 2837| r2837_5(bool) = CompareLT : r2837_2, r2837_4 # 2837| v2837_6(void) = ConditionalBranch : r2837_5 #-----| True -> Block 5 @@ -20799,29 +18857,28 @@ ir.cpp: # 2840| Block 5 # 2840| r2840_1(glval) = VariableAddress[shadowed] : # 2840| r2840_2(glval) = VariableAddress[x] : -# 2840| r2840_3(int) = Load[x] : &:r2840_2, m2830_6 +# 2840| r2840_3(int) = Load[x] : &:r2840_2, m2830_5 # 2840| m2840_4(int) = Store[shadowed] : &:r2840_1, r2840_3 # 2841| r2841_1(int) = Constant[0] : # 2841| v2841_2(void) = Convert : r2841_1 # 2843| v2843_1(void) = NoOp : -# 2830| v2830_13(void) = ReturnVoid : -# 2830| v2830_14(void) = AliasedUse : m2830_3 -# 2830| v2830_15(void) = ExitFunction : +# 2830| v2830_12(void) = ReturnVoid : +# 2830| v2830_13(void) = AliasedUse : ~m? +# 2830| v2830_14(void) = ExitFunction : # 2846| void test_assert_in_template(int, int, unsigned int) # 2846| Block 0 # 2846| v2846_1(void) = EnterFunction : -# 2846| m2846_2(unknown) = AliasedDefinition : -# 2846| m2846_3(unknown) = InitializeNonLocal : -# 2846| m2846_4(unknown) = Chi : total:m2846_2, partial:m2846_3 -# 2846| r2846_5(glval) = VariableAddress[x] : -# 2846| m2846_6(int) = InitializeParameter[x] : &:r2846_5 -# 2846| r2846_7(glval) = VariableAddress[y] : -# 2846| m2846_8(int) = InitializeParameter[y] : &:r2846_7 -# 2846| r2846_9(glval) = VariableAddress[u] : -# 2846| m2846_10(unsigned int) = InitializeParameter[u] : &:r2846_9 +# 2846| mu2846_2(unknown) = AliasedDefinition : +# 2846| mu2846_3(unknown) = InitializeNonLocal : +# 2846| r2846_4(glval) = VariableAddress[x] : +# 2846| m2846_5(int) = InitializeParameter[x] : &:r2846_4 +# 2846| r2846_6(glval) = VariableAddress[y] : +# 2846| m2846_7(int) = InitializeParameter[y] : &:r2846_6 +# 2846| r2846_8(glval) = VariableAddress[u] : +# 2846| m2846_9(unsigned int) = InitializeParameter[u] : &:r2846_8 # 2847| r2847_1(glval) = VariableAddress[x] : -# 2847| r2847_2(int) = Load[x] : &:r2847_1, m2846_6 +# 2847| r2847_2(int) = Load[x] : &:r2847_1, m2846_5 # 2847| r2847_3(int) = Constant[0] : # 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3 # 2847| v2847_5(void) = ConditionalBranch : r2847_4 @@ -20830,23 +18887,23 @@ ir.cpp: # 2848| Block 1 # 2848| r2848_1(int) = Constant[0] : # 2848| r2848_2(glval) = VariableAddress[x] : -# 2848| r2848_3(int) = Load[x] : &:r2848_2, m2846_6 +# 2848| r2848_3(int) = Load[x] : &:r2848_2, m2846_5 # 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3 # 2848| v2848_5(void) = ConditionalBranch : r2848_4 #-----| True -> Block 2 # 2849| Block 2 # 2849| r2849_1(glval) = VariableAddress[x] : -# 2849| r2849_2(int) = Load[x] : &:r2849_1, m2846_6 +# 2849| r2849_2(int) = Load[x] : &:r2849_1, m2846_5 # 2849| r2849_3(glval) = VariableAddress[y] : -# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_8 +# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_7 # 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4 # 2849| v2849_6(void) = ConditionalBranch : r2849_5 #-----| True -> Block 3 # 2851| Block 3 # 2851| r2851_1(glval) = VariableAddress[x] : -# 2851| r2851_2(int) = Load[x] : &:r2851_1, m2846_6 +# 2851| r2851_2(int) = Load[x] : &:r2851_1, m2846_5 # 2851| r2851_3(int) = Constant[2] : # 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3 # 2851| v2851_5(void) = ConditionalBranch : r2851_4 @@ -20854,9 +18911,9 @@ ir.cpp: # 2853| Block 4 # 2853| r2853_1(glval) = VariableAddress[u] : -# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_10 +# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_9 # 2853| r2853_3(glval) = VariableAddress[x] : -# 2853| r2853_4(int) = Load[x] : &:r2853_3, m2846_6 +# 2853| r2853_4(int) = Load[x] : &:r2853_3, m2846_5 # 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4 # 2853| v2853_6(void) = ConditionalBranch : r2853_5 #-----| True -> Block 5 @@ -20864,7 +18921,7 @@ ir.cpp: # 2856| Block 5 # 2856| r2856_1(glval) = VariableAddress[shadowed] : # 2856| r2856_2(glval) = VariableAddress[x] : -# 2856| r2856_3(int) = Load[x] : &:r2856_2, m2846_6 +# 2856| r2856_3(int) = Load[x] : &:r2856_2, m2846_5 # 2856| m2856_4(int) = Store[shadowed] : &:r2856_1, r2856_3 # 2857| r2857_1(glval) = VariableAddress[shadowed] : # 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, m2856_4 @@ -20875,7 +18932,7 @@ ir.cpp: # 2859| Block 6 # 2859| r2859_1(glval) = VariableAddress[x] : -# 2859| r2859_2(int) = Load[x] : &:r2859_1, m2846_6 +# 2859| r2859_2(int) = Load[x] : &:r2859_1, m2846_5 # 2859| r2859_3(int) = Constant[0] : # 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3 # 2859| v2859_5(void) = ConditionalBranch : r2859_4 @@ -20883,24 +18940,23 @@ ir.cpp: # 2860| Block 7 # 2860| v2860_1(void) = NoOp : -# 2846| v2846_11(void) = ReturnVoid : -# 2846| v2846_12(void) = AliasedUse : m2846_3 -# 2846| v2846_13(void) = ExitFunction : +# 2846| v2846_10(void) = ReturnVoid : +# 2846| v2846_11(void) = AliasedUse : ~m? +# 2846| v2846_12(void) = ExitFunction : # 2846| void test_assert_in_template(short, int, unsigned int) # 2846| Block 0 # 2846| v2846_1(void) = EnterFunction : -# 2846| m2846_2(unknown) = AliasedDefinition : -# 2846| m2846_3(unknown) = InitializeNonLocal : -# 2846| m2846_4(unknown) = Chi : total:m2846_2, partial:m2846_3 -# 2846| r2846_5(glval) = VariableAddress[x] : -# 2846| m2846_6(short) = InitializeParameter[x] : &:r2846_5 -# 2846| r2846_7(glval) = VariableAddress[y] : -# 2846| m2846_8(int) = InitializeParameter[y] : &:r2846_7 -# 2846| r2846_9(glval) = VariableAddress[u] : -# 2846| m2846_10(unsigned int) = InitializeParameter[u] : &:r2846_9 +# 2846| mu2846_2(unknown) = AliasedDefinition : +# 2846| mu2846_3(unknown) = InitializeNonLocal : +# 2846| r2846_4(glval) = VariableAddress[x] : +# 2846| m2846_5(short) = InitializeParameter[x] : &:r2846_4 +# 2846| r2846_6(glval) = VariableAddress[y] : +# 2846| m2846_7(int) = InitializeParameter[y] : &:r2846_6 +# 2846| r2846_8(glval) = VariableAddress[u] : +# 2846| m2846_9(unsigned int) = InitializeParameter[u] : &:r2846_8 # 2847| r2847_1(glval) = VariableAddress[x] : -# 2847| r2847_2(short) = Load[x] : &:r2847_1, m2846_6 +# 2847| r2847_2(short) = Load[x] : &:r2847_1, m2846_5 # 2847| r2847_3(int) = Constant[0] : # 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3 # 2847| v2847_5(void) = ConditionalBranch : r2847_4 @@ -20909,23 +18965,23 @@ ir.cpp: # 2848| Block 1 # 2848| r2848_1(int) = Constant[0] : # 2848| r2848_2(glval) = VariableAddress[x] : -# 2848| r2848_3(short) = Load[x] : &:r2848_2, m2846_6 +# 2848| r2848_3(short) = Load[x] : &:r2848_2, m2846_5 # 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3 # 2848| v2848_5(void) = ConditionalBranch : r2848_4 #-----| True -> Block 2 # 2849| Block 2 # 2849| r2849_1(glval) = VariableAddress[x] : -# 2849| r2849_2(short) = Load[x] : &:r2849_1, m2846_6 +# 2849| r2849_2(short) = Load[x] : &:r2849_1, m2846_5 # 2849| r2849_3(glval) = VariableAddress[y] : -# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_8 +# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_7 # 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4 # 2849| v2849_6(void) = ConditionalBranch : r2849_5 #-----| True -> Block 3 # 2851| Block 3 # 2851| r2851_1(glval) = VariableAddress[x] : -# 2851| r2851_2(short) = Load[x] : &:r2851_1, m2846_6 +# 2851| r2851_2(short) = Load[x] : &:r2851_1, m2846_5 # 2851| r2851_3(int) = Constant[2] : # 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3 # 2851| v2851_5(void) = ConditionalBranch : r2851_4 @@ -20933,9 +18989,9 @@ ir.cpp: # 2853| Block 4 # 2853| r2853_1(glval) = VariableAddress[u] : -# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_10 +# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_9 # 2853| r2853_3(glval) = VariableAddress[x] : -# 2853| r2853_4(short) = Load[x] : &:r2853_3, m2846_6 +# 2853| r2853_4(short) = Load[x] : &:r2853_3, m2846_5 # 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4 # 2853| v2853_6(void) = ConditionalBranch : r2853_5 #-----| True -> Block 5 @@ -20943,7 +18999,7 @@ ir.cpp: # 2856| Block 5 # 2856| r2856_1(glval) = VariableAddress[shadowed] : # 2856| r2856_2(glval) = VariableAddress[x] : -# 2856| r2856_3(short) = Load[x] : &:r2856_2, m2846_6 +# 2856| r2856_3(short) = Load[x] : &:r2856_2, m2846_5 # 2856| r2856_4(int) = Convert : r2856_3 # 2856| m2856_5(int) = Store[shadowed] : &:r2856_1, r2856_4 # 2857| r2857_1(glval) = VariableAddress[shadowed] : @@ -20955,7 +19011,7 @@ ir.cpp: # 2859| Block 6 # 2859| r2859_1(glval) = VariableAddress[x] : -# 2859| r2859_2(short) = Load[x] : &:r2859_1, m2846_6 +# 2859| r2859_2(short) = Load[x] : &:r2859_1, m2846_5 # 2859| r2859_3(int) = Constant[0] : # 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3 # 2859| v2859_5(void) = ConditionalBranch : r2859_4 @@ -20963,42 +19019,41 @@ ir.cpp: # 2860| Block 7 # 2860| v2860_1(void) = NoOp : -# 2846| v2846_11(void) = ReturnVoid : -# 2846| v2846_12(void) = AliasedUse : m2846_3 -# 2846| v2846_13(void) = ExitFunction : +# 2846| v2846_10(void) = ReturnVoid : +# 2846| v2846_11(void) = AliasedUse : ~m? +# 2846| v2846_12(void) = ExitFunction : # 2867| void (unnamed namespace)::complex_assertions(int, bool, int) # 2867| Block 0 # 2867| v2867_1(void) = EnterFunction : -# 2867| m2867_2(unknown) = AliasedDefinition : -# 2867| m2867_3(unknown) = InitializeNonLocal : -# 2867| m2867_4(unknown) = Chi : total:m2867_2, partial:m2867_3 -# 2867| r2867_5(glval) = VariableAddress[x] : -# 2867| m2867_6(int) = InitializeParameter[x] : &:r2867_5 -# 2867| r2867_7(glval) = VariableAddress[b] : -# 2867| m2867_8(bool) = InitializeParameter[b] : &:r2867_7 -# 2867| r2867_9(glval) = VariableAddress[max] : -# 2867| m2867_10(int) = InitializeParameter[max] : &:r2867_9 +# 2867| mu2867_2(unknown) = AliasedDefinition : +# 2867| mu2867_3(unknown) = InitializeNonLocal : +# 2867| r2867_4(glval) = VariableAddress[x] : +# 2867| m2867_5(int) = InitializeParameter[x] : &:r2867_4 +# 2867| r2867_6(glval) = VariableAddress[b] : +# 2867| m2867_7(bool) = InitializeParameter[b] : &:r2867_6 +# 2867| r2867_8(glval) = VariableAddress[max] : +# 2867| m2867_9(int) = InitializeParameter[max] : &:r2867_8 # 2868| r2868_1(glval) = VariableAddress[y] : # 2868| r2868_2(int) = Constant[0] : # 2868| v2868_3(void) = Convert : r2868_2 # 2868| r2868_4(glval) = VariableAddress[x] : -# 2868| r2868_5(int) = Load[x] : &:r2868_4, m2867_6 +# 2868| r2868_5(int) = Load[x] : &:r2868_4, m2867_5 # 2868| r2868_6(int) = CopyValue : r2868_5 # 2868| m2868_7(int) = Store[y] : &:r2868_1, r2868_6 # 2869| r2869_1(glval) = VariableAddress[z] : # 2869| r2869_2(glval) = VariableAddress[b] : -# 2869| r2869_3(bool) = Load[b] : &:r2869_2, m2867_8 +# 2869| r2869_3(bool) = Load[b] : &:r2869_2, m2867_7 # 2869| v2869_4(void) = ConditionalBranch : r2869_3 #-----| False -> Block 5 #-----| True -> Block 4 # 2867| Block 1 -# 2867| v2867_11(void) = AliasedUse : m2867_3 -# 2867| v2867_12(void) = ExitFunction : +# 2867| v2867_10(void) = AliasedUse : ~m? +# 2867| v2867_11(void) = ExitFunction : # 2867| Block 2 -# 2867| v2867_13(void) = Unwind : +# 2867| v2867_12(void) = Unwind : #-----| Goto -> Block 1 # 2869| Block 3 @@ -21063,73 +19118,68 @@ ir.cpp: # 2884| r2884_1(int) = Constant[0] : # 2884| v2884_2(void) = Convert : r2884_1 # 2886| v2886_1(void) = NoOp : -# 2867| v2867_14(void) = ReturnVoid : +# 2867| v2867_13(void) = ReturnVoid : #-----| Goto -> Block 1 ir23.cpp: # 1| bool consteval_1() # 1| Block 0 # 1| v1_1(void) = EnterFunction : -# 1| m1_2(unknown) = AliasedDefinition : -# 1| m1_3(unknown) = InitializeNonLocal : -# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 +# 1| mu1_2(unknown) = AliasedDefinition : +# 1| mu1_3(unknown) = InitializeNonLocal : # 6| r6_1(glval) = VariableAddress[#return] : # 6| r6_2(bool) = Constant[0] : # 6| m6_3(bool) = Store[#return] : &:r6_1, r6_2 -# 1| r1_5(glval) = VariableAddress[#return] : -# 1| v1_6(void) = ReturnValue : &:r1_5, m6_3 -# 1| v1_7(void) = AliasedUse : m1_3 -# 1| v1_8(void) = ExitFunction : +# 1| r1_4(glval) = VariableAddress[#return] : +# 1| v1_5(void) = ReturnValue : &:r1_4, m6_3 +# 1| v1_6(void) = AliasedUse : ~m? +# 1| v1_7(void) = ExitFunction : # 10| bool consteval_2() # 10| Block 0 # 10| v10_1(void) = EnterFunction : -# 10| m10_2(unknown) = AliasedDefinition : -# 10| m10_3(unknown) = InitializeNonLocal : -# 10| m10_4(unknown) = Chi : total:m10_2, partial:m10_3 +# 10| mu10_2(unknown) = AliasedDefinition : +# 10| mu10_3(unknown) = InitializeNonLocal : # 13| r13_1(glval) = VariableAddress[#return] : # 13| r13_2(bool) = Constant[1] : # 13| m13_3(bool) = Store[#return] : &:r13_1, r13_2 -# 10| r10_5(glval) = VariableAddress[#return] : -# 10| v10_6(void) = ReturnValue : &:r10_5, m13_3 -# 10| v10_7(void) = AliasedUse : m10_3 -# 10| v10_8(void) = ExitFunction : +# 10| r10_4(glval) = VariableAddress[#return] : +# 10| v10_5(void) = ReturnValue : &:r10_4, m13_3 +# 10| v10_6(void) = AliasedUse : ~m? +# 10| v10_7(void) = ExitFunction : # 19| bool consteval_3() # 19| Block 0 # 19| v19_1(void) = EnterFunction : -# 19| m19_2(unknown) = AliasedDefinition : -# 19| m19_3(unknown) = InitializeNonLocal : -# 19| m19_4(unknown) = Chi : total:m19_2, partial:m19_3 +# 19| mu19_2(unknown) = AliasedDefinition : +# 19| mu19_3(unknown) = InitializeNonLocal : # 21| v21_1(void) = NoOp : # 25| r25_1(glval) = VariableAddress[#return] : # 25| r25_2(bool) = Constant[0] : # 25| m25_3(bool) = Store[#return] : &:r25_1, r25_2 -# 19| r19_5(glval) = VariableAddress[#return] : -# 19| v19_6(void) = ReturnValue : &:r19_5, m25_3 -# 19| v19_7(void) = AliasedUse : m19_3 -# 19| v19_8(void) = ExitFunction : +# 19| r19_4(glval) = VariableAddress[#return] : +# 19| v19_5(void) = ReturnValue : &:r19_4, m25_3 +# 19| v19_6(void) = AliasedUse : ~m? +# 19| v19_7(void) = ExitFunction : # 28| bool consteval_4() # 28| Block 0 # 28| v28_1(void) = EnterFunction : -# 28| m28_2(unknown) = AliasedDefinition : -# 28| m28_3(unknown) = InitializeNonLocal : -# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 +# 28| mu28_2(unknown) = AliasedDefinition : +# 28| mu28_3(unknown) = InitializeNonLocal : # 31| r31_1(glval) = VariableAddress[#return] : # 31| r31_2(bool) = Constant[1] : # 31| m31_3(bool) = Store[#return] : &:r31_1, r31_2 -# 28| r28_5(glval) = VariableAddress[#return] : -# 28| v28_6(void) = ReturnValue : &:r28_5, m31_3 -# 28| v28_7(void) = AliasedUse : m28_3 -# 28| v28_8(void) = ExitFunction : +# 28| r28_4(glval) = VariableAddress[#return] : +# 28| v28_5(void) = ReturnValue : &:r28_4, m31_3 +# 28| v28_6(void) = AliasedUse : ~m? +# 28| v28_7(void) = ExitFunction : # 37| bool consteval_5() # 37| Block 0 # 37| v37_1(void) = EnterFunction : -# 37| m37_2(unknown) = AliasedDefinition : -# 37| m37_3(unknown) = InitializeNonLocal : -# 37| m37_4(unknown) = Chi : total:m37_2, partial:m37_3 +# 37| mu37_2(unknown) = AliasedDefinition : +# 37| mu37_3(unknown) = InitializeNonLocal : # 39| r39_1(glval) = VariableAddress[r] : # 39| r39_2(bool) = Constant[1] : # 39| m39_3(bool) = Store[r] : &:r39_1, r39_2 @@ -21140,17 +19190,16 @@ ir23.cpp: # 45| r45_2(glval) = VariableAddress[r] : # 45| r45_3(bool) = Load[r] : &:r45_2, m42_3 # 45| m45_4(bool) = Store[#return] : &:r45_1, r45_3 -# 37| r37_5(glval) = VariableAddress[#return] : -# 37| v37_6(void) = ReturnValue : &:r37_5, m45_4 -# 37| v37_7(void) = AliasedUse : m37_3 -# 37| v37_8(void) = ExitFunction : +# 37| r37_4(glval) = VariableAddress[#return] : +# 37| v37_5(void) = ReturnValue : &:r37_4, m45_4 +# 37| v37_6(void) = AliasedUse : ~m? +# 37| v37_7(void) = ExitFunction : # 48| bool consteval_6() # 48| Block 0 # 48| v48_1(void) = EnterFunction : -# 48| m48_2(unknown) = AliasedDefinition : -# 48| m48_3(unknown) = InitializeNonLocal : -# 48| m48_4(unknown) = Chi : total:m48_2, partial:m48_3 +# 48| mu48_2(unknown) = AliasedDefinition : +# 48| mu48_3(unknown) = InitializeNonLocal : # 50| r50_1(glval) = VariableAddress[r] : # 50| r50_2(bool) = Constant[1] : # 50| m50_3(bool) = Store[r] : &:r50_1, r50_2 @@ -21159,10 +19208,10 @@ ir23.cpp: # 56| r56_2(glval) = VariableAddress[r] : # 56| r56_3(bool) = Load[r] : &:r56_2, m50_3 # 56| m56_4(bool) = Store[#return] : &:r56_1, r56_3 -# 48| r48_5(glval) = VariableAddress[#return] : -# 48| v48_6(void) = ReturnValue : &:r48_5, m56_4 -# 48| v48_7(void) = AliasedUse : m48_3 -# 48| v48_8(void) = ExitFunction : +# 48| r48_4(glval) = VariableAddress[#return] : +# 48| v48_5(void) = ReturnValue : &:r48_4, m56_4 +# 48| v48_6(void) = AliasedUse : ~m? +# 48| v48_7(void) = ExitFunction : many-defs-per-use.cpp: # 34| void many_defs_per_use() @@ -39632,128 +37681,112 @@ perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 # 6| v6_1(void) = EnterFunction : -# 6| m6_2(unknown) = AliasedDefinition : -# 6| m6_3(unknown) = InitializeNonLocal : -# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 -# 6| r6_5(glval) = VariableAddress[#this] : -# 6| m6_6(glval) = InitializeParameter[#this] : &:r6_5 -# 6| r6_7(glval) = Load[#this] : &:r6_5, m6_6 -# 6| m6_8(Big) = InitializeIndirection[#this] : &:r6_7 -# 6| r6_9(glval) = FieldAddress[buffer] : r6_7 -# 6| r6_10(int) = Constant[0] : -# 6| r6_11(glval) = PointerAdd[1] : r6_9, r6_10 -# 6| r6_12(unknown[1073741824]) = Constant[0] : -# 6| m6_13(unknown[1073741824]) = Store[?] : &:r6_11, r6_12 -# 6| m6_14(unknown) = Chi : total:m6_8, partial:m6_13 -# 6| v6_15(void) = NoOp : -# 6| v6_16(void) = ReturnIndirection[#this] : &:r6_7, m6_14 -# 6| v6_17(void) = ReturnVoid : -# 6| v6_18(void) = AliasedUse : m6_3 -# 6| v6_19(void) = ExitFunction : +# 6| mu6_2(unknown) = AliasedDefinition : +# 6| mu6_3(unknown) = InitializeNonLocal : +# 6| r6_4(glval) = VariableAddress[#this] : +# 6| m6_5(glval) = InitializeParameter[#this] : &:r6_4 +# 6| r6_6(glval) = Load[#this] : &:r6_4, m6_5 +# 6| mu6_7(Big) = InitializeIndirection[#this] : &:r6_6 +# 6| r6_8(glval) = FieldAddress[buffer] : r6_6 +# 6| r6_9(int) = Constant[0] : +# 6| r6_10(glval) = PointerAdd[1] : r6_8, r6_9 +# 6| r6_11(unknown[1073741824]) = Constant[0] : +# 6| mu6_12(unknown[1073741824]) = Store[?] : &:r6_10, r6_11 +# 6| v6_13(void) = NoOp : +# 6| v6_14(void) = ReturnIndirection[#this] : &:r6_6, ~m? +# 6| v6_15(void) = ReturnVoid : +# 6| v6_16(void) = AliasedUse : ~m? +# 6| v6_17(void) = ExitFunction : # 9| int main() # 9| Block 0 # 9| v9_1(void) = EnterFunction : -# 9| m9_2(unknown) = AliasedDefinition : -# 9| m9_3(unknown) = InitializeNonLocal : -# 9| m9_4(unknown) = Chi : total:m9_2, partial:m9_3 +# 9| mu9_2(unknown) = AliasedDefinition : +# 9| mu9_3(unknown) = InitializeNonLocal : # 10| r10_1(glval) = VariableAddress[big] : # 10| r10_2(glval) = FunctionAddress[operator new] : # 10| r10_3(unsigned long) = Constant[1073741824] : # 10| r10_4(void *) = Call[operator new] : func:r10_2, 0:r10_3 -# 10| m10_5(unknown) = ^CallSideEffect : ~m9_4 -# 10| m10_6(unknown) = Chi : total:m9_4, partial:m10_5 -# 10| m10_7(unknown) = ^InitializeDynamicAllocation : &:r10_4 -# 10| r10_8(Big *) = Convert : r10_4 -# 10| r10_9(glval) = FunctionAddress[Big] : -# 10| v10_10(void) = Call[Big] : func:r10_9, this:r10_8 -# 10| m10_11(unknown) = ^CallSideEffect : ~m10_6 -# 10| m10_12(unknown) = Chi : total:m10_6, partial:m10_11 -# 10| m10_13(Big) = ^IndirectMayWriteSideEffect[-1] : &:r10_8 -# 10| m10_14(unknown) = Chi : total:m10_7, partial:m10_13 -# 10| m10_15(Big *) = Store[big] : &:r10_1, r10_8 +# 10| mu10_5(unknown) = ^CallSideEffect : ~m? +# 10| mu10_6(unknown) = ^InitializeDynamicAllocation : &:r10_4 +# 10| r10_7(Big *) = Convert : r10_4 +# 10| r10_8(glval) = FunctionAddress[Big] : +# 10| v10_9(void) = Call[Big] : func:r10_8, this:r10_7 +# 10| mu10_10(unknown) = ^CallSideEffect : ~m? +# 10| mu10_11(Big) = ^IndirectMayWriteSideEffect[-1] : &:r10_7 +# 10| m10_12(Big *) = Store[big] : &:r10_1, r10_7 # 12| r12_1(glval) = VariableAddress[#return] : # 12| r12_2(int) = Constant[0] : # 12| m12_3(int) = Store[#return] : &:r12_1, r12_2 -# 9| r9_5(glval) = VariableAddress[#return] : -# 9| v9_6(void) = ReturnValue : &:r9_5, m12_3 -# 9| v9_7(void) = AliasedUse : ~m10_12 -# 9| v9_8(void) = ExitFunction : +# 9| r9_4(glval) = VariableAddress[#return] : +# 9| v9_5(void) = ReturnValue : &:r9_4, m12_3 +# 9| v9_6(void) = AliasedUse : ~m? +# 9| v9_7(void) = ExitFunction : smart_ptr.cpp: # 10| void call_unique_ptr_arg(int*) # 10| Block 0 # 10| v10_1(void) = EnterFunction : -# 10| m10_2(unknown) = AliasedDefinition : -# 10| m10_3(unknown) = InitializeNonLocal : -# 10| m10_4(unknown) = Chi : total:m10_2, partial:m10_3 -# 10| r10_5(glval) = VariableAddress[p] : -# 10| m10_6(int *) = InitializeParameter[p] : &:r10_5 -# 10| r10_7(int *) = Load[p] : &:r10_5, m10_6 -# 10| m10_8(unknown) = InitializeIndirection[p] : &:r10_7 -# 10| m10_9(unknown) = Chi : total:m10_4, partial:m10_8 +# 10| mu10_2(unknown) = AliasedDefinition : +# 10| mu10_3(unknown) = InitializeNonLocal : +# 10| r10_4(glval) = VariableAddress[p] : +# 10| m10_5(int *) = InitializeParameter[p] : &:r10_4 +# 10| r10_6(int *) = Load[p] : &:r10_4, m10_5 +# 10| mu10_7(unknown) = InitializeIndirection[p] : &:r10_6 # 11| r11_1(glval>>) = VariableAddress[up] : # 11| m11_2(unique_ptr>) = Uninitialized[up] : &:r11_1 # 11| r11_3(glval) = FunctionAddress[unique_ptr] : # 11| r11_4(glval) = VariableAddress[p] : -# 11| r11_5(int *) = Load[p] : &:r11_4, m10_6 +# 11| r11_5(int *) = Load[p] : &:r11_4, m10_5 # 11| v11_6(void) = Call[unique_ptr] : func:r11_3, this:r11_1, 0:r11_5 -# 11| m11_7(unknown) = ^CallSideEffect : ~m10_9 -# 11| m11_8(unknown) = Chi : total:m10_9, partial:m11_7 -# 11| m11_9(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r11_1 +# 11| mu11_7(unknown) = ^CallSideEffect : ~m? +# 11| m11_8(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r11_1 # 12| r12_1(glval) = FunctionAddress[unique_ptr_arg] : # 12| r12_2(glval>>) = VariableAddress[#temp12:20] : # 12| r12_3(glval) = FunctionAddress[move] : # 12| r12_4(glval>>) = VariableAddress[up] : # 12| r12_5(unique_ptr> &) = CopyValue : r12_4 # 12| r12_6(unique_ptr> &&) = Call[move] : func:r12_3, 0:r12_5 -# 12| r12_7(unique_ptr>) = Load[?] : &:r12_6, m11_9 +# 12| r12_7(unique_ptr>) = Load[?] : &:r12_6, m11_8 # 12| m12_8(unique_ptr>) = Store[#temp12:20] : &:r12_2, r12_7 # 12| r12_9(unique_ptr>) = Load[#temp12:20] : &:r12_2, m12_8 # 12| v12_10(void) = Call[unique_ptr_arg] : func:r12_1, 0:r12_9 -# 12| m12_11(unknown) = ^CallSideEffect : ~m11_8 -# 12| m12_12(unknown) = Chi : total:m11_8, partial:m12_11 -# 12| v12_13(void) = ^BufferReadSideEffect[0] : &:r12_9, ~m12_12 -# 12| m12_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r12_9 -# 12| m12_15(unknown) = Chi : total:m12_12, partial:m12_14 -# 12| r12_16(glval>>) = CopyValue : r12_2 -# 12| r12_17(glval) = FunctionAddress[~unique_ptr] : -# 12| v12_18(void) = Call[~unique_ptr] : func:r12_17, this:r12_16 -# 12| v12_19(void) = ^IndirectReadSideEffect[-1] : &:r12_16, m12_8 -# 12| m12_20(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r12_16 +# 12| mu12_11(unknown) = ^CallSideEffect : ~m? +# 12| v12_12(void) = ^BufferReadSideEffect[0] : &:r12_9, ~m? +# 12| mu12_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r12_9 +# 12| r12_14(glval>>) = CopyValue : r12_2 +# 12| r12_15(glval) = FunctionAddress[~unique_ptr] : +# 12| v12_16(void) = Call[~unique_ptr] : func:r12_15, this:r12_14 +# 12| v12_17(void) = ^IndirectReadSideEffect[-1] : &:r12_14, m12_8 +# 12| m12_18(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r12_14 # 13| v13_1(void) = NoOp : # 13| r13_2(glval>>) = VariableAddress[up] : # 13| r13_3(glval) = FunctionAddress[~unique_ptr] : # 13| v13_4(void) = Call[~unique_ptr] : func:r13_3, this:r13_2 -# 13| v13_5(void) = ^IndirectReadSideEffect[-1] : &:r13_2, m11_9 +# 13| v13_5(void) = ^IndirectReadSideEffect[-1] : &:r13_2, m11_8 # 13| m13_6(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r13_2 -# 10| v10_10(void) = ReturnIndirection[p] : &:r10_7, ~m12_15 -# 10| v10_11(void) = ReturnVoid : -# 10| v10_12(void) = AliasedUse : ~m12_15 -# 10| v10_13(void) = ExitFunction : +# 10| v10_8(void) = ReturnIndirection[p] : &:r10_6, ~m? +# 10| v10_9(void) = ReturnVoid : +# 10| v10_10(void) = AliasedUse : ~m? +# 10| v10_11(void) = ExitFunction : # 17| void call_shared_ptr_arg(float*) # 17| Block 0 # 17| v17_1(void) = EnterFunction : -# 17| m17_2(unknown) = AliasedDefinition : -# 17| m17_3(unknown) = InitializeNonLocal : -# 17| m17_4(unknown) = Chi : total:m17_2, partial:m17_3 -# 17| r17_5(glval) = VariableAddress[p] : -# 17| m17_6(float *) = InitializeParameter[p] : &:r17_5 -# 17| r17_7(float *) = Load[p] : &:r17_5, m17_6 -# 17| m17_8(unknown) = InitializeIndirection[p] : &:r17_7 -# 17| m17_9(unknown) = Chi : total:m17_4, partial:m17_8 +# 17| mu17_2(unknown) = AliasedDefinition : +# 17| mu17_3(unknown) = InitializeNonLocal : +# 17| r17_4(glval) = VariableAddress[p] : +# 17| m17_5(float *) = InitializeParameter[p] : &:r17_4 +# 17| r17_6(float *) = Load[p] : &:r17_4, m17_5 +# 17| mu17_7(unknown) = InitializeIndirection[p] : &:r17_6 # 18| r18_1(glval>) = VariableAddress[sp] : -# 18| m18_2(shared_ptr) = Uninitialized[sp] : &:r18_1 -# 18| m18_3(unknown) = Chi : total:m17_9, partial:m18_2 -# 18| r18_4(glval) = FunctionAddress[shared_ptr] : -# 18| r18_5(glval) = VariableAddress[p] : -# 18| r18_6(float *) = Load[p] : &:r18_5, m17_6 -# 18| v18_7(void) = Call[shared_ptr] : func:r18_4, this:r18_1, 0:r18_6 -# 18| m18_8(unknown) = ^CallSideEffect : ~m18_3 -# 18| m18_9(unknown) = Chi : total:m18_3, partial:m18_8 -# 18| m18_10(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r18_1 -# 18| m18_11(unknown) = Chi : total:m18_9, partial:m18_10 +# 18| mu18_2(shared_ptr) = Uninitialized[sp] : &:r18_1 +# 18| r18_3(glval) = FunctionAddress[shared_ptr] : +# 18| r18_4(glval) = VariableAddress[p] : +# 18| r18_5(float *) = Load[p] : &:r18_4, m17_5 +# 18| v18_6(void) = Call[shared_ptr] : func:r18_3, this:r18_1, 0:r18_5 +# 18| mu18_7(unknown) = ^CallSideEffect : ~m? +# 18| mu18_8(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r18_1 # 19| r19_1(glval) = FunctionAddress[shared_ptr_arg] : # 19| r19_2(glval>) = VariableAddress[#temp19:20] : # 19| m19_3(shared_ptr) = Uninitialized[#temp19:20] : &:r19_2 @@ -39762,43 +37795,37 @@ smart_ptr.cpp: # 19| r19_6(glval>) = Convert : r19_5 # 19| r19_7(shared_ptr &) = CopyValue : r19_6 # 19| v19_8(void) = Call[shared_ptr] : func:r19_4, this:r19_2, 0:r19_7 -# 19| m19_9(unknown) = ^CallSideEffect : ~m18_11 -# 19| m19_10(unknown) = Chi : total:m18_11, partial:m19_9 -# 19| v19_11(void) = ^IndirectReadSideEffect[0] : &:r19_7, ~m19_10 -# 19| m19_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_2 -# 19| r19_13(shared_ptr) = Load[#temp19:20] : &:r19_2, m19_12 -# 19| v19_14(void) = Call[shared_ptr_arg] : func:r19_1, 0:r19_13 -# 19| m19_15(unknown) = ^CallSideEffect : ~m19_10 -# 19| m19_16(unknown) = Chi : total:m19_10, partial:m19_15 -# 19| v19_17(void) = ^BufferReadSideEffect[0] : &:r19_13, ~m19_16 -# 19| m19_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r19_13 -# 19| m19_19(unknown) = Chi : total:m19_16, partial:m19_18 -# 19| r19_20(glval>) = CopyValue : r19_2 -# 19| r19_21(glval) = FunctionAddress[~shared_ptr] : -# 19| v19_22(void) = Call[~shared_ptr] : func:r19_21, this:r19_20 -# 19| v19_23(void) = ^IndirectReadSideEffect[-1] : &:r19_20, m19_12 -# 19| m19_24(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_20 +# 19| mu19_9(unknown) = ^CallSideEffect : ~m? +# 19| v19_10(void) = ^IndirectReadSideEffect[0] : &:r19_7, ~m? +# 19| m19_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_2 +# 19| r19_12(shared_ptr) = Load[#temp19:20] : &:r19_2, m19_11 +# 19| v19_13(void) = Call[shared_ptr_arg] : func:r19_1, 0:r19_12 +# 19| mu19_14(unknown) = ^CallSideEffect : ~m? +# 19| v19_15(void) = ^BufferReadSideEffect[0] : &:r19_12, ~m? +# 19| mu19_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r19_12 +# 19| r19_17(glval>) = CopyValue : r19_2 +# 19| r19_18(glval) = FunctionAddress[~shared_ptr] : +# 19| v19_19(void) = Call[~shared_ptr] : func:r19_18, this:r19_17 +# 19| v19_20(void) = ^IndirectReadSideEffect[-1] : &:r19_17, m19_11 +# 19| m19_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_17 # 20| v20_1(void) = NoOp : # 20| r20_2(glval>) = VariableAddress[sp] : # 20| r20_3(glval) = FunctionAddress[~shared_ptr] : # 20| v20_4(void) = Call[~shared_ptr] : func:r20_3, this:r20_2 -# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_2, ~m19_19 -# 20| m20_6(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r20_2 -# 20| m20_7(unknown) = Chi : total:m19_19, partial:m20_6 -# 17| v17_10(void) = ReturnIndirection[p] : &:r17_7, ~m20_7 -# 17| v17_11(void) = ReturnVoid : -# 17| v17_12(void) = AliasedUse : ~m19_19 -# 17| v17_13(void) = ExitFunction : +# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_2, ~m? +# 20| mu20_6(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r20_2 +# 17| v17_8(void) = ReturnIndirection[p] : &:r17_6, ~m? +# 17| v17_9(void) = ReturnVoid : +# 17| v17_10(void) = AliasedUse : ~m? +# 17| v17_11(void) = ExitFunction : # 28| void call_shared_ptr_consts() # 28| Block 0 # 28| v28_1(void) = EnterFunction : -# 28| m28_2(unknown) = AliasedDefinition : -# 28| m28_3(unknown) = InitializeNonLocal : -# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 +# 28| mu28_2(unknown) = AliasedDefinition : +# 28| mu28_3(unknown) = InitializeNonLocal : # 29| r29_1(glval>) = VariableAddress[sp_const_int] : -# 29| m29_2(shared_ptr) = Uninitialized[sp_const_int] : &:r29_1 -# 29| m29_3(unknown) = Chi : total:m28_4, partial:m29_2 +# 29| mu29_2(shared_ptr) = Uninitialized[sp_const_int] : &:r29_1 # 31| r31_1(glval) = FunctionAddress[shared_ptr_const_int] : # 31| r31_2(glval>) = VariableAddress[#temp31:26] : # 31| m31_3(shared_ptr) = Uninitialized[#temp31:26] : &:r31_2 @@ -39807,23 +37834,20 @@ smart_ptr.cpp: # 31| r31_6(glval>) = Convert : r31_5 # 31| r31_7(shared_ptr &) = CopyValue : r31_6 # 31| v31_8(void) = Call[shared_ptr] : func:r31_4, this:r31_2, 0:r31_7 -# 31| m31_9(unknown) = ^CallSideEffect : ~m29_3 -# 31| m31_10(unknown) = Chi : total:m29_3, partial:m31_9 -# 31| v31_11(void) = ^IndirectReadSideEffect[0] : &:r31_7, ~m31_10 -# 31| m31_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_2 -# 31| r31_13(shared_ptr) = Load[#temp31:26] : &:r31_2, m31_12 -# 31| v31_14(void) = Call[shared_ptr_const_int] : func:r31_1, 0:r31_13 -# 31| m31_15(unknown) = ^CallSideEffect : ~m31_10 -# 31| m31_16(unknown) = Chi : total:m31_10, partial:m31_15 -# 31| v31_17(void) = ^BufferReadSideEffect[0] : &:r31_13, ~m31_16 -# 31| r31_18(glval>) = CopyValue : r31_2 -# 31| r31_19(glval) = FunctionAddress[~shared_ptr] : -# 31| v31_20(void) = Call[~shared_ptr] : func:r31_19, this:r31_18 -# 31| v31_21(void) = ^IndirectReadSideEffect[-1] : &:r31_18, m31_12 -# 31| m31_22(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_18 +# 31| mu31_9(unknown) = ^CallSideEffect : ~m? +# 31| v31_10(void) = ^IndirectReadSideEffect[0] : &:r31_7, ~m? +# 31| m31_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_2 +# 31| r31_12(shared_ptr) = Load[#temp31:26] : &:r31_2, m31_11 +# 31| v31_13(void) = Call[shared_ptr_const_int] : func:r31_1, 0:r31_12 +# 31| mu31_14(unknown) = ^CallSideEffect : ~m? +# 31| v31_15(void) = ^BufferReadSideEffect[0] : &:r31_12, ~m? +# 31| r31_16(glval>) = CopyValue : r31_2 +# 31| r31_17(glval) = FunctionAddress[~shared_ptr] : +# 31| v31_18(void) = Call[~shared_ptr] : func:r31_17, this:r31_16 +# 31| v31_19(void) = ^IndirectReadSideEffect[-1] : &:r31_16, m31_11 +# 31| m31_20(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_16 # 33| r33_1(glval>) = VariableAddress[sp_const_int_pointer] : -# 33| m33_2(shared_ptr) = Uninitialized[sp_const_int_pointer] : &:r33_1 -# 33| m33_3(unknown) = Chi : total:m31_16, partial:m33_2 +# 33| mu33_2(shared_ptr) = Uninitialized[sp_const_int_pointer] : &:r33_1 # 35| r35_1(glval) = FunctionAddress[shared_ptr_const_int_ptr] : # 35| r35_2(glval>) = VariableAddress[#temp35:30] : # 35| m35_3(shared_ptr) = Uninitialized[#temp35:30] : &:r35_2 @@ -39832,25 +37856,21 @@ smart_ptr.cpp: # 35| r35_6(glval>) = Convert : r35_5 # 35| r35_7(shared_ptr &) = CopyValue : r35_6 # 35| v35_8(void) = Call[shared_ptr] : func:r35_4, this:r35_2, 0:r35_7 -# 35| m35_9(unknown) = ^CallSideEffect : ~m33_3 -# 35| m35_10(unknown) = Chi : total:m33_3, partial:m35_9 -# 35| v35_11(void) = ^IndirectReadSideEffect[0] : &:r35_7, ~m35_10 -# 35| m35_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_2 -# 35| r35_13(shared_ptr) = Load[#temp35:30] : &:r35_2, m35_12 -# 35| v35_14(void) = Call[shared_ptr_const_int_ptr] : func:r35_1, 0:r35_13 -# 35| m35_15(unknown) = ^CallSideEffect : ~m35_10 -# 35| m35_16(unknown) = Chi : total:m35_10, partial:m35_15 -# 35| v35_17(void) = ^BufferReadSideEffect[0] : &:r35_13, ~m35_16 -# 35| m35_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r35_13 -# 35| m35_19(unknown) = Chi : total:m35_16, partial:m35_18 -# 35| r35_20(glval>) = CopyValue : r35_2 -# 35| r35_21(glval) = FunctionAddress[~shared_ptr] : -# 35| v35_22(void) = Call[~shared_ptr] : func:r35_21, this:r35_20 -# 35| v35_23(void) = ^IndirectReadSideEffect[-1] : &:r35_20, m35_12 -# 35| m35_24(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_20 +# 35| mu35_9(unknown) = ^CallSideEffect : ~m? +# 35| v35_10(void) = ^IndirectReadSideEffect[0] : &:r35_7, ~m? +# 35| m35_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_2 +# 35| r35_12(shared_ptr) = Load[#temp35:30] : &:r35_2, m35_11 +# 35| v35_13(void) = Call[shared_ptr_const_int_ptr] : func:r35_1, 0:r35_12 +# 35| mu35_14(unknown) = ^CallSideEffect : ~m? +# 35| v35_15(void) = ^BufferReadSideEffect[0] : &:r35_12, ~m? +# 35| mu35_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r35_12 +# 35| r35_17(glval>) = CopyValue : r35_2 +# 35| r35_18(glval) = FunctionAddress[~shared_ptr] : +# 35| v35_19(void) = Call[~shared_ptr] : func:r35_18, this:r35_17 +# 35| v35_20(void) = ^IndirectReadSideEffect[-1] : &:r35_17, m35_11 +# 35| m35_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_17 # 37| r37_1(glval>>) = VariableAddress[sp_sp_const_int] : -# 37| m37_2(shared_ptr>) = Uninitialized[sp_sp_const_int] : &:r37_1 -# 37| m37_3(unknown) = Chi : total:m35_19, partial:m37_2 +# 37| mu37_2(shared_ptr>) = Uninitialized[sp_sp_const_int] : &:r37_1 # 39| r39_1(glval) = FunctionAddress[shared_ptr_shared_ptr_const_int] : # 39| r39_2(glval>>) = VariableAddress[#temp39:37] : # 39| m39_3(shared_ptr>) = Uninitialized[#temp39:37] : &:r39_2 @@ -39859,25 +37879,21 @@ smart_ptr.cpp: # 39| r39_6(glval>>) = Convert : r39_5 # 39| r39_7(shared_ptr> &) = CopyValue : r39_6 # 39| v39_8(void) = Call[shared_ptr] : func:r39_4, this:r39_2, 0:r39_7 -# 39| m39_9(unknown) = ^CallSideEffect : ~m37_3 -# 39| m39_10(unknown) = Chi : total:m37_3, partial:m39_9 -# 39| v39_11(void) = ^IndirectReadSideEffect[0] : &:r39_7, ~m39_10 -# 39| m39_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_2 -# 39| r39_13(shared_ptr>) = Load[#temp39:37] : &:r39_2, m39_12 -# 39| v39_14(void) = Call[shared_ptr_shared_ptr_const_int] : func:r39_1, 0:r39_13 -# 39| m39_15(unknown) = ^CallSideEffect : ~m39_10 -# 39| m39_16(unknown) = Chi : total:m39_10, partial:m39_15 -# 39| v39_17(void) = ^BufferReadSideEffect[0] : &:r39_13, ~m39_16 -# 39| m39_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r39_13 -# 39| m39_19(unknown) = Chi : total:m39_16, partial:m39_18 -# 39| r39_20(glval>>) = CopyValue : r39_2 -# 39| r39_21(glval) = FunctionAddress[~shared_ptr] : -# 39| v39_22(void) = Call[~shared_ptr] : func:r39_21, this:r39_20 -# 39| v39_23(void) = ^IndirectReadSideEffect[-1] : &:r39_20, m39_12 -# 39| m39_24(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_20 +# 39| mu39_9(unknown) = ^CallSideEffect : ~m? +# 39| v39_10(void) = ^IndirectReadSideEffect[0] : &:r39_7, ~m? +# 39| m39_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_2 +# 39| r39_12(shared_ptr>) = Load[#temp39:37] : &:r39_2, m39_11 +# 39| v39_13(void) = Call[shared_ptr_shared_ptr_const_int] : func:r39_1, 0:r39_12 +# 39| mu39_14(unknown) = ^CallSideEffect : ~m? +# 39| v39_15(void) = ^BufferReadSideEffect[0] : &:r39_12, ~m? +# 39| mu39_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r39_12 +# 39| r39_17(glval>>) = CopyValue : r39_2 +# 39| r39_18(glval) = FunctionAddress[~shared_ptr] : +# 39| v39_19(void) = Call[~shared_ptr] : func:r39_18, this:r39_17 +# 39| v39_20(void) = ^IndirectReadSideEffect[-1] : &:r39_17, m39_11 +# 39| m39_21(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_17 # 41| r41_1(glval>>) = VariableAddress[sp_const_sp_int] : -# 41| m41_2(shared_ptr>) = Uninitialized[sp_const_sp_int] : &:r41_1 -# 41| m41_3(unknown) = Chi : total:m39_19, partial:m41_2 +# 41| mu41_2(shared_ptr>) = Uninitialized[sp_const_sp_int] : &:r41_1 # 43| r43_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_int] : # 43| r43_2(glval>>) = VariableAddress[#temp43:37] : # 43| m43_3(shared_ptr>) = Uninitialized[#temp43:37] : &:r43_2 @@ -39886,25 +37902,21 @@ smart_ptr.cpp: # 43| r43_6(glval>>) = Convert : r43_5 # 43| r43_7(shared_ptr> &) = CopyValue : r43_6 # 43| v43_8(void) = Call[shared_ptr] : func:r43_4, this:r43_2, 0:r43_7 -# 43| m43_9(unknown) = ^CallSideEffect : ~m41_3 -# 43| m43_10(unknown) = Chi : total:m41_3, partial:m43_9 -# 43| v43_11(void) = ^IndirectReadSideEffect[0] : &:r43_7, ~m43_10 -# 43| m43_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_2 -# 43| r43_13(shared_ptr>) = Load[#temp43:37] : &:r43_2, m43_12 -# 43| v43_14(void) = Call[shared_ptr_const_shared_ptr_int] : func:r43_1, 0:r43_13 -# 43| m43_15(unknown) = ^CallSideEffect : ~m43_10 -# 43| m43_16(unknown) = Chi : total:m43_10, partial:m43_15 -# 43| v43_17(void) = ^BufferReadSideEffect[0] : &:r43_13, ~m43_16 -# 43| m43_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r43_13 -# 43| m43_19(unknown) = Chi : total:m43_16, partial:m43_18 -# 43| r43_20(glval>>) = CopyValue : r43_2 -# 43| r43_21(glval) = FunctionAddress[~shared_ptr] : -# 43| v43_22(void) = Call[~shared_ptr] : func:r43_21, this:r43_20 -# 43| v43_23(void) = ^IndirectReadSideEffect[-1] : &:r43_20, m43_12 -# 43| m43_24(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_20 +# 43| mu43_9(unknown) = ^CallSideEffect : ~m? +# 43| v43_10(void) = ^IndirectReadSideEffect[0] : &:r43_7, ~m? +# 43| m43_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_2 +# 43| r43_12(shared_ptr>) = Load[#temp43:37] : &:r43_2, m43_11 +# 43| v43_13(void) = Call[shared_ptr_const_shared_ptr_int] : func:r43_1, 0:r43_12 +# 43| mu43_14(unknown) = ^CallSideEffect : ~m? +# 43| v43_15(void) = ^BufferReadSideEffect[0] : &:r43_12, ~m? +# 43| mu43_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r43_12 +# 43| r43_17(glval>>) = CopyValue : r43_2 +# 43| r43_18(glval) = FunctionAddress[~shared_ptr] : +# 43| v43_19(void) = Call[~shared_ptr] : func:r43_18, this:r43_17 +# 43| v43_20(void) = ^IndirectReadSideEffect[-1] : &:r43_17, m43_11 +# 43| m43_21(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_17 # 45| r45_1(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 45| m45_2(shared_ptr>) = Uninitialized[sp_const_sp_const_int] : &:r45_1 -# 45| m45_3(unknown) = Chi : total:m43_19, partial:m45_2 +# 45| mu45_2(shared_ptr>) = Uninitialized[sp_const_sp_const_int] : &:r45_1 # 47| r47_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_const_int] : # 47| r47_2(glval>>) = VariableAddress[#temp47:43] : # 47| m47_3(shared_ptr>) = Uninitialized[#temp47:43] : &:r47_2 @@ -39913,221 +37925,190 @@ smart_ptr.cpp: # 47| r47_6(glval>>) = Convert : r47_5 # 47| r47_7(shared_ptr> &) = CopyValue : r47_6 # 47| v47_8(void) = Call[shared_ptr] : func:r47_4, this:r47_2, 0:r47_7 -# 47| m47_9(unknown) = ^CallSideEffect : ~m45_3 -# 47| m47_10(unknown) = Chi : total:m45_3, partial:m47_9 -# 47| v47_11(void) = ^IndirectReadSideEffect[0] : &:r47_7, ~m47_10 -# 47| m47_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_2 -# 47| r47_13(shared_ptr>) = Load[#temp47:43] : &:r47_2, m47_12 -# 47| v47_14(void) = Call[shared_ptr_const_shared_ptr_const_int] : func:r47_1, 0:r47_13 -# 47| m47_15(unknown) = ^CallSideEffect : ~m47_10 -# 47| m47_16(unknown) = Chi : total:m47_10, partial:m47_15 -# 47| v47_17(void) = ^BufferReadSideEffect[0] : &:r47_13, ~m47_16 -# 47| r47_18(glval>>) = CopyValue : r47_2 -# 47| r47_19(glval) = FunctionAddress[~shared_ptr] : -# 47| v47_20(void) = Call[~shared_ptr] : func:r47_19, this:r47_18 -# 47| v47_21(void) = ^IndirectReadSideEffect[-1] : &:r47_18, m47_12 -# 47| m47_22(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_18 +# 47| mu47_9(unknown) = ^CallSideEffect : ~m? +# 47| v47_10(void) = ^IndirectReadSideEffect[0] : &:r47_7, ~m? +# 47| m47_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_2 +# 47| r47_12(shared_ptr>) = Load[#temp47:43] : &:r47_2, m47_11 +# 47| v47_13(void) = Call[shared_ptr_const_shared_ptr_const_int] : func:r47_1, 0:r47_12 +# 47| mu47_14(unknown) = ^CallSideEffect : ~m? +# 47| v47_15(void) = ^BufferReadSideEffect[0] : &:r47_12, ~m? +# 47| r47_16(glval>>) = CopyValue : r47_2 +# 47| r47_17(glval) = FunctionAddress[~shared_ptr] : +# 47| v47_18(void) = Call[~shared_ptr] : func:r47_17, this:r47_16 +# 47| v47_19(void) = ^IndirectReadSideEffect[-1] : &:r47_16, m47_11 +# 47| m47_20(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_16 # 48| v48_1(void) = NoOp : # 48| r48_2(glval>>) = VariableAddress[sp_const_sp_const_int] : # 48| r48_3(glval) = FunctionAddress[~shared_ptr] : # 48| v48_4(void) = Call[~shared_ptr] : func:r48_3, this:r48_2 -# 48| v48_5(void) = ^IndirectReadSideEffect[-1] : &:r48_2, ~m47_16 -# 48| m48_6(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_2 -# 48| m48_7(unknown) = Chi : total:m47_16, partial:m48_6 -# 48| r48_8(glval>>) = VariableAddress[sp_const_sp_int] : -# 48| r48_9(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_10(void) = Call[~shared_ptr] : func:r48_9, this:r48_8 -# 48| v48_11(void) = ^IndirectReadSideEffect[-1] : &:r48_8, ~m47_16 -# 48| m48_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_8 -# 48| m48_13(unknown) = Chi : total:m48_7, partial:m48_12 -# 48| r48_14(glval>>) = VariableAddress[sp_sp_const_int] : -# 48| r48_15(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_16(void) = Call[~shared_ptr] : func:r48_15, this:r48_14 -# 48| v48_17(void) = ^IndirectReadSideEffect[-1] : &:r48_14, ~m47_16 -# 48| m48_18(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_14 -# 48| m48_19(unknown) = Chi : total:m48_13, partial:m48_18 -# 48| r48_20(glval>) = VariableAddress[sp_const_int_pointer] : -# 48| r48_21(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_22(void) = Call[~shared_ptr] : func:r48_21, this:r48_20 -# 48| v48_23(void) = ^IndirectReadSideEffect[-1] : &:r48_20, ~m47_16 -# 48| m48_24(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_20 -# 48| m48_25(unknown) = Chi : total:m48_19, partial:m48_24 -# 48| r48_26(glval>) = VariableAddress[sp_const_int] : -# 48| r48_27(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_28(void) = Call[~shared_ptr] : func:r48_27, this:r48_26 -# 48| v48_29(void) = ^IndirectReadSideEffect[-1] : &:r48_26, ~m47_16 -# 48| m48_30(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_26 -# 48| m48_31(unknown) = Chi : total:m48_25, partial:m48_30 -# 28| v28_5(void) = ReturnVoid : -# 28| v28_6(void) = AliasedUse : ~m47_16 -# 28| v28_7(void) = ExitFunction : +# 48| v48_5(void) = ^IndirectReadSideEffect[-1] : &:r48_2, ~m? +# 48| mu48_6(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_2 +# 48| r48_7(glval>>) = VariableAddress[sp_const_sp_int] : +# 48| r48_8(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_9(void) = Call[~shared_ptr] : func:r48_8, this:r48_7 +# 48| v48_10(void) = ^IndirectReadSideEffect[-1] : &:r48_7, ~m? +# 48| mu48_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_7 +# 48| r48_12(glval>>) = VariableAddress[sp_sp_const_int] : +# 48| r48_13(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_14(void) = Call[~shared_ptr] : func:r48_13, this:r48_12 +# 48| v48_15(void) = ^IndirectReadSideEffect[-1] : &:r48_12, ~m? +# 48| mu48_16(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_12 +# 48| r48_17(glval>) = VariableAddress[sp_const_int_pointer] : +# 48| r48_18(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_19(void) = Call[~shared_ptr] : func:r48_18, this:r48_17 +# 48| v48_20(void) = ^IndirectReadSideEffect[-1] : &:r48_17, ~m? +# 48| mu48_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_17 +# 48| r48_22(glval>) = VariableAddress[sp_const_int] : +# 48| r48_23(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_24(void) = Call[~shared_ptr] : func:r48_23, this:r48_22 +# 48| v48_25(void) = ^IndirectReadSideEffect[-1] : &:r48_22, ~m? +# 48| mu48_26(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_22 +# 28| v28_4(void) = ReturnVoid : +# 28| v28_5(void) = AliasedUse : ~m? +# 28| v28_6(void) = ExitFunction : struct_init.cpp: # 9| Info infos_in_file[] # 9| Block 0 # 9| v9_1(void) = EnterFunction : -# 9| m9_2(unknown) = AliasedDefinition : +# 9| mu9_2(unknown) = AliasedDefinition : # 9| r9_3(glval) = VariableAddress[infos_in_file] : # 9| r9_4(int) = Constant[0] : # 9| r9_5(glval) = PointerAdd[16] : r9_3, r9_4 # 10| r10_1(glval) = FieldAddress[name] : r9_5 # 10| r10_2(glval) = StringConstant["1"] : # 10| r10_3(char *) = Convert : r10_2 -# 10| m10_4(char *) = Store[?] : &:r10_1, r10_3 -# 10| m10_5(unknown) = Chi : total:m9_2, partial:m10_4 -# 10| r10_6(glval<..(*)(..)>) = FieldAddress[handler] : r9_5 -# 10| r10_7(..(*)(..)) = FunctionAddress[handler1] : -# 10| m10_8(..(*)(..)) = Store[?] : &:r10_6, r10_7 -# 10| m10_9(unknown) = Chi : total:m10_5, partial:m10_8 +# 10| mu10_4(char *) = Store[?] : &:r10_1, r10_3 +# 10| r10_5(glval<..(*)(..)>) = FieldAddress[handler] : r9_5 +# 10| r10_6(..(*)(..)) = FunctionAddress[handler1] : +# 10| mu10_7(..(*)(..)) = Store[?] : &:r10_5, r10_6 # 9| r9_6(int) = Constant[1] : # 9| r9_7(glval) = PointerAdd[16] : r9_3, r9_6 # 11| r11_1(glval) = FieldAddress[name] : r9_7 # 11| r11_2(glval) = StringConstant["3"] : # 11| r11_3(char *) = Convert : r11_2 -# 11| m11_4(char *) = Store[?] : &:r11_1, r11_3 -# 11| m11_5(unknown) = Chi : total:m10_9, partial:m11_4 -# 11| r11_6(glval<..(*)(..)>) = FieldAddress[handler] : r9_7 -# 11| r11_7(glval<..()(..)>) = FunctionAddress[handler2] : -# 11| r11_8(..(*)(..)) = CopyValue : r11_7 -# 11| m11_9(..(*)(..)) = Store[?] : &:r11_6, r11_8 -# 11| m11_10(unknown) = Chi : total:m11_5, partial:m11_9 +# 11| mu11_4(char *) = Store[?] : &:r11_1, r11_3 +# 11| r11_5(glval<..(*)(..)>) = FieldAddress[handler] : r9_7 +# 11| r11_6(glval<..()(..)>) = FunctionAddress[handler2] : +# 11| r11_7(..(*)(..)) = CopyValue : r11_6 +# 11| mu11_8(..(*)(..)) = Store[?] : &:r11_5, r11_7 # 9| v9_8(void) = ReturnVoid : -# 9| v9_9(void) = AliasedUse : ~m11_10 +# 9| v9_9(void) = AliasedUse : ~m? # 9| v9_10(void) = ExitFunction : # 16| void let_info_escape(Info*) # 16| Block 0 # 16| v16_1(void) = EnterFunction : -# 16| m16_2(unknown) = AliasedDefinition : -# 16| m16_3(unknown) = InitializeNonLocal : -# 16| m16_4(unknown) = Chi : total:m16_2, partial:m16_3 -# 16| r16_5(glval) = VariableAddress[info] : -# 16| m16_6(Info *) = InitializeParameter[info] : &:r16_5 -# 16| r16_7(Info *) = Load[info] : &:r16_5, m16_6 -# 16| m16_8(unknown) = InitializeIndirection[info] : &:r16_7 -# 16| m16_9(unknown) = Chi : total:m16_4, partial:m16_8 +# 16| mu16_2(unknown) = AliasedDefinition : +# 16| mu16_3(unknown) = InitializeNonLocal : +# 16| r16_4(glval) = VariableAddress[info] : +# 16| m16_5(Info *) = InitializeParameter[info] : &:r16_4 +# 16| r16_6(Info *) = Load[info] : &:r16_4, m16_5 +# 16| mu16_7(unknown) = InitializeIndirection[info] : &:r16_6 # 17| r17_1(glval) = VariableAddress[info] : -# 17| r17_2(Info *) = Load[info] : &:r17_1, m16_6 +# 17| r17_2(Info *) = Load[info] : &:r17_1, m16_5 # 17| r17_3(glval) = VariableAddress[global_pointer] : -# 17| m17_4(Info *) = Store[global_pointer] : &:r17_3, r17_2 -# 17| m17_5(unknown) = Chi : total:m16_9, partial:m17_4 +# 17| mu17_4(Info *) = Store[global_pointer] : &:r17_3, r17_2 # 18| v18_1(void) = NoOp : -# 16| v16_10(void) = ReturnIndirection[info] : &:r16_7, ~m17_5 -# 16| v16_11(void) = ReturnVoid : -# 16| v16_12(void) = AliasedUse : ~m17_5 -# 16| v16_13(void) = ExitFunction : +# 16| v16_8(void) = ReturnIndirection[info] : &:r16_6, ~m? +# 16| v16_9(void) = ReturnVoid : +# 16| v16_10(void) = AliasedUse : ~m? +# 16| v16_11(void) = ExitFunction : # 20| void declare_static_infos() # 20| Block 0 # 20| v20_1(void) = EnterFunction : -# 20| m20_2(unknown) = AliasedDefinition : -# 20| m20_3(unknown) = InitializeNonLocal : -# 20| m20_4(unknown) = Chi : total:m20_2, partial:m20_3 +# 20| mu20_2(unknown) = AliasedDefinition : +# 20| mu20_3(unknown) = InitializeNonLocal : # 25| r25_1(glval) = FunctionAddress[let_info_escape] : # 25| r25_2(glval) = VariableAddress[static_infos] : # 25| r25_3(Info *) = Convert : r25_2 # 25| v25_4(void) = Call[let_info_escape] : func:r25_1, 0:r25_3 -# 25| m25_5(unknown) = ^CallSideEffect : ~m20_4 -# 25| m25_6(unknown) = Chi : total:m20_4, partial:m25_5 -# 25| v25_7(void) = ^BufferReadSideEffect[0] : &:r25_3, ~m25_6 -# 25| m25_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r25_3 -# 25| m25_9(unknown) = Chi : total:m25_6, partial:m25_8 +# 25| mu25_5(unknown) = ^CallSideEffect : ~m? +# 25| v25_6(void) = ^BufferReadSideEffect[0] : &:r25_3, ~m? +# 25| mu25_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r25_3 # 26| v26_1(void) = NoOp : -# 20| v20_5(void) = ReturnVoid : -# 20| v20_6(void) = AliasedUse : ~m25_9 -# 20| v20_7(void) = ExitFunction : +# 20| v20_4(void) = ReturnVoid : +# 20| v20_5(void) = AliasedUse : ~m? +# 20| v20_6(void) = ExitFunction : # 21| Info[] static_infos # 21| Block 0 # 21| v21_1(void) = EnterFunction : -# 21| m21_2(unknown) = AliasedDefinition : +# 21| mu21_2(unknown) = AliasedDefinition : # 21| r21_3(glval) = VariableAddress[static_infos] : # 21| r21_4(int) = Constant[0] : # 21| r21_5(glval) = PointerAdd[16] : r21_3, r21_4 # 22| r22_1(glval) = FieldAddress[name] : r21_5 # 22| r22_2(glval) = StringConstant["1"] : # 22| r22_3(char *) = Convert : r22_2 -# 22| m22_4(char *) = Store[?] : &:r22_1, r22_3 -# 22| m22_5(unknown) = Chi : total:m21_2, partial:m22_4 -# 22| r22_6(glval<..(*)(..)>) = FieldAddress[handler] : r21_5 -# 22| r22_7(..(*)(..)) = FunctionAddress[handler1] : -# 22| m22_8(..(*)(..)) = Store[?] : &:r22_6, r22_7 -# 22| m22_9(unknown) = Chi : total:m22_5, partial:m22_8 +# 22| mu22_4(char *) = Store[?] : &:r22_1, r22_3 +# 22| r22_5(glval<..(*)(..)>) = FieldAddress[handler] : r21_5 +# 22| r22_6(..(*)(..)) = FunctionAddress[handler1] : +# 22| mu22_7(..(*)(..)) = Store[?] : &:r22_5, r22_6 # 21| r21_6(int) = Constant[1] : # 21| r21_7(glval) = PointerAdd[16] : r21_3, r21_6 # 23| r23_1(glval) = FieldAddress[name] : r21_7 # 23| r23_2(glval) = StringConstant["2"] : # 23| r23_3(char *) = Convert : r23_2 -# 23| m23_4(char *) = Store[?] : &:r23_1, r23_3 -# 23| m23_5(unknown) = Chi : total:m22_9, partial:m23_4 -# 23| r23_6(glval<..(*)(..)>) = FieldAddress[handler] : r21_7 -# 23| r23_7(glval<..()(..)>) = FunctionAddress[handler2] : -# 23| r23_8(..(*)(..)) = CopyValue : r23_7 -# 23| m23_9(..(*)(..)) = Store[?] : &:r23_6, r23_8 -# 23| m23_10(unknown) = Chi : total:m23_5, partial:m23_9 +# 23| mu23_4(char *) = Store[?] : &:r23_1, r23_3 +# 23| r23_5(glval<..(*)(..)>) = FieldAddress[handler] : r21_7 +# 23| r23_6(glval<..()(..)>) = FunctionAddress[handler2] : +# 23| r23_7(..(*)(..)) = CopyValue : r23_6 +# 23| mu23_8(..(*)(..)) = Store[?] : &:r23_5, r23_7 # 21| v21_8(void) = ReturnVoid : -# 21| v21_9(void) = AliasedUse : ~m23_10 +# 21| v21_9(void) = AliasedUse : ~m? # 21| v21_10(void) = ExitFunction : # 28| void declare_local_infos() # 28| Block 0 # 28| v28_1(void) = EnterFunction : -# 28| m28_2(unknown) = AliasedDefinition : -# 28| m28_3(unknown) = InitializeNonLocal : -# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 +# 28| mu28_2(unknown) = AliasedDefinition : +# 28| mu28_3(unknown) = InitializeNonLocal : # 29| r29_1(glval) = VariableAddress[local_infos] : -# 29| m29_2(Info[2]) = Uninitialized[local_infos] : &:r29_1 -# 29| m29_3(unknown) = Chi : total:m28_4, partial:m29_2 -# 29| r29_4(int) = Constant[0] : -# 29| r29_5(glval) = PointerAdd[16] : r29_1, r29_4 -# 30| r30_1(glval) = FieldAddress[name] : r29_5 +# 29| mu29_2(Info[2]) = Uninitialized[local_infos] : &:r29_1 +# 29| r29_3(int) = Constant[0] : +# 29| r29_4(glval) = PointerAdd[16] : r29_1, r29_3 +# 30| r30_1(glval) = FieldAddress[name] : r29_4 # 30| r30_2(glval) = StringConstant["1"] : # 30| r30_3(char *) = Convert : r30_2 -# 30| m30_4(char *) = Store[?] : &:r30_1, r30_3 -# 30| m30_5(unknown) = Chi : total:m29_3, partial:m30_4 -# 30| r30_6(glval<..(*)(..)>) = FieldAddress[handler] : r29_5 -# 30| r30_7(..(*)(..)) = FunctionAddress[handler1] : -# 30| m30_8(..(*)(..)) = Store[?] : &:r30_6, r30_7 -# 30| m30_9(unknown) = Chi : total:m30_5, partial:m30_8 -# 29| r29_6(int) = Constant[1] : -# 29| r29_7(glval) = PointerAdd[16] : r29_1, r29_6 -# 31| r31_1(glval) = FieldAddress[name] : r29_7 +# 30| mu30_4(char *) = Store[?] : &:r30_1, r30_3 +# 30| r30_5(glval<..(*)(..)>) = FieldAddress[handler] : r29_4 +# 30| r30_6(..(*)(..)) = FunctionAddress[handler1] : +# 30| mu30_7(..(*)(..)) = Store[?] : &:r30_5, r30_6 +# 29| r29_5(int) = Constant[1] : +# 29| r29_6(glval) = PointerAdd[16] : r29_1, r29_5 +# 31| r31_1(glval) = FieldAddress[name] : r29_6 # 31| r31_2(glval) = StringConstant["2"] : # 31| r31_3(char *) = Convert : r31_2 -# 31| m31_4(char *) = Store[?] : &:r31_1, r31_3 -# 31| m31_5(unknown) = Chi : total:m30_9, partial:m31_4 -# 31| r31_6(glval<..(*)(..)>) = FieldAddress[handler] : r29_7 -# 31| r31_7(glval<..()(..)>) = FunctionAddress[handler2] : -# 31| r31_8(..(*)(..)) = CopyValue : r31_7 -# 31| m31_9(..(*)(..)) = Store[?] : &:r31_6, r31_8 -# 31| m31_10(unknown) = Chi : total:m31_5, partial:m31_9 +# 31| mu31_4(char *) = Store[?] : &:r31_1, r31_3 +# 31| r31_5(glval<..(*)(..)>) = FieldAddress[handler] : r29_6 +# 31| r31_6(glval<..()(..)>) = FunctionAddress[handler2] : +# 31| r31_7(..(*)(..)) = CopyValue : r31_6 +# 31| mu31_8(..(*)(..)) = Store[?] : &:r31_5, r31_7 # 33| r33_1(glval) = FunctionAddress[let_info_escape] : # 33| r33_2(glval) = VariableAddress[local_infos] : # 33| r33_3(Info *) = Convert : r33_2 # 33| v33_4(void) = Call[let_info_escape] : func:r33_1, 0:r33_3 -# 33| m33_5(unknown) = ^CallSideEffect : ~m31_10 -# 33| m33_6(unknown) = Chi : total:m31_10, partial:m33_5 -# 33| v33_7(void) = ^BufferReadSideEffect[0] : &:r33_3, ~m33_6 -# 33| m33_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r33_3 -# 33| m33_9(unknown) = Chi : total:m33_6, partial:m33_8 +# 33| mu33_5(unknown) = ^CallSideEffect : ~m? +# 33| v33_6(void) = ^BufferReadSideEffect[0] : &:r33_3, ~m? +# 33| mu33_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r33_3 # 34| v34_1(void) = NoOp : -# 28| v28_5(void) = ReturnVoid : -# 28| v28_6(void) = AliasedUse : ~m33_6 -# 28| v28_7(void) = ExitFunction : +# 28| v28_4(void) = ReturnVoid : +# 28| v28_5(void) = AliasedUse : ~m? +# 28| v28_6(void) = ExitFunction : # 36| void declare_static_runtime_infos(char const*) # 36| Block 0 # 36| v36_1(void) = EnterFunction : -# 36| m36_2(unknown) = AliasedDefinition : -# 36| m36_3(unknown) = InitializeNonLocal : -# 36| m36_4(unknown) = Chi : total:m36_2, partial:m36_3 -# 36| r36_5(glval) = VariableAddress[name1] : -# 36| m36_6(char *) = InitializeParameter[name1] : &:r36_5 -# 36| r36_7(char *) = Load[name1] : &:r36_5, m36_6 -# 36| m36_8(unknown) = InitializeIndirection[name1] : &:r36_7 -# 36| m36_9(unknown) = Chi : total:m36_4, partial:m36_8 +# 36| mu36_2(unknown) = AliasedDefinition : +# 36| mu36_3(unknown) = InitializeNonLocal : +# 36| r36_4(glval) = VariableAddress[name1] : +# 36| m36_5(char *) = InitializeParameter[name1] : &:r36_4 +# 36| r36_6(char *) = Load[name1] : &:r36_4, m36_5 +# 36| mu36_7(unknown) = InitializeIndirection[name1] : &:r36_6 # 37| r37_1(glval) = VariableAddress[static_infos#init] : -# 37| r37_2(bool) = Load[static_infos#init] : &:r37_1, ~m36_3 +# 37| r37_2(bool) = Load[static_infos#init] : &:r37_1, ~m? # 37| v37_3(void) = ConditionalBranch : r37_2 #-----| False -> Block 1 #-----| True -> Block 2 @@ -40138,54 +38119,45 @@ struct_init.cpp: # 37| r37_6(glval) = PointerAdd[16] : r37_4, r37_5 # 38| r38_1(glval) = FieldAddress[name] : r37_6 # 38| r38_2(glval) = VariableAddress[name1] : -# 38| r38_3(char *) = Load[name1] : &:r38_2, m36_6 -# 38| m38_4(char *) = Store[?] : &:r38_1, r38_3 -# 38| m38_5(unknown) = Chi : total:m36_9, partial:m38_4 -# 38| r38_6(glval<..(*)(..)>) = FieldAddress[handler] : r37_6 -# 38| r38_7(..(*)(..)) = FunctionAddress[handler1] : -# 38| m38_8(..(*)(..)) = Store[?] : &:r38_6, r38_7 -# 38| m38_9(unknown) = Chi : total:m38_5, partial:m38_8 +# 38| r38_3(char *) = Load[name1] : &:r38_2, m36_5 +# 38| mu38_4(char *) = Store[?] : &:r38_1, r38_3 +# 38| r38_5(glval<..(*)(..)>) = FieldAddress[handler] : r37_6 +# 38| r38_6(..(*)(..)) = FunctionAddress[handler1] : +# 38| mu38_7(..(*)(..)) = Store[?] : &:r38_5, r38_6 # 37| r37_7(int) = Constant[1] : # 37| r37_8(glval) = PointerAdd[16] : r37_4, r37_7 # 39| r39_1(glval) = FieldAddress[name] : r37_8 # 39| r39_2(glval) = StringConstant["2"] : # 39| r39_3(char *) = Convert : r39_2 -# 39| m39_4(char *) = Store[?] : &:r39_1, r39_3 -# 39| m39_5(unknown) = Chi : total:m38_9, partial:m39_4 -# 39| r39_6(glval<..(*)(..)>) = FieldAddress[handler] : r37_8 -# 39| r39_7(glval<..()(..)>) = FunctionAddress[handler2] : -# 39| r39_8(..(*)(..)) = CopyValue : r39_7 -# 39| m39_9(..(*)(..)) = Store[?] : &:r39_6, r39_8 -# 39| m39_10(unknown) = Chi : total:m39_5, partial:m39_9 +# 39| mu39_4(char *) = Store[?] : &:r39_1, r39_3 +# 39| r39_5(glval<..(*)(..)>) = FieldAddress[handler] : r37_8 +# 39| r39_6(glval<..()(..)>) = FunctionAddress[handler2] : +# 39| r39_7(..(*)(..)) = CopyValue : r39_6 +# 39| mu39_8(..(*)(..)) = Store[?] : &:r39_5, r39_7 # 37| r37_9(bool) = Constant[1] : -# 37| m37_10(bool) = Store[static_infos#init] : &:r37_1, r37_9 -# 37| m37_11(unknown) = Chi : total:m39_10, partial:m37_10 +# 37| mu37_10(bool) = Store[static_infos#init] : &:r37_1, r37_9 #-----| Goto -> Block 2 # 41| Block 2 -# 41| m41_1(unknown) = Phi : from 0:~m36_9, from 1:~m37_11 -# 41| r41_2(glval) = FunctionAddress[let_info_escape] : -# 41| r41_3(glval) = VariableAddress[static_infos] : -# 41| r41_4(Info *) = Convert : r41_3 -# 41| v41_5(void) = Call[let_info_escape] : func:r41_2, 0:r41_4 -# 41| m41_6(unknown) = ^CallSideEffect : ~m41_1 -# 41| m41_7(unknown) = Chi : total:m41_1, partial:m41_6 -# 41| v41_8(void) = ^BufferReadSideEffect[0] : &:r41_4, ~m41_7 -# 41| m41_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r41_4 -# 41| m41_10(unknown) = Chi : total:m41_7, partial:m41_9 +# 41| r41_1(glval) = FunctionAddress[let_info_escape] : +# 41| r41_2(glval) = VariableAddress[static_infos] : +# 41| r41_3(Info *) = Convert : r41_2 +# 41| v41_4(void) = Call[let_info_escape] : func:r41_1, 0:r41_3 +# 41| mu41_5(unknown) = ^CallSideEffect : ~m? +# 41| v41_6(void) = ^BufferReadSideEffect[0] : &:r41_3, ~m? +# 41| mu41_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r41_3 # 42| v42_1(void) = NoOp : -# 36| v36_10(void) = ReturnIndirection[name1] : &:r36_7, ~m41_10 -# 36| v36_11(void) = ReturnVoid : -# 36| v36_12(void) = AliasedUse : ~m41_10 -# 36| v36_13(void) = ExitFunction : +# 36| v36_8(void) = ReturnIndirection[name1] : &:r36_6, ~m? +# 36| v36_9(void) = ReturnVoid : +# 36| v36_10(void) = AliasedUse : ~m? +# 36| v36_11(void) = ExitFunction : try_except.c: # 6| void f() # 6| Block 0 # 6| v6_1(void) = EnterFunction : -# 6| m6_2(unknown) = AliasedDefinition : -# 6| m6_3(unknown) = InitializeNonLocal : -# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 +# 6| mu6_2(unknown) = AliasedDefinition : +# 6| mu6_3(unknown) = InitializeNonLocal : # 7| r7_1(glval) = VariableAddress[x] : # 7| m7_2(int) = Uninitialized[x] : &:r7_1 # 7| r7_3(glval) = VariableAddress[y] : @@ -40194,18 +38166,16 @@ try_except.c: # 9| r9_1(glval) = FunctionAddress[ProbeFunction] : # 9| r9_2(int) = Constant[0] : # 9| v9_3(void) = Call[ProbeFunction] : func:r9_1, 0:r9_2 -# 9| m9_4(unknown) = ^CallSideEffect : ~m6_4 -# 9| m9_5(unknown) = Chi : total:m6_4, partial:m9_4 +# 9| mu9_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 3 #-----| SEH Exception -> Block 5 # 6| Block 1 -# 6| m6_5(unknown) = Phi : from 2:~m13_4, from 6:~m11_5 -# 6| v6_6(void) = AliasedUse : ~m6_5 -# 6| v6_7(void) = ExitFunction : +# 6| v6_4(void) = AliasedUse : ~m? +# 6| v6_5(void) = ExitFunction : # 6| Block 2 -# 6| v6_8(void) = Unwind : +# 6| v6_6(void) = Unwind : #-----| Goto -> Block 1 # 10| Block 3 @@ -40216,41 +38186,38 @@ try_except.c: # 11| r11_1(glval) = FunctionAddress[ProbeFunction] : # 11| r11_2(int) = Constant[0] : # 11| v11_3(void) = Call[ProbeFunction] : func:r11_1, 0:r11_2 -# 11| m11_4(unknown) = ^CallSideEffect : ~m9_5 -# 11| m11_5(unknown) = Chi : total:m9_5, partial:m11_4 +# 11| mu11_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 #-----| SEH Exception -> Block 5 # 13| Block 4 # 13| r13_1(int) = Constant[0] : -# 13| r13_2(bool) = CompareEQ : r13_5, r13_1 +# 13| r13_2(bool) = CompareEQ : r13_4, r13_1 # 13| v13_3(void) = ConditionalBranch : r13_2 #-----| False -> Block 7 #-----| True -> Block 2 # 13| Block 5 -# 13| m13_4(unknown) = Phi : from 0:~m9_5, from 3:~m11_5 -# 13| r13_5(int) = Constant[0] : -# 13| r13_6(int) = Constant[-1] : -# 13| r13_7(bool) = CompareEQ : r13_5, r13_6 -# 13| v13_8(void) = ConditionalBranch : r13_7 +# 13| r13_4(int) = Constant[0] : +# 13| r13_5(int) = Constant[-1] : +# 13| r13_6(bool) = CompareEQ : r13_4, r13_5 +# 13| v13_7(void) = ConditionalBranch : r13_6 #-----| False -> Block 4 #-----| True -> Block 7 # 16| Block 6 # 16| v16_1(void) = NoOp : -# 6| v6_9(void) = ReturnVoid : +# 6| v6_7(void) = ReturnVoid : #-----| Goto -> Block 1 # 6| Block 7 -# 6| v6_10(void) = Unreached : +# 6| v6_8(void) = Unreached : # 18| void g() # 18| Block 0 # 18| v18_1(void) = EnterFunction : -# 18| m18_2(unknown) = AliasedDefinition : -# 18| m18_3(unknown) = InitializeNonLocal : -# 18| m18_4(unknown) = Chi : total:m18_2, partial:m18_3 +# 18| mu18_2(unknown) = AliasedDefinition : +# 18| mu18_3(unknown) = InitializeNonLocal : # 19| r19_1(glval) = VariableAddress[x] : # 19| m19_2(int) = Uninitialized[x] : &:r19_1 # 19| r19_3(glval) = VariableAddress[y] : @@ -40259,8 +38226,7 @@ try_except.c: # 21| r21_1(glval) = FunctionAddress[ProbeFunction] : # 21| r21_2(int) = Constant[0] : # 21| v21_3(void) = Call[ProbeFunction] : func:r21_1, 0:r21_2 -# 21| m21_4(unknown) = ^CallSideEffect : ~m18_4 -# 21| m21_5(unknown) = Chi : total:m18_4, partial:m21_4 +# 21| mu21_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 1 #-----| SEH Exception -> Block 2 @@ -40272,37 +38238,33 @@ try_except.c: # 23| r23_1(glval) = FunctionAddress[ProbeFunction] : # 23| r23_2(int) = Constant[0] : # 23| v23_3(void) = Call[ProbeFunction] : func:r23_1, 0:r23_2 -# 23| m23_4(unknown) = ^CallSideEffect : ~m21_5 -# 23| m23_5(unknown) = Chi : total:m21_5, partial:m23_4 +# 23| mu23_4(unknown) = ^CallSideEffect : ~m? #-----| Goto|SEH Exception -> Block 2 # 26| Block 2 -# 26| m26_1(unknown) = Phi : from 0:~m21_5, from 1:~m23_5 -# 26| m26_2(int) = Phi : from 0:m19_2, from 1:m22_4 -# 26| r26_3(glval) = FunctionAddress[sink] : -# 26| r26_4(glval) = VariableAddress[x] : -# 26| r26_5(int) = Load[x] : &:r26_4, m26_2 -# 26| v26_6(void) = Call[sink] : func:r26_3, 0:r26_5 -# 26| m26_7(unknown) = ^CallSideEffect : ~m26_1 -# 26| m26_8(unknown) = Chi : total:m26_1, partial:m26_7 +# 26| m26_1(int) = Phi : from 0:m19_2, from 1:m22_4 +# 26| r26_2(glval) = FunctionAddress[sink] : +# 26| r26_3(glval) = VariableAddress[x] : +# 26| r26_4(int) = Load[x] : &:r26_3, m26_1 +# 26| v26_5(void) = Call[sink] : func:r26_2, 0:r26_4 +# 26| mu26_6(unknown) = ^CallSideEffect : ~m? # 28| v28_1(void) = NoOp : -# 18| v18_5(void) = ReturnVoid : -# 18| v18_6(void) = AliasedUse : ~m26_8 -# 18| v18_7(void) = ExitFunction : +# 18| v18_4(void) = ReturnVoid : +# 18| v18_5(void) = AliasedUse : ~m? +# 18| v18_6(void) = ExitFunction : # 32| void h(int) # 32| Block 0 # 32| v32_1(void) = EnterFunction : -# 32| m32_2(unknown) = AliasedDefinition : -# 32| m32_3(unknown) = InitializeNonLocal : -# 32| m32_4(unknown) = Chi : total:m32_2, partial:m32_3 -# 32| r32_5(glval) = VariableAddress[b] : -# 32| m32_6(int) = InitializeParameter[b] : &:r32_5 +# 32| mu32_2(unknown) = AliasedDefinition : +# 32| mu32_3(unknown) = InitializeNonLocal : +# 32| r32_4(glval) = VariableAddress[b] : +# 32| m32_5(int) = InitializeParameter[b] : &:r32_4 # 33| r33_1(glval) = VariableAddress[x] : # 33| r33_2(int) = Constant[0] : # 33| m33_3(int) = Store[x] : &:r33_1, r33_2 # 35| r35_1(glval) = VariableAddress[b] : -# 35| r35_2(int) = Load[b] : &:r35_1, m32_6 +# 35| r35_2(int) = Load[b] : &:r35_1, m32_5 # 35| r35_3(int) = Constant[0] : # 35| r35_4(bool) = CompareNE : r35_2, r35_3 # 35| v35_5(void) = ConditionalBranch : r35_4 @@ -40312,8 +38274,7 @@ try_except.c: # 36| Block 1 # 36| r36_1(glval) = FunctionAddress[AfxThrowMemoryException] : # 36| v36_2(void) = Call[AfxThrowMemoryException] : func:r36_1 -# 36| m36_3(unknown) = ^CallSideEffect : ~m32_4 -# 36| m36_4(unknown) = Chi : total:m32_4, partial:m36_3 +# 36| mu36_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 #-----| SEH Exception -> Block 4 @@ -40344,41 +38305,37 @@ try_except.c: # 40| r40_2(glval) = VariableAddress[x] : # 40| r40_3(int) = Load[x] : &:r40_2, m33_3 # 40| v40_4(void) = Call[sink] : func:r40_1, 0:r40_3 -# 40| m40_5(unknown) = ^CallSideEffect : ~m36_4 -# 40| m40_6(unknown) = Chi : total:m36_4, partial:m40_5 +# 40| mu40_5(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 # 42| Block 6 -# 42| m42_1(unknown) = Phi : from 0:~m32_4, from 1:~m36_4, from 5:~m40_6 -# 42| v42_2(void) = NoOp : -# 32| v32_7(void) = ReturnVoid : -# 32| v32_8(void) = AliasedUse : ~m42_1 -# 32| v32_9(void) = ExitFunction : +# 42| v42_1(void) = NoOp : +# 32| v32_6(void) = ReturnVoid : +# 32| v32_7(void) = AliasedUse : ~m? +# 32| v32_8(void) = ExitFunction : # 32| Block 7 -# 32| v32_10(void) = Unreached : +# 32| v32_9(void) = Unreached : # 46| void j(int) # 46| Block 0 # 46| v46_1(void) = EnterFunction : -# 46| m46_2(unknown) = AliasedDefinition : -# 46| m46_3(unknown) = InitializeNonLocal : -# 46| m46_4(unknown) = Chi : total:m46_2, partial:m46_3 -# 46| r46_5(glval) = VariableAddress[b] : -# 46| m46_6(int) = InitializeParameter[b] : &:r46_5 +# 46| mu46_2(unknown) = AliasedDefinition : +# 46| mu46_3(unknown) = InitializeNonLocal : +# 46| r46_4(glval) = VariableAddress[b] : +# 46| m46_5(int) = InitializeParameter[b] : &:r46_4 # 47| r47_1(glval) = VariableAddress[x] : # 47| r47_2(int) = Constant[0] : # 47| m47_3(int) = Store[x] : &:r47_1, r47_2 # 49| r49_1(glval) = VariableAddress[y] : # 49| r49_2(glval) = FunctionAddress[i] : # 49| r49_3(int) = Call[i] : func:r49_2 -# 49| m49_4(unknown) = ^CallSideEffect : ~m46_4 -# 49| m49_5(unknown) = Chi : total:m46_4, partial:m49_4 +# 49| mu49_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 1 #-----| SEH Exception -> Block 4 # 49| Block 1 -# 49| m49_6(int) = Store[y] : &:r49_1, r49_3 +# 49| m49_5(int) = Store[y] : &:r49_1, r49_3 #-----| Goto -> Block 6 # 51| Block 2 @@ -40408,44 +38365,41 @@ try_except.c: # 52| r52_2(glval) = VariableAddress[x] : # 52| r52_3(int) = Load[x] : &:r52_2, m47_3 # 52| v52_4(void) = Call[sink] : func:r52_1, 0:r52_3 -# 52| m52_5(unknown) = ^CallSideEffect : ~m49_5 -# 52| m52_6(unknown) = Chi : total:m49_5, partial:m52_5 +# 52| mu52_5(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 # 54| Block 6 -# 54| m54_1(unknown) = Phi : from 1:~m49_5, from 5:~m52_6 -# 54| v54_2(void) = NoOp : -# 46| v46_7(void) = ReturnVoid : -# 46| v46_8(void) = AliasedUse : ~m54_1 -# 46| v46_9(void) = ExitFunction : +# 54| v54_1(void) = NoOp : +# 46| v46_6(void) = ReturnVoid : +# 46| v46_7(void) = AliasedUse : ~m? +# 46| v46_8(void) = ExitFunction : # 46| Block 7 -# 46| v46_10(void) = Unreached : +# 46| v46_9(void) = Unreached : # 56| void k(int*, int*, int*) # 56| Block 0 # 56| v56_1(void) = EnterFunction : -# 56| m56_2(unknown) = AliasedDefinition : -# 56| m56_3(unknown) = InitializeNonLocal : -# 56| m56_4(unknown) = Chi : total:m56_2, partial:m56_3 -# 56| r56_5(glval) = VariableAddress[b] : -# 56| m56_6(int *) = InitializeParameter[b] : &:r56_5 -# 56| r56_7(int *) = Load[b] : &:r56_5, m56_6 -# 56| m56_8(unknown) = InitializeIndirection[b] : &:r56_7 -# 56| r56_9(glval) = VariableAddress[c] : -# 56| m56_10(int *) = InitializeParameter[c] : &:r56_9 -# 56| r56_11(int *) = Load[c] : &:r56_9, m56_10 -# 56| m56_12(unknown) = InitializeIndirection[c] : &:r56_11 -# 56| r56_13(glval) = VariableAddress[d] : -# 56| m56_14(int *) = InitializeParameter[d] : &:r56_13 -# 56| r56_15(int *) = Load[d] : &:r56_13, m56_14 -# 56| m56_16(unknown) = InitializeIndirection[d] : &:r56_15 +# 56| mu56_2(unknown) = AliasedDefinition : +# 56| mu56_3(unknown) = InitializeNonLocal : +# 56| r56_4(glval) = VariableAddress[b] : +# 56| m56_5(int *) = InitializeParameter[b] : &:r56_4 +# 56| r56_6(int *) = Load[b] : &:r56_4, m56_5 +# 56| mu56_7(unknown) = InitializeIndirection[b] : &:r56_6 +# 56| r56_8(glval) = VariableAddress[c] : +# 56| m56_9(int *) = InitializeParameter[c] : &:r56_8 +# 56| r56_10(int *) = Load[c] : &:r56_8, m56_9 +# 56| mu56_11(unknown) = InitializeIndirection[c] : &:r56_10 +# 56| r56_12(glval) = VariableAddress[d] : +# 56| m56_13(int *) = InitializeParameter[d] : &:r56_12 +# 56| r56_14(int *) = Load[d] : &:r56_12, m56_13 +# 56| mu56_15(unknown) = InitializeIndirection[d] : &:r56_14 # 57| r57_1(glval) = VariableAddress[x] : # 57| r57_2(int) = Constant[0] : # 57| m57_3(int) = Store[x] : &:r57_1, r57_2 # 59| r59_1(glval) = VariableAddress[b] : -# 59| r59_2(int *) = Load[b] : &:r59_1, m56_6 -# 59| r59_3(int) = Load[?] : &:r59_2, ~m56_8 +# 59| r59_2(int *) = Load[b] : &:r59_1, m56_5 +# 59| r59_3(int) = Load[?] : &:r59_2, ~m? #-----| Goto -> Block 1 #-----| SEH Exception -> Block 6 @@ -40455,18 +38409,17 @@ try_except.c: # 60| r60_1(glval) = VariableAddress[x] : # 60| r60_2(int) = Load[x] : &:r60_1, m59_5 # 60| r60_3(glval) = VariableAddress[c] : -# 60| r60_4(int *) = Load[c] : &:r60_3, m56_10 +# 60| r60_4(int *) = Load[c] : &:r60_3, m56_9 # 60| r60_5(glval) = CopyValue : r60_4 -# 60| m60_6(int) = Store[?] : &:r60_5, r60_2 -# 60| m60_7(unknown) = Chi : total:m56_12, partial:m60_6 +# 60| mu60_6(int) = Store[?] : &:r60_5, r60_2 #-----| Goto -> Block 2 #-----| SEH Exception -> Block 6 # 61| Block 2 # 61| r61_1(glval) = VariableAddress[y] : # 61| r61_2(glval) = VariableAddress[d] : -# 61| r61_3(int *) = Load[d] : &:r61_2, m56_14 -# 61| r61_4(int) = Load[?] : &:r61_3, ~m56_16 +# 61| r61_3(int *) = Load[d] : &:r61_2, m56_13 +# 61| r61_4(int) = Load[?] : &:r61_3, ~m? #-----| Goto -> Block 3 #-----| SEH Exception -> Block 6 @@ -40476,58 +38429,53 @@ try_except.c: # 63| Block 4 # 63| r63_1(int) = Constant[0] : -# 63| r63_2(bool) = CompareEQ : r63_9, r63_1 +# 63| r63_2(bool) = CompareEQ : r63_8, r63_1 # 63| v63_3(void) = ConditionalBranch : r63_2 #-----| False -> Block 5 #-----| True -> Block 9 # 63| Block 5 # 63| r63_4(int) = Constant[1] : -# 63| r63_5(bool) = CompareEQ : r63_9, r63_4 +# 63| r63_5(bool) = CompareEQ : r63_8, r63_4 # 63| v63_6(void) = ConditionalBranch : r63_5 #-----| False -> Block 9 #-----| True -> Block 7 # 63| Block 6 -# 63| m63_7(unknown) = Phi : from 0:m56_12, from 1:m60_7, from 2:m60_7 -# 63| m63_8(int) = Phi : from 0:m57_3, from 1:m59_5, from 2:m59_5 -# 63| r63_9(int) = Constant[1] : -# 63| r63_10(int) = Constant[-1] : -# 63| r63_11(bool) = CompareEQ : r63_9, r63_10 -# 63| v63_12(void) = ConditionalBranch : r63_11 +# 63| m63_7(int) = Phi : from 0:m57_3, from 1:m59_5, from 2:m59_5 +# 63| r63_8(int) = Constant[1] : +# 63| r63_9(int) = Constant[-1] : +# 63| r63_10(bool) = CompareEQ : r63_8, r63_9 +# 63| v63_11(void) = ConditionalBranch : r63_10 #-----| False -> Block 4 #-----| True -> Block 9 # 64| Block 7 # 64| r64_1(glval) = FunctionAddress[sink] : # 64| r64_2(glval) = VariableAddress[x] : -# 64| r64_3(int) = Load[x] : &:r64_2, m63_8 +# 64| r64_3(int) = Load[x] : &:r64_2, m63_7 # 64| v64_4(void) = Call[sink] : func:r64_1, 0:r64_3 -# 64| m64_5(unknown) = ^CallSideEffect : ~m56_4 -# 64| m64_6(unknown) = Chi : total:m56_4, partial:m64_5 +# 64| mu64_5(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 8 # 66| Block 8 -# 66| m66_1(unknown) = Phi : from 3:m60_7, from 7:m63_7 -# 66| m66_2(unknown) = Phi : from 3:~m56_4, from 7:~m64_6 -# 66| v66_3(void) = NoOp : -# 56| v56_17(void) = ReturnIndirection[b] : &:r56_7, m56_8 -# 56| v56_18(void) = ReturnIndirection[c] : &:r56_11, m66_1 -# 56| v56_19(void) = ReturnIndirection[d] : &:r56_15, m56_16 -# 56| v56_20(void) = ReturnVoid : -# 56| v56_21(void) = AliasedUse : ~m66_2 -# 56| v56_22(void) = ExitFunction : +# 66| v66_1(void) = NoOp : +# 56| v56_16(void) = ReturnIndirection[b] : &:r56_6, ~m? +# 56| v56_17(void) = ReturnIndirection[c] : &:r56_10, ~m? +# 56| v56_18(void) = ReturnIndirection[d] : &:r56_14, ~m? +# 56| v56_19(void) = ReturnVoid : +# 56| v56_20(void) = AliasedUse : ~m? +# 56| v56_21(void) = ExitFunction : # 56| Block 9 -# 56| v56_23(void) = Unreached : +# 56| v56_22(void) = Unreached : try_except.cpp: # 6| void f_cpp() # 6| Block 0 # 6| v6_1(void) = EnterFunction : -# 6| m6_2(unknown) = AliasedDefinition : -# 6| m6_3(unknown) = InitializeNonLocal : -# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 +# 6| mu6_2(unknown) = AliasedDefinition : +# 6| mu6_3(unknown) = InitializeNonLocal : # 7| r7_1(glval) = VariableAddress[x] : # 7| m7_2(int) = Uninitialized[x] : &:r7_1 # 7| r7_3(glval) = VariableAddress[y] : @@ -40536,18 +38484,16 @@ try_except.cpp: # 9| r9_1(glval) = FunctionAddress[ProbeFunction] : # 9| r9_2(int) = Constant[0] : # 9| v9_3(void) = Call[ProbeFunction] : func:r9_1, 0:r9_2 -# 9| m9_4(unknown) = ^CallSideEffect : ~m6_4 -# 9| m9_5(unknown) = Chi : total:m6_4, partial:m9_4 +# 9| mu9_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 3 #-----| SEH Exception -> Block 5 # 6| Block 1 -# 6| m6_5(unknown) = Phi : from 2:~m13_4, from 6:~m11_5 -# 6| v6_6(void) = AliasedUse : ~m6_5 -# 6| v6_7(void) = ExitFunction : +# 6| v6_4(void) = AliasedUse : ~m? +# 6| v6_5(void) = ExitFunction : # 6| Block 2 -# 6| v6_8(void) = Unwind : +# 6| v6_6(void) = Unwind : #-----| Goto -> Block 1 # 10| Block 3 @@ -40558,41 +38504,38 @@ try_except.cpp: # 11| r11_1(glval) = FunctionAddress[ProbeFunction] : # 11| r11_2(int) = Constant[0] : # 11| v11_3(void) = Call[ProbeFunction] : func:r11_1, 0:r11_2 -# 11| m11_4(unknown) = ^CallSideEffect : ~m9_5 -# 11| m11_5(unknown) = Chi : total:m9_5, partial:m11_4 +# 11| mu11_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 #-----| SEH Exception -> Block 5 # 13| Block 4 # 13| r13_1(int) = Constant[0] : -# 13| r13_2(bool) = CompareEQ : r13_5, r13_1 +# 13| r13_2(bool) = CompareEQ : r13_4, r13_1 # 13| v13_3(void) = ConditionalBranch : r13_2 #-----| False -> Block 7 #-----| True -> Block 2 # 13| Block 5 -# 13| m13_4(unknown) = Phi : from 0:~m9_5, from 3:~m11_5 -# 13| r13_5(int) = Constant[0] : -# 13| r13_6(int) = Constant[-1] : -# 13| r13_7(bool) = CompareEQ : r13_5, r13_6 -# 13| v13_8(void) = ConditionalBranch : r13_7 +# 13| r13_4(int) = Constant[0] : +# 13| r13_5(int) = Constant[-1] : +# 13| r13_6(bool) = CompareEQ : r13_4, r13_5 +# 13| v13_7(void) = ConditionalBranch : r13_6 #-----| False -> Block 4 #-----| True -> Block 7 # 16| Block 6 # 16| v16_1(void) = NoOp : -# 6| v6_9(void) = ReturnVoid : +# 6| v6_7(void) = ReturnVoid : #-----| Goto -> Block 1 # 6| Block 7 -# 6| v6_10(void) = Unreached : +# 6| v6_8(void) = Unreached : # 18| void g_cpp() # 18| Block 0 # 18| v18_1(void) = EnterFunction : -# 18| m18_2(unknown) = AliasedDefinition : -# 18| m18_3(unknown) = InitializeNonLocal : -# 18| m18_4(unknown) = Chi : total:m18_2, partial:m18_3 +# 18| mu18_2(unknown) = AliasedDefinition : +# 18| mu18_3(unknown) = InitializeNonLocal : # 19| r19_1(glval) = VariableAddress[x] : # 19| m19_2(int) = Uninitialized[x] : &:r19_1 # 19| r19_3(glval) = VariableAddress[y] : @@ -40601,8 +38544,7 @@ try_except.cpp: # 21| r21_1(glval) = FunctionAddress[ProbeFunction] : # 21| r21_2(int) = Constant[0] : # 21| v21_3(void) = Call[ProbeFunction] : func:r21_1, 0:r21_2 -# 21| m21_4(unknown) = ^CallSideEffect : ~m18_4 -# 21| m21_5(unknown) = Chi : total:m18_4, partial:m21_4 +# 21| mu21_4(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 1 #-----| SEH Exception -> Block 2 @@ -40614,37 +38556,33 @@ try_except.cpp: # 23| r23_1(glval) = FunctionAddress[ProbeFunction] : # 23| r23_2(int) = Constant[0] : # 23| v23_3(void) = Call[ProbeFunction] : func:r23_1, 0:r23_2 -# 23| m23_4(unknown) = ^CallSideEffect : ~m21_5 -# 23| m23_5(unknown) = Chi : total:m21_5, partial:m23_4 +# 23| mu23_4(unknown) = ^CallSideEffect : ~m? #-----| Goto|SEH Exception -> Block 2 # 26| Block 2 -# 26| m26_1(unknown) = Phi : from 0:~m21_5, from 1:~m23_5 -# 26| m26_2(int) = Phi : from 0:m19_2, from 1:m22_4 -# 26| r26_3(glval) = FunctionAddress[sink] : -# 26| r26_4(glval) = VariableAddress[x] : -# 26| r26_5(int) = Load[x] : &:r26_4, m26_2 -# 26| v26_6(void) = Call[sink] : func:r26_3, 0:r26_5 -# 26| m26_7(unknown) = ^CallSideEffect : ~m26_1 -# 26| m26_8(unknown) = Chi : total:m26_1, partial:m26_7 +# 26| m26_1(int) = Phi : from 0:m19_2, from 1:m22_4 +# 26| r26_2(glval) = FunctionAddress[sink] : +# 26| r26_3(glval) = VariableAddress[x] : +# 26| r26_4(int) = Load[x] : &:r26_3, m26_1 +# 26| v26_5(void) = Call[sink] : func:r26_2, 0:r26_4 +# 26| mu26_6(unknown) = ^CallSideEffect : ~m? # 28| v28_1(void) = NoOp : -# 18| v18_5(void) = ReturnVoid : -# 18| v18_6(void) = AliasedUse : ~m26_8 -# 18| v18_7(void) = ExitFunction : +# 18| v18_4(void) = ReturnVoid : +# 18| v18_5(void) = AliasedUse : ~m? +# 18| v18_6(void) = ExitFunction : # 32| void h_cpp(int) # 32| Block 0 # 32| v32_1(void) = EnterFunction : -# 32| m32_2(unknown) = AliasedDefinition : -# 32| m32_3(unknown) = InitializeNonLocal : -# 32| m32_4(unknown) = Chi : total:m32_2, partial:m32_3 -# 32| r32_5(glval) = VariableAddress[b] : -# 32| m32_6(int) = InitializeParameter[b] : &:r32_5 +# 32| mu32_2(unknown) = AliasedDefinition : +# 32| mu32_3(unknown) = InitializeNonLocal : +# 32| r32_4(glval) = VariableAddress[b] : +# 32| m32_5(int) = InitializeParameter[b] : &:r32_4 # 33| r33_1(glval) = VariableAddress[x] : # 33| r33_2(int) = Constant[0] : # 33| m33_3(int) = Store[x] : &:r33_1, r33_2 # 35| r35_1(glval) = VariableAddress[b] : -# 35| r35_2(int) = Load[b] : &:r35_1, m32_6 +# 35| r35_2(int) = Load[b] : &:r35_1, m32_5 # 35| r35_3(int) = Constant[0] : # 35| r35_4(bool) = CompareNE : r35_2, r35_3 # 35| v35_5(void) = ConditionalBranch : r35_4 @@ -40654,8 +38592,7 @@ try_except.cpp: # 36| Block 1 # 36| r36_1(glval) = FunctionAddress[AfxThrowMemoryException] : # 36| v36_2(void) = Call[AfxThrowMemoryException] : func:r36_1 -# 36| m36_3(unknown) = ^CallSideEffect : ~m32_4 -# 36| m36_4(unknown) = Chi : total:m32_4, partial:m36_3 +# 36| mu36_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 #-----| SEH Exception -> Block 4 @@ -40686,33 +38623,30 @@ try_except.cpp: # 40| r40_2(glval) = VariableAddress[x] : # 40| r40_3(int) = Load[x] : &:r40_2, m33_3 # 40| v40_4(void) = Call[sink] : func:r40_1, 0:r40_3 -# 40| m40_5(unknown) = ^CallSideEffect : ~m36_4 -# 40| m40_6(unknown) = Chi : total:m36_4, partial:m40_5 +# 40| mu40_5(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 # 42| Block 6 -# 42| m42_1(unknown) = Phi : from 0:~m32_4, from 1:~m36_4, from 5:~m40_6 -# 42| v42_2(void) = NoOp : -# 32| v32_7(void) = ReturnVoid : -# 32| v32_8(void) = AliasedUse : ~m42_1 -# 32| v32_9(void) = ExitFunction : +# 42| v42_1(void) = NoOp : +# 32| v32_6(void) = ReturnVoid : +# 32| v32_7(void) = AliasedUse : ~m? +# 32| v32_8(void) = ExitFunction : # 32| Block 7 -# 32| v32_10(void) = Unreached : +# 32| v32_9(void) = Unreached : # 44| void throw_cpp(int) # 44| Block 0 # 44| v44_1(void) = EnterFunction : -# 44| m44_2(unknown) = AliasedDefinition : -# 44| m44_3(unknown) = InitializeNonLocal : -# 44| m44_4(unknown) = Chi : total:m44_2, partial:m44_3 -# 44| r44_5(glval) = VariableAddress[b] : -# 44| m44_6(int) = InitializeParameter[b] : &:r44_5 +# 44| mu44_2(unknown) = AliasedDefinition : +# 44| mu44_3(unknown) = InitializeNonLocal : +# 44| r44_4(glval) = VariableAddress[b] : +# 44| m44_5(int) = InitializeParameter[b] : &:r44_4 # 45| r45_1(glval) = VariableAddress[x] : # 45| r45_2(int) = Constant[0] : # 45| m45_3(int) = Store[x] : &:r45_1, r45_2 # 47| r47_1(glval) = VariableAddress[b] : -# 47| r47_2(int) = Load[b] : &:r47_1, m44_6 +# 47| r47_2(int) = Load[b] : &:r47_1, m44_5 # 47| r47_3(int) = Constant[0] : # 47| r47_4(bool) = CompareNE : r47_2, r47_3 # 47| v47_5(void) = ConditionalBranch : r47_4 @@ -40753,30 +38687,26 @@ try_except.cpp: # 52| r52_2(glval) = VariableAddress[x] : # 52| r52_3(int) = Load[x] : &:r52_2, m45_3 # 52| v52_4(void) = Call[sink] : func:r52_1, 0:r52_3 -# 52| m52_5(unknown) = ^CallSideEffect : ~m44_4 -# 52| m52_6(unknown) = Chi : total:m44_4, partial:m52_5 +# 52| mu52_5(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 6 # 54| Block 6 -# 54| m54_1(unknown) = Phi : from 0:~m44_4, from 5:~m52_6 -# 54| v54_2(void) = NoOp : -# 44| v44_7(void) = ReturnVoid : -# 44| v44_8(void) = AliasedUse : ~m54_1 -# 44| v44_9(void) = ExitFunction : +# 54| v54_1(void) = NoOp : +# 44| v44_6(void) = ReturnVoid : +# 44| v44_7(void) = AliasedUse : ~m? +# 44| v44_8(void) = ExitFunction : # 44| Block 7 -# 44| v44_10(void) = Unreached : +# 44| v44_9(void) = Unreached : type_info_test.cpp: # 3| void type_info_test(int) # 3| Block 0 # 3| v3_1(void) = EnterFunction : -# 3| m3_2(unknown) = AliasedDefinition : -# 3| m3_3(unknown) = InitializeNonLocal : -# 3| m3_4(unknown) = Chi : total:m3_2, partial:m3_3 -# 3| r3_5(glval) = VariableAddress[x] : -# 3| m3_6(int) = InitializeParameter[x] : &:r3_5 -# 3| m3_7(unknown) = Chi : total:m3_4, partial:m3_6 +# 3| mu3_2(unknown) = AliasedDefinition : +# 3| mu3_3(unknown) = InitializeNonLocal : +# 3| r3_4(glval) = VariableAddress[x] : +# 3| mu3_5(int) = InitializeParameter[x] : &:r3_4 # 4| r4_1(glval) = VariableAddress[t1] : # 4| r4_2(glval) = VariableAddress[x] : # 4| r4_3(glval) = TypeidExpr : r4_2 @@ -40787,6 +38717,6 @@ type_info_test.cpp: # 5| r5_3(type_info &) = CopyValue : r5_2 # 5| m5_4(type_info &) = Store[t2] : &:r5_1, r5_3 # 6| v6_1(void) = NoOp : -# 3| v3_8(void) = ReturnVoid : -# 3| v3_9(void) = AliasedUse : m3_3 -# 3| v3_10(void) = ExitFunction : +# 3| v3_6(void) = ReturnVoid : +# 3| v3_7(void) = AliasedUse : ~m? +# 3| v3_8(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ir.ql b/cpp/ql/test/library-tests/ir/ir/unaliased_ir.ql index 0488fd09dbed..671834318ca4 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ir.ql +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ir.ql @@ -3,7 +3,7 @@ */ private import cpp -private import semmle.code.cpp.ir.implementation.aliased_ssa.PrintIR +private import semmle.code.cpp.ir.implementation.unaliased_ssa.PrintIR private import PrintConfig private class PrintConfig extends PrintIRConfiguration { From b5d871eba01d48864797bfd40f60a71f0d0869ab Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:37:28 +0000 Subject: [PATCH 22/32] C++: Accept changes in BadAdditionOverflowCheck test following aliased SSA removal --- .../BadAdditionOverflowCheck/SignedOverflowCheck.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BadAdditionOverflowCheck/SignedOverflowCheck.expected b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BadAdditionOverflowCheck/SignedOverflowCheck.expected index 414bc74f99e6..eaf6a7ac1e4d 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BadAdditionOverflowCheck/SignedOverflowCheck.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BadAdditionOverflowCheck/SignedOverflowCheck.expected @@ -1,5 +1,4 @@ | SignedOverflowCheck.cpp:8:12:8:22 | ... < ... | Testing for signed overflow may produce undefined results. | | SignedOverflowCheck.cpp:18:12:18:26 | ... < ... | Testing for signed overflow may produce undefined results. | -| SignedOverflowCheck.cpp:73:6:73:36 | ... < ... | Testing for signed overflow may produce undefined results. | | SignedOverflowCheck.cpp:99:10:99:30 | ... <= ... | Testing for signed overflow may produce undefined results. | | SignedOverflowCheck.cpp:122:10:122:42 | ... <= ... | Testing for signed overflow may produce undefined results. | From 70fd13034bb92ee29be8245ae7cfe7c15a4906e8 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:38:48 +0000 Subject: [PATCH 23/32] C++: Accept changes in StrncpyFlippedArgs test following aliased SSA removal --- .../StrncpyFlippedArgs/StrncpyFlippedArgs.expected | 2 -- 1 file changed, 2 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected index 19fe89a78c16..c9ee3891f0a2 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected @@ -12,9 +12,7 @@ | test.cpp:48:2:48:9 | call to strcpy_s | Potentially unsafe call to strcpy_s; second argument should be size of destination. | | test.cpp:49:2:49:9 | call to strcpy_s | Potentially unsafe call to strcpy_s; second argument should be size of destination. | | test.cpp:62:3:62:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | -| test.cpp:65:3:65:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | | test.cpp:81:3:81:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | -| test.cpp:84:3:84:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | | test.cpp:105:2:105:10 | call to wcsxfrm_l | Potentially unsafe call to wcsxfrm_l; third argument should be size of destination. | | test.cpp:107:2:107:10 | call to wcsxfrm_l | Potentially unsafe call to wcsxfrm_l; third argument should be size of destination. | | test.cpp:108:2:108:10 | call to wcsxfrm_l | Potentially unsafe call to wcsxfrm_l; third argument should be size of destination. | From cc0773b1e079c5758df88b7de9dcb5b9bbb6f81b Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:40:14 +0000 Subject: [PATCH 24/32] C++: Accept changes in RedundantNullCheckSimple test following aliased SSA removal --- .../RedundantNullCheckSimple.expected | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/RedundantNullCheckSimple/RedundantNullCheckSimple.expected b/cpp/ql/test/query-tests/Likely Bugs/RedundantNullCheckSimple/RedundantNullCheckSimple.expected index 8ffb2330840e..cb45850a36a6 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/RedundantNullCheckSimple/RedundantNullCheckSimple.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/RedundantNullCheckSimple/RedundantNullCheckSimple.expected @@ -15,42 +15,12 @@ nodes | RedundantNullCheckSimple.cpp:11:11:11:13 | Constant: 100 | semmle.label | 100 | | RedundantNullCheckSimple.cpp:13:8:13:8 | Load: p | semmle.label | p | | RedundantNullCheckSimple.cpp:13:8:13:8 | VariableAddress: p | semmle.label | p | -| RedundantNullCheckSimple.cpp:19:3:19:3 | VariableAddress: x | semmle.label | x | -| RedundantNullCheckSimple.cpp:19:3:19:9 | Store: ... = ... | semmle.label | ... = ... | -| RedundantNullCheckSimple.cpp:19:7:19:9 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:19:8:19:9 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:20:7:20:8 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:20:8:20:8 | Load: p | semmle.label | p | -| RedundantNullCheckSimple.cpp:20:8:20:8 | VariableAddress: p | semmle.label | p | -| RedundantNullCheckSimple.cpp:78:3:78:3 | VariableAddress: x | semmle.label | x | -| RedundantNullCheckSimple.cpp:78:3:78:10 | Store: ... = ... | semmle.label | ... = ... | -| RedundantNullCheckSimple.cpp:78:7:78:10 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:78:8:78:10 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:79:7:79:9 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:79:8:79:9 | Load: pp | semmle.label | pp | -| RedundantNullCheckSimple.cpp:79:8:79:9 | VariableAddress: pp | semmle.label | pp | -| RedundantNullCheckSimple.cpp:92:13:92:18 | Load: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:92:13:92:18 | Store: * ... | semmle.label | * ... | -| RedundantNullCheckSimple.cpp:92:18:92:18 | Load: p | semmle.label | p | -| RedundantNullCheckSimple.cpp:93:9:93:10 | Load: sp | semmle.label | sp | -| RedundantNullCheckSimple.cpp:93:9:93:10 | VariableAddress: sp | semmle.label | sp | -| RedundantNullCheckSimple.cpp:93:13:93:13 | FieldAddress: p | semmle.label | p | -| RedundantNullCheckSimple.cpp:93:13:93:13 | Load: p | semmle.label | p | edges | RedundantNullCheckSimple.cpp:3:7:3:8 | Load: * ... | RedundantNullCheckSimple.cpp:4:7:4:7 | Load: p | | RedundantNullCheckSimple.cpp:3:8:3:8 | Load: p | RedundantNullCheckSimple.cpp:4:7:4:7 | Load: p | | RedundantNullCheckSimple.cpp:10:11:10:12 | Load: * ... | RedundantNullCheckSimple.cpp:13:8:13:8 | Load: p | | RedundantNullCheckSimple.cpp:10:12:10:12 | Load: p | RedundantNullCheckSimple.cpp:13:8:13:8 | Load: p | -| RedundantNullCheckSimple.cpp:19:7:19:9 | Load: * ... | RedundantNullCheckSimple.cpp:20:7:20:8 | Load: * ... | -| RedundantNullCheckSimple.cpp:19:8:19:9 | Load: * ... | RedundantNullCheckSimple.cpp:20:7:20:8 | Load: * ... | -| RedundantNullCheckSimple.cpp:78:7:78:10 | Load: * ... | RedundantNullCheckSimple.cpp:79:7:79:9 | Load: * ... | -| RedundantNullCheckSimple.cpp:78:8:78:10 | Load: * ... | RedundantNullCheckSimple.cpp:79:7:79:9 | Load: * ... | -| RedundantNullCheckSimple.cpp:92:13:92:18 | Load: * ... | RedundantNullCheckSimple.cpp:93:13:93:13 | Load: p | -| RedundantNullCheckSimple.cpp:92:18:92:18 | Load: p | RedundantNullCheckSimple.cpp:93:13:93:13 | Load: p | #select | RedundantNullCheckSimple.cpp:4:7:4:7 | Load: p | RedundantNullCheckSimple.cpp:3:7:3:8 | Load: * ... | RedundantNullCheckSimple.cpp:4:7:4:7 | Load: p | This null check is redundant because $@ in any case. | RedundantNullCheckSimple.cpp:3:7:3:8 | Load: * ... | the value is dereferenced | | RedundantNullCheckSimple.cpp:13:8:13:8 | Load: p | RedundantNullCheckSimple.cpp:10:11:10:12 | Load: * ... | RedundantNullCheckSimple.cpp:13:8:13:8 | Load: p | This null check is redundant because $@ in any case. | RedundantNullCheckSimple.cpp:10:11:10:12 | Load: * ... | the value is dereferenced | -| RedundantNullCheckSimple.cpp:20:7:20:8 | Load: * ... | RedundantNullCheckSimple.cpp:19:7:19:9 | Load: * ... | RedundantNullCheckSimple.cpp:20:7:20:8 | Load: * ... | This null check is redundant because $@ in any case. | RedundantNullCheckSimple.cpp:19:7:19:9 | Load: * ... | the value is dereferenced | | RedundantNullCheckSimple.cpp:48:12:48:12 | Load: p | RedundantNullCheckSimple.cpp:51:10:51:11 | Load: * ... | RedundantNullCheckSimple.cpp:48:12:48:12 | Load: p | This null check is redundant because $@ in any case. | RedundantNullCheckSimple.cpp:51:10:51:11 | Load: * ... | the value is dereferenced | -| RedundantNullCheckSimple.cpp:79:7:79:9 | Load: * ... | RedundantNullCheckSimple.cpp:78:7:78:10 | Load: * ... | RedundantNullCheckSimple.cpp:79:7:79:9 | Load: * ... | This null check is redundant because $@ in any case. | RedundantNullCheckSimple.cpp:78:7:78:10 | Load: * ... | the value is dereferenced | -| RedundantNullCheckSimple.cpp:93:13:93:13 | Load: p | RedundantNullCheckSimple.cpp:92:13:92:18 | Load: * ... | RedundantNullCheckSimple.cpp:93:13:93:13 | Load: p | This null check is redundant because $@ in any case. | RedundantNullCheckSimple.cpp:92:13:92:18 | Load: * ... | the value is dereferenced | From 979f8b4b7831e88cd80953cc29d94f80f386f4c9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:41:12 +0000 Subject: [PATCH 25/32] C++: Accept changes in OverrunWriteProductFlow test following aliased SSA removal --- .../SAMATE/OverrunWriteProductFlow.expected | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected index 3a2b7372831d..e7806aa53822 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected @@ -15,23 +15,17 @@ edges | test.cpp:147:5:147:7 | *str [post update] [string] | test.cpp:148:5:148:7 | *str [string] | provenance | | | test.cpp:147:5:147:34 | ... = ... | test.cpp:147:5:147:7 | *str [post update] [string] | provenance | | | test.cpp:147:19:147:24 | call to malloc | test.cpp:147:5:147:34 | ... = ... | provenance | | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:152:13:152:15 | *str [string] | provenance | | | test.cpp:148:5:148:7 | *str [string] | test.cpp:154:13:154:15 | *str [string] | provenance | | | test.cpp:148:5:148:7 | *str [string] | test.cpp:156:13:156:15 | *str [string] | provenance | | | test.cpp:148:5:148:7 | *str [string] | test.cpp:175:17:175:19 | *str [string] | provenance | | | test.cpp:148:5:148:7 | *str [string] | test.cpp:187:17:187:19 | *str [string] | provenance | | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:195:17:195:19 | *str [string] | provenance | | | test.cpp:148:5:148:7 | *str [string] | test.cpp:199:17:199:19 | *str [string] | provenance | | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:203:17:203:19 | *str [string] | provenance | | | test.cpp:148:5:148:7 | *str [string] | test.cpp:207:17:207:19 | *str [string] | provenance | | -| test.cpp:152:13:152:15 | *str [string] | test.cpp:152:18:152:23 | string | provenance | | | test.cpp:154:13:154:15 | *str [string] | test.cpp:154:18:154:23 | string | provenance | | | test.cpp:156:13:156:15 | *str [string] | test.cpp:156:18:156:23 | string | provenance | | | test.cpp:175:17:175:19 | *str [string] | test.cpp:175:22:175:27 | string | provenance | | | test.cpp:187:17:187:19 | *str [string] | test.cpp:187:22:187:27 | string | provenance | | -| test.cpp:195:17:195:19 | *str [string] | test.cpp:195:22:195:27 | string | provenance | | | test.cpp:199:17:199:19 | *str [string] | test.cpp:199:22:199:27 | string | provenance | | -| test.cpp:203:17:203:19 | *str [string] | test.cpp:203:22:203:27 | string | provenance | | | test.cpp:207:17:207:19 | *str [string] | test.cpp:207:22:207:27 | string | provenance | | | test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:26 | ... = ... | provenance | | | test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:235:27:235:31 | *p_str [Return] [string] | provenance | | @@ -68,8 +62,6 @@ nodes | test.cpp:147:5:147:34 | ... = ... | semmle.label | ... = ... | | test.cpp:147:19:147:24 | call to malloc | semmle.label | call to malloc | | test.cpp:148:5:148:7 | *str [string] | semmle.label | *str [string] | -| test.cpp:152:13:152:15 | *str [string] | semmle.label | *str [string] | -| test.cpp:152:18:152:23 | string | semmle.label | string | | test.cpp:154:13:154:15 | *str [string] | semmle.label | *str [string] | | test.cpp:154:18:154:23 | string | semmle.label | string | | test.cpp:156:13:156:15 | *str [string] | semmle.label | *str [string] | @@ -78,12 +70,8 @@ nodes | test.cpp:175:22:175:27 | string | semmle.label | string | | test.cpp:187:17:187:19 | *str [string] | semmle.label | *str [string] | | test.cpp:187:22:187:27 | string | semmle.label | string | -| test.cpp:195:17:195:19 | *str [string] | semmle.label | *str [string] | -| test.cpp:195:22:195:27 | string | semmle.label | string | | test.cpp:199:17:199:19 | *str [string] | semmle.label | *str [string] | | test.cpp:199:22:199:27 | string | semmle.label | string | -| test.cpp:203:17:203:19 | *str [string] | semmle.label | *str [string] | -| test.cpp:203:22:203:27 | string | semmle.label | string | | test.cpp:207:17:207:19 | *str [string] | semmle.label | *str [string] | | test.cpp:207:22:207:27 | string | semmle.label | string | | test.cpp:235:27:235:31 | *p_str [Return] [string] | semmle.label | *p_str [Return] [string] | @@ -112,14 +100,11 @@ subpaths | test.cpp:42:5:42:11 | call to strncpy | test.cpp:18:19:18:24 | call to malloc | test.cpp:42:18:42:23 | string | This write may overflow $@ by 1 element. | test.cpp:42:18:42:23 | string | string | | test.cpp:72:9:72:15 | call to strncpy | test.cpp:18:19:18:24 | call to malloc | test.cpp:72:22:72:27 | string | This write may overflow $@ by 1 element. | test.cpp:72:22:72:27 | string | string | | test.cpp:80:9:80:15 | call to strncpy | test.cpp:18:19:18:24 | call to malloc | test.cpp:80:22:80:27 | string | This write may overflow $@ by 2 elements. | test.cpp:80:22:80:27 | string | string | -| test.cpp:152:5:152:11 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:152:18:152:23 | string | This write may overflow $@ by 1 element. | test.cpp:152:18:152:23 | string | string | | test.cpp:154:5:154:11 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:154:18:154:23 | string | This write may overflow $@ by 1 element. | test.cpp:154:18:154:23 | string | string | | test.cpp:156:5:156:11 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:156:18:156:23 | string | This write may overflow $@ by 2 elements. | test.cpp:156:18:156:23 | string | string | | test.cpp:175:9:175:15 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:175:22:175:27 | string | This write may overflow $@ by 1 element. | test.cpp:175:22:175:27 | string | string | | test.cpp:187:9:187:15 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:187:22:187:27 | string | This write may overflow $@ by 1 element. | test.cpp:187:22:187:27 | string | string | -| test.cpp:195:9:195:15 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:195:22:195:27 | string | This write may overflow $@ by 1 element. | test.cpp:195:22:195:27 | string | string | | test.cpp:199:9:199:15 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:199:22:199:27 | string | This write may overflow $@ by 2 elements. | test.cpp:199:22:199:27 | string | string | -| test.cpp:203:9:203:15 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:203:22:203:27 | string | This write may overflow $@ by 2 elements. | test.cpp:203:22:203:27 | string | string | | test.cpp:207:9:207:15 | call to strncpy | test.cpp:147:19:147:24 | call to malloc | test.cpp:207:22:207:27 | string | This write may overflow $@ by 3 elements. | test.cpp:207:22:207:27 | string | string | | test.cpp:243:5:243:10 | call to memset | test.cpp:241:20:241:38 | call to malloc | test.cpp:243:12:243:21 | string | This write may overflow $@ by 1 element. | test.cpp:243:16:243:21 | string | string | | test.cpp:250:5:250:10 | call to memset | test.cpp:249:14:249:33 | call to my_alloc | test.cpp:250:12:250:12 | p | This write may overflow $@ by 1 element. | test.cpp:250:12:250:12 | p | p | From 8f9f4ca572a975ec51b3b016c6a11e181ed75cb9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:42:16 +0000 Subject: [PATCH 26/32] C++: Accept changes in UncontrolledFormatString test following aliased SSA removal --- .../Security/CWE/CWE-134/semmle/ifs/ifs.expected | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected index e8d852cbcd27..148dab1b38b1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected @@ -1,4 +1,7 @@ edges +| ifs.c:16:27:16:30 | **argv | ifs.c:43:3:43:14 | *... = ... | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:49:3:49:14 | *... = ... | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:55:3:55:14 | *... = ... | provenance | | | ifs.c:16:27:16:30 | **argv | ifs.c:61:3:61:14 | *... = ... | provenance | | | ifs.c:16:27:16:30 | **argv | ifs.c:68:3:68:14 | *... = ... | provenance | | | ifs.c:16:27:16:30 | **argv | ifs.c:74:3:74:14 | *... = ... | provenance | | @@ -10,6 +13,9 @@ edges | ifs.c:16:27:16:30 | **argv | ifs.c:111:3:111:14 | *... = ... | provenance | | | ifs.c:16:27:16:30 | **argv | ifs.c:117:3:117:14 | *... = ... | provenance | | | ifs.c:16:27:16:30 | **argv | ifs.c:123:3:123:14 | *... = ... | provenance | | +| ifs.c:43:3:43:14 | *... = ... | ifs.c:44:9:44:10 | *c4 | provenance | | +| ifs.c:49:3:49:14 | *... = ... | ifs.c:50:9:50:10 | *c5 | provenance | | +| ifs.c:55:3:55:14 | *... = ... | ifs.c:56:9:56:10 | *c6 | provenance | | | ifs.c:61:3:61:14 | *... = ... | ifs.c:62:9:62:10 | *c7 | provenance | | | ifs.c:68:3:68:14 | *... = ... | ifs.c:69:9:69:10 | *c8 | provenance | | | ifs.c:74:3:74:14 | *... = ... | ifs.c:75:9:75:10 | *i1 | provenance | | @@ -23,6 +29,12 @@ edges | ifs.c:123:3:123:14 | *... = ... | ifs.c:124:9:124:10 | *i9 | provenance | | nodes | ifs.c:16:27:16:30 | **argv | semmle.label | **argv | +| ifs.c:43:3:43:14 | *... = ... | semmle.label | *... = ... | +| ifs.c:44:9:44:10 | *c4 | semmle.label | *c4 | +| ifs.c:49:3:49:14 | *... = ... | semmle.label | *... = ... | +| ifs.c:50:9:50:10 | *c5 | semmle.label | *c5 | +| ifs.c:55:3:55:14 | *... = ... | semmle.label | *... = ... | +| ifs.c:56:9:56:10 | *c6 | semmle.label | *c6 | | ifs.c:61:3:61:14 | *... = ... | semmle.label | *... = ... | | ifs.c:62:9:62:10 | *c7 | semmle.label | *c7 | | ifs.c:68:3:68:14 | *... = ... | semmle.label | *... = ... | @@ -47,6 +59,9 @@ nodes | ifs.c:124:9:124:10 | *i9 | semmle.label | *i9 | subpaths #select +| ifs.c:44:9:44:10 | *c4 | ifs.c:16:27:16:30 | **argv | ifs.c:44:9:44:10 | *c4 | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | ifs.c:16:27:16:30 | **argv | a command-line argument | +| ifs.c:50:9:50:10 | *c5 | ifs.c:16:27:16:30 | **argv | ifs.c:50:9:50:10 | *c5 | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | ifs.c:16:27:16:30 | **argv | a command-line argument | +| ifs.c:56:9:56:10 | *c6 | ifs.c:16:27:16:30 | **argv | ifs.c:56:9:56:10 | *c6 | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | ifs.c:16:27:16:30 | **argv | a command-line argument | | ifs.c:62:9:62:10 | *c7 | ifs.c:16:27:16:30 | **argv | ifs.c:62:9:62:10 | *c7 | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | ifs.c:16:27:16:30 | **argv | a command-line argument | | ifs.c:69:9:69:10 | *c8 | ifs.c:16:27:16:30 | **argv | ifs.c:69:9:69:10 | *c8 | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | ifs.c:16:27:16:30 | **argv | a command-line argument | | ifs.c:75:9:75:10 | *i1 | ifs.c:16:27:16:30 | **argv | ifs.c:75:9:75:10 | *i1 | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | ifs.c:16:27:16:30 | **argv | a command-line argument | From 2e3c0a03742bece3e210d873d0eaab15b606f880 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:45:45 +0000 Subject: [PATCH 27/32] C++: Fix InvalidPointerToDereference test following aliased SSA removal --- cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp index db1017e233fe..2582dbcf135d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp @@ -64,7 +64,7 @@ void test5(int size) { } for (char* p = begin; p <= end; ++p) { - *p = 0; // $ deref=L53->L62->L67 deref=L53->L66->L67 // BAD + *p = 0; // $ deref=L53->L66->L67 // BAD } for (char* p = begin; p < end; ++p) { @@ -804,7 +804,7 @@ void test6_no_field_flow(int size) { } for (char* p = begin; p <= end; ++p) { - *p = 0; // $ deref=L794->L802->L807 deref=L794->L806->L807 // BAD + *p = 0; // $ deref=L794->L806->L807 // BAD } for (char* p = begin; p < end; ++p) { @@ -868,4 +868,4 @@ void test17(int size) { char* p = (char*)g_malloc(size); char* q = p + size; // $ alloc=L868 char a = *q; // $ deref=L869->L870 // BAD -} \ No newline at end of file +} From b2b9a74368d8c2cba52c3c994acb6c86ebcd6038 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:46:59 +0000 Subject: [PATCH 28/32] C++: Accept changes in CleartextFileWrite test following aliased SSA removal --- .../CWE/CWE-311/semmle/tests/CleartextFileWrite.expected | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected index e283cbeb57bc..b1e7e3d48e69 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected @@ -18,6 +18,7 @@ nodes | test2.cpp:65:31:65:34 | cpy1 | semmle.label | cpy1 | | test2.cpp:72:15:72:24 | password | semmle.label | password | | test2.cpp:73:30:73:32 | *buf | semmle.label | *buf | +| test2.cpp:91:50:91:63 | passwd_config2 | semmle.label | passwd_config2 | | test2.cpp:98:45:98:52 | password | semmle.label | password | | test2.cpp:99:27:99:32 | *buffer | semmle.label | *buffer | | test.cpp:45:9:45:19 | thePassword | semmle.label | thePassword | @@ -36,6 +37,7 @@ subpaths | test2.cpp:57:2:57:8 | call to fprintf | test2.cpp:57:39:57:49 | call to getPassword | test2.cpp:57:39:57:49 | call to getPassword | This write into file 'log' may contain unencrypted data from $@. | test2.cpp:57:39:57:49 | call to getPassword | this source. | | test2.cpp:65:3:65:9 | call to fprintf | test2.cpp:62:18:62:25 | password | test2.cpp:65:31:65:34 | cpy1 | This write into file 'log' may contain unencrypted data from $@. | test2.cpp:62:18:62:25 | password | this source. | | test2.cpp:73:3:73:9 | call to fprintf | test2.cpp:72:15:72:24 | password | test2.cpp:73:30:73:32 | *buf | This write into file 'log' may contain unencrypted data from $@. | test2.cpp:72:17:72:24 | password | this source. | +| test2.cpp:91:4:91:10 | call to fprintf | test2.cpp:91:50:91:63 | passwd_config2 | test2.cpp:91:50:91:63 | passwd_config2 | This write into file 'log' may contain unencrypted data from $@. | test2.cpp:91:50:91:63 | passwd_config2 | this source. | | test2.cpp:99:3:99:9 | call to fprintf | test2.cpp:98:45:98:52 | password | test2.cpp:99:27:99:32 | *buffer | This write into file 'log' may contain unencrypted data from $@. | test2.cpp:98:45:98:52 | password | this source. | | test.cpp:45:3:45:7 | call to fputs | test.cpp:45:9:45:19 | thePassword | test.cpp:45:9:45:19 | thePassword | This write into file 'file' may contain unencrypted data from $@. | test.cpp:45:9:45:19 | thePassword | this source. | | test.cpp:70:35:70:35 | call to operator<< | test.cpp:70:38:70:48 | thePassword | test.cpp:70:38:70:48 | thePassword | This write into file 'mystream' may contain unencrypted data from $@. | test.cpp:70:38:70:48 | thePassword | this source. | From ca4f70d9f08f713eeba7744990658798fea9ecf7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 13:50:27 +0000 Subject: [PATCH 29/32] C++: Add changelog entry for removal of aliased SSA. --- cpp/ql/lib/change-notes/2026-03-04-remove-aliased-ssa.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2026-03-04-remove-aliased-ssa.md diff --git a/cpp/ql/lib/change-notes/2026-03-04-remove-aliased-ssa.md b/cpp/ql/lib/change-notes/2026-03-04-remove-aliased-ssa.md new file mode 100644 index 000000000000..20c17fb49bcb --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-03-04-remove-aliased-ssa.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The aliased SSA was expensive, and had little benefit, so has been removed. The unaliased SSA should be used instead. In most cases it will be imported by default, so no changes will be necessary. From ff80211c6521738a8d26894ab0102742505d3c66 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 19:05:01 +0000 Subject: [PATCH 30/32] C++: Fix typo --- .../lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll index 4415b3eb351b..eb56ae3185de 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll @@ -13,7 +13,7 @@ private module Internal { /** * An IR operand. `TOperand` is shared across all phases of the IR. There are branches of this * type for operands created directly from the AST (`TRegisterOperand` and `TNonSSAMemoryOperand`), - * for operands computed by each stage of SSA construction (`T*PhiOperand`), and a placehold branch + * for operands computed by each stage of SSA construction (`T*PhiOperand`), and a placeholder branch * for operands that do not exist in a given stage of IR construction (`TNoOperand`). */ cached From a83d733a43e1dc1dafe1c90b5cdf0b69f6e3511c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 22:19:30 +0000 Subject: [PATCH 31/32] C++: Remove GroupedMemoryLocation In the unaliased SSA it's empty, and the aliased SSA has now been removed. --- .../internal/SSAConstruction.qll | 67 +------------------ .../unaliased_ssa/internal/SimpleSSA.qll | 20 ------ 2 files changed, 1 insertion(+), 86 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index 1a1eb6a1876f..5d42b32c6e27 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -77,11 +77,6 @@ private module Cached { hasChiNode(_, primaryInstruction) } - cached - predicate hasChiNodeAfterUninitializedGroup(UninitializedGroupInstruction initGroup) { - hasChiNodeAfterUninitializedGroup(_, initGroup) - } - cached predicate hasUnreachedInstructionCached(IRFunction irFunc) { exists(OldIR::Instruction oldInstruction | @@ -191,13 +186,6 @@ private module Cached { exists(Instruction input | instruction = getChi(input) | Alias::getResultMemoryLocation(input).getVirtualVariable() instanceof Alias::AliasedVirtualVariable - or - // A chi following an `UninitializedGroupInstruction` only happens when the virtual - // variable of the grouped memory location is `{AllAliasedMemory}`. - exists(Alias::GroupedMemoryLocation gml | - input = uninitializedGroup(gml.getGroup()) and - gml.getVirtualVariable() instanceof Alias::AliasedVirtualVariable - ) ) or // Phi instructions track locations, and therefore a phi instruction is @@ -459,9 +447,7 @@ private module Cached { instruction = getInitGroupInstruction(i, func) and kind instanceof GotoEdge | - if hasChiNodeAfterUninitializedGroup(_, instruction) - then result = getChi(instruction) - else result = getInitGroupInstruction(i + 1, func) + result = getInitGroupInstruction(i + 1, func) ) or exists(int i, IRFunction func, UninitializedGroupInstruction initGroup | @@ -657,8 +643,6 @@ private module Cached { instr = chiInstruction(primaryInstr) and result = vvar.getType() | hasChiNode(vvar, primaryInstr) - or - hasChiNodeAfterUninitializedGroup(vvar, primaryInstr) ) or exists(Alias::VariableGroup vg | @@ -772,16 +756,6 @@ private predicate hasChiNode(Alias::VirtualVariable vvar, OldInstruction def) { ) } -private predicate hasChiNodeAfterUninitializedGroup( - Alias::AliasedVirtualVariable vvar, UninitializedGroupInstruction initGroup -) { - exists(Alias::GroupedMemoryLocation defLocation | - initGroup = uninitializedGroup(defLocation.getGroup()) and - defLocation.getVirtualVariable() = vvar and - Alias::getOverlap(defLocation, vvar) instanceof MayPartiallyOverlap - ) -} - private import PhiInsertion /** @@ -996,31 +970,6 @@ module DefUse { hasDefinition(_, defLocation, defBlock, defOffset) and result = getPhi(defBlock, defLocation) and actualDefLocation = defLocation - or - exists( - Alias::VariableGroup vg, int index, UninitializedGroupInstruction initGroup, - Alias::GroupedMemoryLocation gml - | - // Add 3 to account for the function prologue: - // v1(void) = EnterFunction - // m1(unknown) = AliasedDefinition - // m2(unknown) = InitializeNonLocal - index = 3 + vg.getInitializationOrder() and - not gml.isMayAccess() and - gml.isSome() and - gml.getGroup() = vg and - vg.getIRFunction().getEntryBlock() = defBlock and - initGroup = uninitializedGroup(vg) and - (defLocation = gml or defLocation = gml.getVirtualVariable()) - | - result = initGroup and - defOffset = 2 * index and - actualDefLocation = defLocation - or - result = getChi(initGroup) and - defOffset = 2 * index + 1 and - actualDefLocation = defLocation.getVirtualVariable() - ) } private ChiInstruction remapGetDefinitionOrChiInstruction(Instruction oldResult) { @@ -1187,18 +1136,6 @@ module DefUse { then offset = getChiOffset(index, block) // The use will be connected to the definition on the `Chi` instruction. else offset = getNonChiOffset(index, block) // The use will be connected to the definition on the original instruction. ) - or - exists(UninitializedGroupInstruction initGroup, int index, Overlap overlap, VariableGroup vg | - initGroup.getEnclosingIRFunction().getEntryBlock() = getNewBlock(block) and - vg = defLocation.(Alias::GroupedMemoryLocation).getGroup() and - // EnterFunction + AliasedDefinition + InitializeNonLocal + index - index = 3 + vg.getInitializationOrder() and - initGroup = uninitializedGroup(vg) and - overlap = Alias::getOverlap(defLocation, useLocation) and - if overlap instanceof MayPartiallyOverlap and hasChiNodeAfterUninitializedGroup(initGroup) - then offset = 2 * index + 1 // The use will be connected to the definition on the `Chi` instruction. - else offset = 2 * index // The use will be connected to the definition on the original instruction. - ) } /** @@ -1412,8 +1349,6 @@ module Ssa { predicate hasChiInstruction = Cached::hasChiInstructionCached/1; - predicate hasChiNodeAfterUninitializedGroup = Cached::hasChiNodeAfterUninitializedGroup/1; - predicate hasUnreachedInstruction = Cached::hasUnreachedInstructionCached/1; class VariableGroup = Alias::VariableGroup; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll index 39283d07b54c..b94794920b4f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll @@ -91,26 +91,6 @@ abstract class VariableGroup extends Unit { abstract int getInitializationOrder(); } -class GroupedMemoryLocation extends MemoryLocation { - VariableGroup vg; - - GroupedMemoryLocation() { none() } - - /** Gets an allocation of this memory location. */ - Allocation getAnAllocation() { result = vg.getAnAllocation() } - - /** Gets the set of allocations associated with this memory location. */ - VariableGroup getGroup() { result = vg } - - predicate isMayAccess() { none() } - - /** Holds if this memory location represents all the enclosing allocations. */ - predicate isAll() { none() } - - /** Holds if this memory location represents one or more of the enclosing allocations. */ - predicate isSome() { none() } -} - /** * Represents a set of `MemoryLocation`s that cannot overlap with * `MemoryLocation`s outside of the set. The `VirtualVariable` will be From 0c0ac1d8112d80b075df2b3cda8186d0c6aa2a8f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 4 Mar 2026 23:10:45 +0000 Subject: [PATCH 32/32] C++: Remove VariableGroup It's empty in the unaliased SSA, and the aliased SSA has been removed. --- .../ir/dataflow/internal/SsaImplCommon.qll | 3 +- .../code/cpp/ir/implementation/Opcode.qll | 11 - .../implementation/internal/TInstruction.qll | 15 +- .../cpp/ir/implementation/raw/Instruction.qll | 41 --- .../raw/internal/IRConstruction.qll | 2 - .../unaliased_ssa/Instruction.qll | 41 --- .../internal/SSAConstruction.qll | 286 +----------------- .../unaliased_ssa/internal/SimpleSSA.qll | 14 - 8 files changed, 10 insertions(+), 403 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll index 10ebfdb5be0d..463fbcf53829 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll @@ -40,8 +40,7 @@ predicate ignoreInstruction(Instruction instr) { instr instanceof AliasedDefinitionInstruction or instr instanceof AliasedUseInstruction or instr instanceof InitializeNonLocalInstruction or - instr instanceof ReturnIndirectionInstruction or - instr instanceof UninitializedGroupInstruction + instr instanceof ReturnIndirectionInstruction ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll index d8c1c6115c80..b73e6ee09f99 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll @@ -1250,17 +1250,6 @@ module Opcode { } } - /** - * The `Opcode` for a `UninitializedGroup`. - * - * See the `UninitializedGroupInstruction` documentation for more details. - */ - class UninitializedGroup extends Opcode, TUninitializedGroup { - final override string toString() { result = "UninitializedGroup" } - - override GroupedMemoryAccess getWriteMemoryAccess() { any() } - } - /** * The `Opcode` for an `InlineAsmInstruction`. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll index f02cdf09f25c..7f455dee8573 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll @@ -30,8 +30,7 @@ newtype TInstruction = TUnaliasedSsaChiInstruction(TRawInstruction primaryInstruction) { none() } or TUnaliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { UnaliasedSsa::Ssa::hasUnreachedInstruction(irFunc) - } or - TUnaliasedSsaUninitializedGroupInstruction(UnaliasedSsa::Ssa::VariableGroup vg) + } /** * Provides wrappers for the constructors of each branch of `TInstruction` that is used by the @@ -52,11 +51,7 @@ module UnaliasedSsaInstructions { class TChiInstruction = TUnaliasedSsaChiInstruction; - class TUninitializedGroupInstruction = TUnaliasedSsaUninitializedGroupInstruction; - - class TRawOrUninitializedGroupInstruction = TRawInstruction or TUninitializedGroupInstruction; - - TChiInstruction chiInstruction(TRawOrUninitializedGroupInstruction primaryInstruction) { + TChiInstruction chiInstruction(TRawInstruction primaryInstruction) { result = TUnaliasedSsaChiInstruction(primaryInstruction) } @@ -65,10 +60,4 @@ module UnaliasedSsaInstructions { TUnreachedInstruction unreachedInstruction(IRFunctionBase irFunc) { result = TUnaliasedSsaUnreachedInstruction(irFunc) } - - class VariableGroup = UnaliasedSsa::Ssa::VariableGroup; - - // This really should just be `TUnaliasedSsaUninitializedGroupInstruction`, but that makes the - // compiler realize that certain expressions in `SSAConstruction` are unsatisfiable. - TRawOrUninitializedGroupInstruction uninitializedGroup(VariableGroup vg) { none() } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index 8d3e960c3f87..b8dc7f97ee0d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -2169,47 +2169,6 @@ class ChiInstruction extends Instruction { final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } } -/** - * An instruction that initializes a set of allocations that are each assigned - * the same "virtual variable". - * - * As an example, consider the following snippet: - * ``` - * int a; - * int b; - * int* p; - * if(b) { - * p = &a; - * } else { - * p = &b; - * } - * *p = 5; - * int x = a; - * ``` - * - * Since both the address of `a` and `b` reach `p` at `*p = 5` the IR alias - * analysis will create a region that contains both `a` and `b`. The region - * containing both `a` and `b` are initialized by an `UninitializedGroup` - * instruction in the entry block of the enclosing function. - */ -class UninitializedGroupInstruction extends Instruction { - UninitializedGroupInstruction() { this.getOpcode() instanceof Opcode::UninitializedGroup } - - /** - * Gets an `IRVariable` whose memory is initialized by this instruction, if any. - * Note: Allocations that are not represented as `IRVariable`s (such as - * dynamic allocations) are not returned by this predicate even if this - * instruction initializes such memory. - */ - final IRVariable getAnIRVariable() { - result = Construction::getAnUninitializedGroupVariable(this) - } - - final override string getImmediateString() { - result = strictconcat(this.getAnIRVariable().toString(), ",") - } -} - /** * An instruction representing unreachable code. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll index 594e37b668d6..08e623b750c2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll @@ -426,8 +426,6 @@ predicate hasUnreachedInstruction(IRFunction func) { ) } -IRVariable getAnUninitializedGroupVariable(UninitializedGroupInstruction instr) { none() } - import CachedForDebugging cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index 8d3e960c3f87..b8dc7f97ee0d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -2169,47 +2169,6 @@ class ChiInstruction extends Instruction { final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } } -/** - * An instruction that initializes a set of allocations that are each assigned - * the same "virtual variable". - * - * As an example, consider the following snippet: - * ``` - * int a; - * int b; - * int* p; - * if(b) { - * p = &a; - * } else { - * p = &b; - * } - * *p = 5; - * int x = a; - * ``` - * - * Since both the address of `a` and `b` reach `p` at `*p = 5` the IR alias - * analysis will create a region that contains both `a` and `b`. The region - * containing both `a` and `b` are initialized by an `UninitializedGroup` - * instruction in the entry block of the enclosing function. - */ -class UninitializedGroupInstruction extends Instruction { - UninitializedGroupInstruction() { this.getOpcode() instanceof Opcode::UninitializedGroup } - - /** - * Gets an `IRVariable` whose memory is initialized by this instruction, if any. - * Note: Allocations that are not represented as `IRVariable`s (such as - * dynamic allocations) are not returned by this predicate even if this - * instruction initializes such memory. - */ - final IRVariable getAnIRVariable() { - result = Construction::getAnUninitializedGroupVariable(this) - } - - final override string getImmediateString() { - result = strictconcat(this.getAnIRVariable().toString(), ",") - } -} - /** * An instruction representing unreachable code. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index 5d42b32c6e27..f145269df58f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -15,51 +15,6 @@ private class OldInstruction = Reachability::ReachableInstruction; import Cached -/** - * Holds if `instruction` is the first instruction that may be followed by - * an `UninitializedGroup` instruction, and the enclosing function of - * `instruction` is `func`. - */ -private predicate isFirstInstructionBeforeUninitializedGroup( - Instruction instruction, IRFunction func -) { - instruction = getChi(any(OldIR::InitializeNonLocalInstruction init)) and - func = instruction.getEnclosingIRFunction() -} - -/** Gets the `i`'th `UninitializedGroup` instruction in `func`. */ -private UninitializedGroupInstruction getInitGroupInstruction(int i, IRFunction func) { - exists(Alias::VariableGroup vg | - vg.getIRFunction() = func and - vg.getInitializationOrder() = i and - result = uninitializedGroup(vg) - ) -} - -/** - * Holds if `instruction` is the last instruction in the chain of `UninitializedGroup` - * instructions in `func`. The chain of instructions may be empty in which case - * `instruction` satisfies - * ``` - * isFirstInstructionBeforeUninitializedGroup(instruction, func) - * ``` - */ -predicate isLastInstructionForUninitializedGroups(Instruction instruction, IRFunction func) { - exists(int i | - instruction = getInitGroupInstruction(i, func) and - not exists(getChi(instruction)) and - not exists(getInitGroupInstruction(i + 1, func)) - ) - or - exists(int i | - instruction = getChi(getInitGroupInstruction(i, func)) and - not exists(getInitGroupInstruction(i + 1, func)) - ) - or - isFirstInstructionBeforeUninitializedGroup(instruction, func) and - not exists(getInitGroupInstruction(0, func)) -} - cached private module Cached { cached @@ -90,8 +45,7 @@ private module Cached { } class TStageInstruction = - TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction or - TUninitializedGroupInstruction; + TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction; /** * If `oldInstruction` is a `Phi` instruction that has exactly one reachable predecessor block, @@ -124,8 +78,6 @@ private module Cached { or instr instanceof TChiInstruction or - instr instanceof TUninitializedGroupInstruction - or instr instanceof TUnreachedInstruction } @@ -171,8 +123,7 @@ private module Cached { predicate hasModeledMemoryResult(Instruction instruction) { canModelResultForOldInstruction(getOldInstruction(instruction)) or instruction instanceof PhiInstruction or // Phis always have modeled results - instruction instanceof ChiInstruction or // Chis always have modeled results - instruction instanceof UninitializedGroupInstruction // Group initializers always have modeled results + instruction instanceof ChiInstruction // Chis always have modeled results } cached @@ -254,11 +205,7 @@ private module Cached { hasMemoryOperandDefinition(oldInstruction, oldOperand, overlap, result) ) or - ( - instruction = getChi(getOldInstruction(result)) - or - instruction = getChi(result.(UninitializedGroupInstruction)) - ) and + instruction = getChi(getOldInstruction(result)) and tag instanceof ChiPartialOperandTag and overlap instanceof MustExactlyOverlap or @@ -316,14 +263,6 @@ private module Cached { ) } - cached - IRVariable getAnUninitializedGroupVariable(UninitializedGroupInstruction init) { - exists(Alias::VariableGroup vg | - init = uninitializedGroup(vg) and - result = vg.getAnAllocation().getABaseInstruction().(VariableInstruction).getIRVariable() - ) - } - /** * Holds if `instr` is part of a cycle in the operand graph that doesn't go * through a phi instruction and therefore should be impossible. @@ -377,19 +316,6 @@ private module Cached { result = getNewPhiOperandDefinitionFromOldSsa(instr, newPredecessorBlock, overlap) } - private ChiInstruction getChiAfterUninitializedGroup(int i, IRFunction func) { - result = - rank[i + 1](VariableGroup vg, UninitializedGroupInstruction initGroup, ChiInstruction chi, - int r | - initGroup.getEnclosingIRFunction() = func and - chi = getChi(initGroup) and - initGroup = uninitializedGroup(vg) and - r = vg.getInitializationOrder() - | - chi order by r - ) - } - cached Instruction getChiInstructionTotalOperand(ChiInstruction chiInstr) { exists( @@ -403,19 +329,6 @@ private module Cached { definitionReachesUse(vvar, defBlock, defRank, useBlock, useRank) and result = getDefinitionOrChiInstruction(defBlock, defOffset, vvar, _) ) - or - exists(UninitializedGroupInstruction initGroup, IRFunction func | - chiInstr = getChi(initGroup) and - func = initGroup.getEnclosingIRFunction() - | - chiInstr = getChiAfterUninitializedGroup(0, func) and - isFirstInstructionBeforeUninitializedGroup(result, func) - or - exists(int i | - chiInstr = getChiAfterUninitializedGroup(i + 1, func) and - result = getChiAfterUninitializedGroup(i, func) - ) - ) } cached @@ -431,38 +344,8 @@ private module Cached { ) } - private UninitializedGroupInstruction firstInstructionToUninitializedGroup( - Instruction instruction, EdgeKind kind - ) { - exists(IRFunction func | - isFirstInstructionBeforeUninitializedGroup(instruction, func) and - result = getInitGroupInstruction(0, func) and - kind instanceof GotoEdge - ) - } - - private Instruction getNextUninitializedGroupInstruction(Instruction instruction, EdgeKind kind) { - exists(int i, IRFunction func | - func = instruction.getEnclosingIRFunction() and - instruction = getInitGroupInstruction(i, func) and - kind instanceof GotoEdge - | - result = getInitGroupInstruction(i + 1, func) - ) - or - exists(int i, IRFunction func, UninitializedGroupInstruction initGroup | - func = instruction.getEnclosingIRFunction() and - instruction = getChi(initGroup) and - initGroup = getInitGroupInstruction(i, func) and - kind instanceof GotoEdge - | - result = getInitGroupInstruction(i + 1, func) - ) - } - - private Instruction getInstructionSuccessorAfterUninitializedGroup0( - Instruction instruction, EdgeKind kind - ) { + cached + Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { if hasChiNode(_, getOldInstruction(instruction)) then result = getChi(getOldInstruction(instruction)) and @@ -482,107 +365,6 @@ private module Cached { ) } - private Instruction getInstructionSuccessorAfterUninitializedGroup( - Instruction instruction, EdgeKind kind - ) { - exists(IRFunction func, Instruction firstBeforeUninitializedGroup | - isLastInstructionForUninitializedGroups(instruction, func) and - isFirstInstructionBeforeUninitializedGroup(firstBeforeUninitializedGroup, func) and - result = getInstructionSuccessorAfterUninitializedGroup0(firstBeforeUninitializedGroup, kind) - ) - } - - /** - * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, - * that node is its successor in the new successor relation, and the Chi node's successors are - * the new instructions generated from the successors of the old instruction. - * - * Furthermore, the entry block is augmented with `UninitializedGroup` instructions and `Chi` - * instructions. For example, consider this example: - * ```cpp - * int x, y; - * int* p; - * if(b) { - * p = &x; - * escape(&x); - * } else { - * p = &y; - * } - * *p = 42; - * - * int z, w; - * int* q; - * if(b) { - * q = &z; - * } else { - * q = &w; - * } - * *q = 43; - * ``` - * - * the unaliased IR for the entry block of this snippet is: - * ``` - * v1(void) = EnterFunction : - * m1(unknown) = AliasedDefinition : - * m2(unknown) = InitializeNonLocal : - * r1(glval) = VariableAddress[b] : - * m3(bool) = InitializeParameter[b] : &:r1 - * r2(glval) = VariableAddress[x] : - * m4(int) = Uninitialized[x] : &:r2 - * r3(glval) = VariableAddress[y] : - * m5(int) = Uninitialized[y] : &:r3 - * r4(glval) = VariableAddress[p] : - * m6(int *) = Uninitialized[p] : &:r4 - * r5(glval) = VariableAddress[b] : - * r6(bool) = Load[b] : &:r5, m3 - * v2(void) = ConditionalBranch : r6 - * ``` - * and we need to transform this to aliased IR by inserting an `UninitializedGroup` - * instruction for every `VariableGroup` memory location in the function. Furthermore, - * if the `VariableGroup` memory location contains an allocation that escapes we need - * to insert a `Chi` that writes the memory produced by `UninitializedGroup` into - * `{AllAliasedMemory}`. For the above snippet we then end up with: - * ``` - * v1(void) = EnterFunction : - * m2(unknown) = AliasedDefinition : - * m3(unknown) = InitializeNonLocal : - * m4(unknown) = Chi : total:m2, partial:m3 - * m5(int) = UninitializedGroup[x,y] : - * m6(unknown) = Chi : total:m4, partial:m5 - * m7(int) = UninitializedGroup[w,z] : - * r1(glval) = VariableAddress[b] : - * m8(bool) = InitializeParameter[b] : &:r1 - * r2(glval) = VariableAddress[x] : - * m10(int) = Uninitialized[x] : &:r2 - * m11(unknown) = Chi : total:m6, partial:m10 - * r3(glval) = VariableAddress[y] : - * m12(int) = Uninitialized[y] : &:r3 - * m13(unknown) = Chi : total:m11, partial:m12 - * r4(glval) = VariableAddress[p] : - * m14(int *) = Uninitialized[p] : &:r4 - * r5(glval) = VariableAddress[b] : - * r6(bool) = Load[b] : &:r5, m8 - * v2(void) = ConditionalBranch : r6 - * ``` - * - * Here, the group `{x, y}` contains an allocation that escapes (`x`), so there - * is a `Chi` after the `UninitializedGroup` that initializes the memory for the - * `VariableGroup` containing `x`. None of the allocations in `{w, z}` escape so - * there is no `Chi` following that the `UninitializedGroup` that initializes the - * memory of `{w, z}`. - */ - cached - Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { - result = firstInstructionToUninitializedGroup(instruction, kind) - or - result = getNextUninitializedGroupInstruction(instruction, kind) - or - result = getInstructionSuccessorAfterUninitializedGroup(instruction, kind) - or - not isFirstInstructionBeforeUninitializedGroup(instruction, _) and - result = getInstructionSuccessorAfterUninitializedGroup0(instruction, kind) - } - cached Instruction getInstructionBackEdgeSuccessor(Instruction instruction, EdgeKind kind) { exists(OldInstruction oldInstruction | @@ -618,16 +400,6 @@ private module Cached { exists(IRFunctionBase irFunc | instr = unreachedInstruction(irFunc) and result = irFunc.getFunction() ) - or - exists(Alias::VariableGroup vg | - instr = uninitializedGroup(vg) and - result = vg.getIRFunction().getFunction() - ) - or - exists(UninitializedGroupInstruction initGroup | - instr = chiInstruction(initGroup) and - result = getInstructionAst(initGroup) - ) } cached @@ -645,11 +417,6 @@ private module Cached { hasChiNode(vvar, primaryInstr) ) or - exists(Alias::VariableGroup vg | - instr = uninitializedGroup(vg) and - result = vg.getType() - ) - or instr = reusedPhiInstruction(_) and result = instr.(OldInstruction).getResultLanguageType() or @@ -675,8 +442,6 @@ private module Cached { or instr = chiInstruction(_) and opcode instanceof Opcode::Chi or - instr = uninitializedGroup(_) and opcode instanceof Opcode::UninitializedGroup - or instr = unreachedInstruction(_) and opcode instanceof Opcode::Unreached } @@ -693,11 +458,6 @@ private module Cached { instr = chiInstruction(primaryInstr) and result = primaryInstr.getEnclosingIRFunction() ) or - exists(Alias::VariableGroup vg | - instr = uninitializedGroup(vg) and - result = vg.getIRFunction() - ) - or instr = unreachedInstruction(result) } @@ -712,8 +472,6 @@ private module Cached { instruction = getChi(oldInstruction) and result = getNewInstruction(oldInstruction) ) - or - instruction = getChi(result.(UninitializedGroupInstruction)) } /** @@ -926,12 +684,7 @@ module DefUse { i = block.getInstruction(index) and entryBlock = func.getEntryBlock() | - if - block = entryBlock and - not i instanceof InitializeNonLocalInstruction and - not i instanceof AliasedDefinitionInstruction - then result = 2 * (index + count(VariableGroup vg | vg.getIRFunction() = func)) - else result = 2 * index + result = 2 * index ) } @@ -942,7 +695,7 @@ module DefUse { /** * Gets the `Instruction` for the definition at offset `defOffset` in block `defBlock`. */ - private Instruction getDefinitionOrChiInstruction0( + Instruction getDefinitionOrChiInstruction( OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, Alias::MemoryLocation actualDefLocation ) { @@ -972,29 +725,6 @@ module DefUse { actualDefLocation = defLocation } - private ChiInstruction remapGetDefinitionOrChiInstruction(Instruction oldResult) { - exists(IRFunction func | - isFirstInstructionBeforeUninitializedGroup(oldResult, func) and - isLastInstructionForUninitializedGroups(result, func) - ) - } - - Instruction getDefinitionOrChiInstruction( - OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, - Alias::MemoryLocation actualDefLocation - ) { - exists(Instruction oldResult | - oldResult = - getDefinitionOrChiInstruction0(defBlock, defOffset, defLocation, actualDefLocation) and - ( - result = remapGetDefinitionOrChiInstruction(oldResult) - or - not exists(remapGetDefinitionOrChiInstruction(oldResult)) and - result = oldResult - ) - ) - } - /** * Gets the rank index of a hypothetical use one instruction past the end of * the block. This index can be used to determine if a definition reaches the @@ -1350,6 +1080,4 @@ module Ssa { predicate hasChiInstruction = Cached::hasChiInstructionCached/1; predicate hasUnreachedInstruction = Cached::hasUnreachedInstructionCached/1; - - class VariableGroup = Alias::VariableGroup; } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll index b94794920b4f..611a170c1a60 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll @@ -77,20 +77,6 @@ class MemoryLocation0 = MemoryLocation; predicate canReuseSsaForOldResult(Instruction instr) { none() } -abstract class VariableGroup extends Unit { - abstract Allocation getAnAllocation(); - - string toString() { result = "{" + strictconcat(this.getAnAllocation().toString(), ", ") + "}" } - - abstract Language::Location getLocation(); - - abstract IRFunction getIRFunction(); - - abstract Language::LanguageType getType(); - - abstract int getInitializationOrder(); -} - /** * Represents a set of `MemoryLocation`s that cannot overlap with * `MemoryLocation`s outside of the set. The `VirtualVariable` will be