@@ -88,3 +88,112 @@ entry:
88
88
%add = fadd ninf half %x , %y
89
89
ret half %add
90
90
}
91
+
92
+ ; Check that when we have the right fast math flags the converts in between the
93
+ ; two fadds are removed.
94
+
95
+ define half @normal_fadd_sequence (half %x , half %y , half %z ) {
96
+ ; CHECK-CVT-LABEL: name: normal_fadd_sequence
97
+ ; CHECK-CVT: bb.0.entry:
98
+ ; CHECK-CVT-NEXT: liveins: $h0, $h1, $h2
99
+ ; CHECK-CVT-NEXT: {{ $}}
100
+ ; CHECK-CVT-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $h2
101
+ ; CHECK-CVT-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $h1
102
+ ; CHECK-CVT-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0
103
+ ; CHECK-CVT-NEXT: [[FCVTSHr:%[0-9]+]]:fpr32 = nofpexcept FCVTSHr [[COPY1]], implicit $fpcr
104
+ ; CHECK-CVT-NEXT: [[FCVTSHr1:%[0-9]+]]:fpr32 = nofpexcept FCVTSHr [[COPY2]], implicit $fpcr
105
+ ; CHECK-CVT-NEXT: [[FADDSrr:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[FCVTSHr1]], killed [[FCVTSHr]], implicit $fpcr
106
+ ; CHECK-CVT-NEXT: [[FCVTHSr:%[0-9]+]]:fpr16 = nofpexcept FCVTHSr killed [[FADDSrr]], implicit $fpcr
107
+ ; CHECK-CVT-NEXT: [[FCVTSHr2:%[0-9]+]]:fpr32 = nofpexcept FCVTSHr killed [[FCVTHSr]], implicit $fpcr
108
+ ; CHECK-CVT-NEXT: [[FCVTSHr3:%[0-9]+]]:fpr32 = nofpexcept FCVTSHr [[COPY]], implicit $fpcr
109
+ ; CHECK-CVT-NEXT: [[FADDSrr1:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[FCVTSHr2]], killed [[FCVTSHr3]], implicit $fpcr
110
+ ; CHECK-CVT-NEXT: [[FCVTHSr1:%[0-9]+]]:fpr16 = nofpexcept FCVTHSr killed [[FADDSrr1]], implicit $fpcr
111
+ ; CHECK-CVT-NEXT: $h0 = COPY [[FCVTHSr1]]
112
+ ; CHECK-CVT-NEXT: RET_ReallyLR implicit $h0
113
+ ;
114
+ ; CHECK-FP16-LABEL: name: normal_fadd_sequence
115
+ ; CHECK-FP16: bb.0.entry:
116
+ ; CHECK-FP16-NEXT: liveins: $h0, $h1, $h2
117
+ ; CHECK-FP16-NEXT: {{ $}}
118
+ ; CHECK-FP16-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $h2
119
+ ; CHECK-FP16-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $h1
120
+ ; CHECK-FP16-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0
121
+ ; CHECK-FP16-NEXT: [[FADDHrr:%[0-9]+]]:fpr16 = nofpexcept FADDHrr [[COPY2]], [[COPY1]], implicit $fpcr
122
+ ; CHECK-FP16-NEXT: [[FADDHrr1:%[0-9]+]]:fpr16 = nofpexcept FADDHrr killed [[FADDHrr]], [[COPY]], implicit $fpcr
123
+ ; CHECK-FP16-NEXT: $h0 = COPY [[FADDHrr1]]
124
+ ; CHECK-FP16-NEXT: RET_ReallyLR implicit $h0
125
+ entry:
126
+ %add1 = fadd half %x , %y
127
+ %add2 = fadd half %add1 , %z
128
+ ret half %add2
129
+ }
130
+
131
+ define half @nnan_ninf_contract_fadd_sequence (half %x , half %y , half %z ) {
132
+ ; CHECK-CVT-LABEL: name: nnan_ninf_contract_fadd_sequence
133
+ ; CHECK-CVT: bb.0.entry:
134
+ ; CHECK-CVT-NEXT: liveins: $h0, $h1, $h2
135
+ ; CHECK-CVT-NEXT: {{ $}}
136
+ ; CHECK-CVT-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $h2
137
+ ; CHECK-CVT-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $h1
138
+ ; CHECK-CVT-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0
139
+ ; CHECK-CVT-NEXT: [[FCVTSHr:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FCVTSHr [[COPY1]], implicit $fpcr
140
+ ; CHECK-CVT-NEXT: [[FCVTSHr1:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FCVTSHr [[COPY2]], implicit $fpcr
141
+ ; CHECK-CVT-NEXT: [[FADDSrr:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FADDSrr killed [[FCVTSHr1]], killed [[FCVTSHr]], implicit $fpcr
142
+ ; CHECK-CVT-NEXT: [[FCVTSHr2:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FCVTSHr [[COPY]], implicit $fpcr
143
+ ; CHECK-CVT-NEXT: [[FADDSrr1:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FADDSrr killed [[FADDSrr]], killed [[FCVTSHr2]], implicit $fpcr
144
+ ; CHECK-CVT-NEXT: [[FCVTHSr:%[0-9]+]]:fpr16 = nnan ninf contract nofpexcept FCVTHSr killed [[FADDSrr1]], implicit $fpcr
145
+ ; CHECK-CVT-NEXT: $h0 = COPY [[FCVTHSr]]
146
+ ; CHECK-CVT-NEXT: RET_ReallyLR implicit $h0
147
+ ;
148
+ ; CHECK-FP16-LABEL: name: nnan_ninf_contract_fadd_sequence
149
+ ; CHECK-FP16: bb.0.entry:
150
+ ; CHECK-FP16-NEXT: liveins: $h0, $h1, $h2
151
+ ; CHECK-FP16-NEXT: {{ $}}
152
+ ; CHECK-FP16-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $h2
153
+ ; CHECK-FP16-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $h1
154
+ ; CHECK-FP16-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0
155
+ ; CHECK-FP16-NEXT: [[FADDHrr:%[0-9]+]]:fpr16 = nnan ninf contract nofpexcept FADDHrr [[COPY2]], [[COPY1]], implicit $fpcr
156
+ ; CHECK-FP16-NEXT: [[FADDHrr1:%[0-9]+]]:fpr16 = nnan ninf contract nofpexcept FADDHrr killed [[FADDHrr]], [[COPY]], implicit $fpcr
157
+ ; CHECK-FP16-NEXT: $h0 = COPY [[FADDHrr1]]
158
+ ; CHECK-FP16-NEXT: RET_ReallyLR implicit $h0
159
+ entry:
160
+ %add1 = fadd nnan ninf contract half %x , %y
161
+ %add2 = fadd nnan ninf contract half %add1 , %z
162
+ ret half %add2
163
+ }
164
+
165
+ define half @ninf_fadd_sequence (half %x , half %y , half %z ) {
166
+ ; CHECK-CVT-LABEL: name: ninf_fadd_sequence
167
+ ; CHECK-CVT: bb.0.entry:
168
+ ; CHECK-CVT-NEXT: liveins: $h0, $h1, $h2
169
+ ; CHECK-CVT-NEXT: {{ $}}
170
+ ; CHECK-CVT-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $h2
171
+ ; CHECK-CVT-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $h1
172
+ ; CHECK-CVT-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0
173
+ ; CHECK-CVT-NEXT: [[FCVTSHr:%[0-9]+]]:fpr32 = ninf nofpexcept FCVTSHr [[COPY1]], implicit $fpcr
174
+ ; CHECK-CVT-NEXT: [[FCVTSHr1:%[0-9]+]]:fpr32 = ninf nofpexcept FCVTSHr [[COPY2]], implicit $fpcr
175
+ ; CHECK-CVT-NEXT: [[FADDSrr:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[FCVTSHr1]], killed [[FCVTSHr]], implicit $fpcr
176
+ ; CHECK-CVT-NEXT: [[FCVTHSr:%[0-9]+]]:fpr16 = ninf nofpexcept FCVTHSr killed [[FADDSrr]], implicit $fpcr
177
+ ; CHECK-CVT-NEXT: [[FCVTSHr2:%[0-9]+]]:fpr32 = ninf nofpexcept FCVTSHr killed [[FCVTHSr]], implicit $fpcr
178
+ ; CHECK-CVT-NEXT: [[FCVTSHr3:%[0-9]+]]:fpr32 = ninf nofpexcept FCVTSHr [[COPY]], implicit $fpcr
179
+ ; CHECK-CVT-NEXT: [[FADDSrr1:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[FCVTSHr2]], killed [[FCVTSHr3]], implicit $fpcr
180
+ ; CHECK-CVT-NEXT: [[FCVTHSr1:%[0-9]+]]:fpr16 = ninf nofpexcept FCVTHSr killed [[FADDSrr1]], implicit $fpcr
181
+ ; CHECK-CVT-NEXT: $h0 = COPY [[FCVTHSr1]]
182
+ ; CHECK-CVT-NEXT: RET_ReallyLR implicit $h0
183
+ ;
184
+ ; CHECK-FP16-LABEL: name: ninf_fadd_sequence
185
+ ; CHECK-FP16: bb.0.entry:
186
+ ; CHECK-FP16-NEXT: liveins: $h0, $h1, $h2
187
+ ; CHECK-FP16-NEXT: {{ $}}
188
+ ; CHECK-FP16-NEXT: [[COPY:%[0-9]+]]:fpr16 = COPY $h2
189
+ ; CHECK-FP16-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY $h1
190
+ ; CHECK-FP16-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0
191
+ ; CHECK-FP16-NEXT: [[FADDHrr:%[0-9]+]]:fpr16 = ninf nofpexcept FADDHrr [[COPY2]], [[COPY1]], implicit $fpcr
192
+ ; CHECK-FP16-NEXT: [[FADDHrr1:%[0-9]+]]:fpr16 = ninf nofpexcept FADDHrr killed [[FADDHrr]], [[COPY]], implicit $fpcr
193
+ ; CHECK-FP16-NEXT: $h0 = COPY [[FADDHrr1]]
194
+ ; CHECK-FP16-NEXT: RET_ReallyLR implicit $h0
195
+ entry:
196
+ %add1 = fadd ninf half %x , %y
197
+ %add2 = fadd ninf half %add1 , %z
198
+ ret half %add2
199
+ }
0 commit comments