h$'      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                    Safe-Inferred 5678 P   "! #)('&%$*,+-/.042135KJIHGFEDCBA@?>=<;:9876LRQPONMSTUVW]\[ZYX^a`_bcdefihgjklnmopqrutsvwxyz{|xyvwrutsopqlnmjkfihgdebc^a`_W]\[ZYXUVSTLRQPONM5KJIHGFEDCBA@?>=<;:987604213-/.*,+#)('&%$"!    z{| Safe-Inferred r Safe-Inferred#$  Safe-Inferred> %   Safe-Inferred w Safe-Inferred None 5678glsl Parse GLSLglsl Parse Versionglsl Parse TopDeclglslParse ProcNameglslParse LayoutSpecglslParse ParamDeclglslParse ParamKindglslParse LocalDeclglslParse GlobalDeclglslParse GDeclKindglsl Parse Typeglsl Parse NameIdglsl Parse NameglslParse Namespaceglsl Parse FunNameglsl Parse SwizzleglslParse VecIndex (Swizzle)glslParse NameExprglslParse ExprAtomglsl Parse ExprglslParse BinaryOpglsl Parse UnaryOpglslParse StmtAnnotglsl Parse Stmtglsl Parse Emit Safe-Inferred oglslPretty-print GLSLglslPretty-print VersionglslPretty-print TopDeclglslPretty-print ProcNameglslPretty-print LayoutSpecglslPretty-print ParamDeclglslPretty-print ParamKindglslPretty-print LocalDeclglslPretty-print GlobalDeclglslPretty-print GDeclKindglslPretty-print TypeglslPretty-print NameIdglslPretty-print NameglslPretty-print NamespaceglslPretty-print FunNameglslPretty-print SwizzleglslPretty-print VecIndex (Swizzle)glslPretty-print NameExprglslPretty-print ExprAtomglslPretty-print ExprglslPretty-print BinaryOpglslPretty-print UnaryOpglslPretty-print StmtAnnotglslPretty-print StmtglslPretty-print EmitglslPretty-printing utility!! None#$% None &>glsl05 bits encode the function name for FunCallExpr.glsl"4 bits encode the binary operator.glsl<2 bits encode the type, then 2 bits encode the vec/mat size.glslImplements special encodings for functions with more than 2 args.glsl#ExprAtom type is encoded in 3 bits.  Safe-Inferredj None None,None #$&>f Safe-InferredglslAll variable names are equal.We used to ignore temporary names only, considering all other names as globals and a fixed part of the code. This check is quite expensive and it turns out that most of the time the global variables *are* the same. If they are not, we'll need to pass them as arguments to our new function, but this is rare enough so it won't increase the average function parameter list length too much.  None#$Xglsl8Maximum number of statements to look ahead for equality.Increasing this potentially finds more de-inlining opportunities but also drastically increases the cost of not finding any. This number does not matter if we always find an opportunity quickly.glslMinimum number of times a piece of code needs to appear for it to be worth extracting into a function.glslMaximum number of initial repeats to use for maximization. If we find enough, we're happy and stop looking. Most of the time we'll find fewer than 10, but sometimes a bit of code is repeated a lot which would slow down the algorithm significantly.glsl+Number of statements in the sliding window.glslRemove all occurrences of body from ss.glslCheck for each statement whether it's structurally equal to the first one.None  !"#$%&'()*+,-./0123456789:;<<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abccddefghijklmnopqrstuvwxyz{|}~}p                                                                                                   #glsl-0.0.1.0-5447WOxKyah7huWcwV6G3MLanguage.GLSL.ASTLanguage.GLSL.ConstExprLanguage.GLSL.DeclsLanguage.GLSL.Internal.Bits)Language.GLSL.Optimizer.FunctionGenerator Language.GLSL.Optimizer.LivenessLanguage.GLSL.ParserLanguage.GLSL.PrettyPrintLanguage.GLSL.Optimizer.DFGLanguage.GLSL.BitCodeLanguage.GLSL.Runtime.MathLanguage.GLSL.Runtime.ValueLanguage.GLSL.Runtime.PrimFunsLanguage.GLSL.Runtime.Eval Language.GLSL.StructuralEquality Language.GLSL.Optimizer.DeinlineLanguage.GLSL.OptimizerAnnot parseAnnotppAnnotEmit EmitPosition EmitFragDepthStmt AssignStmtDeclStmtEmitStmtIfStmt StmtAnnotSAannotunAnnotUnaryOpUOpMinusUOpNotBinaryOpBOpPlusBOpMinusBOpMulBOpDivBOpGEBOpGTBOpLEBOpLTBOpAndBOpOrExpr UnaryExpr BinaryExpr FunCallExpr TextureExprAtomExprExprAtom LitIntExpr LitFloatExprIdentifierExpr SwizzleExpr VecIndexExpr MatIndexExprCastNoCastNameExpr UniformExprSwizzleXYZWFunNamePrimAbsPrimAsinPrimAtanPrimCos PrimCrossPrimDot PrimFloor PrimFract PrimLength PrimMat3x3 PrimMat4x4PrimMod PrimNormalizePrimPowPrimSinPrimSmoothstepPrimSqrtPrimStepPrimTanPrimVec2PrimVec3PrimVec4 NamespaceNsTNsSNsUNsVFNsInNsOutNameNameIdTypeTyBoolTyFloat TySampler2DTyVecTyMatTyStruct GDeclKindGkInGkOut GkUniform GlobalDeclGDecl LocalDeclLDecl ParamKindPkInPkOutPkInout ParamDeclParam LayoutSpec LayoutStd140LayoutLocationProcNameProcMainTopDecl LayoutDeclProcDeclVersionGLSLargCountForFunName isLitExprisIdentifierExpr$fApplicativeStmt$fApplicativeStmtAnnot $fAnnot(,) $fAnnot() $fGenericGLSL $fShowGLSL$fEqGLSL $fFunctorGLSL$fFoldableGLSL$fTraversableGLSL$fGenericTopDecl $fShowTopDecl $fEqTopDecl$fFunctorTopDecl$fFoldableTopDecl$fTraversableTopDecl $fGenericStmt $fShowStmt$fEqStmt $fFunctorStmt$fFoldableStmt$fTraversableStmt$fGenericStmtAnnot$fShowStmtAnnot $fEqStmtAnnot$fFunctorStmtAnnot$fFoldableStmtAnnot$fTraversableStmtAnnot $fGenericEmit $fShowEmit$fEqEmit$fGenericParamDecl$fShowParamDecl $fEqParamDecl$fGenericLocalDecl$fShowLocalDecl $fEqLocalDecl $fGenericExpr $fShowExpr$fEqExpr$fGenericUnaryOp $fShowUnaryOp $fEqUnaryOp$fGenericBinaryOp$fShowBinaryOp $fEqBinaryOp$fGenericExprAtom$fShowExprAtom $fEqExprAtom $fGenericCast $fShowCast$fEqCast$fGenericNameExpr$fShowNameExpr $fEqNameExpr$fGenericSwizzle $fShowSwizzle $fEqSwizzle$fGenericFunName $fShowFunName $fEqFunName$fGenericGlobalDecl$fShowGlobalDecl$fEqGlobalDecl $fGenericName $fShowName$fEqName$fGenericNamespace$fShowNamespace $fEqNamespace$fGenericProcName$fShowProcName $fEqProcName $fGenericType $fShowType$fEqType$fGenericNameId $fShowNameId $fEqNameId$fGenericGDeclKind$fShowGDeclKind $fEqGDeclKind$fGenericParamKind$fShowParamKind $fEqParamKind$fGenericLayoutSpec$fShowLayoutSpec$fEqLayoutSpec$fGenericVersion $fShowVersion $fEqVersion ConstExprsemptycollectConstExprs isConstExprDeclsdeclsSdeclsTdeclsUdeclsVFdeclsIndeclsOut emptyDeclsaddDecladdDeclN addDeclNEgetDeclsgetDeclgetDeclN getDeclNE toUniformId fromUniformId showUniformId ExpandableexpandBitsfillflatunflatBOIzeroone $fBits(,,,,) $fBits(,,,) $fBits(,,) $fBits(,)$fBitsB$fExpandable(,,,)(,,,,)$fExpandable(,,)(,,,,)$fExpandable(,)(,,,,)$fExpandableaa$fShowB$fEqB makeFunctionLiveness unLivenesscomputeLiveness clTopDecl clStmtAnnots clStmtAnnotclStmtclEmitclExpr clExprAtom clNameExprinsertdeleteunion$fAnnotLiveness parseShader parseGLSL parseVersion parseTopDecl parseProcNameparseLayoutSpecparseParamDeclparseParamKindparseLocalDeclparseGlobalDeclparseGDeclKind parseType parseNameId parseNameparseNamespace parseFunName parseSwizzle parseVecIndex parseNameExpr parseExprAtom parseExpr parseBinaryOp parseUnaryOpparseStmtAnnot parseStmt parseEmit parseTestt printShaderppGLSL ppVersion ppTopDecl ppProcName ppLayoutSpec ppParamDecl ppParamKind ppLocalDecl ppGlobalDecl ppGDeclKindppTypeppNameIdppName ppNamespace ppFunName ppSwizzle ppVecIndex ppNameExpr ppExprAtomppExpr ppBinaryOp ppUnaryOp ppStmtAnnotppStmtppEmitppIntppFloatppLppSpppplppsDFGStateDFGNodeDFGEdgeDFGgrdecls nextNodeIdifCondemptyDFGgenDFGdfgGLSL dfgTopDecl dfgGlobalDecldfgStructMemberdfgStmt dfgStmtAnnot dfgLocalDecldfgExpr dfgExprAtomnodeForUniformnodeForNameExpr nodeForNamenodeForaddEdgeaddNodetoDottoSvg$fLabellableDFGEdge$fLabellableDFGNode $fShowDFGNode $fShowDFGEdge BitsExprAtom BitsFunName BitsBinaryOpBitsExprBitsTypeBitsStmtassembletoInt encodeStmtencodeLocalDecl encodeType encodeVecSize encodeEmit encodeExpr encodeArgs encodeUnaryOpencodeBinaryOp encodeFunNameencodeExprAtomTypeencodeExprAtom encodeSwizzleparsemainfloorfractmodclampsaturatestep smoothstepValue FloatValueIntValue BoolValue Vec2Value Vec3Value Vec4Value Mat4x4ValueEval EvalResult fromResult EvalStatestProcs stMainProcglobals gl_PositionProc defaultValue isNaNValue roundValue evalCoerce evalBinaryOp evalUnaryOp$fMonadFailEvalResult $fShowValue $fEqValue$fFunctorEvalResult$fApplicativeEvalResult$fMonadEvalResultfltv4eval LocalStatetempstraceAssignmentstrace startStateevalGLSLdiscoverTopDecldiscoverGlobalDeclevalMain emptyLocalsevalProc evalStmtAnnotevalStmtevalEmit evalLocalDeclevalExpr evalExprAtom evalVecIndex evalMatIndexsetValuegetValue eqStmtAnnots eqStmtAnnoteqStmteqExpr eqExprAtom eqNameExpr eqLocalDecleqTypeeqEmiteqMaybeConfig maxLookahead minRepeats maxRepeats windowSize defaultConfigpass diTopDecldiStmts deleteBodyfindBody transposeallEqualoptimizeShaderoptimize