annotate lib/Target/X86/X86Subtarget.h @ 128:c347d3398279 default tip

fix
author mir3636
date Wed, 06 Dec 2017 14:37:17 +0900
parents 803732b1fca8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===-- X86Subtarget.h - Define Subtarget for the X86 ----------*- C++ -*--===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 // The LLVM Compiler Infrastructure
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 // This file is distributed under the University of Illinois Open Source
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 // License. See LICENSE.TXT for details.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 // This file declares the X86 specific subclass of TargetSubtargetInfo.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
14 #ifndef LLVM_LIB_TARGET_X86_X86SUBTARGET_H
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
15 #define LLVM_LIB_TARGET_X86_X86SUBTARGET_H
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
17 #include "X86FrameLowering.h"
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
18 #include "X86ISelLowering.h"
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
19 #include "X86InstrInfo.h"
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
20 #include "X86SelectionDAGInfo.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
21 #include "llvm/ADT/StringRef.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "llvm/ADT/Triple.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
23 #include "llvm/CodeGen/GlobalISel/CallLowering.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
24 #include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
25 #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
26 #include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 #include "llvm/IR/CallingConv.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
28 #include "llvm/MC/MCInstrItineraries.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
29 #include "llvm/Target/TargetMachine.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 #include "llvm/Target/TargetSubtargetInfo.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
31 #include <memory>
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 #define GET_SUBTARGETINFO_HEADER
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 #include "X86GenSubtargetInfo.inc"
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 namespace llvm {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
37
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 class GlobalValue;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
40 /// The X86 backend supports a number of different styles of PIC.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 ///
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 namespace PICStyles {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
43
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 enum Style {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
45 StubPIC, // Used on i386-darwin in pic mode.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
46 GOT, // Used on 32 bit elf on when in pic mode.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
47 RIPRel, // Used on X86-64 when in pic mode.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
48 None // Set when not in pic mode.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 };
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
50
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
51 } // end namespace PICStyles
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
53 class X86Subtarget final : public X86GenSubtargetInfo {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 protected:
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 enum X86SSEEnum {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
56 NoSSE, SSE1, SSE2, SSE3, SSSE3, SSE41, SSE42, AVX, AVX2, AVX512F
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 enum X863DNowEnum {
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
60 NoThreeDNow, MMX, ThreeDNow, ThreeDNowA
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 enum X86ProcFamilyEnum {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
64 Others,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
65 IntelAtom,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
66 IntelSLM,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
67 IntelGLM,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
68 IntelHaswell,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
69 IntelBroadwell,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
70 IntelSkylake,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
71 IntelKNL,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
72 IntelSKX,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
73 IntelCannonlake
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
76 /// X86 processor family: Intel Atom, and others
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 X86ProcFamilyEnum X86ProcFamily;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
79 /// Which PIC style to use
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 PICStyles::Style PICStyle;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
82 const TargetMachine &TM;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
83
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
84 /// SSE1, SSE2, SSE3, SSSE3, SSE41, SSE42, or none supported.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 X86SSEEnum X86SSELevel;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
87 /// MMX, 3DNow, 3DNow Athlon, or none supported.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 X863DNowEnum X863DNowLevel;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
90 /// True if the processor supports X87 instructions.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
91 bool HasX87;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
92
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
93 /// True if this processor has conditional move instructions
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 /// (generally pentium pro+).
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 bool HasCMov;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
97 /// True if the processor supports X86-64 instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 bool HasX86_64;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
100 /// True if the processor supports POPCNT.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 bool HasPOPCNT;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
103 /// True if the processor supports SSE4A instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 bool HasSSE4A;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
106 /// Target has AES instructions
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 bool HasAES;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
109 /// Target has FXSAVE/FXRESTOR instructions
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
110 bool HasFXSR;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
111
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
112 /// Target has XSAVE instructions
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
113 bool HasXSAVE;
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
114
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
115 /// Target has XSAVEOPT instructions
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
116 bool HasXSAVEOPT;
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
117
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
118 /// Target has XSAVEC instructions
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
119 bool HasXSAVEC;
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
120
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
121 /// Target has XSAVES instructions
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
122 bool HasXSAVES;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
123
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
124 /// Target has carry-less multiplication
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 bool HasPCLMUL;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
127 /// Target has 3-operand fused multiply-add
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 bool HasFMA;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
130 /// Target has 4-operand fused multiply-add
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 bool HasFMA4;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
133 /// Target has XOP instructions
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 bool HasXOP;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
136 /// Target has TBM instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 bool HasTBM;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
139 /// Target has LWP instructions
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
140 bool HasLWP;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
141
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
142 /// True if the processor has the MOVBE instruction.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 bool HasMOVBE;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
145 /// True if the processor has the RDRAND instruction.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 bool HasRDRAND;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
148 /// Processor has 16-bit floating point conversion instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 bool HasF16C;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
151 /// Processor has FS/GS base insturctions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 bool HasFSGSBase;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
154 /// Processor has LZCNT instruction.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 bool HasLZCNT;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
157 /// Processor has BMI1 instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 bool HasBMI;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
160 /// Processor has BMI2 instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 bool HasBMI2;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
163 /// Processor has VBMI instructions.
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
164 bool HasVBMI;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
165
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
166 /// Processor has Integer Fused Multiply Add
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
167 bool HasIFMA;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
168
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
169 /// Processor has RTM instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 bool HasRTM;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
172 /// Processor has ADX instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 bool HasADX;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
175 /// Processor has SHA instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 bool HasSHA;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
178 /// Processor has PRFCHW instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 bool HasPRFCHW;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
181 /// Processor has RDSEED instructions.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 bool HasRDSEED;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
184 /// Processor has LAHF/SAHF instructions.
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
185 bool HasLAHFSAHF;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
186
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
187 /// Processor has MONITORX/MWAITX instructions.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
188 bool HasMWAITX;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
189
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
190 /// Processor has Cache Line Zero instruction
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
191 bool HasCLZERO;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
192
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
193 /// Processor has Prefetch with intent to Write instruction
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
194 bool HasPFPREFETCHWT1;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
195
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
196 /// True if SHLD instructions are slow.
33
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
197 bool IsSHLDSlow;
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
198
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
199 /// True if the PMULLD instruction is slow compared to PMULLW/PMULHW and
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
200 // PMULUDQ.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
201 bool IsPMULLDSlow;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
202
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
203 /// True if unaligned memory accesses of 16-bytes are slow.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
204 bool IsUAMem16Slow;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
206 /// True if unaligned memory accesses of 32-bytes are slow.
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
207 bool IsUAMem32Slow;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
209 /// True if SSE operations can have unaligned memory operands.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
210 /// This may require setting a configuration bit in the processor.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
211 bool HasSSEUnalignedMem;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
212
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
213 /// True if this processor has the CMPXCHG16B instruction;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 /// this is true for most x86-64 chips, but not the first AMD chips.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 bool HasCmpxchg16b;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
217 /// True if the LEA instruction should be used for adjusting
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 /// the stack pointer. This is an optimization for Intel Atom processors.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 bool UseLeaForSP;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
221 /// True if there is no performance penalty to writing only the lower parts
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
222 /// of a YMM or ZMM register without clearing the upper part.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
223 bool HasFastPartialYMMorZMMWrite;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
224
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
225 /// True if hardware SQRTSS instruction is at least as fast (latency) as
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
226 /// RSQRTSS followed by a Newton-Raphson iteration.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
227 bool HasFastScalarFSQRT;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
228
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
229 /// True if hardware SQRTPS/VSQRTPS instructions are at least as fast
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
230 /// (throughput) as RSQRTPS/VRSQRTPS followed by a Newton-Raphson iteration.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
231 bool HasFastVectorFSQRT;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
232
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
233 /// True if 8-bit divisions are significantly faster than
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
234 /// 32-bit divisions and should be used when possible.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
235 bool HasSlowDivide32;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
237 /// True if 32-bit divides are significantly faster than
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
238 /// 64-bit divisions and should be used when possible.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
239 bool HasSlowDivide64;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
240
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
241 /// True if LZCNT instruction is fast.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
242 bool HasFastLZCNT;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
243
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
244 /// True if SHLD based rotate is fast.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
245 bool HasFastSHLDRotate;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
246
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
247 /// True if the processor supports macrofusion.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
248 bool HasMacroFusion;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
249
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
250 /// True if the processor has enhanced REP MOVSB/STOSB.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
251 bool HasERMSB;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
252
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
253 /// True if the short functions should be padded to prevent
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 /// a stall when returning too early.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 bool PadShortFunctions;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
257 /// True if two memory operand instructions should use a temporary register
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
258 /// instead.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
259 bool SlowTwoMemOps;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
260
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
261 /// True if the LEA instruction inputs have to be ready at address generation
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
262 /// (AG) time.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 bool LEAUsesAG;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
265 /// True if the LEA instruction with certain arguments is slow
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
266 bool SlowLEA;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
267
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
268 /// True if the LEA instruction has all three source operands: base, index,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
269 /// and offset or if the LEA instruction uses base and index registers where
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
270 /// the base is EBP, RBP,or R13
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
271 bool Slow3OpsLEA;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
272
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
273 /// True if INC and DEC instructions are slow when writing to flags
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
274 bool SlowIncDec;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
275
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 /// Processor has AVX-512 PreFetch Instructions
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 bool HasPFI;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
278
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 /// Processor has AVX-512 Exponential and Reciprocal Instructions
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 bool HasERI;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
281
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 /// Processor has AVX-512 Conflict Detection Instructions
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 bool HasCDI;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
284
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
285 /// Processor has AVX-512 population count Instructions
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
286 bool HasVPOPCNTDQ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
287
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
288 /// Processor has AVX-512 Doubleword and Quadword instructions
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
289 bool HasDQI;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
290
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
291 /// Processor has AVX-512 Byte and Word instructions
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
292 bool HasBWI;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
293
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
294 /// Processor has AVX-512 Vector Length eXtenstions
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
295 bool HasVLX;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
296
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
297 /// Processor has PKU extenstions
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
298 bool HasPKU;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
299
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
300 /// Processor supports MPX - Memory Protection Extensions
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
301 bool HasMPX;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
302
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
303 /// Processor has Software Guard Extensions
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
304 bool HasSGX;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
305
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
306 /// Processor supports Flush Cache Line instruction
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
307 bool HasCLFLUSHOPT;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
308
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
309 /// Processor supports Cache Line Write Back instruction
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
310 bool HasCLWB;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
311
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
312 /// Use software floating point for code generation.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
313 bool UseSoftFloat;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
314
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
315 /// The minimum alignment known to hold of the stack frame on
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 /// entry to the function and which must be maintained by every function.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 unsigned stackAlignment;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 /// Max. memset / memcpy size that is turned into rep/movs, rep/stos ops.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 ///
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 unsigned MaxInlineSizeThreshold;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
323 /// What processor and OS we're targeting.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 Triple TargetTriple;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 /// Instruction itineraries for scheduling
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 InstrItineraryData InstrItins;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
329 /// GlobalISel related APIs.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
330 std::unique_ptr<CallLowering> CallLoweringInfo;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
331 std::unique_ptr<LegalizerInfo> Legalizer;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
332 std::unique_ptr<RegisterBankInfo> RegBankInfo;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
333 std::unique_ptr<InstructionSelector> InstSelector;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
334
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 private:
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
336 /// Override the stack alignment.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 unsigned StackAlignOverride;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
338
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
339 /// True if compiling for 64-bit, false for 16-bit or 32-bit.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 bool In64BitMode;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
342 /// True if compiling for 32-bit, false for 16-bit or 64-bit.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
343 bool In32BitMode;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
344
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
345 /// True if compiling for 16-bit, false for 32-bit or 64-bit.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
346 bool In16BitMode;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
347
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
348 /// Contains the Overhead of gather\scatter instructions
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
349 int GatherOverhead;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
350 int ScatterOverhead;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
351
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
352 X86SelectionDAGInfo TSInfo;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
353 // Ordering here is important. X86InstrInfo initializes X86RegisterInfo which
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
354 // X86TargetLowering needs.
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
355 X86InstrInfo InstrInfo;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
356 X86TargetLowering TLInfo;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
357 X86FrameLowering FrameLowering;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
358
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 public:
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 /// This constructor initializes the data members to match that
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 /// of the specified triple.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 ///
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
363 X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
364 const X86TargetMachine &TM, unsigned StackAlignOverride);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
365
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
366 const X86TargetLowering *getTargetLowering() const override {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
367 return &TLInfo;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
368 }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
369
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
370 const X86InstrInfo *getInstrInfo() const override { return &InstrInfo; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
371
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
372 const X86FrameLowering *getFrameLowering() const override {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
373 return &FrameLowering;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
374 }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
375
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
376 const X86SelectionDAGInfo *getSelectionDAGInfo() const override {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
377 return &TSInfo;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
378 }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
379
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
380 const X86RegisterInfo *getRegisterInfo() const override {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
381 return &getInstrInfo()->getRegisterInfo();
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
382 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
384 /// Returns the minimum alignment known to hold of the
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 /// stack frame on entry to the function and which must be maintained by every
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 /// function for this subtarget.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 unsigned getStackAlignment() const { return stackAlignment; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
389 /// Returns the maximum memset / memcpy size
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 /// that still makes it profitable to inline the call.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 unsigned getMaxInlineSizeThreshold() const { return MaxInlineSizeThreshold; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
392
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 /// ParseSubtargetFeatures - Parses features string setting specified
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 /// subtarget options. Definition of function is auto generated by tblgen.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
397 /// Methods used by Global ISel
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
398 const CallLowering *getCallLowering() const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
399 const InstructionSelector *getInstructionSelector() const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
400 const LegalizerInfo *getLegalizerInfo() const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
401 const RegisterBankInfo *getRegBankInfo() const override;
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
402
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 private:
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
404 /// Initialize the full set of dependencies so we can use an initializer
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
405 /// list for X86Subtarget.
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
406 X86Subtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 void initializeEnvironment();
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
408 void initSubtargetFeatures(StringRef CPU, StringRef FS);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
409
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 public:
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 /// Is this x86_64? (disregarding specific ABI / programming model)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 bool is64Bit() const {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 return In64BitMode;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
416 bool is32Bit() const {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
417 return In32BitMode;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
418 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
419
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
420 bool is16Bit() const {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
421 return In16BitMode;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
422 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
423
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 /// Is this x86_64 with the ILP32 programming model (x32 ABI)?
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 bool isTarget64BitILP32() const {
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
426 return In64BitMode && (TargetTriple.getEnvironment() == Triple::GNUX32 ||
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
427 TargetTriple.isOSNaCl());
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
429
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 /// Is this x86_64 with the LP64 programming model (standard AMD64, no x32)?
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 bool isTarget64BitLP64() const {
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
432 return In64BitMode && (TargetTriple.getEnvironment() != Triple::GNUX32 &&
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
433 !TargetTriple.isOSNaCl());
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
435
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 PICStyles::Style getPICStyle() const { return PICStyle; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 void setPICStyle(PICStyles::Style Style) { PICStyle = Style; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
438
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
439 bool hasX87() const { return HasX87; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 bool hasCMov() const { return HasCMov; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 bool hasSSE1() const { return X86SSELevel >= SSE1; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 bool hasSSE2() const { return X86SSELevel >= SSE2; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 bool hasSSE3() const { return X86SSELevel >= SSE3; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 bool hasSSSE3() const { return X86SSELevel >= SSSE3; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 bool hasSSE41() const { return X86SSELevel >= SSE41; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 bool hasSSE42() const { return X86SSELevel >= SSE42; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 bool hasAVX() const { return X86SSELevel >= AVX; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 bool hasAVX2() const { return X86SSELevel >= AVX2; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 bool hasAVX512() const { return X86SSELevel >= AVX512F; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 bool hasFp256() const { return hasAVX(); }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 bool hasInt256() const { return hasAVX2(); }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 bool hasSSE4A() const { return HasSSE4A; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
453 bool hasMMX() const { return X863DNowLevel >= MMX; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 bool has3DNow() const { return X863DNowLevel >= ThreeDNow; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 bool has3DNowA() const { return X863DNowLevel >= ThreeDNowA; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 bool hasPOPCNT() const { return HasPOPCNT; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 bool hasAES() const { return HasAES; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
458 bool hasFXSR() const { return HasFXSR; }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
459 bool hasXSAVE() const { return HasXSAVE; }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
460 bool hasXSAVEOPT() const { return HasXSAVEOPT; }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
461 bool hasXSAVEC() const { return HasXSAVEC; }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
462 bool hasXSAVES() const { return HasXSAVES; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 bool hasPCLMUL() const { return HasPCLMUL; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
464 // Prefer FMA4 to FMA - its better for commutation/memory folding and
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
465 // has equal or better performance on all supported targets.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
466 bool hasFMA() const { return (HasFMA || hasAVX512()) && !HasFMA4; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
467 bool hasFMA4() const { return HasFMA4; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
468 bool hasAnyFMA() const { return hasFMA() || hasFMA4(); }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 bool hasXOP() const { return HasXOP; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 bool hasTBM() const { return HasTBM; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
471 bool hasLWP() const { return HasLWP; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 bool hasMOVBE() const { return HasMOVBE; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 bool hasRDRAND() const { return HasRDRAND; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 bool hasF16C() const { return HasF16C; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 bool hasFSGSBase() const { return HasFSGSBase; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 bool hasLZCNT() const { return HasLZCNT; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 bool hasBMI() const { return HasBMI; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 bool hasBMI2() const { return HasBMI2; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
479 bool hasVBMI() const { return HasVBMI; }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
480 bool hasIFMA() const { return HasIFMA; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 bool hasRTM() const { return HasRTM; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 bool hasADX() const { return HasADX; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 bool hasSHA() const { return HasSHA; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 bool hasPRFCHW() const { return HasPRFCHW; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 bool hasRDSEED() const { return HasRDSEED; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
486 bool hasLAHFSAHF() const { return HasLAHFSAHF; }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
487 bool hasMWAITX() const { return HasMWAITX; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
488 bool hasCLZERO() const { return HasCLZERO; }
33
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
489 bool isSHLDSlow() const { return IsSHLDSlow; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
490 bool isPMULLDSlow() const { return IsPMULLDSlow; }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
491 bool isUnalignedMem16Slow() const { return IsUAMem16Slow; }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
492 bool isUnalignedMem32Slow() const { return IsUAMem32Slow; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
493 int getGatherOverhead() const { return GatherOverhead; }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
494 int getScatterOverhead() const { return ScatterOverhead; }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
495 bool hasSSEUnalignedMem() const { return HasSSEUnalignedMem; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 bool hasCmpxchg16b() const { return HasCmpxchg16b; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 bool useLeaForSP() const { return UseLeaForSP; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
498 bool hasFastPartialYMMorZMMWrite() const {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
499 return HasFastPartialYMMorZMMWrite;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
500 }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
501 bool hasFastScalarFSQRT() const { return HasFastScalarFSQRT; }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
502 bool hasFastVectorFSQRT() const { return HasFastVectorFSQRT; }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
503 bool hasFastLZCNT() const { return HasFastLZCNT; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
504 bool hasFastSHLDRotate() const { return HasFastSHLDRotate; }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
505 bool hasMacroFusion() const { return HasMacroFusion; }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
506 bool hasERMSB() const { return HasERMSB; }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
507 bool hasSlowDivide32() const { return HasSlowDivide32; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
508 bool hasSlowDivide64() const { return HasSlowDivide64; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 bool padShortFunctions() const { return PadShortFunctions; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
510 bool slowTwoMemOps() const { return SlowTwoMemOps; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 bool LEAusesAG() const { return LEAUsesAG; }
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
512 bool slowLEA() const { return SlowLEA; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
513 bool slow3OpsLEA() const { return Slow3OpsLEA; }
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
514 bool slowIncDec() const { return SlowIncDec; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 bool hasCDI() const { return HasCDI; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
516 bool hasVPOPCNTDQ() const { return HasVPOPCNTDQ; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 bool hasPFI() const { return HasPFI; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 bool hasERI() const { return HasERI; }
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
519 bool hasDQI() const { return HasDQI; }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
520 bool hasBWI() const { return HasBWI; }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
521 bool hasVLX() const { return HasVLX; }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
522 bool hasPKU() const { return HasPKU; }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
523 bool hasMPX() const { return HasMPX; }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
524 bool hasCLFLUSHOPT() const { return HasCLFLUSHOPT; }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
525 bool hasCLWB() const { return HasCLWB; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
527 bool isXRaySupported() const override { return is64Bit(); }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
528
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
529 X86ProcFamilyEnum getProcFamily() const { return X86ProcFamily; }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
530
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
531 /// TODO: to be removed later and replaced with suitable properties
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 bool isAtom() const { return X86ProcFamily == IntelAtom; }
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
533 bool isSLM() const { return X86ProcFamily == IntelSLM; }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
534 bool useSoftFloat() const { return UseSoftFloat; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
535
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
536 /// Use mfence if we have SSE2 or we're on x86-64 (even if we asked for
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
537 /// no-sse2). There isn't any reason to disable it if the target processor
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
538 /// supports it.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
539 bool hasMFence() const { return hasSSE2() || is64Bit(); }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
540
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 const Triple &getTargetTriple() const { return TargetTriple; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
542
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
544 bool isTargetFreeBSD() const { return TargetTriple.isOSFreeBSD(); }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
545 bool isTargetDragonFly() const { return TargetTriple.isOSDragonFly(); }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
546 bool isTargetSolaris() const { return TargetTriple.isOSSolaris(); }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
547 bool isTargetPS4() const { return TargetTriple.isPS4CPU(); }
33
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
548
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
549 bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); }
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
550 bool isTargetCOFF() const { return TargetTriple.isOSBinFormatCOFF(); }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
551 bool isTargetMachO() const { return TargetTriple.isOSBinFormatMachO(); }
33
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
552
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 bool isTargetLinux() const { return TargetTriple.isOSLinux(); }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
554 bool isTargetKFreeBSD() const { return TargetTriple.isOSKFreeBSD(); }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
555 bool isTargetGlibc() const { return TargetTriple.isOSGlibc(); }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
556 bool isTargetAndroid() const { return TargetTriple.isAndroid(); }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); }
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
560 bool isTargetMCU() const { return TargetTriple.isOSIAMCU(); }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
561 bool isTargetFuchsia() const { return TargetTriple.isOSFuchsia(); }
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
562
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
563 bool isTargetWindowsMSVC() const {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
564 return TargetTriple.isWindowsMSVCEnvironment();
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
565 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
566
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
567 bool isTargetKnownWindowsMSVC() const {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
568 return TargetTriple.isKnownWindowsMSVCEnvironment();
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
569 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
570
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
571 bool isTargetWindowsCoreCLR() const {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
572 return TargetTriple.isWindowsCoreCLREnvironment();
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
573 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
574
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
575 bool isTargetWindowsCygwin() const {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
576 return TargetTriple.isWindowsCygwinEnvironment();
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
577 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
578
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
579 bool isTargetWindowsGNU() const {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
580 return TargetTriple.isWindowsGNUEnvironment();
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
581 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
582
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
583 bool isTargetWindowsItanium() const {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
584 return TargetTriple.isWindowsItaniumEnvironment();
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
585 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
586
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
588
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 bool isOSWindows() const { return TargetTriple.isOSWindows(); }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
590
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
591 bool isTargetWin64() const { return In64BitMode && isOSWindows(); }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
592
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
593 bool isTargetWin32() const { return !In64BitMode && isOSWindows(); }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
594
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 bool isPICStyleGOT() const { return PICStyle == PICStyles::GOT; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 bool isPICStyleRIPRel() const { return PICStyle == PICStyles::RIPRel; }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
597
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 bool isPICStyleStubPIC() const {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 return PICStyle == PICStyles::StubPIC;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
601
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
602 bool isPositionIndependent() const { return TM.isPositionIndependent(); }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
603
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 bool isCallingConvWin64(CallingConv::ID CC) const {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
605 switch (CC) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
606 // On Win64, all these conventions just use the default convention.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
607 case CallingConv::C:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
608 case CallingConv::Fast:
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
609 case CallingConv::Swift:
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
610 case CallingConv::X86_FastCall:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
611 case CallingConv::X86_StdCall:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
612 case CallingConv::X86_ThisCall:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
613 case CallingConv::X86_VectorCall:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
614 case CallingConv::Intel_OCL_BI:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
615 return isTargetWin64();
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
616 // This convention allows using the Win64 convention on other targets.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
617 case CallingConv::Win64:
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
618 return true;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
619 // This convention allows using the SysV convention on Windows targets.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
620 case CallingConv::X86_64_SysV:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
621 return false;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
622 // Otherwise, who knows what this is.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
623 default:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
624 return false;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
625 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
627
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
628 /// Classify a global variable reference for the current subtarget according
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
629 /// to how we should reference it in a non-pcrel context.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
630 unsigned char classifyLocalReference(const GlobalValue *GV) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
631
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
632 unsigned char classifyGlobalReference(const GlobalValue *GV,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
633 const Module &M) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
634 unsigned char classifyGlobalReference(const GlobalValue *GV) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
635
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
636 /// Classify a global function reference for the current subtarget.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
637 unsigned char classifyGlobalFunctionReference(const GlobalValue *GV,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
638 const Module &M) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
639 unsigned char classifyGlobalFunctionReference(const GlobalValue *GV) const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
640
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
641 /// Classify a blockaddress reference for the current subtarget according to
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
642 /// how we should reference it in a non-pcrel context.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
643 unsigned char classifyBlockAddressReference() const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
644
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
645 /// Return true if the subtarget allows calls to immediate address.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
646 bool isLegalToCallImmediateAddr() const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
647
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
648 /// This function returns the name of a function which has an interface
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 /// like the non-standard bzero function, if such a function exists on
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 /// the current subtarget and it is considered prefereable over
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 /// memset with zero passed as the second argument. Otherwise it
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 /// returns null.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 const char *getBZeroEntry() const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
654
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
655 /// This function returns true if the target has sincos() routine in its
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 /// compiler runtime or math libraries.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
657 bool hasSinCos() const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
658
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 /// Enable the MachineScheduler pass for all X86 subtargets.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
660 bool enableMachineScheduler() const override { return true; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
661
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
662 // TODO: Update the regression tests and return true.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
663 bool supportPrintSchedInfo() const override { return false; }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
664
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
665 bool enableEarlyIfConversion() const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
666
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
667 /// Return the instruction itineraries based on the subtarget selection.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
668 const InstrItineraryData *getInstrItineraryData() const override {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
669 return &InstrItins;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
670 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
671
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
672 AntiDepBreakMode getAntiDepBreakMode() const override {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
673 return TargetSubtargetInfo::ANTIDEP_CRITICAL;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
674 }
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
675
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
676 bool enableAdvancedRASplitCost() const override { return true; }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
677 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
678
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
679 } // end namespace llvm
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
680
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
681 #endif // LLVM_LIB_TARGET_X86_X86SUBTARGET_H