Skip to content

Commit d57d7bc

Browse files
committed
[X86] Support ATOMIC_LOAD_FP_BINOP_MI for other binops
Since we can bitcast and then do the same thing sub does in the table section above, I figured it was trivial to add fsub, fmul, and fdiv.
1 parent 7899d08 commit d57d7bc

File tree

2 files changed

+72
-88
lines changed

2 files changed

+72
-88
lines changed

llvm/lib/Target/X86/X86InstrCompiler.td

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1125,7 +1125,9 @@ multiclass ATOMIC_LOAD_FP_BINOP_MI<string Name, SDNode op> {
11251125
Requires<[HasAVX512]>;
11261126
}
11271127
defm : ATOMIC_LOAD_FP_BINOP_MI<"ADD", fadd>;
1128-
// FIXME: Add fsub, fmul, fdiv, ...
1128+
defm : ATOMIC_LOAD_FP_BINOP_MI<"SUB", fsub>;
1129+
defm : ATOMIC_LOAD_FP_BINOP_MI<"MUL", fmul>;
1130+
defm : ATOMIC_LOAD_FP_BINOP_MI<"DIV", fdiv>;
11291131

11301132
multiclass RELEASE_UNOP<string Name, dag dag8, dag dag16, dag dag32,
11311133
dag dag64> {

llvm/test/CodeGen/X86/atomic-fp.ll

Lines changed: 69 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,36 +1311,32 @@ define dso_local void @fsub_32stack() nounwind {
13111311
; X86-SSE2-LABEL: fsub_32stack:
13121312
; X86-SSE2: # %bb.0:
13131313
; X86-SSE2-NEXT: pushl %eax
1314-
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1315-
; X86-SSE2-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1316-
; X86-SSE2-NEXT: subss %xmm0, %xmm1
1317-
; X86-SSE2-NEXT: movss %xmm1, (%esp)
1314+
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1315+
; X86-SSE2-NEXT: subss (%esp), %xmm0
1316+
; X86-SSE2-NEXT: movss %xmm0, (%esp)
13181317
; X86-SSE2-NEXT: popl %eax
13191318
; X86-SSE2-NEXT: retl
13201319
;
13211320
; X86-AVX-LABEL: fsub_32stack:
13221321
; X86-AVX: # %bb.0:
13231322
; X86-AVX-NEXT: pushl %eax
1324-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1325-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1326-
; X86-AVX-NEXT: vsubss %xmm0, %xmm1, %xmm0
1323+
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1324+
; X86-AVX-NEXT: vsubss (%esp), %xmm0, %xmm0
13271325
; X86-AVX-NEXT: vmovss %xmm0, (%esp)
13281326
; X86-AVX-NEXT: popl %eax
13291327
; X86-AVX-NEXT: retl
13301328
;
13311329
; X64-SSE-LABEL: fsub_32stack:
13321330
; X64-SSE: # %bb.0:
1333-
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1334-
; X64-SSE-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1335-
; X64-SSE-NEXT: subss %xmm0, %xmm1
1336-
; X64-SSE-NEXT: movss %xmm1, -{{[0-9]+}}(%rsp)
1331+
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1332+
; X64-SSE-NEXT: subss -{{[0-9]+}}(%rsp), %xmm0
1333+
; X64-SSE-NEXT: movss %xmm0, -{{[0-9]+}}(%rsp)
13371334
; X64-SSE-NEXT: retq
13381335
;
13391336
; X64-AVX-LABEL: fsub_32stack:
13401337
; X64-AVX: # %bb.0:
1341-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1342-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1343-
; X64-AVX-NEXT: vsubss %xmm0, %xmm1, %xmm0
1338+
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
1339+
; X64-AVX-NEXT: vsubss -{{[0-9]+}}(%rsp), %xmm0, %xmm0
13441340
; X64-AVX-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp)
13451341
; X64-AVX-NEXT: retq
13461342
%ptr = alloca i32, align 4
@@ -1433,17 +1429,15 @@ define dso_local void @fsub_64stack() nounwind {
14331429
;
14341430
; X64-SSE-LABEL: fsub_64stack:
14351431
; X64-SSE: # %bb.0:
1436-
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
1437-
; X64-SSE-NEXT: movsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]
1438-
; X64-SSE-NEXT: subsd %xmm0, %xmm1
1439-
; X64-SSE-NEXT: movsd %xmm1, -{{[0-9]+}}(%rsp)
1432+
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]
1433+
; X64-SSE-NEXT: subsd -{{[0-9]+}}(%rsp), %xmm0
1434+
; X64-SSE-NEXT: movsd %xmm0, -{{[0-9]+}}(%rsp)
14401435
; X64-SSE-NEXT: retq
14411436
;
14421437
; X64-AVX-LABEL: fsub_64stack:
14431438
; X64-AVX: # %bb.0:
1444-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
1445-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]
1446-
; X64-AVX-NEXT: vsubsd %xmm0, %xmm1, %xmm0
1439+
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]
1440+
; X64-AVX-NEXT: vsubsd -{{[0-9]+}}(%rsp), %xmm0, %xmm0
14471441
; X64-AVX-NEXT: vmovsd %xmm0, -{{[0-9]+}}(%rsp)
14481442
; X64-AVX-NEXT: retq
14491443
%ptr = alloca i64, align 8
@@ -1600,29 +1594,27 @@ define dso_local void @fmul_32r(ptr %loc, float %val) nounwind {
16001594
; X86-SSE2: # %bb.0:
16011595
; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
16021596
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1603-
; X86-SSE2-NEXT: mulss {{[0-9]+}}(%esp), %xmm0
1597+
; X86-SSE2-NEXT: mulss (%eax), %xmm0
16041598
; X86-SSE2-NEXT: movss %xmm0, (%eax)
16051599
; X86-SSE2-NEXT: retl
16061600
;
16071601
; X86-AVX-LABEL: fmul_32r:
16081602
; X86-AVX: # %bb.0:
16091603
; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax
16101604
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1611-
; X86-AVX-NEXT: vmulss {{[0-9]+}}(%esp), %xmm0, %xmm0
1605+
; X86-AVX-NEXT: vmulss (%eax), %xmm0, %xmm0
16121606
; X86-AVX-NEXT: vmovss %xmm0, (%eax)
16131607
; X86-AVX-NEXT: retl
16141608
;
16151609
; X64-SSE-LABEL: fmul_32r:
16161610
; X64-SSE: # %bb.0:
1617-
; X64-SSE-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1618-
; X64-SSE-NEXT: mulss %xmm0, %xmm1
1619-
; X64-SSE-NEXT: movss %xmm1, (%rdi)
1611+
; X64-SSE-NEXT: mulss (%rdi), %xmm0
1612+
; X64-SSE-NEXT: movss %xmm0, (%rdi)
16201613
; X64-SSE-NEXT: retq
16211614
;
16221615
; X64-AVX-LABEL: fmul_32r:
16231616
; X64-AVX: # %bb.0:
1624-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1625-
; X64-AVX-NEXT: vmulss %xmm0, %xmm1, %xmm0
1617+
; X64-AVX-NEXT: vmulss (%rdi), %xmm0, %xmm0
16261618
; X64-AVX-NEXT: vmovss %xmm0, (%rdi)
16271619
; X64-AVX-NEXT: retq
16281620
%1 = load atomic i32, ptr %loc seq_cst, align 4
@@ -1716,15 +1708,13 @@ define dso_local void @fmul_64r(ptr %loc, double %val) nounwind {
17161708
;
17171709
; X64-SSE-LABEL: fmul_64r:
17181710
; X64-SSE: # %bb.0:
1719-
; X64-SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
1720-
; X64-SSE-NEXT: mulsd %xmm0, %xmm1
1721-
; X64-SSE-NEXT: movsd %xmm1, (%rdi)
1711+
; X64-SSE-NEXT: mulsd (%rdi), %xmm0
1712+
; X64-SSE-NEXT: movsd %xmm0, (%rdi)
17221713
; X64-SSE-NEXT: retq
17231714
;
17241715
; X64-AVX-LABEL: fmul_64r:
17251716
; X64-AVX: # %bb.0:
1726-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
1727-
; X64-AVX-NEXT: vmulsd %xmm0, %xmm1, %xmm0
1717+
; X64-AVX-NEXT: vmulsd (%rdi), %xmm0, %xmm0
17281718
; X64-AVX-NEXT: vmovsd %xmm0, (%rdi)
17291719
; X64-AVX-NEXT: retq
17301720
%1 = load atomic i64, ptr %loc seq_cst, align 8
@@ -1765,29 +1755,29 @@ define dso_local void @fmul_32g() nounwind {
17651755
;
17661756
; X86-SSE2-LABEL: fmul_32g:
17671757
; X86-SSE2: # %bb.0:
1768-
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1769-
; X86-SSE2-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1758+
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1759+
; X86-SSE2-NEXT: mulss glob32, %xmm0
17701760
; X86-SSE2-NEXT: movss %xmm0, glob32
17711761
; X86-SSE2-NEXT: retl
17721762
;
17731763
; X86-AVX-LABEL: fmul_32g:
17741764
; X86-AVX: # %bb.0:
1775-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1776-
; X86-AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
1765+
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1766+
; X86-AVX-NEXT: vmulss glob32, %xmm0, %xmm0
17771767
; X86-AVX-NEXT: vmovss %xmm0, glob32
17781768
; X86-AVX-NEXT: retl
17791769
;
17801770
; X64-SSE-LABEL: fmul_32g:
17811771
; X64-SSE: # %bb.0:
1782-
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1783-
; X64-SSE-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1772+
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1773+
; X64-SSE-NEXT: mulss glob32(%rip), %xmm0
17841774
; X64-SSE-NEXT: movss %xmm0, glob32(%rip)
17851775
; X64-SSE-NEXT: retq
17861776
;
17871777
; X64-AVX-LABEL: fmul_32g:
17881778
; X64-AVX: # %bb.0:
1789-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1790-
; X64-AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1779+
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1780+
; X64-AVX-NEXT: vmulss glob32(%rip), %xmm0, %xmm0
17911781
; X64-AVX-NEXT: vmovss %xmm0, glob32(%rip)
17921782
; X64-AVX-NEXT: retq
17931783
%i = load atomic i32, ptr @glob32 monotonic, align 4
@@ -1885,31 +1875,31 @@ define dso_local void @fmul_32imm() nounwind {
18851875
;
18861876
; X86-SSE2-LABEL: fmul_32imm:
18871877
; X86-SSE2: # %bb.0:
1888-
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1889-
; X86-SSE2-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1878+
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1879+
; X86-SSE2-NEXT: mulss -559038737, %xmm0
18901880
; X86-SSE2-NEXT: movss %xmm0, -559038737
18911881
; X86-SSE2-NEXT: retl
18921882
;
18931883
; X86-AVX-LABEL: fmul_32imm:
18941884
; X86-AVX: # %bb.0:
1895-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1896-
; X86-AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
1885+
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1886+
; X86-AVX-NEXT: vmulss -559038737, %xmm0, %xmm0
18971887
; X86-AVX-NEXT: vmovss %xmm0, -559038737
18981888
; X86-AVX-NEXT: retl
18991889
;
19001890
; X64-SSE-LABEL: fmul_32imm:
19011891
; X64-SSE: # %bb.0:
19021892
; X64-SSE-NEXT: movl $3735928559, %eax # imm = 0xDEADBEEF
1903-
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1904-
; X64-SSE-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1893+
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1894+
; X64-SSE-NEXT: mulss (%rax), %xmm0
19051895
; X64-SSE-NEXT: movss %xmm0, (%rax)
19061896
; X64-SSE-NEXT: retq
19071897
;
19081898
; X64-AVX-LABEL: fmul_32imm:
19091899
; X64-AVX: # %bb.0:
19101900
; X64-AVX-NEXT: movl $3735928559, %eax # imm = 0xDEADBEEF
1911-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1912-
; X64-AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1901+
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
1902+
; X64-AVX-NEXT: vmulss (%rax), %xmm0, %xmm0
19131903
; X64-AVX-NEXT: vmovss %xmm0, (%rax)
19141904
; X64-AVX-NEXT: retq
19151905
%i = load atomic i32, ptr inttoptr (i32 3735928559 to ptr) monotonic, align 4
@@ -2010,32 +2000,32 @@ define dso_local void @fmul_32stack() nounwind {
20102000
; X86-SSE2-LABEL: fmul_32stack:
20112001
; X86-SSE2: # %bb.0:
20122002
; X86-SSE2-NEXT: pushl %eax
2013-
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2014-
; X86-SSE2-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2003+
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
2004+
; X86-SSE2-NEXT: mulss (%esp), %xmm0
20152005
; X86-SSE2-NEXT: movss %xmm0, (%esp)
20162006
; X86-SSE2-NEXT: popl %eax
20172007
; X86-SSE2-NEXT: retl
20182008
;
20192009
; X86-AVX-LABEL: fmul_32stack:
20202010
; X86-AVX: # %bb.0:
20212011
; X86-AVX-NEXT: pushl %eax
2022-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2023-
; X86-AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
2012+
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
2013+
; X86-AVX-NEXT: vmulss (%esp), %xmm0, %xmm0
20242014
; X86-AVX-NEXT: vmovss %xmm0, (%esp)
20252015
; X86-AVX-NEXT: popl %eax
20262016
; X86-AVX-NEXT: retl
20272017
;
20282018
; X64-SSE-LABEL: fmul_32stack:
20292019
; X64-SSE: # %bb.0:
2030-
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2031-
; X64-SSE-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2020+
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
2021+
; X64-SSE-NEXT: mulss -{{[0-9]+}}(%rsp), %xmm0
20322022
; X64-SSE-NEXT: movss %xmm0, -{{[0-9]+}}(%rsp)
20332023
; X64-SSE-NEXT: retq
20342024
;
20352025
; X64-AVX-LABEL: fmul_32stack:
20362026
; X64-AVX: # %bb.0:
2037-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2038-
; X64-AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2027+
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = [3.14159012E+0,0.0E+0,0.0E+0,0.0E+0]
2028+
; X64-AVX-NEXT: vmulss -{{[0-9]+}}(%rsp), %xmm0, %xmm0
20392029
; X64-AVX-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp)
20402030
; X64-AVX-NEXT: retq
20412031
%ptr = alloca i32, align 4
@@ -2126,15 +2116,15 @@ define dso_local void @fmul_64stack() nounwind {
21262116
;
21272117
; X64-SSE-LABEL: fmul_64stack:
21282118
; X64-SSE: # %bb.0:
2129-
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
2130-
; X64-SSE-NEXT: mulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2119+
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = [3.1415901184082031E+0,0.0E+0]
2120+
; X64-SSE-NEXT: mulsd -{{[0-9]+}}(%rsp), %xmm0
21312121
; X64-SSE-NEXT: movsd %xmm0, -{{[0-9]+}}(%rsp)
21322122
; X64-SSE-NEXT: retq
21332123
;
21342124
; X64-AVX-LABEL: fmul_64stack:
21352125
; X64-AVX: # %bb.0:
2136-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
2137-
; X64-AVX-NEXT: vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2126+
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = [3.1415901184082031E+0,0.0E+0]
2127+
; X64-AVX-NEXT: vmulsd -{{[0-9]+}}(%rsp), %xmm0, %xmm0
21382128
; X64-AVX-NEXT: vmovsd %xmm0, -{{[0-9]+}}(%rsp)
21392129
; X64-AVX-NEXT: retq
21402130
%ptr = alloca i64, align 8
@@ -2235,15 +2225,13 @@ define dso_local void @fmul_array(ptr %arg, double %arg1, i64 %arg2) nounwind {
22352225
;
22362226
; X64-SSE-LABEL: fmul_array:
22372227
; X64-SSE: # %bb.0: # %bb
2238-
; X64-SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
2239-
; X64-SSE-NEXT: mulsd %xmm0, %xmm1
2240-
; X64-SSE-NEXT: movsd %xmm1, (%rdi,%rsi,8)
2228+
; X64-SSE-NEXT: mulsd (%rdi,%rsi,8), %xmm0
2229+
; X64-SSE-NEXT: movsd %xmm0, (%rdi,%rsi,8)
22412230
; X64-SSE-NEXT: retq
22422231
;
22432232
; X64-AVX-LABEL: fmul_array:
22442233
; X64-AVX: # %bb.0: # %bb
2245-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
2246-
; X64-AVX-NEXT: vmulsd %xmm0, %xmm1, %xmm0
2234+
; X64-AVX-NEXT: vmulsd (%rdi,%rsi,8), %xmm0, %xmm0
22472235
; X64-AVX-NEXT: vmovsd %xmm0, (%rdi,%rsi,8)
22482236
; X64-AVX-NEXT: retq
22492237
bb:
@@ -2701,36 +2689,32 @@ define dso_local void @fdiv_32stack() nounwind {
27012689
; X86-SSE2-LABEL: fdiv_32stack:
27022690
; X86-SSE2: # %bb.0:
27032691
; X86-SSE2-NEXT: pushl %eax
2704-
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2705-
; X86-SSE2-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2706-
; X86-SSE2-NEXT: divss %xmm0, %xmm1
2707-
; X86-SSE2-NEXT: movss %xmm1, (%esp)
2692+
; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2693+
; X86-SSE2-NEXT: divss (%esp), %xmm0
2694+
; X86-SSE2-NEXT: movss %xmm0, (%esp)
27082695
; X86-SSE2-NEXT: popl %eax
27092696
; X86-SSE2-NEXT: retl
27102697
;
27112698
; X86-AVX-LABEL: fdiv_32stack:
27122699
; X86-AVX: # %bb.0:
27132700
; X86-AVX-NEXT: pushl %eax
2714-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2715-
; X86-AVX-NEXT: vmovss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2716-
; X86-AVX-NEXT: vdivss %xmm0, %xmm1, %xmm0
2701+
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2702+
; X86-AVX-NEXT: vdivss (%esp), %xmm0, %xmm0
27172703
; X86-AVX-NEXT: vmovss %xmm0, (%esp)
27182704
; X86-AVX-NEXT: popl %eax
27192705
; X86-AVX-NEXT: retl
27202706
;
27212707
; X64-SSE-LABEL: fdiv_32stack:
27222708
; X64-SSE: # %bb.0:
2723-
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2724-
; X64-SSE-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2725-
; X64-SSE-NEXT: divss %xmm0, %xmm1
2726-
; X64-SSE-NEXT: movss %xmm1, -{{[0-9]+}}(%rsp)
2709+
; X64-SSE-NEXT: movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2710+
; X64-SSE-NEXT: divss -{{[0-9]+}}(%rsp), %xmm0
2711+
; X64-SSE-NEXT: movss %xmm0, -{{[0-9]+}}(%rsp)
27272712
; X64-SSE-NEXT: retq
27282713
;
27292714
; X64-AVX-LABEL: fdiv_32stack:
27302715
; X64-AVX: # %bb.0:
2731-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2732-
; X64-AVX-NEXT: vmovss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2733-
; X64-AVX-NEXT: vdivss %xmm0, %xmm1, %xmm0
2716+
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
2717+
; X64-AVX-NEXT: vdivss -{{[0-9]+}}(%rsp), %xmm0, %xmm0
27342718
; X64-AVX-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp)
27352719
; X64-AVX-NEXT: retq
27362720
%ptr = alloca i32, align 4
@@ -2823,17 +2807,15 @@ define dso_local void @fdiv_64stack() nounwind {
28232807
;
28242808
; X64-SSE-LABEL: fdiv_64stack:
28252809
; X64-SSE: # %bb.0:
2826-
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
2827-
; X64-SSE-NEXT: movsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]
2828-
; X64-SSE-NEXT: divsd %xmm0, %xmm1
2829-
; X64-SSE-NEXT: movsd %xmm1, -{{[0-9]+}}(%rsp)
2810+
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]
2811+
; X64-SSE-NEXT: divsd -{{[0-9]+}}(%rsp), %xmm0
2812+
; X64-SSE-NEXT: movsd %xmm0, -{{[0-9]+}}(%rsp)
28302813
; X64-SSE-NEXT: retq
28312814
;
28322815
; X64-AVX-LABEL: fdiv_64stack:
28332816
; X64-AVX: # %bb.0:
2834-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
2835-
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]
2836-
; X64-AVX-NEXT: vdivsd %xmm0, %xmm1, %xmm0
2817+
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]
2818+
; X64-AVX-NEXT: vdivsd -{{[0-9]+}}(%rsp), %xmm0, %xmm0
28372819
; X64-AVX-NEXT: vmovsd %xmm0, -{{[0-9]+}}(%rsp)
28382820
; X64-AVX-NEXT: retq
28392821
%ptr = alloca i64, align 8

0 commit comments

Comments
 (0)