/**
Copyright: Copyright (c) 2017-2019 Andrey Penechko.
License: $(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0).
Authors: Andrey Penechko.
*/
///
module vox.ir.ir_value_kind;

/// Describes what IrIndex is pointing at
/// Is used as UDA on IR entities
enum IrValueKind : ubyte
{
	none, /// Used for undefined indices
	instruction,
	basicBlock,
	constant,
	constantAggregate, /// Cannot appear in LIR
	constantZero, /// Zero inits value of any type. Type is embedded (same layout as IrValueKind.type)
	global, /// Index of global var or const (or literal data)
	phi,
	stackSlot,
	virtualRegister,
	physicalRegister,
	type,
	variable, /// Represents variable index while converting into SSA-form
	// temporarily IrIndex.storageUintIndex contains AstIndex of FunctionDeclNode
	func,
	array, /// Indicates reference to big array in IrSmallArray
}