All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.scalanative.optimizer.pass.SizeofLowering.scala Maven / Gradle / Ivy

The newest version!
package scala.scalanative
package optimizer
package pass

import analysis.ClassHierarchy.Top
import nir._
import scala.scalanative.optimizer.analysis.MemoryLayout

/** Maps sizeof computation to pointer arithmetics over null pointer. */
class SizeofLowering(top: Top) extends Pass {
  implicit val fresh: Fresh = top.fresh

  override def onInsts(insts: Seq[Inst]): Seq[Inst] = {
    val buf = new nir.Buffer
    import buf._

    insts.foreach {

      case Inst.Let(n, Op.Sizeof(ty)) =>
        let(n, Op.Copy(Val.Long(MemoryLayout.sizeOf(ty))))

      case inst =>
        buf += inst
    }

    buf.toSeq
  }
}

object SizeofLowering extends PassCompanion {
  override def apply(config: tools.Config, top: Top) =
    new SizeofLowering(top)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy