úÎQ'Fhž      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ Safe-Infered Safe-InferedžžNone         NoneŸŸŸNoneNone =This data type is for parameters of parameterized LLVM code. 0It is better than using plain functions of type p -> a &since it allows for numeric instances and we can make explicit, !whether a parameter is constant. 1We recommend to use parameters for atomic types. Although a parameter of type  T p (a,b) is possible, .it means that the whole parameter is variable .if only one of the pair elements is variable. :This way you may miss opportunities for constant folding. " The call  value param v requires that v represents the same value as valueTupleOf (get param p) for some p. However v) might be the result of a load operation and param might be a constant. )In this case it is more efficient to use "valueTupleOf (get param undefined) 5since the constant is translated to an LLVM constant 'that allows for certain optimizations. GThis is the main function for taking advantage of a constant parameter in low-level implementations. JFor simplicity we do not omit constant parameters in the parameter struct Ksince this would mean to construct types at runtime and might become ugly. Instead we just check using value& at the according places in LLVM code  whether a parameter is constant 7and ignore the parameter from the struct in this case. -In many cases there will be no speed benefit ;because the parameter will be loaded to a register anyway. 9It can only lead to speed-up if subsequent optimizations %can precompute constant expressions. Another example is  9 where a loop with constant loop count can be generated. JFor small loop counts and simple loop bodies the loop might get unrolled. $/This function provides specialised variants of ! and value, %that use the unit type for constants -and thus save space in parameter structures. *?Provide all elements of a nested tuple as separate parameters. -If you do not use one of the tuple elements, you will get a type error like Couldn' t match type `Param.Composed t0' with ¡. 2The problem is that the type checker cannot infer that an element is a  Parameter.T if it remains unused. ¢Useful for combining T p a and T p b to  T p (a,b) using  liftA2 (,). &However, we do not recommend to do so 2because the result parameter can only be constant if both operands are constant. £Useful for splitting  T p (a,b) into T p a and T p b using fmap fst and fmap snd. €arrA is useful for lifting parameter selectors to our parameter type $without relying on the constructor. ¥.> can be used for fetching a parameter from a super-parameter. ) Ч!"#š$%&'()*©+ª,«¬­®¯°±²³Ž¢£€¥µ¶· !"#$%&'()*+, )!"#&$%'*+,(# §Š!"#š$%&'()*©+ª,«¬­®¯°±²³Ž¢£€¥µ¶·None. Analogous to ž. 1 A nested G. b Analogus to  . d,You can construct complex numbers this way, "but they will not make you happy, <because the numeric operations require a RealFloat instance :that we could only provide with lots of undefined methods (also in its superclasses). *You may either define your own arithmetic (or use the NumericPrelude type classes. •Like –+ but computes both alternative expressions and then uses LLVM' s efficient select instruction. ¹0We do not require a numeric prelude superclass, 6thus also LLVM only types like vectors are instances. ‹-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œº»ŒœŸ¿¹ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒq-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œq6789:;2345<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a/01-.bcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‹Š‰ˆ‡ŒŽ‘’“”•–—˜™š›œƒ-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œº»ŒœŸ¿¹ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓ      !"#$%&& '()*+,-./0123%4#56789::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿%ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚ llvm-dsl-0.0LLVM.DSL.Debug.StablePtrLLVM.DSL.Debug.CounterLLVM.DSL.Debug.MarshalLLVM.DSL.ExecutionLLVM.DSL.ParameterLLVM.DSL.Expression LLVM.DSL.Dump MultiValuemodifyMultiValuetraceTConsformatnewnext ArrayElemDump dumpCounter toBytePtrdumpwithConstArray traceMalloc proxyFromDatasizeOf alignment FinalizerImporterExecdumpercompilecreateLLVMFunctioncreateFunctioncreateFinalizerTupleComposedSource decomposeTunnelget valueTuple multiValue withValue withMultiwithtunnelwordInt$# withTuple withTuple1 withTuple2 DecomposeComposecomposeValuelift0lift1lift2ExpunExpunique_uniquewithKeylift3lift4liftMliftM2liftM3unliftM1unliftM2unliftM3 liftTupleM liftTupleM2 liftTupleM3zipzip3zip4unzipunzip3unzip4fstsndmapFstmapSndmapPairswapcurryuncurryfst3snd3thd3mapFst3mapSnd3mapThd3 mapTripletupleuntuplemodifyMultiValue2modifyMultiValueMmodifyMultiValueM2modifymodify2 consComplex deconsComplexconsunitzeroaddsubnegonemulsqrrecipfdivsqrtpowidiviremshlshr fromInteger' fromRational' boolPFrom8 bool8FromP intFromBool8floatFromBool8toEnumfromEnumsuccpred fromFastMath toFastMathminBoundmaxBoundcmp==*/=*<*>=*>*<=*minmaxlimitfractiontruefalse&&*||*notselect ifThenElse complement.&.*.|.*xortoMaybemaybetau$fEnumTwriterprelude-compat-0.0.0.2 Data.List2010dropghc-prim GHC.TypesInt$fApplicativeT $fFunctorT$fArrowT $fCategoryTVariableConstant genericValue idFromFunctoridFromFunctor1idFromFunctor2$fCT$fCT0$fCT1$fCT2$fCT3 $fFloatingT $fFractionalT$fNumT$fMonadT $fTuple(,,) $fTuple(,)$fTupleTllvm-extra-0.10LLVM.Extra.Multi.Value.Private$fCExp4$fCExp$fCExp0$fCExp1$fCExp2 $fCExpExp$fCExp3 $fFloatingExp$fFractionalExp$fNumExp$fDecomposeComplex$fComposeComplex$fDecomposeTuple$fComposeTuple$fDecompose(,,,)$fCompose(,,,)$fDecompose(,,) $fCompose(,,)$fDecompose(,) $fCompose(,) $fDecompose() $fCompose()$fDecomposeAtom $fComposeExp $fValueExp$fValueT