@@ -57,46 +57,48 @@ void VETargetLowering::initRegisterClasses() {
57
57
addRegisterClass (MVT::f64 , &VE::I64RegClass);
58
58
addRegisterClass (MVT::f128 , &VE::F128RegClass);
59
59
60
- addRegisterClass (MVT::v2i32, &VE::V64RegClass);
61
- addRegisterClass (MVT::v4i32, &VE::V64RegClass);
62
- addRegisterClass (MVT::v8i32, &VE::V64RegClass);
63
- addRegisterClass (MVT::v16i32, &VE::V64RegClass);
64
- addRegisterClass (MVT::v32i32, &VE::V64RegClass);
65
- addRegisterClass (MVT::v64i32, &VE::V64RegClass);
66
- addRegisterClass (MVT::v128i32, &VE::V64RegClass);
67
- addRegisterClass (MVT::v256i32, &VE::V64RegClass);
68
- addRegisterClass (MVT::v512i32, &VE::V64RegClass);
69
-
70
- addRegisterClass (MVT::v2i64, &VE::V64RegClass);
71
- addRegisterClass (MVT::v4i64, &VE::V64RegClass);
72
- addRegisterClass (MVT::v8i64, &VE::V64RegClass);
73
- addRegisterClass (MVT::v16i64, &VE::V64RegClass);
74
- addRegisterClass (MVT::v32i64, &VE::V64RegClass);
75
- addRegisterClass (MVT::v64i64, &VE::V64RegClass);
76
- addRegisterClass (MVT::v128i64, &VE::V64RegClass);
77
- addRegisterClass (MVT::v256i64, &VE::V64RegClass);
78
-
79
- addRegisterClass (MVT::v2f32, &VE::V64RegClass);
80
- addRegisterClass (MVT::v4f32, &VE::V64RegClass);
81
- addRegisterClass (MVT::v8f32, &VE::V64RegClass);
82
- addRegisterClass (MVT::v16f32, &VE::V64RegClass);
83
- addRegisterClass (MVT::v32f32, &VE::V64RegClass);
84
- addRegisterClass (MVT::v64f32, &VE::V64RegClass);
85
- addRegisterClass (MVT::v128f32, &VE::V64RegClass);
86
- addRegisterClass (MVT::v256f32, &VE::V64RegClass);
87
- addRegisterClass (MVT::v512f32, &VE::V64RegClass);
88
-
89
- addRegisterClass (MVT::v2f64, &VE::V64RegClass);
90
- addRegisterClass (MVT::v4f64, &VE::V64RegClass);
91
- addRegisterClass (MVT::v8f64, &VE::V64RegClass);
92
- addRegisterClass (MVT::v16f64, &VE::V64RegClass);
93
- addRegisterClass (MVT::v32f64, &VE::V64RegClass);
94
- addRegisterClass (MVT::v64f64, &VE::V64RegClass);
95
- addRegisterClass (MVT::v128f64, &VE::V64RegClass);
96
- addRegisterClass (MVT::v256f64, &VE::V64RegClass);
97
-
98
- addRegisterClass (MVT::v256i1, &VE::VMRegClass);
99
- addRegisterClass (MVT::v512i1, &VE::VM512RegClass);
60
+ if (Subtarget->enableVPU ()) {
61
+ addRegisterClass (MVT::v2i32, &VE::V64RegClass);
62
+ addRegisterClass (MVT::v4i32, &VE::V64RegClass);
63
+ addRegisterClass (MVT::v8i32, &VE::V64RegClass);
64
+ addRegisterClass (MVT::v16i32, &VE::V64RegClass);
65
+ addRegisterClass (MVT::v32i32, &VE::V64RegClass);
66
+ addRegisterClass (MVT::v64i32, &VE::V64RegClass);
67
+ addRegisterClass (MVT::v128i32, &VE::V64RegClass);
68
+ addRegisterClass (MVT::v256i32, &VE::V64RegClass);
69
+ addRegisterClass (MVT::v512i32, &VE::V64RegClass);
70
+
71
+ addRegisterClass (MVT::v2i64, &VE::V64RegClass);
72
+ addRegisterClass (MVT::v4i64, &VE::V64RegClass);
73
+ addRegisterClass (MVT::v8i64, &VE::V64RegClass);
74
+ addRegisterClass (MVT::v16i64, &VE::V64RegClass);
75
+ addRegisterClass (MVT::v32i64, &VE::V64RegClass);
76
+ addRegisterClass (MVT::v64i64, &VE::V64RegClass);
77
+ addRegisterClass (MVT::v128i64, &VE::V64RegClass);
78
+ addRegisterClass (MVT::v256i64, &VE::V64RegClass);
79
+
80
+ addRegisterClass (MVT::v2f32, &VE::V64RegClass);
81
+ addRegisterClass (MVT::v4f32, &VE::V64RegClass);
82
+ addRegisterClass (MVT::v8f32, &VE::V64RegClass);
83
+ addRegisterClass (MVT::v16f32, &VE::V64RegClass);
84
+ addRegisterClass (MVT::v32f32, &VE::V64RegClass);
85
+ addRegisterClass (MVT::v64f32, &VE::V64RegClass);
86
+ addRegisterClass (MVT::v128f32, &VE::V64RegClass);
87
+ addRegisterClass (MVT::v256f32, &VE::V64RegClass);
88
+ addRegisterClass (MVT::v512f32, &VE::V64RegClass);
89
+
90
+ addRegisterClass (MVT::v2f64, &VE::V64RegClass);
91
+ addRegisterClass (MVT::v4f64, &VE::V64RegClass);
92
+ addRegisterClass (MVT::v8f64, &VE::V64RegClass);
93
+ addRegisterClass (MVT::v16f64, &VE::V64RegClass);
94
+ addRegisterClass (MVT::v32f64, &VE::V64RegClass);
95
+ addRegisterClass (MVT::v64f64, &VE::V64RegClass);
96
+ addRegisterClass (MVT::v128f64, &VE::V64RegClass);
97
+ addRegisterClass (MVT::v256f64, &VE::V64RegClass);
98
+
99
+ addRegisterClass (MVT::v256i1, &VE::VMRegClass);
100
+ addRegisterClass (MVT::v512i1, &VE::VM512RegClass);
101
+ }
100
102
}
101
103
102
104
void VETargetLowering::initSPUActions () {
@@ -262,6 +264,10 @@ void VETargetLowering::initSPUActions() {
262
264
// / } Atomic isntructions
263
265
}
264
266
267
+ void VETargetLowering::initVPUActions () {
268
+ // TODO upstream vector isel
269
+ }
270
+
265
271
SDValue
266
272
VETargetLowering::LowerReturn (SDValue Chain, CallingConv::ID CallConv,
267
273
bool IsVarArg,
@@ -842,7 +848,7 @@ VETargetLowering::VETargetLowering(const TargetMachine &TM,
842
848
843
849
initRegisterClasses ();
844
850
initSPUActions ();
845
- // TODO initVPUActions();
851
+ initVPUActions ();
846
852
847
853
setStackPointerRegisterToSaveRestore (VE::SX11);
848
854
0 commit comments