Module IR.Binop

type t =
| PlusA of Typ.ikind option

arithmetic +

| PlusPI

pointer + integer

| MinusA of Typ.ikind option

arithmetic -

| MinusPI

pointer - integer

| MinusPP

pointer - pointer

| Mult of Typ.ikind option

*

| Div

/

| Mod

%

| Shiftlt

shift left

| Shiftrt

shift right

| Lt

< (arithmetic comparison)

| Gt

> (arithmetic comparison)

| Le

<= (arithmetic comparison)

| Ge

>= (arithmetic comparison)

| Eq

== (arithmetic comparison)

| Ne

!= (arithmetic comparison)

| BAnd

bitwise and

| BXor

exclusive-or

| BOr

inclusive-or

| LAnd

logical and. Does not always evaluate both operands.

| LOr

logical or. Does not always evaluate both operands.

Binary operations

val compare : t -> t -> int
val str : IStdlib.Pp.env -> t -> string
val pp : IStdlib.IStd.Formatter.t -> t -> unit
val equal : t -> t -> bool
val injective : t -> bool

This function returns true if the operation is injective wrt. each argument: op(e,-) and op(-, e) is injective for all e. The return value false means "don't know".

val is_zero_runit : t -> bool

This function returns true if 0 is the right unit of binop. The return value false means "don't know".

val symmetric : t -> t option

symmetric bop returns' Some bop' if x bop y if and only if y bop' x for all x, y, or None if no such bop' exists

val negate : t -> t option

negate bop returns' Some bop' if not (x bop y) if and only if x bop' y for all x, y, or None if no such bop' exists