blob: 6bc2ded5ec63f8d9d388eef2cd14426a7a6b8928 [file] [log] [blame]
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001//===- subzero/src/IceTypes.h - Primitive ICE types -------------*- C++ -*-===//
2//
3// The Subzero Code Generator
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file declares a few properties of the primitive types allowed
11// in Subzero. Every Subzero source file is expected to include
12// IceTypes.h.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef SUBZERO_SRC_ICETYPES_H
17#define SUBZERO_SRC_ICETYPES_H
18
19#include "IceTypes.def"
20
21namespace Ice {
22
23enum Type {
Matt Wala928f1292014-07-07 16:50:46 -070024#define X(tag, size, align, elts, elty, str) tag,
Jim Stichnothf7c9a142014-04-29 10:52:43 -070025 ICETYPE_TABLE
26#undef X
Jim Stichnoth4376d292014-05-23 13:39:02 -070027 IceType_NUM
Jim Stichnothf7c9a142014-04-29 10:52:43 -070028};
29
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070030enum TargetArch {
31 Target_X8632,
32 Target_X8664,
33 Target_ARM32,
34 Target_ARM64
35};
36
37enum OptLevel {
38 Opt_m1,
39 Opt_0,
40 Opt_1,
41 Opt_2
42};
43
Jim Stichnothf7c9a142014-04-29 10:52:43 -070044size_t typeWidthInBytes(Type Ty);
45size_t typeAlignInBytes(Type Ty);
Matt Wala928f1292014-07-07 16:50:46 -070046size_t typeNumElements(Type Ty);
47Type typeElementType(Type Ty);
48
49inline bool isVectorType(Type Ty) { return typeNumElements(Ty) > 1; }
Jim Stichnothf7c9a142014-04-29 10:52:43 -070050
51template <> Ostream &operator<<(class Ostream &Str, const Type &Ty);
52
53} // end of namespace Ice
54
55#endif // SUBZERO_SRC_ICETYPES_H