Skip to content

Commit cba24c1

Browse files
[SystemZ] Consider VST/VL as SimpleBDXStore/Load
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 commit 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 88d0b08 commit cba24c1

File tree

2 files changed

+31
-43
lines changed

2 files changed

+31
-43
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>;

llvm/test/CodeGen/SystemZ/vector-constrained-fp-intrinsics.ll

+27-41
Original file line numberDiff line numberDiff line change
@@ -440,10 +440,9 @@ define void @constrained_vector_frem_v3f64(ptr %a) #0 {
440440
; SZ13-NEXT: ld %f0, 0(%r1)
441441
; SZ13-NEXT: ldr %f2, %f8
442442
; SZ13-NEXT: brasl %r14, fmod@PLT
443-
; SZ13-NEXT: std %f0, 16(%r13)
444-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
443+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
445444
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
446-
; SZ13-NEXT: vst %v0, 0(%r13), 4
445+
; SZ13-NEXT: std %f0, 16(%r13)
447446
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
448447
; SZ13-NEXT: br %r14
449448
entry:
@@ -1473,11 +1472,10 @@ define void @constrained_vector_pow_v3f64(ptr %a) #0 {
14731472
; SZ13-NEXT: ldr %f0, %f8
14741473
; SZ13-NEXT: ldr %f2, %f9
14751474
; SZ13-NEXT: brasl %r14, pow@PLT
1476-
; SZ13-NEXT: std %f0, 16(%r13)
1477-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
1475+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
14781476
; SZ13-NEXT: ld %f8, 200(%r15) # 8-byte Reload
14791477
; SZ13-NEXT: ld %f9, 192(%r15) # 8-byte Reload
1480-
; SZ13-NEXT: vst %v0, 0(%r13), 4
1478+
; SZ13-NEXT: std %f0, 16(%r13)
14811479
; SZ13-NEXT: lmg %r13, %r15, 312(%r15)
14821480
; SZ13-NEXT: br %r14
14831481
entry:
@@ -1829,9 +1827,8 @@ define void @constrained_vector_powi_v3f64(ptr %a) #0 {
18291827
; SZ13-NEXT: ld %f0, 0(%r1)
18301828
; SZ13-NEXT: lghi %r2, 3
18311829
; SZ13-NEXT: brasl %r14, __powidf2@PLT
1830+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
18321831
; SZ13-NEXT: std %f0, 16(%r13)
1833-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
1834-
; SZ13-NEXT: vst %v0, 0(%r13), 4
18351832
; SZ13-NEXT: lmg %r13, %r15, 280(%r15)
18361833
; SZ13-NEXT: br %r14
18371834
entry:
@@ -2155,10 +2152,9 @@ define void @constrained_vector_sin_v3f64(ptr %a) #0 {
21552152
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
21562153
; SZ13-NEXT: ldr %f0, %f8
21572154
; SZ13-NEXT: brasl %r14, sin@PLT
2158-
; SZ13-NEXT: std %f0, 16(%r13)
2159-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
2155+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
21602156
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
2161-
; SZ13-NEXT: vst %v0, 0(%r13), 4
2157+
; SZ13-NEXT: std %f0, 16(%r13)
21622158
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
21632159
; SZ13-NEXT: br %r14
21642160
entry:
@@ -2472,10 +2468,9 @@ define void @constrained_vector_cos_v3f64(ptr %a) #0 {
24722468
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
24732469
; SZ13-NEXT: ldr %f0, %f8
24742470
; SZ13-NEXT: brasl %r14, cos@PLT
2475-
; SZ13-NEXT: std %f0, 16(%r13)
2476-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
2471+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
24772472
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
2478-
; SZ13-NEXT: vst %v0, 0(%r13), 4
2473+
; SZ13-NEXT: std %f0, 16(%r13)
24792474
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
24802475
; SZ13-NEXT: br %r14
24812476
entry:
@@ -2789,10 +2784,9 @@ define void @constrained_vector_exp_v3f64(ptr %a) #0 {
27892784
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
27902785
; SZ13-NEXT: ldr %f0, %f8
27912786
; SZ13-NEXT: brasl %r14, exp@PLT
2792-
; SZ13-NEXT: std %f0, 16(%r13)
2793-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
2787+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
27942788
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
2795-
; SZ13-NEXT: vst %v0, 0(%r13), 4
2789+
; SZ13-NEXT: std %f0, 16(%r13)
27962790
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
27972791
; SZ13-NEXT: br %r14
27982792
entry:
@@ -3106,10 +3100,9 @@ define void @constrained_vector_exp2_v3f64(ptr %a) #0 {
31063100
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
31073101
; SZ13-NEXT: ldr %f0, %f8
31083102
; SZ13-NEXT: brasl %r14, exp2@PLT
3109-
; SZ13-NEXT: std %f0, 16(%r13)
3110-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
3103+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
31113104
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
3112-
; SZ13-NEXT: vst %v0, 0(%r13), 4
3105+
; SZ13-NEXT: std %f0, 16(%r13)
31133106
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
31143107
; SZ13-NEXT: br %r14
31153108
entry:
@@ -3423,10 +3416,9 @@ define void @constrained_vector_log_v3f64(ptr %a) #0 {
34233416
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
34243417
; SZ13-NEXT: ldr %f0, %f8
34253418
; SZ13-NEXT: brasl %r14, log@PLT
3426-
; SZ13-NEXT: std %f0, 16(%r13)
3427-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
3419+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
34283420
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
3429-
; SZ13-NEXT: vst %v0, 0(%r13), 4
3421+
; SZ13-NEXT: std %f0, 16(%r13)
34303422
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
34313423
; SZ13-NEXT: br %r14
34323424
entry:
@@ -3740,10 +3732,9 @@ define void @constrained_vector_log10_v3f64(ptr %a) #0 {
37403732
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
37413733
; SZ13-NEXT: ldr %f0, %f8
37423734
; SZ13-NEXT: brasl %r14, log10@PLT
3743-
; SZ13-NEXT: std %f0, 16(%r13)
3744-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
3735+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
37453736
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
3746-
; SZ13-NEXT: vst %v0, 0(%r13), 4
3737+
; SZ13-NEXT: std %f0, 16(%r13)
37473738
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
37483739
; SZ13-NEXT: br %r14
37493740
entry:
@@ -4057,10 +4048,9 @@ define void @constrained_vector_log2_v3f64(ptr %a) #0 {
40574048
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
40584049
; SZ13-NEXT: ldr %f0, %f8
40594050
; SZ13-NEXT: brasl %r14, log2@PLT
4060-
; SZ13-NEXT: std %f0, 16(%r13)
4061-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
4051+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
40624052
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
4063-
; SZ13-NEXT: vst %v0, 0(%r13), 4
4053+
; SZ13-NEXT: std %f0, 16(%r13)
40644054
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
40654055
; SZ13-NEXT: br %r14
40664056
entry:
@@ -4788,10 +4778,9 @@ define void @constrained_vector_log10_maxnum_v3f64(ptr %a) #0 {
47884778
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
47894779
; SZ13-NEXT: ldr %f0, %f8
47904780
; SZ13-NEXT: brasl %r14, fmax@PLT
4791-
; SZ13-NEXT: std %f0, 16(%r13)
4792-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
4781+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
47934782
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
4794-
; SZ13-NEXT: vst %v0, 0(%r13), 4
4783+
; SZ13-NEXT: std %f0, 16(%r13)
47954784
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
47964785
; SZ13-NEXT: br %r14
47974786
entry:
@@ -5165,11 +5154,10 @@ define void @constrained_vector_minnum_v3f64(ptr %a) #0 {
51655154
; SZ13-NEXT: ldr %f0, %f8
51665155
; SZ13-NEXT: ldr %f2, %f9
51675156
; SZ13-NEXT: brasl %r14, fmin@PLT
5168-
; SZ13-NEXT: std %f0, 16(%r13)
5169-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
5157+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
51705158
; SZ13-NEXT: ld %f8, 200(%r15) # 8-byte Reload
51715159
; SZ13-NEXT: ld %f9, 192(%r15) # 8-byte Reload
5172-
; SZ13-NEXT: vst %v0, 0(%r13), 4
5160+
; SZ13-NEXT: std %f0, 16(%r13)
51735161
; SZ13-NEXT: lmg %r13, %r15, 312(%r15)
51745162
; SZ13-NEXT: br %r14
51755163
entry:
@@ -6612,10 +6600,9 @@ define void @constrained_vector_tan_v3f64(ptr %a) #0 {
66126600
; SZ13-NEXT: vst %v0, 160(%r15), 3 # 16-byte Folded Spill
66136601
; SZ13-NEXT: ldr %f0, %f8
66146602
; SZ13-NEXT: brasl %r14, tan@PLT
6615-
; SZ13-NEXT: std %f0, 16(%r13)
6616-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
6603+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
66176604
; SZ13-NEXT: ld %f8, 192(%r15) # 8-byte Reload
6618-
; SZ13-NEXT: vst %v0, 0(%r13), 4
6605+
; SZ13-NEXT: std %f0, 16(%r13)
66196606
; SZ13-NEXT: lmg %r13, %r15, 304(%r15)
66206607
; SZ13-NEXT: br %r14
66216608
entry:
@@ -6977,11 +6964,10 @@ define void @constrained_vector_atan2_v3f64(ptr %a, ptr %b) #0 {
69776964
; SZ13-NEXT: ldr %f0, %f8
69786965
; SZ13-NEXT: ldr %f2, %f9
69796966
; SZ13-NEXT: brasl %r14, atan2@PLT
6980-
; SZ13-NEXT: std %f0, 16(%r13)
6981-
; SZ13-NEXT: vl %v0, 160(%r15), 3 # 16-byte Folded Reload
6967+
; SZ13-NEXT: mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload
69826968
; SZ13-NEXT: ld %f8, 216(%r15) # 8-byte Reload
69836969
; SZ13-NEXT: ld %f9, 208(%r15) # 8-byte Reload
6984-
; SZ13-NEXT: vst %v0, 0(%r13), 4
6970+
; SZ13-NEXT: std %f0, 16(%r13)
69856971
; SZ13-NEXT: lmg %r13, %r15, 328(%r15)
69866972
; SZ13-NEXT: br %r14
69876973
entry:

0 commit comments

Comments
 (0)