1//===-- AMDILUtilityFunctions.h - AMDIL Utility Functions Header --------===//
2//
3//                     The LLVM Compiler Infrastructure
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 provides helper macros for expanding case statements.
11//
12//===----------------------------------------------------------------------===//
13#ifndef AMDILUTILITYFUNCTIONS_H_
14#define AMDILUTILITYFUNCTIONS_H_
15
16// Macros that are used to help with switch statements for various data types
17// However, these macro's do not return anything unlike the second set below.
18#define ExpandCaseTo32bitIntTypes(Instr)  \
19case Instr##_i32:
20
21#define ExpandCaseTo32bitIntTruncTypes(Instr)  \
22case Instr##_i32i8: \
23case Instr##_i32i16:
24
25#define ExpandCaseToIntTypes(Instr) \
26    ExpandCaseTo32bitIntTypes(Instr)
27
28#define ExpandCaseToIntTruncTypes(Instr) \
29    ExpandCaseTo32bitIntTruncTypes(Instr)
30
31#define ExpandCaseToFloatTypes(Instr) \
32    case Instr##_f32:
33
34#define ExpandCaseTo32bitScalarTypes(Instr) \
35    ExpandCaseTo32bitIntTypes(Instr) \
36case Instr##_f32:
37
38#define ExpandCaseToAllScalarTypes(Instr) \
39    ExpandCaseToFloatTypes(Instr) \
40ExpandCaseToIntTypes(Instr)
41
42#define ExpandCaseToAllScalarTruncTypes(Instr) \
43    ExpandCaseToFloatTruncTypes(Instr) \
44ExpandCaseToIntTruncTypes(Instr)
45
46#define ExpandCaseToAllTypes(Instr) \
47ExpandCaseToAllScalarTypes(Instr)
48
49#define ExpandCaseToAllTruncTypes(Instr) \
50ExpandCaseToAllScalarTruncTypes(Instr)
51
52// Macros that expand into  statements with return values
53#define ExpandCaseTo32bitIntReturn(Instr, Return)  \
54case Instr##_i32: return Return##_i32;
55
56#define ExpandCaseToIntReturn(Instr, Return) \
57    ExpandCaseTo32bitIntReturn(Instr, Return)
58
59#define ExpandCaseToFloatReturn(Instr, Return) \
60    case Instr##_f32: return Return##_f32;\
61
62#define ExpandCaseToAllScalarReturn(Instr, Return) \
63    ExpandCaseToFloatReturn(Instr, Return) \
64ExpandCaseToIntReturn(Instr, Return)
65
66// These macros expand to common groupings of RegClass ID's
67#define ExpandCaseTo1CompRegID \
68case AMDGPU::GPRI32RegClassID: \
69case AMDGPU::GPRF32RegClassID:
70
71#define ExpandCaseTo32BitType(Instr) \
72case Instr##_i32: \
73case Instr##_f32:
74
75#endif // AMDILUTILITYFUNCTIONS_H_
76