134
134
ret void
135
135
}
136
136
137
- define void @unforwardable_avl() {
137
+ define void @clobberred_forwarded_avl() {
138
+ ret void
139
+ }
140
+
141
+ define void @clobberred_forwarded_phi_avl() {
138
142
ret void
139
143
}
140
144
@@ -995,16 +999,17 @@ body: |
995
999
PseudoBR %bb.1
996
1000
...
997
1001
---
998
- name : unforwardable_avl
1002
+ name : clobberred_forwarded_avl
999
1003
tracksRegLiveness : true
1000
1004
body : |
1001
- ; CHECK-LABEL: name: unforwardable_avl
1005
+ ; CHECK-LABEL: name: clobberred_forwarded_avl
1002
1006
; CHECK: bb.0:
1003
1007
; CHECK-NEXT: successors: %bb.1(0x80000000)
1004
1008
; CHECK-NEXT: liveins: $x10, $v8m2
1005
1009
; CHECK-NEXT: {{ $}}
1006
1010
; CHECK-NEXT: %avl:gprnox0 = COPY $x10
1007
- ; CHECK-NEXT: %outvl:gprnox0 = PseudoVSETVLI %avl, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1011
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gprnox0 = COPY %avl
1012
+ ; CHECK-NEXT: dead %outvl:gprnox0 = PseudoVSETVLI %avl, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1008
1013
; CHECK-NEXT: {{ $}}
1009
1014
; CHECK-NEXT: bb.1:
1010
1015
; CHECK-NEXT: successors: %bb.2(0x80000000)
@@ -1017,7 +1022,7 @@ body: |
1017
1022
; CHECK-NEXT: {{ $}}
1018
1023
; CHECK-NEXT: dead [[PseudoVSETVLIX0_:%[0-9]+]]:gpr = PseudoVSETVLIX0 killed $x0, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1019
1024
; CHECK-NEXT: renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, renamable $v8m2, renamable $v8m2, -1, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1020
- ; CHECK-NEXT: dead $x0 = PseudoVSETVLI %outvl , 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1025
+ ; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY]] , 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1021
1026
; CHECK-NEXT: renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, renamable $v8m2, $noreg, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1022
1027
; CHECK-NEXT: PseudoRET implicit $v8m2
1023
1028
bb.0:
@@ -1034,3 +1039,63 @@ body: |
1034
1039
renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, renamable $v8m2, renamable $v8m2, -1, 5, 0
1035
1040
renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, killed renamable $v8m2, %outvl:gprnox0, 5, 0
1036
1041
PseudoRET implicit $v8m2
1042
+ ...
1043
+ ---
1044
+ name : clobberred_forwarded_phi_avl
1045
+ tracksRegLiveness : true
1046
+ body : |
1047
+ ; CHECK-LABEL: name: clobberred_forwarded_phi_avl
1048
+ ; CHECK: bb.0:
1049
+ ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
1050
+ ; CHECK-NEXT: liveins: $x10, $x11, $v8m2
1051
+ ; CHECK-NEXT: {{ $}}
1052
+ ; CHECK-NEXT: %v:vrm2 = COPY $v8m2
1053
+ ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gprnox0 = ADDI $x0, 1
1054
+ ; CHECK-NEXT: %x:gpr = COPY $x10
1055
+ ; CHECK-NEXT: %y:gpr = COPY $x11
1056
+ ; CHECK-NEXT: BEQ %x, %y, %bb.2
1057
+ ; CHECK-NEXT: {{ $}}
1058
+ ; CHECK-NEXT: bb.1:
1059
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
1060
+ ; CHECK-NEXT: {{ $}}
1061
+ ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gprnox0 = ADDI $x0, 2
1062
+ ; CHECK-NEXT: {{ $}}
1063
+ ; CHECK-NEXT: bb.2:
1064
+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
1065
+ ; CHECK-NEXT: {{ $}}
1066
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gprnox0 = COPY [[ADDI]]
1067
+ ; CHECK-NEXT: dead %outvl:gprnox0 = PseudoVSETVLI [[ADDI]], 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1068
+ ; CHECK-NEXT: {{ $}}
1069
+ ; CHECK-NEXT: bb.3:
1070
+ ; CHECK-NEXT: successors: %bb.4(0x80000000)
1071
+ ; CHECK-NEXT: {{ $}}
1072
+ ; CHECK-NEXT: dead [[ADDI:%[0-9]+]]:gprnox0 = ADDI [[ADDI]], 1
1073
+ ; CHECK-NEXT: {{ $}}
1074
+ ; CHECK-NEXT: bb.4:
1075
+ ; CHECK-NEXT: dead [[PseudoVSETVLIX0_:%[0-9]+]]:gpr = PseudoVSETVLIX0 killed $x0, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1076
+ ; CHECK-NEXT: renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, %v, %v, -1, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1077
+ ; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY]], 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1078
+ ; CHECK-NEXT: renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, %v, $noreg, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1079
+ ; CHECK-NEXT: PseudoRET implicit $v8m2
1080
+ bb.0:
1081
+ liveins: $x10, $x11, $v8m2
1082
+ %v:vrm2 = COPY $v8m2
1083
+ %a:gpr = ADDI $x0, 1
1084
+ %x:gpr = COPY $x10
1085
+ %y:gpr = COPY $x11
1086
+ BEQ %x, %y, %bb.2
1087
+
1088
+ bb.1:
1089
+ %b:gpr = ADDI $x0, 2
1090
+
1091
+ bb.2:
1092
+ %avl:gprnox0 = PHI %a, %bb.0, %b, %bb.1
1093
+ %outvl:gprnox0 = PseudoVSETVLI %avl:gprnox0, 209, implicit-def dead $vl, implicit-def dead $vtype
1094
+
1095
+ bb.3:
1096
+ %avl:gprnox0 = ADDI %avl:gprnox0, 1
1097
+
1098
+ bb.4:
1099
+ renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, %v, %v, -1, 5, 0
1100
+ renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, killed %v, %outvl:gprnox0, 5, 0
1101
+ PseudoRET implicit $v8m2
0 commit comments