From 4fdc34b02934cd4177f9a52990206f2c5b64289a Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 6 Jun 2018 12:33:29 +0100 Subject: [PATCH 1/7] combine boolean logic --- src/fsharp/Optimizer.fs | 82 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index bd7f595d5e3..b417b97f70a 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -1382,6 +1382,84 @@ let rec (|KnownValApp|_|) expr = | Expr.App(KnownValApp(vref, typeArgs1, otherArgs1), _, typeArgs2, otherArgs2, _) -> Some(vref, typeArgs1@typeArgs2, otherArgs1@otherArgs2) | _ -> None +// Matches boolean decision tree: +// check single case with bool const. +let (|TDBoolSwitch|_|) dtree = + match dtree with + | TDSwitch( expr, + [TCase (DecisionTreeTest.Const(Const.Bool b), TDSuccess([], caseIndex))], + Some (TDSuccess([], defaultIndex)), + range) -> Some (expr, b, caseIndex, defaultIndex, range) + | _ -> None + +// check target that have a constant bool value +let (|ConstantBoolTarget|_|) t = + match t with + | TTarget([], Expr.Const (Const.Bool b,_,_),_) -> Some b + | _ -> None + +// Combine switch-over-match, see https://github.com/Microsoft/visualfsharp/issues/635 +let rec CombineBoolLogic expr = + + // try to find nested boolean switch + match expr with + | Expr.Match(outerSP, outerMatchRange, + TDBoolSwitch(Expr.Match(_innerSP, _innerMatchRange, TDBoolSwitch( mex, innerTestBool, innerCaseIndex, innerDefaultIndex, _innerSwitchRange), + innerTargets, _innerDefaultRange, _innerMatch_ty), + outerTestBool, outerCaseIndex, outerDefaultIndex, outerSwitchRange ), + outerTargets, outerDefaultRange, outerMatchTy) -> + + // find inner targets that have constant values to shortcut them directly to return outer targets + match innerTargets.[innerCaseIndex], innerTargets.[innerDefaultIndex] with + + // test (if mex = innerTestBool then exp else innerTestDefaultResult) is outerTestBool --> outerCaseIndex + // default --> outerDefaultIndex + // ==> + // test mex is innerTestBool + // test exp is outerTestBool --> outerCaseIndex + // otherwise --> IF innerTestDefaultResult == outerTestBool THEN outerCaseIndex ELSE outerDefaultIndex + // otherwise --> outerDefaultIndex + | TTarget([],exp,_), ConstantBoolTarget innerTestDefaultResult -> + + let newdtree = + // test mex is innerTestBool + TDSwitch(mex, [TCase (DecisionTreeTest.Const(Const.Bool innerTestBool), + // test exp is outerTestBool + TDSwitch(exp, [TCase (DecisionTreeTest.Const(Const.Bool outerTestBool), TDSuccess([], outerCaseIndex) ) ], + // otherwise --> IF innerTestDefaultResult == outerTestBool THEN outerCaseIndex ELSE outerDefaultIndex + Some (TDSuccess([], (if innerTestDefaultResult = outerTestBool then outerCaseIndex else outerDefaultIndex) )), outerSwitchRange) ) ], + // otherwise --> outerDefaultIndex + Some (TDSuccess([], outerDefaultIndex)), outerSwitchRange) + + let newExpr = Expr.Match(outerSP, outerMatchRange, newdtree, outerTargets, outerDefaultRange, outerMatchTy) + CombineBoolLogic newExpr + + // test (if mex = innerTestBool then innerTestDefaultResult else exp) is outerTestBool --> outerCaseIndex + // default --> outerDefaultIndex + // ==> + // test mex is innerTestBool --> IF innerTestDefaultResult == outerTestBool THEN outerCaseIndex ELSE outerDefaultIndex + // otherwise + // test exp is outerTestBool --> outerCaseIndex + // otherwise --> outerDefaultIndex + | ConstantBoolTarget innerTestDefaultResult,TTarget([],exp,_) -> + + let newdtree = + // test mex is innerTestBool + TDSwitch(mex, [TCase (DecisionTreeTest.Const(Const.Bool innerTestBool), + TDSuccess([], (if innerTestDefaultResult = outerTestBool then outerCaseIndex else outerDefaultIndex) ) ) ], + // otherwise + // test exp is outerTestBool --> outerCaseIndex + Some (TDSwitch(exp, [TCase (DecisionTreeTest.Const(Const.Bool outerTestBool), TDSuccess([], outerCaseIndex) ) ], + // otherwise --> outerDefaultIndex + Some (TDSuccess([], outerDefaultIndex) ), outerSwitchRange) ), outerSwitchRange ) + let newExpr = Expr.Match(outerSP, outerMatchRange, newdtree, outerTargets, outerDefaultRange, outerMatchTy) + CombineBoolLogic newExpr + | _ -> + expr + | _ -> + expr + + //------------------------------------------------------------------------- // ExpandStructuralBinding // @@ -2811,7 +2889,9 @@ and OptimizeMatch cenv env (spMatch, exprm, dtree, targets, m, ty) = // REVIEW: consider collecting, merging and using information flowing through each line of the decision tree to each target let dtree', dinfo = OptimizeDecisionTree cenv env m dtree let targets', tinfos = OptimizeDecisionTreeTargets cenv env m targets - RebuildOptimizedMatch (spMatch, exprm, m, ty, dtree', targets', dinfo, tinfos) + let newExpr, newInfo = RebuildOptimizedMatch (spMatch, exprm, m, ty, dtree', targets', dinfo, tinfos) + let newExpr2 = CombineBoolLogic newExpr + newExpr2, newInfo and CombineMatchInfos dinfo tinfo = { TotalSize = dinfo.TotalSize + tinfo.TotalSize From d12b5247fa4b3d696f0d4e99a8e11ff51f99bcd2 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 6 Jun 2018 15:51:21 +0100 Subject: [PATCH 2/7] generalize and ensure no code duplication --- src/fsharp/Optimizer.fs | 107 ++++++++++++++++++++-------------------- src/fsharp/tast.fs | 84 ++++++++++++++++--------------- 2 files changed, 98 insertions(+), 93 deletions(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index b417b97f70a..cb2fe7ffbf4 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -1387,74 +1387,75 @@ let rec (|KnownValApp|_|) expr = let (|TDBoolSwitch|_|) dtree = match dtree with | TDSwitch( expr, - [TCase (DecisionTreeTest.Const(Const.Bool b), TDSuccess([], caseIndex))], - Some (TDSuccess([], defaultIndex)), - range) -> Some (expr, b, caseIndex, defaultIndex, range) + [TCase (DecisionTreeTest.Const(Const.Bool b), caseTree )], + Some defaultTree, + range) -> Some (expr, b, caseTree, defaultTree, range) | _ -> None // check target that have a constant bool value -let (|ConstantBoolTarget|_|) t = +let (|ConstantBoolTarget|_|) t = match t with | TTarget([], Expr.Const (Const.Bool b,_,_),_) -> Some b | _ -> None -// Combine switch-over-match, see https://github.com/Microsoft/visualfsharp/issues/635 +/// Is this a tree, where each decision is a two-way switch (to prevent later duplication of trees), and each branch returns or true/false, +/// apart from one branch which defers to another expression +let rec CountBoolLogicTree ((targets: DecisionTreeTarget[], costOuterCaseTree, costOuterDefaultTree, testBool) as data) tree = + match tree with + | TDSwitch (_expr, [case], Some defaultTree, _range) -> + let tc1,ec1 = CountBoolLogicTree data case.CaseTree + let tc2, ec2 = CountBoolLogicTree data defaultTree + tc1 + tc2, ec1 + ec2 + | TDSuccess([], idx) -> + match targets.[idx] with + | ConstantBoolTarget result -> (if result = testBool then costOuterCaseTree else costOuterDefaultTree), 0 + | TTarget([], _exp, _) -> costOuterCaseTree + costOuterDefaultTree, 10 + | _ -> 100, 100 + | _ -> 100, 100 + +/// Rewrite a decision tree for which IsBoolLogic returned true. Produce aa new decision +/// tree where at each ConstantBoolSuccessTree tip we replace with either outerCaseTree or outerDefaultTree +/// depending on whether the target result was true/false +let rec RewriteBoolLogicTree ((targets: DecisionTreeTarget[], outerCaseTree, outerDefaultTree, testBool) as data) tree = + match tree with + | TDSwitch (expr, cases, defaultTree, range) -> + let cases2 = cases |> List.map (RewriteBoolLogicCase data) + let defaultTree2 = defaultTree |> Option.map (RewriteBoolLogicTree data) + TDSwitch (expr, cases2, defaultTree2, range) + | TDSuccess([], idx) -> + match targets.[idx] with + | ConstantBoolTarget result -> if result = testBool then outerCaseTree else outerDefaultTree + | TTarget([], exp, _) -> mkBoolSwitch exp.Range exp outerCaseTree outerDefaultTree + | _ -> failwith "CountBoolLogicTree should exclude this case" + | _ -> failwith "CountBoolLogicTree should exclude this case" + +and RewriteBoolLogicCase data (TCase(test, tree)) = + TCase(test, RewriteBoolLogicTree data tree) + +// Repeatedly combine switch-over-match decision trees, see https://github.com/Microsoft/visualfsharp/issues/635. +// The outer decision tree is doing a swithc over a boolean result, the inner match is producing only +// constant boolean results in its targets. let rec CombineBoolLogic expr = // try to find nested boolean switch match expr with | Expr.Match(outerSP, outerMatchRange, - TDBoolSwitch(Expr.Match(_innerSP, _innerMatchRange, TDBoolSwitch( mex, innerTestBool, innerCaseIndex, innerDefaultIndex, _innerSwitchRange), - innerTargets, _innerDefaultRange, _innerMatch_ty), - outerTestBool, outerCaseIndex, outerDefaultIndex, outerSwitchRange ), + TDBoolSwitch(Expr.Match(_innerSP, _innerMatchRange, innerTree, innerTargets, _innerDefaultRange, _innerMatchTy), + outerTestBool, outerCaseTree, outerDefaultTree, _outerSwitchRange ), outerTargets, outerDefaultRange, outerMatchTy) -> - // find inner targets that have constant values to shortcut them directly to return outer targets - match innerTargets.[innerCaseIndex], innerTargets.[innerDefaultIndex] with - - // test (if mex = innerTestBool then exp else innerTestDefaultResult) is outerTestBool --> outerCaseIndex - // default --> outerDefaultIndex - // ==> - // test mex is innerTestBool - // test exp is outerTestBool --> outerCaseIndex - // otherwise --> IF innerTestDefaultResult == outerTestBool THEN outerCaseIndex ELSE outerDefaultIndex - // otherwise --> outerDefaultIndex - | TTarget([],exp,_), ConstantBoolTarget innerTestDefaultResult -> - - let newdtree = - // test mex is innerTestBool - TDSwitch(mex, [TCase (DecisionTreeTest.Const(Const.Bool innerTestBool), - // test exp is outerTestBool - TDSwitch(exp, [TCase (DecisionTreeTest.Const(Const.Bool outerTestBool), TDSuccess([], outerCaseIndex) ) ], - // otherwise --> IF innerTestDefaultResult == outerTestBool THEN outerCaseIndex ELSE outerDefaultIndex - Some (TDSuccess([], (if innerTestDefaultResult = outerTestBool then outerCaseIndex else outerDefaultIndex) )), outerSwitchRange) ) ], - // otherwise --> outerDefaultIndex - Some (TDSuccess([], outerDefaultIndex)), outerSwitchRange) - - let newExpr = Expr.Match(outerSP, outerMatchRange, newdtree, outerTargets, outerDefaultRange, outerMatchTy) - CombineBoolLogic newExpr + let costOuterCaseTree = match outerCaseTree with TDSuccess _ -> 0 | _ -> 1 + let costOuterDefaultTree = match outerDefaultTree with TDSuccess _ -> 0 | _ -> 1 + let tc, ec = CountBoolLogicTree (innerTargets, costOuterCaseTree, costOuterDefaultTree, outerTestBool) innerTree + // At most one expression, no overall duplication of TSwitch nodes + if tc <= costOuterCaseTree + costOuterDefaultTree && ec <= 10 then + let newExpr = + Expr.Match(outerSP, outerMatchRange, + RewriteBoolLogicTree (innerTargets, outerCaseTree, outerDefaultTree, outerTestBool) innerTree, + outerTargets, outerDefaultRange, outerMatchTy) - // test (if mex = innerTestBool then innerTestDefaultResult else exp) is outerTestBool --> outerCaseIndex - // default --> outerDefaultIndex - // ==> - // test mex is innerTestBool --> IF innerTestDefaultResult == outerTestBool THEN outerCaseIndex ELSE outerDefaultIndex - // otherwise - // test exp is outerTestBool --> outerCaseIndex - // otherwise --> outerDefaultIndex - | ConstantBoolTarget innerTestDefaultResult,TTarget([],exp,_) -> - - let newdtree = - // test mex is innerTestBool - TDSwitch(mex, [TCase (DecisionTreeTest.Const(Const.Bool innerTestBool), - TDSuccess([], (if innerTestDefaultResult = outerTestBool then outerCaseIndex else outerDefaultIndex) ) ) ], - // otherwise - // test exp is outerTestBool --> outerCaseIndex - Some (TDSwitch(exp, [TCase (DecisionTreeTest.Const(Const.Bool outerTestBool), TDSuccess([], outerCaseIndex) ) ], - // otherwise --> outerDefaultIndex - Some (TDSuccess([], outerDefaultIndex) ), outerSwitchRange) ), outerSwitchRange ) - let newExpr = Expr.Match(outerSP, outerMatchRange, newdtree, outerTargets, outerDefaultRange, outerMatchTy) CombineBoolLogic newExpr - | _ -> + else expr | _ -> expr @@ -2890,7 +2891,7 @@ and OptimizeMatch cenv env (spMatch, exprm, dtree, targets, m, ty) = let dtree', dinfo = OptimizeDecisionTree cenv env m dtree let targets', tinfos = OptimizeDecisionTreeTargets cenv env m targets let newExpr, newInfo = RebuildOptimizedMatch (spMatch, exprm, m, ty, dtree', targets', dinfo, tinfos) - let newExpr2 = CombineBoolLogic newExpr + let newExpr2 = if not (cenv.settings.localOpt()) then newExpr else CombineBoolLogic newExpr newExpr2, newInfo and CombineMatchInfos dinfo tinfo = diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index ffef5fc82b0..94d8d3ede1f 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -261,7 +261,7 @@ type ValFlags(flags:int64) = (flags &&& ~~~0b0011001100000000000L) /// Represents the kind of a type parameter -[] +[] type TyparKind = | Type @@ -273,13 +273,10 @@ type TyparKind = | TyparKind.Type -> None | TyparKind.Measure -> Some "Measure" - [] - member x.DebugText = x.ToString() + //[] + //member x.DebugText = x.ToString() - override x.ToString() = - match x with - | TyparKind.Type -> "type" - | TyparKind.Measure -> "measure" + override x.ToString() = sprintf "%+A" x [] /// Indicates if the type variable can be solved or given new constraints. The status of a type variable @@ -1338,7 +1335,7 @@ and override x.ToString() = "TyconAugmentation(...)" and - [] + [] /// The information for the contents of a type. Also used for a provided namespace. TyconRepresentation = @@ -1382,10 +1379,10 @@ and /// The information for exception definitions should be folded into here. | TNoRepr - [] - member x.DebugText = x.ToString() + //[] + //member x.DebugText = x.ToString() - override x.ToString() = "TyconRepresentation(...)" + override x.ToString() = sprintf "%+A" x and [] @@ -1740,7 +1737,7 @@ and override x.ToString() = x.Name and - [] + [] ExceptionInfo = /// Indicates that an exception is an abbreviation for the given exception | TExnAbbrevRepr of TyconRef @@ -1754,10 +1751,11 @@ and /// Indicates that an exception is abstract, i.e. is in a signature file, and we do not know the representation | TExnNone - [] - member x.DebugText = x.ToString() + // %+A formatting is used, so this is not needed + //[] + //member x.DebugText = x.ToString() - override x.ToString() = "ExceptionInfo(...)" + override x.ToString() = sprintf "%+A" x and [] ModuleOrNamespaceType(kind: ModuleOrNamespaceKind, vals: QueueList, entities: QueueList) = @@ -2323,11 +2321,11 @@ and /// Indicates a constraint that a type is .NET unmanaged type | IsUnmanaged of range - // Prefer the default formatting of this union type + // %+A formatting is used, so this is not needed //[] //member x.DebugText = x.ToString() - // - //override x.ToString() = "TyparConstraint(...)" + + override x.ToString() = sprintf "%+A" x /// The specification of a member constraint that must be solved and @@ -2357,7 +2355,7 @@ and override x.ToString() = "TTrait(" + x.MemberName + ")" and - [] + [] /// Indicates the solution of a member constraint during inference. TraitConstraintSln = @@ -2394,10 +2392,11 @@ and /// Indicates a trait is solved by a 'fake' instance of an operator, like '+' on integers | BuiltInSln - [] - member x.DebugText = x.ToString() + // %+A formatting is used, so this is not needed + //[] + //member x.DebugText = x.ToString() - override x.ToString() = "TraitConstraintSln(...)" + override x.ToString() = sprintf "%+A" x /// The partial information used to index the methods of all those in a ModuleOrNamespace. and [] @@ -3979,11 +3978,11 @@ and /// Raising a measure to a rational power | RationalPower of Measure * Rational - // Prefer the default formatting of this union type + // %+A formatting is used, so this is not needed //[] //member x.DebugText = x.ToString() - // - //override x.ToString() = "Measure(...)" + + override x.ToString() = sprintf "%+A" x and [] @@ -4232,7 +4231,7 @@ and and Attribs = Attrib list and - [] + [] AttribKind = /// Indicates an attribute refers to a type defined in an imported .NET assembly @@ -4241,10 +4240,11 @@ and /// Indicates an attribute refers to a type defined in an imported F# assembly | FSAttrib of ValRef - [] - member x.DebugText = x.ToString() + // %+A formatting is used, so this is not needed + //[] + //member x.DebugText = x.ToString() - override x.ToString() = sprintf "AttribKind(...)" + override x.ToString() = sprintf "%+A" x /// Attrib(kind,unnamedArgs,propVal,appliedToAGetterOrSetter,targetsOpt,range) and @@ -4308,10 +4308,11 @@ and [] /// Decision trees. Pattern matching has been compiled down to /// a decision tree by this point. The right-hand-sides (actions) of +/// a decision tree by this point. The right-hand-sides (actions) of /// the decision tree are labelled by integers that are unique for that /// particular tree. and - [] + [] DecisionTree = /// TDSwitch(input, cases, default, range) @@ -4340,10 +4341,11 @@ and /// body -- the rest of the decision tree | TDBind of Binding * DecisionTree - [] - member x.DebugText = x.ToString() + // %+A formatting is used, so this is not needed + //[] + //member x.DebugText = x.ToString() - override x.ToString() = sprintf "DecisionTree(...)" + override x.ToString() = sprintf "%+A" x /// Represents a test and a subsequent decision tree and @@ -4363,7 +4365,7 @@ and override x.ToString() = sprintf "DecisionTreeCase(...)" and - [] + [] DecisionTreeTest = /// Test if the input to a decision tree matches the given union case | UnionCase of UnionCaseRef * TypeInst @@ -4393,10 +4395,11 @@ and /// activePatternInfo -- The extracted info for the active pattern. | ActivePatternCase of Expr * TTypes * (ValRef * TypeInst) option * int * ActivePatternInfo - [] - member x.DebugText = x.ToString() + // %+A formatting is used, so this is not needed + //[] + //member x.DebugText = x.ToString() - override x.ToString() = sprintf "DecisionTreeTest(...)" + override x.ToString() = sprintf "%+A" x /// A target of a decision tree. Can be thought of as a little function, though is compiled as a local block. and @@ -4890,7 +4893,7 @@ and /// The contents of a module-or-namespace-fragment definition and - [] + [] ModuleOrNamespaceExpr = /// Indicates the module is a module with a signature | TMAbstract of ModuleOrNamespaceExprWithSig @@ -4907,10 +4910,11 @@ and /// Indicates the module fragment is a 'rec' or 'non-rec' definition of types and modules | TMDefRec of isRec:bool * Tycon list * ModuleOrNamespaceBinding list * range - [] + // %+A formatting is used, so this is not needed + //[] member x.DebugText = x.ToString() - override x.ToString() = "ModuleOrNamespaceExpr(...)" + override x.ToString() = sprintf "%+A" x /// A named module-or-namespace-fragment definition and From 00e6d6240f143cbc1bd4e6ca487928078306e6ab Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 7 Jun 2018 00:54:29 +0100 Subject: [PATCH 3/7] fix tests --- src/fsharp/tast.fs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 94d8d3ede1f..222a7ab64b1 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -276,7 +276,10 @@ type TyparKind = //[] //member x.DebugText = x.ToString() - override x.ToString() = sprintf "%+A" x + override x.ToString() = + match x with + | TyparKind.Type -> "type" + | TyparKind.Measure -> "measure" [] /// Indicates if the type variable can be solved or given new constraints. The status of a type variable From 18e4e2abf99360c4bdad72bd032e4cfb4b2c3292 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 7 Jun 2018 12:45:39 +0100 Subject: [PATCH 4/7] update baselines --- .../FSharp.Compiler.Private/FSComp.fs | 2 +- .../FSharp.Compiler.Private/FSComp.resx | 2 +- .../EmittedIL/Mutation/Mutation02.il.bsl | 16 ++--- .../EmittedIL/Mutation/Mutation03.il.bsl | 16 ++--- .../EmittedIL/Mutation/Mutation04.il.bsl | 16 ++--- .../EmittedIL/Mutation/Mutation05.il.bsl | 18 ++--- .../TestFunctions/Testfunction6.il.bsl | 20 +++--- .../GenericComparison/Equals02.il.bsl | 10 +-- .../GenericComparison/Equals03.il.bsl | 69 ++++++++----------- tests/scripts/compiler-perf-results.txt | 4 ++ 10 files changed, 82 insertions(+), 91 deletions(-) diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs index c3672425ebb..b1c033de961 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs @@ -4339,7 +4339,7 @@ type internal SR private() = /// A type annotated with IsReadOnly must also be a struct. Consider adding the [] attribute to the type. /// (Originally from ..\FSComp.txt:1437) static member tcIsReadOnlyNotStruct() = (3232, GetStringFunc("tcIsReadOnlyNotStruct",",,,") ) - /// Struct members cannot return 'this' or fields by reference + /// Struct members cannot return the address of fields of the struct by reference /// (Originally from ..\FSComp.txt:1438) static member chkStructsMayNotReturnAddressesOfContents() = (3234, GetStringFunc("chkStructsMayNotReturnAddressesOfContents",",,,") ) diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx index 2289e761c7b..648490ca5c9 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx @@ -4343,6 +4343,6 @@ A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type. - Struct members cannot return 'this' or fields by reference + Struct members cannot return the address of fields of the struct by reference \ No newline at end of file diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl index 0a759b0de44..74e10e2966f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly Mutation02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Mutation02 { - // Offset: 0x00000000 Length: 0x0000019A + // Offset: 0x00000000 Length: 0x000001A2 } .mresource public FSharpOptimizationData.Mutation02 { - // Offset: 0x000001A0 Length: 0x0000006C + // Offset: 0x000001A8 Length: 0x0000006C } .module Mutation02.exe -// MVID: {59B19213-8C6A-2F0D-A745-03831392B159} +// MVID: {5B1872AD-8C6A-2F0D-A745-0383AD72185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01720000 +// Image base: 0x00AC0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::'x@4-13' + IL_0000: ldsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::x@4 IL_0005: ret } // end of method Mutation02::get_x @@ -71,7 +71,7 @@ .class private abstract auto ansi sealed ''.$Mutation02 extends [mscorlib]System.Object { - .field static assembly valuetype [mscorlib]System.TimeSpan 'x@4-13' + .field static assembly valuetype [mscorlib]System.TimeSpan x@4 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly int32 init@ .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -88,7 +88,7 @@ .line 4,4 : 1,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation02.fs' IL_0000: ldsfld valuetype [mscorlib]System.TimeSpan [mscorlib]System.TimeSpan::MinValue IL_0005: dup - IL_0006: stsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::'x@4-13' + IL_0006: stsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::x@4 IL_000b: stloc.0 .line 5,5 : 1,13 '' IL_000c: call valuetype [mscorlib]System.TimeSpan Mutation02::get_x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl index 34f12d567a2..0af865b573e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly Mutation03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Mutation03 { - // Offset: 0x00000000 Length: 0x0000019A + // Offset: 0x00000000 Length: 0x000001A2 } .mresource public FSharpOptimizationData.Mutation03 { - // Offset: 0x000001A0 Length: 0x0000006C + // Offset: 0x000001A8 Length: 0x0000006C } .module Mutation03.exe -// MVID: {59B19213-8C6A-2EEC-A745-03831392B159} +// MVID: {5B1872AD-8C6A-2EEC-A745-0383AD72185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00390000 +// Image base: 0x02440000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::'x@4-15' + IL_0000: ldsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::'x@4-2' IL_0005: ret } // end of method Mutation03::get_x @@ -71,7 +71,7 @@ .class private abstract auto ansi sealed ''.$Mutation03 extends [mscorlib]System.Object { - .field static assembly valuetype [mscorlib]System.DateTime 'x@4-15' + .field static assembly valuetype [mscorlib]System.DateTime 'x@4-2' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly int32 init@ .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -88,7 +88,7 @@ .line 4,4 : 1,28 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation03.fs' IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() IL_0005: dup - IL_0006: stsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::'x@4-15' + IL_0006: stsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::'x@4-2' IL_000b: stloc.0 .line 5,5 : 1,6 '' IL_000c: call valuetype [mscorlib]System.DateTime Mutation03::get_x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl index d379dc13144..37d74a6beac 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly Mutation04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Mutation04 { - // Offset: 0x00000000 Length: 0x000001AD + // Offset: 0x00000000 Length: 0x000001B5 } .mresource public FSharpOptimizationData.Mutation04 { - // Offset: 0x000001B8 Length: 0x0000006C + // Offset: 0x000001C0 Length: 0x0000006C } .module Mutation04.exe -// MVID: {59B19213-8C6A-2E43-A745-03831392B159} +// MVID: {5B1872AD-8C6A-2E43-A745-0383AD72185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x013F0000 +// Image base: 0x02430000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::'x@4-17' + IL_0000: ldsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::'x@4-4' IL_0005: ret } // end of method Mutation04::get_x @@ -71,7 +71,7 @@ .class private abstract auto ansi sealed ''.$Mutation04 extends [mscorlib]System.Object { - .field static assembly valuetype [mscorlib]System.Decimal 'x@4-17' + .field static assembly valuetype [mscorlib]System.Decimal 'x@4-4' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly int32 init@ .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -88,7 +88,7 @@ .line 4,4 : 1,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation04.fs' IL_0000: ldsfld valuetype [mscorlib]System.Decimal [mscorlib]System.Decimal::MaxValue IL_0005: dup - IL_0006: stsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::'x@4-17' + IL_0006: stsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::'x@4-4' IL_000b: stloc.0 .line 5,5 : 1,13 '' IL_000c: call valuetype [mscorlib]System.Decimal Mutation04::get_x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl index 8ea74f29990..6e33c9c71b4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly Mutation05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Mutation05 { - // Offset: 0x00000000 Length: 0x000004C8 + // Offset: 0x00000000 Length: 0x000004CE } .mresource public FSharpOptimizationData.Mutation05 { - // Offset: 0x000004D0 Length: 0x00000127 + // Offset: 0x000004D8 Length: 0x00000127 } .module Mutation05.exe -// MVID: {59B19213-8C6A-2E22-A745-03831392B159} +// MVID: {5B1872AD-8C6A-2E22-A745-0383AD72185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01290000 +// Image base: 0x01040000 // =============== CLASS MEMBERS DECLARATION =================== @@ -115,7 +115,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) .field static assembly int32 x .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) - .field static assembly int32 'init@9-2' + .field static assembly int32 init@9 .method public specialname rtspecialname instance void .ctor() cil managed { @@ -137,7 +137,7 @@ .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::'init@9-2' + IL_0002: ldsfld int32 Mutation05/StaticC::init@9 IL_0007: ldc.i4.1 IL_0008: bge.s IL_000c @@ -167,7 +167,7 @@ .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::'init@9-2' + IL_0002: ldsfld int32 Mutation05/StaticC::init@9 IL_0007: ldc.i4.1 IL_0008: bge.s IL_000c @@ -231,7 +231,7 @@ IL_0003: stsfld int32 Mutation05/StaticC::x IL_0008: ldc.i4.1 IL_0009: volatile. - IL_000b: stsfld int32 Mutation05/StaticC::'init@9-2' + IL_000b: stsfld int32 Mutation05/StaticC::init@9 .line 9,9 : 6,13 '' IL_0010: ret } // end of method $Mutation05::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl index 3129596e680..5b6e1084b00 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly TestFunction6 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction6 { - // Offset: 0x00000000 Length: 0x000001FD + // Offset: 0x00000000 Length: 0x00000205 } .mresource public FSharpOptimizationData.TestFunction6 { - // Offset: 0x00000208 Length: 0x00000088 + // Offset: 0x00000210 Length: 0x00000088 } .module TestFunction6.exe -// MVID: {59B19208-6591-8929-A745-03830892B159} +// MVID: {5B1872C0-6591-8929-A745-0383C072185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00690000 +// Image base: 0x02790000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,7 +51,7 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable sealed nested assembly beforefieldinit 'f@11-1' + .class auto ansi serializable sealed nested assembly beforefieldinit f@11 extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 { .method assembly specialname rtspecialname @@ -64,7 +64,7 @@ IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() IL_0006: ret - } // end of method 'f@11-1'::.ctor + } // end of method f@11::.ctor .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar0) cil managed @@ -86,9 +86,9 @@ IL_0017: ldloc.0 IL_0018: add IL_0019: ret - } // end of method 'f@11-1'::Invoke + } // end of method f@11::Invoke - } // end of class 'f@11-1' + } // end of class f@11 .method public static int32 TestFunction1() cil managed { @@ -117,7 +117,7 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 f) .line 100001,100001 : 0,0 '' - IL_0000: newobj instance void TestFunction6/'f@11-1'::.ctor() + IL_0000: newobj instance void TestFunction6/f@11::.ctor() IL_0005: stloc.0 .line 14,14 : 5,14 '' IL_0006: ldloc.0 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl index c9d066af0ea..30af1cad5cf 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly Equals02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Equals02 { - // Offset: 0x00000000 Length: 0x00000234 + // Offset: 0x00000000 Length: 0x0000023C } .mresource public FSharpOptimizationData.Equals02 { - // Offset: 0x00000238 Length: 0x000000B6 + // Offset: 0x00000240 Length: 0x000000B6 } .module Equals02.dll -// MVID: {59B18AEE-0759-B6D8-A745-0383EE8AB159} +// MVID: {5B18753B-0759-B6D8-A745-03833B75185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02880000 +// Image base: 0x00F20000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl index de03157c58f..e222d314825 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 + .ver 4:4:3:0 } .assembly Equals03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Equals03 { - // Offset: 0x00000000 Length: 0x00000234 + // Offset: 0x00000000 Length: 0x0000023C } .mresource public FSharpOptimizationData.Equals03 { - // Offset: 0x00000238 Length: 0x000000B6 + // Offset: 0x00000240 Length: 0x000000B6 } .module Equals03.dll -// MVID: {59B18AEE-0759-3313-A745-0383EE8AB159} +// MVID: {5B18753B-0759-3313-A745-03833B75185B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x010B0000 +// Image base: 0x02630000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) .method public static bool f4_tuple5() cil managed { - // Code size 71 (0x47) + // Code size 63 (0x3f) .maxstack 4 .locals init ([0] bool x, [1] int32 i) @@ -68,54 +68,41 @@ .line 8,8 : 8,32 '' IL_0002: ldc.i4.0 IL_0003: stloc.1 - IL_0004: br.s IL_003d + IL_0004: br.s IL_0035 .line 9,9 : 12,26 '' - IL_0006: ldc.i4.1 - IL_0007: brfalse.s IL_001b - - .line 16707566,16707566 : 0,0 '' - IL_0009: ldstr "5" - IL_000e: ldstr "5" - IL_0013: call bool [mscorlib]System.String::Equals(string, + IL_0006: ldstr "5" + IL_000b: ldstr "5" + IL_0010: call bool [mscorlib]System.String::Equals(string, string) - .line 16707566,16707566 : 0,0 '' - IL_0018: nop - IL_0019: br.s IL_001d - - .line 16707566,16707566 : 0,0 '' - IL_001b: ldc.i4.0 - .line 16707566,16707566 : 0,0 '' - IL_001c: nop - .line 16707566,16707566 : 0,0 '' - IL_001d: brfalse.s IL_0036 + IL_0015: brfalse.s IL_002e .line 16707566,16707566 : 0,0 '' - IL_001f: ldc.r8 6. - IL_0028: ldc.r8 7. - IL_0031: ceq + IL_0017: ldc.r8 6. + IL_0020: ldc.r8 7. + IL_0029: ceq .line 16707566,16707566 : 0,0 '' - IL_0033: nop - IL_0034: br.s IL_0038 + IL_002b: nop + IL_002c: br.s IL_0030 .line 16707566,16707566 : 0,0 '' - IL_0036: ldc.i4.0 + IL_002e: ldc.i4.0 .line 16707566,16707566 : 0,0 '' - IL_0037: nop + IL_002f: nop .line 16707566,16707566 : 0,0 '' - IL_0038: stloc.0 - IL_0039: ldloc.1 - IL_003a: ldc.i4.1 - IL_003b: add - IL_003c: stloc.1 + IL_0030: stloc.0 + IL_0031: ldloc.1 + IL_0032: ldc.i4.1 + IL_0033: add + IL_0034: stloc.1 .line 8,8 : 8,32 '' - IL_003d: ldloc.1 - IL_003e: ldc.i4 0x989681 - IL_0043: blt.s IL_0006 + IL_0035: ldloc.1 + IL_0036: ldc.i4 0x989681 + IL_003b: blt.s IL_0006 .line 10,10 : 8,9 '' - IL_0045: ldloc.0 - IL_0046: ret + IL_003d: ldloc.0 + IL_003e: ret } // end of method EqualsMicroPerfAndCodeGenerationTests::f4_tuple5 } // end of class EqualsMicroPerfAndCodeGenerationTests diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt index 9165a5fbeaf..f35fd1e9e39 100644 --- a/tests/scripts/compiler-perf-results.txt +++ b/tests/scripts/compiler-perf-results.txt @@ -156,3 +156,7 @@ https://github.com/dsyme/visualfsharp.git minvars 129c600ea https://github.com/Microsoft/visualfsharp master b99f487554dec970c841e5fcea5d7ccd2f09216e b99f487554dec970c841e5fcea5d7ccd2f09216e MSRC-3617253 251.13 9.99 34.60 45.46 55.57 57.79 https://github.com/dsyme/visualfsharp.git minvars 129c600eaac62a976377c3c668870dde39a7f1f3 b99f487554dec970c841e5fcea5d7ccd2f09216e MSRC-3617253 250.22 10.06 34.46 44.80 55.67 57.95 https://github.com/Microsoft/visualfsharp master b99f487554dec970c841e5fcea5d7ccd2f09216e b99f487554dec970c841e5fcea5d7ccd2f09216e MSRC-3617253 249.94 9.93 34.61 45.32 56.05 57.91 +https://github.com/dsyme/visualfsharp.git bool2 00e6d6240f143cbc1bd4e6ca487928078306e6ab b224a2d7fdbb34daee771bbeb4826b2529d94621 MSRC-3617253 256.11 10.80 38.68 39.34 49.56 57.59 +https://github.com/dsyme/visualfsharp.git opt5 655dd7c2fccd09d96dd0bbc2f9146ef863a64b04 b224a2d7fdbb34daee771bbeb4826b2529d94621 MSRC-3617253 252.46 9.65 34.04 44.59 56.20 58.46 +https://github.com/dsyme/visualfsharp.git minvars 129c600eaac62a976377c3c668870dde39a7f1f3 b224a2d7fdbb34daee771bbeb4826b2529d94621 MSRC-3617253 250.99 9.67 34.16 44.58 56.34 58.39 +https://github.com/Microsoft/visualfsharp master b224a2d7fdbb34daee771bbeb4826b2529d94621 b224a2d7fdbb34daee771bbeb4826b2529d94621 MSRC-3617253 253.33 9.75 34.20 44.52 55.79 58.05 From 74c98a8363dcc7d196adfc7c2c9b55f5e4c69538 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 7 Jun 2018 19:34:25 +0100 Subject: [PATCH 5/7] fix baseline --- .../GenericComparison/Equals02.il.bsl | 47 ++++++------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl index 30af1cad5cf..aa7bbc68da5 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl @@ -68,51 +68,32 @@ .line 8,8 : 8,32 '' IL_0002: ldc.i4.0 IL_0003: stloc.1 - IL_0004: br.s IL_0022 - + IL_0004: br.s IL_001a .line 9,9 : 12,26 '' - IL_0006: ldc.i4.1 - IL_0007: brfalse.s IL_001b - - .line 16707566,16707566 : 0,0 '' - IL_0009: ldstr "five" - IL_000e: ldstr "5" - IL_0013: call bool [mscorlib]System.String::Equals(string, + IL_0006: ldstr "five" + IL_000b: ldstr "5" + IL_0010: call bool [mscorlib]System.String::Equals(string, string) - .line 16707566,16707566 : 0,0 '' - IL_0018: nop - IL_0019: br.s IL_001d - - .line 16707566,16707566 : 0,0 '' - IL_001b: ldc.i4.0 - .line 16707566,16707566 : 0,0 '' - IL_001c: nop - .line 16707566,16707566 : 0,0 '' - IL_001d: stloc.0 - IL_001e: ldloc.1 - IL_001f: ldc.i4.1 - IL_0020: add - IL_0021: stloc.1 + IL_0015: stloc.0 + IL_0016: ldloc.1 + IL_0017: ldc.i4.1 + IL_0018: add + IL_0019: stloc.1 .line 8,8 : 8,32 '' - IL_0022: ldloc.1 - IL_0023: ldc.i4 0x989681 - IL_0028: blt.s IL_0006 - + IL_001a: ldloc.1 + IL_001b: ldc.i4 0x989681 + IL_0020: blt.s IL_0006 .line 10,10 : 8,9 '' - IL_002a: ldloc.0 - IL_002b: ret + IL_0022: ldloc.0 + IL_0023: ret } // end of method EqualsMicroPerfAndCodeGenerationTests::f4_tuple4 - } // end of class EqualsMicroPerfAndCodeGenerationTests - } // end of class Equals02 - .class private abstract auto ansi sealed ''.$Equals02$fsx extends [mscorlib]System.Object { } // end of class ''.$Equals02$fsx - // ============================================================= // *********** DISASSEMBLY COMPLETE *********************** From 1212562a6551e6854f320d8600a9cf6146aee681 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 7 Jun 2018 21:00:09 +0100 Subject: [PATCH 6/7] Update Optimizer.fs --- src/fsharp/Optimizer.fs | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index cb2fe7ffbf4..06cd2b7bbfd 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -1382,19 +1382,18 @@ let rec (|KnownValApp|_|) expr = | Expr.App(KnownValApp(vref, typeArgs1, otherArgs1), _, typeArgs2, otherArgs2, _) -> Some(vref, typeArgs1@typeArgs2, otherArgs1@otherArgs2) | _ -> None -// Matches boolean decision tree: -// check single case with bool const. +/// Matches boolean decision tree: +/// check single case with bool const. let (|TDBoolSwitch|_|) dtree = match dtree with - | TDSwitch( expr, - [TCase (DecisionTreeTest.Const(Const.Bool b), caseTree )], - Some defaultTree, - range) -> Some (expr, b, caseTree, defaultTree, range) - | _ -> None + | TDSwitch( expr, [TCase (DecisionTreeTest.Const(Const.Bool testBool), caseTree )], Some defaultTree, range) -> + Some (expr, testBool, caseTree, defaultTree, range) + | _ -> + None -// check target that have a constant bool value -let (|ConstantBoolTarget|_|) t = - match t with +/// Check target that have a constant bool value +let (|ConstantBoolTarget|_|) target = + match target with | TTarget([], Expr.Const (Const.Bool b,_,_),_) -> Some b | _ -> None @@ -1413,7 +1412,7 @@ let rec CountBoolLogicTree ((targets: DecisionTreeTarget[], costOuterCaseTree, c | _ -> 100, 100 | _ -> 100, 100 -/// Rewrite a decision tree for which IsBoolLogic returned true. Produce aa new decision +/// Rewrite a decision tree for which CountBoolLogicTree returned a low number (see below). Produce a new decision /// tree where at each ConstantBoolSuccessTree tip we replace with either outerCaseTree or outerDefaultTree /// depending on whether the target result was true/false let rec RewriteBoolLogicTree ((targets: DecisionTreeTarget[], outerCaseTree, outerDefaultTree, testBool) as data) tree = @@ -1425,16 +1424,16 @@ let rec RewriteBoolLogicTree ((targets: DecisionTreeTarget[], outerCaseTree, out | TDSuccess([], idx) -> match targets.[idx] with | ConstantBoolTarget result -> if result = testBool then outerCaseTree else outerDefaultTree - | TTarget([], exp, _) -> mkBoolSwitch exp.Range exp outerCaseTree outerDefaultTree + | TTarget([], exp, _) -> mkBoolSwitch exp.Range exp (if testBool then outerCaseTree else outerDefaultTree) (if testBool then outerDefaultTree else outerCaseTree) | _ -> failwith "CountBoolLogicTree should exclude this case" | _ -> failwith "CountBoolLogicTree should exclude this case" and RewriteBoolLogicCase data (TCase(test, tree)) = TCase(test, RewriteBoolLogicTree data tree) -// Repeatedly combine switch-over-match decision trees, see https://github.com/Microsoft/visualfsharp/issues/635. -// The outer decision tree is doing a swithc over a boolean result, the inner match is producing only -// constant boolean results in its targets. +/// Repeatedly combine switch-over-match decision trees, see https://github.com/Microsoft/visualfsharp/issues/635. +/// The outer decision tree is doing a swithc over a boolean result, the inner match is producing only +/// constant boolean results in its targets. let rec CombineBoolLogic expr = // try to find nested boolean switch From 2b80cf0fab04f3aefc6edc7f4bd938348fbaee3f Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 13 Sep 2018 14:36:59 +0100 Subject: [PATCH 7/7] update baselines --- .../EmittedIL/GeneratedIterators/GenIter01.il.bsl | 6 +++--- .../EmittedIL/GeneratedIterators/GenIter02.il.bsl | 6 +++--- .../EmittedIL/GeneratedIterators/GenIter03.il.bsl | 6 +++--- .../EmittedIL/GeneratedIterators/GenIter04.il.bsl | 6 +++--- .../ListExpressionSteppingTest5.il.bsl | 6 +++--- .../ListExpressionSteppingTest6.il.bsl | 6 +++--- .../CodeGen/EmittedIL/Mutation/Mutation02.il.bsl | 14 +++----------- .../CodeGen/EmittedIL/Mutation/Mutation03.il.bsl | 14 +++----------- .../CodeGen/EmittedIL/Mutation/Mutation04.il.bsl | 14 +++----------- .../CodeGen/EmittedIL/Mutation/Mutation05.il.bsl | 14 +++----------- .../Linq101Aggregates01.il.bsl | 6 +++--- .../Linq101ElementOperators01.il.bsl | 6 +++--- .../Linq101Ordering01.il.bsl | 6 +++--- .../Linq101Partitioning01.il.bsl | 6 +++--- .../Linq101Quantifiers01.il.bsl | 6 +++--- .../QueryExpressionStepping/Linq101Select01.il.bsl | 6 +++--- .../Linq101SetOperators01.il.bsl | 6 +++--- .../QueryExpressionStepping/Linq101Where01.il.bsl | 6 +++--- .../SeqExpressionSteppingTest5.il.bsl | 6 +++--- .../SeqExpressionSteppingTest6.il.bsl | 6 +++--- .../SeqExpressionSteppingTest7.il.bsl | 6 +++--- 21 files changed, 63 insertions(+), 95 deletions(-) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl index d6fe1d4445f..cccf4002477 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly GenIter01 { @@ -36,13 +36,13 @@ // Offset: 0x00000208 Length: 0x0000007A } .module GenIter01.exe -// MVID: {5B17FC4F-F836-DC98-A745-03834FFC175B} +// MVID: {5B9A6329-F836-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02EB0000 +// Image base: 0x01080000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl index b2259b5caab..3203d6f4abf 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly GenIter02 { @@ -36,13 +36,13 @@ // Offset: 0x00000208 Length: 0x0000007B } .module GenIter02.exe -// MVID: {5B17FC4F-F857-DC98-A745-03834FFC175B} +// MVID: {5B9A6329-F857-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02AC0000 +// Image base: 0x02900000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl index ad966b4c3d0..322600496c2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly GenIter03 { @@ -36,13 +36,13 @@ // Offset: 0x00000208 Length: 0x0000007B } .module GenIter03.exe -// MVID: {5B17FC4F-F77C-DC98-A745-03834FFC175B} +// MVID: {5B9A6329-F77C-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x026C0000 +// Image base: 0x026B0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl index 112023a6bd4..905f56f273f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly GenIter04 { @@ -36,13 +36,13 @@ // Offset: 0x000001F8 Length: 0x0000007B } .module GenIter04.exe -// MVID: {5B17FC4F-F79D-DC98-A745-03834FFC175B} +// MVID: {5B9A6329-F79D-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02E40000 +// Image base: 0x00790000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl index 37fd9a2fb09..2d7b794e3c2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly ListExpressionSteppingTest5 { @@ -36,13 +36,13 @@ // Offset: 0x00000280 Length: 0x000000AF } .module ListExpressionSteppingTest5.exe -// MVID: {5B17FC4F-CBE3-BFEA-A745-03834FFC175B} +// MVID: {5B9A6329-CBE3-BFEA-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02D10000 +// Image base: 0x027C0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl index 3bb5ae4bf31..077652288cb 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly ListExpressionSteppingTest6 { @@ -36,13 +36,13 @@ // Offset: 0x000002A8 Length: 0x000000BC } .module ListExpressionSteppingTest6.exe -// MVID: {5B17FC4F-98A2-AB14-A745-03834FFC175B} +// MVID: {5B9A6329-98A2-AB14-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02710000 +// Image base: 0x007B0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl index 34db3b195b7..b26df9510b4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly Mutation02 { @@ -36,21 +36,13 @@ // Offset: 0x000001A8 Length: 0x0000006C } .module Mutation02.exe -<<<<<<< HEAD -// MVID: {5B1872AD-8C6A-2F0D-A745-0383AD72185B} -======= -// MVID: {5B17FC4F-8C6A-2F0D-A745-03834FFC175B} ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// MVID: {5B9A632A-8C6A-2F0D-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -<<<<<<< HEAD -// Image base: 0x00AC0000 -======= -// Image base: 0x00960000 ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// Image base: 0x02750000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl index f9dc209d594..e43810c10bf 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly Mutation03 { @@ -36,21 +36,13 @@ // Offset: 0x000001A8 Length: 0x0000006C } .module Mutation03.exe -<<<<<<< HEAD -// MVID: {5B1872AD-8C6A-2EEC-A745-0383AD72185B} -======= -// MVID: {5B17FC4F-8C6A-2EEC-A745-03834FFC175B} ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// MVID: {5B9A632A-8C6A-2EEC-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -<<<<<<< HEAD -// Image base: 0x02440000 -======= -// Image base: 0x02DC0000 ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// Image base: 0x02CA0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl index 3cd3d4dce75..444d581fc63 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly Mutation04 { @@ -36,21 +36,13 @@ // Offset: 0x000001C0 Length: 0x0000006C } .module Mutation04.exe -<<<<<<< HEAD -// MVID: {5B1872AD-8C6A-2E43-A745-0383AD72185B} -======= -// MVID: {5B17FC4F-8C6A-2E43-A745-03834FFC175B} ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// MVID: {5B9A632A-8C6A-2E43-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -<<<<<<< HEAD -// Image base: 0x02430000 -======= -// Image base: 0x02A70000 ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// Image base: 0x02A80000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl index b909a64b935..fc052bb6e08 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly Mutation05 { @@ -36,21 +36,13 @@ // Offset: 0x000004D8 Length: 0x00000127 } .module Mutation05.exe -<<<<<<< HEAD -// MVID: {5B1872AD-8C6A-2E22-A745-0383AD72185B} -======= -// MVID: {5B17FC4F-8C6A-2E22-A745-03834FFC175B} ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// MVID: {5B9A632A-8C6A-2E22-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -<<<<<<< HEAD -// Image base: 0x01040000 -======= -// Image base: 0x00FA0000 ->>>>>>> 7dbfae8e8b72211c5dc0016cf7c7a2addcf33e58 +// Image base: 0x008E0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl index 465cf47ded2..370a0604f27 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -45,13 +45,13 @@ // Offset: 0x00000618 Length: 0x00000211 } .module Linq101Aggregates01.exe -// MVID: {5B17FC50-D281-4783-A745-038350FC175B} +// MVID: {5B9A632A-D281-4783-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x030E0000 +// Image base: 0x026B0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl index 1c97ad26e4f..58d64b18eee 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -40,13 +40,13 @@ // Offset: 0x00000390 Length: 0x00000127 } .module Linq101ElementOperators01.exe -// MVID: {5B17FC50-19D7-C20D-A745-038350FC175B} +// MVID: {5B9A632A-19D7-C20D-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x028D0000 +// Image base: 0x028F0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl index 0142e46e3ba..4a8faae615e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -40,13 +40,13 @@ // Offset: 0x000003C0 Length: 0x00000134 } .module Linq101Ordering01.exe -// MVID: {5B17FC50-649A-6956-A745-038350FC175B} +// MVID: {5B9A632A-649A-6956-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x04AC0000 +// Image base: 0x00AD0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl index b0440ff333e..9ae95a85508 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -40,13 +40,13 @@ // Offset: 0x000003E8 Length: 0x00000138 } .module Linq101Partitioning01.exe -// MVID: {5B17FC50-B280-A6A2-A745-038350FC175B} +// MVID: {5B9A632A-B280-A6A2-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x008C0000 +// Image base: 0x00AF0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl index 8a5c29baec5..dc67447e16c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -45,13 +45,13 @@ // Offset: 0x000003A8 Length: 0x000000FF } .module Linq101Quantifiers01.exe -// MVID: {5B17FC50-76DD-E373-A745-038350FC175B} +// MVID: {5B9A632A-76DD-E373-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x04E70000 +// Image base: 0x025D0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl index c51ed40783a..b25f8661d58 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -40,13 +40,13 @@ // Offset: 0x00000668 Length: 0x00000204 } .module Linq101Select01.exe -// MVID: {5B17FC50-6057-8F80-A745-038350FC175B} +// MVID: {5B9A632A-6057-8F80-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F90000 +// Image base: 0x00FF0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl index 8d1b4902222..7bed148bba7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -40,13 +40,13 @@ // Offset: 0x000003A0 Length: 0x0000011E } .module Linq101SetOperators01.exe -// MVID: {5B17FC50-4EE5-349F-A745-038350FC175B} +// MVID: {5B9A632A-4EE5-349F-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x008A0000 +// Image base: 0x026A0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl index 208db3a30cc..cc4191d9bb6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly extern Utils { @@ -40,13 +40,13 @@ // Offset: 0x000003E0 Length: 0x0000012E } .module Linq101Where01.exe -// MVID: {5B17FC50-FF23-CD21-A745-038350FC175B} +// MVID: {5B9A632A-FF23-CD21-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05880000 +// Image base: 0x009E0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl index 71247b75db1..3bc2baf36a1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest5 { @@ -36,13 +36,13 @@ // Offset: 0x00000278 Length: 0x000000AD } .module SeqExpressionSteppingTest5.exe -// MVID: {5B17FC50-2432-9401-A745-038350FC175B} +// MVID: {5B9A632A-2432-9401-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x028C0000 +// Image base: 0x026A0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl index befed0e2a04..0453bc859e2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest6 { @@ -36,13 +36,13 @@ // Offset: 0x000002A8 Length: 0x000000BA } .module SeqExpressionSteppingTest6.exe -// MVID: {5B17FC50-2432-94A2-A745-038350FC175B} +// MVID: {5B9A632A-2432-94A2-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x023E0000 +// Image base: 0x01330000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl index 719d4925872..29fcd26be06 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest7 { @@ -36,13 +36,13 @@ // Offset: 0x00000278 Length: 0x00000098 } .module SeqExpressionSteppingTest7.exe -// MVID: {5B17FC50-2432-93C3-A745-038350FC175B} +// MVID: {5B9A632A-2432-93C3-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02D10000 +// Image base: 0x02450000 // =============== CLASS MEMBERS DECLARATION ===================