Skip to content

Commit e071233

Browse files
[SystemZ] Consider VST/VL as SimpleBDXStore/Load (#135623)
Previously `vst` and `vl` were not considered "simple" BDX stores and loads, leading to, among other things, some opportunities for `mvc` optimization to be missed. This PR addresses this and updates some tests to account for additional `mvc` instructions being emitted. This is observed to have a neutral or slightly beneficial effect performance-wise.
1 parent 3b1dafd commit e071233

File tree

3 files changed

+285
-297
lines changed

3 files changed

+285
-297
lines changed

llvm/lib/Target/SystemZ/SystemZInstrVector.td

+4-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ let Predicates = [FeatureVector] in {
105105

106106
let Predicates = [FeatureVector] in {
107107
// Load.
108-
defm VL : UnaryVRXAlign<"vl", 0xE706>;
108+
let SimpleBDXLoad = 1 in
109+
defm VL : UnaryVRXAlign<"vl", 0xE706>;
109110

110111
// Load to block boundary. The number of loaded bytes is only known
111112
// at run time. The instruction is really polymorphic, but v128b matches
@@ -213,7 +214,8 @@ defm : ReplicatePeephole<VLREPG, v2f64, z_load, f64>;
213214

214215
let Predicates = [FeatureVector] in {
215216
// Store.
216-
defm VST : StoreVRXAlign<"vst", 0xE70E>;
217+
let SimpleBDXStore = 1 in
218+
defm VST : StoreVRXAlign<"vst", 0xE70E>;
217219

218220
// Store with length. The number of stored bytes is only known at run time.
219221
def VSTL : StoreLengthVRSb<"vstl", 0xE73F, int_s390_vstl, 0>;

0 commit comments

Comments
 (0)