LLVM 24.0.0git
SystemZ.h
Go to the documentation of this file.
1//==- SystemZ.h - Top-Level Interface for SystemZ representation -*- C++ -*-==//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the entry points for global functions defined in
10// the LLVM SystemZ backend.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZ_H
15#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZ_H
16
20#include "llvm/IR/Analysis.h"
21#include "llvm/IR/PassManager.h"
23
24namespace llvm {
25class FunctionPass;
26class ModulePass;
27class PassRegistry;
29
30namespace SystemZ {
31// Condition-code mask values.
32const unsigned CCMASK_NONE = 0;
33const unsigned CCMASK_0 = 1 << 3;
34const unsigned CCMASK_1 = 1 << 2;
35const unsigned CCMASK_2 = 1 << 1;
36const unsigned CCMASK_3 = 1 << 0;
38
39// Condition-code mask assignments for integer and floating-point
40// comparisons.
41const unsigned CCMASK_CMP_EQ = CCMASK_0;
42const unsigned CCMASK_CMP_LT = CCMASK_1;
43const unsigned CCMASK_CMP_GT = CCMASK_2;
47
48// Condition-code mask assignments for floating-point comparisons only.
49const unsigned CCMASK_CMP_UO = CCMASK_3;
51
52// All condition-code values produced by comparisons.
55
56// Condition-code mask assignments for arithmetical operations.
57const unsigned CCMASK_ARITH_EQ = CCMASK_0;
58const unsigned CCMASK_ARITH_LT = CCMASK_1;
59const unsigned CCMASK_ARITH_GT = CCMASK_2;
61const unsigned CCMASK_ARITH = CCMASK_ANY;
62
63// Condition-code mask assignments for logical operations.
70const unsigned CCMASK_LOGICAL = CCMASK_ANY;
71
72// Condition-code mask assignments for CS.
73const unsigned CCMASK_CS_EQ = CCMASK_0;
74const unsigned CCMASK_CS_NE = CCMASK_1;
75const unsigned CCMASK_CS = CCMASK_0 | CCMASK_1;
76
77// Condition-code mask assignments for a completed SRST loop.
78const unsigned CCMASK_SRST_FOUND = CCMASK_1;
80const unsigned CCMASK_SRST = CCMASK_1 | CCMASK_2;
81
82// Condition-code mask assignments for TEST UNDER MASK.
83const unsigned CCMASK_TM_ALL_0 = CCMASK_0;
86const unsigned CCMASK_TM_ALL_1 = CCMASK_3;
91const unsigned CCMASK_TM = CCMASK_ANY;
92
93// Condition-code mask assignments for TRANSACTION_BEGIN.
98const unsigned CCMASK_TBEGIN = CCMASK_ANY;
99
100// Condition-code mask assignments for TRANSACTION_END.
101const unsigned CCMASK_TEND_TX = CCMASK_0;
102const unsigned CCMASK_TEND_NOTX = CCMASK_2;
104
105// Condition-code mask assignments for vector comparisons (and similar
106// operations).
107const unsigned CCMASK_VCMP_ALL = CCMASK_0;
109const unsigned CCMASK_VCMP_NONE = CCMASK_3;
111
112// Condition-code mask assignments for Test Data Class.
114const unsigned CCMASK_TDC_MATCH = CCMASK_1;
116
117// The position of the low CC bit in an IPM result.
118const unsigned IPM_CC = 28;
119
120// Mask assignments for PFD.
121const unsigned PFD_READ = 1;
122const unsigned PFD_WRITE = 2;
123
124// Mask assignments for TDC
125const unsigned TDCMASK_ZERO_PLUS = 0x800;
126const unsigned TDCMASK_ZERO_MINUS = 0x400;
127const unsigned TDCMASK_NORMAL_PLUS = 0x200;
128const unsigned TDCMASK_NORMAL_MINUS = 0x100;
129const unsigned TDCMASK_SUBNORMAL_PLUS = 0x080;
130const unsigned TDCMASK_SUBNORMAL_MINUS = 0x040;
131const unsigned TDCMASK_INFINITY_PLUS = 0x020;
132const unsigned TDCMASK_INFINITY_MINUS = 0x010;
133const unsigned TDCMASK_QNAN_PLUS = 0x008;
134const unsigned TDCMASK_QNAN_MINUS = 0x004;
135const unsigned TDCMASK_SNAN_PLUS = 0x002;
136const unsigned TDCMASK_SNAN_MINUS = 0x001;
137
158
159// Number of bits in a vector register.
160const unsigned VectorBits = 128;
161
162// Number of bytes in a vector register (and consequently the number of
163// bytes in a general permute vector).
164const unsigned VectorBytes = VectorBits / 8;
165
166// Return true if Val fits an LLILL operand.
167static inline bool isImmLL(uint64_t Val) {
168 return (Val & ~0x000000000000ffffULL) == 0;
169}
170
171// Return true if Val fits an LLILH operand.
172static inline bool isImmLH(uint64_t Val) {
173 return (Val & ~0x00000000ffff0000ULL) == 0;
174}
175
176// Return true if Val fits an LLIHL operand.
177static inline bool isImmHL(uint64_t Val) {
178 return (Val & ~0x00000ffff00000000ULL) == 0;
179}
180
181// Return true if Val fits an LLIHH operand.
182static inline bool isImmHH(uint64_t Val) {
183 return (Val & ~0xffff000000000000ULL) == 0;
184}
185
186// Return true if Val fits an LLILF operand.
187static inline bool isImmLF(uint64_t Val) {
188 return (Val & ~0x00000000ffffffffULL) == 0;
189}
190
191// Return true if Val fits an LLIHF operand.
192static inline bool isImmHF(uint64_t Val) {
193 return (Val & ~0xffffffff00000000ULL) == 0;
194}
195} // end namespace SystemZ
196
201
203 CodeGenOptLevel OptLevel);
204
206 : public OptionalPassInfoMixin<SystemZElimComparePass> {
207public:
210};
211
213
215 : public OptionalPassInfoMixin<SystemZShortenInstPass> {
216public:
219};
220
222
224 : public RequiredPassInfoMixin<SystemZLongBranchPass> {
225public:
228};
229
231
233 : public OptionalPassInfoMixin<SystemZLDCleanupPass> {
234public:
237};
238
240
242 : public RequiredPassInfoMixin<SystemZCopyPhysRegsPass> {
243public:
246};
247
249
251 : public RequiredPassInfoMixin<SystemZPostRewritePass> {
252public:
255};
256
258
266
268
270 : public RequiredPassInfoMixin<SystemZAlignGlobalsPass> {
271public:
273};
274
276
278
288
289namespace SYSTEMZAS {
290enum : unsigned { PTR32 = 1 };
291} // namespace SYSTEMZAS
292
293} // end namespace llvm
294
295#endif
uint64_t uint64_t
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition MD5.cpp:54
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:312
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition Pass.h:253
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
SelectionDAGISelPass(std::unique_ptr< SelectionDAGISel > Selector)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
SystemZISelDAGToDAGPass(SystemZTargetMachine &TM, CodeGenOptLevel OptLevel)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
SystemZTDCPass(SystemZTargetMachine &TM)
Definition SystemZ.h:263
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
Pass manager infrastructure for declaring and invalidating analyses.
const unsigned CCMASK_ARITH_EQ
Definition SystemZ.h:57
const unsigned CCMASK_CMP_GE
Definition SystemZ.h:46
const unsigned CCMASK_LOGICAL_ZERO
Definition SystemZ.h:64
const unsigned CCMASK_SRST_NOTFOUND
Definition SystemZ.h:79
static bool isImmHH(uint64_t Val)
Definition SystemZ.h:182
const unsigned CCMASK_TEND
Definition SystemZ.h:103
const unsigned CCMASK_LOGICAL_NOCARRY
Definition SystemZ.h:67
const unsigned CCMASK_CS_EQ
Definition SystemZ.h:73
const unsigned CCMASK_TBEGIN
Definition SystemZ.h:98
const unsigned TDCMASK_NEGATIVE
Definition SystemZ.h:142
const unsigned CCMASK_SRST
Definition SystemZ.h:80
const unsigned CCMASK_TEND_NOTX
Definition SystemZ.h:102
const unsigned CCMASK_0
Definition SystemZ.h:33
const unsigned CCMASK_TM_SOME_1
Definition SystemZ.h:88
const unsigned CCMASK_LOGICAL_CARRY
Definition SystemZ.h:66
const unsigned TDCMASK_NORMAL_MINUS
Definition SystemZ.h:128
const unsigned CCMASK_TDC
Definition SystemZ.h:115
const unsigned CCMASK_FCMP
Definition SystemZ.h:54
const unsigned CCMASK_TM_SOME_0
Definition SystemZ.h:87
const unsigned TDCMASK_MINUS
Definition SystemZ.h:153
static bool isImmHL(uint64_t Val)
Definition SystemZ.h:177
const unsigned TDCMASK_SUBNORMAL_MINUS
Definition SystemZ.h:130
const unsigned TDCMASK_ZERO
Definition SystemZ.h:138
const unsigned PFD_READ
Definition SystemZ.h:121
const unsigned CCMASK_TBEGIN_PERSISTENT
Definition SystemZ.h:97
const unsigned CCMASK_1
Definition SystemZ.h:34
const unsigned TDCMASK_NORMAL_PLUS
Definition SystemZ.h:127
const unsigned PFD_WRITE
Definition SystemZ.h:122
const unsigned CCMASK_CMP_GT
Definition SystemZ.h:43
const unsigned CCMASK_ARITH_LT
Definition SystemZ.h:58
const unsigned CCMASK_ARITH_GT
Definition SystemZ.h:59
const unsigned TDCMASK_QNAN_MINUS
Definition SystemZ.h:134
const unsigned CCMASK_SRST_FOUND
Definition SystemZ.h:78
const unsigned TDCMASK_ALL
Definition SystemZ.h:157
const unsigned CCMASK_CS
Definition SystemZ.h:75
const unsigned CCMASK_ANY
Definition SystemZ.h:37
const unsigned CCMASK_ARITH
Definition SystemZ.h:61
const unsigned CCMASK_TM_MIXED_MSB_0
Definition SystemZ.h:84
const unsigned TDCMASK_SUBNORMAL_PLUS
Definition SystemZ.h:129
const unsigned CCMASK_TBEGIN_TRANSIENT
Definition SystemZ.h:96
static bool isImmLL(uint64_t Val)
Definition SystemZ.h:167
const unsigned VectorBits
Definition SystemZ.h:160
const unsigned CCMASK_TEND_TX
Definition SystemZ.h:101
static bool isImmLH(uint64_t Val)
Definition SystemZ.h:172
const unsigned TDCMASK_INFINITY_PLUS
Definition SystemZ.h:131
const unsigned CCMASK_TM_ALL_0
Definition SystemZ.h:83
const unsigned IPM_CC
Definition SystemZ.h:118
const unsigned CCMASK_CMP_LE
Definition SystemZ.h:45
static bool isImmHF(uint64_t Val)
Definition SystemZ.h:192
const unsigned CCMASK_CMP_O
Definition SystemZ.h:50
const unsigned CCMASK_CMP_EQ
Definition SystemZ.h:41
const unsigned CCMASK_VCMP_MIXED
Definition SystemZ.h:108
const unsigned VectorBytes
Definition SystemZ.h:164
const unsigned TDCMASK_POSITIVE
Definition SystemZ.h:139
const unsigned TDCMASK_INFINITY_MINUS
Definition SystemZ.h:132
const unsigned CCMASK_ICMP
Definition SystemZ.h:53
const unsigned CCMASK_TDC_NOMATCH
Definition SystemZ.h:113
const unsigned CCMASK_VCMP_ALL
Definition SystemZ.h:107
const unsigned CCMASK_VCMP_NONE
Definition SystemZ.h:109
const unsigned TDCMASK_NAN
Definition SystemZ.h:145
const unsigned CCMASK_TBEGIN_STARTED
Definition SystemZ.h:94
const unsigned CCMASK_VCMP
Definition SystemZ.h:110
const unsigned CCMASK_TDC_MATCH
Definition SystemZ.h:114
const unsigned CCMASK_TM_MIXED_MSB_1
Definition SystemZ.h:85
const unsigned CCMASK_TM_MSB_0
Definition SystemZ.h:89
const unsigned CCMASK_ARITH_OVERFLOW
Definition SystemZ.h:60
const unsigned CCMASK_CS_NE
Definition SystemZ.h:74
const unsigned TDCMASK_SNAN_PLUS
Definition SystemZ.h:135
const unsigned CCMASK_LOGICAL_NOBORROW
Definition SystemZ.h:69
const unsigned CCMASK_TM
Definition SystemZ.h:91
const unsigned CCMASK_3
Definition SystemZ.h:36
const unsigned CCMASK_NONE
Definition SystemZ.h:32
const unsigned CCMASK_CMP_LT
Definition SystemZ.h:42
const unsigned CCMASK_CMP_NE
Definition SystemZ.h:44
const unsigned CCMASK_TBEGIN_INDETERMINATE
Definition SystemZ.h:95
const unsigned CCMASK_LOGICAL_NONZERO
Definition SystemZ.h:65
const unsigned TDCMASK_ZERO_PLUS
Definition SystemZ.h:125
static bool isImmLF(uint64_t Val)
Definition SystemZ.h:187
const unsigned TDCMASK_QNAN_PLUS
Definition SystemZ.h:133
const unsigned TDCMASK_ZERO_MINUS
Definition SystemZ.h:126
const unsigned CCMASK_TM_ALL_1
Definition SystemZ.h:86
const unsigned TDCMASK_PLUS
Definition SystemZ.h:149
const unsigned CCMASK_2
Definition SystemZ.h:35
const unsigned CCMASK_LOGICAL_BORROW
Definition SystemZ.h:68
const unsigned CCMASK_CMP_UO
Definition SystemZ.h:49
const unsigned CCMASK_LOGICAL
Definition SystemZ.h:70
const unsigned CCMASK_TM_MSB_1
Definition SystemZ.h:90
const unsigned TDCMASK_SNAN_MINUS
Definition SystemZ.h:136
This is an optimization pass for GlobalISel generic memory operations.
FunctionPass * createSystemZISelDagLegacyPass(SystemZTargetMachine &TM, CodeGenOptLevel OptLevel)
void initializeSystemZPostRewriteLegacyPass(PassRegistry &)
FunctionPass * createSystemZLDCleanupLegacyPass(SystemZTargetMachine &TM)
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
void initializeSystemZCopyPhysRegsLegacyPass(PassRegistry &)
void initializeSystemZDAGToDAGISelLegacyPass(PassRegistry &)
void initializeSystemZTDCLegacyPass(PassRegistry &)
void initializeSystemZAlignGlobalsLegacyPass(PassRegistry &)
FunctionPass * createSystemZTDCLegacyPass()
FunctionPass * createSystemZCopyPhysRegsLegacyPass(SystemZTargetMachine &TM)
void initializeSystemZLDCleanupLegacyPass(PassRegistry &)
void initializeSystemZElimCompareLegacyPass(PassRegistry &)
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:280
void initializeSystemZAsmPrinterPass(PassRegistry &)
FunctionPass * createSystemZShortenInstLegacyPass(SystemZTargetMachine &TM)
ModulePass * createSystemZAlignGlobalsLegacyPass()
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
FunctionPass * createSystemZPostRewriteLegacyPass(SystemZTargetMachine &TM)
void initializeSystemZLongBranchLegacyPass(PassRegistry &)
FunctionPass * createSystemZElimCompareLegacyPass(SystemZTargetMachine &TM)
FunctionPass * createSystemZLongBranchLegacyPass(SystemZTargetMachine &TM)
void initializeSystemZShortenInstLegacyPass(PassRegistry &)
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
A CRTP mix-in for passes that can be skipped.
A CRTP mix-in for passes that should not be skipped.