From cd5f3b84a8a9b62100ef4f697fa9740b911083ab Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Mon, 23 Sep 2019 14:51:59 +0200 Subject: [PATCH 1/5] C++: Make sure there's a Instruction for each Expr This change ensures that all `Expr`s (except parentheses) have a `TranslatedExpr` with a `getResult` that's one of its own instructions, not an instruction from one of its operands. This means that when we translate back and forth between `Expr` and `Instruction`, like in `DataFlow::exprNode`, we will not conflate `e` with `&e` or `... = e`. --- .../raw/internal/InstructionTag.qll | 1 + .../raw/internal/TranslatedElement.qll | 10 + .../raw/internal/TranslatedExpr.qll | 94 +- .../ir/escape/points_to.expected | 58 + .../test/library-tests/ir/ir/raw_ir.expected | 3207 +++++++++-------- .../ir/ssa/aliased_ssa_ir.expected | 141 +- .../ir/ssa/unaliased_ssa_ir.expected | 131 +- 7 files changed, 2072 insertions(+), 1570 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll index ddac5692cdf..c18ff827992 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll @@ -44,6 +44,7 @@ newtype TInstructionTag = ConditionValueResultLoadTag() or BoolConversionConstantTag() or BoolConversionCompareTag() or + ResultCopyTag() or LoadTag() or // Implicit load due to lvalue-to-rvalue conversion CatchTag() or ThrowTag() or diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 23d3036ca15..b9a6d4c737d 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -8,6 +8,7 @@ private import InstructionTag private import TranslatedCondition private import TranslatedFunction private import TranslatedStmt +private import TranslatedExpr private import IRConstruction /** @@ -235,6 +236,15 @@ newtype TTranslatedElement = expr.hasLValueToRValueConversion() and not ignoreLoad(expr) } or + TTranslatedResultCopy(Expr expr) { + not ignoreExpr(expr) and + exprNeedsCopyIfNotLoaded(expr) and + // Doesn't have a TTranslatedLoad + not ( + expr.hasLValueToRValueConversion() and + not ignoreLoad(expr) + ) + } or // An expression most naturally translated as control flow. TTranslatedNativeCondition(Expr expr) { not ignoreExpr(expr) and diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index fa8eeb36adb..e9e7cf59cb0 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -85,11 +85,14 @@ abstract class TranslatedCoreExpr extends TranslatedExpr { final override predicate producesExprResult() { // If there's no load, then this is the only TranslatedExpr for this // expression. - not expr.hasLValueToRValueConversion() - or - // If we're supposed to ignore the load on this expression, then this - // is the only TranslatedExpr. - ignoreLoad(expr) + not hasLoad() and + // If there's a result copy, then this expression's result is the copy. + not exprNeedsCopyIfNotLoaded(expr) + } + + private predicate hasLoad() { + expr.hasLValueToRValueConversion() and + not ignoreLoad(expr) } /** @@ -106,7 +109,7 @@ abstract class TranslatedCoreExpr extends TranslatedExpr { or // If this TranslatedExpr doesn't produce the result, then it must represent // a glvalue that is then loaded by a TranslatedLoad. - not producesExprResult() + hasLoad() then result = true else result = false } @@ -302,6 +305,51 @@ class TranslatedLoad extends TranslatedExpr, TTranslatedLoad { private TranslatedCoreExpr getOperand() { result.getExpr() = expr } } +/** + * IR translation of an implicit lvalue-to-rvalue conversion on the result of + * an expression. + */ +class TranslatedResultCopy extends TranslatedExpr, TTranslatedResultCopy { + TranslatedResultCopy() { this = TTranslatedResultCopy(expr) } + + override string toString() { result = "Result of " + expr.toString() } + + override Instruction getFirstInstruction() { result = getOperand().getFirstInstruction() } + + override TranslatedElement getChild(int id) { id = 0 and result = getOperand() } + + override predicate hasInstruction( + Opcode opcode, InstructionTag tag, Type resultType, boolean isGLValue + ) { + tag = ResultCopyTag() and + opcode instanceof Opcode::CopyValue and + resultType = getOperand().getResultType() and + isGLValue = getOperand().isResultGLValue() + } + + override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { + tag = ResultCopyTag() and + result = getParent().getChildSuccessor(this) and + kind instanceof GotoEdge + } + + override Instruction getChildSuccessor(TranslatedElement child) { + child = getOperand() and result = getInstruction(ResultCopyTag()) + } + + override Instruction getResult() { result = getInstruction(ResultCopyTag()) } + + override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { + tag = ResultCopyTag() and + operandTag instanceof UnaryOperandTag and + result = getOperand().getResult() + } + + final override predicate producesExprResult() { any() } + + private TranslatedCoreExpr getOperand() { result.getExpr() = expr } +} + class TranslatedCommaExpr extends TranslatedNonConstantExpr { override CommaExpr expr; @@ -2485,3 +2533,37 @@ class TranslatedErrorExpr extends TranslatedSingleInstructionExpr { final override Opcode getOpcode() { result instanceof Opcode::Error } } + +/** + * Holds if the translation of `expr` will not directly generate any + * `Instruction` for use as result. For such instructions we can synthesize a + * `CopyValue` instruction to ensure that there is a 1-to-1 mapping between + * expressions and result-bearing instructions. + */ +// This should ideally be a dispatch predicate on TranslatedNonConstantExpr, +// but it doesn't look monotonic to QL. +predicate exprNeedsCopyIfNotLoaded(Expr expr) { + expr instanceof AssignExpr + or + expr instanceof AssignOperation and + not expr.isPRValueCategory() // is C++ + or + expr instanceof PrefixCrementOperation and + not expr.isPRValueCategory() // is C++ + or + expr instanceof PointerDereferenceExpr + or + expr instanceof AddressOfExpr + or + expr instanceof BuiltInOperationBuiltInAddressOf + // No case for ParenthesisExpr to avoid getting too many instructions + or + expr instanceof ReferenceDereferenceExpr + or + expr instanceof ReferenceToExpr + or + expr instanceof CommaExpr + or + expr instanceof ConditionDeclExpr + // TODO: simplify TranslatedStmtExpr too +} diff --git a/cpp/ql/test/library-tests/ir/escape/points_to.expected b/cpp/ql/test/library-tests/ir/escape/points_to.expected index f40460f4d91..e6fefda7bb5 100644 --- a/cpp/ql/test/library-tests/ir/escape/points_to.expected +++ b/cpp/ql/test/library-tests/ir/escape/points_to.expected @@ -1,47 +1,105 @@ +| escape.cpp:108:5:108:11 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:109:5:109:13 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:110:5:110:19 | CopyValue | no_result+0:0 | no_result+0:0 | +| escape.cpp:111:5:111:21 | CopyValue | no_result+0:0 | no_result+0:0 | +| escape.cpp:111:18:111:21 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:114:5:114:8 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:115:5:115:29 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:115:19:115:28 | PointerAdd[4] | no_+0:0 | no_+0:0 | +| escape.cpp:115:20:115:23 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:116:5:116:29 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:116:19:116:28 | PointerSub[4] | no_+0:0 | no_+0:0 | +| escape.cpp:116:20:116:23 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:117:5:117:27 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:117:19:117:26 | PointerAdd[4] | no_+0:0 | no_+0:0 | +| escape.cpp:117:23:117:26 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:118:9:118:12 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:120:12:120:15 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:123:14:123:17 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:124:9:124:12 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:124:15:124:18 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:124:21:124:24 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:127:9:127:12 | CopyValue | no_+0:0 | no_+0:0 | +| escape.cpp:129:12:129:15 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:134:5:134:18 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:134:11:134:18 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:135:5:135:12 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:135:5:135:15 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | | escape.cpp:136:5:136:15 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | | escape.cpp:136:7:136:14 | Convert | no_Array+0:0 | no_Array+0:0 | +| escape.cpp:137:5:137:27 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:137:17:137:24 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:137:17:137:27 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | +| escape.cpp:138:5:138:27 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:138:17:138:27 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | | escape.cpp:138:19:138:26 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:140:21:140:32 | FieldAddress[x] | no_Point+0:0 | no_Point+0:0 | | escape.cpp:140:21:140:32 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | | escape.cpp:140:21:140:32 | FieldAddress[z] | no_Point+8:0 | no_Point+8:0 | | escape.cpp:141:27:141:27 | FieldAddress[x] | no_Point+0:0 | no_Point+0:0 | +| escape.cpp:142:5:142:21 | CopyValue | no_Point+4:0 | no_Point+4:0 | | escape.cpp:142:14:142:14 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | +| escape.cpp:143:19:143:27 | CopyValue | no_Point+0:0 | no_Point+0:0 | | escape.cpp:143:31:143:31 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | +| escape.cpp:144:5:144:25 | CopyValue | no_Point+4:0 | no_Point+4:0 | +| escape.cpp:144:6:144:14 | CopyValue | no_Point+0:0 | no_Point+0:0 | | escape.cpp:144:18:144:18 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | +| escape.cpp:145:20:145:30 | CopyValue | no_Point+8:0 | no_Point+8:0 | | escape.cpp:145:30:145:30 | FieldAddress[z] | no_Point+8:0 | no_Point+8:0 | +| escape.cpp:146:5:146:18 | CopyValue | no_Point+8:0 | no_Point+8:0 | +| escape.cpp:146:5:146:25 | CopyValue | no_Point+8:0 | no_Point+8:0 | +| escape.cpp:146:7:146:17 | CopyValue | no_Point+8:0 | no_Point+8:0 | | escape.cpp:146:17:146:17 | FieldAddress[z] | no_Point+8:0 | no_Point+8:0 | | escape.cpp:149:5:149:14 | ConvertToBase[Derived : Intermediate1] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:149:5:149:14 | ConvertToBase[Intermediate1 : Base] | no_Derived+0:0 | no_Derived+0:0 | +| escape.cpp:149:5:149:20 | CopyValue | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:149:16:149:16 | FieldAddress[b] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:150:18:150:27 | ConvertToBase[Derived : Intermediate1] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:150:18:150:27 | ConvertToBase[Intermediate1 : Base] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:150:29:150:29 | FieldAddress[b] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:151:5:151:14 | ConvertToBase[Derived : Intermediate2] | no_Derived+12:0 | no_Derived+12:0 | +| escape.cpp:151:5:151:21 | CopyValue | no_Derived+16:0 | no_Derived+16:0 | | escape.cpp:151:16:151:17 | FieldAddress[i2] | no_Derived+16:0 | no_Derived+16:0 | | escape.cpp:152:19:152:28 | ConvertToBase[Derived : Intermediate2] | no_Derived+12:0 | no_Derived+12:0 | | escape.cpp:152:30:152:31 | FieldAddress[i2] | no_Derived+16:0 | no_Derived+16:0 | +| escape.cpp:155:17:155:30 | CopyValue | no_ssa_addrOf+0:0 | no_ssa_addrOf+0:0 | | escape.cpp:155:17:155:30 | Store | no_ssa_addrOf+0:0 | no_ssa_addrOf+0:0 | +| escape.cpp:158:17:158:28 | CopyValue | no_ssa_refTo+0:0 | no_ssa_refTo+0:0 | | escape.cpp:158:17:158:28 | Store | no_ssa_refTo+0:0 | no_ssa_refTo+0:0 | | escape.cpp:161:19:161:42 | Convert | no_ssa_refToArrayElement+0:0 | no_ssa_refToArrayElement+0:0 | +| escape.cpp:161:19:161:45 | CopyValue | no_ssa_refToArrayElement+20:0 | no_ssa_refToArrayElement+20:0 | | escape.cpp:161:19:161:45 | PointerAdd[4] | no_ssa_refToArrayElement+20:0 | no_ssa_refToArrayElement+20:0 | | escape.cpp:161:19:161:45 | Store | no_ssa_refToArrayElement+20:0 | no_ssa_refToArrayElement+20:0 | +| escape.cpp:164:24:164:40 | CopyValue | no_ssa_refToArray+0:0 | no_ssa_refToArray+0:0 | | escape.cpp:164:24:164:40 | Store | no_ssa_refToArray+0:0 | no_ssa_refToArray+0:0 | +| escape.cpp:167:19:167:28 | CopyValue | passByPtr+0:0 | passByPtr+0:0 | +| escape.cpp:170:21:170:29 | CopyValue | passByRef+0:0 | passByRef+0:0 | +| escape.cpp:173:22:173:38 | CopyValue | no_ssa_passByPtr+0:0 | no_ssa_passByPtr+0:0 | +| escape.cpp:176:24:176:39 | CopyValue | no_ssa_passByRef+0:0 | no_ssa_passByRef+0:0 | +| escape.cpp:179:22:179:42 | CopyValue | no_ssa_passByPtr_ret+0:0 | no_ssa_passByPtr_ret+0:0 | +| escape.cpp:182:24:182:43 | CopyValue | no_ssa_passByRef_ret+0:0 | no_ssa_passByRef_ret+0:0 | +| escape.cpp:185:30:185:40 | CopyValue | passByPtr2+0:0 | passByPtr2+0:0 | +| escape.cpp:188:32:188:41 | CopyValue | passByRef2+0:0 | passByRef2+0:0 | | escape.cpp:191:30:191:42 | Call | none | passByPtr3+0:0 | +| escape.cpp:191:44:191:54 | CopyValue | passByPtr3+0:0 | passByPtr3+0:0 | | escape.cpp:194:32:194:46 | Call | none | passByRef3+0:0 | +| escape.cpp:194:32:194:59 | CopyValue | none | passByRef3+0:0 | +| escape.cpp:194:48:194:57 | CopyValue | passByRef3+0:0 | passByRef3+0:0 | +| escape.cpp:199:17:199:34 | CopyValue | no_ssa_passByPtr4+0:0 | no_ssa_passByPtr4+0:0 | +| escape.cpp:199:37:199:54 | CopyValue | no_ssa_passByPtr5+0:0 | no_ssa_passByPtr5+0:0 | | escape.cpp:202:5:202:19 | Call | none | passByRef6+0:0 | +| escape.cpp:202:5:202:32 | CopyValue | none | passByRef6+0:0 | +| escape.cpp:202:21:202:30 | CopyValue | passByRef6+0:0 | passByRef6+0:0 | | escape.cpp:205:5:205:19 | Call | none | no_ssa_passByRef7+0:0 | +| escape.cpp:205:5:205:39 | CopyValue | none | no_ssa_passByRef7+0:0 | +| escape.cpp:205:21:205:37 | CopyValue | no_ssa_passByRef7+0:0 | no_ssa_passByRef7+0:0 | | escape.cpp:209:14:209:25 | Call | none | no_ssa_c+0:0 | +| escape.cpp:217:14:217:16 | CopyValue | c2+0:0 | c2+0:0 | | escape.cpp:221:8:221:19 | Call | none | c3+0:0 | | escape.cpp:225:17:225:28 | Call | none | c4+0:0 | +| escape.cpp:247:2:247:27 | CopyValue | no_condTemp+0:0 | no_condTemp+0:0 | | escape.cpp:247:2:247:27 | Store | condEscape1+0:0 | condEscape1+0:0 | +| escape.cpp:247:16:247:27 | CopyValue | condEscape1+0:0 | condEscape1+0:0 | +| escape.cpp:249:9:249:34 | CopyValue | no_condTemp+0:0 | no_condTemp+0:0 | | escape.cpp:249:9:249:34 | Store | condEscape2+0:0 | condEscape2+0:0 | +| escape.cpp:249:23:249:34 | CopyValue | condEscape2+0:0 | condEscape2+0:0 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 20f15e4f772..788e4a72663 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -40,13 +40,14 @@ bad_asts.cpp: # 27| r0_5(glval) = VariableAddress[b] : # 27| r0_6(glval) = VariableAddress[a] : # 27| r0_7(Point &) = Load : &:r0_6, ~mu0_2 -# 27| r0_8(glval) = Convert : r0_7 -# 27| r0_9(Point) = Load : &:r0_8, ~mu0_2 -# 27| mu0_10(Point) = Store : &:r0_5, r0_9 -# 28| v0_11(void) = NoOp : -# 26| v0_12(void) = ReturnVoid : -# 26| v0_13(void) = UnmodeledUse : mu* -# 26| v0_14(void) = ExitFunction : +# 27| r0_8(glval) = CopyValue : r0_7 +# 27| r0_9(glval) = Convert : r0_8 +# 27| r0_10(Point) = Load : &:r0_9, ~mu0_2 +# 27| mu0_11(Point) = Store : &:r0_5, r0_10 +# 28| v0_12(void) = NoOp : +# 26| v0_13(void) = ReturnVoid : +# 26| v0_14(void) = UnmodeledUse : mu* +# 26| v0_15(void) = ExitFunction : # 30| void Bad::errorExpr() # 30| Block 0 @@ -63,10 +64,11 @@ bad_asts.cpp: #-----| r0_10(error) = Load : &:r0_9, ~mu0_2 # 33| r0_11(glval) = VariableAddress[x] : # 33| mu0_12(int) = Store : &:r0_11, r0_10 -# 34| v0_13(void) = NoOp : -# 30| v0_14(void) = ReturnVoid : -# 30| v0_15(void) = UnmodeledUse : mu* -# 30| v0_16(void) = ExitFunction : +# 33| r0_13(glval) = CopyValue : r0_11 +# 34| v0_14(void) = NoOp : +# 30| v0_15(void) = ReturnVoid : +# 30| v0_16(void) = UnmodeledUse : mu* +# 30| v0_17(void) = ExitFunction : clang.cpp: # 5| int* globalIntAddress() @@ -76,11 +78,12 @@ clang.cpp: # 5| mu0_2(unknown) = UnmodeledDefinition : # 6| r0_3(glval) = VariableAddress[#return] : # 6| r0_4(glval) = VariableAddress[globalInt] : -# 6| mu0_5(int *) = Store : &:r0_3, r0_4 -# 5| r0_6(glval) = VariableAddress[#return] : -# 5| v0_7(void) = ReturnValue : &:r0_6, ~mu0_2 -# 5| v0_8(void) = UnmodeledUse : mu* -# 5| v0_9(void) = ExitFunction : +# 6| r0_5(int *) = CopyValue : r0_4 +# 6| mu0_6(int *) = Store : &:r0_3, r0_5 +# 5| r0_7(glval) = VariableAddress[#return] : +# 5| v0_8(void) = ReturnValue : &:r0_7, ~mu0_2 +# 5| v0_9(void) = UnmodeledUse : mu* +# 5| v0_10(void) = ExitFunction : ir.cpp: # 1| void Constants() @@ -197,18 +200,20 @@ ir.cpp: # 46| r0_15(short) = Convert : r0_14 # 46| r0_16(glval) = VariableAddress[y] : # 46| mu0_17(short) = Store : &:r0_16, r0_15 -# 47| r0_18(glval) = VariableAddress[x] : -# 47| r0_19(int) = Load : &:r0_18, ~mu0_2 -# 47| r0_20(glval) = VariableAddress[y] : -# 47| r0_21(short) = Load : &:r0_20, ~mu0_2 -# 47| r0_22(int) = Convert : r0_21 -# 47| r0_23(int) = Mul : r0_19, r0_22 -# 47| r0_24(glval) = VariableAddress[x] : -# 47| mu0_25(int) = Store : &:r0_24, r0_23 -# 48| v0_26(void) = NoOp : -# 43| v0_27(void) = ReturnVoid : -# 43| v0_28(void) = UnmodeledUse : mu* -# 43| v0_29(void) = ExitFunction : +# 46| r0_18(glval) = CopyValue : r0_16 +# 47| r0_19(glval) = VariableAddress[x] : +# 47| r0_20(int) = Load : &:r0_19, ~mu0_2 +# 47| r0_21(glval) = VariableAddress[y] : +# 47| r0_22(short) = Load : &:r0_21, ~mu0_2 +# 47| r0_23(int) = Convert : r0_22 +# 47| r0_24(int) = Mul : r0_20, r0_23 +# 47| r0_25(glval) = VariableAddress[x] : +# 47| mu0_26(int) = Store : &:r0_25, r0_24 +# 47| r0_27(glval) = CopyValue : r0_25 +# 48| v0_28(void) = NoOp : +# 43| v0_29(void) = ReturnVoid : +# 43| v0_30(void) = UnmodeledUse : mu* +# 43| v0_31(void) = ExitFunction : # 50| void IntegerOps(int, int) # 50| Block 0 @@ -228,160 +233,185 @@ ir.cpp: # 53| r0_13(int) = Add : r0_10, r0_12 # 53| r0_14(glval) = VariableAddress[z] : # 53| mu0_15(int) = Store : &:r0_14, r0_13 -# 54| r0_16(glval) = VariableAddress[x] : -# 54| r0_17(int) = Load : &:r0_16, ~mu0_2 -# 54| r0_18(glval) = VariableAddress[y] : -# 54| r0_19(int) = Load : &:r0_18, ~mu0_2 -# 54| r0_20(int) = Sub : r0_17, r0_19 -# 54| r0_21(glval) = VariableAddress[z] : -# 54| mu0_22(int) = Store : &:r0_21, r0_20 -# 55| r0_23(glval) = VariableAddress[x] : -# 55| r0_24(int) = Load : &:r0_23, ~mu0_2 -# 55| r0_25(glval) = VariableAddress[y] : +# 53| r0_16(glval) = CopyValue : r0_14 +# 54| r0_17(glval) = VariableAddress[x] : +# 54| r0_18(int) = Load : &:r0_17, ~mu0_2 +# 54| r0_19(glval) = VariableAddress[y] : +# 54| r0_20(int) = Load : &:r0_19, ~mu0_2 +# 54| r0_21(int) = Sub : r0_18, r0_20 +# 54| r0_22(glval) = VariableAddress[z] : +# 54| mu0_23(int) = Store : &:r0_22, r0_21 +# 54| r0_24(glval) = CopyValue : r0_22 +# 55| r0_25(glval) = VariableAddress[x] : # 55| r0_26(int) = Load : &:r0_25, ~mu0_2 -# 55| r0_27(int) = Mul : r0_24, r0_26 -# 55| r0_28(glval) = VariableAddress[z] : -# 55| mu0_29(int) = Store : &:r0_28, r0_27 -# 56| r0_30(glval) = VariableAddress[x] : -# 56| r0_31(int) = Load : &:r0_30, ~mu0_2 -# 56| r0_32(glval) = VariableAddress[y] : -# 56| r0_33(int) = Load : &:r0_32, ~mu0_2 -# 56| r0_34(int) = Div : r0_31, r0_33 -# 56| r0_35(glval) = VariableAddress[z] : -# 56| mu0_36(int) = Store : &:r0_35, r0_34 -# 57| r0_37(glval) = VariableAddress[x] : -# 57| r0_38(int) = Load : &:r0_37, ~mu0_2 -# 57| r0_39(glval) = VariableAddress[y] : -# 57| r0_40(int) = Load : &:r0_39, ~mu0_2 -# 57| r0_41(int) = Rem : r0_38, r0_40 -# 57| r0_42(glval) = VariableAddress[z] : -# 57| mu0_43(int) = Store : &:r0_42, r0_41 -# 59| r0_44(glval) = VariableAddress[x] : -# 59| r0_45(int) = Load : &:r0_44, ~mu0_2 -# 59| r0_46(glval) = VariableAddress[y] : -# 59| r0_47(int) = Load : &:r0_46, ~mu0_2 -# 59| r0_48(int) = BitAnd : r0_45, r0_47 -# 59| r0_49(glval) = VariableAddress[z] : -# 59| mu0_50(int) = Store : &:r0_49, r0_48 -# 60| r0_51(glval) = VariableAddress[x] : -# 60| r0_52(int) = Load : &:r0_51, ~mu0_2 -# 60| r0_53(glval) = VariableAddress[y] : -# 60| r0_54(int) = Load : &:r0_53, ~mu0_2 -# 60| r0_55(int) = BitOr : r0_52, r0_54 -# 60| r0_56(glval) = VariableAddress[z] : -# 60| mu0_57(int) = Store : &:r0_56, r0_55 -# 61| r0_58(glval) = VariableAddress[x] : -# 61| r0_59(int) = Load : &:r0_58, ~mu0_2 -# 61| r0_60(glval) = VariableAddress[y] : -# 61| r0_61(int) = Load : &:r0_60, ~mu0_2 -# 61| r0_62(int) = BitXor : r0_59, r0_61 -# 61| r0_63(glval) = VariableAddress[z] : -# 61| mu0_64(int) = Store : &:r0_63, r0_62 -# 63| r0_65(glval) = VariableAddress[x] : -# 63| r0_66(int) = Load : &:r0_65, ~mu0_2 -# 63| r0_67(glval) = VariableAddress[y] : -# 63| r0_68(int) = Load : &:r0_67, ~mu0_2 -# 63| r0_69(int) = ShiftLeft : r0_66, r0_68 -# 63| r0_70(glval) = VariableAddress[z] : -# 63| mu0_71(int) = Store : &:r0_70, r0_69 -# 64| r0_72(glval) = VariableAddress[x] : -# 64| r0_73(int) = Load : &:r0_72, ~mu0_2 -# 64| r0_74(glval) = VariableAddress[y] : -# 64| r0_75(int) = Load : &:r0_74, ~mu0_2 -# 64| r0_76(int) = ShiftRight : r0_73, r0_75 -# 64| r0_77(glval) = VariableAddress[z] : -# 64| mu0_78(int) = Store : &:r0_77, r0_76 -# 66| r0_79(glval) = VariableAddress[x] : -# 66| r0_80(int) = Load : &:r0_79, ~mu0_2 -# 66| r0_81(glval) = VariableAddress[z] : -# 66| mu0_82(int) = Store : &:r0_81, r0_80 -# 68| r0_83(glval) = VariableAddress[x] : -# 68| r0_84(int) = Load : &:r0_83, ~mu0_2 -# 68| r0_85(glval) = VariableAddress[z] : -# 68| r0_86(int) = Load : &:r0_85, ~mu0_2 -# 68| r0_87(int) = Add : r0_86, r0_84 -# 68| mu0_88(int) = Store : &:r0_85, r0_87 -# 69| r0_89(glval) = VariableAddress[x] : -# 69| r0_90(int) = Load : &:r0_89, ~mu0_2 -# 69| r0_91(glval) = VariableAddress[z] : -# 69| r0_92(int) = Load : &:r0_91, ~mu0_2 -# 69| r0_93(int) = Sub : r0_92, r0_90 -# 69| mu0_94(int) = Store : &:r0_91, r0_93 -# 70| r0_95(glval) = VariableAddress[x] : -# 70| r0_96(int) = Load : &:r0_95, ~mu0_2 -# 70| r0_97(glval) = VariableAddress[z] : -# 70| r0_98(int) = Load : &:r0_97, ~mu0_2 -# 70| r0_99(int) = Mul : r0_98, r0_96 -# 70| mu0_100(int) = Store : &:r0_97, r0_99 -# 71| r0_101(glval) = VariableAddress[x] : -# 71| r0_102(int) = Load : &:r0_101, ~mu0_2 -# 71| r0_103(glval) = VariableAddress[z] : -# 71| r0_104(int) = Load : &:r0_103, ~mu0_2 -# 71| r0_105(int) = Div : r0_104, r0_102 -# 71| mu0_106(int) = Store : &:r0_103, r0_105 -# 72| r0_107(glval) = VariableAddress[x] : -# 72| r0_108(int) = Load : &:r0_107, ~mu0_2 -# 72| r0_109(glval) = VariableAddress[z] : -# 72| r0_110(int) = Load : &:r0_109, ~mu0_2 -# 72| r0_111(int) = Rem : r0_110, r0_108 -# 72| mu0_112(int) = Store : &:r0_109, r0_111 -# 74| r0_113(glval) = VariableAddress[x] : -# 74| r0_114(int) = Load : &:r0_113, ~mu0_2 -# 74| r0_115(glval) = VariableAddress[z] : -# 74| r0_116(int) = Load : &:r0_115, ~mu0_2 -# 74| r0_117(int) = BitAnd : r0_116, r0_114 -# 74| mu0_118(int) = Store : &:r0_115, r0_117 -# 75| r0_119(glval) = VariableAddress[x] : -# 75| r0_120(int) = Load : &:r0_119, ~mu0_2 -# 75| r0_121(glval) = VariableAddress[z] : -# 75| r0_122(int) = Load : &:r0_121, ~mu0_2 -# 75| r0_123(int) = BitOr : r0_122, r0_120 -# 75| mu0_124(int) = Store : &:r0_121, r0_123 -# 76| r0_125(glval) = VariableAddress[x] : -# 76| r0_126(int) = Load : &:r0_125, ~mu0_2 -# 76| r0_127(glval) = VariableAddress[z] : -# 76| r0_128(int) = Load : &:r0_127, ~mu0_2 -# 76| r0_129(int) = BitXor : r0_128, r0_126 -# 76| mu0_130(int) = Store : &:r0_127, r0_129 -# 78| r0_131(glval) = VariableAddress[x] : -# 78| r0_132(int) = Load : &:r0_131, ~mu0_2 -# 78| r0_133(glval) = VariableAddress[z] : -# 78| r0_134(int) = Load : &:r0_133, ~mu0_2 -# 78| r0_135(int) = ShiftLeft : r0_134, r0_132 -# 78| mu0_136(int) = Store : &:r0_133, r0_135 -# 79| r0_137(glval) = VariableAddress[x] : -# 79| r0_138(int) = Load : &:r0_137, ~mu0_2 -# 79| r0_139(glval) = VariableAddress[z] : -# 79| r0_140(int) = Load : &:r0_139, ~mu0_2 -# 79| r0_141(int) = ShiftRight : r0_140, r0_138 -# 79| mu0_142(int) = Store : &:r0_139, r0_141 -# 81| r0_143(glval) = VariableAddress[x] : -# 81| r0_144(int) = Load : &:r0_143, ~mu0_2 -# 81| r0_145(int) = CopyValue : r0_144 -# 81| r0_146(glval) = VariableAddress[z] : -# 81| mu0_147(int) = Store : &:r0_146, r0_145 -# 82| r0_148(glval) = VariableAddress[x] : -# 82| r0_149(int) = Load : &:r0_148, ~mu0_2 -# 82| r0_150(int) = Negate : r0_149 -# 82| r0_151(glval) = VariableAddress[z] : -# 82| mu0_152(int) = Store : &:r0_151, r0_150 -# 83| r0_153(glval) = VariableAddress[x] : -# 83| r0_154(int) = Load : &:r0_153, ~mu0_2 -# 83| r0_155(int) = BitComplement : r0_154 -# 83| r0_156(glval) = VariableAddress[z] : -# 83| mu0_157(int) = Store : &:r0_156, r0_155 -# 84| r0_158(glval) = VariableAddress[x] : -# 84| r0_159(int) = Load : &:r0_158, ~mu0_2 -# 84| r0_160(int) = Constant[0] : -# 84| r0_161(bool) = CompareNE : r0_159, r0_160 -# 84| r0_162(bool) = LogicalNot : r0_161 -# 84| r0_163(int) = Convert : r0_162 -# 84| r0_164(glval) = VariableAddress[z] : -# 84| mu0_165(int) = Store : &:r0_164, r0_163 -# 85| v0_166(void) = NoOp : -# 50| v0_167(void) = ReturnVoid : -# 50| v0_168(void) = UnmodeledUse : mu* -# 50| v0_169(void) = ExitFunction : +# 55| r0_27(glval) = VariableAddress[y] : +# 55| r0_28(int) = Load : &:r0_27, ~mu0_2 +# 55| r0_29(int) = Mul : r0_26, r0_28 +# 55| r0_30(glval) = VariableAddress[z] : +# 55| mu0_31(int) = Store : &:r0_30, r0_29 +# 55| r0_32(glval) = CopyValue : r0_30 +# 56| r0_33(glval) = VariableAddress[x] : +# 56| r0_34(int) = Load : &:r0_33, ~mu0_2 +# 56| r0_35(glval) = VariableAddress[y] : +# 56| r0_36(int) = Load : &:r0_35, ~mu0_2 +# 56| r0_37(int) = Div : r0_34, r0_36 +# 56| r0_38(glval) = VariableAddress[z] : +# 56| mu0_39(int) = Store : &:r0_38, r0_37 +# 56| r0_40(glval) = CopyValue : r0_38 +# 57| r0_41(glval) = VariableAddress[x] : +# 57| r0_42(int) = Load : &:r0_41, ~mu0_2 +# 57| r0_43(glval) = VariableAddress[y] : +# 57| r0_44(int) = Load : &:r0_43, ~mu0_2 +# 57| r0_45(int) = Rem : r0_42, r0_44 +# 57| r0_46(glval) = VariableAddress[z] : +# 57| mu0_47(int) = Store : &:r0_46, r0_45 +# 57| r0_48(glval) = CopyValue : r0_46 +# 59| r0_49(glval) = VariableAddress[x] : +# 59| r0_50(int) = Load : &:r0_49, ~mu0_2 +# 59| r0_51(glval) = VariableAddress[y] : +# 59| r0_52(int) = Load : &:r0_51, ~mu0_2 +# 59| r0_53(int) = BitAnd : r0_50, r0_52 +# 59| r0_54(glval) = VariableAddress[z] : +# 59| mu0_55(int) = Store : &:r0_54, r0_53 +# 59| r0_56(glval) = CopyValue : r0_54 +# 60| r0_57(glval) = VariableAddress[x] : +# 60| r0_58(int) = Load : &:r0_57, ~mu0_2 +# 60| r0_59(glval) = VariableAddress[y] : +# 60| r0_60(int) = Load : &:r0_59, ~mu0_2 +# 60| r0_61(int) = BitOr : r0_58, r0_60 +# 60| r0_62(glval) = VariableAddress[z] : +# 60| mu0_63(int) = Store : &:r0_62, r0_61 +# 60| r0_64(glval) = CopyValue : r0_62 +# 61| r0_65(glval) = VariableAddress[x] : +# 61| r0_66(int) = Load : &:r0_65, ~mu0_2 +# 61| r0_67(glval) = VariableAddress[y] : +# 61| r0_68(int) = Load : &:r0_67, ~mu0_2 +# 61| r0_69(int) = BitXor : r0_66, r0_68 +# 61| r0_70(glval) = VariableAddress[z] : +# 61| mu0_71(int) = Store : &:r0_70, r0_69 +# 61| r0_72(glval) = CopyValue : r0_70 +# 63| r0_73(glval) = VariableAddress[x] : +# 63| r0_74(int) = Load : &:r0_73, ~mu0_2 +# 63| r0_75(glval) = VariableAddress[y] : +# 63| r0_76(int) = Load : &:r0_75, ~mu0_2 +# 63| r0_77(int) = ShiftLeft : r0_74, r0_76 +# 63| r0_78(glval) = VariableAddress[z] : +# 63| mu0_79(int) = Store : &:r0_78, r0_77 +# 63| r0_80(glval) = CopyValue : r0_78 +# 64| r0_81(glval) = VariableAddress[x] : +# 64| r0_82(int) = Load : &:r0_81, ~mu0_2 +# 64| r0_83(glval) = VariableAddress[y] : +# 64| r0_84(int) = Load : &:r0_83, ~mu0_2 +# 64| r0_85(int) = ShiftRight : r0_82, r0_84 +# 64| r0_86(glval) = VariableAddress[z] : +# 64| mu0_87(int) = Store : &:r0_86, r0_85 +# 64| r0_88(glval) = CopyValue : r0_86 +# 66| r0_89(glval) = VariableAddress[x] : +# 66| r0_90(int) = Load : &:r0_89, ~mu0_2 +# 66| r0_91(glval) = VariableAddress[z] : +# 66| mu0_92(int) = Store : &:r0_91, r0_90 +# 66| r0_93(glval) = CopyValue : r0_91 +# 68| r0_94(glval) = VariableAddress[x] : +# 68| r0_95(int) = Load : &:r0_94, ~mu0_2 +# 68| r0_96(glval) = VariableAddress[z] : +# 68| r0_97(int) = Load : &:r0_96, ~mu0_2 +# 68| r0_98(int) = Add : r0_97, r0_95 +# 68| mu0_99(int) = Store : &:r0_96, r0_98 +# 68| r0_100(glval) = CopyValue : r0_96 +# 69| r0_101(glval) = VariableAddress[x] : +# 69| r0_102(int) = Load : &:r0_101, ~mu0_2 +# 69| r0_103(glval) = VariableAddress[z] : +# 69| r0_104(int) = Load : &:r0_103, ~mu0_2 +# 69| r0_105(int) = Sub : r0_104, r0_102 +# 69| mu0_106(int) = Store : &:r0_103, r0_105 +# 69| r0_107(glval) = CopyValue : r0_103 +# 70| r0_108(glval) = VariableAddress[x] : +# 70| r0_109(int) = Load : &:r0_108, ~mu0_2 +# 70| r0_110(glval) = VariableAddress[z] : +# 70| r0_111(int) = Load : &:r0_110, ~mu0_2 +# 70| r0_112(int) = Mul : r0_111, r0_109 +# 70| mu0_113(int) = Store : &:r0_110, r0_112 +# 70| r0_114(glval) = CopyValue : r0_110 +# 71| r0_115(glval) = VariableAddress[x] : +# 71| r0_116(int) = Load : &:r0_115, ~mu0_2 +# 71| r0_117(glval) = VariableAddress[z] : +# 71| r0_118(int) = Load : &:r0_117, ~mu0_2 +# 71| r0_119(int) = Div : r0_118, r0_116 +# 71| mu0_120(int) = Store : &:r0_117, r0_119 +# 71| r0_121(glval) = CopyValue : r0_117 +# 72| r0_122(glval) = VariableAddress[x] : +# 72| r0_123(int) = Load : &:r0_122, ~mu0_2 +# 72| r0_124(glval) = VariableAddress[z] : +# 72| r0_125(int) = Load : &:r0_124, ~mu0_2 +# 72| r0_126(int) = Rem : r0_125, r0_123 +# 72| mu0_127(int) = Store : &:r0_124, r0_126 +# 72| r0_128(glval) = CopyValue : r0_124 +# 74| r0_129(glval) = VariableAddress[x] : +# 74| r0_130(int) = Load : &:r0_129, ~mu0_2 +# 74| r0_131(glval) = VariableAddress[z] : +# 74| r0_132(int) = Load : &:r0_131, ~mu0_2 +# 74| r0_133(int) = BitAnd : r0_132, r0_130 +# 74| mu0_134(int) = Store : &:r0_131, r0_133 +# 74| r0_135(glval) = CopyValue : r0_131 +# 75| r0_136(glval) = VariableAddress[x] : +# 75| r0_137(int) = Load : &:r0_136, ~mu0_2 +# 75| r0_138(glval) = VariableAddress[z] : +# 75| r0_139(int) = Load : &:r0_138, ~mu0_2 +# 75| r0_140(int) = BitOr : r0_139, r0_137 +# 75| mu0_141(int) = Store : &:r0_138, r0_140 +# 75| r0_142(glval) = CopyValue : r0_138 +# 76| r0_143(glval) = VariableAddress[x] : +# 76| r0_144(int) = Load : &:r0_143, ~mu0_2 +# 76| r0_145(glval) = VariableAddress[z] : +# 76| r0_146(int) = Load : &:r0_145, ~mu0_2 +# 76| r0_147(int) = BitXor : r0_146, r0_144 +# 76| mu0_148(int) = Store : &:r0_145, r0_147 +# 76| r0_149(glval) = CopyValue : r0_145 +# 78| r0_150(glval) = VariableAddress[x] : +# 78| r0_151(int) = Load : &:r0_150, ~mu0_2 +# 78| r0_152(glval) = VariableAddress[z] : +# 78| r0_153(int) = Load : &:r0_152, ~mu0_2 +# 78| r0_154(int) = ShiftLeft : r0_153, r0_151 +# 78| mu0_155(int) = Store : &:r0_152, r0_154 +# 78| r0_156(glval) = CopyValue : r0_152 +# 79| r0_157(glval) = VariableAddress[x] : +# 79| r0_158(int) = Load : &:r0_157, ~mu0_2 +# 79| r0_159(glval) = VariableAddress[z] : +# 79| r0_160(int) = Load : &:r0_159, ~mu0_2 +# 79| r0_161(int) = ShiftRight : r0_160, r0_158 +# 79| mu0_162(int) = Store : &:r0_159, r0_161 +# 79| r0_163(glval) = CopyValue : r0_159 +# 81| r0_164(glval) = VariableAddress[x] : +# 81| r0_165(int) = Load : &:r0_164, ~mu0_2 +# 81| r0_166(int) = CopyValue : r0_165 +# 81| r0_167(glval) = VariableAddress[z] : +# 81| mu0_168(int) = Store : &:r0_167, r0_166 +# 81| r0_169(glval) = CopyValue : r0_167 +# 82| r0_170(glval) = VariableAddress[x] : +# 82| r0_171(int) = Load : &:r0_170, ~mu0_2 +# 82| r0_172(int) = Negate : r0_171 +# 82| r0_173(glval) = VariableAddress[z] : +# 82| mu0_174(int) = Store : &:r0_173, r0_172 +# 82| r0_175(glval) = CopyValue : r0_173 +# 83| r0_176(glval) = VariableAddress[x] : +# 83| r0_177(int) = Load : &:r0_176, ~mu0_2 +# 83| r0_178(int) = BitComplement : r0_177 +# 83| r0_179(glval) = VariableAddress[z] : +# 83| mu0_180(int) = Store : &:r0_179, r0_178 +# 83| r0_181(glval) = CopyValue : r0_179 +# 84| r0_182(glval) = VariableAddress[x] : +# 84| r0_183(int) = Load : &:r0_182, ~mu0_2 +# 84| r0_184(int) = Constant[0] : +# 84| r0_185(bool) = CompareNE : r0_183, r0_184 +# 84| r0_186(bool) = LogicalNot : r0_185 +# 84| r0_187(int) = Convert : r0_186 +# 84| r0_188(glval) = VariableAddress[z] : +# 84| mu0_189(int) = Store : &:r0_188, r0_187 +# 84| r0_190(glval) = CopyValue : r0_188 +# 85| v0_191(void) = NoOp : +# 50| v0_192(void) = ReturnVoid : +# 50| v0_193(void) = UnmodeledUse : mu* +# 50| v0_194(void) = ExitFunction : # 87| void IntegerCompare(int, int) # 87| Block 0 @@ -401,45 +431,51 @@ ir.cpp: # 90| r0_13(bool) = CompareEQ : r0_10, r0_12 # 90| r0_14(glval) = VariableAddress[b] : # 90| mu0_15(bool) = Store : &:r0_14, r0_13 -# 91| r0_16(glval) = VariableAddress[x] : -# 91| r0_17(int) = Load : &:r0_16, ~mu0_2 -# 91| r0_18(glval) = VariableAddress[y] : -# 91| r0_19(int) = Load : &:r0_18, ~mu0_2 -# 91| r0_20(bool) = CompareNE : r0_17, r0_19 -# 91| r0_21(glval) = VariableAddress[b] : -# 91| mu0_22(bool) = Store : &:r0_21, r0_20 -# 92| r0_23(glval) = VariableAddress[x] : -# 92| r0_24(int) = Load : &:r0_23, ~mu0_2 -# 92| r0_25(glval) = VariableAddress[y] : +# 90| r0_16(glval) = CopyValue : r0_14 +# 91| r0_17(glval) = VariableAddress[x] : +# 91| r0_18(int) = Load : &:r0_17, ~mu0_2 +# 91| r0_19(glval) = VariableAddress[y] : +# 91| r0_20(int) = Load : &:r0_19, ~mu0_2 +# 91| r0_21(bool) = CompareNE : r0_18, r0_20 +# 91| r0_22(glval) = VariableAddress[b] : +# 91| mu0_23(bool) = Store : &:r0_22, r0_21 +# 91| r0_24(glval) = CopyValue : r0_22 +# 92| r0_25(glval) = VariableAddress[x] : # 92| r0_26(int) = Load : &:r0_25, ~mu0_2 -# 92| r0_27(bool) = CompareLT : r0_24, r0_26 -# 92| r0_28(glval) = VariableAddress[b] : -# 92| mu0_29(bool) = Store : &:r0_28, r0_27 -# 93| r0_30(glval) = VariableAddress[x] : -# 93| r0_31(int) = Load : &:r0_30, ~mu0_2 -# 93| r0_32(glval) = VariableAddress[y] : -# 93| r0_33(int) = Load : &:r0_32, ~mu0_2 -# 93| r0_34(bool) = CompareGT : r0_31, r0_33 -# 93| r0_35(glval) = VariableAddress[b] : -# 93| mu0_36(bool) = Store : &:r0_35, r0_34 -# 94| r0_37(glval) = VariableAddress[x] : -# 94| r0_38(int) = Load : &:r0_37, ~mu0_2 -# 94| r0_39(glval) = VariableAddress[y] : -# 94| r0_40(int) = Load : &:r0_39, ~mu0_2 -# 94| r0_41(bool) = CompareLE : r0_38, r0_40 -# 94| r0_42(glval) = VariableAddress[b] : -# 94| mu0_43(bool) = Store : &:r0_42, r0_41 -# 95| r0_44(glval) = VariableAddress[x] : -# 95| r0_45(int) = Load : &:r0_44, ~mu0_2 -# 95| r0_46(glval) = VariableAddress[y] : -# 95| r0_47(int) = Load : &:r0_46, ~mu0_2 -# 95| r0_48(bool) = CompareGE : r0_45, r0_47 -# 95| r0_49(glval) = VariableAddress[b] : -# 95| mu0_50(bool) = Store : &:r0_49, r0_48 -# 96| v0_51(void) = NoOp : -# 87| v0_52(void) = ReturnVoid : -# 87| v0_53(void) = UnmodeledUse : mu* -# 87| v0_54(void) = ExitFunction : +# 92| r0_27(glval) = VariableAddress[y] : +# 92| r0_28(int) = Load : &:r0_27, ~mu0_2 +# 92| r0_29(bool) = CompareLT : r0_26, r0_28 +# 92| r0_30(glval) = VariableAddress[b] : +# 92| mu0_31(bool) = Store : &:r0_30, r0_29 +# 92| r0_32(glval) = CopyValue : r0_30 +# 93| r0_33(glval) = VariableAddress[x] : +# 93| r0_34(int) = Load : &:r0_33, ~mu0_2 +# 93| r0_35(glval) = VariableAddress[y] : +# 93| r0_36(int) = Load : &:r0_35, ~mu0_2 +# 93| r0_37(bool) = CompareGT : r0_34, r0_36 +# 93| r0_38(glval) = VariableAddress[b] : +# 93| mu0_39(bool) = Store : &:r0_38, r0_37 +# 93| r0_40(glval) = CopyValue : r0_38 +# 94| r0_41(glval) = VariableAddress[x] : +# 94| r0_42(int) = Load : &:r0_41, ~mu0_2 +# 94| r0_43(glval) = VariableAddress[y] : +# 94| r0_44(int) = Load : &:r0_43, ~mu0_2 +# 94| r0_45(bool) = CompareLE : r0_42, r0_44 +# 94| r0_46(glval) = VariableAddress[b] : +# 94| mu0_47(bool) = Store : &:r0_46, r0_45 +# 94| r0_48(glval) = CopyValue : r0_46 +# 95| r0_49(glval) = VariableAddress[x] : +# 95| r0_50(int) = Load : &:r0_49, ~mu0_2 +# 95| r0_51(glval) = VariableAddress[y] : +# 95| r0_52(int) = Load : &:r0_51, ~mu0_2 +# 95| r0_53(bool) = CompareGE : r0_50, r0_52 +# 95| r0_54(glval) = VariableAddress[b] : +# 95| mu0_55(bool) = Store : &:r0_54, r0_53 +# 95| r0_56(glval) = CopyValue : r0_54 +# 96| v0_57(void) = NoOp : +# 87| v0_58(void) = ReturnVoid : +# 87| v0_59(void) = UnmodeledUse : mu* +# 87| v0_60(void) = ExitFunction : # 98| void IntegerCrement(int) # 98| Block 0 @@ -457,31 +493,35 @@ ir.cpp: # 101| mu0_11(int) = Store : &:r0_7, r0_10 # 101| r0_12(glval) = VariableAddress[y] : # 101| mu0_13(int) = Store : &:r0_12, r0_10 -# 102| r0_14(glval) = VariableAddress[x] : -# 102| r0_15(int) = Load : &:r0_14, ~mu0_2 -# 102| r0_16(int) = Constant[1] : -# 102| r0_17(int) = Sub : r0_15, r0_16 -# 102| mu0_18(int) = Store : &:r0_14, r0_17 -# 102| r0_19(glval) = VariableAddress[y] : -# 102| mu0_20(int) = Store : &:r0_19, r0_17 -# 103| r0_21(glval) = VariableAddress[x] : -# 103| r0_22(int) = Load : &:r0_21, ~mu0_2 -# 103| r0_23(int) = Constant[1] : -# 103| r0_24(int) = Add : r0_22, r0_23 -# 103| mu0_25(int) = Store : &:r0_21, r0_24 -# 103| r0_26(glval) = VariableAddress[y] : -# 103| mu0_27(int) = Store : &:r0_26, r0_22 -# 104| r0_28(glval) = VariableAddress[x] : -# 104| r0_29(int) = Load : &:r0_28, ~mu0_2 -# 104| r0_30(int) = Constant[1] : -# 104| r0_31(int) = Sub : r0_29, r0_30 -# 104| mu0_32(int) = Store : &:r0_28, r0_31 -# 104| r0_33(glval) = VariableAddress[y] : -# 104| mu0_34(int) = Store : &:r0_33, r0_29 -# 105| v0_35(void) = NoOp : -# 98| v0_36(void) = ReturnVoid : -# 98| v0_37(void) = UnmodeledUse : mu* -# 98| v0_38(void) = ExitFunction : +# 101| r0_14(glval) = CopyValue : r0_12 +# 102| r0_15(glval) = VariableAddress[x] : +# 102| r0_16(int) = Load : &:r0_15, ~mu0_2 +# 102| r0_17(int) = Constant[1] : +# 102| r0_18(int) = Sub : r0_16, r0_17 +# 102| mu0_19(int) = Store : &:r0_15, r0_18 +# 102| r0_20(glval) = VariableAddress[y] : +# 102| mu0_21(int) = Store : &:r0_20, r0_18 +# 102| r0_22(glval) = CopyValue : r0_20 +# 103| r0_23(glval) = VariableAddress[x] : +# 103| r0_24(int) = Load : &:r0_23, ~mu0_2 +# 103| r0_25(int) = Constant[1] : +# 103| r0_26(int) = Add : r0_24, r0_25 +# 103| mu0_27(int) = Store : &:r0_23, r0_26 +# 103| r0_28(glval) = VariableAddress[y] : +# 103| mu0_29(int) = Store : &:r0_28, r0_24 +# 103| r0_30(glval) = CopyValue : r0_28 +# 104| r0_31(glval) = VariableAddress[x] : +# 104| r0_32(int) = Load : &:r0_31, ~mu0_2 +# 104| r0_33(int) = Constant[1] : +# 104| r0_34(int) = Sub : r0_32, r0_33 +# 104| mu0_35(int) = Store : &:r0_31, r0_34 +# 104| r0_36(glval) = VariableAddress[y] : +# 104| mu0_37(int) = Store : &:r0_36, r0_32 +# 104| r0_38(glval) = CopyValue : r0_36 +# 105| v0_39(void) = NoOp : +# 98| v0_40(void) = ReturnVoid : +# 98| v0_41(void) = UnmodeledUse : mu* +# 98| v0_42(void) = ExitFunction : # 107| void IntegerCrement_LValue(int) # 107| Block 0 @@ -497,19 +537,25 @@ ir.cpp: # 110| r0_9(int) = Constant[1] : # 110| r0_10(int) = Add : r0_8, r0_9 # 110| mu0_11(int) = Store : &:r0_7, r0_10 -# 110| r0_12(glval) = VariableAddress[p] : -# 110| mu0_13(int *) = Store : &:r0_12, r0_7 -# 111| r0_14(glval) = VariableAddress[x] : -# 111| r0_15(int) = Load : &:r0_14, ~mu0_2 -# 111| r0_16(int) = Constant[1] : -# 111| r0_17(int) = Sub : r0_15, r0_16 -# 111| mu0_18(int) = Store : &:r0_14, r0_17 -# 111| r0_19(glval) = VariableAddress[p] : -# 111| mu0_20(int *) = Store : &:r0_19, r0_14 -# 112| v0_21(void) = NoOp : -# 107| v0_22(void) = ReturnVoid : -# 107| v0_23(void) = UnmodeledUse : mu* -# 107| v0_24(void) = ExitFunction : +# 110| r0_12(glval) = CopyValue : r0_7 +# 110| r0_13(int *) = CopyValue : r0_12 +# 110| r0_14(glval) = VariableAddress[p] : +# 110| mu0_15(int *) = Store : &:r0_14, r0_13 +# 110| r0_16(glval) = CopyValue : r0_14 +# 111| r0_17(glval) = VariableAddress[x] : +# 111| r0_18(int) = Load : &:r0_17, ~mu0_2 +# 111| r0_19(int) = Constant[1] : +# 111| r0_20(int) = Sub : r0_18, r0_19 +# 111| mu0_21(int) = Store : &:r0_17, r0_20 +# 111| r0_22(glval) = CopyValue : r0_17 +# 111| r0_23(int *) = CopyValue : r0_22 +# 111| r0_24(glval) = VariableAddress[p] : +# 111| mu0_25(int *) = Store : &:r0_24, r0_23 +# 111| r0_26(glval) = CopyValue : r0_24 +# 112| v0_27(void) = NoOp : +# 107| v0_28(void) = ReturnVoid : +# 107| v0_29(void) = UnmodeledUse : mu* +# 107| v0_30(void) = ExitFunction : # 114| void FloatOps(double, double) # 114| Block 0 @@ -529,69 +575,80 @@ ir.cpp: # 117| r0_13(double) = Add : r0_10, r0_12 # 117| r0_14(glval) = VariableAddress[z] : # 117| mu0_15(double) = Store : &:r0_14, r0_13 -# 118| r0_16(glval) = VariableAddress[x] : -# 118| r0_17(double) = Load : &:r0_16, ~mu0_2 -# 118| r0_18(glval) = VariableAddress[y] : -# 118| r0_19(double) = Load : &:r0_18, ~mu0_2 -# 118| r0_20(double) = Sub : r0_17, r0_19 -# 118| r0_21(glval) = VariableAddress[z] : -# 118| mu0_22(double) = Store : &:r0_21, r0_20 -# 119| r0_23(glval) = VariableAddress[x] : -# 119| r0_24(double) = Load : &:r0_23, ~mu0_2 -# 119| r0_25(glval) = VariableAddress[y] : +# 117| r0_16(glval) = CopyValue : r0_14 +# 118| r0_17(glval) = VariableAddress[x] : +# 118| r0_18(double) = Load : &:r0_17, ~mu0_2 +# 118| r0_19(glval) = VariableAddress[y] : +# 118| r0_20(double) = Load : &:r0_19, ~mu0_2 +# 118| r0_21(double) = Sub : r0_18, r0_20 +# 118| r0_22(glval) = VariableAddress[z] : +# 118| mu0_23(double) = Store : &:r0_22, r0_21 +# 118| r0_24(glval) = CopyValue : r0_22 +# 119| r0_25(glval) = VariableAddress[x] : # 119| r0_26(double) = Load : &:r0_25, ~mu0_2 -# 119| r0_27(double) = Mul : r0_24, r0_26 -# 119| r0_28(glval) = VariableAddress[z] : -# 119| mu0_29(double) = Store : &:r0_28, r0_27 -# 120| r0_30(glval) = VariableAddress[x] : -# 120| r0_31(double) = Load : &:r0_30, ~mu0_2 -# 120| r0_32(glval) = VariableAddress[y] : -# 120| r0_33(double) = Load : &:r0_32, ~mu0_2 -# 120| r0_34(double) = Div : r0_31, r0_33 -# 120| r0_35(glval) = VariableAddress[z] : -# 120| mu0_36(double) = Store : &:r0_35, r0_34 -# 122| r0_37(glval) = VariableAddress[x] : -# 122| r0_38(double) = Load : &:r0_37, ~mu0_2 -# 122| r0_39(glval) = VariableAddress[z] : -# 122| mu0_40(double) = Store : &:r0_39, r0_38 -# 124| r0_41(glval) = VariableAddress[x] : -# 124| r0_42(double) = Load : &:r0_41, ~mu0_2 -# 124| r0_43(glval) = VariableAddress[z] : -# 124| r0_44(double) = Load : &:r0_43, ~mu0_2 -# 124| r0_45(double) = Add : r0_44, r0_42 -# 124| mu0_46(double) = Store : &:r0_43, r0_45 -# 125| r0_47(glval) = VariableAddress[x] : -# 125| r0_48(double) = Load : &:r0_47, ~mu0_2 -# 125| r0_49(glval) = VariableAddress[z] : -# 125| r0_50(double) = Load : &:r0_49, ~mu0_2 -# 125| r0_51(double) = Sub : r0_50, r0_48 -# 125| mu0_52(double) = Store : &:r0_49, r0_51 -# 126| r0_53(glval) = VariableAddress[x] : -# 126| r0_54(double) = Load : &:r0_53, ~mu0_2 -# 126| r0_55(glval) = VariableAddress[z] : -# 126| r0_56(double) = Load : &:r0_55, ~mu0_2 -# 126| r0_57(double) = Mul : r0_56, r0_54 -# 126| mu0_58(double) = Store : &:r0_55, r0_57 -# 127| r0_59(glval) = VariableAddress[x] : -# 127| r0_60(double) = Load : &:r0_59, ~mu0_2 -# 127| r0_61(glval) = VariableAddress[z] : -# 127| r0_62(double) = Load : &:r0_61, ~mu0_2 -# 127| r0_63(double) = Div : r0_62, r0_60 -# 127| mu0_64(double) = Store : &:r0_61, r0_63 -# 129| r0_65(glval) = VariableAddress[x] : -# 129| r0_66(double) = Load : &:r0_65, ~mu0_2 -# 129| r0_67(double) = CopyValue : r0_66 -# 129| r0_68(glval) = VariableAddress[z] : -# 129| mu0_69(double) = Store : &:r0_68, r0_67 -# 130| r0_70(glval) = VariableAddress[x] : -# 130| r0_71(double) = Load : &:r0_70, ~mu0_2 -# 130| r0_72(double) = Negate : r0_71 -# 130| r0_73(glval) = VariableAddress[z] : -# 130| mu0_74(double) = Store : &:r0_73, r0_72 -# 131| v0_75(void) = NoOp : -# 114| v0_76(void) = ReturnVoid : -# 114| v0_77(void) = UnmodeledUse : mu* -# 114| v0_78(void) = ExitFunction : +# 119| r0_27(glval) = VariableAddress[y] : +# 119| r0_28(double) = Load : &:r0_27, ~mu0_2 +# 119| r0_29(double) = Mul : r0_26, r0_28 +# 119| r0_30(glval) = VariableAddress[z] : +# 119| mu0_31(double) = Store : &:r0_30, r0_29 +# 119| r0_32(glval) = CopyValue : r0_30 +# 120| r0_33(glval) = VariableAddress[x] : +# 120| r0_34(double) = Load : &:r0_33, ~mu0_2 +# 120| r0_35(glval) = VariableAddress[y] : +# 120| r0_36(double) = Load : &:r0_35, ~mu0_2 +# 120| r0_37(double) = Div : r0_34, r0_36 +# 120| r0_38(glval) = VariableAddress[z] : +# 120| mu0_39(double) = Store : &:r0_38, r0_37 +# 120| r0_40(glval) = CopyValue : r0_38 +# 122| r0_41(glval) = VariableAddress[x] : +# 122| r0_42(double) = Load : &:r0_41, ~mu0_2 +# 122| r0_43(glval) = VariableAddress[z] : +# 122| mu0_44(double) = Store : &:r0_43, r0_42 +# 122| r0_45(glval) = CopyValue : r0_43 +# 124| r0_46(glval) = VariableAddress[x] : +# 124| r0_47(double) = Load : &:r0_46, ~mu0_2 +# 124| r0_48(glval) = VariableAddress[z] : +# 124| r0_49(double) = Load : &:r0_48, ~mu0_2 +# 124| r0_50(double) = Add : r0_49, r0_47 +# 124| mu0_51(double) = Store : &:r0_48, r0_50 +# 124| r0_52(glval) = CopyValue : r0_48 +# 125| r0_53(glval) = VariableAddress[x] : +# 125| r0_54(double) = Load : &:r0_53, ~mu0_2 +# 125| r0_55(glval) = VariableAddress[z] : +# 125| r0_56(double) = Load : &:r0_55, ~mu0_2 +# 125| r0_57(double) = Sub : r0_56, r0_54 +# 125| mu0_58(double) = Store : &:r0_55, r0_57 +# 125| r0_59(glval) = CopyValue : r0_55 +# 126| r0_60(glval) = VariableAddress[x] : +# 126| r0_61(double) = Load : &:r0_60, ~mu0_2 +# 126| r0_62(glval) = VariableAddress[z] : +# 126| r0_63(double) = Load : &:r0_62, ~mu0_2 +# 126| r0_64(double) = Mul : r0_63, r0_61 +# 126| mu0_65(double) = Store : &:r0_62, r0_64 +# 126| r0_66(glval) = CopyValue : r0_62 +# 127| r0_67(glval) = VariableAddress[x] : +# 127| r0_68(double) = Load : &:r0_67, ~mu0_2 +# 127| r0_69(glval) = VariableAddress[z] : +# 127| r0_70(double) = Load : &:r0_69, ~mu0_2 +# 127| r0_71(double) = Div : r0_70, r0_68 +# 127| mu0_72(double) = Store : &:r0_69, r0_71 +# 127| r0_73(glval) = CopyValue : r0_69 +# 129| r0_74(glval) = VariableAddress[x] : +# 129| r0_75(double) = Load : &:r0_74, ~mu0_2 +# 129| r0_76(double) = CopyValue : r0_75 +# 129| r0_77(glval) = VariableAddress[z] : +# 129| mu0_78(double) = Store : &:r0_77, r0_76 +# 129| r0_79(glval) = CopyValue : r0_77 +# 130| r0_80(glval) = VariableAddress[x] : +# 130| r0_81(double) = Load : &:r0_80, ~mu0_2 +# 130| r0_82(double) = Negate : r0_81 +# 130| r0_83(glval) = VariableAddress[z] : +# 130| mu0_84(double) = Store : &:r0_83, r0_82 +# 130| r0_85(glval) = CopyValue : r0_83 +# 131| v0_86(void) = NoOp : +# 114| v0_87(void) = ReturnVoid : +# 114| v0_88(void) = UnmodeledUse : mu* +# 114| v0_89(void) = ExitFunction : # 133| void FloatCompare(double, double) # 133| Block 0 @@ -611,45 +668,51 @@ ir.cpp: # 136| r0_13(bool) = CompareEQ : r0_10, r0_12 # 136| r0_14(glval) = VariableAddress[b] : # 136| mu0_15(bool) = Store : &:r0_14, r0_13 -# 137| r0_16(glval) = VariableAddress[x] : -# 137| r0_17(double) = Load : &:r0_16, ~mu0_2 -# 137| r0_18(glval) = VariableAddress[y] : -# 137| r0_19(double) = Load : &:r0_18, ~mu0_2 -# 137| r0_20(bool) = CompareNE : r0_17, r0_19 -# 137| r0_21(glval) = VariableAddress[b] : -# 137| mu0_22(bool) = Store : &:r0_21, r0_20 -# 138| r0_23(glval) = VariableAddress[x] : -# 138| r0_24(double) = Load : &:r0_23, ~mu0_2 -# 138| r0_25(glval) = VariableAddress[y] : +# 136| r0_16(glval) = CopyValue : r0_14 +# 137| r0_17(glval) = VariableAddress[x] : +# 137| r0_18(double) = Load : &:r0_17, ~mu0_2 +# 137| r0_19(glval) = VariableAddress[y] : +# 137| r0_20(double) = Load : &:r0_19, ~mu0_2 +# 137| r0_21(bool) = CompareNE : r0_18, r0_20 +# 137| r0_22(glval) = VariableAddress[b] : +# 137| mu0_23(bool) = Store : &:r0_22, r0_21 +# 137| r0_24(glval) = CopyValue : r0_22 +# 138| r0_25(glval) = VariableAddress[x] : # 138| r0_26(double) = Load : &:r0_25, ~mu0_2 -# 138| r0_27(bool) = CompareLT : r0_24, r0_26 -# 138| r0_28(glval) = VariableAddress[b] : -# 138| mu0_29(bool) = Store : &:r0_28, r0_27 -# 139| r0_30(glval) = VariableAddress[x] : -# 139| r0_31(double) = Load : &:r0_30, ~mu0_2 -# 139| r0_32(glval) = VariableAddress[y] : -# 139| r0_33(double) = Load : &:r0_32, ~mu0_2 -# 139| r0_34(bool) = CompareGT : r0_31, r0_33 -# 139| r0_35(glval) = VariableAddress[b] : -# 139| mu0_36(bool) = Store : &:r0_35, r0_34 -# 140| r0_37(glval) = VariableAddress[x] : -# 140| r0_38(double) = Load : &:r0_37, ~mu0_2 -# 140| r0_39(glval) = VariableAddress[y] : -# 140| r0_40(double) = Load : &:r0_39, ~mu0_2 -# 140| r0_41(bool) = CompareLE : r0_38, r0_40 -# 140| r0_42(glval) = VariableAddress[b] : -# 140| mu0_43(bool) = Store : &:r0_42, r0_41 -# 141| r0_44(glval) = VariableAddress[x] : -# 141| r0_45(double) = Load : &:r0_44, ~mu0_2 -# 141| r0_46(glval) = VariableAddress[y] : -# 141| r0_47(double) = Load : &:r0_46, ~mu0_2 -# 141| r0_48(bool) = CompareGE : r0_45, r0_47 -# 141| r0_49(glval) = VariableAddress[b] : -# 141| mu0_50(bool) = Store : &:r0_49, r0_48 -# 142| v0_51(void) = NoOp : -# 133| v0_52(void) = ReturnVoid : -# 133| v0_53(void) = UnmodeledUse : mu* -# 133| v0_54(void) = ExitFunction : +# 138| r0_27(glval) = VariableAddress[y] : +# 138| r0_28(double) = Load : &:r0_27, ~mu0_2 +# 138| r0_29(bool) = CompareLT : r0_26, r0_28 +# 138| r0_30(glval) = VariableAddress[b] : +# 138| mu0_31(bool) = Store : &:r0_30, r0_29 +# 138| r0_32(glval) = CopyValue : r0_30 +# 139| r0_33(glval) = VariableAddress[x] : +# 139| r0_34(double) = Load : &:r0_33, ~mu0_2 +# 139| r0_35(glval) = VariableAddress[y] : +# 139| r0_36(double) = Load : &:r0_35, ~mu0_2 +# 139| r0_37(bool) = CompareGT : r0_34, r0_36 +# 139| r0_38(glval) = VariableAddress[b] : +# 139| mu0_39(bool) = Store : &:r0_38, r0_37 +# 139| r0_40(glval) = CopyValue : r0_38 +# 140| r0_41(glval) = VariableAddress[x] : +# 140| r0_42(double) = Load : &:r0_41, ~mu0_2 +# 140| r0_43(glval) = VariableAddress[y] : +# 140| r0_44(double) = Load : &:r0_43, ~mu0_2 +# 140| r0_45(bool) = CompareLE : r0_42, r0_44 +# 140| r0_46(glval) = VariableAddress[b] : +# 140| mu0_47(bool) = Store : &:r0_46, r0_45 +# 140| r0_48(glval) = CopyValue : r0_46 +# 141| r0_49(glval) = VariableAddress[x] : +# 141| r0_50(double) = Load : &:r0_49, ~mu0_2 +# 141| r0_51(glval) = VariableAddress[y] : +# 141| r0_52(double) = Load : &:r0_51, ~mu0_2 +# 141| r0_53(bool) = CompareGE : r0_50, r0_52 +# 141| r0_54(glval) = VariableAddress[b] : +# 141| mu0_55(bool) = Store : &:r0_54, r0_53 +# 141| r0_56(glval) = CopyValue : r0_54 +# 142| v0_57(void) = NoOp : +# 133| v0_58(void) = ReturnVoid : +# 133| v0_59(void) = UnmodeledUse : mu* +# 133| v0_60(void) = ExitFunction : # 144| void FloatCrement(float) # 144| Block 0 @@ -667,31 +730,35 @@ ir.cpp: # 147| mu0_11(float) = Store : &:r0_7, r0_10 # 147| r0_12(glval) = VariableAddress[y] : # 147| mu0_13(float) = Store : &:r0_12, r0_10 -# 148| r0_14(glval) = VariableAddress[x] : -# 148| r0_15(float) = Load : &:r0_14, ~mu0_2 -# 148| r0_16(float) = Constant[1.0] : -# 148| r0_17(float) = Sub : r0_15, r0_16 -# 148| mu0_18(float) = Store : &:r0_14, r0_17 -# 148| r0_19(glval) = VariableAddress[y] : -# 148| mu0_20(float) = Store : &:r0_19, r0_17 -# 149| r0_21(glval) = VariableAddress[x] : -# 149| r0_22(float) = Load : &:r0_21, ~mu0_2 -# 149| r0_23(float) = Constant[1.0] : -# 149| r0_24(float) = Add : r0_22, r0_23 -# 149| mu0_25(float) = Store : &:r0_21, r0_24 -# 149| r0_26(glval) = VariableAddress[y] : -# 149| mu0_27(float) = Store : &:r0_26, r0_22 -# 150| r0_28(glval) = VariableAddress[x] : -# 150| r0_29(float) = Load : &:r0_28, ~mu0_2 -# 150| r0_30(float) = Constant[1.0] : -# 150| r0_31(float) = Sub : r0_29, r0_30 -# 150| mu0_32(float) = Store : &:r0_28, r0_31 -# 150| r0_33(glval) = VariableAddress[y] : -# 150| mu0_34(float) = Store : &:r0_33, r0_29 -# 151| v0_35(void) = NoOp : -# 144| v0_36(void) = ReturnVoid : -# 144| v0_37(void) = UnmodeledUse : mu* -# 144| v0_38(void) = ExitFunction : +# 147| r0_14(glval) = CopyValue : r0_12 +# 148| r0_15(glval) = VariableAddress[x] : +# 148| r0_16(float) = Load : &:r0_15, ~mu0_2 +# 148| r0_17(float) = Constant[1.0] : +# 148| r0_18(float) = Sub : r0_16, r0_17 +# 148| mu0_19(float) = Store : &:r0_15, r0_18 +# 148| r0_20(glval) = VariableAddress[y] : +# 148| mu0_21(float) = Store : &:r0_20, r0_18 +# 148| r0_22(glval) = CopyValue : r0_20 +# 149| r0_23(glval) = VariableAddress[x] : +# 149| r0_24(float) = Load : &:r0_23, ~mu0_2 +# 149| r0_25(float) = Constant[1.0] : +# 149| r0_26(float) = Add : r0_24, r0_25 +# 149| mu0_27(float) = Store : &:r0_23, r0_26 +# 149| r0_28(glval) = VariableAddress[y] : +# 149| mu0_29(float) = Store : &:r0_28, r0_24 +# 149| r0_30(glval) = CopyValue : r0_28 +# 150| r0_31(glval) = VariableAddress[x] : +# 150| r0_32(float) = Load : &:r0_31, ~mu0_2 +# 150| r0_33(float) = Constant[1.0] : +# 150| r0_34(float) = Sub : r0_32, r0_33 +# 150| mu0_35(float) = Store : &:r0_31, r0_34 +# 150| r0_36(glval) = VariableAddress[y] : +# 150| mu0_37(float) = Store : &:r0_36, r0_32 +# 150| r0_38(glval) = CopyValue : r0_36 +# 151| v0_39(void) = NoOp : +# 144| v0_40(void) = ReturnVoid : +# 144| v0_41(void) = UnmodeledUse : mu* +# 144| v0_42(void) = ExitFunction : # 153| void PointerOps(int*, int) # 153| Block 0 @@ -713,61 +780,70 @@ ir.cpp: # 157| r0_15(int *) = PointerAdd[4] : r0_12, r0_14 # 157| r0_16(glval) = VariableAddress[q] : # 157| mu0_17(int *) = Store : &:r0_16, r0_15 -# 158| r0_18(glval) = VariableAddress[i] : -# 158| r0_19(int) = Load : &:r0_18, ~mu0_2 -# 158| r0_20(glval) = VariableAddress[p] : -# 158| r0_21(int *) = Load : &:r0_20, ~mu0_2 -# 158| r0_22(int *) = PointerAdd[4] : r0_21, r0_19 -# 158| r0_23(glval) = VariableAddress[q] : -# 158| mu0_24(int *) = Store : &:r0_23, r0_22 -# 159| r0_25(glval) = VariableAddress[p] : -# 159| r0_26(int *) = Load : &:r0_25, ~mu0_2 -# 159| r0_27(glval) = VariableAddress[i] : -# 159| r0_28(int) = Load : &:r0_27, ~mu0_2 -# 159| r0_29(int *) = PointerSub[4] : r0_26, r0_28 -# 159| r0_30(glval) = VariableAddress[q] : -# 159| mu0_31(int *) = Store : &:r0_30, r0_29 -# 160| r0_32(glval) = VariableAddress[p] : -# 160| r0_33(int *) = Load : &:r0_32, ~mu0_2 -# 160| r0_34(glval) = VariableAddress[q] : -# 160| r0_35(int *) = Load : &:r0_34, ~mu0_2 -# 160| r0_36(long) = PointerDiff[4] : r0_33, r0_35 -# 160| r0_37(int) = Convert : r0_36 -# 160| r0_38(glval) = VariableAddress[i] : -# 160| mu0_39(int) = Store : &:r0_38, r0_37 -# 162| r0_40(glval) = VariableAddress[p] : -# 162| r0_41(int *) = Load : &:r0_40, ~mu0_2 -# 162| r0_42(glval) = VariableAddress[q] : -# 162| mu0_43(int *) = Store : &:r0_42, r0_41 -# 164| r0_44(glval) = VariableAddress[i] : -# 164| r0_45(int) = Load : &:r0_44, ~mu0_2 -# 164| r0_46(glval) = VariableAddress[q] : -# 164| r0_47(int *) = Load : &:r0_46, ~mu0_2 -# 164| r0_48(int *) = PointerAdd[4] : r0_47, r0_45 -# 164| mu0_49(int *) = Store : &:r0_46, r0_48 -# 165| r0_50(glval) = VariableAddress[i] : -# 165| r0_51(int) = Load : &:r0_50, ~mu0_2 -# 165| r0_52(glval) = VariableAddress[q] : -# 165| r0_53(int *) = Load : &:r0_52, ~mu0_2 -# 165| r0_54(int *) = PointerSub[4] : r0_53, r0_51 -# 165| mu0_55(int *) = Store : &:r0_52, r0_54 -# 167| r0_56(glval) = VariableAddress[p] : -# 167| r0_57(int *) = Load : &:r0_56, ~mu0_2 -# 167| r0_58(int *) = Constant[0] : -# 167| r0_59(bool) = CompareNE : r0_57, r0_58 -# 167| r0_60(glval) = VariableAddress[b] : -# 167| mu0_61(bool) = Store : &:r0_60, r0_59 -# 168| r0_62(glval) = VariableAddress[p] : -# 168| r0_63(int *) = Load : &:r0_62, ~mu0_2 -# 168| r0_64(int *) = Constant[0] : -# 168| r0_65(bool) = CompareNE : r0_63, r0_64 -# 168| r0_66(bool) = LogicalNot : r0_65 -# 168| r0_67(glval) = VariableAddress[b] : -# 168| mu0_68(bool) = Store : &:r0_67, r0_66 -# 169| v0_69(void) = NoOp : -# 153| v0_70(void) = ReturnVoid : -# 153| v0_71(void) = UnmodeledUse : mu* -# 153| v0_72(void) = ExitFunction : +# 157| r0_18(glval) = CopyValue : r0_16 +# 158| r0_19(glval) = VariableAddress[i] : +# 158| r0_20(int) = Load : &:r0_19, ~mu0_2 +# 158| r0_21(glval) = VariableAddress[p] : +# 158| r0_22(int *) = Load : &:r0_21, ~mu0_2 +# 158| r0_23(int *) = PointerAdd[4] : r0_22, r0_20 +# 158| r0_24(glval) = VariableAddress[q] : +# 158| mu0_25(int *) = Store : &:r0_24, r0_23 +# 158| r0_26(glval) = CopyValue : r0_24 +# 159| r0_27(glval) = VariableAddress[p] : +# 159| r0_28(int *) = Load : &:r0_27, ~mu0_2 +# 159| r0_29(glval) = VariableAddress[i] : +# 159| r0_30(int) = Load : &:r0_29, ~mu0_2 +# 159| r0_31(int *) = PointerSub[4] : r0_28, r0_30 +# 159| r0_32(glval) = VariableAddress[q] : +# 159| mu0_33(int *) = Store : &:r0_32, r0_31 +# 159| r0_34(glval) = CopyValue : r0_32 +# 160| r0_35(glval) = VariableAddress[p] : +# 160| r0_36(int *) = Load : &:r0_35, ~mu0_2 +# 160| r0_37(glval) = VariableAddress[q] : +# 160| r0_38(int *) = Load : &:r0_37, ~mu0_2 +# 160| r0_39(long) = PointerDiff[4] : r0_36, r0_38 +# 160| r0_40(int) = Convert : r0_39 +# 160| r0_41(glval) = VariableAddress[i] : +# 160| mu0_42(int) = Store : &:r0_41, r0_40 +# 160| r0_43(glval) = CopyValue : r0_41 +# 162| r0_44(glval) = VariableAddress[p] : +# 162| r0_45(int *) = Load : &:r0_44, ~mu0_2 +# 162| r0_46(glval) = VariableAddress[q] : +# 162| mu0_47(int *) = Store : &:r0_46, r0_45 +# 162| r0_48(glval) = CopyValue : r0_46 +# 164| r0_49(glval) = VariableAddress[i] : +# 164| r0_50(int) = Load : &:r0_49, ~mu0_2 +# 164| r0_51(glval) = VariableAddress[q] : +# 164| r0_52(int *) = Load : &:r0_51, ~mu0_2 +# 164| r0_53(int *) = PointerAdd[4] : r0_52, r0_50 +# 164| mu0_54(int *) = Store : &:r0_51, r0_53 +# 164| r0_55(glval) = CopyValue : r0_51 +# 165| r0_56(glval) = VariableAddress[i] : +# 165| r0_57(int) = Load : &:r0_56, ~mu0_2 +# 165| r0_58(glval) = VariableAddress[q] : +# 165| r0_59(int *) = Load : &:r0_58, ~mu0_2 +# 165| r0_60(int *) = PointerSub[4] : r0_59, r0_57 +# 165| mu0_61(int *) = Store : &:r0_58, r0_60 +# 165| r0_62(glval) = CopyValue : r0_58 +# 167| r0_63(glval) = VariableAddress[p] : +# 167| r0_64(int *) = Load : &:r0_63, ~mu0_2 +# 167| r0_65(int *) = Constant[0] : +# 167| r0_66(bool) = CompareNE : r0_64, r0_65 +# 167| r0_67(glval) = VariableAddress[b] : +# 167| mu0_68(bool) = Store : &:r0_67, r0_66 +# 167| r0_69(glval) = CopyValue : r0_67 +# 168| r0_70(glval) = VariableAddress[p] : +# 168| r0_71(int *) = Load : &:r0_70, ~mu0_2 +# 168| r0_72(int *) = Constant[0] : +# 168| r0_73(bool) = CompareNE : r0_71, r0_72 +# 168| r0_74(bool) = LogicalNot : r0_73 +# 168| r0_75(glval) = VariableAddress[b] : +# 168| mu0_76(bool) = Store : &:r0_75, r0_74 +# 168| r0_77(glval) = CopyValue : r0_75 +# 169| v0_78(void) = NoOp : +# 153| v0_79(void) = ReturnVoid : +# 153| v0_80(void) = UnmodeledUse : mu* +# 153| v0_81(void) = ExitFunction : # 171| void ArrayAccess(int*, int) # 171| Block 0 @@ -788,68 +864,76 @@ ir.cpp: # 174| r0_14(int) = Load : &:r0_13, ~mu0_2 # 174| r0_15(glval) = VariableAddress[x] : # 174| mu0_16(int) = Store : &:r0_15, r0_14 -# 175| r0_17(glval) = VariableAddress[p] : -# 175| r0_18(int *) = Load : &:r0_17, ~mu0_2 -# 175| r0_19(glval) = VariableAddress[i] : -# 175| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 175| r0_21(glval) = PointerAdd[4] : r0_18, r0_20 -# 175| r0_22(int) = Load : &:r0_21, ~mu0_2 -# 175| r0_23(glval) = VariableAddress[x] : -# 175| mu0_24(int) = Store : &:r0_23, r0_22 -# 177| r0_25(glval) = VariableAddress[x] : -# 177| r0_26(int) = Load : &:r0_25, ~mu0_2 -# 177| r0_27(glval) = VariableAddress[p] : -# 177| r0_28(int *) = Load : &:r0_27, ~mu0_2 -# 177| r0_29(glval) = VariableAddress[i] : -# 177| r0_30(int) = Load : &:r0_29, ~mu0_2 -# 177| r0_31(glval) = PointerAdd[4] : r0_28, r0_30 -# 177| mu0_32(int) = Store : &:r0_31, r0_26 -# 178| r0_33(glval) = VariableAddress[x] : -# 178| r0_34(int) = Load : &:r0_33, ~mu0_2 -# 178| r0_35(glval) = VariableAddress[p] : -# 178| r0_36(int *) = Load : &:r0_35, ~mu0_2 -# 178| r0_37(glval) = VariableAddress[i] : -# 178| r0_38(int) = Load : &:r0_37, ~mu0_2 -# 178| r0_39(glval) = PointerAdd[4] : r0_36, r0_38 -# 178| mu0_40(int) = Store : &:r0_39, r0_34 -# 180| r0_41(glval) = VariableAddress[a] : -# 180| mu0_42(int[10]) = Uninitialized[a] : &:r0_41 -# 181| r0_43(glval) = VariableAddress[a] : -# 181| r0_44(int *) = Convert : r0_43 -# 181| r0_45(glval) = VariableAddress[i] : -# 181| r0_46(int) = Load : &:r0_45, ~mu0_2 -# 181| r0_47(glval) = PointerAdd[4] : r0_44, r0_46 -# 181| r0_48(int) = Load : &:r0_47, ~mu0_2 -# 181| r0_49(glval) = VariableAddress[x] : -# 181| mu0_50(int) = Store : &:r0_49, r0_48 -# 182| r0_51(glval) = VariableAddress[a] : -# 182| r0_52(int *) = Convert : r0_51 -# 182| r0_53(glval) = VariableAddress[i] : -# 182| r0_54(int) = Load : &:r0_53, ~mu0_2 -# 182| r0_55(glval) = PointerAdd[4] : r0_52, r0_54 -# 182| r0_56(int) = Load : &:r0_55, ~mu0_2 -# 182| r0_57(glval) = VariableAddress[x] : -# 182| mu0_58(int) = Store : &:r0_57, r0_56 -# 183| r0_59(glval) = VariableAddress[x] : -# 183| r0_60(int) = Load : &:r0_59, ~mu0_2 -# 183| r0_61(glval) = VariableAddress[a] : -# 183| r0_62(int *) = Convert : r0_61 -# 183| r0_63(glval) = VariableAddress[i] : -# 183| r0_64(int) = Load : &:r0_63, ~mu0_2 -# 183| r0_65(glval) = PointerAdd[4] : r0_62, r0_64 -# 183| mu0_66(int) = Store : &:r0_65, r0_60 -# 184| r0_67(glval) = VariableAddress[x] : -# 184| r0_68(int) = Load : &:r0_67, ~mu0_2 -# 184| r0_69(glval) = VariableAddress[a] : -# 184| r0_70(int *) = Convert : r0_69 -# 184| r0_71(glval) = VariableAddress[i] : -# 184| r0_72(int) = Load : &:r0_71, ~mu0_2 -# 184| r0_73(glval) = PointerAdd[4] : r0_70, r0_72 -# 184| mu0_74(int) = Store : &:r0_73, r0_68 -# 185| v0_75(void) = NoOp : -# 171| v0_76(void) = ReturnVoid : -# 171| v0_77(void) = UnmodeledUse : mu* -# 171| v0_78(void) = ExitFunction : +# 174| r0_17(glval) = CopyValue : r0_15 +# 175| r0_18(glval) = VariableAddress[p] : +# 175| r0_19(int *) = Load : &:r0_18, ~mu0_2 +# 175| r0_20(glval) = VariableAddress[i] : +# 175| r0_21(int) = Load : &:r0_20, ~mu0_2 +# 175| r0_22(glval) = PointerAdd[4] : r0_19, r0_21 +# 175| r0_23(int) = Load : &:r0_22, ~mu0_2 +# 175| r0_24(glval) = VariableAddress[x] : +# 175| mu0_25(int) = Store : &:r0_24, r0_23 +# 175| r0_26(glval) = CopyValue : r0_24 +# 177| r0_27(glval) = VariableAddress[x] : +# 177| r0_28(int) = Load : &:r0_27, ~mu0_2 +# 177| r0_29(glval) = VariableAddress[p] : +# 177| r0_30(int *) = Load : &:r0_29, ~mu0_2 +# 177| r0_31(glval) = VariableAddress[i] : +# 177| r0_32(int) = Load : &:r0_31, ~mu0_2 +# 177| r0_33(glval) = PointerAdd[4] : r0_30, r0_32 +# 177| mu0_34(int) = Store : &:r0_33, r0_28 +# 177| r0_35(glval) = CopyValue : r0_33 +# 178| r0_36(glval) = VariableAddress[x] : +# 178| r0_37(int) = Load : &:r0_36, ~mu0_2 +# 178| r0_38(glval) = VariableAddress[p] : +# 178| r0_39(int *) = Load : &:r0_38, ~mu0_2 +# 178| r0_40(glval) = VariableAddress[i] : +# 178| r0_41(int) = Load : &:r0_40, ~mu0_2 +# 178| r0_42(glval) = PointerAdd[4] : r0_39, r0_41 +# 178| mu0_43(int) = Store : &:r0_42, r0_37 +# 178| r0_44(glval) = CopyValue : r0_42 +# 180| r0_45(glval) = VariableAddress[a] : +# 180| mu0_46(int[10]) = Uninitialized[a] : &:r0_45 +# 181| r0_47(glval) = VariableAddress[a] : +# 181| r0_48(int *) = Convert : r0_47 +# 181| r0_49(glval) = VariableAddress[i] : +# 181| r0_50(int) = Load : &:r0_49, ~mu0_2 +# 181| r0_51(glval) = PointerAdd[4] : r0_48, r0_50 +# 181| r0_52(int) = Load : &:r0_51, ~mu0_2 +# 181| r0_53(glval) = VariableAddress[x] : +# 181| mu0_54(int) = Store : &:r0_53, r0_52 +# 181| r0_55(glval) = CopyValue : r0_53 +# 182| r0_56(glval) = VariableAddress[a] : +# 182| r0_57(int *) = Convert : r0_56 +# 182| r0_58(glval) = VariableAddress[i] : +# 182| r0_59(int) = Load : &:r0_58, ~mu0_2 +# 182| r0_60(glval) = PointerAdd[4] : r0_57, r0_59 +# 182| r0_61(int) = Load : &:r0_60, ~mu0_2 +# 182| r0_62(glval) = VariableAddress[x] : +# 182| mu0_63(int) = Store : &:r0_62, r0_61 +# 182| r0_64(glval) = CopyValue : r0_62 +# 183| r0_65(glval) = VariableAddress[x] : +# 183| r0_66(int) = Load : &:r0_65, ~mu0_2 +# 183| r0_67(glval) = VariableAddress[a] : +# 183| r0_68(int *) = Convert : r0_67 +# 183| r0_69(glval) = VariableAddress[i] : +# 183| r0_70(int) = Load : &:r0_69, ~mu0_2 +# 183| r0_71(glval) = PointerAdd[4] : r0_68, r0_70 +# 183| mu0_72(int) = Store : &:r0_71, r0_66 +# 183| r0_73(glval) = CopyValue : r0_71 +# 184| r0_74(glval) = VariableAddress[x] : +# 184| r0_75(int) = Load : &:r0_74, ~mu0_2 +# 184| r0_76(glval) = VariableAddress[a] : +# 184| r0_77(int *) = Convert : r0_76 +# 184| r0_78(glval) = VariableAddress[i] : +# 184| r0_79(int) = Load : &:r0_78, ~mu0_2 +# 184| r0_80(glval) = PointerAdd[4] : r0_77, r0_79 +# 184| mu0_81(int) = Store : &:r0_80, r0_75 +# 184| r0_82(glval) = CopyValue : r0_80 +# 185| v0_83(void) = NoOp : +# 171| v0_84(void) = ReturnVoid : +# 171| v0_85(void) = UnmodeledUse : mu* +# 171| v0_86(void) = ExitFunction : # 187| void StringLiteral(int) # 187| Block 0 @@ -902,45 +986,51 @@ ir.cpp: # 196| r0_13(bool) = CompareEQ : r0_10, r0_12 # 196| r0_14(glval) = VariableAddress[b] : # 196| mu0_15(bool) = Store : &:r0_14, r0_13 -# 197| r0_16(glval) = VariableAddress[p] : -# 197| r0_17(int *) = Load : &:r0_16, ~mu0_2 -# 197| r0_18(glval) = VariableAddress[q] : -# 197| r0_19(int *) = Load : &:r0_18, ~mu0_2 -# 197| r0_20(bool) = CompareNE : r0_17, r0_19 -# 197| r0_21(glval) = VariableAddress[b] : -# 197| mu0_22(bool) = Store : &:r0_21, r0_20 -# 198| r0_23(glval) = VariableAddress[p] : -# 198| r0_24(int *) = Load : &:r0_23, ~mu0_2 -# 198| r0_25(glval) = VariableAddress[q] : +# 196| r0_16(glval) = CopyValue : r0_14 +# 197| r0_17(glval) = VariableAddress[p] : +# 197| r0_18(int *) = Load : &:r0_17, ~mu0_2 +# 197| r0_19(glval) = VariableAddress[q] : +# 197| r0_20(int *) = Load : &:r0_19, ~mu0_2 +# 197| r0_21(bool) = CompareNE : r0_18, r0_20 +# 197| r0_22(glval) = VariableAddress[b] : +# 197| mu0_23(bool) = Store : &:r0_22, r0_21 +# 197| r0_24(glval) = CopyValue : r0_22 +# 198| r0_25(glval) = VariableAddress[p] : # 198| r0_26(int *) = Load : &:r0_25, ~mu0_2 -# 198| r0_27(bool) = CompareLT : r0_24, r0_26 -# 198| r0_28(glval) = VariableAddress[b] : -# 198| mu0_29(bool) = Store : &:r0_28, r0_27 -# 199| r0_30(glval) = VariableAddress[p] : -# 199| r0_31(int *) = Load : &:r0_30, ~mu0_2 -# 199| r0_32(glval) = VariableAddress[q] : -# 199| r0_33(int *) = Load : &:r0_32, ~mu0_2 -# 199| r0_34(bool) = CompareGT : r0_31, r0_33 -# 199| r0_35(glval) = VariableAddress[b] : -# 199| mu0_36(bool) = Store : &:r0_35, r0_34 -# 200| r0_37(glval) = VariableAddress[p] : -# 200| r0_38(int *) = Load : &:r0_37, ~mu0_2 -# 200| r0_39(glval) = VariableAddress[q] : -# 200| r0_40(int *) = Load : &:r0_39, ~mu0_2 -# 200| r0_41(bool) = CompareLE : r0_38, r0_40 -# 200| r0_42(glval) = VariableAddress[b] : -# 200| mu0_43(bool) = Store : &:r0_42, r0_41 -# 201| r0_44(glval) = VariableAddress[p] : -# 201| r0_45(int *) = Load : &:r0_44, ~mu0_2 -# 201| r0_46(glval) = VariableAddress[q] : -# 201| r0_47(int *) = Load : &:r0_46, ~mu0_2 -# 201| r0_48(bool) = CompareGE : r0_45, r0_47 -# 201| r0_49(glval) = VariableAddress[b] : -# 201| mu0_50(bool) = Store : &:r0_49, r0_48 -# 202| v0_51(void) = NoOp : -# 193| v0_52(void) = ReturnVoid : -# 193| v0_53(void) = UnmodeledUse : mu* -# 193| v0_54(void) = ExitFunction : +# 198| r0_27(glval) = VariableAddress[q] : +# 198| r0_28(int *) = Load : &:r0_27, ~mu0_2 +# 198| r0_29(bool) = CompareLT : r0_26, r0_28 +# 198| r0_30(glval) = VariableAddress[b] : +# 198| mu0_31(bool) = Store : &:r0_30, r0_29 +# 198| r0_32(glval) = CopyValue : r0_30 +# 199| r0_33(glval) = VariableAddress[p] : +# 199| r0_34(int *) = Load : &:r0_33, ~mu0_2 +# 199| r0_35(glval) = VariableAddress[q] : +# 199| r0_36(int *) = Load : &:r0_35, ~mu0_2 +# 199| r0_37(bool) = CompareGT : r0_34, r0_36 +# 199| r0_38(glval) = VariableAddress[b] : +# 199| mu0_39(bool) = Store : &:r0_38, r0_37 +# 199| r0_40(glval) = CopyValue : r0_38 +# 200| r0_41(glval) = VariableAddress[p] : +# 200| r0_42(int *) = Load : &:r0_41, ~mu0_2 +# 200| r0_43(glval) = VariableAddress[q] : +# 200| r0_44(int *) = Load : &:r0_43, ~mu0_2 +# 200| r0_45(bool) = CompareLE : r0_42, r0_44 +# 200| r0_46(glval) = VariableAddress[b] : +# 200| mu0_47(bool) = Store : &:r0_46, r0_45 +# 200| r0_48(glval) = CopyValue : r0_46 +# 201| r0_49(glval) = VariableAddress[p] : +# 201| r0_50(int *) = Load : &:r0_49, ~mu0_2 +# 201| r0_51(glval) = VariableAddress[q] : +# 201| r0_52(int *) = Load : &:r0_51, ~mu0_2 +# 201| r0_53(bool) = CompareGE : r0_50, r0_52 +# 201| r0_54(glval) = VariableAddress[b] : +# 201| mu0_55(bool) = Store : &:r0_54, r0_53 +# 201| r0_56(glval) = CopyValue : r0_54 +# 202| v0_57(void) = NoOp : +# 193| v0_58(void) = ReturnVoid : +# 193| v0_59(void) = UnmodeledUse : mu* +# 193| v0_60(void) = ExitFunction : # 204| void PointerCrement(int*) # 204| Block 0 @@ -958,31 +1048,35 @@ ir.cpp: # 207| mu0_11(int *) = Store : &:r0_7, r0_10 # 207| r0_12(glval) = VariableAddress[q] : # 207| mu0_13(int *) = Store : &:r0_12, r0_10 -# 208| r0_14(glval) = VariableAddress[p] : -# 208| r0_15(int *) = Load : &:r0_14, ~mu0_2 -# 208| r0_16(int) = Constant[1] : -# 208| r0_17(int *) = PointerSub[4] : r0_15, r0_16 -# 208| mu0_18(int *) = Store : &:r0_14, r0_17 -# 208| r0_19(glval) = VariableAddress[q] : -# 208| mu0_20(int *) = Store : &:r0_19, r0_17 -# 209| r0_21(glval) = VariableAddress[p] : -# 209| r0_22(int *) = Load : &:r0_21, ~mu0_2 -# 209| r0_23(int) = Constant[1] : -# 209| r0_24(int *) = PointerAdd[4] : r0_22, r0_23 -# 209| mu0_25(int *) = Store : &:r0_21, r0_24 -# 209| r0_26(glval) = VariableAddress[q] : -# 209| mu0_27(int *) = Store : &:r0_26, r0_22 -# 210| r0_28(glval) = VariableAddress[p] : -# 210| r0_29(int *) = Load : &:r0_28, ~mu0_2 -# 210| r0_30(int) = Constant[1] : -# 210| r0_31(int *) = PointerSub[4] : r0_29, r0_30 -# 210| mu0_32(int *) = Store : &:r0_28, r0_31 -# 210| r0_33(glval) = VariableAddress[q] : -# 210| mu0_34(int *) = Store : &:r0_33, r0_29 -# 211| v0_35(void) = NoOp : -# 204| v0_36(void) = ReturnVoid : -# 204| v0_37(void) = UnmodeledUse : mu* -# 204| v0_38(void) = ExitFunction : +# 207| r0_14(glval) = CopyValue : r0_12 +# 208| r0_15(glval) = VariableAddress[p] : +# 208| r0_16(int *) = Load : &:r0_15, ~mu0_2 +# 208| r0_17(int) = Constant[1] : +# 208| r0_18(int *) = PointerSub[4] : r0_16, r0_17 +# 208| mu0_19(int *) = Store : &:r0_15, r0_18 +# 208| r0_20(glval) = VariableAddress[q] : +# 208| mu0_21(int *) = Store : &:r0_20, r0_18 +# 208| r0_22(glval) = CopyValue : r0_20 +# 209| r0_23(glval) = VariableAddress[p] : +# 209| r0_24(int *) = Load : &:r0_23, ~mu0_2 +# 209| r0_25(int) = Constant[1] : +# 209| r0_26(int *) = PointerAdd[4] : r0_24, r0_25 +# 209| mu0_27(int *) = Store : &:r0_23, r0_26 +# 209| r0_28(glval) = VariableAddress[q] : +# 209| mu0_29(int *) = Store : &:r0_28, r0_24 +# 209| r0_30(glval) = CopyValue : r0_28 +# 210| r0_31(glval) = VariableAddress[p] : +# 210| r0_32(int *) = Load : &:r0_31, ~mu0_2 +# 210| r0_33(int) = Constant[1] : +# 210| r0_34(int *) = PointerSub[4] : r0_32, r0_33 +# 210| mu0_35(int *) = Store : &:r0_31, r0_34 +# 210| r0_36(glval) = VariableAddress[q] : +# 210| mu0_37(int *) = Store : &:r0_36, r0_32 +# 210| r0_38(glval) = CopyValue : r0_36 +# 211| v0_39(void) = NoOp : +# 204| v0_40(void) = ReturnVoid : +# 204| v0_41(void) = UnmodeledUse : mu* +# 204| v0_42(void) = ExitFunction : # 213| void CompoundAssignment() # 213| Block 0 @@ -997,36 +1091,40 @@ ir.cpp: # 216| r0_8(int) = Load : &:r0_7, ~mu0_2 # 216| r0_9(int) = Add : r0_8, r0_6 # 216| mu0_10(int) = Store : &:r0_7, r0_9 -# 219| r0_11(glval) = VariableAddress[y] : -# 219| r0_12(short) = Constant[5] : -# 219| mu0_13(short) = Store : &:r0_11, r0_12 -# 220| r0_14(glval) = VariableAddress[x] : -# 220| r0_15(int) = Load : &:r0_14, ~mu0_2 -# 220| r0_16(glval) = VariableAddress[y] : -# 220| r0_17(short) = Load : &:r0_16, ~mu0_2 -# 220| r0_18(int) = Convert : r0_17 -# 220| r0_19(int) = Add : r0_18, r0_15 -# 220| r0_20(short) = Convert : r0_19 -# 220| mu0_21(short) = Store : &:r0_16, r0_20 -# 223| r0_22(int) = Constant[1] : -# 223| r0_23(glval) = VariableAddress[y] : -# 223| r0_24(short) = Load : &:r0_23, ~mu0_2 -# 223| r0_25(short) = ShiftLeft : r0_24, r0_22 -# 223| mu0_26(short) = Store : &:r0_23, r0_25 -# 226| r0_27(glval) = VariableAddress[z] : -# 226| r0_28(long) = Constant[7] : -# 226| mu0_29(long) = Store : &:r0_27, r0_28 -# 227| r0_30(float) = Constant[2.0] : -# 227| r0_31(glval) = VariableAddress[z] : -# 227| r0_32(long) = Load : &:r0_31, ~mu0_2 -# 227| r0_33(float) = Convert : r0_32 -# 227| r0_34(float) = Add : r0_33, r0_30 -# 227| r0_35(long) = Convert : r0_34 -# 227| mu0_36(long) = Store : &:r0_31, r0_35 -# 228| v0_37(void) = NoOp : -# 213| v0_38(void) = ReturnVoid : -# 213| v0_39(void) = UnmodeledUse : mu* -# 213| v0_40(void) = ExitFunction : +# 216| r0_11(glval) = CopyValue : r0_7 +# 219| r0_12(glval) = VariableAddress[y] : +# 219| r0_13(short) = Constant[5] : +# 219| mu0_14(short) = Store : &:r0_12, r0_13 +# 220| r0_15(glval) = VariableAddress[x] : +# 220| r0_16(int) = Load : &:r0_15, ~mu0_2 +# 220| r0_17(glval) = VariableAddress[y] : +# 220| r0_18(short) = Load : &:r0_17, ~mu0_2 +# 220| r0_19(int) = Convert : r0_18 +# 220| r0_20(int) = Add : r0_19, r0_16 +# 220| r0_21(short) = Convert : r0_20 +# 220| mu0_22(short) = Store : &:r0_17, r0_21 +# 220| r0_23(glval) = CopyValue : r0_17 +# 223| r0_24(int) = Constant[1] : +# 223| r0_25(glval) = VariableAddress[y] : +# 223| r0_26(short) = Load : &:r0_25, ~mu0_2 +# 223| r0_27(short) = ShiftLeft : r0_26, r0_24 +# 223| mu0_28(short) = Store : &:r0_25, r0_27 +# 223| r0_29(glval) = CopyValue : r0_25 +# 226| r0_30(glval) = VariableAddress[z] : +# 226| r0_31(long) = Constant[7] : +# 226| mu0_32(long) = Store : &:r0_30, r0_31 +# 227| r0_33(float) = Constant[2.0] : +# 227| r0_34(glval) = VariableAddress[z] : +# 227| r0_35(long) = Load : &:r0_34, ~mu0_2 +# 227| r0_36(float) = Convert : r0_35 +# 227| r0_37(float) = Add : r0_36, r0_33 +# 227| r0_38(long) = Convert : r0_37 +# 227| mu0_39(long) = Store : &:r0_34, r0_38 +# 227| r0_40(glval) = CopyValue : r0_34 +# 228| v0_41(void) = NoOp : +# 213| v0_42(void) = ReturnVoid : +# 213| v0_43(void) = UnmodeledUse : mu* +# 213| v0_44(void) = ExitFunction : # 230| void UninitializedVariables() # 230| Block 0 @@ -1094,6 +1192,7 @@ ir.cpp: # 244| r2_1(int) = Load : &:r2_0, ~mu0_2 # 244| r2_2(glval) = VariableAddress[x] : # 244| mu2_3(int) = Store : &:r2_2, r2_1 +# 244| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 247| Block 3 @@ -1109,12 +1208,14 @@ ir.cpp: # 248| r4_0(int) = Constant[2] : # 248| r4_1(glval) = VariableAddress[x] : # 248| mu4_2(int) = Store : &:r4_1, r4_0 +# 248| r4_3(glval) = CopyValue : r4_1 #-----| Goto -> Block 6 # 250| Block 5 # 250| r5_0(int) = Constant[7] : # 250| r5_1(glval) = VariableAddress[x] : # 250| mu5_2(int) = Store : &:r5_1, r5_0 +# 250| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 6 # 251| Block 6 @@ -1142,6 +1243,7 @@ ir.cpp: # 255| r1_2(int) = Load : &:r1_1, ~mu0_2 # 255| r1_3(int) = Sub : r1_2, r1_0 # 255| mu1_4(int) = Store : &:r1_1, r1_3 +# 255| r1_5(glval) = CopyValue : r1_1 #-----| Goto (back edge) -> Block 3 # 257| Block 2 @@ -1174,11 +1276,12 @@ ir.cpp: # 261| r1_2(int) = Load : &:r1_1, ~mu0_2 # 261| r1_3(int) = Sub : r1_2, r1_0 # 261| mu1_4(int) = Store : &:r1_1, r1_3 -# 262| r1_5(glval) = VariableAddress[n] : -# 262| r1_6(int) = Load : &:r1_5, ~mu0_2 -# 262| r1_7(int) = Constant[0] : -# 262| r1_8(bool) = CompareGT : r1_6, r1_7 -# 262| v1_9(void) = ConditionalBranch : r1_8 +# 261| r1_5(glval) = CopyValue : r1_1 +# 262| r1_6(glval) = VariableAddress[n] : +# 262| r1_7(int) = Load : &:r1_6, ~mu0_2 +# 262| r1_8(int) = Constant[0] : +# 262| r1_9(bool) = CompareGT : r1_7, r1_8 +# 262| v1_10(void) = ConditionalBranch : r1_9 #-----| False -> Block 2 #-----| True (back edge) -> Block 1 @@ -1276,6 +1379,7 @@ ir.cpp: # 287| r2_3(int) = Load : &:r2_2, ~mu0_2 # 287| r2_4(int) = Add : r2_3, r2_1 # 287| mu2_5(int) = Store : &:r2_2, r2_4 +# 287| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 2 # 292| void For_InitCondition() @@ -1329,6 +1433,7 @@ ir.cpp: # 299| r2_3(int) = Load : &:r2_2, ~mu0_2 # 299| r2_4(int) = Add : r2_3, r2_1 # 299| mu2_5(int) = Store : &:r2_2, r2_4 +# 299| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 2 # 304| void For_ConditionUpdate() @@ -1357,6 +1462,7 @@ ir.cpp: # 306| r2_3(int) = Load : &:r2_2, ~mu0_2 # 306| r2_4(int) = Add : r2_3, r2_1 # 306| mu2_5(int) = Store : &:r2_2, r2_4 +# 306| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 1 # 309| Block 3 @@ -1391,6 +1497,7 @@ ir.cpp: # 312| r2_3(int) = Load : &:r2_2, ~mu0_2 # 312| r2_4(int) = Add : r2_3, r2_1 # 312| mu2_5(int) = Store : &:r2_2, r2_4 +# 312| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 1 # 315| Block 3 @@ -1424,6 +1531,7 @@ ir.cpp: # 318| r2_2(int) = Load : &:r2_1, ~mu0_2 # 318| r2_3(int) = Add : r2_2, r2_0 # 318| mu2_4(int) = Store : &:r2_1, r2_3 +# 318| r2_5(glval) = CopyValue : r2_1 #-----| Goto (back edge) -> Block 1 # 319| Block 3 @@ -1485,6 +1593,7 @@ ir.cpp: # 326| r4_3(int) = Load : &:r4_2, ~mu0_2 # 326| r4_4(int) = Add : r4_3, r4_1 # 326| mu4_5(int) = Store : &:r4_2, r4_4 +# 326| r4_6(glval) = CopyValue : r4_2 #-----| Goto (back edge) -> Block 1 # 331| Block 5 @@ -1545,16 +1654,18 @@ ir.cpp: # 342| r0_5(int) = Constant[1] : # 342| r0_6(glval) = VariableAddress[p] : # 342| r0_7(int *) = Load : &:r0_6, ~mu0_2 -# 342| mu0_8(int) = Store : &:r0_7, r0_5 -# 343| r0_9(glval) = VariableAddress[#return] : -# 343| r0_10(glval) = VariableAddress[p] : -# 343| r0_11(int *) = Load : &:r0_10, ~mu0_2 -# 343| r0_12(int) = Load : &:r0_11, ~mu0_2 -# 343| mu0_13(int) = Store : &:r0_9, r0_12 -# 341| r0_14(glval) = VariableAddress[#return] : -# 341| v0_15(void) = ReturnValue : &:r0_14, ~mu0_2 -# 341| v0_16(void) = UnmodeledUse : mu* -# 341| v0_17(void) = ExitFunction : +# 342| r0_8(glval) = CopyValue : r0_7 +# 342| mu0_9(int) = Store : &:r0_8, r0_5 +# 342| r0_10(glval) = CopyValue : r0_8 +# 343| r0_11(glval) = VariableAddress[#return] : +# 343| r0_12(glval) = VariableAddress[p] : +# 343| r0_13(int *) = Load : &:r0_12, ~mu0_2 +# 343| r0_14(int) = Load : &:r0_13, ~mu0_2 +# 343| mu0_15(int) = Store : &:r0_11, r0_14 +# 341| r0_16(glval) = VariableAddress[#return] : +# 341| v0_17(void) = ReturnValue : &:r0_16, ~mu0_2 +# 341| v0_18(void) = UnmodeledUse : mu* +# 341| v0_19(void) = ExitFunction : # 348| int* AddressOf() # 348| Block 0 @@ -1563,11 +1674,12 @@ ir.cpp: # 348| mu0_2(unknown) = UnmodeledDefinition : # 349| r0_3(glval) = VariableAddress[#return] : # 349| r0_4(glval) = VariableAddress[g] : -# 349| mu0_5(int *) = Store : &:r0_3, r0_4 -# 348| r0_6(glval) = VariableAddress[#return] : -# 348| v0_7(void) = ReturnValue : &:r0_6, ~mu0_2 -# 348| v0_8(void) = UnmodeledUse : mu* -# 348| v0_9(void) = ExitFunction : +# 349| r0_5(int *) = CopyValue : r0_4 +# 349| mu0_6(int *) = Store : &:r0_3, r0_5 +# 348| r0_7(glval) = VariableAddress[#return] : +# 348| v0_8(void) = ReturnValue : &:r0_7, ~mu0_2 +# 348| v0_9(void) = UnmodeledUse : mu* +# 348| v0_10(void) = ExitFunction : # 352| void Break(int) # 352| Block 0 @@ -1597,6 +1709,7 @@ ir.cpp: # 356| r3_2(int) = Load : &:r3_1, ~mu0_2 # 356| r3_3(int) = Sub : r3_2, r3_0 # 356| mu3_4(int) = Store : &:r3_1, r3_3 +# 356| r3_5(glval) = CopyValue : r3_1 #-----| Goto (back edge) -> Block 5 # 357| Block 4 @@ -1643,6 +1756,7 @@ ir.cpp: # 365| r3_2(int) = Load : &:r3_1, ~mu0_2 # 365| r3_3(int) = Sub : r3_2, r3_0 # 365| mu3_4(int) = Store : &:r3_1, r3_3 +# 365| r3_5(glval) = CopyValue : r3_1 #-----| Goto -> Block 4 # 361| Block 4 @@ -1717,11 +1831,12 @@ ir.cpp: # 381| r0_15(int) = Load : &:r0_14, ~mu0_2 # 381| r0_16(int) = Call : func:r0_11, 0:r0_13, 1:r0_15 # 381| mu0_17(unknown) = ^CallSideEffect : ~mu0_2 -# 381| mu0_18(int) = Store : &:r0_7, r0_16 -# 380| r0_19(glval) = VariableAddress[#return] : -# 380| v0_20(void) = ReturnValue : &:r0_19, ~mu0_2 -# 380| v0_21(void) = UnmodeledUse : mu* -# 380| v0_22(void) = ExitFunction : +# 381| r0_18(int) = CopyValue : r0_16 +# 381| mu0_19(int) = Store : &:r0_7, r0_18 +# 380| r0_20(glval) = VariableAddress[#return] : +# 380| v0_21(void) = ReturnValue : &:r0_20, ~mu0_2 +# 380| v0_22(void) = UnmodeledUse : mu* +# 380| v0_23(void) = ExitFunction : # 384| void Switch(int) # 384| Block 0 @@ -1746,6 +1861,7 @@ ir.cpp: # 387| r1_0(int) = Constant[1234] : # 387| r1_1(glval) = VariableAddress[y] : # 387| mu1_2(int) = Store : &:r1_1, r1_0 +# 387| r1_3(glval) = CopyValue : r1_1 #-----| Goto -> Block 2 # 389| Block 2 @@ -1753,7 +1869,8 @@ ir.cpp: # 390| r2_1(int) = Constant[-1] : # 390| r2_2(glval) = VariableAddress[y] : # 390| mu2_3(int) = Store : &:r2_2, r2_1 -# 391| v2_4(void) = NoOp : +# 390| r2_4(glval) = CopyValue : r2_2 +# 391| v2_5(void) = NoOp : #-----| Goto -> Block 9 # 393| Block 3 @@ -1765,7 +1882,8 @@ ir.cpp: # 395| r4_1(int) = Constant[1] : # 395| r4_2(glval) = VariableAddress[y] : # 395| mu4_3(int) = Store : &:r4_2, r4_1 -# 396| v4_4(void) = NoOp : +# 395| r4_4(glval) = CopyValue : r4_2 +# 396| v4_5(void) = NoOp : #-----| Goto -> Block 9 # 398| Block 5 @@ -1773,6 +1891,7 @@ ir.cpp: # 399| r5_1(int) = Constant[3] : # 399| r5_2(glval) = VariableAddress[y] : # 399| mu5_3(int) = Store : &:r5_2, r5_1 +# 399| r5_4(glval) = CopyValue : r5_2 #-----| Goto -> Block 6 # 400| Block 6 @@ -1780,7 +1899,8 @@ ir.cpp: # 401| r6_1(int) = Constant[4] : # 401| r6_2(glval) = VariableAddress[y] : # 401| mu6_3(int) = Store : &:r6_2, r6_1 -# 402| v6_4(void) = NoOp : +# 401| r6_4(glval) = CopyValue : r6_2 +# 402| v6_5(void) = NoOp : #-----| Goto -> Block 9 # 404| Block 7 @@ -1788,13 +1908,15 @@ ir.cpp: # 405| r7_1(int) = Constant[0] : # 405| r7_2(glval) = VariableAddress[y] : # 405| mu7_3(int) = Store : &:r7_2, r7_1 -# 406| v7_4(void) = NoOp : +# 405| r7_4(glval) = CopyValue : r7_2 +# 406| v7_5(void) = NoOp : #-----| Goto -> Block 9 # 408| Block 8 # 408| r8_0(int) = Constant[5678] : # 408| r8_1(glval) = VariableAddress[y] : # 408| mu8_2(int) = Store : &:r8_1, r8_0 +# 408| r8_3(glval) = CopyValue : r8_1 #-----| Goto -> Block 9 # 409| Block 9 @@ -1831,20 +1953,23 @@ ir.cpp: # 428| r0_6(glval) = VariableAddress[pt] : # 428| r0_7(glval) = FieldAddress[x] : r0_6 # 428| mu0_8(int) = Store : &:r0_7, r0_5 -# 429| r0_9(glval) = VariableAddress[pt] : -# 429| r0_10(glval) = FieldAddress[x] : r0_9 -# 429| r0_11(int) = Load : &:r0_10, ~mu0_2 -# 429| r0_12(glval) = VariableAddress[pt] : -# 429| r0_13(glval) = FieldAddress[y] : r0_12 -# 429| mu0_14(int) = Store : &:r0_13, r0_11 -# 430| r0_15(glval) = VariableAddress[p] : -# 430| r0_16(glval) = VariableAddress[pt] : -# 430| r0_17(glval) = FieldAddress[y] : r0_16 -# 430| mu0_18(int *) = Store : &:r0_15, r0_17 -# 431| v0_19(void) = NoOp : -# 426| v0_20(void) = ReturnVoid : -# 426| v0_21(void) = UnmodeledUse : mu* -# 426| v0_22(void) = ExitFunction : +# 428| r0_9(glval) = CopyValue : r0_7 +# 429| r0_10(glval) = VariableAddress[pt] : +# 429| r0_11(glval) = FieldAddress[x] : r0_10 +# 429| r0_12(int) = Load : &:r0_11, ~mu0_2 +# 429| r0_13(glval) = VariableAddress[pt] : +# 429| r0_14(glval) = FieldAddress[y] : r0_13 +# 429| mu0_15(int) = Store : &:r0_14, r0_12 +# 429| r0_16(glval) = CopyValue : r0_14 +# 430| r0_17(glval) = VariableAddress[p] : +# 430| r0_18(glval) = VariableAddress[pt] : +# 430| r0_19(glval) = FieldAddress[y] : r0_18 +# 430| r0_20(int *) = CopyValue : r0_19 +# 430| mu0_21(int *) = Store : &:r0_17, r0_20 +# 431| v0_22(void) = NoOp : +# 426| v0_23(void) = ReturnVoid : +# 426| v0_24(void) = UnmodeledUse : mu* +# 426| v0_25(void) = ExitFunction : # 433| void LogicalOr(bool, bool) # 433| Block 0 @@ -1874,6 +1999,7 @@ ir.cpp: # 436| r2_0(int) = Constant[7] : # 436| r2_1(glval) = VariableAddress[x] : # 436| mu2_2(int) = Store : &:r2_1, r2_0 +# 436| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 439| Block 3 @@ -1894,12 +2020,14 @@ ir.cpp: # 440| r5_0(int) = Constant[1] : # 440| r5_1(glval) = VariableAddress[x] : # 440| mu5_2(int) = Store : &:r5_1, r5_0 +# 440| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 7 # 443| Block 6 # 443| r6_0(int) = Constant[5] : # 443| r6_1(glval) = VariableAddress[x] : # 443| mu6_2(int) = Store : &:r6_1, r6_0 +# 443| r6_3(glval) = CopyValue : r6_1 #-----| Goto -> Block 7 # 445| Block 7 @@ -1936,6 +2064,7 @@ ir.cpp: # 450| r2_0(int) = Constant[7] : # 450| r2_1(glval) = VariableAddress[x] : # 450| mu2_2(int) = Store : &:r2_1, r2_0 +# 450| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 453| Block 3 @@ -1956,12 +2085,14 @@ ir.cpp: # 454| r5_0(int) = Constant[1] : # 454| r5_1(glval) = VariableAddress[x] : # 454| mu5_2(int) = Store : &:r5_1, r5_0 +# 454| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 7 # 457| Block 6 # 457| r6_0(int) = Constant[5] : # 457| r6_1(glval) = VariableAddress[x] : # 457| mu6_2(int) = Store : &:r6_1, r6_0 +# 457| r6_3(glval) = CopyValue : r6_1 #-----| Goto -> Block 7 # 459| Block 7 @@ -1991,6 +2122,7 @@ ir.cpp: # 464| r1_0(int) = Constant[1] : # 464| r1_1(glval) = VariableAddress[x] : # 464| mu1_2(int) = Store : &:r1_1, r1_0 +# 464| r1_3(glval) = CopyValue : r1_1 #-----| Goto -> Block 2 # 467| Block 2 @@ -2011,12 +2143,14 @@ ir.cpp: # 468| r4_0(int) = Constant[2] : # 468| r4_1(glval) = VariableAddress[x] : # 468| mu4_2(int) = Store : &:r4_1, r4_0 +# 468| r4_3(glval) = CopyValue : r4_1 #-----| Goto -> Block 6 # 471| Block 5 # 471| r5_0(int) = Constant[3] : # 471| r5_1(glval) = VariableAddress[x] : # 471| mu5_2(int) = Store : &:r5_1, r5_0 +# 471| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 6 # 473| Block 6 @@ -2060,9 +2194,10 @@ ir.cpp: # 478| r3_1(bool) = Load : &:r3_0, ~mu0_2 # 478| r3_2(glval) = VariableAddress[x] : # 478| mu3_3(bool) = Store : &:r3_2, r3_1 -# 479| r3_4(glval) = VariableAddress[a] : -# 479| r3_5(bool) = Load : &:r3_4, ~mu0_2 -# 479| v3_6(void) = ConditionalBranch : r3_5 +# 478| r3_4(glval) = CopyValue : r3_2 +# 479| r3_5(glval) = VariableAddress[a] : +# 479| r3_6(bool) = Load : &:r3_5, ~mu0_2 +# 479| v3_7(void) = ConditionalBranch : r3_6 #-----| False -> Block 9 #-----| True -> Block 8 @@ -2091,10 +2226,11 @@ ir.cpp: # 479| r7_2(bool) = LogicalNot : r7_1 # 479| r7_3(glval) = VariableAddress[x] : # 479| mu7_4(bool) = Store : &:r7_3, r7_2 -# 480| v7_5(void) = NoOp : -# 475| v7_6(void) = ReturnVoid : -# 475| v7_7(void) = UnmodeledUse : mu* -# 475| v7_8(void) = ExitFunction : +# 479| r7_5(glval) = CopyValue : r7_3 +# 480| v7_6(void) = NoOp : +# 475| v7_7(void) = ReturnVoid : +# 475| v7_8(void) = UnmodeledUse : mu* +# 475| v7_9(void) = ExitFunction : # 479| Block 8 # 479| r8_0(glval) = VariableAddress[#temp479:11] : @@ -2120,9 +2256,10 @@ ir.cpp: # 477| r11_1(bool) = Load : &:r11_0, ~mu0_2 # 477| r11_2(glval) = VariableAddress[x] : # 477| mu11_3(bool) = Store : &:r11_2, r11_1 -# 478| r11_4(glval) = VariableAddress[a] : -# 478| r11_5(bool) = Load : &:r11_4, ~mu0_2 -# 478| v11_6(void) = ConditionalBranch : r11_5 +# 477| r11_4(glval) = CopyValue : r11_2 +# 478| r11_5(glval) = VariableAddress[a] : +# 478| r11_6(bool) = Load : &:r11_5, ~mu0_2 +# 478| v11_7(void) = ConditionalBranch : r11_6 #-----| False -> Block 5 #-----| True -> Block 4 @@ -2195,10 +2332,11 @@ ir.cpp: # 489| r1_0(glval) = VariableAddress[#temp489:6] : # 489| r1_1(glval) = Load : &:r1_0, ~mu0_2 # 489| mu1_2(int) = Store : &:r1_1, r0_9 -# 490| v1_3(void) = NoOp : -# 486| v1_4(void) = ReturnVoid : -# 486| v1_5(void) = UnmodeledUse : mu* -# 486| v1_6(void) = ExitFunction : +# 489| r1_3(glval) = CopyValue : r1_1 +# 490| v1_4(void) = NoOp : +# 486| v1_5(void) = ReturnVoid : +# 486| v1_6(void) = UnmodeledUse : mu* +# 486| v1_7(void) = ExitFunction : # 489| Block 2 # 489| r2_0(glval) = VariableAddress[x] : @@ -2257,13 +2395,15 @@ ir.cpp: # 499| r0_9(int *) = Constant[0] : # 499| r0_10(glval) = VariableAddress[p] : # 499| mu0_11(int *) = Store : &:r0_10, r0_9 -# 500| r0_12(int *) = Constant[0] : -# 500| r0_13(glval) = VariableAddress[q] : -# 500| mu0_14(int *) = Store : &:r0_13, r0_12 -# 501| v0_15(void) = NoOp : -# 496| v0_16(void) = ReturnVoid : -# 496| v0_17(void) = UnmodeledUse : mu* -# 496| v0_18(void) = ExitFunction : +# 499| r0_12(glval) = CopyValue : r0_10 +# 500| r0_13(int *) = Constant[0] : +# 500| r0_14(glval) = VariableAddress[q] : +# 500| mu0_15(int *) = Store : &:r0_14, r0_13 +# 500| r0_16(glval) = CopyValue : r0_14 +# 501| v0_17(void) = NoOp : +# 496| v0_18(void) = ReturnVoid : +# 496| v0_19(void) = UnmodeledUse : mu* +# 496| v0_20(void) = ExitFunction : # 503| void InitList(int, float) # 503| Block 0 @@ -2491,7 +2631,8 @@ ir.cpp: # 540| r3_1(int) = Load : &:r3_0, ~mu0_2 # 540| r3_2(glval) = VariableAddress[y] : # 540| mu3_3(int) = Store : &:r3_2, r3_1 -# 541| v3_4(void) = NoOp : +# 540| r3_4(glval) = CopyValue : r3_2 +# 541| v3_5(void) = NoOp : #-----| Goto -> Block 1 # 543| int EarlyReturnValue(int, int) @@ -2687,18 +2828,27 @@ ir.cpp: # 591| r0_4(glval<..(*)(..)>) = FunctionAddress[FuncPtrTarget] : # 591| mu0_5(..(*)(..)) = Store : &:r0_3, r0_4 # 592| r0_6(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : -# 592| r0_7(glval<..(*)(..)>) = VariableAddress[pfn] : -# 592| mu0_8(..(*)(..)) = Store : &:r0_7, r0_6 -# 593| r0_9(glval<..(*)(..)>) = FunctionAddress[FuncPtrTarget] : -# 593| r0_10(glval<..(*)(..)>) = VariableAddress[pfn] : -# 593| mu0_11(..(*)(..)) = Store : &:r0_10, r0_9 -# 594| r0_12(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : -# 594| r0_13(glval<..(*)(..)>) = VariableAddress[pfn] : -# 594| mu0_14(..(*)(..)) = Store : &:r0_13, r0_12 -# 595| v0_15(void) = NoOp : -# 590| v0_16(void) = ReturnVoid : -# 590| v0_17(void) = UnmodeledUse : mu* -# 590| v0_18(void) = ExitFunction : +# 592| r0_7(..(*)(..)) = CopyValue : r0_6 +# 592| r0_8(glval<..(*)(..)>) = VariableAddress[pfn] : +# 592| mu0_9(..(*)(..)) = Store : &:r0_8, r0_7 +# 592| r0_10(glval<..(*)(..)>) = CopyValue : r0_8 +# 593| r0_11(glval<..(*)(..)>) = FunctionAddress[FuncPtrTarget] : +# 593| r0_12(..(*)(..)) = CopyValue : r0_11 +# 593| r0_13(glval<..(*)(..)>) = VariableAddress[pfn] : +# 593| mu0_14(..(*)(..)) = Store : &:r0_13, r0_12 +# 593| r0_15(glval<..(*)(..)>) = CopyValue : r0_13 +# 594| r0_16(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : +# 594| r0_17(..(*)(..)) = CopyValue : r0_16 +# 594| r0_18(..(*)(..)) = CopyValue : r0_17 +# 594| r0_19(..(*)(..)) = CopyValue : r0_18 +# 594| r0_20(..(*)(..)) = CopyValue : r0_19 +# 594| r0_21(glval<..(*)(..)>) = VariableAddress[pfn] : +# 594| mu0_22(..(*)(..)) = Store : &:r0_21, r0_20 +# 594| r0_23(glval<..(*)(..)>) = CopyValue : r0_21 +# 595| v0_24(void) = NoOp : +# 590| v0_25(void) = ReturnVoid : +# 590| v0_26(void) = UnmodeledUse : mu* +# 590| v0_27(void) = ExitFunction : # 615| void DeclareObject() # 615| Block 0 @@ -2744,25 +2894,26 @@ ir.cpp: # 622| mu0_8(String) = InitializeParameter[s] : &:r0_7 # 623| r0_9(glval) = VariableAddress[r] : # 623| r0_10(String &) = Load : &:r0_9, ~mu0_2 -# 623| r0_11(glval) = Convert : r0_10 -# 623| r0_12(glval) = FunctionAddress[c_str] : -# 623| r0_13(char *) = Call : func:r0_12, this:r0_11 -# 623| mu0_14(unknown) = ^CallSideEffect : ~mu0_2 -# 624| r0_15(glval) = VariableAddress[p] : -# 624| r0_16(String *) = Load : &:r0_15, ~mu0_2 -# 624| r0_17(String *) = Convert : r0_16 -# 624| r0_18(glval) = FunctionAddress[c_str] : -# 624| r0_19(char *) = Call : func:r0_18, this:r0_17 -# 624| mu0_20(unknown) = ^CallSideEffect : ~mu0_2 -# 625| r0_21(glval) = VariableAddress[s] : -# 625| r0_22(glval) = Convert : r0_21 -# 625| r0_23(glval) = FunctionAddress[c_str] : -# 625| r0_24(char *) = Call : func:r0_23, this:r0_22 -# 625| mu0_25(unknown) = ^CallSideEffect : ~mu0_2 -# 626| v0_26(void) = NoOp : -# 622| v0_27(void) = ReturnVoid : -# 622| v0_28(void) = UnmodeledUse : mu* -# 622| v0_29(void) = ExitFunction : +# 623| r0_11(glval) = CopyValue : r0_10 +# 623| r0_12(glval) = Convert : r0_11 +# 623| r0_13(glval) = FunctionAddress[c_str] : +# 623| r0_14(char *) = Call : func:r0_13, this:r0_12 +# 623| mu0_15(unknown) = ^CallSideEffect : ~mu0_2 +# 624| r0_16(glval) = VariableAddress[p] : +# 624| r0_17(String *) = Load : &:r0_16, ~mu0_2 +# 624| r0_18(String *) = Convert : r0_17 +# 624| r0_19(glval) = FunctionAddress[c_str] : +# 624| r0_20(char *) = Call : func:r0_19, this:r0_18 +# 624| mu0_21(unknown) = ^CallSideEffect : ~mu0_2 +# 625| r0_22(glval) = VariableAddress[s] : +# 625| r0_23(glval) = Convert : r0_22 +# 625| r0_24(glval) = FunctionAddress[c_str] : +# 625| r0_25(char *) = Call : func:r0_24, this:r0_23 +# 625| mu0_26(unknown) = ^CallSideEffect : ~mu0_2 +# 626| v0_27(void) = NoOp : +# 622| v0_28(void) = ReturnVoid : +# 622| v0_29(void) = UnmodeledUse : mu* +# 622| v0_30(void) = ExitFunction : # 630| int C::StaticMemberFunction(int) # 630| Block 0 @@ -2824,35 +2975,43 @@ ir.cpp: # 643| r0_5(C *) = CopyValue : r0_3 # 643| r0_6(glval) = FieldAddress[m_a] : r0_5 # 643| mu0_7(int) = Store : &:r0_6, r0_4 -# 644| r0_8(int) = Constant[1] : -# 644| r0_9(C *) = CopyValue : r0_3 -# 644| r0_10(glval) = FieldAddress[m_a] : r0_9 -# 644| mu0_11(int) = Store : &:r0_10, r0_8 -# 645| r0_12(int) = Constant[2] : -#-----| r0_13(C *) = CopyValue : r0_3 -# 645| r0_14(glval) = FieldAddress[m_a] : r0_13 -# 645| mu0_15(int) = Store : &:r0_14, r0_12 -# 646| r0_16(glval) = VariableAddress[x] : -# 646| mu0_17(int) = Uninitialized[x] : &:r0_16 -# 647| r0_18(C *) = CopyValue : r0_3 -# 647| r0_19(glval) = FieldAddress[m_a] : r0_18 -# 647| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 647| r0_21(glval) = VariableAddress[x] : -# 647| mu0_22(int) = Store : &:r0_21, r0_20 -# 648| r0_23(C *) = CopyValue : r0_3 -# 648| r0_24(glval) = FieldAddress[m_a] : r0_23 -# 648| r0_25(int) = Load : &:r0_24, ~mu0_2 -# 648| r0_26(glval) = VariableAddress[x] : -# 648| mu0_27(int) = Store : &:r0_26, r0_25 -#-----| r0_28(C *) = CopyValue : r0_3 -# 649| r0_29(glval) = FieldAddress[m_a] : r0_28 -# 649| r0_30(int) = Load : &:r0_29, ~mu0_2 -# 649| r0_31(glval) = VariableAddress[x] : -# 649| mu0_32(int) = Store : &:r0_31, r0_30 -# 650| v0_33(void) = NoOp : -# 642| v0_34(void) = ReturnVoid : -# 642| v0_35(void) = UnmodeledUse : mu* -# 642| v0_36(void) = ExitFunction : +# 643| r0_8(glval) = CopyValue : r0_6 +# 644| r0_9(int) = Constant[1] : +# 644| r0_10(C *) = CopyValue : r0_3 +# 644| r0_11(glval) = CopyValue : r0_10 +# 644| r0_12(glval) = FieldAddress[m_a] : r0_11 +# 644| mu0_13(int) = Store : &:r0_12, r0_9 +# 644| r0_14(glval) = CopyValue : r0_12 +# 645| r0_15(int) = Constant[2] : +#-----| r0_16(C *) = CopyValue : r0_3 +# 645| r0_17(glval) = FieldAddress[m_a] : r0_16 +# 645| mu0_18(int) = Store : &:r0_17, r0_15 +# 645| r0_19(glval) = CopyValue : r0_17 +# 646| r0_20(glval) = VariableAddress[x] : +# 646| mu0_21(int) = Uninitialized[x] : &:r0_20 +# 647| r0_22(C *) = CopyValue : r0_3 +# 647| r0_23(glval) = FieldAddress[m_a] : r0_22 +# 647| r0_24(int) = Load : &:r0_23, ~mu0_2 +# 647| r0_25(glval) = VariableAddress[x] : +# 647| mu0_26(int) = Store : &:r0_25, r0_24 +# 647| r0_27(glval) = CopyValue : r0_25 +# 648| r0_28(C *) = CopyValue : r0_3 +# 648| r0_29(glval) = CopyValue : r0_28 +# 648| r0_30(glval) = FieldAddress[m_a] : r0_29 +# 648| r0_31(int) = Load : &:r0_30, ~mu0_2 +# 648| r0_32(glval) = VariableAddress[x] : +# 648| mu0_33(int) = Store : &:r0_32, r0_31 +# 648| r0_34(glval) = CopyValue : r0_32 +#-----| r0_35(C *) = CopyValue : r0_3 +# 649| r0_36(glval) = FieldAddress[m_a] : r0_35 +# 649| r0_37(int) = Load : &:r0_36, ~mu0_2 +# 649| r0_38(glval) = VariableAddress[x] : +# 649| mu0_39(int) = Store : &:r0_38, r0_37 +# 649| r0_40(glval) = CopyValue : r0_38 +# 650| v0_41(void) = NoOp : +# 642| v0_42(void) = ReturnVoid : +# 642| v0_43(void) = UnmodeledUse : mu* +# 642| v0_44(void) = ExitFunction : # 652| void C::MethodCalls() # 652| Block 0 @@ -2866,19 +3025,20 @@ ir.cpp: # 653| r0_7(int) = Call : func:r0_5, this:r0_4, 0:r0_6 # 653| mu0_8(unknown) = ^CallSideEffect : ~mu0_2 # 654| r0_9(C *) = CopyValue : r0_3 -# 654| r0_10(glval) = FunctionAddress[InstanceMemberFunction] : -# 654| r0_11(int) = Constant[1] : -# 654| r0_12(int) = Call : func:r0_10, this:r0_9, 0:r0_11 -# 654| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_14(C *) = CopyValue : r0_3 -# 655| r0_15(glval) = FunctionAddress[InstanceMemberFunction] : -# 655| r0_16(int) = Constant[2] : -# 655| r0_17(int) = Call : func:r0_15, this:r0_14, 0:r0_16 -# 655| mu0_18(unknown) = ^CallSideEffect : ~mu0_2 -# 656| v0_19(void) = NoOp : -# 652| v0_20(void) = ReturnVoid : -# 652| v0_21(void) = UnmodeledUse : mu* -# 652| v0_22(void) = ExitFunction : +# 654| r0_10(glval) = CopyValue : r0_9 +# 654| r0_11(glval) = FunctionAddress[InstanceMemberFunction] : +# 654| r0_12(int) = Constant[1] : +# 654| r0_13(int) = Call : func:r0_11, this:r0_10, 0:r0_12 +# 654| mu0_14(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_15(C *) = CopyValue : r0_3 +# 655| r0_16(glval) = FunctionAddress[InstanceMemberFunction] : +# 655| r0_17(int) = Constant[2] : +# 655| r0_18(int) = Call : func:r0_16, this:r0_15, 0:r0_17 +# 655| mu0_19(unknown) = ^CallSideEffect : ~mu0_2 +# 656| v0_20(void) = NoOp : +# 652| v0_21(void) = ReturnVoid : +# 652| v0_22(void) = UnmodeledUse : mu* +# 652| v0_23(void) = ExitFunction : # 658| void C::C() # 658| Block 0 @@ -2934,11 +3094,12 @@ ir.cpp: # 679| mu0_2(unknown) = UnmodeledDefinition : # 680| r0_3(glval) = VariableAddress[#return] : # 680| r0_4(glval) = VariableAddress[g] : -# 680| mu0_5(int &) = Store : &:r0_3, r0_4 -# 679| r0_6(glval) = VariableAddress[#return] : -# 679| v0_7(void) = ReturnValue : &:r0_6, ~mu0_2 -# 679| v0_8(void) = UnmodeledUse : mu* -# 679| v0_9(void) = ExitFunction : +# 680| r0_5(int &) = CopyValue : r0_4 +# 680| mu0_6(int &) = Store : &:r0_3, r0_5 +# 679| r0_7(glval) = VariableAddress[#return] : +# 679| v0_8(void) = ReturnValue : &:r0_7, ~mu0_2 +# 679| v0_9(void) = UnmodeledUse : mu* +# 679| v0_10(void) = ExitFunction : # 685| void InitReference(int) # 685| Block 0 @@ -2949,44 +3110,51 @@ ir.cpp: # 685| mu0_4(int) = InitializeParameter[x] : &:r0_3 # 686| r0_5(glval) = VariableAddress[r] : # 686| r0_6(glval) = VariableAddress[x] : -# 686| mu0_7(int &) = Store : &:r0_5, r0_6 -# 687| r0_8(glval) = VariableAddress[r2] : -# 687| r0_9(glval) = VariableAddress[r] : -# 687| r0_10(int &) = Load : &:r0_9, ~mu0_2 -# 687| mu0_11(int &) = Store : &:r0_8, r0_10 -# 688| r0_12(glval) = VariableAddress[r3] : -# 688| r0_13(glval) = FunctionAddress[ReturnReference] : -# 688| r0_14(String &) = Call : func:r0_13 -# 688| mu0_15(unknown) = ^CallSideEffect : ~mu0_2 -# 688| r0_16(glval) = Convert : r0_14 -# 688| mu0_17(String &) = Store : &:r0_12, r0_16 -# 689| v0_18(void) = NoOp : -# 685| v0_19(void) = ReturnVoid : -# 685| v0_20(void) = UnmodeledUse : mu* -# 685| v0_21(void) = ExitFunction : +# 686| r0_7(int &) = CopyValue : r0_6 +# 686| mu0_8(int &) = Store : &:r0_5, r0_7 +# 687| r0_9(glval) = VariableAddress[r2] : +# 687| r0_10(glval) = VariableAddress[r] : +# 687| r0_11(int &) = Load : &:r0_10, ~mu0_2 +# 687| r0_12(glval) = CopyValue : r0_11 +# 687| r0_13(int &) = CopyValue : r0_12 +# 687| mu0_14(int &) = Store : &:r0_9, r0_13 +# 688| r0_15(glval) = VariableAddress[r3] : +# 688| r0_16(glval) = FunctionAddress[ReturnReference] : +# 688| r0_17(String &) = Call : func:r0_16 +# 688| mu0_18(unknown) = ^CallSideEffect : ~mu0_2 +# 688| r0_19(glval) = CopyValue : r0_17 +# 688| r0_20(glval) = Convert : r0_19 +# 688| r0_21(String &) = CopyValue : r0_20 +# 688| mu0_22(String &) = Store : &:r0_15, r0_21 +# 689| v0_23(void) = NoOp : +# 685| v0_24(void) = ReturnVoid : +# 685| v0_25(void) = UnmodeledUse : mu* +# 685| v0_26(void) = ExitFunction : # 691| void ArrayReferences() # 691| Block 0 -# 691| v0_0(void) = EnterFunction : -# 691| mu0_1(unknown) = AliasedDefinition : -# 691| mu0_2(unknown) = UnmodeledDefinition : -# 692| r0_3(glval) = VariableAddress[a] : -# 692| mu0_4(int[10]) = Uninitialized[a] : &:r0_3 -# 693| r0_5(glval) = VariableAddress[ra] : -# 693| r0_6(glval) = VariableAddress[a] : -# 693| mu0_7(int(&)[10]) = Store : &:r0_5, r0_6 -# 694| r0_8(glval) = VariableAddress[x] : -# 694| r0_9(glval) = VariableAddress[ra] : -# 694| r0_10(int(&)[10]) = Load : &:r0_9, ~mu0_2 -# 694| r0_11(int *) = Convert : r0_10 -# 694| r0_12(int) = Constant[5] : -# 694| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -# 694| r0_14(int) = Load : &:r0_13, ~mu0_2 -# 694| mu0_15(int) = Store : &:r0_8, r0_14 -# 695| v0_16(void) = NoOp : -# 691| v0_17(void) = ReturnVoid : -# 691| v0_18(void) = UnmodeledUse : mu* -# 691| v0_19(void) = ExitFunction : +# 691| v0_0(void) = EnterFunction : +# 691| mu0_1(unknown) = AliasedDefinition : +# 691| mu0_2(unknown) = UnmodeledDefinition : +# 692| r0_3(glval) = VariableAddress[a] : +# 692| mu0_4(int[10]) = Uninitialized[a] : &:r0_3 +# 693| r0_5(glval) = VariableAddress[ra] : +# 693| r0_6(glval) = VariableAddress[a] : +# 693| r0_7(int(&)[10]) = CopyValue : r0_6 +# 693| mu0_8(int(&)[10]) = Store : &:r0_5, r0_7 +# 694| r0_9(glval) = VariableAddress[x] : +# 694| r0_10(glval) = VariableAddress[ra] : +# 694| r0_11(int(&)[10]) = Load : &:r0_10, ~mu0_2 +# 694| r0_12(glval) = CopyValue : r0_11 +# 694| r0_13(int *) = Convert : r0_12 +# 694| r0_14(int) = Constant[5] : +# 694| r0_15(glval) = PointerAdd[4] : r0_13, r0_14 +# 694| r0_16(int) = Load : &:r0_15, ~mu0_2 +# 694| mu0_17(int) = Store : &:r0_9, r0_16 +# 695| v0_18(void) = NoOp : +# 691| v0_19(void) = ReturnVoid : +# 691| v0_20(void) = UnmodeledUse : mu* +# 691| v0_21(void) = ExitFunction : # 697| void FunctionReferences() # 697| Block 0 @@ -2995,20 +3163,23 @@ ir.cpp: # 697| mu0_2(unknown) = UnmodeledDefinition : # 698| r0_3(glval<..(&)(..)>) = VariableAddress[rfn] : # 698| r0_4(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : -# 698| mu0_5(..(&)(..)) = Store : &:r0_3, r0_4 -# 699| r0_6(glval<..(*)(..)>) = VariableAddress[pfn] : -# 699| r0_7(glval<..(&)(..)>) = VariableAddress[rfn] : -# 699| r0_8(..(&)(..)) = Load : &:r0_7, ~mu0_2 -# 699| mu0_9(..(*)(..)) = Store : &:r0_6, r0_8 -# 700| r0_10(glval<..(&)(..)>) = VariableAddress[rfn] : -# 700| r0_11(..(&)(..)) = Load : &:r0_10, ~mu0_2 -# 700| r0_12(int) = Constant[5] : -# 700| r0_13(int) = Call : func:r0_11, 0:r0_12 -# 700| mu0_14(unknown) = ^CallSideEffect : ~mu0_2 -# 701| v0_15(void) = NoOp : -# 697| v0_16(void) = ReturnVoid : -# 697| v0_17(void) = UnmodeledUse : mu* -# 697| v0_18(void) = ExitFunction : +# 698| r0_5(..(&)(..)) = CopyValue : r0_4 +# 698| mu0_6(..(&)(..)) = Store : &:r0_3, r0_5 +# 699| r0_7(glval<..(*)(..)>) = VariableAddress[pfn] : +# 699| r0_8(glval<..(&)(..)>) = VariableAddress[rfn] : +# 699| r0_9(..(&)(..)) = Load : &:r0_8, ~mu0_2 +# 699| r0_10(..(*)(..)) = CopyValue : r0_9 +# 699| mu0_11(..(*)(..)) = Store : &:r0_7, r0_10 +# 700| r0_12(glval<..(&)(..)>) = VariableAddress[rfn] : +# 700| r0_13(..(&)(..)) = Load : &:r0_12, ~mu0_2 +# 700| r0_14(..(*)(..)) = CopyValue : r0_13 +# 700| r0_15(int) = Constant[5] : +# 700| r0_16(int) = Call : func:r0_14, 0:r0_15 +# 700| mu0_17(unknown) = ^CallSideEffect : ~mu0_2 +# 701| v0_18(void) = NoOp : +# 697| v0_19(void) = ReturnVoid : +# 697| v0_20(void) = UnmodeledUse : mu* +# 697| v0_21(void) = ExitFunction : # 704| int min(int, int) # 704| Block 0 @@ -3166,6 +3337,7 @@ ir.cpp: # 731| r6_4(int) = Load : &:r6_3, ~mu0_2 # 731| r6_5(glval) = VariableAddress[x] : # 731| mu6_6(int) = Store : &:r6_5, r6_4 +# 731| r6_7(glval) = CopyValue : r6_5 #-----| Goto -> Block 8 # 731| Block 7 @@ -3182,6 +3354,7 @@ ir.cpp: # 733| r8_0(int) = Constant[7] : # 733| r8_1(glval) = VariableAddress[x] : # 733| mu8_2(int) = Store : &:r8_1, r8_0 +# 733| r8_3(glval) = CopyValue : r8_1 #-----| Goto -> Block 14 # 735| Block 9 @@ -3232,19 +3405,25 @@ ir.cpp: #-----| mu0_5(Base &) = InitializeParameter[p#0] : &:r0_4 #-----| r0_6(Base *) = CopyValue : r0_3 #-----| r0_7(glval) = FieldAddress[base_s] : r0_6 -# 745| r0_8(glval) = FunctionAddress[operator=] : -#-----| r0_9(glval) = VariableAddress[p#0] : -#-----| r0_10(Base &) = Load : &:r0_9, ~mu0_2 -#-----| r0_11(glval) = FieldAddress[base_s] : r0_10 -# 745| r0_12(String &) = Call : func:r0_8, this:r0_7, 0:r0_11 -# 745| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_14(glval) = VariableAddress[#return] : -#-----| r0_15(Base *) = CopyValue : r0_3 -#-----| mu0_16(Base &) = Store : &:r0_14, r0_15 -# 745| r0_17(glval) = VariableAddress[#return] : -# 745| v0_18(void) = ReturnValue : &:r0_17, ~mu0_2 -# 745| v0_19(void) = UnmodeledUse : mu* -# 745| v0_20(void) = ExitFunction : +#-----| r0_8(String *) = CopyValue : r0_7 +# 745| r0_9(glval) = FunctionAddress[operator=] : +#-----| r0_10(glval) = VariableAddress[p#0] : +#-----| r0_11(Base &) = Load : &:r0_10, ~mu0_2 +#-----| r0_12(glval) = CopyValue : r0_11 +#-----| r0_13(glval) = FieldAddress[base_s] : r0_12 +#-----| r0_14(String &) = CopyValue : r0_13 +# 745| r0_15(String &) = Call : func:r0_9, this:r0_8, 0:r0_14 +# 745| mu0_16(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_17(glval) = CopyValue : r0_15 +#-----| r0_18(glval) = VariableAddress[#return] : +#-----| r0_19(Base *) = CopyValue : r0_3 +#-----| r0_20(glval) = CopyValue : r0_19 +#-----| r0_21(Base &) = CopyValue : r0_20 +#-----| mu0_22(Base &) = Store : &:r0_18, r0_21 +# 745| r0_23(glval) = VariableAddress[#return] : +# 745| v0_24(void) = ReturnValue : &:r0_23, ~mu0_2 +# 745| v0_25(void) = UnmodeledUse : mu* +# 745| v0_26(void) = ExitFunction : # 745| void Base::Base(Base const&) # 745| Block 0 @@ -3306,24 +3485,35 @@ ir.cpp: # 754| r0_8(glval) = FunctionAddress[operator=] : #-----| r0_9(glval) = VariableAddress[p#0] : #-----| r0_10(Middle &) = Load : &:r0_9, ~mu0_2 -#-----| r0_11(Base *) = ConvertToBase[Middle : Base] : r0_10 -# 754| r0_12(Base &) = Call : func:r0_8, this:r0_7, 0:r0_11 -# 754| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_14(Middle *) = CopyValue : r0_3 -#-----| r0_15(glval) = FieldAddress[middle_s] : r0_14 -# 754| r0_16(glval) = FunctionAddress[operator=] : -#-----| r0_17(glval) = VariableAddress[p#0] : -#-----| r0_18(Middle &) = Load : &:r0_17, ~mu0_2 -#-----| r0_19(glval) = FieldAddress[middle_s] : r0_18 -# 754| r0_20(String &) = Call : func:r0_16, this:r0_15, 0:r0_19 -# 754| mu0_21(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_22(glval) = VariableAddress[#return] : -#-----| r0_23(Middle *) = CopyValue : r0_3 -#-----| mu0_24(Middle &) = Store : &:r0_22, r0_23 -# 754| r0_25(glval) = VariableAddress[#return] : -# 754| v0_26(void) = ReturnValue : &:r0_25, ~mu0_2 -# 754| v0_27(void) = UnmodeledUse : mu* -# 754| v0_28(void) = ExitFunction : +#-----| r0_11(glval) = CopyValue : r0_10 +#-----| r0_12(Middle *) = CopyValue : r0_11 +#-----| r0_13(Base *) = ConvertToBase[Middle : Base] : r0_12 +#-----| r0_14(glval) = CopyValue : r0_13 +#-----| r0_15(Base &) = CopyValue : r0_14 +# 754| r0_16(Base &) = Call : func:r0_8, this:r0_7, 0:r0_15 +# 754| mu0_17(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_18(glval) = CopyValue : r0_16 +#-----| r0_19(Middle *) = CopyValue : r0_3 +#-----| r0_20(glval) = FieldAddress[middle_s] : r0_19 +#-----| r0_21(String *) = CopyValue : r0_20 +# 754| r0_22(glval) = FunctionAddress[operator=] : +#-----| r0_23(glval) = VariableAddress[p#0] : +#-----| r0_24(Middle &) = Load : &:r0_23, ~mu0_2 +#-----| r0_25(glval) = CopyValue : r0_24 +#-----| r0_26(glval) = FieldAddress[middle_s] : r0_25 +#-----| r0_27(String &) = CopyValue : r0_26 +# 754| r0_28(String &) = Call : func:r0_22, this:r0_21, 0:r0_27 +# 754| mu0_29(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_30(glval) = CopyValue : r0_28 +#-----| r0_31(glval) = VariableAddress[#return] : +#-----| r0_32(Middle *) = CopyValue : r0_3 +#-----| r0_33(glval) = CopyValue : r0_32 +#-----| r0_34(Middle &) = CopyValue : r0_33 +#-----| mu0_35(Middle &) = Store : &:r0_31, r0_34 +# 754| r0_36(glval) = VariableAddress[#return] : +# 754| v0_37(void) = ReturnValue : &:r0_36, ~mu0_2 +# 754| v0_38(void) = UnmodeledUse : mu* +# 754| v0_39(void) = ExitFunction : # 757| void Middle::Middle() # 757| Block 0 @@ -3376,24 +3566,35 @@ ir.cpp: # 763| r0_8(glval) = FunctionAddress[operator=] : #-----| r0_9(glval) = VariableAddress[p#0] : #-----| r0_10(Derived &) = Load : &:r0_9, ~mu0_2 -#-----| r0_11(Middle *) = ConvertToBase[Derived : Middle] : r0_10 -# 763| r0_12(Middle &) = Call : func:r0_8, this:r0_7, 0:r0_11 -# 763| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_14(Derived *) = CopyValue : r0_3 -#-----| r0_15(glval) = FieldAddress[derived_s] : r0_14 -# 763| r0_16(glval) = FunctionAddress[operator=] : -#-----| r0_17(glval) = VariableAddress[p#0] : -#-----| r0_18(Derived &) = Load : &:r0_17, ~mu0_2 -#-----| r0_19(glval) = FieldAddress[derived_s] : r0_18 -# 763| r0_20(String &) = Call : func:r0_16, this:r0_15, 0:r0_19 -# 763| mu0_21(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_22(glval) = VariableAddress[#return] : -#-----| r0_23(Derived *) = CopyValue : r0_3 -#-----| mu0_24(Derived &) = Store : &:r0_22, r0_23 -# 763| r0_25(glval) = VariableAddress[#return] : -# 763| v0_26(void) = ReturnValue : &:r0_25, ~mu0_2 -# 763| v0_27(void) = UnmodeledUse : mu* -# 763| v0_28(void) = ExitFunction : +#-----| r0_11(glval) = CopyValue : r0_10 +#-----| r0_12(Derived *) = CopyValue : r0_11 +#-----| r0_13(Middle *) = ConvertToBase[Derived : Middle] : r0_12 +#-----| r0_14(glval) = CopyValue : r0_13 +#-----| r0_15(Middle &) = CopyValue : r0_14 +# 763| r0_16(Middle &) = Call : func:r0_8, this:r0_7, 0:r0_15 +# 763| mu0_17(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_18(glval) = CopyValue : r0_16 +#-----| r0_19(Derived *) = CopyValue : r0_3 +#-----| r0_20(glval) = FieldAddress[derived_s] : r0_19 +#-----| r0_21(String *) = CopyValue : r0_20 +# 763| r0_22(glval) = FunctionAddress[operator=] : +#-----| r0_23(glval) = VariableAddress[p#0] : +#-----| r0_24(Derived &) = Load : &:r0_23, ~mu0_2 +#-----| r0_25(glval) = CopyValue : r0_24 +#-----| r0_26(glval) = FieldAddress[derived_s] : r0_25 +#-----| r0_27(String &) = CopyValue : r0_26 +# 763| r0_28(String &) = Call : func:r0_22, this:r0_21, 0:r0_27 +# 763| mu0_29(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_30(glval) = CopyValue : r0_28 +#-----| r0_31(glval) = VariableAddress[#return] : +#-----| r0_32(Derived *) = CopyValue : r0_3 +#-----| r0_33(glval) = CopyValue : r0_32 +#-----| r0_34(Derived &) = CopyValue : r0_33 +#-----| mu0_35(Derived &) = Store : &:r0_31, r0_34 +# 763| r0_36(glval) = VariableAddress[#return] : +# 763| v0_37(void) = ReturnValue : &:r0_36, ~mu0_2 +# 763| v0_38(void) = UnmodeledUse : mu* +# 763| v0_39(void) = ExitFunction : # 766| void Derived::Derived() # 766| Block 0 @@ -3582,193 +3783,236 @@ ir.cpp: # 802| mu0_14(unknown) = ^CallSideEffect : ~mu0_2 # 804| r0_15(glval) = VariableAddress[pb] : # 804| r0_16(glval) = VariableAddress[b] : -# 804| mu0_17(Base *) = Store : &:r0_15, r0_16 -# 805| r0_18(glval) = VariableAddress[pm] : -# 805| r0_19(glval) = VariableAddress[m] : -# 805| mu0_20(Middle *) = Store : &:r0_18, r0_19 -# 806| r0_21(glval) = VariableAddress[pd] : -# 806| r0_22(glval) = VariableAddress[d] : -# 806| mu0_23(Derived *) = Store : &:r0_21, r0_22 -# 808| r0_24(glval) = VariableAddress[b] : -# 808| r0_25(glval) = FunctionAddress[operator=] : -# 808| r0_26(glval) = VariableAddress[m] : -# 808| r0_27(glval) = ConvertToBase[Middle : Base] : r0_26 -# 808| r0_28(Base &) = Call : func:r0_25, this:r0_24, 0:r0_27 -# 808| mu0_29(unknown) = ^CallSideEffect : ~mu0_2 -# 809| r0_30(glval) = VariableAddress[b] : -# 809| r0_31(glval) = FunctionAddress[operator=] : -# 809| r0_32(glval) = FunctionAddress[Base] : -# 809| r0_33(glval) = VariableAddress[m] : -# 809| r0_34(glval) = ConvertToBase[Middle : Base] : r0_33 -# 809| v0_35(void) = Call : func:r0_32, 0:r0_34 -# 809| mu0_36(unknown) = ^CallSideEffect : ~mu0_2 -# 809| r0_37(glval) = Convert : v0_35 -# 809| r0_38(Base &) = Call : func:r0_31, this:r0_30, 0:r0_37 -# 809| mu0_39(unknown) = ^CallSideEffect : ~mu0_2 -# 810| r0_40(glval) = VariableAddress[b] : -# 810| r0_41(glval) = FunctionAddress[operator=] : -# 810| r0_42(glval) = FunctionAddress[Base] : -# 810| r0_43(glval) = VariableAddress[m] : -# 810| r0_44(glval) = ConvertToBase[Middle : Base] : r0_43 -# 810| v0_45(void) = Call : func:r0_42, 0:r0_44 -# 810| mu0_46(unknown) = ^CallSideEffect : ~mu0_2 -# 810| r0_47(glval) = Convert : v0_45 -# 810| r0_48(Base &) = Call : func:r0_41, this:r0_40, 0:r0_47 -# 810| mu0_49(unknown) = ^CallSideEffect : ~mu0_2 -# 811| r0_50(glval) = VariableAddress[pm] : -# 811| r0_51(Middle *) = Load : &:r0_50, ~mu0_2 -# 811| r0_52(Base *) = ConvertToBase[Middle : Base] : r0_51 -# 811| r0_53(glval) = VariableAddress[pb] : -# 811| mu0_54(Base *) = Store : &:r0_53, r0_52 -# 812| r0_55(glval) = VariableAddress[pm] : -# 812| r0_56(Middle *) = Load : &:r0_55, ~mu0_2 -# 812| r0_57(Base *) = ConvertToBase[Middle : Base] : r0_56 -# 812| r0_58(glval) = VariableAddress[pb] : -# 812| mu0_59(Base *) = Store : &:r0_58, r0_57 -# 813| r0_60(glval) = VariableAddress[pm] : -# 813| r0_61(Middle *) = Load : &:r0_60, ~mu0_2 -# 813| r0_62(Base *) = ConvertToBase[Middle : Base] : r0_61 -# 813| r0_63(glval) = VariableAddress[pb] : -# 813| mu0_64(Base *) = Store : &:r0_63, r0_62 -# 814| r0_65(glval) = VariableAddress[pm] : -# 814| r0_66(Middle *) = Load : &:r0_65, ~mu0_2 -# 814| r0_67(Base *) = Convert : r0_66 -# 814| r0_68(glval) = VariableAddress[pb] : -# 814| mu0_69(Base *) = Store : &:r0_68, r0_67 -# 816| r0_70(glval) = VariableAddress[m] : -# 816| r0_71(glval) = FunctionAddress[operator=] : -# 816| r0_72(glval) = VariableAddress[b] : -# 816| r0_73(glval) = ConvertToDerived[Middle : Base] : r0_72 -# 816| r0_74(glval) = Convert : r0_73 -# 816| r0_75(Middle &) = Call : func:r0_71, this:r0_70, 0:r0_74 -# 816| mu0_76(unknown) = ^CallSideEffect : ~mu0_2 -# 817| r0_77(glval) = VariableAddress[m] : -# 817| r0_78(glval) = FunctionAddress[operator=] : -# 817| r0_79(glval) = VariableAddress[b] : -# 817| r0_80(glval) = ConvertToDerived[Middle : Base] : r0_79 -# 817| r0_81(glval) = Convert : r0_80 -# 817| r0_82(Middle &) = Call : func:r0_78, this:r0_77, 0:r0_81 -# 817| mu0_83(unknown) = ^CallSideEffect : ~mu0_2 -# 818| r0_84(glval) = VariableAddress[pb] : -# 818| r0_85(Base *) = Load : &:r0_84, ~mu0_2 -# 818| r0_86(Middle *) = ConvertToDerived[Middle : Base] : r0_85 -# 818| r0_87(glval) = VariableAddress[pm] : -# 818| mu0_88(Middle *) = Store : &:r0_87, r0_86 -# 819| r0_89(glval) = VariableAddress[pb] : -# 819| r0_90(Base *) = Load : &:r0_89, ~mu0_2 -# 819| r0_91(Middle *) = ConvertToDerived[Middle : Base] : r0_90 -# 819| r0_92(glval) = VariableAddress[pm] : -# 819| mu0_93(Middle *) = Store : &:r0_92, r0_91 -# 820| r0_94(glval) = VariableAddress[pb] : -# 820| r0_95(Base *) = Load : &:r0_94, ~mu0_2 -# 820| r0_96(Middle *) = Convert : r0_95 -# 820| r0_97(glval) = VariableAddress[pm] : -# 820| mu0_98(Middle *) = Store : &:r0_97, r0_96 -# 822| r0_99(glval) = VariableAddress[b] : -# 822| r0_100(glval) = FunctionAddress[operator=] : -# 822| r0_101(glval) = VariableAddress[d] : -# 822| r0_102(glval) = ConvertToBase[Derived : Middle] : r0_101 -# 822| r0_103(glval) = ConvertToBase[Middle : Base] : r0_102 -# 822| r0_104(Base &) = Call : func:r0_100, this:r0_99, 0:r0_103 -# 822| mu0_105(unknown) = ^CallSideEffect : ~mu0_2 -# 823| r0_106(glval) = VariableAddress[b] : -# 823| r0_107(glval) = FunctionAddress[operator=] : -# 823| r0_108(glval) = FunctionAddress[Base] : -# 823| r0_109(glval) = VariableAddress[d] : -# 823| r0_110(glval) = ConvertToBase[Derived : Middle] : r0_109 -# 823| r0_111(glval) = ConvertToBase[Middle : Base] : r0_110 -# 823| v0_112(void) = Call : func:r0_108, 0:r0_111 -# 823| mu0_113(unknown) = ^CallSideEffect : ~mu0_2 -# 823| r0_114(glval) = Convert : v0_112 -# 823| r0_115(Base &) = Call : func:r0_107, this:r0_106, 0:r0_114 -# 823| mu0_116(unknown) = ^CallSideEffect : ~mu0_2 -# 824| r0_117(glval) = VariableAddress[b] : -# 824| r0_118(glval) = FunctionAddress[operator=] : -# 824| r0_119(glval) = FunctionAddress[Base] : -# 824| r0_120(glval) = VariableAddress[d] : -# 824| r0_121(glval) = ConvertToBase[Derived : Middle] : r0_120 -# 824| r0_122(glval) = ConvertToBase[Middle : Base] : r0_121 -# 824| v0_123(void) = Call : func:r0_119, 0:r0_122 -# 824| mu0_124(unknown) = ^CallSideEffect : ~mu0_2 -# 824| r0_125(glval) = Convert : v0_123 -# 824| r0_126(Base &) = Call : func:r0_118, this:r0_117, 0:r0_125 -# 824| mu0_127(unknown) = ^CallSideEffect : ~mu0_2 -# 825| r0_128(glval) = VariableAddress[pd] : -# 825| r0_129(Derived *) = Load : &:r0_128, ~mu0_2 -# 825| r0_130(Middle *) = ConvertToBase[Derived : Middle] : r0_129 -# 825| r0_131(Base *) = ConvertToBase[Middle : Base] : r0_130 -# 825| r0_132(glval) = VariableAddress[pb] : -# 825| mu0_133(Base *) = Store : &:r0_132, r0_131 -# 826| r0_134(glval) = VariableAddress[pd] : -# 826| r0_135(Derived *) = Load : &:r0_134, ~mu0_2 -# 826| r0_136(Middle *) = ConvertToBase[Derived : Middle] : r0_135 -# 826| r0_137(Base *) = ConvertToBase[Middle : Base] : r0_136 -# 826| r0_138(glval) = VariableAddress[pb] : -# 826| mu0_139(Base *) = Store : &:r0_138, r0_137 -# 827| r0_140(glval) = VariableAddress[pd] : -# 827| r0_141(Derived *) = Load : &:r0_140, ~mu0_2 -# 827| r0_142(Middle *) = ConvertToBase[Derived : Middle] : r0_141 -# 827| r0_143(Base *) = ConvertToBase[Middle : Base] : r0_142 -# 827| r0_144(glval) = VariableAddress[pb] : -# 827| mu0_145(Base *) = Store : &:r0_144, r0_143 -# 828| r0_146(glval) = VariableAddress[pd] : -# 828| r0_147(Derived *) = Load : &:r0_146, ~mu0_2 -# 828| r0_148(Base *) = Convert : r0_147 -# 828| r0_149(glval) = VariableAddress[pb] : -# 828| mu0_150(Base *) = Store : &:r0_149, r0_148 -# 830| r0_151(glval) = VariableAddress[d] : -# 830| r0_152(glval) = FunctionAddress[operator=] : -# 830| r0_153(glval) = VariableAddress[b] : -# 830| r0_154(glval) = ConvertToDerived[Middle : Base] : r0_153 -# 830| r0_155(glval) = ConvertToDerived[Derived : Middle] : r0_154 -# 830| r0_156(glval) = Convert : r0_155 -# 830| r0_157(Derived &) = Call : func:r0_152, this:r0_151, 0:r0_156 -# 830| mu0_158(unknown) = ^CallSideEffect : ~mu0_2 -# 831| r0_159(glval) = VariableAddress[d] : -# 831| r0_160(glval) = FunctionAddress[operator=] : -# 831| r0_161(glval) = VariableAddress[b] : -# 831| r0_162(glval) = ConvertToDerived[Middle : Base] : r0_161 -# 831| r0_163(glval) = ConvertToDerived[Derived : Middle] : r0_162 -# 831| r0_164(glval) = Convert : r0_163 -# 831| r0_165(Derived &) = Call : func:r0_160, this:r0_159, 0:r0_164 -# 831| mu0_166(unknown) = ^CallSideEffect : ~mu0_2 -# 832| r0_167(glval) = VariableAddress[pb] : -# 832| r0_168(Base *) = Load : &:r0_167, ~mu0_2 -# 832| r0_169(Middle *) = ConvertToDerived[Middle : Base] : r0_168 -# 832| r0_170(Derived *) = ConvertToDerived[Derived : Middle] : r0_169 -# 832| r0_171(glval) = VariableAddress[pd] : -# 832| mu0_172(Derived *) = Store : &:r0_171, r0_170 -# 833| r0_173(glval) = VariableAddress[pb] : -# 833| r0_174(Base *) = Load : &:r0_173, ~mu0_2 -# 833| r0_175(Middle *) = ConvertToDerived[Middle : Base] : r0_174 -# 833| r0_176(Derived *) = ConvertToDerived[Derived : Middle] : r0_175 -# 833| r0_177(glval) = VariableAddress[pd] : -# 833| mu0_178(Derived *) = Store : &:r0_177, r0_176 -# 834| r0_179(glval) = VariableAddress[pb] : -# 834| r0_180(Base *) = Load : &:r0_179, ~mu0_2 -# 834| r0_181(Derived *) = Convert : r0_180 -# 834| r0_182(glval) = VariableAddress[pd] : -# 834| mu0_183(Derived *) = Store : &:r0_182, r0_181 -# 836| r0_184(glval) = VariableAddress[pmv] : -# 836| r0_185(MiddleVB1 *) = Constant[0] : -# 836| mu0_186(MiddleVB1 *) = Store : &:r0_184, r0_185 -# 837| r0_187(glval) = VariableAddress[pdv] : -# 837| r0_188(DerivedVB *) = Constant[0] : -# 837| mu0_189(DerivedVB *) = Store : &:r0_187, r0_188 -# 838| r0_190(glval) = VariableAddress[pmv] : -# 838| r0_191(MiddleVB1 *) = Load : &:r0_190, ~mu0_2 -# 838| r0_192(Base *) = ConvertToVirtualBase[MiddleVB1 : Base] : r0_191 -# 838| r0_193(glval) = VariableAddress[pb] : -# 838| mu0_194(Base *) = Store : &:r0_193, r0_192 -# 839| r0_195(glval) = VariableAddress[pdv] : -# 839| r0_196(DerivedVB *) = Load : &:r0_195, ~mu0_2 -# 839| r0_197(Base *) = ConvertToVirtualBase[DerivedVB : Base] : r0_196 -# 839| r0_198(glval) = VariableAddress[pb] : -# 839| mu0_199(Base *) = Store : &:r0_198, r0_197 -# 840| v0_200(void) = NoOp : -# 799| v0_201(void) = ReturnVoid : -# 799| v0_202(void) = UnmodeledUse : mu* -# 799| v0_203(void) = ExitFunction : +# 804| r0_17(Base *) = CopyValue : r0_16 +# 804| mu0_18(Base *) = Store : &:r0_15, r0_17 +# 805| r0_19(glval) = VariableAddress[pm] : +# 805| r0_20(glval) = VariableAddress[m] : +# 805| r0_21(Middle *) = CopyValue : r0_20 +# 805| mu0_22(Middle *) = Store : &:r0_19, r0_21 +# 806| r0_23(glval) = VariableAddress[pd] : +# 806| r0_24(glval) = VariableAddress[d] : +# 806| r0_25(Derived *) = CopyValue : r0_24 +# 806| mu0_26(Derived *) = Store : &:r0_23, r0_25 +# 808| r0_27(glval) = VariableAddress[b] : +# 808| r0_28(glval) = FunctionAddress[operator=] : +# 808| r0_29(glval) = VariableAddress[m] : +# 808| r0_30(glval) = ConvertToBase[Middle : Base] : r0_29 +# 808| r0_31(Base &) = CopyValue : r0_30 +# 808| r0_32(Base &) = Call : func:r0_28, this:r0_27, 0:r0_31 +# 808| mu0_33(unknown) = ^CallSideEffect : ~mu0_2 +# 808| r0_34(glval) = CopyValue : r0_32 +# 809| r0_35(glval) = VariableAddress[b] : +# 809| r0_36(glval) = FunctionAddress[operator=] : +# 809| r0_37(glval) = FunctionAddress[Base] : +# 809| r0_38(glval) = VariableAddress[m] : +# 809| r0_39(glval) = ConvertToBase[Middle : Base] : r0_38 +# 809| r0_40(Base &) = CopyValue : r0_39 +# 809| v0_41(void) = Call : func:r0_37, 0:r0_40 +# 809| mu0_42(unknown) = ^CallSideEffect : ~mu0_2 +# 809| r0_43(glval) = Convert : v0_41 +# 809| r0_44(Base &) = CopyValue : r0_43 +# 809| r0_45(Base &) = Call : func:r0_36, this:r0_35, 0:r0_44 +# 809| mu0_46(unknown) = ^CallSideEffect : ~mu0_2 +# 809| r0_47(glval) = CopyValue : r0_45 +# 810| r0_48(glval) = VariableAddress[b] : +# 810| r0_49(glval) = FunctionAddress[operator=] : +# 810| r0_50(glval) = FunctionAddress[Base] : +# 810| r0_51(glval) = VariableAddress[m] : +# 810| r0_52(glval) = ConvertToBase[Middle : Base] : r0_51 +# 810| r0_53(Base &) = CopyValue : r0_52 +# 810| v0_54(void) = Call : func:r0_50, 0:r0_53 +# 810| mu0_55(unknown) = ^CallSideEffect : ~mu0_2 +# 810| r0_56(glval) = Convert : v0_54 +# 810| r0_57(Base &) = CopyValue : r0_56 +# 810| r0_58(Base &) = Call : func:r0_49, this:r0_48, 0:r0_57 +# 810| mu0_59(unknown) = ^CallSideEffect : ~mu0_2 +# 810| r0_60(glval) = CopyValue : r0_58 +# 811| r0_61(glval) = VariableAddress[pm] : +# 811| r0_62(Middle *) = Load : &:r0_61, ~mu0_2 +# 811| r0_63(Base *) = ConvertToBase[Middle : Base] : r0_62 +# 811| r0_64(glval) = VariableAddress[pb] : +# 811| mu0_65(Base *) = Store : &:r0_64, r0_63 +# 811| r0_66(glval) = CopyValue : r0_64 +# 812| r0_67(glval) = VariableAddress[pm] : +# 812| r0_68(Middle *) = Load : &:r0_67, ~mu0_2 +# 812| r0_69(Base *) = ConvertToBase[Middle : Base] : r0_68 +# 812| r0_70(glval) = VariableAddress[pb] : +# 812| mu0_71(Base *) = Store : &:r0_70, r0_69 +# 812| r0_72(glval) = CopyValue : r0_70 +# 813| r0_73(glval) = VariableAddress[pm] : +# 813| r0_74(Middle *) = Load : &:r0_73, ~mu0_2 +# 813| r0_75(Base *) = ConvertToBase[Middle : Base] : r0_74 +# 813| r0_76(glval) = VariableAddress[pb] : +# 813| mu0_77(Base *) = Store : &:r0_76, r0_75 +# 813| r0_78(glval) = CopyValue : r0_76 +# 814| r0_79(glval) = VariableAddress[pm] : +# 814| r0_80(Middle *) = Load : &:r0_79, ~mu0_2 +# 814| r0_81(Base *) = Convert : r0_80 +# 814| r0_82(glval) = VariableAddress[pb] : +# 814| mu0_83(Base *) = Store : &:r0_82, r0_81 +# 814| r0_84(glval) = CopyValue : r0_82 +# 816| r0_85(glval) = VariableAddress[m] : +# 816| r0_86(glval) = FunctionAddress[operator=] : +# 816| r0_87(glval) = VariableAddress[b] : +# 816| r0_88(glval) = ConvertToDerived[Middle : Base] : r0_87 +# 816| r0_89(glval) = Convert : r0_88 +# 816| r0_90(Middle &) = CopyValue : r0_89 +# 816| r0_91(Middle &) = Call : func:r0_86, this:r0_85, 0:r0_90 +# 816| mu0_92(unknown) = ^CallSideEffect : ~mu0_2 +# 816| r0_93(glval) = CopyValue : r0_91 +# 817| r0_94(glval) = VariableAddress[m] : +# 817| r0_95(glval) = FunctionAddress[operator=] : +# 817| r0_96(glval) = VariableAddress[b] : +# 817| r0_97(glval) = ConvertToDerived[Middle : Base] : r0_96 +# 817| r0_98(glval) = Convert : r0_97 +# 817| r0_99(Middle &) = CopyValue : r0_98 +# 817| r0_100(Middle &) = Call : func:r0_95, this:r0_94, 0:r0_99 +# 817| mu0_101(unknown) = ^CallSideEffect : ~mu0_2 +# 817| r0_102(glval) = CopyValue : r0_100 +# 818| r0_103(glval) = VariableAddress[pb] : +# 818| r0_104(Base *) = Load : &:r0_103, ~mu0_2 +# 818| r0_105(Middle *) = ConvertToDerived[Middle : Base] : r0_104 +# 818| r0_106(glval) = VariableAddress[pm] : +# 818| mu0_107(Middle *) = Store : &:r0_106, r0_105 +# 818| r0_108(glval) = CopyValue : r0_106 +# 819| r0_109(glval) = VariableAddress[pb] : +# 819| r0_110(Base *) = Load : &:r0_109, ~mu0_2 +# 819| r0_111(Middle *) = ConvertToDerived[Middle : Base] : r0_110 +# 819| r0_112(glval) = VariableAddress[pm] : +# 819| mu0_113(Middle *) = Store : &:r0_112, r0_111 +# 819| r0_114(glval) = CopyValue : r0_112 +# 820| r0_115(glval) = VariableAddress[pb] : +# 820| r0_116(Base *) = Load : &:r0_115, ~mu0_2 +# 820| r0_117(Middle *) = Convert : r0_116 +# 820| r0_118(glval) = VariableAddress[pm] : +# 820| mu0_119(Middle *) = Store : &:r0_118, r0_117 +# 820| r0_120(glval) = CopyValue : r0_118 +# 822| r0_121(glval) = VariableAddress[b] : +# 822| r0_122(glval) = FunctionAddress[operator=] : +# 822| r0_123(glval) = VariableAddress[d] : +# 822| r0_124(glval) = ConvertToBase[Derived : Middle] : r0_123 +# 822| r0_125(glval) = ConvertToBase[Middle : Base] : r0_124 +# 822| r0_126(Base &) = CopyValue : r0_125 +# 822| r0_127(Base &) = Call : func:r0_122, this:r0_121, 0:r0_126 +# 822| mu0_128(unknown) = ^CallSideEffect : ~mu0_2 +# 822| r0_129(glval) = CopyValue : r0_127 +# 823| r0_130(glval) = VariableAddress[b] : +# 823| r0_131(glval) = FunctionAddress[operator=] : +# 823| r0_132(glval) = FunctionAddress[Base] : +# 823| r0_133(glval) = VariableAddress[d] : +# 823| r0_134(glval) = ConvertToBase[Derived : Middle] : r0_133 +# 823| r0_135(glval) = ConvertToBase[Middle : Base] : r0_134 +# 823| r0_136(Base &) = CopyValue : r0_135 +# 823| v0_137(void) = Call : func:r0_132, 0:r0_136 +# 823| mu0_138(unknown) = ^CallSideEffect : ~mu0_2 +# 823| r0_139(glval) = Convert : v0_137 +# 823| r0_140(Base &) = CopyValue : r0_139 +# 823| r0_141(Base &) = Call : func:r0_131, this:r0_130, 0:r0_140 +# 823| mu0_142(unknown) = ^CallSideEffect : ~mu0_2 +# 823| r0_143(glval) = CopyValue : r0_141 +# 824| r0_144(glval) = VariableAddress[b] : +# 824| r0_145(glval) = FunctionAddress[operator=] : +# 824| r0_146(glval) = FunctionAddress[Base] : +# 824| r0_147(glval) = VariableAddress[d] : +# 824| r0_148(glval) = ConvertToBase[Derived : Middle] : r0_147 +# 824| r0_149(glval) = ConvertToBase[Middle : Base] : r0_148 +# 824| r0_150(Base &) = CopyValue : r0_149 +# 824| v0_151(void) = Call : func:r0_146, 0:r0_150 +# 824| mu0_152(unknown) = ^CallSideEffect : ~mu0_2 +# 824| r0_153(glval) = Convert : v0_151 +# 824| r0_154(Base &) = CopyValue : r0_153 +# 824| r0_155(Base &) = Call : func:r0_145, this:r0_144, 0:r0_154 +# 824| mu0_156(unknown) = ^CallSideEffect : ~mu0_2 +# 824| r0_157(glval) = CopyValue : r0_155 +# 825| r0_158(glval) = VariableAddress[pd] : +# 825| r0_159(Derived *) = Load : &:r0_158, ~mu0_2 +# 825| r0_160(Middle *) = ConvertToBase[Derived : Middle] : r0_159 +# 825| r0_161(Base *) = ConvertToBase[Middle : Base] : r0_160 +# 825| r0_162(glval) = VariableAddress[pb] : +# 825| mu0_163(Base *) = Store : &:r0_162, r0_161 +# 825| r0_164(glval) = CopyValue : r0_162 +# 826| r0_165(glval) = VariableAddress[pd] : +# 826| r0_166(Derived *) = Load : &:r0_165, ~mu0_2 +# 826| r0_167(Middle *) = ConvertToBase[Derived : Middle] : r0_166 +# 826| r0_168(Base *) = ConvertToBase[Middle : Base] : r0_167 +# 826| r0_169(glval) = VariableAddress[pb] : +# 826| mu0_170(Base *) = Store : &:r0_169, r0_168 +# 826| r0_171(glval) = CopyValue : r0_169 +# 827| r0_172(glval) = VariableAddress[pd] : +# 827| r0_173(Derived *) = Load : &:r0_172, ~mu0_2 +# 827| r0_174(Middle *) = ConvertToBase[Derived : Middle] : r0_173 +# 827| r0_175(Base *) = ConvertToBase[Middle : Base] : r0_174 +# 827| r0_176(glval) = VariableAddress[pb] : +# 827| mu0_177(Base *) = Store : &:r0_176, r0_175 +# 827| r0_178(glval) = CopyValue : r0_176 +# 828| r0_179(glval) = VariableAddress[pd] : +# 828| r0_180(Derived *) = Load : &:r0_179, ~mu0_2 +# 828| r0_181(Base *) = Convert : r0_180 +# 828| r0_182(glval) = VariableAddress[pb] : +# 828| mu0_183(Base *) = Store : &:r0_182, r0_181 +# 828| r0_184(glval) = CopyValue : r0_182 +# 830| r0_185(glval) = VariableAddress[d] : +# 830| r0_186(glval) = FunctionAddress[operator=] : +# 830| r0_187(glval) = VariableAddress[b] : +# 830| r0_188(glval) = ConvertToDerived[Middle : Base] : r0_187 +# 830| r0_189(glval) = ConvertToDerived[Derived : Middle] : r0_188 +# 830| r0_190(glval) = Convert : r0_189 +# 830| r0_191(Derived &) = CopyValue : r0_190 +# 830| r0_192(Derived &) = Call : func:r0_186, this:r0_185, 0:r0_191 +# 830| mu0_193(unknown) = ^CallSideEffect : ~mu0_2 +# 830| r0_194(glval) = CopyValue : r0_192 +# 831| r0_195(glval) = VariableAddress[d] : +# 831| r0_196(glval) = FunctionAddress[operator=] : +# 831| r0_197(glval) = VariableAddress[b] : +# 831| r0_198(glval) = ConvertToDerived[Middle : Base] : r0_197 +# 831| r0_199(glval) = ConvertToDerived[Derived : Middle] : r0_198 +# 831| r0_200(glval) = Convert : r0_199 +# 831| r0_201(Derived &) = CopyValue : r0_200 +# 831| r0_202(Derived &) = Call : func:r0_196, this:r0_195, 0:r0_201 +# 831| mu0_203(unknown) = ^CallSideEffect : ~mu0_2 +# 831| r0_204(glval) = CopyValue : r0_202 +# 832| r0_205(glval) = VariableAddress[pb] : +# 832| r0_206(Base *) = Load : &:r0_205, ~mu0_2 +# 832| r0_207(Middle *) = ConvertToDerived[Middle : Base] : r0_206 +# 832| r0_208(Derived *) = ConvertToDerived[Derived : Middle] : r0_207 +# 832| r0_209(glval) = VariableAddress[pd] : +# 832| mu0_210(Derived *) = Store : &:r0_209, r0_208 +# 832| r0_211(glval) = CopyValue : r0_209 +# 833| r0_212(glval) = VariableAddress[pb] : +# 833| r0_213(Base *) = Load : &:r0_212, ~mu0_2 +# 833| r0_214(Middle *) = ConvertToDerived[Middle : Base] : r0_213 +# 833| r0_215(Derived *) = ConvertToDerived[Derived : Middle] : r0_214 +# 833| r0_216(glval) = VariableAddress[pd] : +# 833| mu0_217(Derived *) = Store : &:r0_216, r0_215 +# 833| r0_218(glval) = CopyValue : r0_216 +# 834| r0_219(glval) = VariableAddress[pb] : +# 834| r0_220(Base *) = Load : &:r0_219, ~mu0_2 +# 834| r0_221(Derived *) = Convert : r0_220 +# 834| r0_222(glval) = VariableAddress[pd] : +# 834| mu0_223(Derived *) = Store : &:r0_222, r0_221 +# 834| r0_224(glval) = CopyValue : r0_222 +# 836| r0_225(glval) = VariableAddress[pmv] : +# 836| r0_226(MiddleVB1 *) = Constant[0] : +# 836| mu0_227(MiddleVB1 *) = Store : &:r0_225, r0_226 +# 837| r0_228(glval) = VariableAddress[pdv] : +# 837| r0_229(DerivedVB *) = Constant[0] : +# 837| mu0_230(DerivedVB *) = Store : &:r0_228, r0_229 +# 838| r0_231(glval) = VariableAddress[pmv] : +# 838| r0_232(MiddleVB1 *) = Load : &:r0_231, ~mu0_2 +# 838| r0_233(Base *) = ConvertToVirtualBase[MiddleVB1 : Base] : r0_232 +# 838| r0_234(glval) = VariableAddress[pb] : +# 838| mu0_235(Base *) = Store : &:r0_234, r0_233 +# 838| r0_236(glval) = CopyValue : r0_234 +# 839| r0_237(glval) = VariableAddress[pdv] : +# 839| r0_238(DerivedVB *) = Load : &:r0_237, ~mu0_2 +# 839| r0_239(Base *) = ConvertToVirtualBase[DerivedVB : Base] : r0_238 +# 839| r0_240(glval) = VariableAddress[pb] : +# 839| mu0_241(Base *) = Store : &:r0_240, r0_239 +# 839| r0_242(glval) = CopyValue : r0_240 +# 840| v0_243(void) = NoOp : +# 799| v0_244(void) = ReturnVoid : +# 799| v0_245(void) = UnmodeledUse : mu* +# 799| v0_246(void) = ExitFunction : # 842| void PolymorphicBase::PolymorphicBase() # 842| Block 0 @@ -3826,42 +4070,48 @@ ir.cpp: # 851| mu0_10(unknown) = ^CallSideEffect : ~mu0_2 # 853| r0_11(glval) = VariableAddress[pb] : # 853| r0_12(glval) = VariableAddress[b] : -# 853| mu0_13(PolymorphicBase *) = Store : &:r0_11, r0_12 -# 854| r0_14(glval) = VariableAddress[pd] : -# 854| r0_15(glval) = VariableAddress[d] : -# 854| mu0_16(PolymorphicDerived *) = Store : &:r0_14, r0_15 -# 857| r0_17(glval) = VariableAddress[pd] : -# 857| r0_18(PolymorphicDerived *) = Load : &:r0_17, ~mu0_2 -# 857| r0_19(PolymorphicBase *) = CheckedConvertOrNull : r0_18 -# 857| r0_20(glval) = VariableAddress[pb] : -# 857| mu0_21(PolymorphicBase *) = Store : &:r0_20, r0_19 -# 858| r0_22(glval) = VariableAddress[rb] : -# 858| r0_23(glval) = VariableAddress[d] : -# 858| r0_24(glval) = CheckedConvertOrThrow : r0_23 -# 858| mu0_25(PolymorphicBase &) = Store : &:r0_22, r0_24 -# 860| r0_26(glval) = VariableAddress[pb] : -# 860| r0_27(PolymorphicBase *) = Load : &:r0_26, ~mu0_2 -# 860| r0_28(PolymorphicDerived *) = CheckedConvertOrNull : r0_27 -# 860| r0_29(glval) = VariableAddress[pd] : -# 860| mu0_30(PolymorphicDerived *) = Store : &:r0_29, r0_28 -# 861| r0_31(glval) = VariableAddress[rd] : -# 861| r0_32(glval) = VariableAddress[b] : -# 861| r0_33(glval) = CheckedConvertOrThrow : r0_32 -# 861| mu0_34(PolymorphicDerived &) = Store : &:r0_31, r0_33 -# 863| r0_35(glval) = VariableAddress[pv] : -# 863| r0_36(glval) = VariableAddress[pb] : -# 863| r0_37(PolymorphicBase *) = Load : &:r0_36, ~mu0_2 -# 863| r0_38(void *) = DynamicCastToVoid : r0_37 -# 863| mu0_39(void *) = Store : &:r0_35, r0_38 -# 864| r0_40(glval) = VariableAddress[pcv] : -# 864| r0_41(glval) = VariableAddress[pd] : -# 864| r0_42(PolymorphicDerived *) = Load : &:r0_41, ~mu0_2 -# 864| r0_43(void *) = DynamicCastToVoid : r0_42 -# 864| mu0_44(void *) = Store : &:r0_40, r0_43 -# 865| v0_45(void) = NoOp : -# 849| v0_46(void) = ReturnVoid : -# 849| v0_47(void) = UnmodeledUse : mu* -# 849| v0_48(void) = ExitFunction : +# 853| r0_13(PolymorphicBase *) = CopyValue : r0_12 +# 853| mu0_14(PolymorphicBase *) = Store : &:r0_11, r0_13 +# 854| r0_15(glval) = VariableAddress[pd] : +# 854| r0_16(glval) = VariableAddress[d] : +# 854| r0_17(PolymorphicDerived *) = CopyValue : r0_16 +# 854| mu0_18(PolymorphicDerived *) = Store : &:r0_15, r0_17 +# 857| r0_19(glval) = VariableAddress[pd] : +# 857| r0_20(PolymorphicDerived *) = Load : &:r0_19, ~mu0_2 +# 857| r0_21(PolymorphicBase *) = CheckedConvertOrNull : r0_20 +# 857| r0_22(glval) = VariableAddress[pb] : +# 857| mu0_23(PolymorphicBase *) = Store : &:r0_22, r0_21 +# 857| r0_24(glval) = CopyValue : r0_22 +# 858| r0_25(glval) = VariableAddress[rb] : +# 858| r0_26(glval) = VariableAddress[d] : +# 858| r0_27(glval) = CheckedConvertOrThrow : r0_26 +# 858| r0_28(PolymorphicBase &) = CopyValue : r0_27 +# 858| mu0_29(PolymorphicBase &) = Store : &:r0_25, r0_28 +# 860| r0_30(glval) = VariableAddress[pb] : +# 860| r0_31(PolymorphicBase *) = Load : &:r0_30, ~mu0_2 +# 860| r0_32(PolymorphicDerived *) = CheckedConvertOrNull : r0_31 +# 860| r0_33(glval) = VariableAddress[pd] : +# 860| mu0_34(PolymorphicDerived *) = Store : &:r0_33, r0_32 +# 860| r0_35(glval) = CopyValue : r0_33 +# 861| r0_36(glval) = VariableAddress[rd] : +# 861| r0_37(glval) = VariableAddress[b] : +# 861| r0_38(glval) = CheckedConvertOrThrow : r0_37 +# 861| r0_39(PolymorphicDerived &) = CopyValue : r0_38 +# 861| mu0_40(PolymorphicDerived &) = Store : &:r0_36, r0_39 +# 863| r0_41(glval) = VariableAddress[pv] : +# 863| r0_42(glval) = VariableAddress[pb] : +# 863| r0_43(PolymorphicBase *) = Load : &:r0_42, ~mu0_2 +# 863| r0_44(void *) = DynamicCastToVoid : r0_43 +# 863| mu0_45(void *) = Store : &:r0_41, r0_44 +# 864| r0_46(glval) = VariableAddress[pcv] : +# 864| r0_47(glval) = VariableAddress[pd] : +# 864| r0_48(PolymorphicDerived *) = Load : &:r0_47, ~mu0_2 +# 864| r0_49(void *) = DynamicCastToVoid : r0_48 +# 864| mu0_50(void *) = Store : &:r0_46, r0_49 +# 865| v0_51(void) = NoOp : +# 849| v0_52(void) = ReturnVoid : +# 849| v0_53(void) = UnmodeledUse : mu* +# 849| v0_54(void) = ExitFunction : # 867| void String::String() # 867| Block 0 @@ -3895,36 +4145,46 @@ ir.cpp: # 874| r0_11(char *) = Convert : r0_10 # 874| r0_12(glval) = VariableAddress[p] : # 874| mu0_13(char *) = Store : &:r0_12, r0_11 -# 875| r0_14(glval) = VariableAddress[a] : -# 875| r0_15(char *) = Convert : r0_14 -# 875| r0_16(int) = Constant[0] : -# 875| r0_17(glval) = PointerAdd[1] : r0_15, r0_16 -# 875| r0_18(char *) = Convert : r0_17 -# 875| r0_19(glval) = VariableAddress[p] : -# 875| mu0_20(char *) = Store : &:r0_19, r0_18 -# 876| r0_21(glval) = StringConstant["test"] : -# 876| r0_22(char *) = Convert : r0_21 -# 876| r0_23(int) = Constant[0] : -# 876| r0_24(glval) = PointerAdd[1] : r0_22, r0_23 -# 876| r0_25(glval) = VariableAddress[p] : -# 876| mu0_26(char *) = Store : &:r0_25, r0_24 -# 877| r0_27(glval) = VariableAddress[ra] : -# 877| r0_28(glval) = VariableAddress[a] : -# 877| mu0_29(char(&)[5]) = Store : &:r0_27, r0_28 -# 878| r0_30(glval) = VariableAddress[rs] : -# 878| r0_31(glval) = StringConstant["test"] : -# 878| mu0_32(char(&)[5]) = Store : &:r0_30, r0_31 -# 879| r0_33(glval) = VariableAddress[pa] : -# 879| r0_34(glval) = VariableAddress[a] : -# 879| r0_35(char(*)[5]) = Convert : r0_34 -# 879| mu0_36(char(*)[5]) = Store : &:r0_33, r0_35 -# 880| r0_37(glval) = StringConstant["test"] : -# 880| r0_38(glval) = VariableAddress[pa] : -# 880| mu0_39(char(*)[5]) = Store : &:r0_38, r0_37 -# 881| v0_40(void) = NoOp : -# 871| v0_41(void) = ReturnVoid : -# 871| v0_42(void) = UnmodeledUse : mu* -# 871| v0_43(void) = ExitFunction : +# 874| r0_14(glval) = CopyValue : r0_12 +# 875| r0_15(glval) = VariableAddress[a] : +# 875| r0_16(char *) = Convert : r0_15 +# 875| r0_17(int) = Constant[0] : +# 875| r0_18(glval) = PointerAdd[1] : r0_16, r0_17 +# 875| r0_19(char *) = CopyValue : r0_18 +# 875| r0_20(char *) = Convert : r0_19 +# 875| r0_21(glval) = VariableAddress[p] : +# 875| mu0_22(char *) = Store : &:r0_21, r0_20 +# 875| r0_23(glval) = CopyValue : r0_21 +# 876| r0_24(glval) = StringConstant["test"] : +# 876| r0_25(char *) = Convert : r0_24 +# 876| r0_26(int) = Constant[0] : +# 876| r0_27(glval) = PointerAdd[1] : r0_25, r0_26 +# 876| r0_28(char *) = CopyValue : r0_27 +# 876| r0_29(glval) = VariableAddress[p] : +# 876| mu0_30(char *) = Store : &:r0_29, r0_28 +# 876| r0_31(glval) = CopyValue : r0_29 +# 877| r0_32(glval) = VariableAddress[ra] : +# 877| r0_33(glval) = VariableAddress[a] : +# 877| r0_34(char(&)[5]) = CopyValue : r0_33 +# 877| mu0_35(char(&)[5]) = Store : &:r0_32, r0_34 +# 878| r0_36(glval) = VariableAddress[rs] : +# 878| r0_37(glval) = StringConstant["test"] : +# 878| r0_38(char(&)[5]) = CopyValue : r0_37 +# 878| mu0_39(char(&)[5]) = Store : &:r0_36, r0_38 +# 879| r0_40(glval) = VariableAddress[pa] : +# 879| r0_41(glval) = VariableAddress[a] : +# 879| r0_42(char(*)[5]) = CopyValue : r0_41 +# 879| r0_43(char(*)[5]) = Convert : r0_42 +# 879| mu0_44(char(*)[5]) = Store : &:r0_40, r0_43 +# 880| r0_45(glval) = StringConstant["test"] : +# 880| r0_46(char(*)[5]) = CopyValue : r0_45 +# 880| r0_47(glval) = VariableAddress[pa] : +# 880| mu0_48(char(*)[5]) = Store : &:r0_47, r0_46 +# 880| r0_49(glval) = CopyValue : r0_47 +# 881| v0_50(void) = NoOp : +# 871| v0_51(void) = ReturnVoid : +# 871| v0_52(void) = UnmodeledUse : mu* +# 871| v0_53(void) = ExitFunction : # 883| void FuncPtrConversions(int(*)(int), void*) # 883| Block 0 @@ -3940,15 +4200,17 @@ ir.cpp: # 884| r0_9(void *) = Convert : r0_8 # 884| r0_10(glval) = VariableAddress[p] : # 884| mu0_11(void *) = Store : &:r0_10, r0_9 -# 885| r0_12(glval) = VariableAddress[p] : -# 885| r0_13(void *) = Load : &:r0_12, ~mu0_2 -# 885| r0_14(..(*)(..)) = Convert : r0_13 -# 885| r0_15(glval<..(*)(..)>) = VariableAddress[pfn] : -# 885| mu0_16(..(*)(..)) = Store : &:r0_15, r0_14 -# 886| v0_17(void) = NoOp : -# 883| v0_18(void) = ReturnVoid : -# 883| v0_19(void) = UnmodeledUse : mu* -# 883| v0_20(void) = ExitFunction : +# 884| r0_12(glval) = CopyValue : r0_10 +# 885| r0_13(glval) = VariableAddress[p] : +# 885| r0_14(void *) = Load : &:r0_13, ~mu0_2 +# 885| r0_15(..(*)(..)) = Convert : r0_14 +# 885| r0_16(glval<..(*)(..)>) = VariableAddress[pfn] : +# 885| mu0_17(..(*)(..)) = Store : &:r0_16, r0_15 +# 885| r0_18(glval<..(*)(..)>) = CopyValue : r0_16 +# 886| v0_19(void) = NoOp : +# 883| v0_20(void) = ReturnVoid : +# 883| v0_21(void) = UnmodeledUse : mu* +# 883| v0_22(void) = ExitFunction : # 888| void VarArgUsage(int) # 888| Block 0 @@ -4246,7 +4508,8 @@ ir.cpp: # 967| mu0_13(bool) = Store : &:r0_7, r0_12 # 967| r0_14(glval) = VariableAddress[b] : # 967| r0_15(bool) = Load : &:r0_14, ~mu0_2 -# 967| v0_16(void) = ConditionalBranch : r0_15 +# 967| r0_16(bool) = CopyValue : r0_15 +# 967| v0_17(void) = ConditionalBranch : r0_16 #-----| False -> Block 2 #-----| True -> Block 1 @@ -4254,6 +4517,7 @@ ir.cpp: # 968| r1_0(int) = Constant[5] : # 968| r1_1(glval) = VariableAddress[x] : # 968| mu1_2(int) = Store : &:r1_1, r1_0 +# 968| r1_3(glval) = CopyValue : r1_1 #-----| Goto -> Block 6 # 970| Block 2 @@ -4268,7 +4532,8 @@ ir.cpp: # 970| r2_8(int) = Load : &:r2_7, ~mu0_2 # 970| r2_9(int) = Constant[0] : # 970| r2_10(bool) = CompareNE : r2_8, r2_9 -# 970| v2_11(void) = ConditionalBranch : r2_10 +# 970| r2_11(bool) = CopyValue : r2_10 +# 970| v2_12(void) = ConditionalBranch : r2_11 #-----| False -> Block 4 #-----| True -> Block 3 @@ -4276,17 +4541,20 @@ ir.cpp: # 971| r3_0(int) = Constant[7] : # 971| r3_1(glval) = VariableAddress[y] : # 971| mu3_2(int) = Store : &:r3_1, r3_0 +# 971| r3_3(glval) = CopyValue : r3_1 #-----| Goto -> Block 6 # 973| Block 4 # 973| r4_0(glval) = VariableAddress[p] : # 973| r4_1(glval) = VariableAddress[x] : -# 973| mu4_2(int *) = Store : &:r4_0, r4_1 -# 973| r4_3(glval) = VariableAddress[p] : -# 973| r4_4(int *) = Load : &:r4_3, ~mu0_2 -# 973| r4_5(int *) = Constant[0] : -# 973| r4_6(bool) = CompareNE : r4_4, r4_5 -# 973| v4_7(void) = ConditionalBranch : r4_6 +# 973| r4_2(int *) = CopyValue : r4_1 +# 973| mu4_3(int *) = Store : &:r4_0, r4_2 +# 973| r4_4(glval) = VariableAddress[p] : +# 973| r4_5(int *) = Load : &:r4_4, ~mu0_2 +# 973| r4_6(int *) = Constant[0] : +# 973| r4_7(bool) = CompareNE : r4_5, r4_6 +# 973| r4_8(bool) = CopyValue : r4_7 +# 973| v4_9(void) = ConditionalBranch : r4_8 #-----| False -> Block 6 #-----| True -> Block 5 @@ -4294,7 +4562,9 @@ ir.cpp: # 974| r5_0(int) = Constant[2] : # 974| r5_1(glval) = VariableAddress[p] : # 974| r5_2(int *) = Load : &:r5_1, ~mu0_2 -# 974| mu5_3(int) = Store : &:r5_2, r5_0 +# 974| r5_3(glval) = CopyValue : r5_2 +# 974| mu5_4(int) = Store : &:r5_3, r5_0 +# 974| r5_5(glval) = CopyValue : r5_3 #-----| Goto -> Block 6 # 976| Block 6 @@ -4330,7 +4600,8 @@ ir.cpp: # 981| r2_8(int) = Load : &:r2_7, ~mu0_2 # 981| r2_9(int) = Constant[0] : # 981| r2_10(bool) = CompareNE : r2_8, r2_9 -# 981| v2_11(void) = ConditionalBranch : r2_10 +# 981| r2_11(bool) = CopyValue : r2_10 +# 981| v2_12(void) = ConditionalBranch : r2_11 #-----| False -> Block 4 #-----| True -> Block 3 @@ -4341,12 +4612,14 @@ ir.cpp: # 983| Block 4 # 983| r4_0(glval) = VariableAddress[p] : # 983| r4_1(glval) = VariableAddress[x] : -# 983| mu4_2(int *) = Store : &:r4_0, r4_1 -# 983| r4_3(glval) = VariableAddress[p] : -# 983| r4_4(int *) = Load : &:r4_3, ~mu0_2 -# 983| r4_5(int *) = Constant[0] : -# 983| r4_6(bool) = CompareNE : r4_4, r4_5 -# 983| v4_7(void) = ConditionalBranch : r4_6 +# 983| r4_2(int *) = CopyValue : r4_1 +# 983| mu4_3(int *) = Store : &:r4_0, r4_2 +# 983| r4_4(glval) = VariableAddress[p] : +# 983| r4_5(int *) = Load : &:r4_4, ~mu0_2 +# 983| r4_6(int *) = Constant[0] : +# 983| r4_7(bool) = CompareNE : r4_5, r4_6 +# 983| r4_8(bool) = CopyValue : r4_7 +# 983| v4_9(void) = ConditionalBranch : r4_8 #-----| False -> Block 6 #-----| True -> Block 5 @@ -4370,7 +4643,8 @@ ir.cpp: # 979| mu7_6(bool) = Store : &:r7_0, r7_5 # 979| r7_7(glval) = VariableAddress[b] : # 979| r7_8(bool) = Load : &:r7_7, ~mu0_2 -# 979| v7_9(void) = ConditionalBranch : r7_8 +# 979| r7_9(bool) = CopyValue : r7_8 +# 979| v7_10(void) = ConditionalBranch : r7_9 #-----| False -> Block 2 #-----| True -> Block 1 @@ -4428,6 +4702,7 @@ ir.cpp: # 995| r1_1(int) = Load : &:r1_0, ~mu0_2 # 995| r1_2(glval) = VariableAddress[w] : # 995| mu1_3(int) = Store : &:r1_2, r1_1 +# 995| r1_4(glval) = CopyValue : r1_2 #-----| Goto -> Block 3 # 997| Block 2 @@ -4435,6 +4710,7 @@ ir.cpp: # 997| r2_1(int) = Load : &:r2_0, ~mu0_2 # 997| r2_2(glval) = VariableAddress[w] : # 997| mu2_3(int) = Store : &:r2_2, r2_1 +# 997| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 999| Block 3 @@ -4544,147 +4820,159 @@ ir.cpp: # 1031| void Lambda(int, String const&) # 1031| Block 0 -# 1031| v0_0(void) = EnterFunction : -# 1031| mu0_1(unknown) = AliasedDefinition : -# 1031| mu0_2(unknown) = UnmodeledDefinition : -# 1031| r0_3(glval) = VariableAddress[x] : -# 1031| mu0_4(int) = InitializeParameter[x] : &:r0_3 -# 1031| r0_5(glval) = VariableAddress[s] : -# 1031| mu0_6(String &) = InitializeParameter[s] : &:r0_5 -# 1032| r0_7(glval) = VariableAddress[lambda_empty] : -# 1032| r0_8(glval) = VariableAddress[#temp1032:23] : -# 1032| mu0_9(decltype([...](...){...})) = Uninitialized[#temp1032:23] : &:r0_8 -# 1032| r0_10(decltype([...](...){...})) = Load : &:r0_8, ~mu0_2 -# 1032| mu0_11(decltype([...](...){...})) = Store : &:r0_7, r0_10 -# 1033| r0_12(char) = Constant[65] : -# 1034| r0_13(glval) = VariableAddress[lambda_ref] : -# 1034| r0_14(glval) = VariableAddress[#temp1034:21] : -# 1034| mu0_15(decltype([...](...){...})) = Uninitialized[#temp1034:21] : &:r0_14 -# 1034| r0_16(glval) = FieldAddress[s] : r0_14 -#-----| r0_17(glval) = VariableAddress[s] : -#-----| r0_18(String &) = Load : &:r0_17, ~mu0_2 -# 1034| mu0_19(String &) = Store : &:r0_16, r0_18 -# 1034| r0_20(glval) = FieldAddress[x] : r0_14 -#-----| r0_21(glval) = VariableAddress[x] : -#-----| mu0_22(int &) = Store : &:r0_20, r0_21 -# 1034| r0_23(decltype([...](...){...})) = Load : &:r0_14, ~mu0_2 -# 1034| mu0_24(decltype([...](...){...})) = Store : &:r0_13, r0_23 -# 1035| r0_25(glval) = VariableAddress[lambda_ref] : -# 1035| r0_26(glval) = Convert : r0_25 -# 1035| r0_27(glval) = FunctionAddress[operator()] : -# 1035| r0_28(float) = Constant[1.0] : -# 1035| r0_29(char) = Call : func:r0_27, this:r0_26, 0:r0_28 -# 1035| mu0_30(unknown) = ^CallSideEffect : ~mu0_2 -# 1036| r0_31(glval) = VariableAddress[lambda_val] : -# 1036| r0_32(glval) = FunctionAddress[(constructor)] : -# 1036| r0_33(glval) = VariableAddress[#temp1036:21] : -# 1036| mu0_34(decltype([...](...){...})) = Uninitialized[#temp1036:21] : &:r0_33 -# 1036| r0_35(glval) = FieldAddress[s] : r0_33 -#-----| r0_36(glval) = FunctionAddress[String] : -#-----| v0_37(void) = Call : func:r0_36, this:r0_35 -#-----| mu0_38(unknown) = ^CallSideEffect : ~mu0_2 -# 1036| r0_39(glval) = FieldAddress[x] : r0_33 -#-----| r0_40(glval) = VariableAddress[x] : -#-----| r0_41(int) = Load : &:r0_40, ~mu0_2 -#-----| mu0_42(int) = Store : &:r0_39, r0_41 -# 1036| r0_43(decltype([...](...){...})) = Load : &:r0_33, ~mu0_2 -# 1036| v0_44(void) = Call : func:r0_32, this:r0_31, 0:r0_43 -# 1036| mu0_45(unknown) = ^CallSideEffect : ~mu0_2 -# 1037| r0_46(glval) = VariableAddress[lambda_val] : -# 1037| r0_47(glval) = Convert : r0_46 -# 1037| r0_48(glval) = FunctionAddress[operator()] : -# 1037| r0_49(float) = Constant[2.0] : -# 1037| r0_50(char) = Call : func:r0_48, this:r0_47, 0:r0_49 -# 1037| mu0_51(unknown) = ^CallSideEffect : ~mu0_2 -# 1038| r0_52(glval) = VariableAddress[lambda_ref_explicit] : -# 1038| r0_53(glval) = VariableAddress[#temp1038:30] : -# 1038| mu0_54(decltype([...](...){...})) = Uninitialized[#temp1038:30] : &:r0_53 -# 1038| r0_55(glval) = FieldAddress[s] : r0_53 -# 1038| r0_56(glval) = VariableAddress[s] : -# 1038| r0_57(String &) = Load : &:r0_56, ~mu0_2 -# 1038| mu0_58(String &) = Store : &:r0_55, r0_57 -# 1038| r0_59(decltype([...](...){...})) = Load : &:r0_53, ~mu0_2 -# 1038| mu0_60(decltype([...](...){...})) = Store : &:r0_52, r0_59 -# 1039| r0_61(glval) = VariableAddress[lambda_ref_explicit] : -# 1039| r0_62(glval) = Convert : r0_61 -# 1039| r0_63(glval) = FunctionAddress[operator()] : -# 1039| r0_64(float) = Constant[3.0] : -# 1039| r0_65(char) = Call : func:r0_63, this:r0_62, 0:r0_64 -# 1039| mu0_66(unknown) = ^CallSideEffect : ~mu0_2 -# 1040| r0_67(glval) = VariableAddress[lambda_val_explicit] : -# 1040| r0_68(glval) = FunctionAddress[(constructor)] : -# 1040| r0_69(glval) = VariableAddress[#temp1040:30] : -# 1040| mu0_70(decltype([...](...){...})) = Uninitialized[#temp1040:30] : &:r0_69 -# 1040| r0_71(glval) = FieldAddress[s] : r0_69 -#-----| r0_72(glval) = FunctionAddress[String] : -#-----| v0_73(void) = Call : func:r0_72, this:r0_71 -#-----| mu0_74(unknown) = ^CallSideEffect : ~mu0_2 -# 1040| r0_75(decltype([...](...){...})) = Load : &:r0_69, ~mu0_2 -# 1040| v0_76(void) = Call : func:r0_68, this:r0_67, 0:r0_75 -# 1040| mu0_77(unknown) = ^CallSideEffect : ~mu0_2 -# 1041| r0_78(glval) = VariableAddress[lambda_val_explicit] : -# 1041| r0_79(glval) = Convert : r0_78 -# 1041| r0_80(glval) = FunctionAddress[operator()] : -# 1041| r0_81(float) = Constant[4.0] : -# 1041| r0_82(char) = Call : func:r0_80, this:r0_79, 0:r0_81 -# 1041| mu0_83(unknown) = ^CallSideEffect : ~mu0_2 -# 1042| r0_84(glval) = VariableAddress[lambda_mixed_explicit] : -# 1042| r0_85(glval) = VariableAddress[#temp1042:32] : -# 1042| mu0_86(decltype([...](...){...})) = Uninitialized[#temp1042:32] : &:r0_85 -# 1042| r0_87(glval) = FieldAddress[s] : r0_85 -# 1042| r0_88(glval) = VariableAddress[s] : -# 1042| r0_89(String &) = Load : &:r0_88, ~mu0_2 -# 1042| mu0_90(String &) = Store : &:r0_87, r0_89 -# 1042| r0_91(glval) = FieldAddress[x] : r0_85 -# 1042| r0_92(glval) = VariableAddress[x] : -# 1042| r0_93(int) = Load : &:r0_92, ~mu0_2 -# 1042| mu0_94(int) = Store : &:r0_91, r0_93 -# 1042| r0_95(decltype([...](...){...})) = Load : &:r0_85, ~mu0_2 -# 1042| mu0_96(decltype([...](...){...})) = Store : &:r0_84, r0_95 -# 1043| r0_97(glval) = VariableAddress[lambda_mixed_explicit] : -# 1043| r0_98(glval) = Convert : r0_97 -# 1043| r0_99(glval) = FunctionAddress[operator()] : -# 1043| r0_100(float) = Constant[5.0] : -# 1043| r0_101(char) = Call : func:r0_99, this:r0_98, 0:r0_100 -# 1043| mu0_102(unknown) = ^CallSideEffect : ~mu0_2 -# 1044| r0_103(glval) = VariableAddress[r] : -# 1044| r0_104(glval) = VariableAddress[x] : -# 1044| r0_105(int) = Load : &:r0_104, ~mu0_2 -# 1044| r0_106(int) = Constant[1] : -# 1044| r0_107(int) = Sub : r0_105, r0_106 -# 1044| mu0_108(int) = Store : &:r0_103, r0_107 -# 1045| r0_109(glval) = VariableAddress[lambda_inits] : -# 1045| r0_110(glval) = VariableAddress[#temp1045:23] : -# 1045| mu0_111(decltype([...](...){...})) = Uninitialized[#temp1045:23] : &:r0_110 -# 1045| r0_112(glval) = FieldAddress[s] : r0_110 -# 1045| r0_113(glval) = VariableAddress[s] : -# 1045| r0_114(String &) = Load : &:r0_113, ~mu0_2 -# 1045| mu0_115(String &) = Store : &:r0_112, r0_114 -# 1045| r0_116(glval) = FieldAddress[x] : r0_110 -# 1045| r0_117(glval) = VariableAddress[x] : -# 1045| r0_118(int) = Load : &:r0_117, ~mu0_2 -# 1045| mu0_119(int) = Store : &:r0_116, r0_118 -# 1045| r0_120(glval) = FieldAddress[i] : r0_110 -# 1045| r0_121(glval) = VariableAddress[x] : -# 1045| r0_122(int) = Load : &:r0_121, ~mu0_2 -# 1045| r0_123(int) = Constant[1] : -# 1045| r0_124(int) = Add : r0_122, r0_123 -# 1045| mu0_125(int) = Store : &:r0_120, r0_124 -# 1045| r0_126(glval) = FieldAddress[j] : r0_110 -# 1045| r0_127(glval) = VariableAddress[r] : -# 1045| mu0_128(int &) = Store : &:r0_126, r0_127 -# 1045| r0_129(decltype([...](...){...})) = Load : &:r0_110, ~mu0_2 -# 1045| mu0_130(decltype([...](...){...})) = Store : &:r0_109, r0_129 -# 1046| r0_131(glval) = VariableAddress[lambda_inits] : -# 1046| r0_132(glval) = Convert : r0_131 -# 1046| r0_133(glval) = FunctionAddress[operator()] : -# 1046| r0_134(float) = Constant[6.0] : -# 1046| r0_135(char) = Call : func:r0_133, this:r0_132, 0:r0_134 -# 1046| mu0_136(unknown) = ^CallSideEffect : ~mu0_2 -# 1047| v0_137(void) = NoOp : -# 1031| v0_138(void) = ReturnVoid : -# 1031| v0_139(void) = UnmodeledUse : mu* -# 1031| v0_140(void) = ExitFunction : +# 1031| v0_0(void) = EnterFunction : +# 1031| mu0_1(unknown) = AliasedDefinition : +# 1031| mu0_2(unknown) = UnmodeledDefinition : +# 1031| r0_3(glval) = VariableAddress[x] : +# 1031| mu0_4(int) = InitializeParameter[x] : &:r0_3 +# 1031| r0_5(glval) = VariableAddress[s] : +# 1031| mu0_6(String &) = InitializeParameter[s] : &:r0_5 +# 1032| r0_7(glval) = VariableAddress[lambda_empty] : +# 1032| r0_8(glval) = VariableAddress[#temp1032:23] : +# 1032| mu0_9(decltype([...](...){...})) = Uninitialized[#temp1032:23] : &:r0_8 +# 1032| r0_10(decltype([...](...){...})) = Load : &:r0_8, ~mu0_2 +# 1032| mu0_11(decltype([...](...){...})) = Store : &:r0_7, r0_10 +# 1033| r0_12(char) = Constant[65] : +# 1034| r0_13(glval) = VariableAddress[lambda_ref] : +# 1034| r0_14(glval) = VariableAddress[#temp1034:21] : +# 1034| mu0_15(decltype([...](...){...})) = Uninitialized[#temp1034:21] : &:r0_14 +# 1034| r0_16(glval) = FieldAddress[s] : r0_14 +#-----| r0_17(glval) = VariableAddress[s] : +#-----| r0_18(String &) = Load : &:r0_17, ~mu0_2 +# 1034| r0_19(glval) = CopyValue : r0_18 +# 1034| r0_20(String &) = CopyValue : r0_19 +# 1034| mu0_21(String &) = Store : &:r0_16, r0_20 +# 1034| r0_22(glval) = FieldAddress[x] : r0_14 +#-----| r0_23(glval) = VariableAddress[x] : +#-----| r0_24(int &) = CopyValue : r0_23 +#-----| mu0_25(int &) = Store : &:r0_22, r0_24 +# 1034| r0_26(decltype([...](...){...})) = Load : &:r0_14, ~mu0_2 +# 1034| mu0_27(decltype([...](...){...})) = Store : &:r0_13, r0_26 +# 1035| r0_28(glval) = VariableAddress[lambda_ref] : +# 1035| r0_29(glval) = Convert : r0_28 +# 1035| r0_30(glval) = FunctionAddress[operator()] : +# 1035| r0_31(float) = Constant[1.0] : +# 1035| r0_32(char) = Call : func:r0_30, this:r0_29, 0:r0_31 +# 1035| mu0_33(unknown) = ^CallSideEffect : ~mu0_2 +# 1036| r0_34(glval) = VariableAddress[lambda_val] : +# 1036| r0_35(glval) = FunctionAddress[(constructor)] : +# 1036| r0_36(glval) = VariableAddress[#temp1036:21] : +# 1036| mu0_37(decltype([...](...){...})) = Uninitialized[#temp1036:21] : &:r0_36 +# 1036| r0_38(glval) = FieldAddress[s] : r0_36 +#-----| r0_39(glval) = FunctionAddress[String] : +#-----| v0_40(void) = Call : func:r0_39, this:r0_38 +#-----| mu0_41(unknown) = ^CallSideEffect : ~mu0_2 +# 1036| r0_42(glval) = FieldAddress[x] : r0_36 +#-----| r0_43(glval) = VariableAddress[x] : +#-----| r0_44(int) = Load : &:r0_43, ~mu0_2 +#-----| mu0_45(int) = Store : &:r0_42, r0_44 +# 1036| r0_46(decltype([...](...){...})) = Load : &:r0_36, ~mu0_2 +# 1036| r0_47(lambda [] type at line 1036, col. 21 &) = CopyValue : r0_46 +# 1036| v0_48(void) = Call : func:r0_35, this:r0_34, 0:r0_47 +# 1036| mu0_49(unknown) = ^CallSideEffect : ~mu0_2 +# 1037| r0_50(glval) = VariableAddress[lambda_val] : +# 1037| r0_51(glval) = Convert : r0_50 +# 1037| r0_52(glval) = FunctionAddress[operator()] : +# 1037| r0_53(float) = Constant[2.0] : +# 1037| r0_54(char) = Call : func:r0_52, this:r0_51, 0:r0_53 +# 1037| mu0_55(unknown) = ^CallSideEffect : ~mu0_2 +# 1038| r0_56(glval) = VariableAddress[lambda_ref_explicit] : +# 1038| r0_57(glval) = VariableAddress[#temp1038:30] : +# 1038| mu0_58(decltype([...](...){...})) = Uninitialized[#temp1038:30] : &:r0_57 +# 1038| r0_59(glval) = FieldAddress[s] : r0_57 +# 1038| r0_60(glval) = VariableAddress[s] : +# 1038| r0_61(String &) = Load : &:r0_60, ~mu0_2 +# 1038| r0_62(glval) = CopyValue : r0_61 +# 1038| r0_63(String &) = CopyValue : r0_62 +# 1038| mu0_64(String &) = Store : &:r0_59, r0_63 +# 1038| r0_65(decltype([...](...){...})) = Load : &:r0_57, ~mu0_2 +# 1038| mu0_66(decltype([...](...){...})) = Store : &:r0_56, r0_65 +# 1039| r0_67(glval) = VariableAddress[lambda_ref_explicit] : +# 1039| r0_68(glval) = Convert : r0_67 +# 1039| r0_69(glval) = FunctionAddress[operator()] : +# 1039| r0_70(float) = Constant[3.0] : +# 1039| r0_71(char) = Call : func:r0_69, this:r0_68, 0:r0_70 +# 1039| mu0_72(unknown) = ^CallSideEffect : ~mu0_2 +# 1040| r0_73(glval) = VariableAddress[lambda_val_explicit] : +# 1040| r0_74(glval) = FunctionAddress[(constructor)] : +# 1040| r0_75(glval) = VariableAddress[#temp1040:30] : +# 1040| mu0_76(decltype([...](...){...})) = Uninitialized[#temp1040:30] : &:r0_75 +# 1040| r0_77(glval) = FieldAddress[s] : r0_75 +#-----| r0_78(glval) = FunctionAddress[String] : +#-----| v0_79(void) = Call : func:r0_78, this:r0_77 +#-----| mu0_80(unknown) = ^CallSideEffect : ~mu0_2 +# 1040| r0_81(decltype([...](...){...})) = Load : &:r0_75, ~mu0_2 +# 1040| r0_82(lambda [] type at line 1040, col. 30 &) = CopyValue : r0_81 +# 1040| v0_83(void) = Call : func:r0_74, this:r0_73, 0:r0_82 +# 1040| mu0_84(unknown) = ^CallSideEffect : ~mu0_2 +# 1041| r0_85(glval) = VariableAddress[lambda_val_explicit] : +# 1041| r0_86(glval) = Convert : r0_85 +# 1041| r0_87(glval) = FunctionAddress[operator()] : +# 1041| r0_88(float) = Constant[4.0] : +# 1041| r0_89(char) = Call : func:r0_87, this:r0_86, 0:r0_88 +# 1041| mu0_90(unknown) = ^CallSideEffect : ~mu0_2 +# 1042| r0_91(glval) = VariableAddress[lambda_mixed_explicit] : +# 1042| r0_92(glval) = VariableAddress[#temp1042:32] : +# 1042| mu0_93(decltype([...](...){...})) = Uninitialized[#temp1042:32] : &:r0_92 +# 1042| r0_94(glval) = FieldAddress[s] : r0_92 +# 1042| r0_95(glval) = VariableAddress[s] : +# 1042| r0_96(String &) = Load : &:r0_95, ~mu0_2 +# 1042| r0_97(glval) = CopyValue : r0_96 +# 1042| r0_98(String &) = CopyValue : r0_97 +# 1042| mu0_99(String &) = Store : &:r0_94, r0_98 +# 1042| r0_100(glval) = FieldAddress[x] : r0_92 +# 1042| r0_101(glval) = VariableAddress[x] : +# 1042| r0_102(int) = Load : &:r0_101, ~mu0_2 +# 1042| mu0_103(int) = Store : &:r0_100, r0_102 +# 1042| r0_104(decltype([...](...){...})) = Load : &:r0_92, ~mu0_2 +# 1042| mu0_105(decltype([...](...){...})) = Store : &:r0_91, r0_104 +# 1043| r0_106(glval) = VariableAddress[lambda_mixed_explicit] : +# 1043| r0_107(glval) = Convert : r0_106 +# 1043| r0_108(glval) = FunctionAddress[operator()] : +# 1043| r0_109(float) = Constant[5.0] : +# 1043| r0_110(char) = Call : func:r0_108, this:r0_107, 0:r0_109 +# 1043| mu0_111(unknown) = ^CallSideEffect : ~mu0_2 +# 1044| r0_112(glval) = VariableAddress[r] : +# 1044| r0_113(glval) = VariableAddress[x] : +# 1044| r0_114(int) = Load : &:r0_113, ~mu0_2 +# 1044| r0_115(int) = Constant[1] : +# 1044| r0_116(int) = Sub : r0_114, r0_115 +# 1044| mu0_117(int) = Store : &:r0_112, r0_116 +# 1045| r0_118(glval) = VariableAddress[lambda_inits] : +# 1045| r0_119(glval) = VariableAddress[#temp1045:23] : +# 1045| mu0_120(decltype([...](...){...})) = Uninitialized[#temp1045:23] : &:r0_119 +# 1045| r0_121(glval) = FieldAddress[s] : r0_119 +# 1045| r0_122(glval) = VariableAddress[s] : +# 1045| r0_123(String &) = Load : &:r0_122, ~mu0_2 +# 1045| r0_124(glval) = CopyValue : r0_123 +# 1045| r0_125(String &) = CopyValue : r0_124 +# 1045| mu0_126(String &) = Store : &:r0_121, r0_125 +# 1045| r0_127(glval) = FieldAddress[x] : r0_119 +# 1045| r0_128(glval) = VariableAddress[x] : +# 1045| r0_129(int) = Load : &:r0_128, ~mu0_2 +# 1045| mu0_130(int) = Store : &:r0_127, r0_129 +# 1045| r0_131(glval) = FieldAddress[i] : r0_119 +# 1045| r0_132(glval) = VariableAddress[x] : +# 1045| r0_133(int) = Load : &:r0_132, ~mu0_2 +# 1045| r0_134(int) = Constant[1] : +# 1045| r0_135(int) = Add : r0_133, r0_134 +# 1045| mu0_136(int) = Store : &:r0_131, r0_135 +# 1045| r0_137(glval) = FieldAddress[j] : r0_119 +# 1045| r0_138(glval) = VariableAddress[r] : +# 1045| r0_139(int &) = CopyValue : r0_138 +# 1045| mu0_140(int &) = Store : &:r0_137, r0_139 +# 1045| r0_141(decltype([...](...){...})) = Load : &:r0_119, ~mu0_2 +# 1045| mu0_142(decltype([...](...){...})) = Store : &:r0_118, r0_141 +# 1046| r0_143(glval) = VariableAddress[lambda_inits] : +# 1046| r0_144(glval) = Convert : r0_143 +# 1046| r0_145(glval) = FunctionAddress[operator()] : +# 1046| r0_146(float) = Constant[6.0] : +# 1046| r0_147(char) = Call : func:r0_145, this:r0_144, 0:r0_146 +# 1046| mu0_148(unknown) = ^CallSideEffect : ~mu0_2 +# 1047| v0_149(void) = NoOp : +# 1031| v0_150(void) = ReturnVoid : +# 1031| v0_151(void) = UnmodeledUse : mu* +# 1031| v0_152(void) = ExitFunction : # 1032| void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)&&) # 1032| Block 0 @@ -4741,20 +5029,21 @@ ir.cpp: #-----| r0_7(lambda [] type at line 1034, col. 21 *) = CopyValue : r0_3 #-----| r0_8(glval) = FieldAddress[s] : r0_7 #-----| r0_9(String &) = Load : &:r0_8, ~mu0_2 -# 1034| r0_10(glval) = FunctionAddress[c_str] : -# 1034| r0_11(char *) = Call : func:r0_10, this:r0_9 -# 1034| mu0_12(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_13(lambda [] type at line 1034, col. 21 *) = CopyValue : r0_3 -#-----| r0_14(glval) = FieldAddress[x] : r0_13 -#-----| r0_15(int &) = Load : &:r0_14, ~mu0_2 -# 1034| r0_16(int) = Load : &:r0_15, ~mu0_2 -# 1034| r0_17(glval) = PointerAdd[1] : r0_11, r0_16 -# 1034| r0_18(char) = Load : &:r0_17, ~mu0_2 -# 1034| mu0_19(char) = Store : &:r0_6, r0_18 -# 1034| r0_20(glval) = VariableAddress[#return] : -# 1034| v0_21(void) = ReturnValue : &:r0_20, ~mu0_2 -# 1034| v0_22(void) = UnmodeledUse : mu* -# 1034| v0_23(void) = ExitFunction : +# 1034| r0_10(glval) = CopyValue : r0_9 +# 1034| r0_11(glval) = FunctionAddress[c_str] : +# 1034| r0_12(char *) = Call : func:r0_11, this:r0_10 +# 1034| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_14(lambda [] type at line 1034, col. 21 *) = CopyValue : r0_3 +#-----| r0_15(glval) = FieldAddress[x] : r0_14 +#-----| r0_16(int &) = Load : &:r0_15, ~mu0_2 +# 1034| r0_17(int) = Load : &:r0_16, ~mu0_2 +# 1034| r0_18(glval) = PointerAdd[1] : r0_12, r0_17 +# 1034| r0_19(char) = Load : &:r0_18, ~mu0_2 +# 1034| mu0_20(char) = Store : &:r0_6, r0_19 +# 1034| r0_21(glval) = VariableAddress[#return] : +# 1034| v0_22(void) = ReturnValue : &:r0_21, ~mu0_2 +# 1034| v0_23(void) = UnmodeledUse : mu* +# 1034| v0_24(void) = ExitFunction : # 1036| void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::~() # 1036| Block 0 @@ -4808,17 +5097,18 @@ ir.cpp: #-----| r0_7(lambda [] type at line 1038, col. 30 *) = CopyValue : r0_3 #-----| r0_8(glval) = FieldAddress[s] : r0_7 #-----| r0_9(String &) = Load : &:r0_8, ~mu0_2 -# 1038| r0_10(glval) = FunctionAddress[c_str] : -# 1038| r0_11(char *) = Call : func:r0_10, this:r0_9 -# 1038| mu0_12(unknown) = ^CallSideEffect : ~mu0_2 -# 1038| r0_13(int) = Constant[0] : -# 1038| r0_14(glval) = PointerAdd[1] : r0_11, r0_13 -# 1038| r0_15(char) = Load : &:r0_14, ~mu0_2 -# 1038| mu0_16(char) = Store : &:r0_6, r0_15 -# 1038| r0_17(glval) = VariableAddress[#return] : -# 1038| v0_18(void) = ReturnValue : &:r0_17, ~mu0_2 -# 1038| v0_19(void) = UnmodeledUse : mu* -# 1038| v0_20(void) = ExitFunction : +# 1038| r0_10(glval) = CopyValue : r0_9 +# 1038| r0_11(glval) = FunctionAddress[c_str] : +# 1038| r0_12(char *) = Call : func:r0_11, this:r0_10 +# 1038| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 +# 1038| r0_14(int) = Constant[0] : +# 1038| r0_15(glval) = PointerAdd[1] : r0_12, r0_14 +# 1038| r0_16(char) = Load : &:r0_15, ~mu0_2 +# 1038| mu0_17(char) = Store : &:r0_6, r0_16 +# 1038| r0_18(glval) = VariableAddress[#return] : +# 1038| v0_19(void) = ReturnValue : &:r0_18, ~mu0_2 +# 1038| v0_20(void) = UnmodeledUse : mu* +# 1038| v0_21(void) = ExitFunction : # 1040| void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)&&) # 1040| Block 0 @@ -4887,19 +5177,20 @@ ir.cpp: #-----| r0_7(lambda [] type at line 1042, col. 32 *) = CopyValue : r0_3 #-----| r0_8(glval) = FieldAddress[s] : r0_7 #-----| r0_9(String &) = Load : &:r0_8, ~mu0_2 -# 1042| r0_10(glval) = FunctionAddress[c_str] : -# 1042| r0_11(char *) = Call : func:r0_10, this:r0_9 -# 1042| mu0_12(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_13(lambda [] type at line 1042, col. 32 *) = CopyValue : r0_3 -#-----| r0_14(glval) = FieldAddress[x] : r0_13 -#-----| r0_15(int) = Load : &:r0_14, ~mu0_2 -# 1042| r0_16(glval) = PointerAdd[1] : r0_11, r0_15 -# 1042| r0_17(char) = Load : &:r0_16, ~mu0_2 -# 1042| mu0_18(char) = Store : &:r0_6, r0_17 -# 1042| r0_19(glval) = VariableAddress[#return] : -# 1042| v0_20(void) = ReturnValue : &:r0_19, ~mu0_2 -# 1042| v0_21(void) = UnmodeledUse : mu* -# 1042| v0_22(void) = ExitFunction : +# 1042| r0_10(glval) = CopyValue : r0_9 +# 1042| r0_11(glval) = FunctionAddress[c_str] : +# 1042| r0_12(char *) = Call : func:r0_11, this:r0_10 +# 1042| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_14(lambda [] type at line 1042, col. 32 *) = CopyValue : r0_3 +#-----| r0_15(glval) = FieldAddress[x] : r0_14 +#-----| r0_16(int) = Load : &:r0_15, ~mu0_2 +# 1042| r0_17(glval) = PointerAdd[1] : r0_12, r0_16 +# 1042| r0_18(char) = Load : &:r0_17, ~mu0_2 +# 1042| mu0_19(char) = Store : &:r0_6, r0_18 +# 1042| r0_20(glval) = VariableAddress[#return] : +# 1042| v0_21(void) = ReturnValue : &:r0_20, ~mu0_2 +# 1042| v0_22(void) = UnmodeledUse : mu* +# 1042| v0_23(void) = ExitFunction : # 1045| char (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::operator()(float) const # 1045| Block 0 @@ -4913,28 +5204,29 @@ ir.cpp: #-----| r0_7(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 #-----| r0_8(glval) = FieldAddress[s] : r0_7 #-----| r0_9(String &) = Load : &:r0_8, ~mu0_2 -# 1045| r0_10(glval) = FunctionAddress[c_str] : -# 1045| r0_11(char *) = Call : func:r0_10, this:r0_9 -# 1045| mu0_12(unknown) = ^CallSideEffect : ~mu0_2 -#-----| r0_13(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 -#-----| r0_14(glval) = FieldAddress[x] : r0_13 -#-----| r0_15(int) = Load : &:r0_14, ~mu0_2 -#-----| r0_16(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 -# 1045| r0_17(glval) = FieldAddress[i] : r0_16 -# 1045| r0_18(int) = Load : &:r0_17, ~mu0_2 -# 1045| r0_19(int) = Add : r0_15, r0_18 -#-----| r0_20(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 -# 1045| r0_21(glval) = FieldAddress[j] : r0_20 -# 1045| r0_22(int &) = Load : &:r0_21, ~mu0_2 -# 1045| r0_23(int) = Load : &:r0_22, ~mu0_2 -# 1045| r0_24(int) = Sub : r0_19, r0_23 -# 1045| r0_25(glval) = PointerAdd[1] : r0_11, r0_24 -# 1045| r0_26(char) = Load : &:r0_25, ~mu0_2 -# 1045| mu0_27(char) = Store : &:r0_6, r0_26 -# 1045| r0_28(glval) = VariableAddress[#return] : -# 1045| v0_29(void) = ReturnValue : &:r0_28, ~mu0_2 -# 1045| v0_30(void) = UnmodeledUse : mu* -# 1045| v0_31(void) = ExitFunction : +# 1045| r0_10(glval) = CopyValue : r0_9 +# 1045| r0_11(glval) = FunctionAddress[c_str] : +# 1045| r0_12(char *) = Call : func:r0_11, this:r0_10 +# 1045| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 +#-----| r0_14(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 +#-----| r0_15(glval) = FieldAddress[x] : r0_14 +#-----| r0_16(int) = Load : &:r0_15, ~mu0_2 +#-----| r0_17(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 +# 1045| r0_18(glval) = FieldAddress[i] : r0_17 +# 1045| r0_19(int) = Load : &:r0_18, ~mu0_2 +# 1045| r0_20(int) = Add : r0_16, r0_19 +#-----| r0_21(lambda [] type at line 1045, col. 23 *) = CopyValue : r0_3 +# 1045| r0_22(glval) = FieldAddress[j] : r0_21 +# 1045| r0_23(int &) = Load : &:r0_22, ~mu0_2 +# 1045| r0_24(int) = Load : &:r0_23, ~mu0_2 +# 1045| r0_25(int) = Sub : r0_20, r0_24 +# 1045| r0_26(glval) = PointerAdd[1] : r0_12, r0_25 +# 1045| r0_27(char) = Load : &:r0_26, ~mu0_2 +# 1045| mu0_28(char) = Store : &:r0_6, r0_27 +# 1045| r0_29(glval) = VariableAddress[#return] : +# 1045| v0_30(void) = ReturnValue : &:r0_29, ~mu0_2 +# 1045| v0_31(void) = UnmodeledUse : mu* +# 1045| v0_32(void) = ExitFunction : # 1068| void RangeBasedFor(vector const&) # 1068| Block 0 @@ -4946,132 +5238,144 @@ ir.cpp: # 1069| r0_5(glval &>) = VariableAddress[(__range)] : # 1069| r0_6(glval &>) = VariableAddress[v] : # 1069| r0_7(vector &) = Load : &:r0_6, ~mu0_2 -# 1069| mu0_8(vector &) = Store : &:r0_5, r0_7 -# 1069| r0_9(glval) = VariableAddress[(__begin)] : -#-----| r0_10(glval &>) = VariableAddress[(__range)] : -#-----| r0_11(vector &) = Load : &:r0_10, ~mu0_2 -# 1069| r0_12(glval) = FunctionAddress[begin] : -# 1069| r0_13(iterator) = Call : func:r0_12, this:r0_11 -# 1069| mu0_14(unknown) = ^CallSideEffect : ~mu0_2 -# 1069| mu0_15(iterator) = Store : &:r0_9, r0_13 -# 1069| r0_16(glval) = VariableAddress[(__end)] : -#-----| r0_17(glval &>) = VariableAddress[(__range)] : -#-----| r0_18(vector &) = Load : &:r0_17, ~mu0_2 -# 1069| r0_19(glval) = FunctionAddress[end] : -# 1069| r0_20(iterator) = Call : func:r0_19, this:r0_18 -# 1069| mu0_21(unknown) = ^CallSideEffect : ~mu0_2 -# 1069| mu0_22(iterator) = Store : &:r0_16, r0_20 -#-----| Goto -> Block 1 +# 1069| r0_8(glval>) = CopyValue : r0_7 +# 1069| r0_9(vector &) = CopyValue : r0_8 +# 1069| mu0_10(vector &) = Store : &:r0_5, r0_9 +# 1069| r0_11(glval) = VariableAddress[(__begin)] : +#-----| r0_12(glval &>) = VariableAddress[(__range)] : +#-----| r0_13(vector &) = Load : &:r0_12, ~mu0_2 +#-----| r0_14(glval>) = CopyValue : r0_13 +# 1069| r0_15(glval) = FunctionAddress[begin] : +# 1069| r0_16(iterator) = Call : func:r0_15, this:r0_14 +# 1069| mu0_17(unknown) = ^CallSideEffect : ~mu0_2 +# 1069| mu0_18(iterator) = Store : &:r0_11, r0_16 +# 1069| r0_19(glval) = VariableAddress[(__end)] : +#-----| r0_20(glval &>) = VariableAddress[(__range)] : +#-----| r0_21(vector &) = Load : &:r0_20, ~mu0_2 +#-----| r0_22(glval>) = CopyValue : r0_21 +# 1069| r0_23(glval) = FunctionAddress[end] : +# 1069| r0_24(iterator) = Call : func:r0_23, this:r0_22 +# 1069| mu0_25(unknown) = ^CallSideEffect : ~mu0_2 +# 1069| mu0_26(iterator) = Store : &:r0_19, r0_24 +#-----| Goto -> Block 3 -#-----| Block 1 -#-----| r1_0(glval) = VariableAddress[(__begin)] : -#-----| r1_1(glval) = Convert : r1_0 -# 1069| r1_2(glval) = FunctionAddress[operator!=] : -#-----| r1_3(glval) = VariableAddress[(__end)] : -#-----| r1_4(iterator) = Load : &:r1_3, ~mu0_2 -# 1069| r1_5(bool) = Call : func:r1_2, this:r1_1, 0:r1_4 -# 1069| mu1_6(unknown) = ^CallSideEffect : ~mu0_2 -# 1069| v1_7(void) = ConditionalBranch : r1_5 -#-----| False -> Block 5 -#-----| True -> Block 2 +# 1077| Block 1 +# 1077| v1_0(void) = NoOp : +#-----| Goto -> Block 2 -# 1069| Block 2 -# 1069| r2_0(glval) = VariableAddress[e] : -#-----| r2_1(glval) = VariableAddress[(__begin)] : -#-----| r2_2(glval) = Convert : r2_1 -# 1069| r2_3(glval) = FunctionAddress[operator*] : -# 1069| r2_4(int &) = Call : func:r2_3, this:r2_2 -# 1069| mu2_5(unknown) = ^CallSideEffect : ~mu0_2 -# 1069| r2_6(int) = Load : &:r2_4, ~mu0_2 -# 1069| mu2_7(int) = Store : &:r2_0, r2_6 -# 1070| r2_8(glval) = VariableAddress[e] : -# 1070| r2_9(int) = Load : &:r2_8, ~mu0_2 -# 1070| r2_10(int) = Constant[0] : -# 1070| r2_11(bool) = CompareGT : r2_9, r2_10 -# 1070| v2_12(void) = ConditionalBranch : r2_11 -#-----| False -> Block 4 -#-----| True -> Block 3 +# 1079| Block 2 +# 1079| v2_0(void) = NoOp : +# 1080| v2_1(void) = NoOp : +# 1068| v2_2(void) = ReturnVoid : +# 1068| v2_3(void) = UnmodeledUse : mu* +# 1068| v2_4(void) = ExitFunction : -# 1071| Block 3 -# 1071| v3_0(void) = NoOp : -#-----| Goto -> Block 4 +#-----| Block 3 +#-----| r3_0(glval) = VariableAddress[(__begin)] : +#-----| r3_1(glval) = Convert : r3_0 +# 1069| r3_2(glval) = FunctionAddress[operator!=] : +#-----| r3_3(glval) = VariableAddress[(__end)] : +#-----| r3_4(iterator) = Load : &:r3_3, ~mu0_2 +# 1069| r3_5(bool) = Call : func:r3_2, this:r3_1, 0:r3_4 +# 1069| mu3_6(unknown) = ^CallSideEffect : ~mu0_2 +# 1069| v3_7(void) = ConditionalBranch : r3_5 +#-----| False -> Block 7 +#-----| True -> Block 4 # 1069| Block 4 -# 1069| v4_0(void) = NoOp : -#-----| r4_1(glval) = VariableAddress[(__begin)] : -# 1069| r4_2(glval) = FunctionAddress[operator++] : -# 1069| r4_3(iterator &) = Call : func:r4_2, this:r4_1 -# 1069| mu4_4(unknown) = ^CallSideEffect : ~mu0_2 -#-----| Goto (back edge) -> Block 1 +# 1069| r4_0(glval) = VariableAddress[e] : +#-----| r4_1(glval) = VariableAddress[(__begin)] : +#-----| r4_2(glval) = Convert : r4_1 +# 1069| r4_3(glval) = FunctionAddress[operator*] : +# 1069| r4_4(int &) = Call : func:r4_3, this:r4_2 +# 1069| mu4_5(unknown) = ^CallSideEffect : ~mu0_2 +# 1069| r4_6(int) = Load : &:r4_4, ~mu0_2 +# 1069| mu4_7(int) = Store : &:r4_0, r4_6 +# 1070| r4_8(glval) = VariableAddress[e] : +# 1070| r4_9(int) = Load : &:r4_8, ~mu0_2 +# 1070| r4_10(int) = Constant[0] : +# 1070| r4_11(bool) = CompareGT : r4_9, r4_10 +# 1070| v4_12(void) = ConditionalBranch : r4_11 +#-----| False -> Block 6 +#-----| True -> Block 5 -# 1075| Block 5 -# 1075| r5_0(glval &>) = VariableAddress[(__range)] : -# 1075| r5_1(glval &>) = VariableAddress[v] : -# 1075| r5_2(vector &) = Load : &:r5_1, ~mu0_2 -# 1075| mu5_3(vector &) = Store : &:r5_0, r5_2 -# 1075| r5_4(glval) = VariableAddress[(__begin)] : -#-----| r5_5(glval &>) = VariableAddress[(__range)] : -#-----| r5_6(vector &) = Load : &:r5_5, ~mu0_2 -# 1075| r5_7(glval) = FunctionAddress[begin] : -# 1075| r5_8(iterator) = Call : func:r5_7, this:r5_6 -# 1075| mu5_9(unknown) = ^CallSideEffect : ~mu0_2 -# 1075| mu5_10(iterator) = Store : &:r5_4, r5_8 -# 1075| r5_11(glval) = VariableAddress[(__end)] : -#-----| r5_12(glval &>) = VariableAddress[(__range)] : -#-----| r5_13(vector &) = Load : &:r5_12, ~mu0_2 -# 1075| r5_14(glval) = FunctionAddress[end] : -# 1075| r5_15(iterator) = Call : func:r5_14, this:r5_13 -# 1075| mu5_16(unknown) = ^CallSideEffect : ~mu0_2 -# 1075| mu5_17(iterator) = Store : &:r5_11, r5_15 +# 1071| Block 5 +# 1071| v5_0(void) = NoOp : #-----| Goto -> Block 6 -#-----| Block 6 -#-----| r6_0(glval) = VariableAddress[(__begin)] : -#-----| r6_1(glval) = Convert : r6_0 -# 1075| r6_2(glval) = FunctionAddress[operator!=] : -#-----| r6_3(glval) = VariableAddress[(__end)] : -#-----| r6_4(iterator) = Load : &:r6_3, ~mu0_2 -# 1075| r6_5(bool) = Call : func:r6_2, this:r6_1, 0:r6_4 -# 1075| mu6_6(unknown) = ^CallSideEffect : ~mu0_2 -# 1075| v6_7(void) = ConditionalBranch : r6_5 -#-----| False -> Block 10 -#-----| True -> Block 8 +# 1069| Block 6 +# 1069| v6_0(void) = NoOp : +#-----| r6_1(glval) = VariableAddress[(__begin)] : +# 1069| r6_2(glval) = FunctionAddress[operator++] : +# 1069| r6_3(iterator &) = Call : func:r6_2, this:r6_1 +# 1069| mu6_4(unknown) = ^CallSideEffect : ~mu0_2 +# 1069| r6_5(glval) = CopyValue : r6_3 +#-----| Goto (back edge) -> Block 3 -#-----| Block 7 -#-----| r7_0(glval) = VariableAddress[(__begin)] : -# 1075| r7_1(glval) = FunctionAddress[operator++] : -# 1075| r7_2(iterator &) = Call : func:r7_1, this:r7_0 -# 1075| mu7_3(unknown) = ^CallSideEffect : ~mu0_2 -#-----| Goto (back edge) -> Block 6 +# 1075| Block 7 +# 1075| r7_0(glval &>) = VariableAddress[(__range)] : +# 1075| r7_1(glval &>) = VariableAddress[v] : +# 1075| r7_2(vector &) = Load : &:r7_1, ~mu0_2 +# 1075| r7_3(glval>) = CopyValue : r7_2 +# 1075| r7_4(vector &) = CopyValue : r7_3 +# 1075| mu7_5(vector &) = Store : &:r7_0, r7_4 +# 1075| r7_6(glval) = VariableAddress[(__begin)] : +#-----| r7_7(glval &>) = VariableAddress[(__range)] : +#-----| r7_8(vector &) = Load : &:r7_7, ~mu0_2 +#-----| r7_9(glval>) = CopyValue : r7_8 +# 1075| r7_10(glval) = FunctionAddress[begin] : +# 1075| r7_11(iterator) = Call : func:r7_10, this:r7_9 +# 1075| mu7_12(unknown) = ^CallSideEffect : ~mu0_2 +# 1075| mu7_13(iterator) = Store : &:r7_6, r7_11 +# 1075| r7_14(glval) = VariableAddress[(__end)] : +#-----| r7_15(glval &>) = VariableAddress[(__range)] : +#-----| r7_16(vector &) = Load : &:r7_15, ~mu0_2 +#-----| r7_17(glval>) = CopyValue : r7_16 +# 1075| r7_18(glval) = FunctionAddress[end] : +# 1075| r7_19(iterator) = Call : func:r7_18, this:r7_17 +# 1075| mu7_20(unknown) = ^CallSideEffect : ~mu0_2 +# 1075| mu7_21(iterator) = Store : &:r7_14, r7_19 +#-----| Goto -> Block 8 -# 1075| Block 8 -# 1075| r8_0(glval) = VariableAddress[e] : -#-----| r8_1(glval) = VariableAddress[(__begin)] : -#-----| r8_2(glval) = Convert : r8_1 -# 1075| r8_3(glval) = FunctionAddress[operator*] : -# 1075| r8_4(int &) = Call : func:r8_3, this:r8_2 -# 1075| mu8_5(unknown) = ^CallSideEffect : ~mu0_2 -# 1075| r8_6(glval) = Convert : r8_4 -# 1075| mu8_7(int &) = Store : &:r8_0, r8_6 -# 1076| r8_8(glval) = VariableAddress[e] : -# 1076| r8_9(int &) = Load : &:r8_8, ~mu0_2 -# 1076| r8_10(int) = Load : &:r8_9, ~mu0_2 -# 1076| r8_11(int) = Constant[5] : -# 1076| r8_12(bool) = CompareLT : r8_10, r8_11 -# 1076| v8_13(void) = ConditionalBranch : r8_12 -#-----| False -> Block 7 -#-----| True -> Block 9 +#-----| Block 8 +#-----| r8_0(glval) = VariableAddress[(__begin)] : +#-----| r8_1(glval) = Convert : r8_0 +# 1075| r8_2(glval) = FunctionAddress[operator!=] : +#-----| r8_3(glval) = VariableAddress[(__end)] : +#-----| r8_4(iterator) = Load : &:r8_3, ~mu0_2 +# 1075| r8_5(bool) = Call : func:r8_2, this:r8_1, 0:r8_4 +# 1075| mu8_6(unknown) = ^CallSideEffect : ~mu0_2 +# 1075| v8_7(void) = ConditionalBranch : r8_5 +#-----| False -> Block 2 +#-----| True -> Block 10 -# 1077| Block 9 -# 1077| v9_0(void) = NoOp : -#-----| Goto -> Block 10 +#-----| Block 9 +#-----| r9_0(glval) = VariableAddress[(__begin)] : +# 1075| r9_1(glval) = FunctionAddress[operator++] : +# 1075| r9_2(iterator &) = Call : func:r9_1, this:r9_0 +# 1075| mu9_3(unknown) = ^CallSideEffect : ~mu0_2 +# 1075| r9_4(glval) = CopyValue : r9_2 +#-----| Goto (back edge) -> Block 8 -# 1079| Block 10 -# 1079| v10_0(void) = NoOp : -# 1080| v10_1(void) = NoOp : -# 1068| v10_2(void) = ReturnVoid : -# 1068| v10_3(void) = UnmodeledUse : mu* -# 1068| v10_4(void) = ExitFunction : +# 1075| Block 10 +# 1075| r10_0(glval) = VariableAddress[e] : +#-----| r10_1(glval) = VariableAddress[(__begin)] : +#-----| r10_2(glval) = Convert : r10_1 +# 1075| r10_3(glval) = FunctionAddress[operator*] : +# 1075| r10_4(int &) = Call : func:r10_3, this:r10_2 +# 1075| mu10_5(unknown) = ^CallSideEffect : ~mu0_2 +# 1075| r10_6(glval) = CopyValue : r10_4 +# 1075| r10_7(glval) = Convert : r10_6 +# 1075| r10_8(int &) = CopyValue : r10_7 +# 1075| mu10_9(int &) = Store : &:r10_0, r10_8 +# 1076| r10_10(glval) = VariableAddress[e] : +# 1076| r10_11(int &) = Load : &:r10_10, ~mu0_2 +# 1076| r10_12(int) = Load : &:r10_11, ~mu0_2 +# 1076| r10_13(int) = Constant[5] : +# 1076| r10_14(bool) = CompareLT : r10_12, r10_13 +# 1076| v10_15(void) = ConditionalBranch : r10_14 +#-----| False -> Block 9 +#-----| True -> Block 1 # 1099| int AsmStmt(int) # 1099| Block 0 @@ -5154,6 +5458,7 @@ ir.cpp: # 1130| r2_2(int) = Constant[1] : # 1130| r2_3(int) = Add : r2_1, r2_2 # 1130| mu2_4(int) = Store : &:r2_0, r2_3 +# 1130| r2_5(glval) = CopyValue : r2_0 #-----| Goto (back edge) -> Block 1 # 1130| Block 3 @@ -5219,6 +5524,7 @@ ir.cpp: # 1140| r6_4(int) = Load : &:r6_3, ~mu0_2 # 1140| r6_5(glval) = VariableAddress[x] : # 1140| mu6_6(int) = Store : &:r6_5, r6_4 +# 1140| r6_7(glval) = CopyValue : r6_5 #-----| Goto -> Block 8 # 1140| Block 7 @@ -5235,6 +5541,7 @@ ir.cpp: # 1142| r8_0(int) = Constant[7] : # 1142| r8_1(glval) = VariableAddress[x] : # 1142| mu8_2(int) = Store : &:r8_1, r8_0 +# 1142| r8_3(glval) = CopyValue : r8_1 #-----| Goto -> Block 13 # 1144| Block 9 @@ -5309,28 +5616,30 @@ ir.cpp: # 1156| r0_34(int) = Load : &:r0_33, ~mu0_2 # 1156| r0_35(glval) = PointerAdd[4] : r0_32, r0_34 # 1156| mu0_36(int) = Store : &:r0_35, r0_31 -# 1157| r0_37(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4_shuffle] : -# 1157| r0_38(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : -# 1157| r0_39(__attribute((vector_size(16))) int) = Load : &:r0_38, ~mu0_2 -# 1157| r0_40(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : -# 1157| r0_41(__attribute((vector_size(16))) int) = Load : &:r0_40, ~mu0_2 -#-----| r0_42(int) = Constant[3] : -# 1157| r0_43(int) = Constant[2] : -# 1157| r0_44(int) = Constant[1] : -# 1157| r0_45(int) = Constant[0] : -# 1157| r0_46(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r0_39, 1:r0_41, 2:r0_42, 3:r0_43, 4:r0_44, 5:r0_45 -# 1157| mu0_47(__attribute((vector_size(16))) int) = Store : &:r0_37, r0_46 -# 1158| r0_48(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : -# 1158| r0_49(__attribute((vector_size(16))) int) = Load : &:r0_48, ~mu0_2 -# 1158| r0_50(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4_shuffle] : -# 1158| r0_51(__attribute((vector_size(16))) int) = Load : &:r0_50, ~mu0_2 -# 1158| r0_52(__attribute((vector_size(16))) int) = Add : r0_49, r0_51 -# 1158| r0_53(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : -# 1158| mu0_54(__attribute((vector_size(16))) int) = Store : &:r0_53, r0_52 -# 1159| v0_55(void) = NoOp : -# 1153| v0_56(void) = ReturnVoid : -# 1153| v0_57(void) = UnmodeledUse : mu* -# 1153| v0_58(void) = ExitFunction : +# 1156| r0_37(glval) = CopyValue : r0_35 +# 1157| r0_38(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4_shuffle] : +# 1157| r0_39(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : +# 1157| r0_40(__attribute((vector_size(16))) int) = Load : &:r0_39, ~mu0_2 +# 1157| r0_41(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : +# 1157| r0_42(__attribute((vector_size(16))) int) = Load : &:r0_41, ~mu0_2 +#-----| r0_43(int) = Constant[3] : +# 1157| r0_44(int) = Constant[2] : +# 1157| r0_45(int) = Constant[1] : +# 1157| r0_46(int) = Constant[0] : +# 1157| r0_47(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r0_40, 1:r0_42, 2:r0_43, 3:r0_44, 4:r0_45, 5:r0_46 +# 1157| mu0_48(__attribute((vector_size(16))) int) = Store : &:r0_38, r0_47 +# 1158| r0_49(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : +# 1158| r0_50(__attribute((vector_size(16))) int) = Load : &:r0_49, ~mu0_2 +# 1158| r0_51(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4_shuffle] : +# 1158| r0_52(__attribute((vector_size(16))) int) = Load : &:r0_51, ~mu0_2 +# 1158| r0_53(__attribute((vector_size(16))) int) = Add : r0_50, r0_52 +# 1158| r0_54(glval<__attribute((vector_size(16))) int>) = VariableAddress[vi4] : +# 1158| mu0_55(__attribute((vector_size(16))) int) = Store : &:r0_54, r0_53 +# 1158| r0_56(glval<__attribute((vector_size(16))) int>) = CopyValue : r0_54 +# 1159| v0_57(void) = NoOp : +# 1153| v0_58(void) = ReturnVoid : +# 1153| v0_59(void) = UnmodeledUse : mu* +# 1153| v0_60(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() 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 index fe11d99f31f..f3f5101dcb4 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected @@ -211,8 +211,10 @@ ssa.cpp: # 70| r1_3(int) = Constant[1] : # 70| r1_4(char *) = PointerAdd[1] : r1_2, r1_3 # 70| m1_5(char *) = Store : &:r1_1, r1_4 -# 70| m1_6(char) = Store : &:r1_2, r1_0 -# 70| m1_7(unknown) = Chi : total:m3_0, partial:m1_6 +# 70| r1_6(glval) = CopyValue : r1_2 +# 70| m1_7(char) = Store : &:r1_6, r1_0 +# 70| m1_8(unknown) = Chi : total:m3_0, partial:m1_7 +# 70| r1_9(glval) = CopyValue : r1_6 #-----| Goto (back edge) -> Block 3 # 71| Block 2 @@ -222,7 +224,7 @@ ssa.cpp: # 68| v2_3(void) = ExitFunction : # 69| Block 3 -# 69| m3_0(unknown) = Phi : from 0:~m0_1, from 1:~m1_7 +# 69| m3_0(unknown) = Phi : from 0:~m0_1, from 1:~m1_8 # 69| m3_1(int) = Phi : from 0:m0_4, from 1:m3_7 # 69| m3_2(char *) = Phi : from 0:m0_6, from 1:m1_5 # 69| r3_3(glval) = VariableAddress[n] : @@ -262,20 +264,23 @@ ssa.cpp: # 80| r1_0(int) = Constant[3] : # 80| r1_1(glval) = VariableAddress[x] : # 80| m1_2(int) = Store : &:r1_1, r1_0 -# 81| r1_3(int) = Constant[4] : -# 81| r1_4(glval) = VariableAddress[y] : -# 81| m1_5(int) = Store : &:r1_4, r1_3 +# 80| r1_3(glval) = CopyValue : r1_1 +# 81| r1_4(int) = Constant[4] : +# 81| r1_5(glval) = VariableAddress[y] : +# 81| m1_6(int) = Store : &:r1_5, r1_4 +# 81| r1_7(glval) = CopyValue : r1_5 #-----| Goto -> Block 3 # 84| Block 2 # 84| r2_0(int) = Constant[5] : # 84| r2_1(glval) = VariableAddress[x] : # 84| m2_2(int) = Store : &:r2_1, r2_0 +# 84| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 86| Block 3 # 86| m3_0(int) = Phi : from 1:m1_2, from 2:m2_2 -# 86| m3_1(int) = Phi : from 1:m1_5, from 2:m0_10 +# 86| m3_1(int) = Phi : from 1:m1_6, from 2:m0_10 # 86| r3_2(glval) = VariableAddress[x_merge] : # 86| r3_3(glval) = VariableAddress[x] : # 86| r3_4(int) = Load : &:r3_3, m3_0 @@ -323,14 +328,15 @@ ssa.cpp: # 96| m0_9(Point) = Store : &:r0_6, r0_8 # 97| r0_10(glval) = FunctionAddress[Escape] : # 97| r0_11(glval) = VariableAddress[a] : -# 97| r0_12(void *) = Convert : r0_11 -# 97| v0_13(void) = Call : func:r0_10, 0:r0_12 -# 97| m0_14(unknown) = ^CallSideEffect : ~m0_5 -# 97| m0_15(unknown) = Chi : total:m0_5, partial:m0_14 -# 98| v0_16(void) = NoOp : -# 95| v0_17(void) = ReturnVoid : -# 95| v0_18(void) = UnmodeledUse : mu* -# 95| v0_19(void) = ExitFunction : +# 97| r0_12(Point *) = CopyValue : r0_11 +# 97| r0_13(void *) = Convert : r0_12 +# 97| v0_14(void) = Call : func:r0_10, 0:r0_13 +# 97| m0_15(unknown) = ^CallSideEffect : ~m0_5 +# 97| m0_16(unknown) = Chi : total:m0_5, partial:m0_15 +# 98| v0_17(void) = NoOp : +# 95| v0_18(void) = ReturnVoid : +# 95| v0_19(void) = UnmodeledUse : mu* +# 95| v0_20(void) = ExitFunction : # 100| void MustTotallyOverlap(Point) # 100| Block 0 @@ -374,14 +380,15 @@ ssa.cpp: # 107| m0_15(int) = Store : &:r0_11, r0_14 # 108| r0_16(glval) = FunctionAddress[Escape] : # 108| r0_17(glval) = VariableAddress[a] : -# 108| r0_18(void *) = Convert : r0_17 -# 108| v0_19(void) = Call : func:r0_16, 0:r0_18 -# 108| m0_20(unknown) = ^CallSideEffect : ~m0_5 -# 108| m0_21(unknown) = Chi : total:m0_5, partial:m0_20 -# 109| v0_22(void) = NoOp : -# 105| v0_23(void) = ReturnVoid : -# 105| v0_24(void) = UnmodeledUse : mu* -# 105| v0_25(void) = ExitFunction : +# 108| r0_18(Point *) = CopyValue : r0_17 +# 108| r0_19(void *) = Convert : r0_18 +# 108| v0_20(void) = Call : func:r0_16, 0:r0_19 +# 108| m0_21(unknown) = ^CallSideEffect : ~m0_5 +# 108| m0_22(unknown) = Chi : total:m0_5, partial:m0_21 +# 109| v0_23(void) = NoOp : +# 105| v0_24(void) = ReturnVoid : +# 105| v0_25(void) = UnmodeledUse : mu* +# 105| v0_26(void) = ExitFunction : # 111| void MayPartiallyOverlap(int, int) # 111| Block 0 @@ -441,14 +448,15 @@ ssa.cpp: # 118| m0_23(Point) = Store : &:r0_20, r0_22 # 119| r0_24(glval) = FunctionAddress[Escape] : # 119| r0_25(glval) = VariableAddress[a] : -# 119| r0_26(void *) = Convert : r0_25 -# 119| v0_27(void) = Call : func:r0_24, 0:r0_26 -# 119| m0_28(unknown) = ^CallSideEffect : ~m0_19 -# 119| m0_29(unknown) = Chi : total:m0_19, partial:m0_28 -# 120| v0_30(void) = NoOp : -# 116| v0_31(void) = ReturnVoid : -# 116| v0_32(void) = UnmodeledUse : mu* -# 116| v0_33(void) = ExitFunction : +# 119| r0_26(Point *) = CopyValue : r0_25 +# 119| r0_27(void *) = Convert : r0_26 +# 119| v0_28(void) = Call : func:r0_24, 0:r0_27 +# 119| m0_29(unknown) = ^CallSideEffect : ~m0_19 +# 119| m0_30(unknown) = Chi : total:m0_19, partial:m0_29 +# 120| v0_31(void) = NoOp : +# 116| v0_32(void) = ReturnVoid : +# 116| v0_33(void) = UnmodeledUse : mu* +# 116| v0_34(void) = ExitFunction : # 122| void MergeMustExactlyOverlap(bool, int, int) # 122| Block 0 @@ -484,6 +492,7 @@ ssa.cpp: # 125| r1_3(glval) = FieldAddress[x] : r1_2 # 125| m1_4(int) = Store : &:r1_3, r1_1 # 125| m1_5(Point) = Chi : total:m0_18, partial:m1_4 +# 125| r1_6(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 128| Block 2 @@ -493,6 +502,7 @@ ssa.cpp: # 128| r2_3(glval) = FieldAddress[x] : r2_2 # 128| m2_4(int) = Store : &:r2_3, r2_1 # 128| m2_5(Point) = Chi : total:m0_18, partial:m2_4 +# 128| r2_6(glval) = CopyValue : r2_3 #-----| Goto -> Block 3 # 130| Block 3 @@ -546,6 +556,7 @@ ssa.cpp: # 137| r1_3(glval) = FieldAddress[x] : r1_2 # 137| m1_4(int) = Store : &:r1_3, r1_1 # 137| m1_5(Point) = Chi : total:m0_18, partial:m1_4 +# 137| r1_6(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 140| Block 2 @@ -553,6 +564,7 @@ ssa.cpp: # 140| r2_1(Point) = Load : &:r2_0, m0_6 # 140| r2_2(glval) = VariableAddress[a] : # 140| m2_3(Point) = Store : &:r2_2, r2_1 +# 140| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 142| Block 3 @@ -602,6 +614,7 @@ ssa.cpp: # 148| r1_3(glval) = FieldAddress[x] : r1_2 # 148| m1_4(int) = Store : &:r1_3, r1_1 # 148| m1_5(Point) = Chi : total:m0_18, partial:m1_4 +# 148| r1_6(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 151| Block 2 @@ -609,6 +622,7 @@ ssa.cpp: # 151| r2_1(Point) = Load : &:r2_0, m0_6 # 151| r2_2(glval) = VariableAddress[a] : # 151| m2_3(Point) = Store : &:r2_2, r2_1 +# 151| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 153| Block 3 @@ -657,6 +671,7 @@ ssa.cpp: # 159| r1_4(glval) = FieldAddress[x] : r1_3 # 159| m1_5(int) = Store : &:r1_4, r1_1 # 159| m1_6(Rect) = Chi : total:m0_18, partial:m1_5 +# 159| r1_7(glval) = CopyValue : r1_4 #-----| Goto -> Block 3 # 162| Block 2 @@ -664,6 +679,7 @@ ssa.cpp: # 162| r2_1(Rect) = Load : &:r2_0, m0_6 # 162| r2_2(glval) = VariableAddress[a] : # 162| m2_3(Rect) = Store : &:r2_2, r2_1 +# 162| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 164| Block 3 @@ -698,19 +714,22 @@ ssa.cpp: # 174| r0_15(glval) = VariableAddress[w] : # 174| r0_16(glval) = FieldAddress[f] : r0_15 # 174| m0_17(int) = Store : &:r0_16, r0_14 -# 175| r0_18(glval) = VariableAddress[w] : -# 175| r0_19(glval) = FieldAddress[f] : r0_18 -# 175| r0_20(int) = Load : &:r0_19, m0_17 -# 175| r0_21(glval) = VariableAddress[a] : -# 175| m0_22(int) = Store : &:r0_21, r0_20 -# 176| r0_23(glval) = VariableAddress[w] : -# 176| r0_24(Wrapper) = Load : &:r0_23, ~m0_17 -# 176| r0_25(glval) = VariableAddress[x] : -# 176| m0_26(Wrapper) = Store : &:r0_25, r0_24 -# 177| v0_27(void) = NoOp : -# 171| v0_28(void) = ReturnVoid : -# 171| v0_29(void) = UnmodeledUse : mu* -# 171| v0_30(void) = ExitFunction : +# 174| r0_18(glval) = CopyValue : r0_16 +# 175| r0_19(glval) = VariableAddress[w] : +# 175| r0_20(glval) = FieldAddress[f] : r0_19 +# 175| r0_21(int) = Load : &:r0_20, m0_17 +# 175| r0_22(glval) = VariableAddress[a] : +# 175| m0_23(int) = Store : &:r0_22, r0_21 +# 175| r0_24(glval) = CopyValue : r0_22 +# 176| r0_25(glval) = VariableAddress[w] : +# 176| r0_26(Wrapper) = Load : &:r0_25, ~m0_17 +# 176| r0_27(glval) = VariableAddress[x] : +# 176| m0_28(Wrapper) = Store : &:r0_27, r0_26 +# 176| r0_29(glval) = CopyValue : r0_27 +# 177| v0_30(void) = NoOp : +# 171| v0_31(void) = ReturnVoid : +# 171| v0_32(void) = UnmodeledUse : mu* +# 171| v0_33(void) = ExitFunction : # 179| int AsmStmt(int*) # 179| Block 0 @@ -791,19 +810,21 @@ ssa.cpp: # 200| r0_27(int) = Load : &:r0_26, m0_19 # 200| r0_28(int) = Add : r0_27, r0_24 # 200| m0_29(int) = Store : &:r0_26, r0_28 -# 201| r0_30(glval) = FunctionAddress[abs] : -# 201| r0_31(glval) = VariableAddress[x] : -# 201| r0_32(int) = Load : &:r0_31, m0_8 -# 201| r0_33(int) = Call : func:r0_30, 0:r0_32 -# 201| r0_34(glval) = VariableAddress[ret] : -# 201| r0_35(int) = Load : &:r0_34, m0_29 -# 201| r0_36(int) = Add : r0_35, r0_33 -# 201| m0_37(int) = Store : &:r0_34, r0_36 -# 202| r0_38(glval) = VariableAddress[#return] : -# 202| r0_39(glval) = VariableAddress[ret] : -# 202| r0_40(int) = Load : &:r0_39, m0_37 -# 202| m0_41(int) = Store : &:r0_38, r0_40 -# 198| r0_42(glval) = VariableAddress[#return] : -# 198| v0_43(void) = ReturnValue : &:r0_42, m0_41 -# 198| v0_44(void) = UnmodeledUse : mu* -# 198| v0_45(void) = ExitFunction : +# 200| r0_30(glval) = CopyValue : r0_26 +# 201| r0_31(glval) = FunctionAddress[abs] : +# 201| r0_32(glval) = VariableAddress[x] : +# 201| r0_33(int) = Load : &:r0_32, m0_8 +# 201| r0_34(int) = Call : func:r0_31, 0:r0_33 +# 201| r0_35(glval) = VariableAddress[ret] : +# 201| r0_36(int) = Load : &:r0_35, m0_29 +# 201| r0_37(int) = Add : r0_36, r0_34 +# 201| m0_38(int) = Store : &:r0_35, r0_37 +# 201| r0_39(glval) = CopyValue : r0_35 +# 202| r0_40(glval) = VariableAddress[#return] : +# 202| r0_41(glval) = VariableAddress[ret] : +# 202| r0_42(int) = Load : &:r0_41, m0_38 +# 202| m0_43(int) = Store : &:r0_40, r0_42 +# 198| r0_44(glval) = VariableAddress[#return] : +# 198| v0_45(void) = ReturnValue : &:r0_44, m0_43 +# 198| v0_46(void) = UnmodeledUse : mu* +# 198| v0_47(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected index ce0d9323340..57330c88ce9 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected @@ -214,7 +214,9 @@ ssa.cpp: # 70| r1_3(int) = Constant[1] : # 70| r1_4(char *) = PointerAdd[1] : r1_2, r1_3 # 70| m1_5(char *) = Store : &:r1_1, r1_4 -# 70| mu1_6(char) = Store : &:r1_2, r1_0 +# 70| r1_6(glval) = CopyValue : r1_2 +# 70| mu1_7(char) = Store : &:r1_6, r1_0 +# 70| r1_8(glval) = CopyValue : r1_6 #-----| Goto (back edge) -> Block 3 # 71| Block 2 @@ -263,20 +265,23 @@ ssa.cpp: # 80| r1_0(int) = Constant[3] : # 80| r1_1(glval) = VariableAddress[x] : # 80| m1_2(int) = Store : &:r1_1, r1_0 -# 81| r1_3(int) = Constant[4] : -# 81| r1_4(glval) = VariableAddress[y] : -# 81| m1_5(int) = Store : &:r1_4, r1_3 +# 80| r1_3(glval) = CopyValue : r1_1 +# 81| r1_4(int) = Constant[4] : +# 81| r1_5(glval) = VariableAddress[y] : +# 81| m1_6(int) = Store : &:r1_5, r1_4 +# 81| r1_7(glval) = CopyValue : r1_5 #-----| Goto -> Block 3 # 84| Block 2 # 84| r2_0(int) = Constant[5] : # 84| r2_1(glval) = VariableAddress[x] : # 84| m2_2(int) = Store : &:r2_1, r2_0 +# 84| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 86| Block 3 # 86| m3_0(int) = Phi : from 1:m1_2, from 2:m2_2 -# 86| m3_1(int) = Phi : from 1:m1_5, from 2:m0_10 +# 86| m3_1(int) = Phi : from 1:m1_6, from 2:m0_10 # 86| r3_2(glval) = VariableAddress[x_merge] : # 86| r3_3(glval) = VariableAddress[x] : # 86| r3_4(int) = Load : &:r3_3, m3_0 @@ -323,13 +328,14 @@ ssa.cpp: # 96| m0_8(Point) = Store : &:r0_5, r0_7 # 97| r0_9(glval) = FunctionAddress[Escape] : # 97| r0_10(glval) = VariableAddress[a] : -# 97| r0_11(void *) = Convert : r0_10 -# 97| v0_12(void) = Call : func:r0_9, 0:r0_11 -# 97| mu0_13(unknown) = ^CallSideEffect : ~mu0_2 -# 98| v0_14(void) = NoOp : -# 95| v0_15(void) = ReturnVoid : -# 95| v0_16(void) = UnmodeledUse : mu* -# 95| v0_17(void) = ExitFunction : +# 97| r0_11(Point *) = CopyValue : r0_10 +# 97| r0_12(void *) = Convert : r0_11 +# 97| v0_13(void) = Call : func:r0_9, 0:r0_12 +# 97| mu0_14(unknown) = ^CallSideEffect : ~mu0_2 +# 98| v0_15(void) = NoOp : +# 95| v0_16(void) = ReturnVoid : +# 95| v0_17(void) = UnmodeledUse : mu* +# 95| v0_18(void) = ExitFunction : # 100| void MustTotallyOverlap(Point) # 100| Block 0 @@ -372,13 +378,14 @@ ssa.cpp: # 107| m0_14(int) = Store : &:r0_10, r0_13 # 108| r0_15(glval) = FunctionAddress[Escape] : # 108| r0_16(glval) = VariableAddress[a] : -# 108| r0_17(void *) = Convert : r0_16 -# 108| v0_18(void) = Call : func:r0_15, 0:r0_17 -# 108| mu0_19(unknown) = ^CallSideEffect : ~mu0_2 -# 109| v0_20(void) = NoOp : -# 105| v0_21(void) = ReturnVoid : -# 105| v0_22(void) = UnmodeledUse : mu* -# 105| v0_23(void) = ExitFunction : +# 108| r0_17(Point *) = CopyValue : r0_16 +# 108| r0_18(void *) = Convert : r0_17 +# 108| v0_19(void) = Call : func:r0_15, 0:r0_18 +# 108| mu0_20(unknown) = ^CallSideEffect : ~mu0_2 +# 109| v0_21(void) = NoOp : +# 105| v0_22(void) = ReturnVoid : +# 105| v0_23(void) = UnmodeledUse : mu* +# 105| v0_24(void) = ExitFunction : # 111| void MayPartiallyOverlap(int, int) # 111| Block 0 @@ -433,13 +440,14 @@ ssa.cpp: # 118| m0_20(Point) = Store : &:r0_17, r0_19 # 119| r0_21(glval) = FunctionAddress[Escape] : # 119| r0_22(glval) = VariableAddress[a] : -# 119| r0_23(void *) = Convert : r0_22 -# 119| v0_24(void) = Call : func:r0_21, 0:r0_23 -# 119| mu0_25(unknown) = ^CallSideEffect : ~mu0_2 -# 120| v0_26(void) = NoOp : -# 116| v0_27(void) = ReturnVoid : -# 116| v0_28(void) = UnmodeledUse : mu* -# 116| v0_29(void) = ExitFunction : +# 119| r0_23(Point *) = CopyValue : r0_22 +# 119| r0_24(void *) = Convert : r0_23 +# 119| v0_25(void) = Call : func:r0_21, 0:r0_24 +# 119| mu0_26(unknown) = ^CallSideEffect : ~mu0_2 +# 120| v0_27(void) = NoOp : +# 116| v0_28(void) = ReturnVoid : +# 116| v0_29(void) = UnmodeledUse : mu* +# 116| v0_30(void) = ExitFunction : # 122| void MergeMustExactlyOverlap(bool, int, int) # 122| Block 0 @@ -472,6 +480,7 @@ ssa.cpp: # 125| r1_2(glval) = VariableAddress[a] : # 125| r1_3(glval) = FieldAddress[x] : r1_2 # 125| mu1_4(int) = Store : &:r1_3, r1_1 +# 125| r1_5(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 128| Block 2 @@ -480,6 +489,7 @@ ssa.cpp: # 128| r2_2(glval) = VariableAddress[a] : # 128| r2_3(glval) = FieldAddress[x] : r2_2 # 128| mu2_4(int) = Store : &:r2_3, r2_1 +# 128| r2_5(glval) = CopyValue : r2_3 #-----| Goto -> Block 3 # 130| Block 3 @@ -528,6 +538,7 @@ ssa.cpp: # 137| r1_2(glval) = VariableAddress[a] : # 137| r1_3(glval) = FieldAddress[x] : r1_2 # 137| mu1_4(int) = Store : &:r1_3, r1_1 +# 137| r1_5(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 140| Block 2 @@ -535,6 +546,7 @@ ssa.cpp: # 140| r2_1(Point) = Load : &:r2_0, m0_6 # 140| r2_2(glval) = VariableAddress[a] : # 140| mu2_3(Point) = Store : &:r2_2, r2_1 +# 140| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 142| Block 3 @@ -579,6 +591,7 @@ ssa.cpp: # 148| r1_2(glval) = VariableAddress[a] : # 148| r1_3(glval) = FieldAddress[x] : r1_2 # 148| mu1_4(int) = Store : &:r1_3, r1_1 +# 148| r1_5(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 151| Block 2 @@ -586,6 +599,7 @@ ssa.cpp: # 151| r2_1(Point) = Load : &:r2_0, m0_6 # 151| r2_2(glval) = VariableAddress[a] : # 151| mu2_3(Point) = Store : &:r2_2, r2_1 +# 151| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 153| Block 3 @@ -630,6 +644,7 @@ ssa.cpp: # 159| r1_3(glval) = FieldAddress[topLeft] : r1_2 # 159| r1_4(glval) = FieldAddress[x] : r1_3 # 159| mu1_5(int) = Store : &:r1_4, r1_1 +# 159| r1_6(glval) = CopyValue : r1_4 #-----| Goto -> Block 3 # 162| Block 2 @@ -637,6 +652,7 @@ ssa.cpp: # 162| r2_1(Rect) = Load : &:r2_0, m0_6 # 162| r2_2(glval) = VariableAddress[a] : # 162| mu2_3(Rect) = Store : &:r2_2, r2_1 +# 162| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 164| Block 3 @@ -670,19 +686,22 @@ ssa.cpp: # 174| r0_15(glval) = VariableAddress[w] : # 174| r0_16(glval) = FieldAddress[f] : r0_15 # 174| mu0_17(int) = Store : &:r0_16, r0_14 -# 175| r0_18(glval) = VariableAddress[w] : -# 175| r0_19(glval) = FieldAddress[f] : r0_18 -# 175| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 175| r0_21(glval) = VariableAddress[a] : -# 175| m0_22(int) = Store : &:r0_21, r0_20 -# 176| r0_23(glval) = VariableAddress[w] : -# 176| r0_24(Wrapper) = Load : &:r0_23, ~mu0_2 -# 176| r0_25(glval) = VariableAddress[x] : -# 176| m0_26(Wrapper) = Store : &:r0_25, r0_24 -# 177| v0_27(void) = NoOp : -# 171| v0_28(void) = ReturnVoid : -# 171| v0_29(void) = UnmodeledUse : mu* -# 171| v0_30(void) = ExitFunction : +# 174| r0_18(glval) = CopyValue : r0_16 +# 175| r0_19(glval) = VariableAddress[w] : +# 175| r0_20(glval) = FieldAddress[f] : r0_19 +# 175| r0_21(int) = Load : &:r0_20, ~mu0_2 +# 175| r0_22(glval) = VariableAddress[a] : +# 175| m0_23(int) = Store : &:r0_22, r0_21 +# 175| r0_24(glval) = CopyValue : r0_22 +# 176| r0_25(glval) = VariableAddress[w] : +# 176| r0_26(Wrapper) = Load : &:r0_25, ~mu0_2 +# 176| r0_27(glval) = VariableAddress[x] : +# 176| m0_28(Wrapper) = Store : &:r0_27, r0_26 +# 176| r0_29(glval) = CopyValue : r0_27 +# 177| v0_30(void) = NoOp : +# 171| v0_31(void) = ReturnVoid : +# 171| v0_32(void) = UnmodeledUse : mu* +# 171| v0_33(void) = ExitFunction : # 179| int AsmStmt(int*) # 179| Block 0 @@ -757,19 +776,21 @@ ssa.cpp: # 200| r0_27(int) = Load : &:r0_26, m0_19 # 200| r0_28(int) = Add : r0_27, r0_24 # 200| m0_29(int) = Store : &:r0_26, r0_28 -# 201| r0_30(glval) = FunctionAddress[abs] : -# 201| r0_31(glval) = VariableAddress[x] : -# 201| r0_32(int) = Load : &:r0_31, m0_8 -# 201| r0_33(int) = Call : func:r0_30, 0:r0_32 -# 201| r0_34(glval) = VariableAddress[ret] : -# 201| r0_35(int) = Load : &:r0_34, m0_29 -# 201| r0_36(int) = Add : r0_35, r0_33 -# 201| m0_37(int) = Store : &:r0_34, r0_36 -# 202| r0_38(glval) = VariableAddress[#return] : -# 202| r0_39(glval) = VariableAddress[ret] : -# 202| r0_40(int) = Load : &:r0_39, m0_37 -# 202| m0_41(int) = Store : &:r0_38, r0_40 -# 198| r0_42(glval) = VariableAddress[#return] : -# 198| v0_43(void) = ReturnValue : &:r0_42, m0_41 -# 198| v0_44(void) = UnmodeledUse : mu* -# 198| v0_45(void) = ExitFunction : +# 200| r0_30(glval) = CopyValue : r0_26 +# 201| r0_31(glval) = FunctionAddress[abs] : +# 201| r0_32(glval) = VariableAddress[x] : +# 201| r0_33(int) = Load : &:r0_32, m0_8 +# 201| r0_34(int) = Call : func:r0_31, 0:r0_33 +# 201| r0_35(glval) = VariableAddress[ret] : +# 201| r0_36(int) = Load : &:r0_35, m0_29 +# 201| r0_37(int) = Add : r0_36, r0_34 +# 201| m0_38(int) = Store : &:r0_35, r0_37 +# 201| r0_39(glval) = CopyValue : r0_35 +# 202| r0_40(glval) = VariableAddress[#return] : +# 202| r0_41(glval) = VariableAddress[ret] : +# 202| r0_42(int) = Load : &:r0_41, m0_38 +# 202| m0_43(int) = Store : &:r0_40, r0_42 +# 198| r0_44(glval) = VariableAddress[#return] : +# 198| v0_45(void) = ReturnValue : &:r0_44, m0_43 +# 198| v0_46(void) = UnmodeledUse : mu* +# 198| v0_47(void) = ExitFunction : From a34c0d4200667c9a9c5ee6bd769ca4e8cff7311e Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Mon, 23 Sep 2019 15:39:32 +0200 Subject: [PATCH 2/5] C++: Autoformat TranslatedExpr.qll --- .../code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index e9e7cf59cb0..fb6cc3f8570 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -2556,8 +2556,8 @@ predicate exprNeedsCopyIfNotLoaded(Expr expr) { expr instanceof AddressOfExpr or expr instanceof BuiltInOperationBuiltInAddressOf - // No case for ParenthesisExpr to avoid getting too many instructions or + // No case for ParenthesisExpr to avoid getting too many instructions expr instanceof ReferenceDereferenceExpr or expr instanceof ReferenceToExpr From b75bf06649df642ed47b5686ed874c82834ea632 Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Tue, 24 Sep 2019 13:00:21 +0200 Subject: [PATCH 3/5] C++: Accept test changes in other IR tests --- .../signanalysis/SignAnalysis.expected | 30 ++ .../syntax-zoo/aliased_ssa_sanity.expected | 2 +- .../syntax-zoo/raw_sanity.expected | 21 +- .../syntax-zoo/unaliased_ssa_sanity.expected | 2 +- .../GlobalValueNumbering/ir_gvn.expected | 262 ++++++++++-------- 5 files changed, 192 insertions(+), 125 deletions(-) diff --git a/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected index cdc15c4b45a..4dc280b6ca9 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected @@ -13,6 +13,7 @@ | bounded_bounds.c:16:12:16:12 | Load: x | negative strictlyNegative | | bounded_bounds.c:16:12:16:12 | Store: x | negative strictlyNegative | | inline_assembly.c:9:23:9:23 | Uninitialized: definition of y | positive | +| inline_assembly.c:10:3:10:7 | CopyValue: ... = ... | positive strictlyPositive | | 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 | @@ -27,8 +28,10 @@ | minmax.c:18:37:18:37 | Load: x | positive strictlyPositive | | minmax.c:18:40:18:40 | Load: y | positive strictlyPositive | | minmax.c:18:43:18:43 | Load: z | positive strictlyPositive | +| minmax.c:20:2:24:3 | CopyValue: ... = ... | positive | | minmax.c:20:2:24:3 | Store: ... = ... | positive | | minmax.c:20:6:24:3 | CopyValue: (statement expression) | positive | +| minmax.c:22:18:22:22 | CopyValue: ... = ... | positive strictlyPositive | | minmax.c:22:18:22:22 | Store: ... = ... | positive strictlyPositive | | minmax.c:22:22:22:22 | Load: x | positive strictlyPositive | | minmax.c:23:3:23:3 | Load: t | positive | @@ -37,6 +40,7 @@ | minmax.c:26:40:26:40 | Load: y | positive strictlyPositive | | minmax.c:26:43:26:43 | Load: z | positive | | test.c:7:10:7:10 | Phi: p | positive | +| test.c:8:5:8:19 | CopyValue: ... = ... | positive strictlyPositive | | test.c:8:5:8:19 | Store: ... = ... | positive strictlyPositive | | test.c:8:13:8:17 | Load: count | positive | | test.c:8:13:8:19 | Add: ... + ... | positive strictlyPositive | @@ -44,6 +48,7 @@ | test.c:10:10:10:14 | Load: count | positive | | test.c:10:10:10:14 | Store: count | positive | | test.c:15:10:15:10 | Phi: p | positive | +| test.c:16:5:16:26 | CopyValue: ... = ... | positive | | test.c:16:5:16:26 | Store: ... = ... | positive | | test.c:16:13:16:26 | Rem: ... % ... | positive | | test.c:16:14:16:18 | Load: count | positive | @@ -57,6 +62,7 @@ | test.c:24:5:24:11 | Constant: ... ++ | positive strictlyPositive | | test.c:24:5:24:11 | Load: ... ++ | positive | | test.c:24:5:24:11 | Store: ... ++ | positive strictlyPositive | +| test.c:25:5:25:22 | CopyValue: ... = ... | positive | | test.c:25:5:25:22 | Store: ... = ... | positive | | test.c:25:13:25:17 | Load: count | positive strictlyPositive | | test.c:25:13:25:22 | Rem: ... % ... | positive | @@ -67,6 +73,7 @@ | test.c:33:15:33:15 | Phi: i | positive | | test.c:33:15:33:15 | Phi: i | positive | | test.c:33:19:33:19 | Constant: 2 | positive strictlyPositive | +| test.c:33:22:33:28 | CopyValue: ... = ... | positive strictlyPositive | | test.c:33:22:33:28 | Store: ... = ... | positive strictlyPositive | | test.c:33:26:33:26 | Load: i | positive | | test.c:33:26:33:28 | Add: ... + ... | positive strictlyPositive | @@ -101,6 +108,7 @@ | test.c:51:15:51:17 | Add: ... + ... | positive strictlyPositive | | test.c:51:17:51:17 | Constant: 2 | positive strictlyPositive | | test.c:51:21:51:21 | Constant: 4 | positive strictlyPositive | +| test.c:51:24:51:30 | CopyValue: ... = ... | positive strictlyPositive | | test.c:51:24:51:30 | Store: ... = ... | positive strictlyPositive | | test.c:51:28:51:28 | Load: i | positive | | test.c:51:28:51:30 | Add: ... + ... | positive strictlyPositive | @@ -459,6 +467,7 @@ | test.c:343:5:343:7 | Constant: ... ++ | positive strictlyPositive | | test.c:343:5:343:7 | Load: ... ++ | positive | | test.c:343:5:343:7 | Store: ... ++ | positive strictlyPositive | +| test.c:345:3:345:7 | CopyValue: ... = ... | positive strictlyPositive | | test.c:345:3:345:7 | Store: ... = ... | positive strictlyPositive | | test.c:345:7:345:7 | Load: i | positive strictlyPositive | | test.c:346:7:346:7 | Load: x | positive | @@ -474,6 +483,7 @@ | test.c:356:36:356:37 | Uninitialized: definition of y6 | positive | | test.c:356:40:356:41 | Uninitialized: definition of y7 | positive | | test.c:356:44:356:45 | Uninitialized: definition of y8 | positive | +| test.c:357:3:357:23 | CopyValue: ... = ... | positive | | test.c:357:3:357:23 | Store: ... = ... | positive | | test.c:357:8:357:8 | Load: x | positive | | test.c:357:8:357:23 | Load: ... ? ... : ... | positive | @@ -483,6 +493,7 @@ | test.c:357:12:357:14 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:357:18:357:18 | Load: x | positive | | test.c:357:22:357:23 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:358:3:358:24 | CopyValue: ... = ... | positive | | test.c:358:3:358:24 | Store: ... = ... | positive | | test.c:358:8:358:8 | Load: x | positive | | test.c:358:8:358:24 | Load: ... ? ... : ... | positive | @@ -494,6 +505,7 @@ | test.c:358:24:358:24 | Load: x | positive | | test.c:365:7:365:7 | Load: x | positive | | test.c:365:11:365:13 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:366:5:366:15 | CopyValue: ... = ... | positive | | test.c:366:5:366:15 | Store: ... = ... | positive | | test.c:366:10:366:10 | Load: x | positive | | test.c:366:10:366:15 | Load: ... ? ... : ... | positive | @@ -501,6 +513,7 @@ | test.c:366:10:366:15 | Store: ... ? ... : ... | positive | | test.c:366:10:366:15 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:366:15:366:15 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:367:5:367:17 | CopyValue: ... = ... | positive | | test.c:367:5:367:17 | Store: ... = ... | positive | | test.c:367:10:367:10 | Load: x | positive | | test.c:367:10:367:17 | Load: ... ? ... : ... | positive | @@ -508,6 +521,7 @@ | test.c:367:10:367:17 | Store: ... ? ... : ... | positive | | test.c:367:10:367:17 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:367:15:367:17 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:368:5:368:21 | CopyValue: ... = ... | positive strictlyPositive | | test.c:368:5:368:21 | Store: ... = ... | positive strictlyPositive | | test.c:368:10:368:21 | Load: ... ? ... : ... | positive strictlyPositive | | test.c:368:10:368:21 | Store: ... ? ... : ... | positive strictlyPositive | @@ -515,6 +529,7 @@ | test.c:368:11:368:13 | Add: ... + ... | positive strictlyPositive | | test.c:368:13:368:13 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:368:19:368:21 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:369:5:369:36 | CopyValue: ... = ... | positive strictlyPositive | | test.c:369:5:369:36 | Store: ... = ... | positive strictlyPositive | | test.c:369:10:369:36 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:369:10:369:36 | Load: ... ? ... : ... | positive strictlyPositive | @@ -524,6 +539,7 @@ | test.c:369:27:369:29 | Add: ... + ... | positive strictlyPositive | | test.c:369:29:369:29 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:369:36:369:36 | Constant: 5 | positive strictlyPositive | +| test.c:370:5:370:38 | CopyValue: ... = ... | positive strictlyPositive | | test.c:370:5:370:38 | Store: ... = ... | positive strictlyPositive | | test.c:370:10:370:38 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:370:10:370:38 | Load: ... ? ... : ... | positive strictlyPositive | @@ -533,6 +549,7 @@ | test.c:370:27:370:29 | Add: ... + ... | positive strictlyPositive | | test.c:370:29:370:29 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:370:36:370:38 | Constant: 500 | positive strictlyPositive | +| test.c:371:5:371:39 | CopyValue: ... = ... | positive strictlyPositive | | test.c:371:5:371:39 | Store: ... = ... | positive strictlyPositive | | test.c:371:10:371:39 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:371:10:371:39 | Load: ... ? ... : ... | positive strictlyPositive | @@ -570,6 +587,7 @@ | test.c:378:24:378:25 | Uninitialized: definition of y3 | positive | | test.c:378:28:378:29 | Uninitialized: definition of y4 | positive | | test.c:378:32:378:33 | Uninitialized: definition of y5 | positive | +| test.c:379:3:379:24 | CopyValue: ... = ... | positive strictlyPositive | | test.c:379:3:379:24 | Store: ... = ... | positive strictlyPositive | | test.c:379:8:379:8 | Load: x | positive | | test.c:379:8:379:24 | Load: ... ? ... : ... | positive strictlyPositive | @@ -579,6 +597,7 @@ | test.c:379:12:379:14 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:379:18:379:18 | Load: x | positive strictlyPositive | | test.c:379:22:379:24 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:380:3:380:25 | CopyValue: ... = ... | positive strictlyPositive | | test.c:380:3:380:25 | Store: ... = ... | positive strictlyPositive | | test.c:380:8:380:8 | Load: x | positive | | test.c:380:8:380:25 | Load: ... ? ... : ... | positive strictlyPositive | @@ -588,14 +607,18 @@ | test.c:380:13:380:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:380:19:380:21 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:380:25:380:25 | Load: x | positive strictlyPositive | +| test.c:381:3:381:11 | CopyValue: ... = ... | positive strictlyPositive | | test.c:381:3:381:11 | Store: ... = ... | positive strictlyPositive | | test.c:381:8:381:11 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:382:3:382:11 | CopyValue: ... = ... | positive strictlyPositive | | test.c:382:3:382:11 | Store: ... = ... | positive strictlyPositive | | test.c:382:8:382:11 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:383:3:383:11 | CopyValue: ... = ... | positive strictlyPositive | | test.c:383:3:383:11 | Store: ... = ... | positive strictlyPositive | | test.c:383:8:383:11 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:384:7:384:7 | Load: x | positive | | test.c:384:12:384:14 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:385:5:385:21 | CopyValue: ... = ... | positive strictlyPositive | | test.c:385:5:385:21 | Store: ... = ... | positive strictlyPositive | | test.c:385:10:385:21 | Load: ... ? ... : ... | positive strictlyPositive | | test.c:385:10:385:21 | Store: ... ? ... : ... | positive strictlyPositive | @@ -603,6 +626,7 @@ | test.c:385:11:385:15 | Sub: ... - ... | positive | | test.c:385:13:385:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:385:21:385:21 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:386:5:386:21 | CopyValue: ... = ... | positive strictlyPositive | | test.c:386:5:386:21 | Store: ... = ... | positive strictlyPositive | | test.c:386:10:386:21 | Load: ... ? ... : ... | positive strictlyPositive | | test.c:386:10:386:21 | Store: ... ? ... : ... | positive strictlyPositive | @@ -610,6 +634,7 @@ | test.c:386:11:386:15 | Sub: ... - ... | positive | | test.c:386:13:386:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:386:21:386:21 | Constant: (unsigned int)... | positive strictlyPositive | +| test.c:387:5:387:38 | CopyValue: ... = ... | positive strictlyPositive | | test.c:387:5:387:38 | Store: ... = ... | positive strictlyPositive | | test.c:387:10:387:38 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:387:10:387:38 | Load: ... ? ... : ... | positive strictlyPositive | @@ -644,17 +669,22 @@ | test.c:394:34:394:36 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:395:16:395:17 | Uninitialized: definition of y1 | positive | | test.c:396:16:396:17 | Uninitialized: definition of y2 | positive | +| test.c:397:3:397:15 | CopyValue: ... = ... | positive strictlyPositive | | test.c:397:3:397:15 | Store: ... = ... | positive strictlyPositive | | test.c:397:9:397:11 | Add: ++ ... | positive strictlyPositive | | test.c:397:9:397:11 | Constant: ++ ... | positive strictlyPositive | | test.c:397:9:397:11 | Load: ++ ... | positive | | test.c:397:9:397:11 | Store: ++ ... | positive strictlyPositive | +| test.c:397:9:397:14 | CopyValue: ... , ... | positive strictlyPositive | | test.c:397:14:397:14 | Load: y | positive strictlyPositive | +| test.c:398:3:398:23 | CopyValue: ... = ... | positive strictlyPositive | | test.c:398:3:398:23 | Store: ... = ... | positive strictlyPositive | | test.c:398:9:398:11 | Add: ... ++ | positive strictlyPositive | | test.c:398:9:398:11 | Constant: ... ++ | positive strictlyPositive | | test.c:398:9:398:11 | Load: ... ++ | positive strictlyPositive | | test.c:398:9:398:11 | Store: ... ++ | positive strictlyPositive | +| test.c:398:9:398:19 | CopyValue: ... , ... | positive strictlyPositive | +| test.c:398:9:398:22 | CopyValue: ... , ... | positive strictlyPositive | | test.c:398:14:398:19 | Add: ... += ... | positive strictlyPositive | | test.c:398:14:398:19 | Load: ... += ... | positive strictlyPositive | | test.c:398:14:398:19 | Store: ... += ... | positive strictlyPositive | diff --git a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected index 5e76fb042be..a8f98105b08 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected @@ -21,7 +21,7 @@ instructionWithoutSuccessor | ms_try_mix.cpp:28:12:28:15 | Chi: call to C | | ms_try_mix.cpp:48:10:48:13 | Chi: call to C | | pointer_to_member.cpp:35:11:35:21 | FieldAddress: {...} | -| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | +| stmt_expr.cpp:27:5:27:15 | CopyValue: ... = ... | | vla.c:5:9:5:14 | Uninitialized: definition of matrix | | vla.c:11:6:11:16 | UnmodeledDefinition: vla_typedef | ambiguousSuccessors diff --git a/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected b/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected index b9c4bd7eba5..e8b34aff726 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected @@ -1,9 +1,10 @@ missingOperand -| condition_decls.cpp:16:6:16:20 | ConditionalBranch: (condition decl) | Instruction 'ConditionalBranch' is missing an expected operand with tag 'Condition' in function '$@'. | condition_decls.cpp:15:6:15:17 | IR: if_decl_bind | void if_decl_bind(int) | -| condition_decls.cpp:26:3:36:3 | Switch: switch (...) ... | Instruction 'Switch' is missing an expected operand with tag 'Condition' in function '$@'. | condition_decls.cpp:25:6:25:21 | IR: switch_decl_bind | void switch_decl_bind(int) | -| condition_decls.cpp:41:9:41:23 | ConditionalBranch: (condition decl) | Instruction 'ConditionalBranch' is missing an expected operand with tag 'Condition' in function '$@'. | condition_decls.cpp:40:6:40:20 | IR: while_decl_bind | void while_decl_bind(int) | -| condition_decls.cpp:48:39:48:53 | ConditionalBranch: (condition decl) | Instruction 'ConditionalBranch' is missing an expected operand with tag 'Condition' in function '$@'. | condition_decls.cpp:47:6:47:18 | IR: for_decl_bind | void for_decl_bind(int) | +| condition_decls.cpp:16:6:16:20 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:15:6:15:17 | IR: if_decl_bind | void if_decl_bind(int) | +| condition_decls.cpp:26:10:26:24 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:25:6:25:21 | IR: switch_decl_bind | void switch_decl_bind(int) | +| condition_decls.cpp:41:9:41:23 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:40:6:40:20 | IR: while_decl_bind | void while_decl_bind(int) | +| condition_decls.cpp:48:39:48:53 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:47:6:47:18 | IR: for_decl_bind | void for_decl_bind(int) | | misc.c:125:5:125:11 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:97:6:97:10 | IR: misc3 | void misc3() | +| misc.c:220:3:223:3 | CopyValue: ... = ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | | misc.c:220:3:223:3 | Store: ... = ... | Instruction 'Store' is missing an expected operand with tag 'StoreValue' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | | misc.c:220:9:223:3 | FieldAddress: {...} | Instruction 'FieldAddress' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | | misc.c:220:9:223:3 | FieldAddress: {...} | Instruction 'FieldAddress' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | @@ -47,13 +48,13 @@ instructionWithoutSuccessor | misc.c:222:10:222:10 | Store: 2 | | ms_assume.cpp:20:12:20:12 | Constant: (bool)... | | ms_try_except.cpp:3:9:3:9 | Uninitialized: definition of x | -| ms_try_except.cpp:7:13:7:17 | Store: ... = ... | +| ms_try_except.cpp:7:13:7:17 | CopyValue: ... = ... | | ms_try_except.cpp:9:19:9:19 | Load: j | -| ms_try_except.cpp:10:13:10:17 | Store: ... = ... | -| ms_try_except.cpp:14:13:14:17 | Store: ... = ... | -| ms_try_except.cpp:17:13:17:17 | Store: ... = ... | +| ms_try_except.cpp:10:13:10:17 | CopyValue: ... = ... | +| ms_try_except.cpp:14:13:14:17 | CopyValue: ... = ... | +| ms_try_except.cpp:17:13:17:17 | CopyValue: ... = ... | | ms_try_except.cpp:19:17:19:21 | Sub: ... - ... | -| ms_try_except.cpp:20:9:20:13 | Store: ... = ... | +| ms_try_except.cpp:20:9:20:13 | CopyValue: ... = ... | | ms_try_mix.cpp:11:12:11:15 | CallSideEffect: call to C | | ms_try_mix.cpp:16:13:16:19 | ThrowValue: throw ... | | ms_try_mix.cpp:18:16:18:19 | CallSideEffect: call to C | @@ -75,7 +76,7 @@ instructionWithoutSuccessor | static_init_templates.cpp:97:27:97:36 | Convert: (void *)... | | static_init_templates.cpp:105:27:105:27 | Constant: (void *)... | | static_init_templates.cpp:105:27:105:27 | Constant: (void *)... | -| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | +| stmt_expr.cpp:27:5:27:15 | CopyValue: ... = ... | | stmt_expr.cpp:29:11:32:11 | CopyValue: (statement expression) | | stmt_in_type.cpp:5:53:5:53 | Constant: 1 | | vla.c:5:9:5:14 | Uninitialized: definition of matrix | diff --git a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected index ab5362cb06c..c8cee7b2a7c 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected @@ -30,7 +30,7 @@ instructionWithoutSuccessor | ms_try_mix.cpp:28:12:28:15 | CallSideEffect: call to C | | ms_try_mix.cpp:48:10:48:13 | CallSideEffect: call to C | | pointer_to_member.cpp:35:11:35:21 | FieldAddress: {...} | -| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | +| stmt_expr.cpp:27:5:27:15 | CopyValue: ... = ... | | vla.c:5:9:5:14 | Uninitialized: definition of matrix | | vla.c:11:6:11:16 | UnmodeledDefinition: vla_typedef | ambiguousSuccessors 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 8be4cf4e2c1..4bc9f90cc60 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected @@ -40,34 +40,40 @@ test.cpp: # 5| valnum = r0_7 # 5| m0_19(int) = Store : &:r0_18, r0_17 # 5| valnum = r0_17 -# 6| r0_20(glval) = VariableAddress[p0] : +# 5| r0_20(glval) = CopyValue : r0_18 +# 5| valnum = r0_7 +# 6| r0_21(glval) = VariableAddress[p0] : # 6| valnum = r0_3 -# 6| r0_21(int) = Load : &:r0_20, m0_4 +# 6| r0_22(int) = Load : &:r0_21, m0_4 # 6| valnum = m0_4 -# 6| r0_22(glval) = VariableAddress[p1] : +# 6| r0_23(glval) = VariableAddress[p1] : # 6| valnum = r0_5 -# 6| r0_23(int) = Load : &:r0_22, m0_6 +# 6| r0_24(int) = Load : &:r0_23, m0_6 # 6| valnum = m0_6 -# 6| r0_24(int) = Add : r0_21, r0_23 +# 6| r0_25(int) = Add : r0_22, r0_24 # 6| valnum = r0_17 -# 6| r0_25(glval) = VariableAddress[x] : +# 6| r0_26(glval) = VariableAddress[x] : # 6| valnum = r0_7 -# 6| m0_26(int) = Store : &:r0_25, r0_24 +# 6| m0_27(int) = Store : &:r0_26, r0_25 # 6| valnum = r0_17 -# 7| r0_27(glval) = VariableAddress[x] : +# 6| r0_28(glval) = CopyValue : r0_26 +# 6| valnum = r0_7 +# 7| r0_29(glval) = VariableAddress[x] : # 7| valnum = r0_7 -# 7| r0_28(int) = Load : &:r0_27, m0_26 +# 7| r0_30(int) = Load : &:r0_29, m0_27 # 7| valnum = r0_17 -# 7| r0_29(glval) = VariableAddress[y] : +# 7| r0_31(glval) = VariableAddress[y] : # 7| valnum = r0_9 -# 7| m0_30(int) = Store : &:r0_29, r0_28 +# 7| m0_32(int) = Store : &:r0_31, r0_30 # 7| valnum = r0_17 -# 8| v0_31(void) = NoOp : -# 1| r0_32(glval) = VariableAddress[#return] : +# 7| r0_33(glval) = CopyValue : r0_31 +# 7| valnum = r0_9 +# 8| v0_34(void) = NoOp : +# 1| r0_35(glval) = VariableAddress[#return] : # 1| valnum = unique -# 1| v0_33(void) = ReturnValue : &:r0_32 -# 1| v0_34(void) = UnmodeledUse : mu* -# 1| v0_35(void) = ExitFunction : +# 1| v0_36(void) = ReturnValue : &:r0_35 +# 1| v0_37(void) = UnmodeledUse : mu* +# 1| v0_38(void) = ExitFunction : # 12| int test01(int, int) # 12| Block 0 @@ -116,40 +122,46 @@ test.cpp: # 16| valnum = r0_7 # 16| m0_22(int) = Store : &:r0_21, r0_20 # 16| valnum = r0_20 -# 17| r0_23(glval) = VariableAddress[p0] : +# 16| r0_23(glval) = CopyValue : r0_21 +# 16| valnum = r0_7 +# 17| r0_24(glval) = VariableAddress[p0] : # 17| valnum = r0_3 -# 17| r0_24(int) = Load : &:r0_23, m0_4 +# 17| r0_25(int) = Load : &:r0_24, m0_4 # 17| valnum = m0_4 -# 17| r0_25(glval) = VariableAddress[p1] : +# 17| r0_26(glval) = VariableAddress[p1] : # 17| valnum = r0_5 -# 17| r0_26(int) = Load : &:r0_25, m0_6 +# 17| r0_27(int) = Load : &:r0_26, m0_6 # 17| valnum = m0_6 -# 17| r0_27(int) = Add : r0_24, r0_26 +# 17| r0_28(int) = Add : r0_25, r0_27 # 17| valnum = r0_17 -# 17| r0_28(glval) = VariableAddress[global01] : +# 17| r0_29(glval) = VariableAddress[global01] : # 17| valnum = r0_18 -# 17| r0_29(int) = Load : &:r0_28, ~m0_1 +# 17| r0_30(int) = Load : &:r0_29, ~m0_1 # 17| valnum = unique -# 17| r0_30(int) = Add : r0_27, r0_29 -# 17| valnum = r0_30 -# 17| r0_31(glval) = VariableAddress[x] : +# 17| r0_31(int) = Add : r0_28, r0_30 +# 17| valnum = r0_31 +# 17| r0_32(glval) = VariableAddress[x] : # 17| valnum = r0_7 -# 17| m0_32(int) = Store : &:r0_31, r0_30 -# 17| valnum = r0_30 -# 18| r0_33(glval) = VariableAddress[x] : +# 17| m0_33(int) = Store : &:r0_32, r0_31 +# 17| valnum = r0_31 +# 17| r0_34(glval) = CopyValue : r0_32 +# 17| valnum = r0_7 +# 18| r0_35(glval) = VariableAddress[x] : # 18| valnum = r0_7 -# 18| r0_34(int) = Load : &:r0_33, m0_32 -# 18| valnum = r0_30 -# 18| r0_35(glval) = VariableAddress[y] : +# 18| r0_36(int) = Load : &:r0_35, m0_33 +# 18| valnum = r0_31 +# 18| r0_37(glval) = VariableAddress[y] : # 18| valnum = r0_9 -# 18| m0_36(int) = Store : &:r0_35, r0_34 -# 18| valnum = r0_30 -# 19| v0_37(void) = NoOp : -# 12| r0_38(glval) = VariableAddress[#return] : +# 18| m0_38(int) = Store : &:r0_37, r0_36 +# 18| valnum = r0_31 +# 18| r0_39(glval) = CopyValue : r0_37 +# 18| valnum = r0_9 +# 19| v0_40(void) = NoOp : +# 12| r0_41(glval) = VariableAddress[#return] : # 12| valnum = unique -# 12| v0_39(void) = ReturnValue : &:r0_38 -# 12| v0_40(void) = UnmodeledUse : mu* -# 12| v0_41(void) = ExitFunction : +# 12| v0_42(void) = ReturnValue : &:r0_41 +# 12| v0_43(void) = UnmodeledUse : mu* +# 12| v0_44(void) = ExitFunction : # 25| int test02(int, int) # 25| Block 0 @@ -198,47 +210,53 @@ test.cpp: # 29| valnum = r0_7 # 29| m0_22(int) = Store : &:r0_21, r0_20 # 29| valnum = r0_20 -# 30| r0_23(glval) = FunctionAddress[change_global02] : +# 29| r0_23(glval) = CopyValue : r0_21 +# 29| valnum = r0_7 +# 30| r0_24(glval) = FunctionAddress[change_global02] : # 30| valnum = unique -# 30| v0_24(void) = Call : func:r0_23 -# 30| m0_25(unknown) = ^CallSideEffect : ~m0_1 +# 30| v0_25(void) = Call : func:r0_24 +# 30| m0_26(unknown) = ^CallSideEffect : ~m0_1 # 30| valnum = unique -# 30| m0_26(unknown) = Chi : total:m0_1, partial:m0_25 +# 30| m0_27(unknown) = Chi : total:m0_1, partial:m0_26 # 30| valnum = unique -# 31| r0_27(glval) = VariableAddress[p0] : +# 31| r0_28(glval) = VariableAddress[p0] : # 31| valnum = r0_3 -# 31| r0_28(int) = Load : &:r0_27, m0_4 +# 31| r0_29(int) = Load : &:r0_28, m0_4 # 31| valnum = m0_4 -# 31| r0_29(glval) = VariableAddress[p1] : +# 31| r0_30(glval) = VariableAddress[p1] : # 31| valnum = r0_5 -# 31| r0_30(int) = Load : &:r0_29, m0_6 +# 31| r0_31(int) = Load : &:r0_30, m0_6 # 31| valnum = m0_6 -# 31| r0_31(int) = Add : r0_28, r0_30 +# 31| r0_32(int) = Add : r0_29, r0_31 # 31| valnum = r0_17 -# 31| r0_32(glval) = VariableAddress[global02] : +# 31| r0_33(glval) = VariableAddress[global02] : # 31| valnum = r0_18 -# 31| r0_33(int) = Load : &:r0_32, ~m0_26 +# 31| r0_34(int) = Load : &:r0_33, ~m0_27 # 31| valnum = unique -# 31| r0_34(int) = Add : r0_31, r0_33 -# 31| valnum = r0_34 -# 31| r0_35(glval) = VariableAddress[x] : +# 31| r0_35(int) = Add : r0_32, r0_34 +# 31| valnum = r0_35 +# 31| r0_36(glval) = VariableAddress[x] : # 31| valnum = r0_7 -# 31| m0_36(int) = Store : &:r0_35, r0_34 -# 31| valnum = r0_34 -# 32| r0_37(glval) = VariableAddress[x] : +# 31| m0_37(int) = Store : &:r0_36, r0_35 +# 31| valnum = r0_35 +# 31| r0_38(glval) = CopyValue : r0_36 +# 31| valnum = r0_7 +# 32| r0_39(glval) = VariableAddress[x] : # 32| valnum = r0_7 -# 32| r0_38(int) = Load : &:r0_37, m0_36 -# 32| valnum = r0_34 -# 32| r0_39(glval) = VariableAddress[y] : +# 32| r0_40(int) = Load : &:r0_39, m0_37 +# 32| valnum = r0_35 +# 32| r0_41(glval) = VariableAddress[y] : # 32| valnum = r0_9 -# 32| m0_40(int) = Store : &:r0_39, r0_38 -# 32| valnum = r0_34 -# 33| v0_41(void) = NoOp : -# 25| r0_42(glval) = VariableAddress[#return] : +# 32| m0_42(int) = Store : &:r0_41, r0_40 +# 32| valnum = r0_35 +# 32| r0_43(glval) = CopyValue : r0_41 +# 32| valnum = r0_9 +# 33| v0_44(void) = NoOp : +# 25| r0_45(glval) = VariableAddress[#return] : # 25| valnum = unique -# 25| v0_43(void) = ReturnValue : &:r0_42 -# 25| v0_44(void) = UnmodeledUse : mu* -# 25| v0_45(void) = ExitFunction : +# 25| v0_46(void) = ReturnValue : &:r0_45 +# 25| v0_47(void) = UnmodeledUse : mu* +# 25| v0_48(void) = ExitFunction : # 39| int test03(int, int, int*) # 39| Block 0 @@ -291,50 +309,60 @@ test.cpp: # 43| valnum = r0_9 # 43| m0_24(int) = Store : &:r0_23, r0_22 # 43| valnum = r0_22 -# 44| r0_25(int) = Constant[0] : -# 44| valnum = r0_25 -# 44| r0_26(glval) = VariableAddress[p2] : +# 43| r0_25(glval) = CopyValue : r0_23 +# 43| valnum = r0_9 +# 44| r0_26(int) = Constant[0] : +# 44| valnum = r0_26 +# 44| r0_27(glval) = VariableAddress[p2] : # 44| valnum = r0_7 -# 44| r0_27(int *) = Load : &:r0_26, m0_8 +# 44| r0_28(int *) = Load : &:r0_27, m0_8 # 44| valnum = m0_8 -# 44| m0_28(int) = Store : &:r0_27, r0_25 -# 44| valnum = r0_25 -# 44| m0_29(unknown) = Chi : total:m0_1, partial:m0_28 +# 44| r0_29(glval) = CopyValue : r0_28 +# 44| valnum = m0_8 +# 44| m0_30(int) = Store : &:r0_29, r0_26 +# 44| valnum = r0_26 +# 44| m0_31(unknown) = Chi : total:m0_1, partial:m0_30 # 44| valnum = unique -# 45| r0_30(glval) = VariableAddress[p0] : +# 44| r0_32(glval) = CopyValue : r0_29 +# 44| valnum = m0_8 +# 45| r0_33(glval) = VariableAddress[p0] : # 45| valnum = r0_3 -# 45| r0_31(int) = Load : &:r0_30, m0_4 +# 45| r0_34(int) = Load : &:r0_33, m0_4 # 45| valnum = m0_4 -# 45| r0_32(glval) = VariableAddress[p1] : +# 45| r0_35(glval) = VariableAddress[p1] : # 45| valnum = r0_5 -# 45| r0_33(int) = Load : &:r0_32, m0_6 +# 45| r0_36(int) = Load : &:r0_35, m0_6 # 45| valnum = m0_6 -# 45| r0_34(int) = Add : r0_31, r0_33 -# 45| valnum = r0_19 -# 45| r0_35(glval) = VariableAddress[global03] : -# 45| valnum = r0_20 -# 45| r0_36(int) = Load : &:r0_35, ~m0_29 -# 45| valnum = unique # 45| r0_37(int) = Add : r0_34, r0_36 -# 45| valnum = r0_37 -# 45| r0_38(glval) = VariableAddress[x] : +# 45| valnum = r0_19 +# 45| r0_38(glval) = VariableAddress[global03] : +# 45| valnum = r0_20 +# 45| r0_39(int) = Load : &:r0_38, ~m0_31 +# 45| valnum = unique +# 45| r0_40(int) = Add : r0_37, r0_39 +# 45| valnum = r0_40 +# 45| r0_41(glval) = VariableAddress[x] : # 45| valnum = r0_9 -# 45| m0_39(int) = Store : &:r0_38, r0_37 -# 45| valnum = r0_37 -# 46| r0_40(glval) = VariableAddress[x] : +# 45| m0_42(int) = Store : &:r0_41, r0_40 +# 45| valnum = r0_40 +# 45| r0_43(glval) = CopyValue : r0_41 +# 45| valnum = r0_9 +# 46| r0_44(glval) = VariableAddress[x] : # 46| valnum = r0_9 -# 46| r0_41(int) = Load : &:r0_40, m0_39 -# 46| valnum = r0_37 -# 46| r0_42(glval) = VariableAddress[y] : +# 46| r0_45(int) = Load : &:r0_44, m0_42 +# 46| valnum = r0_40 +# 46| r0_46(glval) = VariableAddress[y] : # 46| valnum = r0_11 -# 46| m0_43(int) = Store : &:r0_42, r0_41 -# 46| valnum = r0_37 -# 47| v0_44(void) = NoOp : -# 39| r0_45(glval) = VariableAddress[#return] : +# 46| m0_47(int) = Store : &:r0_46, r0_45 +# 46| valnum = r0_40 +# 46| r0_48(glval) = CopyValue : r0_46 +# 46| valnum = r0_11 +# 47| v0_49(void) = NoOp : +# 39| r0_50(glval) = VariableAddress[#return] : # 39| valnum = unique -# 39| v0_46(void) = ReturnValue : &:r0_45 -# 39| v0_47(void) = UnmodeledUse : mu* -# 39| v0_48(void) = ExitFunction : +# 39| v0_51(void) = ReturnValue : &:r0_50 +# 39| v0_52(void) = UnmodeledUse : mu* +# 39| v0_53(void) = ExitFunction : # 49| unsigned int my_strspn(char const*, char const*) # 49| Block 0 @@ -391,6 +419,8 @@ test.cpp: # 55| valnum = r0_7 # 55| m2_3(char *) = Store : &:r2_2, r2_1 # 55| valnum = m0_6 +# 55| r2_4(glval) = CopyValue : r2_2 +# 55| valnum = r0_7 #-----| Goto -> Block 3 # 56| Block 3 @@ -572,6 +602,8 @@ test.cpp: # 80| valnum = r0_5 # 80| m1_6(signed short) = Store : &:r1_5, r1_4 # 80| valnum = r1_4 +# 80| r1_7(glval) = CopyValue : r1_5 +# 80| valnum = r0_5 #-----| Goto -> Block 2 # 82| Block 2 @@ -648,10 +680,12 @@ test.cpp: # 88| valnum = r0_9 # 88| m3_4(int) = Store : &:r3_3, r3_2 # 88| valnum = m3_0 -# 89| v3_5(void) = NoOp : -# 84| v3_6(void) = ReturnVoid : -# 84| v3_7(void) = UnmodeledUse : mu* -# 84| v3_8(void) = ExitFunction : +# 88| r3_5(glval) = CopyValue : r3_3 +# 88| valnum = r0_9 +# 89| v3_6(void) = NoOp : +# 84| v3_7(void) = ReturnVoid : +# 84| v3_8(void) = UnmodeledUse : mu* +# 84| v3_9(void) = ExitFunction : # 91| int regression_test00() # 91| Block 0 @@ -668,21 +702,23 @@ test.cpp: # 92| valnum = r0_3 # 92| m0_6(int) = Store : &:r0_5, r0_4 # 92| valnum = r0_4 -# 92| m0_7(int) = Store : &:r0_3, r0_4 +# 92| r0_7(int) = CopyValue : r0_4 # 92| valnum = r0_4 -# 93| r0_8(glval) = VariableAddress[#return] : -# 93| valnum = r0_8 -# 93| r0_9(glval) = VariableAddress[x] : +# 92| m0_8(int) = Store : &:r0_3, r0_7 +# 92| valnum = r0_4 +# 93| r0_9(glval) = VariableAddress[#return] : +# 93| valnum = r0_9 +# 93| r0_10(glval) = VariableAddress[x] : # 93| valnum = r0_3 -# 93| r0_10(int) = Load : &:r0_9, m0_7 +# 93| r0_11(int) = Load : &:r0_10, m0_8 # 93| valnum = r0_4 -# 93| m0_11(int) = Store : &:r0_8, r0_10 +# 93| m0_12(int) = Store : &:r0_9, r0_11 # 93| valnum = r0_4 -# 91| r0_12(glval) = VariableAddress[#return] : -# 91| valnum = r0_8 -# 91| v0_13(void) = ReturnValue : &:r0_12, m0_11 -# 91| v0_14(void) = UnmodeledUse : mu* -# 91| v0_15(void) = ExitFunction : +# 91| r0_13(glval) = VariableAddress[#return] : +# 91| valnum = r0_9 +# 91| v0_14(void) = ReturnValue : &:r0_13, m0_12 +# 91| v0_15(void) = UnmodeledUse : mu* +# 91| v0_16(void) = ExitFunction : # 104| int inheritanceConversions(Derived*) # 104| Block 0 From 7a6ec83572aa387e042328328b2607148dc19410 Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Wed, 23 Oct 2019 11:50:58 +0200 Subject: [PATCH 4/5] C++: No CopyValue for immediately discarded exprs Expressions like the `e` in `e;` or `e, e2`, whose result is immediately discarded, should not get a synthetic `CopyValue`. This removes a lot of redundancy from the IR. To prevent these expressions from being confused with the expressions from which they get their result, the predicate `getInstructionConvertedResultExpression` now suppresses results for expressions that don't produce their own result. This should fix the mapping between expressions and IR data-flow nodes. --- .../raw/internal/IRConstruction.qll | 11 +- .../raw/internal/TranslatedExpr.qll | 64 +- .../ir/escape/points_to.expected | 19 - .../test/library-tests/ir/ir/raw_ir.expected | 2120 ++++++++--------- .../ir/ssa/aliased_ssa_ir.expected | 83 +- .../ir/ssa/unaliased_ssa_ir.expected | 83 +- .../syntax-zoo/aliased_ssa_sanity.expected | 2 +- .../syntax-zoo/raw_sanity.expected | 13 +- .../syntax-zoo/unaliased_ssa_sanity.expected | 2 +- 9 files changed, 1094 insertions(+), 1303 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll index 314eda43a4c..d0f70f61498 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll @@ -49,20 +49,23 @@ private module Cached { Expr getInstructionConvertedResultExpression(Instruction instruction) { exists(TranslatedExpr translatedExpr | translatedExpr = getTranslatedExpr(result) and - instruction = translatedExpr.getResult() + instruction = translatedExpr.getResult() and + // Only associate `instruction` with this expression if the translated + // expression actually produced the instruction; not if it merely + // forwarded the result of another translated expression. + instruction = translatedExpr.getInstruction(_) ) } cached Expr getInstructionUnconvertedResultExpression(Instruction instruction) { - exists(Expr converted, TranslatedExpr translatedExpr | + exists(Expr converted | result = converted.(Conversion).getExpr+() or result = converted | not result instanceof Conversion and - translatedExpr = getTranslatedExpr(converted) and - instruction = translatedExpr.getResult() + converted = getInstructionConvertedResultExpression(instruction) ) } diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index fbecb10cd24..7b9417b570d 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -2547,27 +2547,45 @@ class TranslatedErrorExpr extends TranslatedSingleInstructionExpr { // This should ideally be a dispatch predicate on TranslatedNonConstantExpr, // but it doesn't look monotonic to QL. predicate exprNeedsCopyIfNotLoaded(Expr expr) { - expr instanceof AssignExpr - or - expr instanceof AssignOperation and - not expr.isPRValueCategory() // is C++ - or - expr instanceof PrefixCrementOperation and - not expr.isPRValueCategory() // is C++ - or - expr instanceof PointerDereferenceExpr - or - expr instanceof AddressOfExpr - or - expr instanceof BuiltInOperationBuiltInAddressOf - or - // No case for ParenthesisExpr to avoid getting too many instructions - expr instanceof ReferenceDereferenceExpr - or - expr instanceof ReferenceToExpr - or - expr instanceof CommaExpr - or - expr instanceof ConditionDeclExpr - // TODO: simplify TranslatedStmtExpr too + ( + expr instanceof AssignExpr + or + expr instanceof AssignOperation and + not expr.isPRValueCategory() // is C++ + or + expr instanceof PrefixCrementOperation and + not expr.isPRValueCategory() // is C++ + or + expr instanceof PointerDereferenceExpr + or + expr instanceof AddressOfExpr + or + expr instanceof BuiltInOperationBuiltInAddressOf + or + // No case for ParenthesisExpr to avoid getting too many instructions + expr instanceof ReferenceDereferenceExpr + or + expr instanceof ReferenceToExpr + or + expr instanceof CommaExpr + or + expr instanceof ConditionDeclExpr + // TODO: simplify TranslatedStmtExpr too + ) and + not exprImmediatelyDiscarded(expr) +} + +/** + * Holds if `expr` is immediately discarded. Such expressions do not need a + * `CopyValue` because it's unlikely that anyone is interested in their value. + */ +private predicate exprImmediatelyDiscarded(Expr expr) { + exists(ExprStmt s | + s = expr.getParent() and + not exists(StmtExpr se | s = se.getStmt().(Block).getLastStmt()) + ) + or + exists(CommaExpr c | c.getLeftOperand() = expr) + or + exists(ForStmt for | for.getUpdate() = expr) } diff --git a/cpp/ql/test/library-tests/ir/escape/points_to.expected b/cpp/ql/test/library-tests/ir/escape/points_to.expected index e6fefda7bb5..c58d97f7988 100644 --- a/cpp/ql/test/library-tests/ir/escape/points_to.expected +++ b/cpp/ql/test/library-tests/ir/escape/points_to.expected @@ -1,24 +1,14 @@ -| escape.cpp:108:5:108:11 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:109:5:109:13 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:110:5:110:19 | CopyValue | no_result+0:0 | no_result+0:0 | -| escape.cpp:111:5:111:21 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:111:18:111:21 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:114:5:114:8 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:115:5:115:29 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:115:19:115:28 | PointerAdd[4] | no_+0:0 | no_+0:0 | | escape.cpp:115:20:115:23 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:116:5:116:29 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:116:19:116:28 | PointerSub[4] | no_+0:0 | no_+0:0 | | escape.cpp:116:20:116:23 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:117:5:117:27 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:117:19:117:26 | PointerAdd[4] | no_+0:0 | no_+0:0 | | escape.cpp:117:23:117:26 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:118:9:118:12 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:120:12:120:15 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:123:14:123:17 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:124:9:124:12 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:124:15:124:18 | CopyValue | no_+0:0 | no_+0:0 | -| escape.cpp:124:21:124:24 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:127:9:127:12 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:129:12:129:15 | CopyValue | no_+0:0 | no_+0:0 | | escape.cpp:134:5:134:18 | Convert | no_Array+0:0 | no_Array+0:0 | @@ -27,38 +17,31 @@ | escape.cpp:135:5:135:15 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | | escape.cpp:136:5:136:15 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | | escape.cpp:136:7:136:14 | Convert | no_Array+0:0 | no_Array+0:0 | -| escape.cpp:137:5:137:27 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:137:17:137:24 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:137:17:137:27 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | -| escape.cpp:138:5:138:27 | CopyValue | no_result+0:0 | no_result+0:0 | | escape.cpp:138:17:138:27 | PointerAdd[4] | no_Array+20:0 | no_Array+20:0 | | escape.cpp:138:19:138:26 | Convert | no_Array+0:0 | no_Array+0:0 | | escape.cpp:140:21:140:32 | FieldAddress[x] | no_Point+0:0 | no_Point+0:0 | | escape.cpp:140:21:140:32 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | | escape.cpp:140:21:140:32 | FieldAddress[z] | no_Point+8:0 | no_Point+8:0 | | escape.cpp:141:27:141:27 | FieldAddress[x] | no_Point+0:0 | no_Point+0:0 | -| escape.cpp:142:5:142:21 | CopyValue | no_Point+4:0 | no_Point+4:0 | | escape.cpp:142:14:142:14 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | | escape.cpp:143:19:143:27 | CopyValue | no_Point+0:0 | no_Point+0:0 | | escape.cpp:143:31:143:31 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | -| escape.cpp:144:5:144:25 | CopyValue | no_Point+4:0 | no_Point+4:0 | | escape.cpp:144:6:144:14 | CopyValue | no_Point+0:0 | no_Point+0:0 | | escape.cpp:144:18:144:18 | FieldAddress[y] | no_Point+4:0 | no_Point+4:0 | | escape.cpp:145:20:145:30 | CopyValue | no_Point+8:0 | no_Point+8:0 | | escape.cpp:145:30:145:30 | FieldAddress[z] | no_Point+8:0 | no_Point+8:0 | | escape.cpp:146:5:146:18 | CopyValue | no_Point+8:0 | no_Point+8:0 | -| escape.cpp:146:5:146:25 | CopyValue | no_Point+8:0 | no_Point+8:0 | | escape.cpp:146:7:146:17 | CopyValue | no_Point+8:0 | no_Point+8:0 | | escape.cpp:146:17:146:17 | FieldAddress[z] | no_Point+8:0 | no_Point+8:0 | | escape.cpp:149:5:149:14 | ConvertToBase[Derived : Intermediate1] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:149:5:149:14 | ConvertToBase[Intermediate1 : Base] | no_Derived+0:0 | no_Derived+0:0 | -| escape.cpp:149:5:149:20 | CopyValue | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:149:16:149:16 | FieldAddress[b] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:150:18:150:27 | ConvertToBase[Derived : Intermediate1] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:150:18:150:27 | ConvertToBase[Intermediate1 : Base] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:150:29:150:29 | FieldAddress[b] | no_Derived+0:0 | no_Derived+0:0 | | escape.cpp:151:5:151:14 | ConvertToBase[Derived : Intermediate2] | no_Derived+12:0 | no_Derived+12:0 | -| escape.cpp:151:5:151:21 | CopyValue | no_Derived+16:0 | no_Derived+16:0 | | escape.cpp:151:16:151:17 | FieldAddress[i2] | no_Derived+16:0 | no_Derived+16:0 | | escape.cpp:152:19:152:28 | ConvertToBase[Derived : Intermediate2] | no_Derived+12:0 | no_Derived+12:0 | | escape.cpp:152:30:152:31 | FieldAddress[i2] | no_Derived+16:0 | no_Derived+16:0 | @@ -97,9 +80,7 @@ | escape.cpp:217:14:217:16 | CopyValue | c2+0:0 | c2+0:0 | | escape.cpp:221:8:221:19 | Call | none | c3+0:0 | | escape.cpp:225:17:225:28 | Call | none | c4+0:0 | -| escape.cpp:247:2:247:27 | CopyValue | no_condTemp+0:0 | no_condTemp+0:0 | | escape.cpp:247:2:247:27 | Store | condEscape1+0:0 | condEscape1+0:0 | | escape.cpp:247:16:247:27 | CopyValue | condEscape1+0:0 | condEscape1+0:0 | -| escape.cpp:249:9:249:34 | CopyValue | no_condTemp+0:0 | no_condTemp+0:0 | | escape.cpp:249:9:249:34 | Store | condEscape2+0:0 | condEscape2+0:0 | | escape.cpp:249:23:249:34 | CopyValue | condEscape2+0:0 | condEscape2+0:0 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 9c80e889a02..d7c144f7181 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -66,11 +66,10 @@ bad_asts.cpp: #-----| r0_10(error) = Load : &:r0_9, ~mu0_2 # 33| r0_11(glval) = VariableAddress[x] : # 33| mu0_12(int) = Store : &:r0_11, r0_10 -# 33| r0_13(glval) = CopyValue : r0_11 -# 34| v0_14(void) = NoOp : -# 30| v0_15(void) = ReturnVoid : -# 30| v0_16(void) = UnmodeledUse : mu* -# 30| v0_17(void) = ExitFunction : +# 34| v0_13(void) = NoOp : +# 30| v0_14(void) = ReturnVoid : +# 30| v0_15(void) = UnmodeledUse : mu* +# 30| v0_16(void) = ExitFunction : clang.cpp: # 5| int* globalIntAddress() @@ -202,20 +201,18 @@ ir.cpp: # 46| r0_15(short) = Convert : r0_14 # 46| r0_16(glval) = VariableAddress[y] : # 46| mu0_17(short) = Store : &:r0_16, r0_15 -# 46| r0_18(glval) = CopyValue : r0_16 -# 47| r0_19(glval) = VariableAddress[x] : -# 47| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 47| r0_21(glval) = VariableAddress[y] : -# 47| r0_22(short) = Load : &:r0_21, ~mu0_2 -# 47| r0_23(int) = Convert : r0_22 -# 47| r0_24(int) = Mul : r0_20, r0_23 -# 47| r0_25(glval) = VariableAddress[x] : -# 47| mu0_26(int) = Store : &:r0_25, r0_24 -# 47| r0_27(glval) = CopyValue : r0_25 -# 48| v0_28(void) = NoOp : -# 43| v0_29(void) = ReturnVoid : -# 43| v0_30(void) = UnmodeledUse : mu* -# 43| v0_31(void) = ExitFunction : +# 47| r0_18(glval) = VariableAddress[x] : +# 47| r0_19(int) = Load : &:r0_18, ~mu0_2 +# 47| r0_20(glval) = VariableAddress[y] : +# 47| r0_21(short) = Load : &:r0_20, ~mu0_2 +# 47| r0_22(int) = Convert : r0_21 +# 47| r0_23(int) = Mul : r0_19, r0_22 +# 47| r0_24(glval) = VariableAddress[x] : +# 47| mu0_25(int) = Store : &:r0_24, r0_23 +# 48| v0_26(void) = NoOp : +# 43| v0_27(void) = ReturnVoid : +# 43| v0_28(void) = UnmodeledUse : mu* +# 43| v0_29(void) = ExitFunction : # 50| void IntegerOps(int, int) # 50| Block 0 @@ -235,185 +232,160 @@ ir.cpp: # 53| r0_13(int) = Add : r0_10, r0_12 # 53| r0_14(glval) = VariableAddress[z] : # 53| mu0_15(int) = Store : &:r0_14, r0_13 -# 53| r0_16(glval) = CopyValue : r0_14 -# 54| r0_17(glval) = VariableAddress[x] : -# 54| r0_18(int) = Load : &:r0_17, ~mu0_2 -# 54| r0_19(glval) = VariableAddress[y] : -# 54| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 54| r0_21(int) = Sub : r0_18, r0_20 -# 54| r0_22(glval) = VariableAddress[z] : -# 54| mu0_23(int) = Store : &:r0_22, r0_21 -# 54| r0_24(glval) = CopyValue : r0_22 -# 55| r0_25(glval) = VariableAddress[x] : +# 54| r0_16(glval) = VariableAddress[x] : +# 54| r0_17(int) = Load : &:r0_16, ~mu0_2 +# 54| r0_18(glval) = VariableAddress[y] : +# 54| r0_19(int) = Load : &:r0_18, ~mu0_2 +# 54| r0_20(int) = Sub : r0_17, r0_19 +# 54| r0_21(glval) = VariableAddress[z] : +# 54| mu0_22(int) = Store : &:r0_21, r0_20 +# 55| r0_23(glval) = VariableAddress[x] : +# 55| r0_24(int) = Load : &:r0_23, ~mu0_2 +# 55| r0_25(glval) = VariableAddress[y] : # 55| r0_26(int) = Load : &:r0_25, ~mu0_2 -# 55| r0_27(glval) = VariableAddress[y] : -# 55| r0_28(int) = Load : &:r0_27, ~mu0_2 -# 55| r0_29(int) = Mul : r0_26, r0_28 -# 55| r0_30(glval) = VariableAddress[z] : -# 55| mu0_31(int) = Store : &:r0_30, r0_29 -# 55| r0_32(glval) = CopyValue : r0_30 -# 56| r0_33(glval) = VariableAddress[x] : -# 56| r0_34(int) = Load : &:r0_33, ~mu0_2 -# 56| r0_35(glval) = VariableAddress[y] : -# 56| r0_36(int) = Load : &:r0_35, ~mu0_2 -# 56| r0_37(int) = Div : r0_34, r0_36 -# 56| r0_38(glval) = VariableAddress[z] : -# 56| mu0_39(int) = Store : &:r0_38, r0_37 -# 56| r0_40(glval) = CopyValue : r0_38 -# 57| r0_41(glval) = VariableAddress[x] : -# 57| r0_42(int) = Load : &:r0_41, ~mu0_2 -# 57| r0_43(glval) = VariableAddress[y] : -# 57| r0_44(int) = Load : &:r0_43, ~mu0_2 -# 57| r0_45(int) = Rem : r0_42, r0_44 -# 57| r0_46(glval) = VariableAddress[z] : -# 57| mu0_47(int) = Store : &:r0_46, r0_45 -# 57| r0_48(glval) = CopyValue : r0_46 -# 59| r0_49(glval) = VariableAddress[x] : -# 59| r0_50(int) = Load : &:r0_49, ~mu0_2 -# 59| r0_51(glval) = VariableAddress[y] : -# 59| r0_52(int) = Load : &:r0_51, ~mu0_2 -# 59| r0_53(int) = BitAnd : r0_50, r0_52 -# 59| r0_54(glval) = VariableAddress[z] : -# 59| mu0_55(int) = Store : &:r0_54, r0_53 -# 59| r0_56(glval) = CopyValue : r0_54 -# 60| r0_57(glval) = VariableAddress[x] : -# 60| r0_58(int) = Load : &:r0_57, ~mu0_2 -# 60| r0_59(glval) = VariableAddress[y] : -# 60| r0_60(int) = Load : &:r0_59, ~mu0_2 -# 60| r0_61(int) = BitOr : r0_58, r0_60 -# 60| r0_62(glval) = VariableAddress[z] : -# 60| mu0_63(int) = Store : &:r0_62, r0_61 -# 60| r0_64(glval) = CopyValue : r0_62 -# 61| r0_65(glval) = VariableAddress[x] : -# 61| r0_66(int) = Load : &:r0_65, ~mu0_2 -# 61| r0_67(glval) = VariableAddress[y] : -# 61| r0_68(int) = Load : &:r0_67, ~mu0_2 -# 61| r0_69(int) = BitXor : r0_66, r0_68 -# 61| r0_70(glval) = VariableAddress[z] : -# 61| mu0_71(int) = Store : &:r0_70, r0_69 -# 61| r0_72(glval) = CopyValue : r0_70 -# 63| r0_73(glval) = VariableAddress[x] : -# 63| r0_74(int) = Load : &:r0_73, ~mu0_2 -# 63| r0_75(glval) = VariableAddress[y] : -# 63| r0_76(int) = Load : &:r0_75, ~mu0_2 -# 63| r0_77(int) = ShiftLeft : r0_74, r0_76 -# 63| r0_78(glval) = VariableAddress[z] : -# 63| mu0_79(int) = Store : &:r0_78, r0_77 -# 63| r0_80(glval) = CopyValue : r0_78 -# 64| r0_81(glval) = VariableAddress[x] : -# 64| r0_82(int) = Load : &:r0_81, ~mu0_2 -# 64| r0_83(glval) = VariableAddress[y] : -# 64| r0_84(int) = Load : &:r0_83, ~mu0_2 -# 64| r0_85(int) = ShiftRight : r0_82, r0_84 -# 64| r0_86(glval) = VariableAddress[z] : -# 64| mu0_87(int) = Store : &:r0_86, r0_85 -# 64| r0_88(glval) = CopyValue : r0_86 -# 66| r0_89(glval) = VariableAddress[x] : -# 66| r0_90(int) = Load : &:r0_89, ~mu0_2 -# 66| r0_91(glval) = VariableAddress[z] : -# 66| mu0_92(int) = Store : &:r0_91, r0_90 -# 66| r0_93(glval) = CopyValue : r0_91 -# 68| r0_94(glval) = VariableAddress[x] : -# 68| r0_95(int) = Load : &:r0_94, ~mu0_2 -# 68| r0_96(glval) = VariableAddress[z] : -# 68| r0_97(int) = Load : &:r0_96, ~mu0_2 -# 68| r0_98(int) = Add : r0_97, r0_95 -# 68| mu0_99(int) = Store : &:r0_96, r0_98 -# 68| r0_100(glval) = CopyValue : r0_96 -# 69| r0_101(glval) = VariableAddress[x] : -# 69| r0_102(int) = Load : &:r0_101, ~mu0_2 -# 69| r0_103(glval) = VariableAddress[z] : -# 69| r0_104(int) = Load : &:r0_103, ~mu0_2 -# 69| r0_105(int) = Sub : r0_104, r0_102 -# 69| mu0_106(int) = Store : &:r0_103, r0_105 -# 69| r0_107(glval) = CopyValue : r0_103 -# 70| r0_108(glval) = VariableAddress[x] : -# 70| r0_109(int) = Load : &:r0_108, ~mu0_2 -# 70| r0_110(glval) = VariableAddress[z] : -# 70| r0_111(int) = Load : &:r0_110, ~mu0_2 -# 70| r0_112(int) = Mul : r0_111, r0_109 -# 70| mu0_113(int) = Store : &:r0_110, r0_112 -# 70| r0_114(glval) = CopyValue : r0_110 -# 71| r0_115(glval) = VariableAddress[x] : -# 71| r0_116(int) = Load : &:r0_115, ~mu0_2 -# 71| r0_117(glval) = VariableAddress[z] : -# 71| r0_118(int) = Load : &:r0_117, ~mu0_2 -# 71| r0_119(int) = Div : r0_118, r0_116 -# 71| mu0_120(int) = Store : &:r0_117, r0_119 -# 71| r0_121(glval) = CopyValue : r0_117 -# 72| r0_122(glval) = VariableAddress[x] : -# 72| r0_123(int) = Load : &:r0_122, ~mu0_2 -# 72| r0_124(glval) = VariableAddress[z] : -# 72| r0_125(int) = Load : &:r0_124, ~mu0_2 -# 72| r0_126(int) = Rem : r0_125, r0_123 -# 72| mu0_127(int) = Store : &:r0_124, r0_126 -# 72| r0_128(glval) = CopyValue : r0_124 -# 74| r0_129(glval) = VariableAddress[x] : -# 74| r0_130(int) = Load : &:r0_129, ~mu0_2 -# 74| r0_131(glval) = VariableAddress[z] : -# 74| r0_132(int) = Load : &:r0_131, ~mu0_2 -# 74| r0_133(int) = BitAnd : r0_132, r0_130 -# 74| mu0_134(int) = Store : &:r0_131, r0_133 -# 74| r0_135(glval) = CopyValue : r0_131 -# 75| r0_136(glval) = VariableAddress[x] : -# 75| r0_137(int) = Load : &:r0_136, ~mu0_2 -# 75| r0_138(glval) = VariableAddress[z] : -# 75| r0_139(int) = Load : &:r0_138, ~mu0_2 -# 75| r0_140(int) = BitOr : r0_139, r0_137 -# 75| mu0_141(int) = Store : &:r0_138, r0_140 -# 75| r0_142(glval) = CopyValue : r0_138 -# 76| r0_143(glval) = VariableAddress[x] : -# 76| r0_144(int) = Load : &:r0_143, ~mu0_2 -# 76| r0_145(glval) = VariableAddress[z] : -# 76| r0_146(int) = Load : &:r0_145, ~mu0_2 -# 76| r0_147(int) = BitXor : r0_146, r0_144 -# 76| mu0_148(int) = Store : &:r0_145, r0_147 -# 76| r0_149(glval) = CopyValue : r0_145 -# 78| r0_150(glval) = VariableAddress[x] : -# 78| r0_151(int) = Load : &:r0_150, ~mu0_2 -# 78| r0_152(glval) = VariableAddress[z] : -# 78| r0_153(int) = Load : &:r0_152, ~mu0_2 -# 78| r0_154(int) = ShiftLeft : r0_153, r0_151 -# 78| mu0_155(int) = Store : &:r0_152, r0_154 -# 78| r0_156(glval) = CopyValue : r0_152 -# 79| r0_157(glval) = VariableAddress[x] : -# 79| r0_158(int) = Load : &:r0_157, ~mu0_2 -# 79| r0_159(glval) = VariableAddress[z] : -# 79| r0_160(int) = Load : &:r0_159, ~mu0_2 -# 79| r0_161(int) = ShiftRight : r0_160, r0_158 -# 79| mu0_162(int) = Store : &:r0_159, r0_161 -# 79| r0_163(glval) = CopyValue : r0_159 -# 81| r0_164(glval) = VariableAddress[x] : -# 81| r0_165(int) = Load : &:r0_164, ~mu0_2 -# 81| r0_166(int) = CopyValue : r0_165 -# 81| r0_167(glval) = VariableAddress[z] : -# 81| mu0_168(int) = Store : &:r0_167, r0_166 -# 81| r0_169(glval) = CopyValue : r0_167 -# 82| r0_170(glval) = VariableAddress[x] : -# 82| r0_171(int) = Load : &:r0_170, ~mu0_2 -# 82| r0_172(int) = Negate : r0_171 -# 82| r0_173(glval) = VariableAddress[z] : -# 82| mu0_174(int) = Store : &:r0_173, r0_172 -# 82| r0_175(glval) = CopyValue : r0_173 -# 83| r0_176(glval) = VariableAddress[x] : -# 83| r0_177(int) = Load : &:r0_176, ~mu0_2 -# 83| r0_178(int) = BitComplement : r0_177 -# 83| r0_179(glval) = VariableAddress[z] : -# 83| mu0_180(int) = Store : &:r0_179, r0_178 -# 83| r0_181(glval) = CopyValue : r0_179 -# 84| r0_182(glval) = VariableAddress[x] : -# 84| r0_183(int) = Load : &:r0_182, ~mu0_2 -# 84| r0_184(int) = Constant[0] : -# 84| r0_185(bool) = CompareNE : r0_183, r0_184 -# 84| r0_186(bool) = LogicalNot : r0_185 -# 84| r0_187(int) = Convert : r0_186 -# 84| r0_188(glval) = VariableAddress[z] : -# 84| mu0_189(int) = Store : &:r0_188, r0_187 -# 84| r0_190(glval) = CopyValue : r0_188 -# 85| v0_191(void) = NoOp : -# 50| v0_192(void) = ReturnVoid : -# 50| v0_193(void) = UnmodeledUse : mu* -# 50| v0_194(void) = ExitFunction : +# 55| r0_27(int) = Mul : r0_24, r0_26 +# 55| r0_28(glval) = VariableAddress[z] : +# 55| mu0_29(int) = Store : &:r0_28, r0_27 +# 56| r0_30(glval) = VariableAddress[x] : +# 56| r0_31(int) = Load : &:r0_30, ~mu0_2 +# 56| r0_32(glval) = VariableAddress[y] : +# 56| r0_33(int) = Load : &:r0_32, ~mu0_2 +# 56| r0_34(int) = Div : r0_31, r0_33 +# 56| r0_35(glval) = VariableAddress[z] : +# 56| mu0_36(int) = Store : &:r0_35, r0_34 +# 57| r0_37(glval) = VariableAddress[x] : +# 57| r0_38(int) = Load : &:r0_37, ~mu0_2 +# 57| r0_39(glval) = VariableAddress[y] : +# 57| r0_40(int) = Load : &:r0_39, ~mu0_2 +# 57| r0_41(int) = Rem : r0_38, r0_40 +# 57| r0_42(glval) = VariableAddress[z] : +# 57| mu0_43(int) = Store : &:r0_42, r0_41 +# 59| r0_44(glval) = VariableAddress[x] : +# 59| r0_45(int) = Load : &:r0_44, ~mu0_2 +# 59| r0_46(glval) = VariableAddress[y] : +# 59| r0_47(int) = Load : &:r0_46, ~mu0_2 +# 59| r0_48(int) = BitAnd : r0_45, r0_47 +# 59| r0_49(glval) = VariableAddress[z] : +# 59| mu0_50(int) = Store : &:r0_49, r0_48 +# 60| r0_51(glval) = VariableAddress[x] : +# 60| r0_52(int) = Load : &:r0_51, ~mu0_2 +# 60| r0_53(glval) = VariableAddress[y] : +# 60| r0_54(int) = Load : &:r0_53, ~mu0_2 +# 60| r0_55(int) = BitOr : r0_52, r0_54 +# 60| r0_56(glval) = VariableAddress[z] : +# 60| mu0_57(int) = Store : &:r0_56, r0_55 +# 61| r0_58(glval) = VariableAddress[x] : +# 61| r0_59(int) = Load : &:r0_58, ~mu0_2 +# 61| r0_60(glval) = VariableAddress[y] : +# 61| r0_61(int) = Load : &:r0_60, ~mu0_2 +# 61| r0_62(int) = BitXor : r0_59, r0_61 +# 61| r0_63(glval) = VariableAddress[z] : +# 61| mu0_64(int) = Store : &:r0_63, r0_62 +# 63| r0_65(glval) = VariableAddress[x] : +# 63| r0_66(int) = Load : &:r0_65, ~mu0_2 +# 63| r0_67(glval) = VariableAddress[y] : +# 63| r0_68(int) = Load : &:r0_67, ~mu0_2 +# 63| r0_69(int) = ShiftLeft : r0_66, r0_68 +# 63| r0_70(glval) = VariableAddress[z] : +# 63| mu0_71(int) = Store : &:r0_70, r0_69 +# 64| r0_72(glval) = VariableAddress[x] : +# 64| r0_73(int) = Load : &:r0_72, ~mu0_2 +# 64| r0_74(glval) = VariableAddress[y] : +# 64| r0_75(int) = Load : &:r0_74, ~mu0_2 +# 64| r0_76(int) = ShiftRight : r0_73, r0_75 +# 64| r0_77(glval) = VariableAddress[z] : +# 64| mu0_78(int) = Store : &:r0_77, r0_76 +# 66| r0_79(glval) = VariableAddress[x] : +# 66| r0_80(int) = Load : &:r0_79, ~mu0_2 +# 66| r0_81(glval) = VariableAddress[z] : +# 66| mu0_82(int) = Store : &:r0_81, r0_80 +# 68| r0_83(glval) = VariableAddress[x] : +# 68| r0_84(int) = Load : &:r0_83, ~mu0_2 +# 68| r0_85(glval) = VariableAddress[z] : +# 68| r0_86(int) = Load : &:r0_85, ~mu0_2 +# 68| r0_87(int) = Add : r0_86, r0_84 +# 68| mu0_88(int) = Store : &:r0_85, r0_87 +# 69| r0_89(glval) = VariableAddress[x] : +# 69| r0_90(int) = Load : &:r0_89, ~mu0_2 +# 69| r0_91(glval) = VariableAddress[z] : +# 69| r0_92(int) = Load : &:r0_91, ~mu0_2 +# 69| r0_93(int) = Sub : r0_92, r0_90 +# 69| mu0_94(int) = Store : &:r0_91, r0_93 +# 70| r0_95(glval) = VariableAddress[x] : +# 70| r0_96(int) = Load : &:r0_95, ~mu0_2 +# 70| r0_97(glval) = VariableAddress[z] : +# 70| r0_98(int) = Load : &:r0_97, ~mu0_2 +# 70| r0_99(int) = Mul : r0_98, r0_96 +# 70| mu0_100(int) = Store : &:r0_97, r0_99 +# 71| r0_101(glval) = VariableAddress[x] : +# 71| r0_102(int) = Load : &:r0_101, ~mu0_2 +# 71| r0_103(glval) = VariableAddress[z] : +# 71| r0_104(int) = Load : &:r0_103, ~mu0_2 +# 71| r0_105(int) = Div : r0_104, r0_102 +# 71| mu0_106(int) = Store : &:r0_103, r0_105 +# 72| r0_107(glval) = VariableAddress[x] : +# 72| r0_108(int) = Load : &:r0_107, ~mu0_2 +# 72| r0_109(glval) = VariableAddress[z] : +# 72| r0_110(int) = Load : &:r0_109, ~mu0_2 +# 72| r0_111(int) = Rem : r0_110, r0_108 +# 72| mu0_112(int) = Store : &:r0_109, r0_111 +# 74| r0_113(glval) = VariableAddress[x] : +# 74| r0_114(int) = Load : &:r0_113, ~mu0_2 +# 74| r0_115(glval) = VariableAddress[z] : +# 74| r0_116(int) = Load : &:r0_115, ~mu0_2 +# 74| r0_117(int) = BitAnd : r0_116, r0_114 +# 74| mu0_118(int) = Store : &:r0_115, r0_117 +# 75| r0_119(glval) = VariableAddress[x] : +# 75| r0_120(int) = Load : &:r0_119, ~mu0_2 +# 75| r0_121(glval) = VariableAddress[z] : +# 75| r0_122(int) = Load : &:r0_121, ~mu0_2 +# 75| r0_123(int) = BitOr : r0_122, r0_120 +# 75| mu0_124(int) = Store : &:r0_121, r0_123 +# 76| r0_125(glval) = VariableAddress[x] : +# 76| r0_126(int) = Load : &:r0_125, ~mu0_2 +# 76| r0_127(glval) = VariableAddress[z] : +# 76| r0_128(int) = Load : &:r0_127, ~mu0_2 +# 76| r0_129(int) = BitXor : r0_128, r0_126 +# 76| mu0_130(int) = Store : &:r0_127, r0_129 +# 78| r0_131(glval) = VariableAddress[x] : +# 78| r0_132(int) = Load : &:r0_131, ~mu0_2 +# 78| r0_133(glval) = VariableAddress[z] : +# 78| r0_134(int) = Load : &:r0_133, ~mu0_2 +# 78| r0_135(int) = ShiftLeft : r0_134, r0_132 +# 78| mu0_136(int) = Store : &:r0_133, r0_135 +# 79| r0_137(glval) = VariableAddress[x] : +# 79| r0_138(int) = Load : &:r0_137, ~mu0_2 +# 79| r0_139(glval) = VariableAddress[z] : +# 79| r0_140(int) = Load : &:r0_139, ~mu0_2 +# 79| r0_141(int) = ShiftRight : r0_140, r0_138 +# 79| mu0_142(int) = Store : &:r0_139, r0_141 +# 81| r0_143(glval) = VariableAddress[x] : +# 81| r0_144(int) = Load : &:r0_143, ~mu0_2 +# 81| r0_145(int) = CopyValue : r0_144 +# 81| r0_146(glval) = VariableAddress[z] : +# 81| mu0_147(int) = Store : &:r0_146, r0_145 +# 82| r0_148(glval) = VariableAddress[x] : +# 82| r0_149(int) = Load : &:r0_148, ~mu0_2 +# 82| r0_150(int) = Negate : r0_149 +# 82| r0_151(glval) = VariableAddress[z] : +# 82| mu0_152(int) = Store : &:r0_151, r0_150 +# 83| r0_153(glval) = VariableAddress[x] : +# 83| r0_154(int) = Load : &:r0_153, ~mu0_2 +# 83| r0_155(int) = BitComplement : r0_154 +# 83| r0_156(glval) = VariableAddress[z] : +# 83| mu0_157(int) = Store : &:r0_156, r0_155 +# 84| r0_158(glval) = VariableAddress[x] : +# 84| r0_159(int) = Load : &:r0_158, ~mu0_2 +# 84| r0_160(int) = Constant[0] : +# 84| r0_161(bool) = CompareNE : r0_159, r0_160 +# 84| r0_162(bool) = LogicalNot : r0_161 +# 84| r0_163(int) = Convert : r0_162 +# 84| r0_164(glval) = VariableAddress[z] : +# 84| mu0_165(int) = Store : &:r0_164, r0_163 +# 85| v0_166(void) = NoOp : +# 50| v0_167(void) = ReturnVoid : +# 50| v0_168(void) = UnmodeledUse : mu* +# 50| v0_169(void) = ExitFunction : # 87| void IntegerCompare(int, int) # 87| Block 0 @@ -433,51 +405,45 @@ ir.cpp: # 90| r0_13(bool) = CompareEQ : r0_10, r0_12 # 90| r0_14(glval) = VariableAddress[b] : # 90| mu0_15(bool) = Store : &:r0_14, r0_13 -# 90| r0_16(glval) = CopyValue : r0_14 -# 91| r0_17(glval) = VariableAddress[x] : -# 91| r0_18(int) = Load : &:r0_17, ~mu0_2 -# 91| r0_19(glval) = VariableAddress[y] : -# 91| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 91| r0_21(bool) = CompareNE : r0_18, r0_20 -# 91| r0_22(glval) = VariableAddress[b] : -# 91| mu0_23(bool) = Store : &:r0_22, r0_21 -# 91| r0_24(glval) = CopyValue : r0_22 -# 92| r0_25(glval) = VariableAddress[x] : +# 91| r0_16(glval) = VariableAddress[x] : +# 91| r0_17(int) = Load : &:r0_16, ~mu0_2 +# 91| r0_18(glval) = VariableAddress[y] : +# 91| r0_19(int) = Load : &:r0_18, ~mu0_2 +# 91| r0_20(bool) = CompareNE : r0_17, r0_19 +# 91| r0_21(glval) = VariableAddress[b] : +# 91| mu0_22(bool) = Store : &:r0_21, r0_20 +# 92| r0_23(glval) = VariableAddress[x] : +# 92| r0_24(int) = Load : &:r0_23, ~mu0_2 +# 92| r0_25(glval) = VariableAddress[y] : # 92| r0_26(int) = Load : &:r0_25, ~mu0_2 -# 92| r0_27(glval) = VariableAddress[y] : -# 92| r0_28(int) = Load : &:r0_27, ~mu0_2 -# 92| r0_29(bool) = CompareLT : r0_26, r0_28 -# 92| r0_30(glval) = VariableAddress[b] : -# 92| mu0_31(bool) = Store : &:r0_30, r0_29 -# 92| r0_32(glval) = CopyValue : r0_30 -# 93| r0_33(glval) = VariableAddress[x] : -# 93| r0_34(int) = Load : &:r0_33, ~mu0_2 -# 93| r0_35(glval) = VariableAddress[y] : -# 93| r0_36(int) = Load : &:r0_35, ~mu0_2 -# 93| r0_37(bool) = CompareGT : r0_34, r0_36 -# 93| r0_38(glval) = VariableAddress[b] : -# 93| mu0_39(bool) = Store : &:r0_38, r0_37 -# 93| r0_40(glval) = CopyValue : r0_38 -# 94| r0_41(glval) = VariableAddress[x] : -# 94| r0_42(int) = Load : &:r0_41, ~mu0_2 -# 94| r0_43(glval) = VariableAddress[y] : -# 94| r0_44(int) = Load : &:r0_43, ~mu0_2 -# 94| r0_45(bool) = CompareLE : r0_42, r0_44 -# 94| r0_46(glval) = VariableAddress[b] : -# 94| mu0_47(bool) = Store : &:r0_46, r0_45 -# 94| r0_48(glval) = CopyValue : r0_46 -# 95| r0_49(glval) = VariableAddress[x] : -# 95| r0_50(int) = Load : &:r0_49, ~mu0_2 -# 95| r0_51(glval) = VariableAddress[y] : -# 95| r0_52(int) = Load : &:r0_51, ~mu0_2 -# 95| r0_53(bool) = CompareGE : r0_50, r0_52 -# 95| r0_54(glval) = VariableAddress[b] : -# 95| mu0_55(bool) = Store : &:r0_54, r0_53 -# 95| r0_56(glval) = CopyValue : r0_54 -# 96| v0_57(void) = NoOp : -# 87| v0_58(void) = ReturnVoid : -# 87| v0_59(void) = UnmodeledUse : mu* -# 87| v0_60(void) = ExitFunction : +# 92| r0_27(bool) = CompareLT : r0_24, r0_26 +# 92| r0_28(glval) = VariableAddress[b] : +# 92| mu0_29(bool) = Store : &:r0_28, r0_27 +# 93| r0_30(glval) = VariableAddress[x] : +# 93| r0_31(int) = Load : &:r0_30, ~mu0_2 +# 93| r0_32(glval) = VariableAddress[y] : +# 93| r0_33(int) = Load : &:r0_32, ~mu0_2 +# 93| r0_34(bool) = CompareGT : r0_31, r0_33 +# 93| r0_35(glval) = VariableAddress[b] : +# 93| mu0_36(bool) = Store : &:r0_35, r0_34 +# 94| r0_37(glval) = VariableAddress[x] : +# 94| r0_38(int) = Load : &:r0_37, ~mu0_2 +# 94| r0_39(glval) = VariableAddress[y] : +# 94| r0_40(int) = Load : &:r0_39, ~mu0_2 +# 94| r0_41(bool) = CompareLE : r0_38, r0_40 +# 94| r0_42(glval) = VariableAddress[b] : +# 94| mu0_43(bool) = Store : &:r0_42, r0_41 +# 95| r0_44(glval) = VariableAddress[x] : +# 95| r0_45(int) = Load : &:r0_44, ~mu0_2 +# 95| r0_46(glval) = VariableAddress[y] : +# 95| r0_47(int) = Load : &:r0_46, ~mu0_2 +# 95| r0_48(bool) = CompareGE : r0_45, r0_47 +# 95| r0_49(glval) = VariableAddress[b] : +# 95| mu0_50(bool) = Store : &:r0_49, r0_48 +# 96| v0_51(void) = NoOp : +# 87| v0_52(void) = ReturnVoid : +# 87| v0_53(void) = UnmodeledUse : mu* +# 87| v0_54(void) = ExitFunction : # 98| void IntegerCrement(int) # 98| Block 0 @@ -495,35 +461,31 @@ ir.cpp: # 101| mu0_11(int) = Store : &:r0_7, r0_10 # 101| r0_12(glval) = VariableAddress[y] : # 101| mu0_13(int) = Store : &:r0_12, r0_10 -# 101| r0_14(glval) = CopyValue : r0_12 -# 102| r0_15(glval) = VariableAddress[x] : -# 102| r0_16(int) = Load : &:r0_15, ~mu0_2 -# 102| r0_17(int) = Constant[1] : -# 102| r0_18(int) = Sub : r0_16, r0_17 -# 102| mu0_19(int) = Store : &:r0_15, r0_18 -# 102| r0_20(glval) = VariableAddress[y] : -# 102| mu0_21(int) = Store : &:r0_20, r0_18 -# 102| r0_22(glval) = CopyValue : r0_20 -# 103| r0_23(glval) = VariableAddress[x] : -# 103| r0_24(int) = Load : &:r0_23, ~mu0_2 -# 103| r0_25(int) = Constant[1] : -# 103| r0_26(int) = Add : r0_24, r0_25 -# 103| mu0_27(int) = Store : &:r0_23, r0_26 -# 103| r0_28(glval) = VariableAddress[y] : -# 103| mu0_29(int) = Store : &:r0_28, r0_24 -# 103| r0_30(glval) = CopyValue : r0_28 -# 104| r0_31(glval) = VariableAddress[x] : -# 104| r0_32(int) = Load : &:r0_31, ~mu0_2 -# 104| r0_33(int) = Constant[1] : -# 104| r0_34(int) = Sub : r0_32, r0_33 -# 104| mu0_35(int) = Store : &:r0_31, r0_34 -# 104| r0_36(glval) = VariableAddress[y] : -# 104| mu0_37(int) = Store : &:r0_36, r0_32 -# 104| r0_38(glval) = CopyValue : r0_36 -# 105| v0_39(void) = NoOp : -# 98| v0_40(void) = ReturnVoid : -# 98| v0_41(void) = UnmodeledUse : mu* -# 98| v0_42(void) = ExitFunction : +# 102| r0_14(glval) = VariableAddress[x] : +# 102| r0_15(int) = Load : &:r0_14, ~mu0_2 +# 102| r0_16(int) = Constant[1] : +# 102| r0_17(int) = Sub : r0_15, r0_16 +# 102| mu0_18(int) = Store : &:r0_14, r0_17 +# 102| r0_19(glval) = VariableAddress[y] : +# 102| mu0_20(int) = Store : &:r0_19, r0_17 +# 103| r0_21(glval) = VariableAddress[x] : +# 103| r0_22(int) = Load : &:r0_21, ~mu0_2 +# 103| r0_23(int) = Constant[1] : +# 103| r0_24(int) = Add : r0_22, r0_23 +# 103| mu0_25(int) = Store : &:r0_21, r0_24 +# 103| r0_26(glval) = VariableAddress[y] : +# 103| mu0_27(int) = Store : &:r0_26, r0_22 +# 104| r0_28(glval) = VariableAddress[x] : +# 104| r0_29(int) = Load : &:r0_28, ~mu0_2 +# 104| r0_30(int) = Constant[1] : +# 104| r0_31(int) = Sub : r0_29, r0_30 +# 104| mu0_32(int) = Store : &:r0_28, r0_31 +# 104| r0_33(glval) = VariableAddress[y] : +# 104| mu0_34(int) = Store : &:r0_33, r0_29 +# 105| v0_35(void) = NoOp : +# 98| v0_36(void) = ReturnVoid : +# 98| v0_37(void) = UnmodeledUse : mu* +# 98| v0_38(void) = ExitFunction : # 107| void IntegerCrement_LValue(int) # 107| Block 0 @@ -543,21 +505,19 @@ ir.cpp: # 110| r0_13(int *) = CopyValue : r0_12 # 110| r0_14(glval) = VariableAddress[p] : # 110| mu0_15(int *) = Store : &:r0_14, r0_13 -# 110| r0_16(glval) = CopyValue : r0_14 -# 111| r0_17(glval) = VariableAddress[x] : -# 111| r0_18(int) = Load : &:r0_17, ~mu0_2 -# 111| r0_19(int) = Constant[1] : -# 111| r0_20(int) = Sub : r0_18, r0_19 -# 111| mu0_21(int) = Store : &:r0_17, r0_20 -# 111| r0_22(glval) = CopyValue : r0_17 -# 111| r0_23(int *) = CopyValue : r0_22 -# 111| r0_24(glval) = VariableAddress[p] : -# 111| mu0_25(int *) = Store : &:r0_24, r0_23 -# 111| r0_26(glval) = CopyValue : r0_24 -# 112| v0_27(void) = NoOp : -# 107| v0_28(void) = ReturnVoid : -# 107| v0_29(void) = UnmodeledUse : mu* -# 107| v0_30(void) = ExitFunction : +# 111| r0_16(glval) = VariableAddress[x] : +# 111| r0_17(int) = Load : &:r0_16, ~mu0_2 +# 111| r0_18(int) = Constant[1] : +# 111| r0_19(int) = Sub : r0_17, r0_18 +# 111| mu0_20(int) = Store : &:r0_16, r0_19 +# 111| r0_21(glval) = CopyValue : r0_16 +# 111| r0_22(int *) = CopyValue : r0_21 +# 111| r0_23(glval) = VariableAddress[p] : +# 111| mu0_24(int *) = Store : &:r0_23, r0_22 +# 112| v0_25(void) = NoOp : +# 107| v0_26(void) = ReturnVoid : +# 107| v0_27(void) = UnmodeledUse : mu* +# 107| v0_28(void) = ExitFunction : # 114| void FloatOps(double, double) # 114| Block 0 @@ -577,80 +537,69 @@ ir.cpp: # 117| r0_13(double) = Add : r0_10, r0_12 # 117| r0_14(glval) = VariableAddress[z] : # 117| mu0_15(double) = Store : &:r0_14, r0_13 -# 117| r0_16(glval) = CopyValue : r0_14 -# 118| r0_17(glval) = VariableAddress[x] : -# 118| r0_18(double) = Load : &:r0_17, ~mu0_2 -# 118| r0_19(glval) = VariableAddress[y] : -# 118| r0_20(double) = Load : &:r0_19, ~mu0_2 -# 118| r0_21(double) = Sub : r0_18, r0_20 -# 118| r0_22(glval) = VariableAddress[z] : -# 118| mu0_23(double) = Store : &:r0_22, r0_21 -# 118| r0_24(glval) = CopyValue : r0_22 -# 119| r0_25(glval) = VariableAddress[x] : +# 118| r0_16(glval) = VariableAddress[x] : +# 118| r0_17(double) = Load : &:r0_16, ~mu0_2 +# 118| r0_18(glval) = VariableAddress[y] : +# 118| r0_19(double) = Load : &:r0_18, ~mu0_2 +# 118| r0_20(double) = Sub : r0_17, r0_19 +# 118| r0_21(glval) = VariableAddress[z] : +# 118| mu0_22(double) = Store : &:r0_21, r0_20 +# 119| r0_23(glval) = VariableAddress[x] : +# 119| r0_24(double) = Load : &:r0_23, ~mu0_2 +# 119| r0_25(glval) = VariableAddress[y] : # 119| r0_26(double) = Load : &:r0_25, ~mu0_2 -# 119| r0_27(glval) = VariableAddress[y] : -# 119| r0_28(double) = Load : &:r0_27, ~mu0_2 -# 119| r0_29(double) = Mul : r0_26, r0_28 -# 119| r0_30(glval) = VariableAddress[z] : -# 119| mu0_31(double) = Store : &:r0_30, r0_29 -# 119| r0_32(glval) = CopyValue : r0_30 -# 120| r0_33(glval) = VariableAddress[x] : -# 120| r0_34(double) = Load : &:r0_33, ~mu0_2 -# 120| r0_35(glval) = VariableAddress[y] : -# 120| r0_36(double) = Load : &:r0_35, ~mu0_2 -# 120| r0_37(double) = Div : r0_34, r0_36 -# 120| r0_38(glval) = VariableAddress[z] : -# 120| mu0_39(double) = Store : &:r0_38, r0_37 -# 120| r0_40(glval) = CopyValue : r0_38 -# 122| r0_41(glval) = VariableAddress[x] : -# 122| r0_42(double) = Load : &:r0_41, ~mu0_2 -# 122| r0_43(glval) = VariableAddress[z] : -# 122| mu0_44(double) = Store : &:r0_43, r0_42 -# 122| r0_45(glval) = CopyValue : r0_43 -# 124| r0_46(glval) = VariableAddress[x] : -# 124| r0_47(double) = Load : &:r0_46, ~mu0_2 -# 124| r0_48(glval) = VariableAddress[z] : -# 124| r0_49(double) = Load : &:r0_48, ~mu0_2 -# 124| r0_50(double) = Add : r0_49, r0_47 -# 124| mu0_51(double) = Store : &:r0_48, r0_50 -# 124| r0_52(glval) = CopyValue : r0_48 -# 125| r0_53(glval) = VariableAddress[x] : -# 125| r0_54(double) = Load : &:r0_53, ~mu0_2 -# 125| r0_55(glval) = VariableAddress[z] : -# 125| r0_56(double) = Load : &:r0_55, ~mu0_2 -# 125| r0_57(double) = Sub : r0_56, r0_54 -# 125| mu0_58(double) = Store : &:r0_55, r0_57 -# 125| r0_59(glval) = CopyValue : r0_55 -# 126| r0_60(glval) = VariableAddress[x] : -# 126| r0_61(double) = Load : &:r0_60, ~mu0_2 -# 126| r0_62(glval) = VariableAddress[z] : -# 126| r0_63(double) = Load : &:r0_62, ~mu0_2 -# 126| r0_64(double) = Mul : r0_63, r0_61 -# 126| mu0_65(double) = Store : &:r0_62, r0_64 -# 126| r0_66(glval) = CopyValue : r0_62 -# 127| r0_67(glval) = VariableAddress[x] : -# 127| r0_68(double) = Load : &:r0_67, ~mu0_2 -# 127| r0_69(glval) = VariableAddress[z] : -# 127| r0_70(double) = Load : &:r0_69, ~mu0_2 -# 127| r0_71(double) = Div : r0_70, r0_68 -# 127| mu0_72(double) = Store : &:r0_69, r0_71 -# 127| r0_73(glval) = CopyValue : r0_69 -# 129| r0_74(glval) = VariableAddress[x] : -# 129| r0_75(double) = Load : &:r0_74, ~mu0_2 -# 129| r0_76(double) = CopyValue : r0_75 -# 129| r0_77(glval) = VariableAddress[z] : -# 129| mu0_78(double) = Store : &:r0_77, r0_76 -# 129| r0_79(glval) = CopyValue : r0_77 -# 130| r0_80(glval) = VariableAddress[x] : -# 130| r0_81(double) = Load : &:r0_80, ~mu0_2 -# 130| r0_82(double) = Negate : r0_81 -# 130| r0_83(glval) = VariableAddress[z] : -# 130| mu0_84(double) = Store : &:r0_83, r0_82 -# 130| r0_85(glval) = CopyValue : r0_83 -# 131| v0_86(void) = NoOp : -# 114| v0_87(void) = ReturnVoid : -# 114| v0_88(void) = UnmodeledUse : mu* -# 114| v0_89(void) = ExitFunction : +# 119| r0_27(double) = Mul : r0_24, r0_26 +# 119| r0_28(glval) = VariableAddress[z] : +# 119| mu0_29(double) = Store : &:r0_28, r0_27 +# 120| r0_30(glval) = VariableAddress[x] : +# 120| r0_31(double) = Load : &:r0_30, ~mu0_2 +# 120| r0_32(glval) = VariableAddress[y] : +# 120| r0_33(double) = Load : &:r0_32, ~mu0_2 +# 120| r0_34(double) = Div : r0_31, r0_33 +# 120| r0_35(glval) = VariableAddress[z] : +# 120| mu0_36(double) = Store : &:r0_35, r0_34 +# 122| r0_37(glval) = VariableAddress[x] : +# 122| r0_38(double) = Load : &:r0_37, ~mu0_2 +# 122| r0_39(glval) = VariableAddress[z] : +# 122| mu0_40(double) = Store : &:r0_39, r0_38 +# 124| r0_41(glval) = VariableAddress[x] : +# 124| r0_42(double) = Load : &:r0_41, ~mu0_2 +# 124| r0_43(glval) = VariableAddress[z] : +# 124| r0_44(double) = Load : &:r0_43, ~mu0_2 +# 124| r0_45(double) = Add : r0_44, r0_42 +# 124| mu0_46(double) = Store : &:r0_43, r0_45 +# 125| r0_47(glval) = VariableAddress[x] : +# 125| r0_48(double) = Load : &:r0_47, ~mu0_2 +# 125| r0_49(glval) = VariableAddress[z] : +# 125| r0_50(double) = Load : &:r0_49, ~mu0_2 +# 125| r0_51(double) = Sub : r0_50, r0_48 +# 125| mu0_52(double) = Store : &:r0_49, r0_51 +# 126| r0_53(glval) = VariableAddress[x] : +# 126| r0_54(double) = Load : &:r0_53, ~mu0_2 +# 126| r0_55(glval) = VariableAddress[z] : +# 126| r0_56(double) = Load : &:r0_55, ~mu0_2 +# 126| r0_57(double) = Mul : r0_56, r0_54 +# 126| mu0_58(double) = Store : &:r0_55, r0_57 +# 127| r0_59(glval) = VariableAddress[x] : +# 127| r0_60(double) = Load : &:r0_59, ~mu0_2 +# 127| r0_61(glval) = VariableAddress[z] : +# 127| r0_62(double) = Load : &:r0_61, ~mu0_2 +# 127| r0_63(double) = Div : r0_62, r0_60 +# 127| mu0_64(double) = Store : &:r0_61, r0_63 +# 129| r0_65(glval) = VariableAddress[x] : +# 129| r0_66(double) = Load : &:r0_65, ~mu0_2 +# 129| r0_67(double) = CopyValue : r0_66 +# 129| r0_68(glval) = VariableAddress[z] : +# 129| mu0_69(double) = Store : &:r0_68, r0_67 +# 130| r0_70(glval) = VariableAddress[x] : +# 130| r0_71(double) = Load : &:r0_70, ~mu0_2 +# 130| r0_72(double) = Negate : r0_71 +# 130| r0_73(glval) = VariableAddress[z] : +# 130| mu0_74(double) = Store : &:r0_73, r0_72 +# 131| v0_75(void) = NoOp : +# 114| v0_76(void) = ReturnVoid : +# 114| v0_77(void) = UnmodeledUse : mu* +# 114| v0_78(void) = ExitFunction : # 133| void FloatCompare(double, double) # 133| Block 0 @@ -670,51 +619,45 @@ ir.cpp: # 136| r0_13(bool) = CompareEQ : r0_10, r0_12 # 136| r0_14(glval) = VariableAddress[b] : # 136| mu0_15(bool) = Store : &:r0_14, r0_13 -# 136| r0_16(glval) = CopyValue : r0_14 -# 137| r0_17(glval) = VariableAddress[x] : -# 137| r0_18(double) = Load : &:r0_17, ~mu0_2 -# 137| r0_19(glval) = VariableAddress[y] : -# 137| r0_20(double) = Load : &:r0_19, ~mu0_2 -# 137| r0_21(bool) = CompareNE : r0_18, r0_20 -# 137| r0_22(glval) = VariableAddress[b] : -# 137| mu0_23(bool) = Store : &:r0_22, r0_21 -# 137| r0_24(glval) = CopyValue : r0_22 -# 138| r0_25(glval) = VariableAddress[x] : +# 137| r0_16(glval) = VariableAddress[x] : +# 137| r0_17(double) = Load : &:r0_16, ~mu0_2 +# 137| r0_18(glval) = VariableAddress[y] : +# 137| r0_19(double) = Load : &:r0_18, ~mu0_2 +# 137| r0_20(bool) = CompareNE : r0_17, r0_19 +# 137| r0_21(glval) = VariableAddress[b] : +# 137| mu0_22(bool) = Store : &:r0_21, r0_20 +# 138| r0_23(glval) = VariableAddress[x] : +# 138| r0_24(double) = Load : &:r0_23, ~mu0_2 +# 138| r0_25(glval) = VariableAddress[y] : # 138| r0_26(double) = Load : &:r0_25, ~mu0_2 -# 138| r0_27(glval) = VariableAddress[y] : -# 138| r0_28(double) = Load : &:r0_27, ~mu0_2 -# 138| r0_29(bool) = CompareLT : r0_26, r0_28 -# 138| r0_30(glval) = VariableAddress[b] : -# 138| mu0_31(bool) = Store : &:r0_30, r0_29 -# 138| r0_32(glval) = CopyValue : r0_30 -# 139| r0_33(glval) = VariableAddress[x] : -# 139| r0_34(double) = Load : &:r0_33, ~mu0_2 -# 139| r0_35(glval) = VariableAddress[y] : -# 139| r0_36(double) = Load : &:r0_35, ~mu0_2 -# 139| r0_37(bool) = CompareGT : r0_34, r0_36 -# 139| r0_38(glval) = VariableAddress[b] : -# 139| mu0_39(bool) = Store : &:r0_38, r0_37 -# 139| r0_40(glval) = CopyValue : r0_38 -# 140| r0_41(glval) = VariableAddress[x] : -# 140| r0_42(double) = Load : &:r0_41, ~mu0_2 -# 140| r0_43(glval) = VariableAddress[y] : -# 140| r0_44(double) = Load : &:r0_43, ~mu0_2 -# 140| r0_45(bool) = CompareLE : r0_42, r0_44 -# 140| r0_46(glval) = VariableAddress[b] : -# 140| mu0_47(bool) = Store : &:r0_46, r0_45 -# 140| r0_48(glval) = CopyValue : r0_46 -# 141| r0_49(glval) = VariableAddress[x] : -# 141| r0_50(double) = Load : &:r0_49, ~mu0_2 -# 141| r0_51(glval) = VariableAddress[y] : -# 141| r0_52(double) = Load : &:r0_51, ~mu0_2 -# 141| r0_53(bool) = CompareGE : r0_50, r0_52 -# 141| r0_54(glval) = VariableAddress[b] : -# 141| mu0_55(bool) = Store : &:r0_54, r0_53 -# 141| r0_56(glval) = CopyValue : r0_54 -# 142| v0_57(void) = NoOp : -# 133| v0_58(void) = ReturnVoid : -# 133| v0_59(void) = UnmodeledUse : mu* -# 133| v0_60(void) = ExitFunction : +# 138| r0_27(bool) = CompareLT : r0_24, r0_26 +# 138| r0_28(glval) = VariableAddress[b] : +# 138| mu0_29(bool) = Store : &:r0_28, r0_27 +# 139| r0_30(glval) = VariableAddress[x] : +# 139| r0_31(double) = Load : &:r0_30, ~mu0_2 +# 139| r0_32(glval) = VariableAddress[y] : +# 139| r0_33(double) = Load : &:r0_32, ~mu0_2 +# 139| r0_34(bool) = CompareGT : r0_31, r0_33 +# 139| r0_35(glval) = VariableAddress[b] : +# 139| mu0_36(bool) = Store : &:r0_35, r0_34 +# 140| r0_37(glval) = VariableAddress[x] : +# 140| r0_38(double) = Load : &:r0_37, ~mu0_2 +# 140| r0_39(glval) = VariableAddress[y] : +# 140| r0_40(double) = Load : &:r0_39, ~mu0_2 +# 140| r0_41(bool) = CompareLE : r0_38, r0_40 +# 140| r0_42(glval) = VariableAddress[b] : +# 140| mu0_43(bool) = Store : &:r0_42, r0_41 +# 141| r0_44(glval) = VariableAddress[x] : +# 141| r0_45(double) = Load : &:r0_44, ~mu0_2 +# 141| r0_46(glval) = VariableAddress[y] : +# 141| r0_47(double) = Load : &:r0_46, ~mu0_2 +# 141| r0_48(bool) = CompareGE : r0_45, r0_47 +# 141| r0_49(glval) = VariableAddress[b] : +# 141| mu0_50(bool) = Store : &:r0_49, r0_48 +# 142| v0_51(void) = NoOp : +# 133| v0_52(void) = ReturnVoid : +# 133| v0_53(void) = UnmodeledUse : mu* +# 133| v0_54(void) = ExitFunction : # 144| void FloatCrement(float) # 144| Block 0 @@ -732,35 +675,31 @@ ir.cpp: # 147| mu0_11(float) = Store : &:r0_7, r0_10 # 147| r0_12(glval) = VariableAddress[y] : # 147| mu0_13(float) = Store : &:r0_12, r0_10 -# 147| r0_14(glval) = CopyValue : r0_12 -# 148| r0_15(glval) = VariableAddress[x] : -# 148| r0_16(float) = Load : &:r0_15, ~mu0_2 -# 148| r0_17(float) = Constant[1.0] : -# 148| r0_18(float) = Sub : r0_16, r0_17 -# 148| mu0_19(float) = Store : &:r0_15, r0_18 -# 148| r0_20(glval) = VariableAddress[y] : -# 148| mu0_21(float) = Store : &:r0_20, r0_18 -# 148| r0_22(glval) = CopyValue : r0_20 -# 149| r0_23(glval) = VariableAddress[x] : -# 149| r0_24(float) = Load : &:r0_23, ~mu0_2 -# 149| r0_25(float) = Constant[1.0] : -# 149| r0_26(float) = Add : r0_24, r0_25 -# 149| mu0_27(float) = Store : &:r0_23, r0_26 -# 149| r0_28(glval) = VariableAddress[y] : -# 149| mu0_29(float) = Store : &:r0_28, r0_24 -# 149| r0_30(glval) = CopyValue : r0_28 -# 150| r0_31(glval) = VariableAddress[x] : -# 150| r0_32(float) = Load : &:r0_31, ~mu0_2 -# 150| r0_33(float) = Constant[1.0] : -# 150| r0_34(float) = Sub : r0_32, r0_33 -# 150| mu0_35(float) = Store : &:r0_31, r0_34 -# 150| r0_36(glval) = VariableAddress[y] : -# 150| mu0_37(float) = Store : &:r0_36, r0_32 -# 150| r0_38(glval) = CopyValue : r0_36 -# 151| v0_39(void) = NoOp : -# 144| v0_40(void) = ReturnVoid : -# 144| v0_41(void) = UnmodeledUse : mu* -# 144| v0_42(void) = ExitFunction : +# 148| r0_14(glval) = VariableAddress[x] : +# 148| r0_15(float) = Load : &:r0_14, ~mu0_2 +# 148| r0_16(float) = Constant[1.0] : +# 148| r0_17(float) = Sub : r0_15, r0_16 +# 148| mu0_18(float) = Store : &:r0_14, r0_17 +# 148| r0_19(glval) = VariableAddress[y] : +# 148| mu0_20(float) = Store : &:r0_19, r0_17 +# 149| r0_21(glval) = VariableAddress[x] : +# 149| r0_22(float) = Load : &:r0_21, ~mu0_2 +# 149| r0_23(float) = Constant[1.0] : +# 149| r0_24(float) = Add : r0_22, r0_23 +# 149| mu0_25(float) = Store : &:r0_21, r0_24 +# 149| r0_26(glval) = VariableAddress[y] : +# 149| mu0_27(float) = Store : &:r0_26, r0_22 +# 150| r0_28(glval) = VariableAddress[x] : +# 150| r0_29(float) = Load : &:r0_28, ~mu0_2 +# 150| r0_30(float) = Constant[1.0] : +# 150| r0_31(float) = Sub : r0_29, r0_30 +# 150| mu0_32(float) = Store : &:r0_28, r0_31 +# 150| r0_33(glval) = VariableAddress[y] : +# 150| mu0_34(float) = Store : &:r0_33, r0_29 +# 151| v0_35(void) = NoOp : +# 144| v0_36(void) = ReturnVoid : +# 144| v0_37(void) = UnmodeledUse : mu* +# 144| v0_38(void) = ExitFunction : # 153| void PointerOps(int*, int) # 153| Block 0 @@ -782,70 +721,61 @@ ir.cpp: # 157| r0_15(int *) = PointerAdd[4] : r0_12, r0_14 # 157| r0_16(glval) = VariableAddress[q] : # 157| mu0_17(int *) = Store : &:r0_16, r0_15 -# 157| r0_18(glval) = CopyValue : r0_16 -# 158| r0_19(glval) = VariableAddress[i] : -# 158| r0_20(int) = Load : &:r0_19, ~mu0_2 -# 158| r0_21(glval) = VariableAddress[p] : -# 158| r0_22(int *) = Load : &:r0_21, ~mu0_2 -# 158| r0_23(int *) = PointerAdd[4] : r0_22, r0_20 -# 158| r0_24(glval) = VariableAddress[q] : -# 158| mu0_25(int *) = Store : &:r0_24, r0_23 -# 158| r0_26(glval) = CopyValue : r0_24 -# 159| r0_27(glval) = VariableAddress[p] : -# 159| r0_28(int *) = Load : &:r0_27, ~mu0_2 -# 159| r0_29(glval) = VariableAddress[i] : -# 159| r0_30(int) = Load : &:r0_29, ~mu0_2 -# 159| r0_31(int *) = PointerSub[4] : r0_28, r0_30 -# 159| r0_32(glval) = VariableAddress[q] : -# 159| mu0_33(int *) = Store : &:r0_32, r0_31 -# 159| r0_34(glval) = CopyValue : r0_32 -# 160| r0_35(glval) = VariableAddress[p] : -# 160| r0_36(int *) = Load : &:r0_35, ~mu0_2 -# 160| r0_37(glval) = VariableAddress[q] : -# 160| r0_38(int *) = Load : &:r0_37, ~mu0_2 -# 160| r0_39(long) = PointerDiff[4] : r0_36, r0_38 -# 160| r0_40(int) = Convert : r0_39 -# 160| r0_41(glval) = VariableAddress[i] : -# 160| mu0_42(int) = Store : &:r0_41, r0_40 -# 160| r0_43(glval) = CopyValue : r0_41 -# 162| r0_44(glval) = VariableAddress[p] : -# 162| r0_45(int *) = Load : &:r0_44, ~mu0_2 -# 162| r0_46(glval) = VariableAddress[q] : -# 162| mu0_47(int *) = Store : &:r0_46, r0_45 -# 162| r0_48(glval) = CopyValue : r0_46 -# 164| r0_49(glval) = VariableAddress[i] : -# 164| r0_50(int) = Load : &:r0_49, ~mu0_2 -# 164| r0_51(glval) = VariableAddress[q] : -# 164| r0_52(int *) = Load : &:r0_51, ~mu0_2 -# 164| r0_53(int *) = PointerAdd[4] : r0_52, r0_50 -# 164| mu0_54(int *) = Store : &:r0_51, r0_53 -# 164| r0_55(glval) = CopyValue : r0_51 -# 165| r0_56(glval) = VariableAddress[i] : -# 165| r0_57(int) = Load : &:r0_56, ~mu0_2 -# 165| r0_58(glval) = VariableAddress[q] : -# 165| r0_59(int *) = Load : &:r0_58, ~mu0_2 -# 165| r0_60(int *) = PointerSub[4] : r0_59, r0_57 -# 165| mu0_61(int *) = Store : &:r0_58, r0_60 -# 165| r0_62(glval) = CopyValue : r0_58 -# 167| r0_63(glval) = VariableAddress[p] : -# 167| r0_64(int *) = Load : &:r0_63, ~mu0_2 -# 167| r0_65(int *) = Constant[0] : -# 167| r0_66(bool) = CompareNE : r0_64, r0_65 -# 167| r0_67(glval) = VariableAddress[b] : -# 167| mu0_68(bool) = Store : &:r0_67, r0_66 -# 167| r0_69(glval) = CopyValue : r0_67 -# 168| r0_70(glval) = VariableAddress[p] : -# 168| r0_71(int *) = Load : &:r0_70, ~mu0_2 -# 168| r0_72(int *) = Constant[0] : -# 168| r0_73(bool) = CompareNE : r0_71, r0_72 -# 168| r0_74(bool) = LogicalNot : r0_73 -# 168| r0_75(glval) = VariableAddress[b] : -# 168| mu0_76(bool) = Store : &:r0_75, r0_74 -# 168| r0_77(glval) = CopyValue : r0_75 -# 169| v0_78(void) = NoOp : -# 153| v0_79(void) = ReturnVoid : -# 153| v0_80(void) = UnmodeledUse : mu* -# 153| v0_81(void) = ExitFunction : +# 158| r0_18(glval) = VariableAddress[i] : +# 158| r0_19(int) = Load : &:r0_18, ~mu0_2 +# 158| r0_20(glval) = VariableAddress[p] : +# 158| r0_21(int *) = Load : &:r0_20, ~mu0_2 +# 158| r0_22(int *) = PointerAdd[4] : r0_21, r0_19 +# 158| r0_23(glval) = VariableAddress[q] : +# 158| mu0_24(int *) = Store : &:r0_23, r0_22 +# 159| r0_25(glval) = VariableAddress[p] : +# 159| r0_26(int *) = Load : &:r0_25, ~mu0_2 +# 159| r0_27(glval) = VariableAddress[i] : +# 159| r0_28(int) = Load : &:r0_27, ~mu0_2 +# 159| r0_29(int *) = PointerSub[4] : r0_26, r0_28 +# 159| r0_30(glval) = VariableAddress[q] : +# 159| mu0_31(int *) = Store : &:r0_30, r0_29 +# 160| r0_32(glval) = VariableAddress[p] : +# 160| r0_33(int *) = Load : &:r0_32, ~mu0_2 +# 160| r0_34(glval) = VariableAddress[q] : +# 160| r0_35(int *) = Load : &:r0_34, ~mu0_2 +# 160| r0_36(long) = PointerDiff[4] : r0_33, r0_35 +# 160| r0_37(int) = Convert : r0_36 +# 160| r0_38(glval) = VariableAddress[i] : +# 160| mu0_39(int) = Store : &:r0_38, r0_37 +# 162| r0_40(glval) = VariableAddress[p] : +# 162| r0_41(int *) = Load : &:r0_40, ~mu0_2 +# 162| r0_42(glval) = VariableAddress[q] : +# 162| mu0_43(int *) = Store : &:r0_42, r0_41 +# 164| r0_44(glval) = VariableAddress[i] : +# 164| r0_45(int) = Load : &:r0_44, ~mu0_2 +# 164| r0_46(glval) = VariableAddress[q] : +# 164| r0_47(int *) = Load : &:r0_46, ~mu0_2 +# 164| r0_48(int *) = PointerAdd[4] : r0_47, r0_45 +# 164| mu0_49(int *) = Store : &:r0_46, r0_48 +# 165| r0_50(glval) = VariableAddress[i] : +# 165| r0_51(int) = Load : &:r0_50, ~mu0_2 +# 165| r0_52(glval) = VariableAddress[q] : +# 165| r0_53(int *) = Load : &:r0_52, ~mu0_2 +# 165| r0_54(int *) = PointerSub[4] : r0_53, r0_51 +# 165| mu0_55(int *) = Store : &:r0_52, r0_54 +# 167| r0_56(glval) = VariableAddress[p] : +# 167| r0_57(int *) = Load : &:r0_56, ~mu0_2 +# 167| r0_58(int *) = Constant[0] : +# 167| r0_59(bool) = CompareNE : r0_57, r0_58 +# 167| r0_60(glval) = VariableAddress[b] : +# 167| mu0_61(bool) = Store : &:r0_60, r0_59 +# 168| r0_62(glval) = VariableAddress[p] : +# 168| r0_63(int *) = Load : &:r0_62, ~mu0_2 +# 168| r0_64(int *) = Constant[0] : +# 168| r0_65(bool) = CompareNE : r0_63, r0_64 +# 168| r0_66(bool) = LogicalNot : r0_65 +# 168| r0_67(glval) = VariableAddress[b] : +# 168| mu0_68(bool) = Store : &:r0_67, r0_66 +# 169| v0_69(void) = NoOp : +# 153| v0_70(void) = ReturnVoid : +# 153| v0_71(void) = UnmodeledUse : mu* +# 153| v0_72(void) = ExitFunction : # 171| void ArrayAccess(int*, int) # 171| Block 0 @@ -866,76 +796,68 @@ ir.cpp: # 174| r0_14(int) = Load : &:r0_13, ~mu0_2 # 174| r0_15(glval) = VariableAddress[x] : # 174| mu0_16(int) = Store : &:r0_15, r0_14 -# 174| r0_17(glval) = CopyValue : r0_15 -# 175| r0_18(glval) = VariableAddress[p] : -# 175| r0_19(int *) = Load : &:r0_18, ~mu0_2 -# 175| r0_20(glval) = VariableAddress[i] : -# 175| r0_21(int) = Load : &:r0_20, ~mu0_2 -# 175| r0_22(glval) = PointerAdd[4] : r0_19, r0_21 -# 175| r0_23(int) = Load : &:r0_22, ~mu0_2 -# 175| r0_24(glval) = VariableAddress[x] : -# 175| mu0_25(int) = Store : &:r0_24, r0_23 -# 175| r0_26(glval) = CopyValue : r0_24 -# 177| r0_27(glval) = VariableAddress[x] : -# 177| r0_28(int) = Load : &:r0_27, ~mu0_2 -# 177| r0_29(glval) = VariableAddress[p] : -# 177| r0_30(int *) = Load : &:r0_29, ~mu0_2 -# 177| r0_31(glval) = VariableAddress[i] : -# 177| r0_32(int) = Load : &:r0_31, ~mu0_2 -# 177| r0_33(glval) = PointerAdd[4] : r0_30, r0_32 -# 177| mu0_34(int) = Store : &:r0_33, r0_28 -# 177| r0_35(glval) = CopyValue : r0_33 -# 178| r0_36(glval) = VariableAddress[x] : -# 178| r0_37(int) = Load : &:r0_36, ~mu0_2 -# 178| r0_38(glval) = VariableAddress[p] : -# 178| r0_39(int *) = Load : &:r0_38, ~mu0_2 -# 178| r0_40(glval) = VariableAddress[i] : -# 178| r0_41(int) = Load : &:r0_40, ~mu0_2 -# 178| r0_42(glval) = PointerAdd[4] : r0_39, r0_41 -# 178| mu0_43(int) = Store : &:r0_42, r0_37 -# 178| r0_44(glval) = CopyValue : r0_42 -# 180| r0_45(glval) = VariableAddress[a] : -# 180| mu0_46(int[10]) = Uninitialized[a] : &:r0_45 -# 181| r0_47(glval) = VariableAddress[a] : -# 181| r0_48(int *) = Convert : r0_47 -# 181| r0_49(glval) = VariableAddress[i] : -# 181| r0_50(int) = Load : &:r0_49, ~mu0_2 -# 181| r0_51(glval) = PointerAdd[4] : r0_48, r0_50 -# 181| r0_52(int) = Load : &:r0_51, ~mu0_2 -# 181| r0_53(glval) = VariableAddress[x] : -# 181| mu0_54(int) = Store : &:r0_53, r0_52 -# 181| r0_55(glval) = CopyValue : r0_53 -# 182| r0_56(glval) = VariableAddress[a] : -# 182| r0_57(int *) = Convert : r0_56 -# 182| r0_58(glval) = VariableAddress[i] : -# 182| r0_59(int) = Load : &:r0_58, ~mu0_2 -# 182| r0_60(glval) = PointerAdd[4] : r0_57, r0_59 -# 182| r0_61(int) = Load : &:r0_60, ~mu0_2 -# 182| r0_62(glval) = VariableAddress[x] : -# 182| mu0_63(int) = Store : &:r0_62, r0_61 -# 182| r0_64(glval) = CopyValue : r0_62 -# 183| r0_65(glval) = VariableAddress[x] : -# 183| r0_66(int) = Load : &:r0_65, ~mu0_2 -# 183| r0_67(glval) = VariableAddress[a] : -# 183| r0_68(int *) = Convert : r0_67 -# 183| r0_69(glval) = VariableAddress[i] : -# 183| r0_70(int) = Load : &:r0_69, ~mu0_2 -# 183| r0_71(glval) = PointerAdd[4] : r0_68, r0_70 -# 183| mu0_72(int) = Store : &:r0_71, r0_66 -# 183| r0_73(glval) = CopyValue : r0_71 -# 184| r0_74(glval) = VariableAddress[x] : -# 184| r0_75(int) = Load : &:r0_74, ~mu0_2 -# 184| r0_76(glval) = VariableAddress[a] : -# 184| r0_77(int *) = Convert : r0_76 -# 184| r0_78(glval) = VariableAddress[i] : -# 184| r0_79(int) = Load : &:r0_78, ~mu0_2 -# 184| r0_80(glval) = PointerAdd[4] : r0_77, r0_79 -# 184| mu0_81(int) = Store : &:r0_80, r0_75 -# 184| r0_82(glval) = CopyValue : r0_80 -# 185| v0_83(void) = NoOp : -# 171| v0_84(void) = ReturnVoid : -# 171| v0_85(void) = UnmodeledUse : mu* -# 171| v0_86(void) = ExitFunction : +# 175| r0_17(glval) = VariableAddress[p] : +# 175| r0_18(int *) = Load : &:r0_17, ~mu0_2 +# 175| r0_19(glval) = VariableAddress[i] : +# 175| r0_20(int) = Load : &:r0_19, ~mu0_2 +# 175| r0_21(glval) = PointerAdd[4] : r0_18, r0_20 +# 175| r0_22(int) = Load : &:r0_21, ~mu0_2 +# 175| r0_23(glval) = VariableAddress[x] : +# 175| mu0_24(int) = Store : &:r0_23, r0_22 +# 177| r0_25(glval) = VariableAddress[x] : +# 177| r0_26(int) = Load : &:r0_25, ~mu0_2 +# 177| r0_27(glval) = VariableAddress[p] : +# 177| r0_28(int *) = Load : &:r0_27, ~mu0_2 +# 177| r0_29(glval) = VariableAddress[i] : +# 177| r0_30(int) = Load : &:r0_29, ~mu0_2 +# 177| r0_31(glval) = PointerAdd[4] : r0_28, r0_30 +# 177| mu0_32(int) = Store : &:r0_31, r0_26 +# 178| r0_33(glval) = VariableAddress[x] : +# 178| r0_34(int) = Load : &:r0_33, ~mu0_2 +# 178| r0_35(glval) = VariableAddress[p] : +# 178| r0_36(int *) = Load : &:r0_35, ~mu0_2 +# 178| r0_37(glval) = VariableAddress[i] : +# 178| r0_38(int) = Load : &:r0_37, ~mu0_2 +# 178| r0_39(glval) = PointerAdd[4] : r0_36, r0_38 +# 178| mu0_40(int) = Store : &:r0_39, r0_34 +# 180| r0_41(glval) = VariableAddress[a] : +# 180| mu0_42(int[10]) = Uninitialized[a] : &:r0_41 +# 181| r0_43(glval) = VariableAddress[a] : +# 181| r0_44(int *) = Convert : r0_43 +# 181| r0_45(glval) = VariableAddress[i] : +# 181| r0_46(int) = Load : &:r0_45, ~mu0_2 +# 181| r0_47(glval) = PointerAdd[4] : r0_44, r0_46 +# 181| r0_48(int) = Load : &:r0_47, ~mu0_2 +# 181| r0_49(glval) = VariableAddress[x] : +# 181| mu0_50(int) = Store : &:r0_49, r0_48 +# 182| r0_51(glval) = VariableAddress[a] : +# 182| r0_52(int *) = Convert : r0_51 +# 182| r0_53(glval) = VariableAddress[i] : +# 182| r0_54(int) = Load : &:r0_53, ~mu0_2 +# 182| r0_55(glval) = PointerAdd[4] : r0_52, r0_54 +# 182| r0_56(int) = Load : &:r0_55, ~mu0_2 +# 182| r0_57(glval) = VariableAddress[x] : +# 182| mu0_58(int) = Store : &:r0_57, r0_56 +# 183| r0_59(glval) = VariableAddress[x] : +# 183| r0_60(int) = Load : &:r0_59, ~mu0_2 +# 183| r0_61(glval) = VariableAddress[a] : +# 183| r0_62(int *) = Convert : r0_61 +# 183| r0_63(glval) = VariableAddress[i] : +# 183| r0_64(int) = Load : &:r0_63, ~mu0_2 +# 183| r0_65(glval) = PointerAdd[4] : r0_62, r0_64 +# 183| mu0_66(int) = Store : &:r0_65, r0_60 +# 184| r0_67(glval) = VariableAddress[x] : +# 184| r0_68(int) = Load : &:r0_67, ~mu0_2 +# 184| r0_69(glval) = VariableAddress[a] : +# 184| r0_70(int *) = Convert : r0_69 +# 184| r0_71(glval) = VariableAddress[i] : +# 184| r0_72(int) = Load : &:r0_71, ~mu0_2 +# 184| r0_73(glval) = PointerAdd[4] : r0_70, r0_72 +# 184| mu0_74(int) = Store : &:r0_73, r0_68 +# 185| v0_75(void) = NoOp : +# 171| v0_76(void) = ReturnVoid : +# 171| v0_77(void) = UnmodeledUse : mu* +# 171| v0_78(void) = ExitFunction : # 187| void StringLiteral(int) # 187| Block 0 @@ -988,51 +910,45 @@ ir.cpp: # 196| r0_13(bool) = CompareEQ : r0_10, r0_12 # 196| r0_14(glval) = VariableAddress[b] : # 196| mu0_15(bool) = Store : &:r0_14, r0_13 -# 196| r0_16(glval) = CopyValue : r0_14 -# 197| r0_17(glval) = VariableAddress[p] : -# 197| r0_18(int *) = Load : &:r0_17, ~mu0_2 -# 197| r0_19(glval) = VariableAddress[q] : -# 197| r0_20(int *) = Load : &:r0_19, ~mu0_2 -# 197| r0_21(bool) = CompareNE : r0_18, r0_20 -# 197| r0_22(glval) = VariableAddress[b] : -# 197| mu0_23(bool) = Store : &:r0_22, r0_21 -# 197| r0_24(glval) = CopyValue : r0_22 -# 198| r0_25(glval) = VariableAddress[p] : +# 197| r0_16(glval) = VariableAddress[p] : +# 197| r0_17(int *) = Load : &:r0_16, ~mu0_2 +# 197| r0_18(glval) = VariableAddress[q] : +# 197| r0_19(int *) = Load : &:r0_18, ~mu0_2 +# 197| r0_20(bool) = CompareNE : r0_17, r0_19 +# 197| r0_21(glval) = VariableAddress[b] : +# 197| mu0_22(bool) = Store : &:r0_21, r0_20 +# 198| r0_23(glval) = VariableAddress[p] : +# 198| r0_24(int *) = Load : &:r0_23, ~mu0_2 +# 198| r0_25(glval) = VariableAddress[q] : # 198| r0_26(int *) = Load : &:r0_25, ~mu0_2 -# 198| r0_27(glval) = VariableAddress[q] : -# 198| r0_28(int *) = Load : &:r0_27, ~mu0_2 -# 198| r0_29(bool) = CompareLT : r0_26, r0_28 -# 198| r0_30(glval) = VariableAddress[b] : -# 198| mu0_31(bool) = Store : &:r0_30, r0_29 -# 198| r0_32(glval) = CopyValue : r0_30 -# 199| r0_33(glval) = VariableAddress[p] : -# 199| r0_34(int *) = Load : &:r0_33, ~mu0_2 -# 199| r0_35(glval) = VariableAddress[q] : -# 199| r0_36(int *) = Load : &:r0_35, ~mu0_2 -# 199| r0_37(bool) = CompareGT : r0_34, r0_36 -# 199| r0_38(glval) = VariableAddress[b] : -# 199| mu0_39(bool) = Store : &:r0_38, r0_37 -# 199| r0_40(glval) = CopyValue : r0_38 -# 200| r0_41(glval) = VariableAddress[p] : -# 200| r0_42(int *) = Load : &:r0_41, ~mu0_2 -# 200| r0_43(glval) = VariableAddress[q] : -# 200| r0_44(int *) = Load : &:r0_43, ~mu0_2 -# 200| r0_45(bool) = CompareLE : r0_42, r0_44 -# 200| r0_46(glval) = VariableAddress[b] : -# 200| mu0_47(bool) = Store : &:r0_46, r0_45 -# 200| r0_48(glval) = CopyValue : r0_46 -# 201| r0_49(glval) = VariableAddress[p] : -# 201| r0_50(int *) = Load : &:r0_49, ~mu0_2 -# 201| r0_51(glval) = VariableAddress[q] : -# 201| r0_52(int *) = Load : &:r0_51, ~mu0_2 -# 201| r0_53(bool) = CompareGE : r0_50, r0_52 -# 201| r0_54(glval) = VariableAddress[b] : -# 201| mu0_55(bool) = Store : &:r0_54, r0_53 -# 201| r0_56(glval) = CopyValue : r0_54 -# 202| v0_57(void) = NoOp : -# 193| v0_58(void) = ReturnVoid : -# 193| v0_59(void) = UnmodeledUse : mu* -# 193| v0_60(void) = ExitFunction : +# 198| r0_27(bool) = CompareLT : r0_24, r0_26 +# 198| r0_28(glval) = VariableAddress[b] : +# 198| mu0_29(bool) = Store : &:r0_28, r0_27 +# 199| r0_30(glval) = VariableAddress[p] : +# 199| r0_31(int *) = Load : &:r0_30, ~mu0_2 +# 199| r0_32(glval) = VariableAddress[q] : +# 199| r0_33(int *) = Load : &:r0_32, ~mu0_2 +# 199| r0_34(bool) = CompareGT : r0_31, r0_33 +# 199| r0_35(glval) = VariableAddress[b] : +# 199| mu0_36(bool) = Store : &:r0_35, r0_34 +# 200| r0_37(glval) = VariableAddress[p] : +# 200| r0_38(int *) = Load : &:r0_37, ~mu0_2 +# 200| r0_39(glval) = VariableAddress[q] : +# 200| r0_40(int *) = Load : &:r0_39, ~mu0_2 +# 200| r0_41(bool) = CompareLE : r0_38, r0_40 +# 200| r0_42(glval) = VariableAddress[b] : +# 200| mu0_43(bool) = Store : &:r0_42, r0_41 +# 201| r0_44(glval) = VariableAddress[p] : +# 201| r0_45(int *) = Load : &:r0_44, ~mu0_2 +# 201| r0_46(glval) = VariableAddress[q] : +# 201| r0_47(int *) = Load : &:r0_46, ~mu0_2 +# 201| r0_48(bool) = CompareGE : r0_45, r0_47 +# 201| r0_49(glval) = VariableAddress[b] : +# 201| mu0_50(bool) = Store : &:r0_49, r0_48 +# 202| v0_51(void) = NoOp : +# 193| v0_52(void) = ReturnVoid : +# 193| v0_53(void) = UnmodeledUse : mu* +# 193| v0_54(void) = ExitFunction : # 204| void PointerCrement(int*) # 204| Block 0 @@ -1050,35 +966,31 @@ ir.cpp: # 207| mu0_11(int *) = Store : &:r0_7, r0_10 # 207| r0_12(glval) = VariableAddress[q] : # 207| mu0_13(int *) = Store : &:r0_12, r0_10 -# 207| r0_14(glval) = CopyValue : r0_12 -# 208| r0_15(glval) = VariableAddress[p] : -# 208| r0_16(int *) = Load : &:r0_15, ~mu0_2 -# 208| r0_17(int) = Constant[1] : -# 208| r0_18(int *) = PointerSub[4] : r0_16, r0_17 -# 208| mu0_19(int *) = Store : &:r0_15, r0_18 -# 208| r0_20(glval) = VariableAddress[q] : -# 208| mu0_21(int *) = Store : &:r0_20, r0_18 -# 208| r0_22(glval) = CopyValue : r0_20 -# 209| r0_23(glval) = VariableAddress[p] : -# 209| r0_24(int *) = Load : &:r0_23, ~mu0_2 -# 209| r0_25(int) = Constant[1] : -# 209| r0_26(int *) = PointerAdd[4] : r0_24, r0_25 -# 209| mu0_27(int *) = Store : &:r0_23, r0_26 -# 209| r0_28(glval) = VariableAddress[q] : -# 209| mu0_29(int *) = Store : &:r0_28, r0_24 -# 209| r0_30(glval) = CopyValue : r0_28 -# 210| r0_31(glval) = VariableAddress[p] : -# 210| r0_32(int *) = Load : &:r0_31, ~mu0_2 -# 210| r0_33(int) = Constant[1] : -# 210| r0_34(int *) = PointerSub[4] : r0_32, r0_33 -# 210| mu0_35(int *) = Store : &:r0_31, r0_34 -# 210| r0_36(glval) = VariableAddress[q] : -# 210| mu0_37(int *) = Store : &:r0_36, r0_32 -# 210| r0_38(glval) = CopyValue : r0_36 -# 211| v0_39(void) = NoOp : -# 204| v0_40(void) = ReturnVoid : -# 204| v0_41(void) = UnmodeledUse : mu* -# 204| v0_42(void) = ExitFunction : +# 208| r0_14(glval) = VariableAddress[p] : +# 208| r0_15(int *) = Load : &:r0_14, ~mu0_2 +# 208| r0_16(int) = Constant[1] : +# 208| r0_17(int *) = PointerSub[4] : r0_15, r0_16 +# 208| mu0_18(int *) = Store : &:r0_14, r0_17 +# 208| r0_19(glval) = VariableAddress[q] : +# 208| mu0_20(int *) = Store : &:r0_19, r0_17 +# 209| r0_21(glval) = VariableAddress[p] : +# 209| r0_22(int *) = Load : &:r0_21, ~mu0_2 +# 209| r0_23(int) = Constant[1] : +# 209| r0_24(int *) = PointerAdd[4] : r0_22, r0_23 +# 209| mu0_25(int *) = Store : &:r0_21, r0_24 +# 209| r0_26(glval) = VariableAddress[q] : +# 209| mu0_27(int *) = Store : &:r0_26, r0_22 +# 210| r0_28(glval) = VariableAddress[p] : +# 210| r0_29(int *) = Load : &:r0_28, ~mu0_2 +# 210| r0_30(int) = Constant[1] : +# 210| r0_31(int *) = PointerSub[4] : r0_29, r0_30 +# 210| mu0_32(int *) = Store : &:r0_28, r0_31 +# 210| r0_33(glval) = VariableAddress[q] : +# 210| mu0_34(int *) = Store : &:r0_33, r0_29 +# 211| v0_35(void) = NoOp : +# 204| v0_36(void) = ReturnVoid : +# 204| v0_37(void) = UnmodeledUse : mu* +# 204| v0_38(void) = ExitFunction : # 213| void CompoundAssignment() # 213| Block 0 @@ -1093,40 +1005,36 @@ ir.cpp: # 216| r0_8(int) = Load : &:r0_7, ~mu0_2 # 216| r0_9(int) = Add : r0_8, r0_6 # 216| mu0_10(int) = Store : &:r0_7, r0_9 -# 216| r0_11(glval) = CopyValue : r0_7 -# 219| r0_12(glval) = VariableAddress[y] : -# 219| r0_13(short) = Constant[5] : -# 219| mu0_14(short) = Store : &:r0_12, r0_13 -# 220| r0_15(glval) = VariableAddress[x] : -# 220| r0_16(int) = Load : &:r0_15, ~mu0_2 -# 220| r0_17(glval) = VariableAddress[y] : -# 220| r0_18(short) = Load : &:r0_17, ~mu0_2 -# 220| r0_19(int) = Convert : r0_18 -# 220| r0_20(int) = Add : r0_19, r0_16 -# 220| r0_21(short) = Convert : r0_20 -# 220| mu0_22(short) = Store : &:r0_17, r0_21 -# 220| r0_23(glval) = CopyValue : r0_17 -# 223| r0_24(int) = Constant[1] : -# 223| r0_25(glval) = VariableAddress[y] : -# 223| r0_26(short) = Load : &:r0_25, ~mu0_2 -# 223| r0_27(short) = ShiftLeft : r0_26, r0_24 -# 223| mu0_28(short) = Store : &:r0_25, r0_27 -# 223| r0_29(glval) = CopyValue : r0_25 -# 226| r0_30(glval) = VariableAddress[z] : -# 226| r0_31(long) = Constant[7] : -# 226| mu0_32(long) = Store : &:r0_30, r0_31 -# 227| r0_33(float) = Constant[2.0] : -# 227| r0_34(glval) = VariableAddress[z] : -# 227| r0_35(long) = Load : &:r0_34, ~mu0_2 -# 227| r0_36(float) = Convert : r0_35 -# 227| r0_37(float) = Add : r0_36, r0_33 -# 227| r0_38(long) = Convert : r0_37 -# 227| mu0_39(long) = Store : &:r0_34, r0_38 -# 227| r0_40(glval) = CopyValue : r0_34 -# 228| v0_41(void) = NoOp : -# 213| v0_42(void) = ReturnVoid : -# 213| v0_43(void) = UnmodeledUse : mu* -# 213| v0_44(void) = ExitFunction : +# 219| r0_11(glval) = VariableAddress[y] : +# 219| r0_12(short) = Constant[5] : +# 219| mu0_13(short) = Store : &:r0_11, r0_12 +# 220| r0_14(glval) = VariableAddress[x] : +# 220| r0_15(int) = Load : &:r0_14, ~mu0_2 +# 220| r0_16(glval) = VariableAddress[y] : +# 220| r0_17(short) = Load : &:r0_16, ~mu0_2 +# 220| r0_18(int) = Convert : r0_17 +# 220| r0_19(int) = Add : r0_18, r0_15 +# 220| r0_20(short) = Convert : r0_19 +# 220| mu0_21(short) = Store : &:r0_16, r0_20 +# 223| r0_22(int) = Constant[1] : +# 223| r0_23(glval) = VariableAddress[y] : +# 223| r0_24(short) = Load : &:r0_23, ~mu0_2 +# 223| r0_25(short) = ShiftLeft : r0_24, r0_22 +# 223| mu0_26(short) = Store : &:r0_23, r0_25 +# 226| r0_27(glval) = VariableAddress[z] : +# 226| r0_28(long) = Constant[7] : +# 226| mu0_29(long) = Store : &:r0_27, r0_28 +# 227| r0_30(float) = Constant[2.0] : +# 227| r0_31(glval) = VariableAddress[z] : +# 227| r0_32(long) = Load : &:r0_31, ~mu0_2 +# 227| r0_33(float) = Convert : r0_32 +# 227| r0_34(float) = Add : r0_33, r0_30 +# 227| r0_35(long) = Convert : r0_34 +# 227| mu0_36(long) = Store : &:r0_31, r0_35 +# 228| v0_37(void) = NoOp : +# 213| v0_38(void) = ReturnVoid : +# 213| v0_39(void) = UnmodeledUse : mu* +# 213| v0_40(void) = ExitFunction : # 230| void UninitializedVariables() # 230| Block 0 @@ -1194,7 +1102,6 @@ ir.cpp: # 244| r2_1(int) = Load : &:r2_0, ~mu0_2 # 244| r2_2(glval) = VariableAddress[x] : # 244| mu2_3(int) = Store : &:r2_2, r2_1 -# 244| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 247| Block 3 @@ -1210,14 +1117,12 @@ ir.cpp: # 248| r4_0(int) = Constant[2] : # 248| r4_1(glval) = VariableAddress[x] : # 248| mu4_2(int) = Store : &:r4_1, r4_0 -# 248| r4_3(glval) = CopyValue : r4_1 #-----| Goto -> Block 6 # 250| Block 5 # 250| r5_0(int) = Constant[7] : # 250| r5_1(glval) = VariableAddress[x] : # 250| mu5_2(int) = Store : &:r5_1, r5_0 -# 250| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 6 # 251| Block 6 @@ -1245,7 +1150,6 @@ ir.cpp: # 255| r1_2(int) = Load : &:r1_1, ~mu0_2 # 255| r1_3(int) = Sub : r1_2, r1_0 # 255| mu1_4(int) = Store : &:r1_1, r1_3 -# 255| r1_5(glval) = CopyValue : r1_1 #-----| Goto (back edge) -> Block 3 # 257| Block 2 @@ -1278,12 +1182,11 @@ ir.cpp: # 261| r1_2(int) = Load : &:r1_1, ~mu0_2 # 261| r1_3(int) = Sub : r1_2, r1_0 # 261| mu1_4(int) = Store : &:r1_1, r1_3 -# 261| r1_5(glval) = CopyValue : r1_1 -# 262| r1_6(glval) = VariableAddress[n] : -# 262| r1_7(int) = Load : &:r1_6, ~mu0_2 -# 262| r1_8(int) = Constant[0] : -# 262| r1_9(bool) = CompareGT : r1_7, r1_8 -# 262| v1_10(void) = ConditionalBranch : r1_9 +# 262| r1_5(glval) = VariableAddress[n] : +# 262| r1_6(int) = Load : &:r1_5, ~mu0_2 +# 262| r1_7(int) = Constant[0] : +# 262| r1_8(bool) = CompareGT : r1_6, r1_7 +# 262| v1_9(void) = ConditionalBranch : r1_8 #-----| False -> Block 2 #-----| True (back edge) -> Block 1 @@ -1381,7 +1284,6 @@ ir.cpp: # 287| r2_3(int) = Load : &:r2_2, ~mu0_2 # 287| r2_4(int) = Add : r2_3, r2_1 # 287| mu2_5(int) = Store : &:r2_2, r2_4 -# 287| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 2 # 292| void For_InitCondition() @@ -1435,7 +1337,6 @@ ir.cpp: # 299| r2_3(int) = Load : &:r2_2, ~mu0_2 # 299| r2_4(int) = Add : r2_3, r2_1 # 299| mu2_5(int) = Store : &:r2_2, r2_4 -# 299| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 2 # 304| void For_ConditionUpdate() @@ -1464,7 +1365,6 @@ ir.cpp: # 306| r2_3(int) = Load : &:r2_2, ~mu0_2 # 306| r2_4(int) = Add : r2_3, r2_1 # 306| mu2_5(int) = Store : &:r2_2, r2_4 -# 306| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 1 # 309| Block 3 @@ -1499,7 +1399,6 @@ ir.cpp: # 312| r2_3(int) = Load : &:r2_2, ~mu0_2 # 312| r2_4(int) = Add : r2_3, r2_1 # 312| mu2_5(int) = Store : &:r2_2, r2_4 -# 312| r2_6(glval) = CopyValue : r2_2 #-----| Goto (back edge) -> Block 1 # 315| Block 3 @@ -1533,7 +1432,6 @@ ir.cpp: # 318| r2_2(int) = Load : &:r2_1, ~mu0_2 # 318| r2_3(int) = Add : r2_2, r2_0 # 318| mu2_4(int) = Store : &:r2_1, r2_3 -# 318| r2_5(glval) = CopyValue : r2_1 #-----| Goto (back edge) -> Block 1 # 319| Block 3 @@ -1595,7 +1493,6 @@ ir.cpp: # 326| r4_3(int) = Load : &:r4_2, ~mu0_2 # 326| r4_4(int) = Add : r4_3, r4_1 # 326| mu4_5(int) = Store : &:r4_2, r4_4 -# 326| r4_6(glval) = CopyValue : r4_2 #-----| Goto (back edge) -> Block 1 # 331| Block 5 @@ -1658,16 +1555,15 @@ ir.cpp: # 342| r0_7(int *) = Load : &:r0_6, ~mu0_2 # 342| r0_8(glval) = CopyValue : r0_7 # 342| mu0_9(int) = Store : &:r0_8, r0_5 -# 342| r0_10(glval) = CopyValue : r0_8 -# 343| r0_11(glval) = VariableAddress[#return] : -# 343| r0_12(glval) = VariableAddress[p] : -# 343| r0_13(int *) = Load : &:r0_12, ~mu0_2 -# 343| r0_14(int) = Load : &:r0_13, ~mu0_2 -# 343| mu0_15(int) = Store : &:r0_11, r0_14 -# 341| r0_16(glval) = VariableAddress[#return] : -# 341| v0_17(void) = ReturnValue : &:r0_16, ~mu0_2 -# 341| v0_18(void) = UnmodeledUse : mu* -# 341| v0_19(void) = ExitFunction : +# 343| r0_10(glval) = VariableAddress[#return] : +# 343| r0_11(glval) = VariableAddress[p] : +# 343| r0_12(int *) = Load : &:r0_11, ~mu0_2 +# 343| r0_13(int) = Load : &:r0_12, ~mu0_2 +# 343| mu0_14(int) = Store : &:r0_10, r0_13 +# 341| r0_15(glval) = VariableAddress[#return] : +# 341| v0_16(void) = ReturnValue : &:r0_15, ~mu0_2 +# 341| v0_17(void) = UnmodeledUse : mu* +# 341| v0_18(void) = ExitFunction : # 348| int* AddressOf() # 348| Block 0 @@ -1711,7 +1607,6 @@ ir.cpp: # 356| r3_2(int) = Load : &:r3_1, ~mu0_2 # 356| r3_3(int) = Sub : r3_2, r3_0 # 356| mu3_4(int) = Store : &:r3_1, r3_3 -# 356| r3_5(glval) = CopyValue : r3_1 #-----| Goto (back edge) -> Block 5 # 357| Block 4 @@ -1758,7 +1653,6 @@ ir.cpp: # 365| r3_2(int) = Load : &:r3_1, ~mu0_2 # 365| r3_3(int) = Sub : r3_2, r3_0 # 365| mu3_4(int) = Store : &:r3_1, r3_3 -# 365| r3_5(glval) = CopyValue : r3_1 #-----| Goto -> Block 4 # 361| Block 4 @@ -1863,7 +1757,6 @@ ir.cpp: # 387| r1_0(int) = Constant[1234] : # 387| r1_1(glval) = VariableAddress[y] : # 387| mu1_2(int) = Store : &:r1_1, r1_0 -# 387| r1_3(glval) = CopyValue : r1_1 #-----| Goto -> Block 2 # 389| Block 2 @@ -1871,8 +1764,7 @@ ir.cpp: # 390| r2_1(int) = Constant[-1] : # 390| r2_2(glval) = VariableAddress[y] : # 390| mu2_3(int) = Store : &:r2_2, r2_1 -# 390| r2_4(glval) = CopyValue : r2_2 -# 391| v2_5(void) = NoOp : +# 391| v2_4(void) = NoOp : #-----| Goto -> Block 9 # 393| Block 3 @@ -1884,8 +1776,7 @@ ir.cpp: # 395| r4_1(int) = Constant[1] : # 395| r4_2(glval) = VariableAddress[y] : # 395| mu4_3(int) = Store : &:r4_2, r4_1 -# 395| r4_4(glval) = CopyValue : r4_2 -# 396| v4_5(void) = NoOp : +# 396| v4_4(void) = NoOp : #-----| Goto -> Block 9 # 398| Block 5 @@ -1893,7 +1784,6 @@ ir.cpp: # 399| r5_1(int) = Constant[3] : # 399| r5_2(glval) = VariableAddress[y] : # 399| mu5_3(int) = Store : &:r5_2, r5_1 -# 399| r5_4(glval) = CopyValue : r5_2 #-----| Goto -> Block 6 # 400| Block 6 @@ -1901,8 +1791,7 @@ ir.cpp: # 401| r6_1(int) = Constant[4] : # 401| r6_2(glval) = VariableAddress[y] : # 401| mu6_3(int) = Store : &:r6_2, r6_1 -# 401| r6_4(glval) = CopyValue : r6_2 -# 402| v6_5(void) = NoOp : +# 402| v6_4(void) = NoOp : #-----| Goto -> Block 9 # 404| Block 7 @@ -1910,15 +1799,13 @@ ir.cpp: # 405| r7_1(int) = Constant[0] : # 405| r7_2(glval) = VariableAddress[y] : # 405| mu7_3(int) = Store : &:r7_2, r7_1 -# 405| r7_4(glval) = CopyValue : r7_2 -# 406| v7_5(void) = NoOp : +# 406| v7_4(void) = NoOp : #-----| Goto -> Block 9 # 408| Block 8 # 408| r8_0(int) = Constant[5678] : # 408| r8_1(glval) = VariableAddress[y] : # 408| mu8_2(int) = Store : &:r8_1, r8_0 -# 408| r8_3(glval) = CopyValue : r8_1 #-----| Goto -> Block 9 # 409| Block 9 @@ -1955,23 +1842,21 @@ ir.cpp: # 428| r0_6(glval) = VariableAddress[pt] : # 428| r0_7(glval) = FieldAddress[x] : r0_6 # 428| mu0_8(int) = Store : &:r0_7, r0_5 -# 428| r0_9(glval) = CopyValue : r0_7 -# 429| r0_10(glval) = VariableAddress[pt] : -# 429| r0_11(glval) = FieldAddress[x] : r0_10 -# 429| r0_12(int) = Load : &:r0_11, ~mu0_2 -# 429| r0_13(glval) = VariableAddress[pt] : -# 429| r0_14(glval) = FieldAddress[y] : r0_13 -# 429| mu0_15(int) = Store : &:r0_14, r0_12 -# 429| r0_16(glval) = CopyValue : r0_14 -# 430| r0_17(glval) = VariableAddress[p] : -# 430| r0_18(glval) = VariableAddress[pt] : -# 430| r0_19(glval) = FieldAddress[y] : r0_18 -# 430| r0_20(int *) = CopyValue : r0_19 -# 430| mu0_21(int *) = Store : &:r0_17, r0_20 -# 431| v0_22(void) = NoOp : -# 426| v0_23(void) = ReturnVoid : -# 426| v0_24(void) = UnmodeledUse : mu* -# 426| v0_25(void) = ExitFunction : +# 429| r0_9(glval) = VariableAddress[pt] : +# 429| r0_10(glval) = FieldAddress[x] : r0_9 +# 429| r0_11(int) = Load : &:r0_10, ~mu0_2 +# 429| r0_12(glval) = VariableAddress[pt] : +# 429| r0_13(glval) = FieldAddress[y] : r0_12 +# 429| mu0_14(int) = Store : &:r0_13, r0_11 +# 430| r0_15(glval) = VariableAddress[p] : +# 430| r0_16(glval) = VariableAddress[pt] : +# 430| r0_17(glval) = FieldAddress[y] : r0_16 +# 430| r0_18(int *) = CopyValue : r0_17 +# 430| mu0_19(int *) = Store : &:r0_15, r0_18 +# 431| v0_20(void) = NoOp : +# 426| v0_21(void) = ReturnVoid : +# 426| v0_22(void) = UnmodeledUse : mu* +# 426| v0_23(void) = ExitFunction : # 433| void LogicalOr(bool, bool) # 433| Block 0 @@ -2001,7 +1886,6 @@ ir.cpp: # 436| r2_0(int) = Constant[7] : # 436| r2_1(glval) = VariableAddress[x] : # 436| mu2_2(int) = Store : &:r2_1, r2_0 -# 436| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 439| Block 3 @@ -2022,14 +1906,12 @@ ir.cpp: # 440| r5_0(int) = Constant[1] : # 440| r5_1(glval) = VariableAddress[x] : # 440| mu5_2(int) = Store : &:r5_1, r5_0 -# 440| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 7 # 443| Block 6 # 443| r6_0(int) = Constant[5] : # 443| r6_1(glval) = VariableAddress[x] : # 443| mu6_2(int) = Store : &:r6_1, r6_0 -# 443| r6_3(glval) = CopyValue : r6_1 #-----| Goto -> Block 7 # 445| Block 7 @@ -2066,7 +1948,6 @@ ir.cpp: # 450| r2_0(int) = Constant[7] : # 450| r2_1(glval) = VariableAddress[x] : # 450| mu2_2(int) = Store : &:r2_1, r2_0 -# 450| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 453| Block 3 @@ -2087,14 +1968,12 @@ ir.cpp: # 454| r5_0(int) = Constant[1] : # 454| r5_1(glval) = VariableAddress[x] : # 454| mu5_2(int) = Store : &:r5_1, r5_0 -# 454| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 7 # 457| Block 6 # 457| r6_0(int) = Constant[5] : # 457| r6_1(glval) = VariableAddress[x] : # 457| mu6_2(int) = Store : &:r6_1, r6_0 -# 457| r6_3(glval) = CopyValue : r6_1 #-----| Goto -> Block 7 # 459| Block 7 @@ -2124,7 +2003,6 @@ ir.cpp: # 464| r1_0(int) = Constant[1] : # 464| r1_1(glval) = VariableAddress[x] : # 464| mu1_2(int) = Store : &:r1_1, r1_0 -# 464| r1_3(glval) = CopyValue : r1_1 #-----| Goto -> Block 2 # 467| Block 2 @@ -2145,14 +2023,12 @@ ir.cpp: # 468| r4_0(int) = Constant[2] : # 468| r4_1(glval) = VariableAddress[x] : # 468| mu4_2(int) = Store : &:r4_1, r4_0 -# 468| r4_3(glval) = CopyValue : r4_1 #-----| Goto -> Block 6 # 471| Block 5 # 471| r5_0(int) = Constant[3] : # 471| r5_1(glval) = VariableAddress[x] : # 471| mu5_2(int) = Store : &:r5_1, r5_0 -# 471| r5_3(glval) = CopyValue : r5_1 #-----| Goto -> Block 6 # 473| Block 6 @@ -2196,10 +2072,9 @@ ir.cpp: # 478| r3_1(bool) = Load : &:r3_0, ~mu0_2 # 478| r3_2(glval) = VariableAddress[x] : # 478| mu3_3(bool) = Store : &:r3_2, r3_1 -# 478| r3_4(glval) = CopyValue : r3_2 -# 479| r3_5(glval) = VariableAddress[a] : -# 479| r3_6(bool) = Load : &:r3_5, ~mu0_2 -# 479| v3_7(void) = ConditionalBranch : r3_6 +# 479| r3_4(glval) = VariableAddress[a] : +# 479| r3_5(bool) = Load : &:r3_4, ~mu0_2 +# 479| v3_6(void) = ConditionalBranch : r3_5 #-----| False -> Block 9 #-----| True -> Block 8 @@ -2228,11 +2103,10 @@ ir.cpp: # 479| r7_2(bool) = LogicalNot : r7_1 # 479| r7_3(glval) = VariableAddress[x] : # 479| mu7_4(bool) = Store : &:r7_3, r7_2 -# 479| r7_5(glval) = CopyValue : r7_3 -# 480| v7_6(void) = NoOp : -# 475| v7_7(void) = ReturnVoid : -# 475| v7_8(void) = UnmodeledUse : mu* -# 475| v7_9(void) = ExitFunction : +# 480| v7_5(void) = NoOp : +# 475| v7_6(void) = ReturnVoid : +# 475| v7_7(void) = UnmodeledUse : mu* +# 475| v7_8(void) = ExitFunction : # 479| Block 8 # 479| r8_0(glval) = VariableAddress[#temp479:11] : @@ -2258,10 +2132,9 @@ ir.cpp: # 477| r11_1(bool) = Load : &:r11_0, ~mu0_2 # 477| r11_2(glval) = VariableAddress[x] : # 477| mu11_3(bool) = Store : &:r11_2, r11_1 -# 477| r11_4(glval) = CopyValue : r11_2 -# 478| r11_5(glval) = VariableAddress[a] : -# 478| r11_6(bool) = Load : &:r11_5, ~mu0_2 -# 478| v11_7(void) = ConditionalBranch : r11_6 +# 478| r11_4(glval) = VariableAddress[a] : +# 478| r11_5(bool) = Load : &:r11_4, ~mu0_2 +# 478| v11_6(void) = ConditionalBranch : r11_5 #-----| False -> Block 5 #-----| True -> Block 4 @@ -2334,11 +2207,10 @@ ir.cpp: # 489| r1_0(glval) = VariableAddress[#temp489:6] : # 489| r1_1(glval) = Load : &:r1_0, ~mu0_2 # 489| mu1_2(int) = Store : &:r1_1, r0_9 -# 489| r1_3(glval) = CopyValue : r1_1 -# 490| v1_4(void) = NoOp : -# 486| v1_5(void) = ReturnVoid : -# 486| v1_6(void) = UnmodeledUse : mu* -# 486| v1_7(void) = ExitFunction : +# 490| v1_3(void) = NoOp : +# 486| v1_4(void) = ReturnVoid : +# 486| v1_5(void) = UnmodeledUse : mu* +# 486| v1_6(void) = ExitFunction : # 489| Block 2 # 489| r2_0(glval) = VariableAddress[x] : @@ -2397,15 +2269,13 @@ ir.cpp: # 499| r0_9(int *) = Constant[0] : # 499| r0_10(glval) = VariableAddress[p] : # 499| mu0_11(int *) = Store : &:r0_10, r0_9 -# 499| r0_12(glval) = CopyValue : r0_10 -# 500| r0_13(int *) = Constant[0] : -# 500| r0_14(glval) = VariableAddress[q] : -# 500| mu0_15(int *) = Store : &:r0_14, r0_13 -# 500| r0_16(glval) = CopyValue : r0_14 -# 501| v0_17(void) = NoOp : -# 496| v0_18(void) = ReturnVoid : -# 496| v0_19(void) = UnmodeledUse : mu* -# 496| v0_20(void) = ExitFunction : +# 500| r0_12(int *) = Constant[0] : +# 500| r0_13(glval) = VariableAddress[q] : +# 500| mu0_14(int *) = Store : &:r0_13, r0_12 +# 501| v0_15(void) = NoOp : +# 496| v0_16(void) = ReturnVoid : +# 496| v0_17(void) = UnmodeledUse : mu* +# 496| v0_18(void) = ExitFunction : # 503| void InitList(int, float) # 503| Block 0 @@ -2633,8 +2503,7 @@ ir.cpp: # 540| r3_1(int) = Load : &:r3_0, ~mu0_2 # 540| r3_2(glval) = VariableAddress[y] : # 540| mu3_3(int) = Store : &:r3_2, r3_1 -# 540| r3_4(glval) = CopyValue : r3_2 -# 541| v3_5(void) = NoOp : +# 541| v3_4(void) = NoOp : #-----| Goto -> Block 1 # 543| int EarlyReturnValue(int, int) @@ -2837,24 +2706,21 @@ ir.cpp: # 592| r0_7(..(*)(..)) = CopyValue : r0_6 # 592| r0_8(glval<..(*)(..)>) = VariableAddress[pfn] : # 592| mu0_9(..(*)(..)) = Store : &:r0_8, r0_7 -# 592| r0_10(glval<..(*)(..)>) = CopyValue : r0_8 -# 593| r0_11(glval<..(*)(..)>) = FunctionAddress[FuncPtrTarget] : -# 593| r0_12(..(*)(..)) = CopyValue : r0_11 -# 593| r0_13(glval<..(*)(..)>) = VariableAddress[pfn] : -# 593| mu0_14(..(*)(..)) = Store : &:r0_13, r0_12 -# 593| r0_15(glval<..(*)(..)>) = CopyValue : r0_13 -# 594| r0_16(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : +# 593| r0_10(glval<..(*)(..)>) = FunctionAddress[FuncPtrTarget] : +# 593| r0_11(..(*)(..)) = CopyValue : r0_10 +# 593| r0_12(glval<..(*)(..)>) = VariableAddress[pfn] : +# 593| mu0_13(..(*)(..)) = Store : &:r0_12, r0_11 +# 594| r0_14(glval<..()(..)>) = FunctionAddress[FuncPtrTarget] : +# 594| r0_15(..(*)(..)) = CopyValue : r0_14 +# 594| r0_16(..(*)(..)) = CopyValue : r0_15 # 594| r0_17(..(*)(..)) = CopyValue : r0_16 # 594| r0_18(..(*)(..)) = CopyValue : r0_17 -# 594| r0_19(..(*)(..)) = CopyValue : r0_18 -# 594| r0_20(..(*)(..)) = CopyValue : r0_19 -# 594| r0_21(glval<..(*)(..)>) = VariableAddress[pfn] : -# 594| mu0_22(..(*)(..)) = Store : &:r0_21, r0_20 -# 594| r0_23(glval<..(*)(..)>) = CopyValue : r0_21 -# 595| v0_24(void) = NoOp : -# 590| v0_25(void) = ReturnVoid : -# 590| v0_26(void) = UnmodeledUse : mu* -# 590| v0_27(void) = ExitFunction : +# 594| r0_19(glval<..(*)(..)>) = VariableAddress[pfn] : +# 594| mu0_20(..(*)(..)) = Store : &:r0_19, r0_18 +# 595| v0_21(void) = NoOp : +# 590| v0_22(void) = ReturnVoid : +# 590| v0_23(void) = UnmodeledUse : mu* +# 590| v0_24(void) = ExitFunction : # 615| void DeclareObject() # 615| Block 0 @@ -2991,43 +2857,37 @@ ir.cpp: # 643| r0_5(C *) = CopyValue : r0_3 # 643| r0_6(glval) = FieldAddress[m_a] : r0_5 # 643| mu0_7(int) = Store : &:r0_6, r0_4 -# 643| r0_8(glval) = CopyValue : r0_6 -# 644| r0_9(int) = Constant[1] : -# 644| r0_10(C *) = CopyValue : r0_3 -# 644| r0_11(glval) = CopyValue : r0_10 -# 644| r0_12(glval) = FieldAddress[m_a] : r0_11 -# 644| mu0_13(int) = Store : &:r0_12, r0_9 -# 644| r0_14(glval) = CopyValue : r0_12 -# 645| r0_15(int) = Constant[2] : -#-----| r0_16(C *) = CopyValue : r0_3 -# 645| r0_17(glval) = FieldAddress[m_a] : r0_16 -# 645| mu0_18(int) = Store : &:r0_17, r0_15 -# 645| r0_19(glval) = CopyValue : r0_17 -# 646| r0_20(glval) = VariableAddress[x] : -# 646| mu0_21(int) = Uninitialized[x] : &:r0_20 -# 647| r0_22(C *) = CopyValue : r0_3 -# 647| r0_23(glval) = FieldAddress[m_a] : r0_22 -# 647| r0_24(int) = Load : &:r0_23, ~mu0_2 -# 647| r0_25(glval) = VariableAddress[x] : -# 647| mu0_26(int) = Store : &:r0_25, r0_24 -# 647| r0_27(glval) = CopyValue : r0_25 -# 648| r0_28(C *) = CopyValue : r0_3 -# 648| r0_29(glval) = CopyValue : r0_28 -# 648| r0_30(glval) = FieldAddress[m_a] : r0_29 -# 648| r0_31(int) = Load : &:r0_30, ~mu0_2 -# 648| r0_32(glval) = VariableAddress[x] : -# 648| mu0_33(int) = Store : &:r0_32, r0_31 -# 648| r0_34(glval) = CopyValue : r0_32 -#-----| r0_35(C *) = CopyValue : r0_3 -# 649| r0_36(glval) = FieldAddress[m_a] : r0_35 -# 649| r0_37(int) = Load : &:r0_36, ~mu0_2 -# 649| r0_38(glval) = VariableAddress[x] : -# 649| mu0_39(int) = Store : &:r0_38, r0_37 -# 649| r0_40(glval) = CopyValue : r0_38 -# 650| v0_41(void) = NoOp : -# 642| v0_42(void) = ReturnVoid : -# 642| v0_43(void) = UnmodeledUse : mu* -# 642| v0_44(void) = ExitFunction : +# 644| r0_8(int) = Constant[1] : +# 644| r0_9(C *) = CopyValue : r0_3 +# 644| r0_10(glval) = CopyValue : r0_9 +# 644| r0_11(glval) = FieldAddress[m_a] : r0_10 +# 644| mu0_12(int) = Store : &:r0_11, r0_8 +# 645| r0_13(int) = Constant[2] : +#-----| r0_14(C *) = CopyValue : r0_3 +# 645| r0_15(glval) = FieldAddress[m_a] : r0_14 +# 645| mu0_16(int) = Store : &:r0_15, r0_13 +# 646| r0_17(glval) = VariableAddress[x] : +# 646| mu0_18(int) = Uninitialized[x] : &:r0_17 +# 647| r0_19(C *) = CopyValue : r0_3 +# 647| r0_20(glval) = FieldAddress[m_a] : r0_19 +# 647| r0_21(int) = Load : &:r0_20, ~mu0_2 +# 647| r0_22(glval) = VariableAddress[x] : +# 647| mu0_23(int) = Store : &:r0_22, r0_21 +# 648| r0_24(C *) = CopyValue : r0_3 +# 648| r0_25(glval) = CopyValue : r0_24 +# 648| r0_26(glval) = FieldAddress[m_a] : r0_25 +# 648| r0_27(int) = Load : &:r0_26, ~mu0_2 +# 648| r0_28(glval) = VariableAddress[x] : +# 648| mu0_29(int) = Store : &:r0_28, r0_27 +#-----| r0_30(C *) = CopyValue : r0_3 +# 649| r0_31(glval) = FieldAddress[m_a] : r0_30 +# 649| r0_32(int) = Load : &:r0_31, ~mu0_2 +# 649| r0_33(glval) = VariableAddress[x] : +# 649| mu0_34(int) = Store : &:r0_33, r0_32 +# 650| v0_35(void) = NoOp : +# 642| v0_36(void) = ReturnVoid : +# 642| v0_37(void) = UnmodeledUse : mu* +# 642| v0_38(void) = ExitFunction : # 652| void C::MethodCalls() # 652| Block 0 @@ -3363,7 +3223,6 @@ ir.cpp: # 731| r6_4(int) = Load : &:r6_3, ~mu0_2 # 731| r6_5(glval) = VariableAddress[x] : # 731| mu6_6(int) = Store : &:r6_5, r6_4 -# 731| r6_7(glval) = CopyValue : r6_5 #-----| Goto -> Block 8 # 731| Block 7 @@ -3382,7 +3241,6 @@ ir.cpp: # 733| r8_0(int) = Constant[7] : # 733| r8_1(glval) = VariableAddress[x] : # 733| mu8_2(int) = Store : &:r8_1, r8_0 -# 733| r8_3(glval) = CopyValue : r8_1 #-----| Goto -> Block 14 # 735| Block 9 @@ -3898,219 +3756,203 @@ ir.cpp: # 811| r0_79(Base *) = ConvertToBase[Middle : Base] : r0_78 # 811| r0_80(glval) = VariableAddress[pb] : # 811| mu0_81(Base *) = Store : &:r0_80, r0_79 -# 811| r0_82(glval) = CopyValue : r0_80 -# 812| r0_83(glval) = VariableAddress[pm] : -# 812| r0_84(Middle *) = Load : &:r0_83, ~mu0_2 -# 812| r0_85(Base *) = ConvertToBase[Middle : Base] : r0_84 -# 812| r0_86(glval) = VariableAddress[pb] : -# 812| mu0_87(Base *) = Store : &:r0_86, r0_85 -# 812| r0_88(glval) = CopyValue : r0_86 -# 813| r0_89(glval) = VariableAddress[pm] : -# 813| r0_90(Middle *) = Load : &:r0_89, ~mu0_2 -# 813| r0_91(Base *) = ConvertToBase[Middle : Base] : r0_90 -# 813| r0_92(glval) = VariableAddress[pb] : -# 813| mu0_93(Base *) = Store : &:r0_92, r0_91 -# 813| r0_94(glval) = CopyValue : r0_92 -# 814| r0_95(glval) = VariableAddress[pm] : -# 814| r0_96(Middle *) = Load : &:r0_95, ~mu0_2 -# 814| r0_97(Base *) = Convert : r0_96 -# 814| r0_98(glval) = VariableAddress[pb] : -# 814| mu0_99(Base *) = Store : &:r0_98, r0_97 -# 814| r0_100(glval) = CopyValue : r0_98 -# 816| r0_101(glval) = VariableAddress[m] : -# 816| r0_102(glval) = FunctionAddress[operator=] : -# 816| r0_103(glval) = VariableAddress[b] : -# 816| r0_104(glval) = ConvertToDerived[Middle : Base] : r0_103 -# 816| r0_105(glval) = Convert : r0_104 -# 816| r0_106(Middle &) = CopyValue : r0_105 -# 816| r0_107(Middle &) = Call : func:r0_102, this:r0_101, 0:r0_106 -# 816| mu0_108(unknown) = ^CallSideEffect : ~mu0_2 -# 816| v0_109(void) = ^IndirectReadSideEffect[-1] : &:r0_101, ~mu0_2 -# 816| v0_110(void) = ^IndirectReadSideEffect[0] : &:r0_106, ~mu0_2 -# 816| mu0_111(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r0_101 -# 816| mu0_112(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_106 -# 816| r0_113(glval) = CopyValue : r0_107 -# 817| r0_114(glval) = VariableAddress[m] : -# 817| r0_115(glval) = FunctionAddress[operator=] : -# 817| r0_116(glval) = VariableAddress[b] : -# 817| r0_117(glval) = ConvertToDerived[Middle : Base] : r0_116 -# 817| r0_118(glval) = Convert : r0_117 -# 817| r0_119(Middle &) = CopyValue : r0_118 -# 817| r0_120(Middle &) = Call : func:r0_115, this:r0_114, 0:r0_119 -# 817| mu0_121(unknown) = ^CallSideEffect : ~mu0_2 -# 817| v0_122(void) = ^IndirectReadSideEffect[-1] : &:r0_114, ~mu0_2 -# 817| v0_123(void) = ^IndirectReadSideEffect[0] : &:r0_119, ~mu0_2 -# 817| mu0_124(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r0_114 -# 817| mu0_125(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_119 -# 817| r0_126(glval) = CopyValue : r0_120 -# 818| r0_127(glval) = VariableAddress[pb] : -# 818| r0_128(Base *) = Load : &:r0_127, ~mu0_2 -# 818| r0_129(Middle *) = ConvertToDerived[Middle : Base] : r0_128 -# 818| r0_130(glval) = VariableAddress[pm] : -# 818| mu0_131(Middle *) = Store : &:r0_130, r0_129 -# 818| r0_132(glval) = CopyValue : r0_130 -# 819| r0_133(glval) = VariableAddress[pb] : -# 819| r0_134(Base *) = Load : &:r0_133, ~mu0_2 -# 819| r0_135(Middle *) = ConvertToDerived[Middle : Base] : r0_134 -# 819| r0_136(glval) = VariableAddress[pm] : -# 819| mu0_137(Middle *) = Store : &:r0_136, r0_135 -# 819| r0_138(glval) = CopyValue : r0_136 -# 820| r0_139(glval) = VariableAddress[pb] : -# 820| r0_140(Base *) = Load : &:r0_139, ~mu0_2 -# 820| r0_141(Middle *) = Convert : r0_140 -# 820| r0_142(glval) = VariableAddress[pm] : -# 820| mu0_143(Middle *) = Store : &:r0_142, r0_141 -# 820| r0_144(glval) = CopyValue : r0_142 -# 822| r0_145(glval) = VariableAddress[b] : -# 822| r0_146(glval) = FunctionAddress[operator=] : -# 822| r0_147(glval) = VariableAddress[d] : -# 822| r0_148(glval) = ConvertToBase[Derived : Middle] : r0_147 -# 822| r0_149(glval) = ConvertToBase[Middle : Base] : r0_148 -# 822| r0_150(Base &) = CopyValue : r0_149 -# 822| r0_151(Base &) = Call : func:r0_146, this:r0_145, 0:r0_150 -# 822| mu0_152(unknown) = ^CallSideEffect : ~mu0_2 -# 822| v0_153(void) = ^IndirectReadSideEffect[-1] : &:r0_145, ~mu0_2 -# 822| v0_154(void) = ^IndirectReadSideEffect[0] : &:r0_150, ~mu0_2 -# 822| mu0_155(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_145 -# 822| mu0_156(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_150 -# 822| r0_157(glval) = CopyValue : r0_151 -# 823| r0_158(glval) = VariableAddress[b] : -# 823| r0_159(glval) = FunctionAddress[operator=] : -# 823| r0_160(glval) = FunctionAddress[Base] : -# 823| r0_161(glval) = VariableAddress[d] : -# 823| r0_162(glval) = ConvertToBase[Derived : Middle] : r0_161 -# 823| r0_163(glval) = ConvertToBase[Middle : Base] : r0_162 -# 823| r0_164(Base &) = CopyValue : r0_163 -# 823| v0_165(void) = Call : func:r0_160, 0:r0_164 -# 823| mu0_166(unknown) = ^CallSideEffect : ~mu0_2 -# 823| v0_167(void) = ^IndirectReadSideEffect[0] : &:r0_164, ~mu0_2 -# 823| mu0_168(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_164 -# 823| r0_169(glval) = Convert : v0_165 -# 823| r0_170(Base &) = CopyValue : r0_169 -# 823| r0_171(Base &) = Call : func:r0_159, this:r0_158, 0:r0_170 -# 823| mu0_172(unknown) = ^CallSideEffect : ~mu0_2 -# 823| v0_173(void) = ^IndirectReadSideEffect[-1] : &:r0_158, ~mu0_2 -# 823| v0_174(void) = ^IndirectReadSideEffect[0] : &:r0_170, ~mu0_2 -# 823| mu0_175(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_158 -# 823| mu0_176(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_170 -# 823| r0_177(glval) = CopyValue : r0_171 -# 824| r0_178(glval) = VariableAddress[b] : -# 824| r0_179(glval) = FunctionAddress[operator=] : -# 824| r0_180(glval) = FunctionAddress[Base] : -# 824| r0_181(glval) = VariableAddress[d] : -# 824| r0_182(glval) = ConvertToBase[Derived : Middle] : r0_181 -# 824| r0_183(glval) = ConvertToBase[Middle : Base] : r0_182 -# 824| r0_184(Base &) = CopyValue : r0_183 -# 824| v0_185(void) = Call : func:r0_180, 0:r0_184 -# 824| mu0_186(unknown) = ^CallSideEffect : ~mu0_2 -# 824| v0_187(void) = ^IndirectReadSideEffect[0] : &:r0_184, ~mu0_2 -# 824| mu0_188(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_184 -# 824| r0_189(glval) = Convert : v0_185 -# 824| r0_190(Base &) = CopyValue : r0_189 -# 824| r0_191(Base &) = Call : func:r0_179, this:r0_178, 0:r0_190 -# 824| mu0_192(unknown) = ^CallSideEffect : ~mu0_2 -# 824| v0_193(void) = ^IndirectReadSideEffect[-1] : &:r0_178, ~mu0_2 -# 824| v0_194(void) = ^IndirectReadSideEffect[0] : &:r0_190, ~mu0_2 -# 824| mu0_195(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_178 -# 824| mu0_196(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_190 -# 824| r0_197(glval) = CopyValue : r0_191 -# 825| r0_198(glval) = VariableAddress[pd] : -# 825| r0_199(Derived *) = Load : &:r0_198, ~mu0_2 -# 825| r0_200(Middle *) = ConvertToBase[Derived : Middle] : r0_199 -# 825| r0_201(Base *) = ConvertToBase[Middle : Base] : r0_200 -# 825| r0_202(glval) = VariableAddress[pb] : -# 825| mu0_203(Base *) = Store : &:r0_202, r0_201 -# 825| r0_204(glval) = CopyValue : r0_202 -# 826| r0_205(glval) = VariableAddress[pd] : -# 826| r0_206(Derived *) = Load : &:r0_205, ~mu0_2 -# 826| r0_207(Middle *) = ConvertToBase[Derived : Middle] : r0_206 -# 826| r0_208(Base *) = ConvertToBase[Middle : Base] : r0_207 -# 826| r0_209(glval) = VariableAddress[pb] : -# 826| mu0_210(Base *) = Store : &:r0_209, r0_208 -# 826| r0_211(glval) = CopyValue : r0_209 -# 827| r0_212(glval) = VariableAddress[pd] : -# 827| r0_213(Derived *) = Load : &:r0_212, ~mu0_2 -# 827| r0_214(Middle *) = ConvertToBase[Derived : Middle] : r0_213 -# 827| r0_215(Base *) = ConvertToBase[Middle : Base] : r0_214 -# 827| r0_216(glval) = VariableAddress[pb] : -# 827| mu0_217(Base *) = Store : &:r0_216, r0_215 -# 827| r0_218(glval) = CopyValue : r0_216 -# 828| r0_219(glval) = VariableAddress[pd] : -# 828| r0_220(Derived *) = Load : &:r0_219, ~mu0_2 -# 828| r0_221(Base *) = Convert : r0_220 -# 828| r0_222(glval) = VariableAddress[pb] : -# 828| mu0_223(Base *) = Store : &:r0_222, r0_221 -# 828| r0_224(glval) = CopyValue : r0_222 -# 830| r0_225(glval) = VariableAddress[d] : -# 830| r0_226(glval) = FunctionAddress[operator=] : -# 830| r0_227(glval) = VariableAddress[b] : -# 830| r0_228(glval) = ConvertToDerived[Middle : Base] : r0_227 -# 830| r0_229(glval) = ConvertToDerived[Derived : Middle] : r0_228 -# 830| r0_230(glval) = Convert : r0_229 -# 830| r0_231(Derived &) = CopyValue : r0_230 -# 830| r0_232(Derived &) = Call : func:r0_226, this:r0_225, 0:r0_231 -# 830| mu0_233(unknown) = ^CallSideEffect : ~mu0_2 -# 830| v0_234(void) = ^IndirectReadSideEffect[-1] : &:r0_225, ~mu0_2 -# 830| v0_235(void) = ^IndirectReadSideEffect[0] : &:r0_231, ~mu0_2 -# 830| mu0_236(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r0_225 -# 830| mu0_237(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_231 -# 830| r0_238(glval) = CopyValue : r0_232 -# 831| r0_239(glval) = VariableAddress[d] : -# 831| r0_240(glval) = FunctionAddress[operator=] : -# 831| r0_241(glval) = VariableAddress[b] : -# 831| r0_242(glval) = ConvertToDerived[Middle : Base] : r0_241 -# 831| r0_243(glval) = ConvertToDerived[Derived : Middle] : r0_242 -# 831| r0_244(glval) = Convert : r0_243 -# 831| r0_245(Derived &) = CopyValue : r0_244 -# 831| r0_246(Derived &) = Call : func:r0_240, this:r0_239, 0:r0_245 -# 831| mu0_247(unknown) = ^CallSideEffect : ~mu0_2 -# 831| v0_248(void) = ^IndirectReadSideEffect[-1] : &:r0_239, ~mu0_2 -# 831| v0_249(void) = ^IndirectReadSideEffect[0] : &:r0_245, ~mu0_2 -# 831| mu0_250(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r0_239 -# 831| mu0_251(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_245 -# 831| r0_252(glval) = CopyValue : r0_246 -# 832| r0_253(glval) = VariableAddress[pb] : -# 832| r0_254(Base *) = Load : &:r0_253, ~mu0_2 -# 832| r0_255(Middle *) = ConvertToDerived[Middle : Base] : r0_254 -# 832| r0_256(Derived *) = ConvertToDerived[Derived : Middle] : r0_255 -# 832| r0_257(glval) = VariableAddress[pd] : -# 832| mu0_258(Derived *) = Store : &:r0_257, r0_256 -# 832| r0_259(glval) = CopyValue : r0_257 -# 833| r0_260(glval) = VariableAddress[pb] : -# 833| r0_261(Base *) = Load : &:r0_260, ~mu0_2 -# 833| r0_262(Middle *) = ConvertToDerived[Middle : Base] : r0_261 -# 833| r0_263(Derived *) = ConvertToDerived[Derived : Middle] : r0_262 -# 833| r0_264(glval) = VariableAddress[pd] : -# 833| mu0_265(Derived *) = Store : &:r0_264, r0_263 -# 833| r0_266(glval) = CopyValue : r0_264 -# 834| r0_267(glval) = VariableAddress[pb] : -# 834| r0_268(Base *) = Load : &:r0_267, ~mu0_2 -# 834| r0_269(Derived *) = Convert : r0_268 -# 834| r0_270(glval) = VariableAddress[pd] : -# 834| mu0_271(Derived *) = Store : &:r0_270, r0_269 -# 834| r0_272(glval) = CopyValue : r0_270 -# 836| r0_273(glval) = VariableAddress[pmv] : -# 836| r0_274(MiddleVB1 *) = Constant[0] : -# 836| mu0_275(MiddleVB1 *) = Store : &:r0_273, r0_274 -# 837| r0_276(glval) = VariableAddress[pdv] : -# 837| r0_277(DerivedVB *) = Constant[0] : -# 837| mu0_278(DerivedVB *) = Store : &:r0_276, r0_277 -# 838| r0_279(glval) = VariableAddress[pmv] : -# 838| r0_280(MiddleVB1 *) = Load : &:r0_279, ~mu0_2 -# 838| r0_281(Base *) = ConvertToVirtualBase[MiddleVB1 : Base] : r0_280 -# 838| r0_282(glval) = VariableAddress[pb] : -# 838| mu0_283(Base *) = Store : &:r0_282, r0_281 -# 838| r0_284(glval) = CopyValue : r0_282 -# 839| r0_285(glval) = VariableAddress[pdv] : -# 839| r0_286(DerivedVB *) = Load : &:r0_285, ~mu0_2 -# 839| r0_287(Base *) = ConvertToVirtualBase[DerivedVB : Base] : r0_286 -# 839| r0_288(glval) = VariableAddress[pb] : -# 839| mu0_289(Base *) = Store : &:r0_288, r0_287 -# 839| r0_290(glval) = CopyValue : r0_288 -# 840| v0_291(void) = NoOp : -# 799| v0_292(void) = ReturnVoid : -# 799| v0_293(void) = UnmodeledUse : mu* -# 799| v0_294(void) = ExitFunction : +# 812| r0_82(glval) = VariableAddress[pm] : +# 812| r0_83(Middle *) = Load : &:r0_82, ~mu0_2 +# 812| r0_84(Base *) = ConvertToBase[Middle : Base] : r0_83 +# 812| r0_85(glval) = VariableAddress[pb] : +# 812| mu0_86(Base *) = Store : &:r0_85, r0_84 +# 813| r0_87(glval) = VariableAddress[pm] : +# 813| r0_88(Middle *) = Load : &:r0_87, ~mu0_2 +# 813| r0_89(Base *) = ConvertToBase[Middle : Base] : r0_88 +# 813| r0_90(glval) = VariableAddress[pb] : +# 813| mu0_91(Base *) = Store : &:r0_90, r0_89 +# 814| r0_92(glval) = VariableAddress[pm] : +# 814| r0_93(Middle *) = Load : &:r0_92, ~mu0_2 +# 814| r0_94(Base *) = Convert : r0_93 +# 814| r0_95(glval) = VariableAddress[pb] : +# 814| mu0_96(Base *) = Store : &:r0_95, r0_94 +# 816| r0_97(glval) = VariableAddress[m] : +# 816| r0_98(glval) = FunctionAddress[operator=] : +# 816| r0_99(glval) = VariableAddress[b] : +# 816| r0_100(glval) = ConvertToDerived[Middle : Base] : r0_99 +# 816| r0_101(glval) = Convert : r0_100 +# 816| r0_102(Middle &) = CopyValue : r0_101 +# 816| r0_103(Middle &) = Call : func:r0_98, this:r0_97, 0:r0_102 +# 816| mu0_104(unknown) = ^CallSideEffect : ~mu0_2 +# 816| v0_105(void) = ^IndirectReadSideEffect[-1] : &:r0_97, ~mu0_2 +# 816| v0_106(void) = ^IndirectReadSideEffect[0] : &:r0_102, ~mu0_2 +# 816| mu0_107(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r0_97 +# 816| mu0_108(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_102 +# 816| r0_109(glval) = CopyValue : r0_103 +# 817| r0_110(glval) = VariableAddress[m] : +# 817| r0_111(glval) = FunctionAddress[operator=] : +# 817| r0_112(glval) = VariableAddress[b] : +# 817| r0_113(glval) = ConvertToDerived[Middle : Base] : r0_112 +# 817| r0_114(glval) = Convert : r0_113 +# 817| r0_115(Middle &) = CopyValue : r0_114 +# 817| r0_116(Middle &) = Call : func:r0_111, this:r0_110, 0:r0_115 +# 817| mu0_117(unknown) = ^CallSideEffect : ~mu0_2 +# 817| v0_118(void) = ^IndirectReadSideEffect[-1] : &:r0_110, ~mu0_2 +# 817| v0_119(void) = ^IndirectReadSideEffect[0] : &:r0_115, ~mu0_2 +# 817| mu0_120(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r0_110 +# 817| mu0_121(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_115 +# 817| r0_122(glval) = CopyValue : r0_116 +# 818| r0_123(glval) = VariableAddress[pb] : +# 818| r0_124(Base *) = Load : &:r0_123, ~mu0_2 +# 818| r0_125(Middle *) = ConvertToDerived[Middle : Base] : r0_124 +# 818| r0_126(glval) = VariableAddress[pm] : +# 818| mu0_127(Middle *) = Store : &:r0_126, r0_125 +# 819| r0_128(glval) = VariableAddress[pb] : +# 819| r0_129(Base *) = Load : &:r0_128, ~mu0_2 +# 819| r0_130(Middle *) = ConvertToDerived[Middle : Base] : r0_129 +# 819| r0_131(glval) = VariableAddress[pm] : +# 819| mu0_132(Middle *) = Store : &:r0_131, r0_130 +# 820| r0_133(glval) = VariableAddress[pb] : +# 820| r0_134(Base *) = Load : &:r0_133, ~mu0_2 +# 820| r0_135(Middle *) = Convert : r0_134 +# 820| r0_136(glval) = VariableAddress[pm] : +# 820| mu0_137(Middle *) = Store : &:r0_136, r0_135 +# 822| r0_138(glval) = VariableAddress[b] : +# 822| r0_139(glval) = FunctionAddress[operator=] : +# 822| r0_140(glval) = VariableAddress[d] : +# 822| r0_141(glval) = ConvertToBase[Derived : Middle] : r0_140 +# 822| r0_142(glval) = ConvertToBase[Middle : Base] : r0_141 +# 822| r0_143(Base &) = CopyValue : r0_142 +# 822| r0_144(Base &) = Call : func:r0_139, this:r0_138, 0:r0_143 +# 822| mu0_145(unknown) = ^CallSideEffect : ~mu0_2 +# 822| v0_146(void) = ^IndirectReadSideEffect[-1] : &:r0_138, ~mu0_2 +# 822| v0_147(void) = ^IndirectReadSideEffect[0] : &:r0_143, ~mu0_2 +# 822| mu0_148(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_138 +# 822| mu0_149(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_143 +# 822| r0_150(glval) = CopyValue : r0_144 +# 823| r0_151(glval) = VariableAddress[b] : +# 823| r0_152(glval) = FunctionAddress[operator=] : +# 823| r0_153(glval) = FunctionAddress[Base] : +# 823| r0_154(glval) = VariableAddress[d] : +# 823| r0_155(glval) = ConvertToBase[Derived : Middle] : r0_154 +# 823| r0_156(glval) = ConvertToBase[Middle : Base] : r0_155 +# 823| r0_157(Base &) = CopyValue : r0_156 +# 823| v0_158(void) = Call : func:r0_153, 0:r0_157 +# 823| mu0_159(unknown) = ^CallSideEffect : ~mu0_2 +# 823| v0_160(void) = ^IndirectReadSideEffect[0] : &:r0_157, ~mu0_2 +# 823| mu0_161(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_157 +# 823| r0_162(glval) = Convert : v0_158 +# 823| r0_163(Base &) = CopyValue : r0_162 +# 823| r0_164(Base &) = Call : func:r0_152, this:r0_151, 0:r0_163 +# 823| mu0_165(unknown) = ^CallSideEffect : ~mu0_2 +# 823| v0_166(void) = ^IndirectReadSideEffect[-1] : &:r0_151, ~mu0_2 +# 823| v0_167(void) = ^IndirectReadSideEffect[0] : &:r0_163, ~mu0_2 +# 823| mu0_168(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_151 +# 823| mu0_169(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_163 +# 823| r0_170(glval) = CopyValue : r0_164 +# 824| r0_171(glval) = VariableAddress[b] : +# 824| r0_172(glval) = FunctionAddress[operator=] : +# 824| r0_173(glval) = FunctionAddress[Base] : +# 824| r0_174(glval) = VariableAddress[d] : +# 824| r0_175(glval) = ConvertToBase[Derived : Middle] : r0_174 +# 824| r0_176(glval) = ConvertToBase[Middle : Base] : r0_175 +# 824| r0_177(Base &) = CopyValue : r0_176 +# 824| v0_178(void) = Call : func:r0_173, 0:r0_177 +# 824| mu0_179(unknown) = ^CallSideEffect : ~mu0_2 +# 824| v0_180(void) = ^IndirectReadSideEffect[0] : &:r0_177, ~mu0_2 +# 824| mu0_181(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_177 +# 824| r0_182(glval) = Convert : v0_178 +# 824| r0_183(Base &) = CopyValue : r0_182 +# 824| r0_184(Base &) = Call : func:r0_172, this:r0_171, 0:r0_183 +# 824| mu0_185(unknown) = ^CallSideEffect : ~mu0_2 +# 824| v0_186(void) = ^IndirectReadSideEffect[-1] : &:r0_171, ~mu0_2 +# 824| v0_187(void) = ^IndirectReadSideEffect[0] : &:r0_183, ~mu0_2 +# 824| mu0_188(Base) = ^IndirectMayWriteSideEffect[-1] : &:r0_171 +# 824| mu0_189(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_183 +# 824| r0_190(glval) = CopyValue : r0_184 +# 825| r0_191(glval) = VariableAddress[pd] : +# 825| r0_192(Derived *) = Load : &:r0_191, ~mu0_2 +# 825| r0_193(Middle *) = ConvertToBase[Derived : Middle] : r0_192 +# 825| r0_194(Base *) = ConvertToBase[Middle : Base] : r0_193 +# 825| r0_195(glval) = VariableAddress[pb] : +# 825| mu0_196(Base *) = Store : &:r0_195, r0_194 +# 826| r0_197(glval) = VariableAddress[pd] : +# 826| r0_198(Derived *) = Load : &:r0_197, ~mu0_2 +# 826| r0_199(Middle *) = ConvertToBase[Derived : Middle] : r0_198 +# 826| r0_200(Base *) = ConvertToBase[Middle : Base] : r0_199 +# 826| r0_201(glval) = VariableAddress[pb] : +# 826| mu0_202(Base *) = Store : &:r0_201, r0_200 +# 827| r0_203(glval) = VariableAddress[pd] : +# 827| r0_204(Derived *) = Load : &:r0_203, ~mu0_2 +# 827| r0_205(Middle *) = ConvertToBase[Derived : Middle] : r0_204 +# 827| r0_206(Base *) = ConvertToBase[Middle : Base] : r0_205 +# 827| r0_207(glval) = VariableAddress[pb] : +# 827| mu0_208(Base *) = Store : &:r0_207, r0_206 +# 828| r0_209(glval) = VariableAddress[pd] : +# 828| r0_210(Derived *) = Load : &:r0_209, ~mu0_2 +# 828| r0_211(Base *) = Convert : r0_210 +# 828| r0_212(glval) = VariableAddress[pb] : +# 828| mu0_213(Base *) = Store : &:r0_212, r0_211 +# 830| r0_214(glval) = VariableAddress[d] : +# 830| r0_215(glval) = FunctionAddress[operator=] : +# 830| r0_216(glval) = VariableAddress[b] : +# 830| r0_217(glval) = ConvertToDerived[Middle : Base] : r0_216 +# 830| r0_218(glval) = ConvertToDerived[Derived : Middle] : r0_217 +# 830| r0_219(glval) = Convert : r0_218 +# 830| r0_220(Derived &) = CopyValue : r0_219 +# 830| r0_221(Derived &) = Call : func:r0_215, this:r0_214, 0:r0_220 +# 830| mu0_222(unknown) = ^CallSideEffect : ~mu0_2 +# 830| v0_223(void) = ^IndirectReadSideEffect[-1] : &:r0_214, ~mu0_2 +# 830| v0_224(void) = ^IndirectReadSideEffect[0] : &:r0_220, ~mu0_2 +# 830| mu0_225(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r0_214 +# 830| mu0_226(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_220 +# 830| r0_227(glval) = CopyValue : r0_221 +# 831| r0_228(glval) = VariableAddress[d] : +# 831| r0_229(glval) = FunctionAddress[operator=] : +# 831| r0_230(glval) = VariableAddress[b] : +# 831| r0_231(glval) = ConvertToDerived[Middle : Base] : r0_230 +# 831| r0_232(glval) = ConvertToDerived[Derived : Middle] : r0_231 +# 831| r0_233(glval) = Convert : r0_232 +# 831| r0_234(Derived &) = CopyValue : r0_233 +# 831| r0_235(Derived &) = Call : func:r0_229, this:r0_228, 0:r0_234 +# 831| mu0_236(unknown) = ^CallSideEffect : ~mu0_2 +# 831| v0_237(void) = ^IndirectReadSideEffect[-1] : &:r0_228, ~mu0_2 +# 831| v0_238(void) = ^IndirectReadSideEffect[0] : &:r0_234, ~mu0_2 +# 831| mu0_239(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r0_228 +# 831| mu0_240(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_234 +# 831| r0_241(glval) = CopyValue : r0_235 +# 832| r0_242(glval) = VariableAddress[pb] : +# 832| r0_243(Base *) = Load : &:r0_242, ~mu0_2 +# 832| r0_244(Middle *) = ConvertToDerived[Middle : Base] : r0_243 +# 832| r0_245(Derived *) = ConvertToDerived[Derived : Middle] : r0_244 +# 832| r0_246(glval) = VariableAddress[pd] : +# 832| mu0_247(Derived *) = Store : &:r0_246, r0_245 +# 833| r0_248(glval) = VariableAddress[pb] : +# 833| r0_249(Base *) = Load : &:r0_248, ~mu0_2 +# 833| r0_250(Middle *) = ConvertToDerived[Middle : Base] : r0_249 +# 833| r0_251(Derived *) = ConvertToDerived[Derived : Middle] : r0_250 +# 833| r0_252(glval) = VariableAddress[pd] : +# 833| mu0_253(Derived *) = Store : &:r0_252, r0_251 +# 834| r0_254(glval) = VariableAddress[pb] : +# 834| r0_255(Base *) = Load : &:r0_254, ~mu0_2 +# 834| r0_256(Derived *) = Convert : r0_255 +# 834| r0_257(glval) = VariableAddress[pd] : +# 834| mu0_258(Derived *) = Store : &:r0_257, r0_256 +# 836| r0_259(glval) = VariableAddress[pmv] : +# 836| r0_260(MiddleVB1 *) = Constant[0] : +# 836| mu0_261(MiddleVB1 *) = Store : &:r0_259, r0_260 +# 837| r0_262(glval) = VariableAddress[pdv] : +# 837| r0_263(DerivedVB *) = Constant[0] : +# 837| mu0_264(DerivedVB *) = Store : &:r0_262, r0_263 +# 838| r0_265(glval) = VariableAddress[pmv] : +# 838| r0_266(MiddleVB1 *) = Load : &:r0_265, ~mu0_2 +# 838| r0_267(Base *) = ConvertToVirtualBase[MiddleVB1 : Base] : r0_266 +# 838| r0_268(glval) = VariableAddress[pb] : +# 838| mu0_269(Base *) = Store : &:r0_268, r0_267 +# 839| r0_270(glval) = VariableAddress[pdv] : +# 839| r0_271(DerivedVB *) = Load : &:r0_270, ~mu0_2 +# 839| r0_272(Base *) = ConvertToVirtualBase[DerivedVB : Base] : r0_271 +# 839| r0_273(glval) = VariableAddress[pb] : +# 839| mu0_274(Base *) = Store : &:r0_273, r0_272 +# 840| v0_275(void) = NoOp : +# 799| v0_276(void) = ReturnVoid : +# 799| v0_277(void) = UnmodeledUse : mu* +# 799| v0_278(void) = ExitFunction : # 842| void PolymorphicBase::PolymorphicBase() # 842| Block 0 @@ -4179,37 +4021,35 @@ ir.cpp: # 857| r0_21(PolymorphicBase *) = CheckedConvertOrNull : r0_20 # 857| r0_22(glval) = VariableAddress[pb] : # 857| mu0_23(PolymorphicBase *) = Store : &:r0_22, r0_21 -# 857| r0_24(glval) = CopyValue : r0_22 -# 858| r0_25(glval) = VariableAddress[rb] : -# 858| r0_26(glval) = VariableAddress[d] : -# 858| r0_27(glval) = CheckedConvertOrThrow : r0_26 -# 858| r0_28(PolymorphicBase &) = CopyValue : r0_27 -# 858| mu0_29(PolymorphicBase &) = Store : &:r0_25, r0_28 -# 860| r0_30(glval) = VariableAddress[pb] : -# 860| r0_31(PolymorphicBase *) = Load : &:r0_30, ~mu0_2 -# 860| r0_32(PolymorphicDerived *) = CheckedConvertOrNull : r0_31 -# 860| r0_33(glval) = VariableAddress[pd] : -# 860| mu0_34(PolymorphicDerived *) = Store : &:r0_33, r0_32 -# 860| r0_35(glval) = CopyValue : r0_33 -# 861| r0_36(glval) = VariableAddress[rd] : -# 861| r0_37(glval) = VariableAddress[b] : -# 861| r0_38(glval) = CheckedConvertOrThrow : r0_37 -# 861| r0_39(PolymorphicDerived &) = CopyValue : r0_38 -# 861| mu0_40(PolymorphicDerived &) = Store : &:r0_36, r0_39 -# 863| r0_41(glval) = VariableAddress[pv] : -# 863| r0_42(glval) = VariableAddress[pb] : -# 863| r0_43(PolymorphicBase *) = Load : &:r0_42, ~mu0_2 -# 863| r0_44(void *) = DynamicCastToVoid : r0_43 -# 863| mu0_45(void *) = Store : &:r0_41, r0_44 -# 864| r0_46(glval) = VariableAddress[pcv] : -# 864| r0_47(glval) = VariableAddress[pd] : -# 864| r0_48(PolymorphicDerived *) = Load : &:r0_47, ~mu0_2 -# 864| r0_49(void *) = DynamicCastToVoid : r0_48 -# 864| mu0_50(void *) = Store : &:r0_46, r0_49 -# 865| v0_51(void) = NoOp : -# 849| v0_52(void) = ReturnVoid : -# 849| v0_53(void) = UnmodeledUse : mu* -# 849| v0_54(void) = ExitFunction : +# 858| r0_24(glval) = VariableAddress[rb] : +# 858| r0_25(glval) = VariableAddress[d] : +# 858| r0_26(glval) = CheckedConvertOrThrow : r0_25 +# 858| r0_27(PolymorphicBase &) = CopyValue : r0_26 +# 858| mu0_28(PolymorphicBase &) = Store : &:r0_24, r0_27 +# 860| r0_29(glval) = VariableAddress[pb] : +# 860| r0_30(PolymorphicBase *) = Load : &:r0_29, ~mu0_2 +# 860| r0_31(PolymorphicDerived *) = CheckedConvertOrNull : r0_30 +# 860| r0_32(glval) = VariableAddress[pd] : +# 860| mu0_33(PolymorphicDerived *) = Store : &:r0_32, r0_31 +# 861| r0_34(glval) = VariableAddress[rd] : +# 861| r0_35(glval) = VariableAddress[b] : +# 861| r0_36(glval) = CheckedConvertOrThrow : r0_35 +# 861| r0_37(PolymorphicDerived &) = CopyValue : r0_36 +# 861| mu0_38(PolymorphicDerived &) = Store : &:r0_34, r0_37 +# 863| r0_39(glval) = VariableAddress[pv] : +# 863| r0_40(glval) = VariableAddress[pb] : +# 863| r0_41(PolymorphicBase *) = Load : &:r0_40, ~mu0_2 +# 863| r0_42(void *) = DynamicCastToVoid : r0_41 +# 863| mu0_43(void *) = Store : &:r0_39, r0_42 +# 864| r0_44(glval) = VariableAddress[pcv] : +# 864| r0_45(glval) = VariableAddress[pd] : +# 864| r0_46(PolymorphicDerived *) = Load : &:r0_45, ~mu0_2 +# 864| r0_47(void *) = DynamicCastToVoid : r0_46 +# 864| mu0_48(void *) = Store : &:r0_44, r0_47 +# 865| v0_49(void) = NoOp : +# 849| v0_50(void) = ReturnVoid : +# 849| v0_51(void) = UnmodeledUse : mu* +# 849| v0_52(void) = ExitFunction : # 867| void String::String() # 867| Block 0 @@ -4245,46 +4085,42 @@ ir.cpp: # 874| r0_11(char *) = Convert : r0_10 # 874| r0_12(glval) = VariableAddress[p] : # 874| mu0_13(char *) = Store : &:r0_12, r0_11 -# 874| r0_14(glval) = CopyValue : r0_12 -# 875| r0_15(glval) = VariableAddress[a] : -# 875| r0_16(char *) = Convert : r0_15 -# 875| r0_17(int) = Constant[0] : -# 875| r0_18(glval) = PointerAdd[1] : r0_16, r0_17 -# 875| r0_19(char *) = CopyValue : r0_18 -# 875| r0_20(char *) = Convert : r0_19 -# 875| r0_21(glval) = VariableAddress[p] : -# 875| mu0_22(char *) = Store : &:r0_21, r0_20 -# 875| r0_23(glval) = CopyValue : r0_21 -# 876| r0_24(glval) = StringConstant["test"] : -# 876| r0_25(char *) = Convert : r0_24 -# 876| r0_26(int) = Constant[0] : -# 876| r0_27(glval) = PointerAdd[1] : r0_25, r0_26 -# 876| r0_28(char *) = CopyValue : r0_27 -# 876| r0_29(glval) = VariableAddress[p] : -# 876| mu0_30(char *) = Store : &:r0_29, r0_28 -# 876| r0_31(glval) = CopyValue : r0_29 -# 877| r0_32(glval) = VariableAddress[ra] : -# 877| r0_33(glval) = VariableAddress[a] : -# 877| r0_34(char(&)[5]) = CopyValue : r0_33 -# 877| mu0_35(char(&)[5]) = Store : &:r0_32, r0_34 -# 878| r0_36(glval) = VariableAddress[rs] : -# 878| r0_37(glval) = StringConstant["test"] : -# 878| r0_38(char(&)[5]) = CopyValue : r0_37 -# 878| mu0_39(char(&)[5]) = Store : &:r0_36, r0_38 -# 879| r0_40(glval) = VariableAddress[pa] : -# 879| r0_41(glval) = VariableAddress[a] : -# 879| r0_42(char(*)[5]) = CopyValue : r0_41 -# 879| r0_43(char(*)[5]) = Convert : r0_42 -# 879| mu0_44(char(*)[5]) = Store : &:r0_40, r0_43 -# 880| r0_45(glval) = StringConstant["test"] : -# 880| r0_46(char(*)[5]) = CopyValue : r0_45 -# 880| r0_47(glval) = VariableAddress[pa] : -# 880| mu0_48(char(*)[5]) = Store : &:r0_47, r0_46 -# 880| r0_49(glval) = CopyValue : r0_47 -# 881| v0_50(void) = NoOp : -# 871| v0_51(void) = ReturnVoid : -# 871| v0_52(void) = UnmodeledUse : mu* -# 871| v0_53(void) = ExitFunction : +# 875| r0_14(glval) = VariableAddress[a] : +# 875| r0_15(char *) = Convert : r0_14 +# 875| r0_16(int) = Constant[0] : +# 875| r0_17(glval) = PointerAdd[1] : r0_15, r0_16 +# 875| r0_18(char *) = CopyValue : r0_17 +# 875| r0_19(char *) = Convert : r0_18 +# 875| r0_20(glval) = VariableAddress[p] : +# 875| mu0_21(char *) = Store : &:r0_20, r0_19 +# 876| r0_22(glval) = StringConstant["test"] : +# 876| r0_23(char *) = Convert : r0_22 +# 876| r0_24(int) = Constant[0] : +# 876| r0_25(glval) = PointerAdd[1] : r0_23, r0_24 +# 876| r0_26(char *) = CopyValue : r0_25 +# 876| r0_27(glval) = VariableAddress[p] : +# 876| mu0_28(char *) = Store : &:r0_27, r0_26 +# 877| r0_29(glval) = VariableAddress[ra] : +# 877| r0_30(glval) = VariableAddress[a] : +# 877| r0_31(char(&)[5]) = CopyValue : r0_30 +# 877| mu0_32(char(&)[5]) = Store : &:r0_29, r0_31 +# 878| r0_33(glval) = VariableAddress[rs] : +# 878| r0_34(glval) = StringConstant["test"] : +# 878| r0_35(char(&)[5]) = CopyValue : r0_34 +# 878| mu0_36(char(&)[5]) = Store : &:r0_33, r0_35 +# 879| r0_37(glval) = VariableAddress[pa] : +# 879| r0_38(glval) = VariableAddress[a] : +# 879| r0_39(char(*)[5]) = CopyValue : r0_38 +# 879| r0_40(char(*)[5]) = Convert : r0_39 +# 879| mu0_41(char(*)[5]) = Store : &:r0_37, r0_40 +# 880| r0_42(glval) = StringConstant["test"] : +# 880| r0_43(char(*)[5]) = CopyValue : r0_42 +# 880| r0_44(glval) = VariableAddress[pa] : +# 880| mu0_45(char(*)[5]) = Store : &:r0_44, r0_43 +# 881| v0_46(void) = NoOp : +# 871| v0_47(void) = ReturnVoid : +# 871| v0_48(void) = UnmodeledUse : mu* +# 871| v0_49(void) = ExitFunction : # 883| void FuncPtrConversions(int(*)(int), void*) # 883| Block 0 @@ -4300,17 +4136,15 @@ ir.cpp: # 884| r0_9(void *) = Convert : r0_8 # 884| r0_10(glval) = VariableAddress[p] : # 884| mu0_11(void *) = Store : &:r0_10, r0_9 -# 884| r0_12(glval) = CopyValue : r0_10 -# 885| r0_13(glval) = VariableAddress[p] : -# 885| r0_14(void *) = Load : &:r0_13, ~mu0_2 -# 885| r0_15(..(*)(..)) = Convert : r0_14 -# 885| r0_16(glval<..(*)(..)>) = VariableAddress[pfn] : -# 885| mu0_17(..(*)(..)) = Store : &:r0_16, r0_15 -# 885| r0_18(glval<..(*)(..)>) = CopyValue : r0_16 -# 886| v0_19(void) = NoOp : -# 883| v0_20(void) = ReturnVoid : -# 883| v0_21(void) = UnmodeledUse : mu* -# 883| v0_22(void) = ExitFunction : +# 885| r0_12(glval) = VariableAddress[p] : +# 885| r0_13(void *) = Load : &:r0_12, ~mu0_2 +# 885| r0_14(..(*)(..)) = Convert : r0_13 +# 885| r0_15(glval<..(*)(..)>) = VariableAddress[pfn] : +# 885| mu0_16(..(*)(..)) = Store : &:r0_15, r0_14 +# 886| v0_17(void) = NoOp : +# 883| v0_18(void) = ReturnVoid : +# 883| v0_19(void) = UnmodeledUse : mu* +# 883| v0_20(void) = ExitFunction : # 888| void VarArgUsage(int) # 888| Block 0 @@ -4619,7 +4453,6 @@ ir.cpp: # 968| r1_0(int) = Constant[5] : # 968| r1_1(glval) = VariableAddress[x] : # 968| mu1_2(int) = Store : &:r1_1, r1_0 -# 968| r1_3(glval) = CopyValue : r1_1 #-----| Goto -> Block 6 # 970| Block 2 @@ -4643,7 +4476,6 @@ ir.cpp: # 971| r3_0(int) = Constant[7] : # 971| r3_1(glval) = VariableAddress[y] : # 971| mu3_2(int) = Store : &:r3_1, r3_0 -# 971| r3_3(glval) = CopyValue : r3_1 #-----| Goto -> Block 6 # 973| Block 4 @@ -4666,7 +4498,6 @@ ir.cpp: # 974| r5_2(int *) = Load : &:r5_1, ~mu0_2 # 974| r5_3(glval) = CopyValue : r5_2 # 974| mu5_4(int) = Store : &:r5_3, r5_0 -# 974| r5_5(glval) = CopyValue : r5_3 #-----| Goto -> Block 6 # 976| Block 6 @@ -4804,7 +4635,6 @@ ir.cpp: # 995| r1_1(int) = Load : &:r1_0, ~mu0_2 # 995| r1_2(glval) = VariableAddress[w] : # 995| mu1_3(int) = Store : &:r1_2, r1_1 -# 995| r1_4(glval) = CopyValue : r1_2 #-----| Goto -> Block 3 # 997| Block 2 @@ -4812,7 +4642,6 @@ ir.cpp: # 997| r2_1(int) = Load : &:r2_0, ~mu0_2 # 997| r2_2(glval) = VariableAddress[w] : # 997| mu2_3(int) = Store : &:r2_2, r2_1 -# 997| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 999| Block 3 @@ -5608,7 +5437,6 @@ ir.cpp: # 1130| r2_2(int) = Constant[1] : # 1130| r2_3(int) = Add : r2_1, r2_2 # 1130| mu2_4(int) = Store : &:r2_0, r2_3 -# 1130| r2_5(glval) = CopyValue : r2_0 #-----| Goto (back edge) -> Block 1 # 1130| Block 3 @@ -5674,7 +5502,6 @@ ir.cpp: # 1140| r6_4(int) = Load : &:r6_3, ~mu0_2 # 1140| r6_5(glval) = VariableAddress[x] : # 1140| mu6_6(int) = Store : &:r6_5, r6_4 -# 1140| r6_7(glval) = CopyValue : r6_5 #-----| Goto -> Block 8 # 1140| Block 7 @@ -5693,7 +5520,6 @@ ir.cpp: # 1142| r8_0(int) = Constant[7] : # 1142| r8_1(glval) = VariableAddress[x] : # 1142| mu8_2(int) = Store : &:r8_1, r8_0 -# 1142| r8_3(glval) = CopyValue : r8_1 #-----| Goto -> Block 13 # 1144| Block 9 @@ -5770,30 +5596,28 @@ ir.cpp: # 1156| r0_34(int) = Load : &:r0_33, ~mu0_2 # 1156| r0_35(glval) = PointerAdd[4] : r0_32, r0_34 # 1156| mu0_36(int) = Store : &:r0_35, r0_31 -# 1156| r0_37(glval) = CopyValue : r0_35 -# 1157| r0_38(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1157| r0_39(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1157| r0_40(__attribute((vector_size(16UL))) int) = Load : &:r0_39, ~mu0_2 -# 1157| r0_41(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1157| r0_42(__attribute((vector_size(16UL))) int) = Load : &:r0_41, ~mu0_2 -#-----| r0_43(int) = Constant[3] : -# 1157| r0_44(int) = Constant[2] : -# 1157| r0_45(int) = Constant[1] : -# 1157| r0_46(int) = Constant[0] : -# 1157| r0_47(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r0_40, 1:r0_42, 2:r0_43, 3:r0_44, 4:r0_45, 5:r0_46 -# 1157| mu0_48(__attribute((vector_size(16UL))) int) = Store : &:r0_38, r0_47 -# 1158| r0_49(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1158| r0_50(__attribute((vector_size(16UL))) int) = Load : &:r0_49, ~mu0_2 -# 1158| r0_51(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1158| r0_52(__attribute((vector_size(16UL))) int) = Load : &:r0_51, ~mu0_2 -# 1158| r0_53(__attribute((vector_size(16UL))) int) = Add : r0_50, r0_52 -# 1158| r0_54(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1158| mu0_55(__attribute((vector_size(16UL))) int) = Store : &:r0_54, r0_53 -# 1158| r0_56(glval<__attribute((vector_size(16UL))) int>) = CopyValue : r0_54 -# 1159| v0_57(void) = NoOp : -# 1153| v0_58(void) = ReturnVoid : -# 1153| v0_59(void) = UnmodeledUse : mu* -# 1153| v0_60(void) = ExitFunction : +# 1157| r0_37(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1157| r0_38(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1157| r0_39(__attribute((vector_size(16UL))) int) = Load : &:r0_38, ~mu0_2 +# 1157| r0_40(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1157| r0_41(__attribute((vector_size(16UL))) int) = Load : &:r0_40, ~mu0_2 +#-----| r0_42(int) = Constant[3] : +# 1157| r0_43(int) = Constant[2] : +# 1157| r0_44(int) = Constant[1] : +# 1157| r0_45(int) = Constant[0] : +# 1157| r0_46(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r0_39, 1:r0_41, 2:r0_42, 3:r0_43, 4:r0_44, 5:r0_45 +# 1157| mu0_47(__attribute((vector_size(16UL))) int) = Store : &:r0_37, r0_46 +# 1158| r0_48(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1158| r0_49(__attribute((vector_size(16UL))) int) = Load : &:r0_48, ~mu0_2 +# 1158| r0_50(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1158| r0_51(__attribute((vector_size(16UL))) int) = Load : &:r0_50, ~mu0_2 +# 1158| r0_52(__attribute((vector_size(16UL))) int) = Add : r0_49, r0_51 +# 1158| r0_53(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1158| mu0_54(__attribute((vector_size(16UL))) int) = Store : &:r0_53, r0_52 +# 1159| v0_55(void) = NoOp : +# 1153| v0_56(void) = ReturnVoid : +# 1153| v0_57(void) = UnmodeledUse : mu* +# 1153| v0_58(void) = ExitFunction : # 1163| int ModeledCallTarget(int) # 1163| Block 0 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 index 9f13acbb1ff..ff8c2b30a05 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected @@ -214,7 +214,6 @@ ssa.cpp: # 70| r1_6(glval) = CopyValue : r1_2 # 70| m1_7(char) = Store : &:r1_6, r1_0 # 70| m1_8(unknown) = Chi : total:m3_0, partial:m1_7 -# 70| r1_9(glval) = CopyValue : r1_6 #-----| Goto (back edge) -> Block 3 # 71| Block 2 @@ -264,23 +263,20 @@ ssa.cpp: # 80| r1_0(int) = Constant[3] : # 80| r1_1(glval) = VariableAddress[x] : # 80| m1_2(int) = Store : &:r1_1, r1_0 -# 80| r1_3(glval) = CopyValue : r1_1 -# 81| r1_4(int) = Constant[4] : -# 81| r1_5(glval) = VariableAddress[y] : -# 81| m1_6(int) = Store : &:r1_5, r1_4 -# 81| r1_7(glval) = CopyValue : r1_5 +# 81| r1_3(int) = Constant[4] : +# 81| r1_4(glval) = VariableAddress[y] : +# 81| m1_5(int) = Store : &:r1_4, r1_3 #-----| Goto -> Block 3 # 84| Block 2 # 84| r2_0(int) = Constant[5] : # 84| r2_1(glval) = VariableAddress[x] : # 84| m2_2(int) = Store : &:r2_1, r2_0 -# 84| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 86| Block 3 # 86| m3_0(int) = Phi : from 1:m1_2, from 2:m2_2 -# 86| m3_1(int) = Phi : from 1:m1_6, from 2:m0_10 +# 86| m3_1(int) = Phi : from 1:m1_5, from 2:m0_10 # 86| r3_2(glval) = VariableAddress[x_merge] : # 86| r3_3(glval) = VariableAddress[x] : # 86| r3_4(int) = Load : &:r3_3, m3_0 @@ -501,7 +497,6 @@ ssa.cpp: # 125| r1_3(glval) = FieldAddress[x] : r1_2 # 125| m1_4(int) = Store : &:r1_3, r1_1 # 125| m1_5(Point) = Chi : total:m0_18, partial:m1_4 -# 125| r1_6(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 128| Block 2 @@ -511,7 +506,6 @@ ssa.cpp: # 128| r2_3(glval) = FieldAddress[x] : r2_2 # 128| m2_4(int) = Store : &:r2_3, r2_1 # 128| m2_5(Point) = Chi : total:m0_18, partial:m2_4 -# 128| r2_6(glval) = CopyValue : r2_3 #-----| Goto -> Block 3 # 130| Block 3 @@ -565,7 +559,6 @@ ssa.cpp: # 137| r1_3(glval) = FieldAddress[x] : r1_2 # 137| m1_4(int) = Store : &:r1_3, r1_1 # 137| m1_5(Point) = Chi : total:m0_18, partial:m1_4 -# 137| r1_6(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 140| Block 2 @@ -573,7 +566,6 @@ ssa.cpp: # 140| r2_1(Point) = Load : &:r2_0, m0_6 # 140| r2_2(glval) = VariableAddress[a] : # 140| m2_3(Point) = Store : &:r2_2, r2_1 -# 140| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 142| Block 3 @@ -623,7 +615,6 @@ ssa.cpp: # 148| r1_3(glval) = FieldAddress[x] : r1_2 # 148| m1_4(int) = Store : &:r1_3, r1_1 # 148| m1_5(Point) = Chi : total:m0_18, partial:m1_4 -# 148| r1_6(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 151| Block 2 @@ -631,7 +622,6 @@ ssa.cpp: # 151| r2_1(Point) = Load : &:r2_0, m0_6 # 151| r2_2(glval) = VariableAddress[a] : # 151| m2_3(Point) = Store : &:r2_2, r2_1 -# 151| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 153| Block 3 @@ -680,7 +670,6 @@ ssa.cpp: # 159| r1_4(glval) = FieldAddress[x] : r1_3 # 159| m1_5(int) = Store : &:r1_4, r1_1 # 159| m1_6(Rect) = Chi : total:m0_18, partial:m1_5 -# 159| r1_7(glval) = CopyValue : r1_4 #-----| Goto -> Block 3 # 162| Block 2 @@ -688,7 +677,6 @@ ssa.cpp: # 162| r2_1(Rect) = Load : &:r2_0, m0_6 # 162| r2_2(glval) = VariableAddress[a] : # 162| m2_3(Rect) = Store : &:r2_2, r2_1 -# 162| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 164| Block 3 @@ -723,22 +711,19 @@ ssa.cpp: # 174| r0_15(glval) = VariableAddress[w] : # 174| r0_16(glval) = FieldAddress[f] : r0_15 # 174| m0_17(int) = Store : &:r0_16, r0_14 -# 174| r0_18(glval) = CopyValue : r0_16 -# 175| r0_19(glval) = VariableAddress[w] : -# 175| r0_20(glval) = FieldAddress[f] : r0_19 -# 175| r0_21(int) = Load : &:r0_20, m0_17 -# 175| r0_22(glval) = VariableAddress[a] : -# 175| m0_23(int) = Store : &:r0_22, r0_21 -# 175| r0_24(glval) = CopyValue : r0_22 -# 176| r0_25(glval) = VariableAddress[w] : -# 176| r0_26(Wrapper) = Load : &:r0_25, ~m0_17 -# 176| r0_27(glval) = VariableAddress[x] : -# 176| m0_28(Wrapper) = Store : &:r0_27, r0_26 -# 176| r0_29(glval) = CopyValue : r0_27 -# 177| v0_30(void) = NoOp : -# 171| v0_31(void) = ReturnVoid : -# 171| v0_32(void) = UnmodeledUse : mu* -# 171| v0_33(void) = ExitFunction : +# 175| r0_18(glval) = VariableAddress[w] : +# 175| r0_19(glval) = FieldAddress[f] : r0_18 +# 175| r0_20(int) = Load : &:r0_19, m0_17 +# 175| r0_21(glval) = VariableAddress[a] : +# 175| m0_22(int) = Store : &:r0_21, r0_20 +# 176| r0_23(glval) = VariableAddress[w] : +# 176| r0_24(Wrapper) = Load : &:r0_23, ~m0_17 +# 176| r0_25(glval) = VariableAddress[x] : +# 176| m0_26(Wrapper) = Store : &:r0_25, r0_24 +# 177| v0_27(void) = NoOp : +# 171| v0_28(void) = ReturnVoid : +# 171| v0_29(void) = UnmodeledUse : mu* +# 171| v0_30(void) = ExitFunction : # 179| int AsmStmt(int*) # 179| Block 0 @@ -819,24 +804,22 @@ ssa.cpp: # 200| r0_27(int) = Load : &:r0_26, m0_19 # 200| r0_28(int) = Add : r0_27, r0_24 # 200| m0_29(int) = Store : &:r0_26, r0_28 -# 200| r0_30(glval) = CopyValue : r0_26 -# 201| r0_31(glval) = FunctionAddress[abs] : -# 201| r0_32(glval) = VariableAddress[x] : -# 201| r0_33(int) = Load : &:r0_32, m0_8 -# 201| r0_34(int) = Call : func:r0_31, 0:r0_33 -# 201| r0_35(glval) = VariableAddress[ret] : -# 201| r0_36(int) = Load : &:r0_35, m0_29 -# 201| r0_37(int) = Add : r0_36, r0_34 -# 201| m0_38(int) = Store : &:r0_35, r0_37 -# 201| r0_39(glval) = CopyValue : r0_35 -# 202| r0_40(glval) = VariableAddress[#return] : -# 202| r0_41(glval) = VariableAddress[ret] : -# 202| r0_42(int) = Load : &:r0_41, m0_38 -# 202| m0_43(int) = Store : &:r0_40, r0_42 -# 198| r0_44(glval) = VariableAddress[#return] : -# 198| v0_45(void) = ReturnValue : &:r0_44, m0_43 -# 198| v0_46(void) = UnmodeledUse : mu* -# 198| v0_47(void) = ExitFunction : +# 201| r0_30(glval) = FunctionAddress[abs] : +# 201| r0_31(glval) = VariableAddress[x] : +# 201| r0_32(int) = Load : &:r0_31, m0_8 +# 201| r0_33(int) = Call : func:r0_30, 0:r0_32 +# 201| r0_34(glval) = VariableAddress[ret] : +# 201| r0_35(int) = Load : &:r0_34, m0_29 +# 201| r0_36(int) = Add : r0_35, r0_33 +# 201| m0_37(int) = Store : &:r0_34, r0_36 +# 202| r0_38(glval) = VariableAddress[#return] : +# 202| r0_39(glval) = VariableAddress[ret] : +# 202| r0_40(int) = Load : &:r0_39, m0_37 +# 202| m0_41(int) = Store : &:r0_38, r0_40 +# 198| r0_42(glval) = VariableAddress[#return] : +# 198| v0_43(void) = ReturnValue : &:r0_42, m0_41 +# 198| v0_44(void) = UnmodeledUse : mu* +# 198| v0_45(void) = ExitFunction : # 207| int ModeledCallTarget(int) # 207| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected index fd21c3f2d71..8204cdad960 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected @@ -216,7 +216,6 @@ ssa.cpp: # 70| m1_5(char *) = Store : &:r1_1, r1_4 # 70| r1_6(glval) = CopyValue : r1_2 # 70| mu1_7(char) = Store : &:r1_6, r1_0 -# 70| r1_8(glval) = CopyValue : r1_6 #-----| Goto (back edge) -> Block 3 # 71| Block 2 @@ -265,23 +264,20 @@ ssa.cpp: # 80| r1_0(int) = Constant[3] : # 80| r1_1(glval) = VariableAddress[x] : # 80| m1_2(int) = Store : &:r1_1, r1_0 -# 80| r1_3(glval) = CopyValue : r1_1 -# 81| r1_4(int) = Constant[4] : -# 81| r1_5(glval) = VariableAddress[y] : -# 81| m1_6(int) = Store : &:r1_5, r1_4 -# 81| r1_7(glval) = CopyValue : r1_5 +# 81| r1_3(int) = Constant[4] : +# 81| r1_4(glval) = VariableAddress[y] : +# 81| m1_5(int) = Store : &:r1_4, r1_3 #-----| Goto -> Block 3 # 84| Block 2 # 84| r2_0(int) = Constant[5] : # 84| r2_1(glval) = VariableAddress[x] : # 84| m2_2(int) = Store : &:r2_1, r2_0 -# 84| r2_3(glval) = CopyValue : r2_1 #-----| Goto -> Block 3 # 86| Block 3 # 86| m3_0(int) = Phi : from 1:m1_2, from 2:m2_2 -# 86| m3_1(int) = Phi : from 1:m1_6, from 2:m0_10 +# 86| m3_1(int) = Phi : from 1:m1_5, from 2:m0_10 # 86| r3_2(glval) = VariableAddress[x_merge] : # 86| r3_3(glval) = VariableAddress[x] : # 86| r3_4(int) = Load : &:r3_3, m3_0 @@ -486,7 +482,6 @@ ssa.cpp: # 125| r1_2(glval) = VariableAddress[a] : # 125| r1_3(glval) = FieldAddress[x] : r1_2 # 125| mu1_4(int) = Store : &:r1_3, r1_1 -# 125| r1_5(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 128| Block 2 @@ -495,7 +490,6 @@ ssa.cpp: # 128| r2_2(glval) = VariableAddress[a] : # 128| r2_3(glval) = FieldAddress[x] : r2_2 # 128| mu2_4(int) = Store : &:r2_3, r2_1 -# 128| r2_5(glval) = CopyValue : r2_3 #-----| Goto -> Block 3 # 130| Block 3 @@ -544,7 +538,6 @@ ssa.cpp: # 137| r1_2(glval) = VariableAddress[a] : # 137| r1_3(glval) = FieldAddress[x] : r1_2 # 137| mu1_4(int) = Store : &:r1_3, r1_1 -# 137| r1_5(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 140| Block 2 @@ -552,7 +545,6 @@ ssa.cpp: # 140| r2_1(Point) = Load : &:r2_0, m0_6 # 140| r2_2(glval) = VariableAddress[a] : # 140| mu2_3(Point) = Store : &:r2_2, r2_1 -# 140| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 142| Block 3 @@ -597,7 +589,6 @@ ssa.cpp: # 148| r1_2(glval) = VariableAddress[a] : # 148| r1_3(glval) = FieldAddress[x] : r1_2 # 148| mu1_4(int) = Store : &:r1_3, r1_1 -# 148| r1_5(glval) = CopyValue : r1_3 #-----| Goto -> Block 3 # 151| Block 2 @@ -605,7 +596,6 @@ ssa.cpp: # 151| r2_1(Point) = Load : &:r2_0, m0_6 # 151| r2_2(glval) = VariableAddress[a] : # 151| mu2_3(Point) = Store : &:r2_2, r2_1 -# 151| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 153| Block 3 @@ -650,7 +640,6 @@ ssa.cpp: # 159| r1_3(glval) = FieldAddress[topLeft] : r1_2 # 159| r1_4(glval) = FieldAddress[x] : r1_3 # 159| mu1_5(int) = Store : &:r1_4, r1_1 -# 159| r1_6(glval) = CopyValue : r1_4 #-----| Goto -> Block 3 # 162| Block 2 @@ -658,7 +647,6 @@ ssa.cpp: # 162| r2_1(Rect) = Load : &:r2_0, m0_6 # 162| r2_2(glval) = VariableAddress[a] : # 162| mu2_3(Rect) = Store : &:r2_2, r2_1 -# 162| r2_4(glval) = CopyValue : r2_2 #-----| Goto -> Block 3 # 164| Block 3 @@ -692,22 +680,19 @@ ssa.cpp: # 174| r0_15(glval) = VariableAddress[w] : # 174| r0_16(glval) = FieldAddress[f] : r0_15 # 174| mu0_17(int) = Store : &:r0_16, r0_14 -# 174| r0_18(glval) = CopyValue : r0_16 -# 175| r0_19(glval) = VariableAddress[w] : -# 175| r0_20(glval) = FieldAddress[f] : r0_19 -# 175| r0_21(int) = Load : &:r0_20, ~mu0_2 -# 175| r0_22(glval) = VariableAddress[a] : -# 175| m0_23(int) = Store : &:r0_22, r0_21 -# 175| r0_24(glval) = CopyValue : r0_22 -# 176| r0_25(glval) = VariableAddress[w] : -# 176| r0_26(Wrapper) = Load : &:r0_25, ~mu0_2 -# 176| r0_27(glval) = VariableAddress[x] : -# 176| m0_28(Wrapper) = Store : &:r0_27, r0_26 -# 176| r0_29(glval) = CopyValue : r0_27 -# 177| v0_30(void) = NoOp : -# 171| v0_31(void) = ReturnVoid : -# 171| v0_32(void) = UnmodeledUse : mu* -# 171| v0_33(void) = ExitFunction : +# 175| r0_18(glval) = VariableAddress[w] : +# 175| r0_19(glval) = FieldAddress[f] : r0_18 +# 175| r0_20(int) = Load : &:r0_19, ~mu0_2 +# 175| r0_21(glval) = VariableAddress[a] : +# 175| m0_22(int) = Store : &:r0_21, r0_20 +# 176| r0_23(glval) = VariableAddress[w] : +# 176| r0_24(Wrapper) = Load : &:r0_23, ~mu0_2 +# 176| r0_25(glval) = VariableAddress[x] : +# 176| m0_26(Wrapper) = Store : &:r0_25, r0_24 +# 177| v0_27(void) = NoOp : +# 171| v0_28(void) = ReturnVoid : +# 171| v0_29(void) = UnmodeledUse : mu* +# 171| v0_30(void) = ExitFunction : # 179| int AsmStmt(int*) # 179| Block 0 @@ -782,24 +767,22 @@ ssa.cpp: # 200| r0_27(int) = Load : &:r0_26, m0_19 # 200| r0_28(int) = Add : r0_27, r0_24 # 200| m0_29(int) = Store : &:r0_26, r0_28 -# 200| r0_30(glval) = CopyValue : r0_26 -# 201| r0_31(glval) = FunctionAddress[abs] : -# 201| r0_32(glval) = VariableAddress[x] : -# 201| r0_33(int) = Load : &:r0_32, m0_8 -# 201| r0_34(int) = Call : func:r0_31, 0:r0_33 -# 201| r0_35(glval) = VariableAddress[ret] : -# 201| r0_36(int) = Load : &:r0_35, m0_29 -# 201| r0_37(int) = Add : r0_36, r0_34 -# 201| m0_38(int) = Store : &:r0_35, r0_37 -# 201| r0_39(glval) = CopyValue : r0_35 -# 202| r0_40(glval) = VariableAddress[#return] : -# 202| r0_41(glval) = VariableAddress[ret] : -# 202| r0_42(int) = Load : &:r0_41, m0_38 -# 202| m0_43(int) = Store : &:r0_40, r0_42 -# 198| r0_44(glval) = VariableAddress[#return] : -# 198| v0_45(void) = ReturnValue : &:r0_44, m0_43 -# 198| v0_46(void) = UnmodeledUse : mu* -# 198| v0_47(void) = ExitFunction : +# 201| r0_30(glval) = FunctionAddress[abs] : +# 201| r0_31(glval) = VariableAddress[x] : +# 201| r0_32(int) = Load : &:r0_31, m0_8 +# 201| r0_33(int) = Call : func:r0_30, 0:r0_32 +# 201| r0_34(glval) = VariableAddress[ret] : +# 201| r0_35(int) = Load : &:r0_34, m0_29 +# 201| r0_36(int) = Add : r0_35, r0_33 +# 201| m0_37(int) = Store : &:r0_34, r0_36 +# 202| r0_38(glval) = VariableAddress[#return] : +# 202| r0_39(glval) = VariableAddress[ret] : +# 202| r0_40(int) = Load : &:r0_39, m0_37 +# 202| m0_41(int) = Store : &:r0_38, r0_40 +# 198| r0_42(glval) = VariableAddress[#return] : +# 198| v0_43(void) = ReturnValue : &:r0_42, m0_41 +# 198| v0_44(void) = UnmodeledUse : mu* +# 198| v0_45(void) = ExitFunction : # 207| int ModeledCallTarget(int) # 207| Block 0 diff --git a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected index 589678d9f77..9e8588507ff 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_sanity.expected @@ -26,7 +26,7 @@ instructionWithoutSuccessor | ms_try_mix.cpp:28:12:28:15 | Chi: call to C | | ms_try_mix.cpp:48:10:48:13 | Chi: call to C | | pointer_to_member.cpp:36:11:36:30 | FieldAddress: {...} | -| stmt_expr.cpp:27:5:27:15 | CopyValue: ... = ... | +| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | | vla.c:5:9:5:14 | Uninitialized: definition of matrix | | vla.c:11:6:11:16 | UnmodeledDefinition: vla_typedef | ambiguousSuccessors diff --git a/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected b/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected index bb312fa7691..1bcffed0736 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_sanity.expected @@ -4,7 +4,6 @@ missingOperand | condition_decls.cpp:41:9:41:23 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:40:6:40:20 | IR: while_decl_bind | void while_decl_bind(int) | | condition_decls.cpp:48:39:48:53 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:47:6:47:18 | IR: for_decl_bind | void for_decl_bind(int) | | misc.c:125:5:125:11 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:97:6:97:10 | IR: misc3 | void misc3() | -| misc.c:220:3:223:3 | CopyValue: ... = ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | | misc.c:220:3:223:3 | Store: ... = ... | Instruction 'Store' is missing an expected operand with tag 'StoreValue' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | | misc.c:220:9:223:3 | FieldAddress: {...} | Instruction 'FieldAddress' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | | misc.c:220:9:223:3 | FieldAddress: {...} | Instruction 'FieldAddress' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:219:5:219:26 | IR: assign_designated_init | int assign_designated_init(someStruct*) | @@ -49,13 +48,13 @@ instructionWithoutSuccessor | misc.c:222:10:222:10 | Store: 2 | | ms_assume.cpp:20:12:20:12 | Constant: (bool)... | | ms_try_except.cpp:3:9:3:9 | Uninitialized: definition of x | -| ms_try_except.cpp:7:13:7:17 | CopyValue: ... = ... | +| ms_try_except.cpp:7:13:7:17 | Store: ... = ... | | ms_try_except.cpp:9:19:9:19 | Load: j | -| ms_try_except.cpp:10:13:10:17 | CopyValue: ... = ... | -| ms_try_except.cpp:14:13:14:17 | CopyValue: ... = ... | -| ms_try_except.cpp:17:13:17:17 | CopyValue: ... = ... | +| ms_try_except.cpp:10:13:10:17 | Store: ... = ... | +| ms_try_except.cpp:14:13:14:17 | Store: ... = ... | +| ms_try_except.cpp:17:13:17:17 | Store: ... = ... | | ms_try_except.cpp:19:17:19:21 | Sub: ... - ... | -| ms_try_except.cpp:20:9:20:13 | CopyValue: ... = ... | +| ms_try_except.cpp:20:9:20:13 | Store: ... = ... | | ms_try_mix.cpp:11:12:11:15 | CallSideEffect: call to C | | ms_try_mix.cpp:16:13:16:19 | ThrowValue: throw ... | | ms_try_mix.cpp:18:16:18:19 | CallSideEffect: call to C | @@ -77,7 +76,7 @@ instructionWithoutSuccessor | static_init_templates.cpp:97:27:97:36 | Convert: (void *)... | | static_init_templates.cpp:105:27:105:27 | Constant: (void *)... | | static_init_templates.cpp:105:27:105:27 | Constant: (void *)... | -| stmt_expr.cpp:27:5:27:15 | CopyValue: ... = ... | +| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | | stmt_expr.cpp:29:11:32:11 | CopyValue: (statement expression) | | stmt_in_type.cpp:5:53:5:53 | Constant: 1 | | vla.c:5:9:5:14 | Uninitialized: definition of matrix | diff --git a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected index 0f8088f9a25..d064a1264ec 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_sanity.expected @@ -35,7 +35,7 @@ instructionWithoutSuccessor | ms_try_mix.cpp:28:12:28:15 | CallSideEffect: call to C | | ms_try_mix.cpp:48:10:48:13 | CallSideEffect: call to C | | pointer_to_member.cpp:36:11:36:30 | FieldAddress: {...} | -| stmt_expr.cpp:27:5:27:15 | CopyValue: ... = ... | +| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | | vla.c:5:9:5:14 | Uninitialized: definition of matrix | | vla.c:11:6:11:16 | UnmodeledDefinition: vla_typedef | ambiguousSuccessors From 11da4a53285b6fc93afc6e9c8c88bdc6644118d4 Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Thu, 24 Oct 2019 15:17:16 +0200 Subject: [PATCH 5/5] C++: Accept test results for GVN and sign analysis --- .../signanalysis/SignAnalysis.expected | 28 --- .../GlobalValueNumbering/ir_gvn.expected | 234 ++++++++---------- 2 files changed, 101 insertions(+), 161 deletions(-) diff --git a/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected index 4dc280b6ca9..0c8f9c1cff1 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected @@ -13,7 +13,6 @@ | bounded_bounds.c:16:12:16:12 | Load: x | negative strictlyNegative | | bounded_bounds.c:16:12:16:12 | Store: x | negative strictlyNegative | | inline_assembly.c:9:23:9:23 | Uninitialized: definition of y | positive | -| inline_assembly.c:10:3:10:7 | CopyValue: ... = ... | positive strictlyPositive | | 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 | @@ -28,10 +27,8 @@ | minmax.c:18:37:18:37 | Load: x | positive strictlyPositive | | minmax.c:18:40:18:40 | Load: y | positive strictlyPositive | | minmax.c:18:43:18:43 | Load: z | positive strictlyPositive | -| minmax.c:20:2:24:3 | CopyValue: ... = ... | positive | | minmax.c:20:2:24:3 | Store: ... = ... | positive | | minmax.c:20:6:24:3 | CopyValue: (statement expression) | positive | -| minmax.c:22:18:22:22 | CopyValue: ... = ... | positive strictlyPositive | | minmax.c:22:18:22:22 | Store: ... = ... | positive strictlyPositive | | minmax.c:22:22:22:22 | Load: x | positive strictlyPositive | | minmax.c:23:3:23:3 | Load: t | positive | @@ -40,7 +37,6 @@ | minmax.c:26:40:26:40 | Load: y | positive strictlyPositive | | minmax.c:26:43:26:43 | Load: z | positive | | test.c:7:10:7:10 | Phi: p | positive | -| test.c:8:5:8:19 | CopyValue: ... = ... | positive strictlyPositive | | test.c:8:5:8:19 | Store: ... = ... | positive strictlyPositive | | test.c:8:13:8:17 | Load: count | positive | | test.c:8:13:8:19 | Add: ... + ... | positive strictlyPositive | @@ -48,7 +44,6 @@ | test.c:10:10:10:14 | Load: count | positive | | test.c:10:10:10:14 | Store: count | positive | | test.c:15:10:15:10 | Phi: p | positive | -| test.c:16:5:16:26 | CopyValue: ... = ... | positive | | test.c:16:5:16:26 | Store: ... = ... | positive | | test.c:16:13:16:26 | Rem: ... % ... | positive | | test.c:16:14:16:18 | Load: count | positive | @@ -62,7 +57,6 @@ | test.c:24:5:24:11 | Constant: ... ++ | positive strictlyPositive | | test.c:24:5:24:11 | Load: ... ++ | positive | | test.c:24:5:24:11 | Store: ... ++ | positive strictlyPositive | -| test.c:25:5:25:22 | CopyValue: ... = ... | positive | | test.c:25:5:25:22 | Store: ... = ... | positive | | test.c:25:13:25:17 | Load: count | positive strictlyPositive | | test.c:25:13:25:22 | Rem: ... % ... | positive | @@ -73,7 +67,6 @@ | test.c:33:15:33:15 | Phi: i | positive | | test.c:33:15:33:15 | Phi: i | positive | | test.c:33:19:33:19 | Constant: 2 | positive strictlyPositive | -| test.c:33:22:33:28 | CopyValue: ... = ... | positive strictlyPositive | | test.c:33:22:33:28 | Store: ... = ... | positive strictlyPositive | | test.c:33:26:33:26 | Load: i | positive | | test.c:33:26:33:28 | Add: ... + ... | positive strictlyPositive | @@ -108,7 +101,6 @@ | test.c:51:15:51:17 | Add: ... + ... | positive strictlyPositive | | test.c:51:17:51:17 | Constant: 2 | positive strictlyPositive | | test.c:51:21:51:21 | Constant: 4 | positive strictlyPositive | -| test.c:51:24:51:30 | CopyValue: ... = ... | positive strictlyPositive | | test.c:51:24:51:30 | Store: ... = ... | positive strictlyPositive | | test.c:51:28:51:28 | Load: i | positive | | test.c:51:28:51:30 | Add: ... + ... | positive strictlyPositive | @@ -467,7 +459,6 @@ | test.c:343:5:343:7 | Constant: ... ++ | positive strictlyPositive | | test.c:343:5:343:7 | Load: ... ++ | positive | | test.c:343:5:343:7 | Store: ... ++ | positive strictlyPositive | -| test.c:345:3:345:7 | CopyValue: ... = ... | positive strictlyPositive | | test.c:345:3:345:7 | Store: ... = ... | positive strictlyPositive | | test.c:345:7:345:7 | Load: i | positive strictlyPositive | | test.c:346:7:346:7 | Load: x | positive | @@ -483,7 +474,6 @@ | test.c:356:36:356:37 | Uninitialized: definition of y6 | positive | | test.c:356:40:356:41 | Uninitialized: definition of y7 | positive | | test.c:356:44:356:45 | Uninitialized: definition of y8 | positive | -| test.c:357:3:357:23 | CopyValue: ... = ... | positive | | test.c:357:3:357:23 | Store: ... = ... | positive | | test.c:357:8:357:8 | Load: x | positive | | test.c:357:8:357:23 | Load: ... ? ... : ... | positive | @@ -493,7 +483,6 @@ | test.c:357:12:357:14 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:357:18:357:18 | Load: x | positive | | test.c:357:22:357:23 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:358:3:358:24 | CopyValue: ... = ... | positive | | test.c:358:3:358:24 | Store: ... = ... | positive | | test.c:358:8:358:8 | Load: x | positive | | test.c:358:8:358:24 | Load: ... ? ... : ... | positive | @@ -505,7 +494,6 @@ | test.c:358:24:358:24 | Load: x | positive | | test.c:365:7:365:7 | Load: x | positive | | test.c:365:11:365:13 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:366:5:366:15 | CopyValue: ... = ... | positive | | test.c:366:5:366:15 | Store: ... = ... | positive | | test.c:366:10:366:10 | Load: x | positive | | test.c:366:10:366:15 | Load: ... ? ... : ... | positive | @@ -513,7 +501,6 @@ | test.c:366:10:366:15 | Store: ... ? ... : ... | positive | | test.c:366:10:366:15 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:366:15:366:15 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:367:5:367:17 | CopyValue: ... = ... | positive | | test.c:367:5:367:17 | Store: ... = ... | positive | | test.c:367:10:367:10 | Load: x | positive | | test.c:367:10:367:17 | Load: ... ? ... : ... | positive | @@ -521,7 +508,6 @@ | test.c:367:10:367:17 | Store: ... ? ... : ... | positive | | test.c:367:10:367:17 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:367:15:367:17 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:368:5:368:21 | CopyValue: ... = ... | positive strictlyPositive | | test.c:368:5:368:21 | Store: ... = ... | positive strictlyPositive | | test.c:368:10:368:21 | Load: ... ? ... : ... | positive strictlyPositive | | test.c:368:10:368:21 | Store: ... ? ... : ... | positive strictlyPositive | @@ -529,7 +515,6 @@ | test.c:368:11:368:13 | Add: ... + ... | positive strictlyPositive | | test.c:368:13:368:13 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:368:19:368:21 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:369:5:369:36 | CopyValue: ... = ... | positive strictlyPositive | | test.c:369:5:369:36 | Store: ... = ... | positive strictlyPositive | | test.c:369:10:369:36 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:369:10:369:36 | Load: ... ? ... : ... | positive strictlyPositive | @@ -539,7 +524,6 @@ | test.c:369:27:369:29 | Add: ... + ... | positive strictlyPositive | | test.c:369:29:369:29 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:369:36:369:36 | Constant: 5 | positive strictlyPositive | -| test.c:370:5:370:38 | CopyValue: ... = ... | positive strictlyPositive | | test.c:370:5:370:38 | Store: ... = ... | positive strictlyPositive | | test.c:370:10:370:38 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:370:10:370:38 | Load: ... ? ... : ... | positive strictlyPositive | @@ -549,7 +533,6 @@ | test.c:370:27:370:29 | Add: ... + ... | positive strictlyPositive | | test.c:370:29:370:29 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:370:36:370:38 | Constant: 500 | positive strictlyPositive | -| test.c:371:5:371:39 | CopyValue: ... = ... | positive strictlyPositive | | test.c:371:5:371:39 | Store: ... = ... | positive strictlyPositive | | test.c:371:10:371:39 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:371:10:371:39 | Load: ... ? ... : ... | positive strictlyPositive | @@ -587,7 +570,6 @@ | test.c:378:24:378:25 | Uninitialized: definition of y3 | positive | | test.c:378:28:378:29 | Uninitialized: definition of y4 | positive | | test.c:378:32:378:33 | Uninitialized: definition of y5 | positive | -| test.c:379:3:379:24 | CopyValue: ... = ... | positive strictlyPositive | | test.c:379:3:379:24 | Store: ... = ... | positive strictlyPositive | | test.c:379:8:379:8 | Load: x | positive | | test.c:379:8:379:24 | Load: ... ? ... : ... | positive strictlyPositive | @@ -597,7 +579,6 @@ | test.c:379:12:379:14 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:379:18:379:18 | Load: x | positive strictlyPositive | | test.c:379:22:379:24 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:380:3:380:25 | CopyValue: ... = ... | positive strictlyPositive | | test.c:380:3:380:25 | Store: ... = ... | positive strictlyPositive | | test.c:380:8:380:8 | Load: x | positive | | test.c:380:8:380:25 | Load: ... ? ... : ... | positive strictlyPositive | @@ -607,18 +588,14 @@ | test.c:380:13:380:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:380:19:380:21 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:380:25:380:25 | Load: x | positive strictlyPositive | -| test.c:381:3:381:11 | CopyValue: ... = ... | positive strictlyPositive | | test.c:381:3:381:11 | Store: ... = ... | positive strictlyPositive | | test.c:381:8:381:11 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:382:3:382:11 | CopyValue: ... = ... | positive strictlyPositive | | test.c:382:3:382:11 | Store: ... = ... | positive strictlyPositive | | test.c:382:8:382:11 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:383:3:383:11 | CopyValue: ... = ... | positive strictlyPositive | | test.c:383:3:383:11 | Store: ... = ... | positive strictlyPositive | | test.c:383:8:383:11 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:384:7:384:7 | Load: x | positive | | test.c:384:12:384:14 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:385:5:385:21 | CopyValue: ... = ... | positive strictlyPositive | | test.c:385:5:385:21 | Store: ... = ... | positive strictlyPositive | | test.c:385:10:385:21 | Load: ... ? ... : ... | positive strictlyPositive | | test.c:385:10:385:21 | Store: ... ? ... : ... | positive strictlyPositive | @@ -626,7 +603,6 @@ | test.c:385:11:385:15 | Sub: ... - ... | positive | | test.c:385:13:385:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:385:21:385:21 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:386:5:386:21 | CopyValue: ... = ... | positive strictlyPositive | | test.c:386:5:386:21 | Store: ... = ... | positive strictlyPositive | | test.c:386:10:386:21 | Load: ... ? ... : ... | positive strictlyPositive | | test.c:386:10:386:21 | Store: ... ? ... : ... | positive strictlyPositive | @@ -634,7 +610,6 @@ | test.c:386:11:386:15 | Sub: ... - ... | positive | | test.c:386:13:386:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:386:21:386:21 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:387:5:387:38 | CopyValue: ... = ... | positive strictlyPositive | | test.c:387:5:387:38 | Store: ... = ... | positive strictlyPositive | | test.c:387:10:387:38 | Convert: (unsigned int)... | positive strictlyPositive | | test.c:387:10:387:38 | Load: ... ? ... : ... | positive strictlyPositive | @@ -669,7 +644,6 @@ | test.c:394:34:394:36 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:395:16:395:17 | Uninitialized: definition of y1 | positive | | test.c:396:16:396:17 | Uninitialized: definition of y2 | positive | -| test.c:397:3:397:15 | CopyValue: ... = ... | positive strictlyPositive | | test.c:397:3:397:15 | Store: ... = ... | positive strictlyPositive | | test.c:397:9:397:11 | Add: ++ ... | positive strictlyPositive | | test.c:397:9:397:11 | Constant: ++ ... | positive strictlyPositive | @@ -677,13 +651,11 @@ | test.c:397:9:397:11 | Store: ++ ... | positive strictlyPositive | | test.c:397:9:397:14 | CopyValue: ... , ... | positive strictlyPositive | | test.c:397:14:397:14 | Load: y | positive strictlyPositive | -| test.c:398:3:398:23 | CopyValue: ... = ... | positive strictlyPositive | | test.c:398:3:398:23 | Store: ... = ... | positive strictlyPositive | | test.c:398:9:398:11 | Add: ... ++ | positive strictlyPositive | | test.c:398:9:398:11 | Constant: ... ++ | positive strictlyPositive | | test.c:398:9:398:11 | Load: ... ++ | positive strictlyPositive | | test.c:398:9:398:11 | Store: ... ++ | positive strictlyPositive | -| test.c:398:9:398:19 | CopyValue: ... , ... | positive strictlyPositive | | test.c:398:9:398:22 | CopyValue: ... , ... | positive strictlyPositive | | test.c:398:14:398:19 | Add: ... += ... | positive strictlyPositive | | test.c:398:14:398:19 | Load: ... += ... | positive strictlyPositive | 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 4bc9f90cc60..ec6f300a957 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected @@ -40,40 +40,34 @@ test.cpp: # 5| valnum = r0_7 # 5| m0_19(int) = Store : &:r0_18, r0_17 # 5| valnum = r0_17 -# 5| r0_20(glval) = CopyValue : r0_18 -# 5| valnum = r0_7 -# 6| r0_21(glval) = VariableAddress[p0] : +# 6| r0_20(glval) = VariableAddress[p0] : # 6| valnum = r0_3 -# 6| r0_22(int) = Load : &:r0_21, m0_4 +# 6| r0_21(int) = Load : &:r0_20, m0_4 # 6| valnum = m0_4 -# 6| r0_23(glval) = VariableAddress[p1] : +# 6| r0_22(glval) = VariableAddress[p1] : # 6| valnum = r0_5 -# 6| r0_24(int) = Load : &:r0_23, m0_6 +# 6| r0_23(int) = Load : &:r0_22, m0_6 # 6| valnum = m0_6 -# 6| r0_25(int) = Add : r0_22, r0_24 +# 6| r0_24(int) = Add : r0_21, r0_23 # 6| valnum = r0_17 -# 6| r0_26(glval) = VariableAddress[x] : +# 6| r0_25(glval) = VariableAddress[x] : # 6| valnum = r0_7 -# 6| m0_27(int) = Store : &:r0_26, r0_25 +# 6| m0_26(int) = Store : &:r0_25, r0_24 # 6| valnum = r0_17 -# 6| r0_28(glval) = CopyValue : r0_26 -# 6| valnum = r0_7 -# 7| r0_29(glval) = VariableAddress[x] : +# 7| r0_27(glval) = VariableAddress[x] : # 7| valnum = r0_7 -# 7| r0_30(int) = Load : &:r0_29, m0_27 +# 7| r0_28(int) = Load : &:r0_27, m0_26 # 7| valnum = r0_17 -# 7| r0_31(glval) = VariableAddress[y] : +# 7| r0_29(glval) = VariableAddress[y] : # 7| valnum = r0_9 -# 7| m0_32(int) = Store : &:r0_31, r0_30 +# 7| m0_30(int) = Store : &:r0_29, r0_28 # 7| valnum = r0_17 -# 7| r0_33(glval) = CopyValue : r0_31 -# 7| valnum = r0_9 -# 8| v0_34(void) = NoOp : -# 1| r0_35(glval) = VariableAddress[#return] : +# 8| v0_31(void) = NoOp : +# 1| r0_32(glval) = VariableAddress[#return] : # 1| valnum = unique -# 1| v0_36(void) = ReturnValue : &:r0_35 -# 1| v0_37(void) = UnmodeledUse : mu* -# 1| v0_38(void) = ExitFunction : +# 1| v0_33(void) = ReturnValue : &:r0_32 +# 1| v0_34(void) = UnmodeledUse : mu* +# 1| v0_35(void) = ExitFunction : # 12| int test01(int, int) # 12| Block 0 @@ -122,46 +116,40 @@ test.cpp: # 16| valnum = r0_7 # 16| m0_22(int) = Store : &:r0_21, r0_20 # 16| valnum = r0_20 -# 16| r0_23(glval) = CopyValue : r0_21 -# 16| valnum = r0_7 -# 17| r0_24(glval) = VariableAddress[p0] : +# 17| r0_23(glval) = VariableAddress[p0] : # 17| valnum = r0_3 -# 17| r0_25(int) = Load : &:r0_24, m0_4 +# 17| r0_24(int) = Load : &:r0_23, m0_4 # 17| valnum = m0_4 -# 17| r0_26(glval) = VariableAddress[p1] : +# 17| r0_25(glval) = VariableAddress[p1] : # 17| valnum = r0_5 -# 17| r0_27(int) = Load : &:r0_26, m0_6 +# 17| r0_26(int) = Load : &:r0_25, m0_6 # 17| valnum = m0_6 -# 17| r0_28(int) = Add : r0_25, r0_27 +# 17| r0_27(int) = Add : r0_24, r0_26 # 17| valnum = r0_17 -# 17| r0_29(glval) = VariableAddress[global01] : +# 17| r0_28(glval) = VariableAddress[global01] : # 17| valnum = r0_18 -# 17| r0_30(int) = Load : &:r0_29, ~m0_1 +# 17| r0_29(int) = Load : &:r0_28, ~m0_1 # 17| valnum = unique -# 17| r0_31(int) = Add : r0_28, r0_30 -# 17| valnum = r0_31 -# 17| r0_32(glval) = VariableAddress[x] : +# 17| r0_30(int) = Add : r0_27, r0_29 +# 17| valnum = r0_30 +# 17| r0_31(glval) = VariableAddress[x] : # 17| valnum = r0_7 -# 17| m0_33(int) = Store : &:r0_32, r0_31 -# 17| valnum = r0_31 -# 17| r0_34(glval) = CopyValue : r0_32 -# 17| valnum = r0_7 -# 18| r0_35(glval) = VariableAddress[x] : +# 17| m0_32(int) = Store : &:r0_31, r0_30 +# 17| valnum = r0_30 +# 18| r0_33(glval) = VariableAddress[x] : # 18| valnum = r0_7 -# 18| r0_36(int) = Load : &:r0_35, m0_33 -# 18| valnum = r0_31 -# 18| r0_37(glval) = VariableAddress[y] : +# 18| r0_34(int) = Load : &:r0_33, m0_32 +# 18| valnum = r0_30 +# 18| r0_35(glval) = VariableAddress[y] : # 18| valnum = r0_9 -# 18| m0_38(int) = Store : &:r0_37, r0_36 -# 18| valnum = r0_31 -# 18| r0_39(glval) = CopyValue : r0_37 -# 18| valnum = r0_9 -# 19| v0_40(void) = NoOp : -# 12| r0_41(glval) = VariableAddress[#return] : +# 18| m0_36(int) = Store : &:r0_35, r0_34 +# 18| valnum = r0_30 +# 19| v0_37(void) = NoOp : +# 12| r0_38(glval) = VariableAddress[#return] : # 12| valnum = unique -# 12| v0_42(void) = ReturnValue : &:r0_41 -# 12| v0_43(void) = UnmodeledUse : mu* -# 12| v0_44(void) = ExitFunction : +# 12| v0_39(void) = ReturnValue : &:r0_38 +# 12| v0_40(void) = UnmodeledUse : mu* +# 12| v0_41(void) = ExitFunction : # 25| int test02(int, int) # 25| Block 0 @@ -210,53 +198,47 @@ test.cpp: # 29| valnum = r0_7 # 29| m0_22(int) = Store : &:r0_21, r0_20 # 29| valnum = r0_20 -# 29| r0_23(glval) = CopyValue : r0_21 -# 29| valnum = r0_7 -# 30| r0_24(glval) = FunctionAddress[change_global02] : +# 30| r0_23(glval) = FunctionAddress[change_global02] : # 30| valnum = unique -# 30| v0_25(void) = Call : func:r0_24 -# 30| m0_26(unknown) = ^CallSideEffect : ~m0_1 +# 30| v0_24(void) = Call : func:r0_23 +# 30| m0_25(unknown) = ^CallSideEffect : ~m0_1 # 30| valnum = unique -# 30| m0_27(unknown) = Chi : total:m0_1, partial:m0_26 +# 30| m0_26(unknown) = Chi : total:m0_1, partial:m0_25 # 30| valnum = unique -# 31| r0_28(glval) = VariableAddress[p0] : +# 31| r0_27(glval) = VariableAddress[p0] : # 31| valnum = r0_3 -# 31| r0_29(int) = Load : &:r0_28, m0_4 +# 31| r0_28(int) = Load : &:r0_27, m0_4 # 31| valnum = m0_4 -# 31| r0_30(glval) = VariableAddress[p1] : +# 31| r0_29(glval) = VariableAddress[p1] : # 31| valnum = r0_5 -# 31| r0_31(int) = Load : &:r0_30, m0_6 +# 31| r0_30(int) = Load : &:r0_29, m0_6 # 31| valnum = m0_6 -# 31| r0_32(int) = Add : r0_29, r0_31 +# 31| r0_31(int) = Add : r0_28, r0_30 # 31| valnum = r0_17 -# 31| r0_33(glval) = VariableAddress[global02] : +# 31| r0_32(glval) = VariableAddress[global02] : # 31| valnum = r0_18 -# 31| r0_34(int) = Load : &:r0_33, ~m0_27 +# 31| r0_33(int) = Load : &:r0_32, ~m0_26 # 31| valnum = unique -# 31| r0_35(int) = Add : r0_32, r0_34 -# 31| valnum = r0_35 -# 31| r0_36(glval) = VariableAddress[x] : +# 31| r0_34(int) = Add : r0_31, r0_33 +# 31| valnum = r0_34 +# 31| r0_35(glval) = VariableAddress[x] : # 31| valnum = r0_7 -# 31| m0_37(int) = Store : &:r0_36, r0_35 -# 31| valnum = r0_35 -# 31| r0_38(glval) = CopyValue : r0_36 -# 31| valnum = r0_7 -# 32| r0_39(glval) = VariableAddress[x] : +# 31| m0_36(int) = Store : &:r0_35, r0_34 +# 31| valnum = r0_34 +# 32| r0_37(glval) = VariableAddress[x] : # 32| valnum = r0_7 -# 32| r0_40(int) = Load : &:r0_39, m0_37 -# 32| valnum = r0_35 -# 32| r0_41(glval) = VariableAddress[y] : +# 32| r0_38(int) = Load : &:r0_37, m0_36 +# 32| valnum = r0_34 +# 32| r0_39(glval) = VariableAddress[y] : # 32| valnum = r0_9 -# 32| m0_42(int) = Store : &:r0_41, r0_40 -# 32| valnum = r0_35 -# 32| r0_43(glval) = CopyValue : r0_41 -# 32| valnum = r0_9 -# 33| v0_44(void) = NoOp : -# 25| r0_45(glval) = VariableAddress[#return] : +# 32| m0_40(int) = Store : &:r0_39, r0_38 +# 32| valnum = r0_34 +# 33| v0_41(void) = NoOp : +# 25| r0_42(glval) = VariableAddress[#return] : # 25| valnum = unique -# 25| v0_46(void) = ReturnValue : &:r0_45 -# 25| v0_47(void) = UnmodeledUse : mu* -# 25| v0_48(void) = ExitFunction : +# 25| v0_43(void) = ReturnValue : &:r0_42 +# 25| v0_44(void) = UnmodeledUse : mu* +# 25| v0_45(void) = ExitFunction : # 39| int test03(int, int, int*) # 39| Block 0 @@ -309,60 +291,52 @@ test.cpp: # 43| valnum = r0_9 # 43| m0_24(int) = Store : &:r0_23, r0_22 # 43| valnum = r0_22 -# 43| r0_25(glval) = CopyValue : r0_23 -# 43| valnum = r0_9 -# 44| r0_26(int) = Constant[0] : -# 44| valnum = r0_26 -# 44| r0_27(glval) = VariableAddress[p2] : +# 44| r0_25(int) = Constant[0] : +# 44| valnum = r0_25 +# 44| r0_26(glval) = VariableAddress[p2] : # 44| valnum = r0_7 -# 44| r0_28(int *) = Load : &:r0_27, m0_8 +# 44| r0_27(int *) = Load : &:r0_26, m0_8 # 44| valnum = m0_8 -# 44| r0_29(glval) = CopyValue : r0_28 +# 44| r0_28(glval) = CopyValue : r0_27 # 44| valnum = m0_8 -# 44| m0_30(int) = Store : &:r0_29, r0_26 -# 44| valnum = r0_26 -# 44| m0_31(unknown) = Chi : total:m0_1, partial:m0_30 +# 44| m0_29(int) = Store : &:r0_28, r0_25 +# 44| valnum = r0_25 +# 44| m0_30(unknown) = Chi : total:m0_1, partial:m0_29 # 44| valnum = unique -# 44| r0_32(glval) = CopyValue : r0_29 -# 44| valnum = m0_8 -# 45| r0_33(glval) = VariableAddress[p0] : +# 45| r0_31(glval) = VariableAddress[p0] : # 45| valnum = r0_3 -# 45| r0_34(int) = Load : &:r0_33, m0_4 +# 45| r0_32(int) = Load : &:r0_31, m0_4 # 45| valnum = m0_4 -# 45| r0_35(glval) = VariableAddress[p1] : +# 45| r0_33(glval) = VariableAddress[p1] : # 45| valnum = r0_5 -# 45| r0_36(int) = Load : &:r0_35, m0_6 +# 45| r0_34(int) = Load : &:r0_33, m0_6 # 45| valnum = m0_6 -# 45| r0_37(int) = Add : r0_34, r0_36 +# 45| r0_35(int) = Add : r0_32, r0_34 # 45| valnum = r0_19 -# 45| r0_38(glval) = VariableAddress[global03] : +# 45| r0_36(glval) = VariableAddress[global03] : # 45| valnum = r0_20 -# 45| r0_39(int) = Load : &:r0_38, ~m0_31 +# 45| r0_37(int) = Load : &:r0_36, ~m0_30 # 45| valnum = unique -# 45| r0_40(int) = Add : r0_37, r0_39 -# 45| valnum = r0_40 -# 45| r0_41(glval) = VariableAddress[x] : +# 45| r0_38(int) = Add : r0_35, r0_37 +# 45| valnum = r0_38 +# 45| r0_39(glval) = VariableAddress[x] : # 45| valnum = r0_9 -# 45| m0_42(int) = Store : &:r0_41, r0_40 -# 45| valnum = r0_40 -# 45| r0_43(glval) = CopyValue : r0_41 -# 45| valnum = r0_9 -# 46| r0_44(glval) = VariableAddress[x] : +# 45| m0_40(int) = Store : &:r0_39, r0_38 +# 45| valnum = r0_38 +# 46| r0_41(glval) = VariableAddress[x] : # 46| valnum = r0_9 -# 46| r0_45(int) = Load : &:r0_44, m0_42 -# 46| valnum = r0_40 -# 46| r0_46(glval) = VariableAddress[y] : +# 46| r0_42(int) = Load : &:r0_41, m0_40 +# 46| valnum = r0_38 +# 46| r0_43(glval) = VariableAddress[y] : # 46| valnum = r0_11 -# 46| m0_47(int) = Store : &:r0_46, r0_45 -# 46| valnum = r0_40 -# 46| r0_48(glval) = CopyValue : r0_46 -# 46| valnum = r0_11 -# 47| v0_49(void) = NoOp : -# 39| r0_50(glval) = VariableAddress[#return] : +# 46| m0_44(int) = Store : &:r0_43, r0_42 +# 46| valnum = r0_38 +# 47| v0_45(void) = NoOp : +# 39| r0_46(glval) = VariableAddress[#return] : # 39| valnum = unique -# 39| v0_51(void) = ReturnValue : &:r0_50 -# 39| v0_52(void) = UnmodeledUse : mu* -# 39| v0_53(void) = ExitFunction : +# 39| v0_47(void) = ReturnValue : &:r0_46 +# 39| v0_48(void) = UnmodeledUse : mu* +# 39| v0_49(void) = ExitFunction : # 49| unsigned int my_strspn(char const*, char const*) # 49| Block 0 @@ -419,8 +393,6 @@ test.cpp: # 55| valnum = r0_7 # 55| m2_3(char *) = Store : &:r2_2, r2_1 # 55| valnum = m0_6 -# 55| r2_4(glval) = CopyValue : r2_2 -# 55| valnum = r0_7 #-----| Goto -> Block 3 # 56| Block 3 @@ -602,8 +574,6 @@ test.cpp: # 80| valnum = r0_5 # 80| m1_6(signed short) = Store : &:r1_5, r1_4 # 80| valnum = r1_4 -# 80| r1_7(glval) = CopyValue : r1_5 -# 80| valnum = r0_5 #-----| Goto -> Block 2 # 82| Block 2 @@ -680,12 +650,10 @@ test.cpp: # 88| valnum = r0_9 # 88| m3_4(int) = Store : &:r3_3, r3_2 # 88| valnum = m3_0 -# 88| r3_5(glval) = CopyValue : r3_3 -# 88| valnum = r0_9 -# 89| v3_6(void) = NoOp : -# 84| v3_7(void) = ReturnVoid : -# 84| v3_8(void) = UnmodeledUse : mu* -# 84| v3_9(void) = ExitFunction : +# 89| v3_5(void) = NoOp : +# 84| v3_6(void) = ReturnVoid : +# 84| v3_7(void) = UnmodeledUse : mu* +# 84| v3_8(void) = ExitFunction : # 91| int regression_test00() # 91| Block 0