Syntactic Features for the Static Prediction of Silent Stores

We have organized our 131 features into nine categories. Out of the 131 features, 99 have been observed in our benchmarks. We describe each category, and their elements, in this page. Each category concerns different aspects of a store instruction such as L: p[i] = v. This syntax describes an instruction at program point L, which deposits a value v onto memory location p[i].


ValueType

This category of features concerns the type of the value v that will be stored in memory. In total, we have defined 17 different features in this category, but only four of them have been observed during profiling.

Feature Description
Vfp Floating point type with 32 bits
Vdb Floating point type with 64 bits
Vin Integer type (with any bitwidth)
Vpt Pointer type

ValueSize

This category refers to the size of the value v, in bits, that shall be stored in memory. This size is only well-defined for fixed-size types like integers, floats and pointers. Integers can have different bitwidths, but, for instance, a type integer of 8 bits has always 8 bits of width.

Feature Description
sz0 The size is not well-defined
sz1 One bit
sz8 Eight bits
s16 Primitive type of 16 bits
s32 Primitive type of 32 bits
szN Primitive type of more than 32 bits

ValueDeps

This category concerns the program slice that contributes to form the value v that shall be deposited in memory. The program slice of v is every statement that needs to be executed so that we can have v's value.

Feature Description Feature Description
ZER Const ZERO INT Const INT
FTP Const Floating-Point NUL Const NULL
GLB Global constant FUN The address of a function
CN? Unknown constant ARG A function argument
LD A load instruction CAL A function call operation
CMP A comparison operation PHI A phi-function
SEL A selector, e.g., a = b ? c : d ADD An addition
SUB A subtraction MUL A multiplication
DIV A division REM Remainder
SHF Bitwise shift BIT Bitwise logical operation (and, or, neg)
GEP An LLVM get element pointer CAS A bit cast
EXT A floating point extension F2I Float to integer conversion
I2F Int to float conversion I2P Int to pointer conversion
P2I Pointer to integer conversion TRN Truncation
SEX Sign extension ZEX Zero extension
ALL Stack allocation IN? Any other instruction

ValueOrigin

These features concern the last instruction that is used to produce the value v.

Feature Description Feature Description
Ozr The value zero Oin Integer constant
Ofp Floating point constant Ogb Global variable
Oay Any other constant Oag Function argument
Old Load instruction Ocl Result of function call
Omx Multiplexer (selector or phi) Oad Additive operation (add or sub)
Oic Increment Ong Negation
Ont Boolean negation Omd Multiply-add
Omu Multiplication Obn Some other binary operation
Ocs Cast operation Oal Stack allocation
Oun Another unary instruction Oiy Any other instruction

ValueRange

This category of features concerns the quantity of different values that v can assume. To compute this value, we reuse an old implementation of range analysys.

Feature Description
rg1 The range of values contain only one element
rg2 The range of values contains two elements
rg8 The range of values contains up to eight elements
rgN Undefined range

PointerType

This category of features concerns the type of the pointer p that is used as the target of the store operation.

Feature Description
Pfp Pointer to 32-bit float
Pdb Pointer to 64-bit double
Pin Pointer to integer
Pst Pointer to struct
Pay Pointer to array
Ppt Pointer to pointer
Pvc Pointer to SIMD vector

PointerLoc

This category of features concern the location of the region pointed by p. The typical locations are the heap, the stack, and the static memory area. However, sometimes we cannot determine this location, and thus we fall back to tracking from which instruction the location came from. Perhaps, the best would be to split this category into two new groups: memory location, and origin of the pointer.

Feature Description Feature Description
Msc Static memory Msk Stack memory
Mhp Heap memory Mar Unknown from function argument
Mld Unknown from load Mfn Unknown from function return
Mph Unknown from a phi-function Mpt Unknown from another pointer
Mun Undefined value (LLVM's undef) Mbt Unknown bit operation

LabelLoc

This category concerns the location of the store instruction in the program. In other words, it is all about the location L of the store operation. It deals, for instance, with dominance and post-dominance relations, and with the number of successors and predecessors of the basic blocks that contain the store instruction.

Feature Description
Smn The store exists in the main function.
Sl0 The store is not within a loop.
Sl1 The store is within a outermost loop.
Sl2 The store is within a doubly nested loop.
Sl3 The store is within a triply nested loop.
Sln The store is within a more than triply nested loop.
Scm The store is compulsory (post-dominates the function).
Scl The store exists in a loop that is compulsory
Spl The store post-dominates the loop entry point
Slx The store exists in a loop that has only one exit
Smp The store exists in a block with multiple predecessors
Sms The store exists within a block with multiple successors
Ssl The store exists within a block with a single latch.
Sdl The store dominates the single latch.
Svi The store uses a loop invariant value.
Spi The store uses a loop invariant pointer.

PointerStride

This category concerns the stride of the variable i used to index the memory location where the store happens. The stride is the increment on the variable, whenever it can be determined statically.

Feature Description
Erc the pointer is created by a recurrence relation
Eaf the pointer is formed by an affine expression.
Eqd the pointer is formed by a quadratic affine expression.
Es1 the pointer has a constant step of 1.
Es4 the pointer has a constant step of 4.
Es8 the pointer has a constant step of 8.
EsN the pointer has a constant step greater than 8.
Esp the step of the pointer equals the size of the pointer.
Etp the pointer exists in a loop with known trip count.

Last update: May 29th, 2018.