{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Synthesizer.LLVM.Value (
T, decons,
tau, square, sqrt,
max, min, limit, fraction,
(%==), (%/=), (%<), (%<=), (%>), (%>=), not,
(%&&), (%||),
(?), (??),
lift0, lift1, lift2, lift3,
unlift0, unlift1, unlift2, unlift3, unlift4, unlift5,
constantValue, constant,
fromInteger', fromRational',
Flatten(flattenCode, unfoldCode), Registers,
flatten, unfold,
flattenCodeTraversable, unfoldCodeTraversable,
flattenFunction,
) where
import LLVM.DSL.Value
import qualified Synthesizer.LLVM.Frame.Stereo as Stereo ()
import qualified Synthesizer.Basic.Phase as Phase
import qualified Algebra.RealRing as RealRing
import qualified Prelude as P ()
import NumericPrelude.Base hiding (min, max, unzip, unzip3, not)
instance (RealRing.C a, Flatten a) => Flatten (Phase.T a) where
type Registers (Phase.T a) = Registers a
flattenCode s = flattenCode $ Phase.toRepresentative s
unfoldCode s =
Phase.fromRepresentative $ unfoldCode s