@@ -41,25 +41,31 @@ define void @fadd_32r(float* %loc, float %val) nounwind {
41
41
;
42
42
; X86-SSE2-LABEL: fadd_32r:
43
43
; X86-SSE2: # %bb.0:
44
- ; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
45
44
; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
45
+ ; X86-SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
46
46
; X86-SSE2-NEXT: addss (%eax), %xmm0
47
47
; X86-SSE2-NEXT: movss %xmm0, (%eax)
48
48
; X86-SSE2-NEXT: retl
49
49
;
50
50
; X86-AVX-LABEL: fadd_32r:
51
51
; X86-AVX: # %bb.0:
52
- ; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
53
52
; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax
54
- ; X86-AVX-NEXT: addss (%eax), %xmm0
55
- ; X86-AVX-NEXT: movss %xmm0, (%eax)
53
+ ; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
54
+ ; X86-AVX-NEXT: vaddss (%eax), %xmm0, %xmm0
55
+ ; X86-AVX-NEXT: vmovss %xmm0, (%eax)
56
56
; X86-AVX-NEXT: retl
57
57
;
58
- ; X64-LABEL: fadd_32r:
59
- ; X64: # %bb.0:
60
- ; X64-NEXT: addss (%rdi), %xmm0
61
- ; X64-NEXT: movss %xmm0, (%rdi)
62
- ; X64-NEXT: retq
58
+ ; X64-SSE-LABEL: fadd_32r:
59
+ ; X64-SSE: # %bb.0:
60
+ ; X64-SSE-NEXT: addss (%rdi), %xmm0
61
+ ; X64-SSE-NEXT: movss %xmm0, (%rdi)
62
+ ; X64-SSE-NEXT: retq
63
+ ;
64
+ ; X64-AVX-LABEL: fadd_32r:
65
+ ; X64-AVX: # %bb.0:
66
+ ; X64-AVX-NEXT: vaddss (%rdi), %xmm0, %xmm0
67
+ ; X64-AVX-NEXT: vmovss %xmm0, (%rdi)
68
+ ; X64-AVX-NEXT: retq
63
69
%floc = bitcast float * %loc to i32*
64
70
%1 = load atomic i32 , i32* %floc seq_cst , align 4
65
71
%2 = bitcast i32 %1 to float
@@ -194,11 +200,17 @@ define void @fadd_64r(double* %loc, double %val) nounwind {
194
200
; X86-AVX-NEXT: popl %ebp
195
201
; X86-AVX-NEXT: retl
196
202
;
197
- ; X64-LABEL: fadd_64r:
198
- ; X64: # %bb.0:
199
- ; X64-NEXT: addsd (%rdi), %xmm0
200
- ; X64-NEXT: movsd %xmm0, (%rdi)
201
- ; X64-NEXT: retq
203
+ ; X64-SSE-LABEL: fadd_64r:
204
+ ; X64-SSE: # %bb.0:
205
+ ; X64-SSE-NEXT: addsd (%rdi), %xmm0
206
+ ; X64-SSE-NEXT: movsd %xmm0, (%rdi)
207
+ ; X64-SSE-NEXT: retq
208
+ ;
209
+ ; X64-AVX-LABEL: fadd_64r:
210
+ ; X64-AVX: # %bb.0:
211
+ ; X64-AVX-NEXT: vaddsd (%rdi), %xmm0, %xmm0
212
+ ; X64-AVX-NEXT: vmovsd %xmm0, (%rdi)
213
+ ; X64-AVX-NEXT: retq
202
214
%floc = bitcast double * %loc to i64*
203
215
%1 = load atomic i64 , i64* %floc seq_cst , align 8
204
216
%2 = bitcast i64 %1 to double
@@ -249,8 +261,8 @@ define void @fadd_32g() nounwind {
249
261
; X86-AVX-LABEL: fadd_32g:
250
262
; X86-AVX: # %bb.0:
251
263
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
252
- ; X86-AVX-NEXT: addss glob32, %xmm0
253
- ; X86-AVX-NEXT: movss %xmm0, glob32
264
+ ; X86-AVX-NEXT: vaddss glob32, %xmm0 , %xmm0
265
+ ; X86-AVX-NEXT: vmovss %xmm0, glob32
254
266
; X86-AVX-NEXT: retl
255
267
;
256
268
; X64-SSE-LABEL: fadd_32g:
@@ -263,8 +275,8 @@ define void @fadd_32g() nounwind {
263
275
; X64-AVX-LABEL: fadd_32g:
264
276
; X64-AVX: # %bb.0:
265
277
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
266
- ; X64-AVX-NEXT: addss {{.*}}(%rip), %xmm0
267
- ; X64-AVX-NEXT: movss %xmm0, {{.*}}(%rip)
278
+ ; X64-AVX-NEXT: vaddss {{.*}}(%rip), %xmm0 , %xmm0
279
+ ; X64-AVX-NEXT: vmovss %xmm0, {{.*}}(%rip)
268
280
; X64-AVX-NEXT: retq
269
281
%i = load atomic i32 , i32* bitcast (float * @glob32 to i32* ) monotonic , align 4
270
282
%f = bitcast i32 %i to float
@@ -397,8 +409,8 @@ define void @fadd_64g() nounwind {
397
409
; X64-AVX-LABEL: fadd_64g:
398
410
; X64-AVX: # %bb.0:
399
411
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
400
- ; X64-AVX-NEXT: addsd {{.*}}(%rip), %xmm0
401
- ; X64-AVX-NEXT: movsd %xmm0, {{.*}}(%rip)
412
+ ; X64-AVX-NEXT: vaddsd {{.*}}(%rip), %xmm0 , %xmm0
413
+ ; X64-AVX-NEXT: vmovsd %xmm0, {{.*}}(%rip)
402
414
; X64-AVX-NEXT: retq
403
415
%i = load atomic i64 , i64* bitcast (double * @glob64 to i64* ) monotonic , align 8
404
416
%f = bitcast i64 %i to double
@@ -446,24 +458,24 @@ define void @fadd_32imm() nounwind {
446
458
; X86-AVX-LABEL: fadd_32imm:
447
459
; X86-AVX: # %bb.0:
448
460
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
449
- ; X86-AVX-NEXT: addss -559038737, %xmm0
450
- ; X86-AVX-NEXT: movss %xmm0, -559038737
461
+ ; X86-AVX-NEXT: vaddss -559038737, %xmm0 , %xmm0
462
+ ; X86-AVX-NEXT: vmovss %xmm0, -559038737
451
463
; X86-AVX-NEXT: retl
452
464
;
453
465
; X64-SSE-LABEL: fadd_32imm:
454
466
; X64-SSE: # %bb.0:
455
- ; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
456
467
; X64-SSE-NEXT: movl $3735928559, %eax # imm = 0xDEADBEEF
468
+ ; X64-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
457
469
; X64-SSE-NEXT: addss (%rax), %xmm0
458
470
; X64-SSE-NEXT: movss %xmm0, (%rax)
459
471
; X64-SSE-NEXT: retq
460
472
;
461
473
; X64-AVX-LABEL: fadd_32imm:
462
474
; X64-AVX: # %bb.0:
463
- ; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
464
475
; X64-AVX-NEXT: movl $3735928559, %eax # imm = 0xDEADBEEF
465
- ; X64-AVX-NEXT: addss (%rax), %xmm0
466
- ; X64-AVX-NEXT: movss %xmm0, (%rax)
476
+ ; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
477
+ ; X64-AVX-NEXT: vaddss (%rax), %xmm0, %xmm0
478
+ ; X64-AVX-NEXT: vmovss %xmm0, (%rax)
467
479
; X64-AVX-NEXT: retq
468
480
%i = load atomic i32 , i32* inttoptr (i32 3735928559 to i32* ) monotonic , align 4
469
481
%f = bitcast i32 %i to float
@@ -588,18 +600,18 @@ define void @fadd_64imm() nounwind {
588
600
;
589
601
; X64-SSE-LABEL: fadd_64imm:
590
602
; X64-SSE: # %bb.0:
591
- ; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
592
603
; X64-SSE-NEXT: movl $3735928559, %eax # imm = 0xDEADBEEF
604
+ ; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
593
605
; X64-SSE-NEXT: addsd (%rax), %xmm0
594
606
; X64-SSE-NEXT: movsd %xmm0, (%rax)
595
607
; X64-SSE-NEXT: retq
596
608
;
597
609
; X64-AVX-LABEL: fadd_64imm:
598
610
; X64-AVX: # %bb.0:
599
- ; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
600
611
; X64-AVX-NEXT: movl $3735928559, %eax # imm = 0xDEADBEEF
601
- ; X64-AVX-NEXT: addsd (%rax), %xmm0
602
- ; X64-AVX-NEXT: movsd %xmm0, (%rax)
612
+ ; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
613
+ ; X64-AVX-NEXT: vaddsd (%rax), %xmm0, %xmm0
614
+ ; X64-AVX-NEXT: vmovsd %xmm0, (%rax)
603
615
; X64-AVX-NEXT: retq
604
616
%i = load atomic i64 , i64* inttoptr (i64 3735928559 to i64* ) monotonic , align 8
605
617
%f = bitcast i64 %i to double
@@ -650,8 +662,8 @@ define void @fadd_32stack() nounwind {
650
662
; X86-AVX: # %bb.0:
651
663
; X86-AVX-NEXT: pushl %eax
652
664
; X86-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
653
- ; X86-AVX-NEXT: addss (%esp), %xmm0
654
- ; X86-AVX-NEXT: movss %xmm0, (%esp)
665
+ ; X86-AVX-NEXT: vaddss (%esp), %xmm0 , %xmm0
666
+ ; X86-AVX-NEXT: vmovss %xmm0, (%esp)
655
667
; X86-AVX-NEXT: popl %eax
656
668
; X86-AVX-NEXT: retl
657
669
;
@@ -665,8 +677,8 @@ define void @fadd_32stack() nounwind {
665
677
; X64-AVX-LABEL: fadd_32stack:
666
678
; X64-AVX: # %bb.0:
667
679
; X64-AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
668
- ; X64-AVX-NEXT: addss -{{[0-9]+}}(%rsp), %xmm0
669
- ; X64-AVX-NEXT: movss %xmm0, -{{[0-9]+}}(%rsp)
680
+ ; X64-AVX-NEXT: vaddss -{{[0-9]+}}(%rsp), %xmm0 , %xmm0
681
+ ; X64-AVX-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp)
670
682
; X64-AVX-NEXT: retq
671
683
%ptr = alloca i32 , align 4
672
684
%bc3 = bitcast i32* %ptr to float *
@@ -801,8 +813,8 @@ define void @fadd_64stack() nounwind {
801
813
; X64-AVX-LABEL: fadd_64stack:
802
814
; X64-AVX: # %bb.0:
803
815
; X64-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
804
- ; X64-AVX-NEXT: addsd -{{[0-9]+}}(%rsp), %xmm0
805
- ; X64-AVX-NEXT: movsd %xmm0, -{{[0-9]+}}(%rsp)
816
+ ; X64-AVX-NEXT: vaddsd -{{[0-9]+}}(%rsp), %xmm0 , %xmm0
817
+ ; X64-AVX-NEXT: vmovsd %xmm0, -{{[0-9]+}}(%rsp)
806
818
; X64-AVX-NEXT: retq
807
819
%ptr = alloca i64 , align 8
808
820
%bc3 = bitcast i64* %ptr to double *
@@ -951,11 +963,17 @@ define void @fadd_array(i64* %arg, double %arg1, i64 %arg2) nounwind {
951
963
; X86-AVX-NEXT: popl %ebp
952
964
; X86-AVX-NEXT: retl
953
965
;
954
- ; X64-LABEL: fadd_array:
955
- ; X64: # %bb.0: # %bb
956
- ; X64-NEXT: addsd (%rdi,%rsi,8), %xmm0
957
- ; X64-NEXT: movsd %xmm0, (%rdi,%rsi,8)
958
- ; X64-NEXT: retq
966
+ ; X64-SSE-LABEL: fadd_array:
967
+ ; X64-SSE: # %bb.0: # %bb
968
+ ; X64-SSE-NEXT: addsd (%rdi,%rsi,8), %xmm0
969
+ ; X64-SSE-NEXT: movsd %xmm0, (%rdi,%rsi,8)
970
+ ; X64-SSE-NEXT: retq
971
+ ;
972
+ ; X64-AVX-LABEL: fadd_array:
973
+ ; X64-AVX: # %bb.0: # %bb
974
+ ; X64-AVX-NEXT: vaddsd (%rdi,%rsi,8), %xmm0, %xmm0
975
+ ; X64-AVX-NEXT: vmovsd %xmm0, (%rdi,%rsi,8)
976
+ ; X64-AVX-NEXT: retq
959
977
bb:
960
978
%tmp4 = getelementptr inbounds i64 , i64* %arg , i64 %arg2
961
979
%tmp6 = load atomic i64 , i64* %tmp4 monotonic , align 8
0 commit comments