@@ -2096,6 +2096,190 @@ entry:
2096
2096
ret <8 x double > %call
2097
2097
}
2098
2098
2099
+ define float @constant_fold_f32 () {
2100
+ ; FMA32-LABEL: constant_fold_f32:
2101
+ ; FMA32: ## %bb.0:
2102
+ ; FMA32-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} ## encoding: [0xd9,0x05,A,A,A,A]
2103
+ ; FMA32-NEXT: ## fixup A - offset: 2, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2104
+ ; FMA32-NEXT: retl ## encoding: [0xc3]
2105
+ ;
2106
+ ; FMACALL32-LABEL: constant_fold_f32:
2107
+ ; FMACALL32: ## %bb.0:
2108
+ ; FMACALL32-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} ## encoding: [0xd9,0x05,A,A,A,A]
2109
+ ; FMACALL32-NEXT: ## fixup A - offset: 2, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2110
+ ; FMACALL32-NEXT: retl ## encoding: [0xc3]
2111
+ ;
2112
+ ; FMA64-LABEL: constant_fold_f32:
2113
+ ; FMA64: ## %bb.0:
2114
+ ; FMA64-NEXT: vmovss {{.*#+}} xmm0 = [1.02E+3,0.0E+0,0.0E+0,0.0E+0]
2115
+ ; FMA64-NEXT: ## encoding: [0xc5,0xfa,0x10,0x05,A,A,A,A]
2116
+ ; FMA64-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2117
+ ; FMA64-NEXT: retq ## encoding: [0xc3]
2118
+ ;
2119
+ ; FMACALL64-LABEL: constant_fold_f32:
2120
+ ; FMACALL64: ## %bb.0:
2121
+ ; FMACALL64-NEXT: movss {{.*#+}} xmm0 = [1.02E+3,0.0E+0,0.0E+0,0.0E+0]
2122
+ ; FMACALL64-NEXT: ## encoding: [0xf3,0x0f,0x10,0x05,A,A,A,A]
2123
+ ; FMACALL64-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2124
+ ; FMACALL64-NEXT: retq ## encoding: [0xc3]
2125
+ ;
2126
+ ; AVX512-LABEL: constant_fold_f32:
2127
+ ; AVX512: ## %bb.0:
2128
+ ; AVX512-NEXT: vmovss {{.*#+}} xmm0 = [1.02E+3,0.0E+0,0.0E+0,0.0E+0]
2129
+ ; AVX512-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x05,A,A,A,A]
2130
+ ; AVX512-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2131
+ ; AVX512-NEXT: retq ## encoding: [0xc3]
2132
+ ;
2133
+ ; AVX512VL-LABEL: constant_fold_f32:
2134
+ ; AVX512VL: ## %bb.0:
2135
+ ; AVX512VL-NEXT: vmovss {{.*#+}} xmm0 = [1.02E+3,0.0E+0,0.0E+0,0.0E+0]
2136
+ ; AVX512VL-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x05,A,A,A,A]
2137
+ ; AVX512VL-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2138
+ ; AVX512VL-NEXT: retq ## encoding: [0xc3]
2139
+ %r = call float @llvm.fma.f32 (float 5 .000000e+01 , float 2 .000000e+01 , float 2 .000000e+01 )
2140
+ ret float %r
2141
+ }
2142
+
2143
+ define <4 x float > @constant_fold_v4f32 () {
2144
+ ; FMA32-LABEL: constant_fold_v4f32:
2145
+ ; FMA32: ## %bb.0:
2146
+ ; FMA32-NEXT: vmovaps {{.*#+}} xmm1 = [0.0E+0,1.0E+1,2.0E+1,3.0E+1]
2147
+ ; FMA32-NEXT: ## encoding: [0xc5,0xf8,0x28,0x0d,A,A,A,A]
2148
+ ; FMA32-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2149
+ ; FMA32-NEXT: vmovaps {{.*#+}} xmm0 = [4.0E+1,5.0E+1,6.0E+1,7.0E+1]
2150
+ ; FMA32-NEXT: ## encoding: [0xc5,0xf8,0x28,0x05,A,A,A,A]
2151
+ ; FMA32-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2152
+ ; FMA32-NEXT: vfmadd213ps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0x71,0xa8,0x05,A,A,A,A]
2153
+ ; FMA32-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2154
+ ; FMA32-NEXT: ## xmm0 = (xmm1 * xmm0) + mem
2155
+ ; FMA32-NEXT: retl ## encoding: [0xc3]
2156
+ ;
2157
+ ; FMACALL32-LABEL: constant_fold_v4f32:
2158
+ ; FMACALL32: ## %bb.0:
2159
+ ; FMACALL32-NEXT: vmovaps {{.*#+}} xmm0 = [0.0E+0,4.9E+2,1.18E+3,2.07E+3]
2160
+ ; FMACALL32-NEXT: ## encoding: [0xc5,0xf8,0x28,0x05,A,A,A,A]
2161
+ ; FMACALL32-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2162
+ ; FMACALL32-NEXT: retl ## encoding: [0xc3]
2163
+ ;
2164
+ ; FMA64-LABEL: constant_fold_v4f32:
2165
+ ; FMA64: ## %bb.0:
2166
+ ; FMA64-NEXT: vmovaps {{.*#+}} xmm1 = [0.0E+0,1.0E+1,2.0E+1,3.0E+1]
2167
+ ; FMA64-NEXT: ## encoding: [0xc5,0xf8,0x28,0x0d,A,A,A,A]
2168
+ ; FMA64-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2169
+ ; FMA64-NEXT: vmovaps {{.*#+}} xmm0 = [4.0E+1,5.0E+1,6.0E+1,7.0E+1]
2170
+ ; FMA64-NEXT: ## encoding: [0xc5,0xf8,0x28,0x05,A,A,A,A]
2171
+ ; FMA64-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2172
+ ; FMA64-NEXT: vfmadd213ps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0x71,0xa8,0x05,A,A,A,A]
2173
+ ; FMA64-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2174
+ ; FMA64-NEXT: ## xmm0 = (xmm1 * xmm0) + mem
2175
+ ; FMA64-NEXT: retq ## encoding: [0xc3]
2176
+ ;
2177
+ ; FMACALL64-LABEL: constant_fold_v4f32:
2178
+ ; FMACALL64: ## %bb.0:
2179
+ ; FMACALL64-NEXT: movaps {{.*#+}} xmm0 = [0.0E+0,4.9E+2,1.18E+3,2.07E+3]
2180
+ ; FMACALL64-NEXT: ## encoding: [0x0f,0x28,0x05,A,A,A,A]
2181
+ ; FMACALL64-NEXT: ## fixup A - offset: 3, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2182
+ ; FMACALL64-NEXT: retq ## encoding: [0xc3]
2183
+ ;
2184
+ ; AVX512-LABEL: constant_fold_v4f32:
2185
+ ; AVX512: ## %bb.0:
2186
+ ; AVX512-NEXT: vmovaps {{.*#+}} xmm1 = [0.0E+0,1.0E+1,2.0E+1,3.0E+1]
2187
+ ; AVX512-NEXT: ## encoding: [0xc5,0xf8,0x28,0x0d,A,A,A,A]
2188
+ ; AVX512-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2189
+ ; AVX512-NEXT: vmovaps {{.*#+}} xmm0 = [4.0E+1,5.0E+1,6.0E+1,7.0E+1]
2190
+ ; AVX512-NEXT: ## encoding: [0xc5,0xf8,0x28,0x05,A,A,A,A]
2191
+ ; AVX512-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2192
+ ; AVX512-NEXT: vfmadd213ps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0x71,0xa8,0x05,A,A,A,A]
2193
+ ; AVX512-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2194
+ ; AVX512-NEXT: ## xmm0 = (xmm1 * xmm0) + mem
2195
+ ; AVX512-NEXT: retq ## encoding: [0xc3]
2196
+ ;
2197
+ ; AVX512VL-LABEL: constant_fold_v4f32:
2198
+ ; AVX512VL: ## %bb.0:
2199
+ ; AVX512VL-NEXT: vmovaps {{.*#+}} xmm1 = [0.0E+0,1.0E+1,2.0E+1,3.0E+1]
2200
+ ; AVX512VL-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x0d,A,A,A,A]
2201
+ ; AVX512VL-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2202
+ ; AVX512VL-NEXT: vmovaps {{.*#+}} xmm0 = [4.0E+1,5.0E+1,6.0E+1,7.0E+1]
2203
+ ; AVX512VL-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x05,A,A,A,A]
2204
+ ; AVX512VL-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2205
+ ; AVX512VL-NEXT: vfmadd213ps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa8,0x05,A,A,A,A]
2206
+ ; AVX512VL-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2207
+ ; AVX512VL-NEXT: ## xmm0 = (xmm1 * xmm0) + mem
2208
+ ; AVX512VL-NEXT: retq ## encoding: [0xc3]
2209
+ %r = call <4 x float > @llvm.fma.v4f32 (<4 x float > <float 0 .000000e+01 , float 1 .000000e+01 , float 2 .000000e+01 , float 3 .000000e+01 >, <4 x float > <float 4 .000000e+01 , float 5 .000000e+01 , float 6 .000000e+01 , float 7 .000000e+01 >, <4 x float > <float 0 .000000e+01 , float -1 .000000e+01 , float -2 .000000e+01 , float -3 .000000e+01 >)
2210
+ ret <4 x float > %r
2211
+ }
2212
+
2213
+ define <2 x double > @constant_fold_v2f64 () {
2214
+ ; FMA32-LABEL: constant_fold_v2f64:
2215
+ ; FMA32: ## %bb.0:
2216
+ ; FMA32-NEXT: vmovapd {{.*#+}} xmm1 = [1.0E+1,2.0E+1]
2217
+ ; FMA32-NEXT: ## encoding: [0xc5,0xf9,0x28,0x0d,A,A,A,A]
2218
+ ; FMA32-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2219
+ ; FMA32-NEXT: vmovsd {{.*#+}} xmm0 = [1.0E+1,0.0E+0]
2220
+ ; FMA32-NEXT: ## encoding: [0xc5,0xfb,0x10,0x05,A,A,A,A]
2221
+ ; FMA32-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2222
+ ; FMA32-NEXT: vfmadd231pd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0xf1,0xb8,0x05,A,A,A,A]
2223
+ ; FMA32-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2224
+ ; FMA32-NEXT: ## xmm0 = (xmm1 * mem) + xmm0
2225
+ ; FMA32-NEXT: retl ## encoding: [0xc3]
2226
+ ;
2227
+ ; FMACALL32-LABEL: constant_fold_v2f64:
2228
+ ; FMACALL32: ## %bb.0:
2229
+ ; FMACALL32-NEXT: vmovaps {{.*#+}} xmm0 = [4.1E+2,1.4E+3]
2230
+ ; FMACALL32-NEXT: ## encoding: [0xc5,0xf8,0x28,0x05,A,A,A,A]
2231
+ ; FMACALL32-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_4
2232
+ ; FMACALL32-NEXT: retl ## encoding: [0xc3]
2233
+ ;
2234
+ ; FMA64-LABEL: constant_fold_v2f64:
2235
+ ; FMA64: ## %bb.0:
2236
+ ; FMA64-NEXT: vmovapd {{.*#+}} xmm1 = [1.0E+1,2.0E+1]
2237
+ ; FMA64-NEXT: ## encoding: [0xc5,0xf9,0x28,0x0d,A,A,A,A]
2238
+ ; FMA64-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2239
+ ; FMA64-NEXT: vmovsd {{.*#+}} xmm0 = [1.0E+1,0.0E+0]
2240
+ ; FMA64-NEXT: ## encoding: [0xc5,0xfb,0x10,0x05,A,A,A,A]
2241
+ ; FMA64-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2242
+ ; FMA64-NEXT: vfmadd231pd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0xf1,0xb8,0x05,A,A,A,A]
2243
+ ; FMA64-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2244
+ ; FMA64-NEXT: ## xmm0 = (xmm1 * mem) + xmm0
2245
+ ; FMA64-NEXT: retq ## encoding: [0xc3]
2246
+ ;
2247
+ ; FMACALL64-LABEL: constant_fold_v2f64:
2248
+ ; FMACALL64: ## %bb.0:
2249
+ ; FMACALL64-NEXT: movaps {{.*#+}} xmm0 = [4.1E+2,1.4E+3]
2250
+ ; FMACALL64-NEXT: ## encoding: [0x0f,0x28,0x05,A,A,A,A]
2251
+ ; FMACALL64-NEXT: ## fixup A - offset: 3, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2252
+ ; FMACALL64-NEXT: retq ## encoding: [0xc3]
2253
+ ;
2254
+ ; AVX512-LABEL: constant_fold_v2f64:
2255
+ ; AVX512: ## %bb.0:
2256
+ ; AVX512-NEXT: vmovapd {{.*#+}} xmm1 = [1.0E+1,2.0E+1]
2257
+ ; AVX512-NEXT: ## encoding: [0xc5,0xf9,0x28,0x0d,A,A,A,A]
2258
+ ; AVX512-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2259
+ ; AVX512-NEXT: vmovsd {{.*#+}} xmm0 = [1.0E+1,0.0E+0]
2260
+ ; AVX512-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xfb,0x10,0x05,A,A,A,A]
2261
+ ; AVX512-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2262
+ ; AVX512-NEXT: vfmadd231pd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0xf1,0xb8,0x05,A,A,A,A]
2263
+ ; AVX512-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2264
+ ; AVX512-NEXT: ## xmm0 = (xmm1 * mem) + xmm0
2265
+ ; AVX512-NEXT: retq ## encoding: [0xc3]
2266
+ ;
2267
+ ; AVX512VL-LABEL: constant_fold_v2f64:
2268
+ ; AVX512VL: ## %bb.0:
2269
+ ; AVX512VL-NEXT: vmovapd {{.*#+}} xmm1 = [1.0E+1,2.0E+1]
2270
+ ; AVX512VL-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0x0d,A,A,A,A]
2271
+ ; AVX512VL-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2272
+ ; AVX512VL-NEXT: vmovsd {{.*#+}} xmm0 = [1.0E+1,0.0E+0]
2273
+ ; AVX512VL-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xfb,0x10,0x05,A,A,A,A]
2274
+ ; AVX512VL-NEXT: ## fixup A - offset: 4, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2275
+ ; AVX512VL-NEXT: vfmadd231pd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xb8,0x05,A,A,A,A]
2276
+ ; AVX512VL-NEXT: ## fixup A - offset: 5, value: {{\.?LCPI[0-9]+_[0-9]+}}-4, kind: reloc_riprel_4byte
2277
+ ; AVX512VL-NEXT: ## xmm0 = (xmm1 * mem) + xmm0
2278
+ ; AVX512VL-NEXT: retq ## encoding: [0xc3]
2279
+ %r = call <2 x double > @llvm.fma.v2f64 (<2 x double > <double 1 .000000e+01 , double 2 .000000e+01 >, <2 x double > <double 4 .000000e+01 , double 7 .000000e+01 >, <2 x double > <double 1 .000000e+01 , double 0 .000000e+01 >)
2280
+ ret <2 x double > %r
2281
+ }
2282
+
2099
2283
declare float @llvm.fma.f32 (float , float , float )
2100
2284
declare double @llvm.fma.f64 (double , double , double )
2101
2285
declare x86_fp80 @llvm.fma.f80 (x86_fp80 , x86_fp80 , x86_fp80 )
0 commit comments