Skip to content

Commit 67789aa

Browse files
committed
Add testcase
1 parent 839a518 commit 67789aa

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=mipsel -mattr=+fp64,+mips32r2 < %s \
3+
; RUN: | FileCheck %s --check-prefixes=CHECK
4+
5+
define dso_local double @x1(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
6+
; CHECK-LABEL: x1:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: mul.d $f0, $f12, $f14
9+
; CHECK-NEXT: ldc1 $f1, 16($sp)
10+
; CHECK-NEXT: jr $ra
11+
; CHECK-NEXT: sub.d $f0, $f0, $f1
12+
entry:
13+
%neg = fneg double %a
14+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double negated %neg, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
15+
ret double %0
16+
}
17+
define dso_local double @x2(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
18+
; CHECK-LABEL: x2:
19+
; CHECK: # %bb.0: # %entry
20+
; CHECK-NEXT: mul.d $f0, $f12, $f14
21+
; CHECK-NEXT: ldc1 $f1, 16($sp)
22+
; CHECK-NEXT: jr $ra
23+
; CHECK-NEXT: sub.d $f0, $f0, $f1
24+
entry:
25+
%neg = fneg double %b
26+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double %a, double negated %neg, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
27+
ret double %0
28+
}
29+
define dso_local double @x3(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
30+
; CHECK-LABEL: x3:
31+
; CHECK: # %bb.0: # %entry
32+
; CHECK-NEXT: neg.d $f0, $f12
33+
; CHECK-NEXT: mul.d $f0, $f0, $f14
34+
; CHECK-NEXT: ldc1 $f1, 16($sp)
35+
; CHECK-NEXT: jr $ra
36+
; CHECK-NEXT: add.d $f0, $f0, $f1
37+
entry:
38+
%neg = fneg double %a
39+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double %neg, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
40+
ret double %0
41+
}
42+
define dso_local double @x4(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
43+
; CHECK-LABEL: x4:
44+
; CHECK: # %bb.0: # %entry
45+
; CHECK-NEXT: neg.d $f0, $f14
46+
; CHECK-NEXT: mul.d $f0, $f12, $f0
47+
; CHECK-NEXT: ldc1 $f1, 16($sp)
48+
; CHECK-NEXT: jr $ra
49+
; CHECK-NEXT: add.d $f0, $f0, $f1
50+
entry:
51+
%neg = fneg double %b
52+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double %a, double %neg, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
53+
ret double %0
54+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=x86_64-- -mattr=-fma < %s \
3+
; RUN: | FileCheck %s --check-prefixes=CHECK
4+
; RUN: llc -mtriple=x86_64-- -mattr=+fma < %s \
5+
; RUN: | FileCheck %s --check-prefixes=CHECK-FMA
6+
7+
define dso_local double @x1(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
8+
; CHECK-LABEL: x1:
9+
; CHECK: # %bb.0: # %entry
10+
; CHECK-NEXT: mulsd %xmm1, %xmm0
11+
; CHECK-NEXT: subsd %xmm2, %xmm0
12+
; CHECK-NEXT: retq
13+
;
14+
; CHECK-FMA-LABEL: x1:
15+
; CHECK-FMA: # %bb.0: # %entry
16+
; CHECK-FMA-NEXT: vfnmadd213sd {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm2
17+
; CHECK-FMA-NEXT: retq
18+
entry:
19+
%neg = fneg double %a
20+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double negated %neg, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
21+
ret double %0
22+
}
23+
define dso_local double @x2(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
24+
; CHECK-LABEL: x2:
25+
; CHECK: # %bb.0: # %entry
26+
; CHECK-NEXT: mulsd %xmm1, %xmm0
27+
; CHECK-NEXT: subsd %xmm2, %xmm0
28+
; CHECK-NEXT: retq
29+
;
30+
; CHECK-FMA-LABEL: x2:
31+
; CHECK-FMA: # %bb.0: # %entry
32+
; CHECK-FMA-NEXT: vfnmadd213sd {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm2
33+
; CHECK-FMA-NEXT: retq
34+
entry:
35+
%neg = fneg double %b
36+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double %a, double negated %neg, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
37+
ret double %0
38+
}
39+
define dso_local double @x3(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
40+
; CHECK-LABEL: x3:
41+
; CHECK: # %bb.0: # %entry
42+
; CHECK-NEXT: xorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
43+
; CHECK-NEXT: mulsd %xmm1, %xmm0
44+
; CHECK-NEXT: addsd %xmm2, %xmm0
45+
; CHECK-NEXT: retq
46+
;
47+
; CHECK-FMA-LABEL: x3:
48+
; CHECK-FMA: # %bb.0: # %entry
49+
; CHECK-FMA-NEXT: vfnmadd213sd {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm2
50+
; CHECK-FMA-NEXT: retq
51+
entry:
52+
%neg = fneg double %a
53+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double %neg, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
54+
ret double %0
55+
}
56+
define dso_local double @x4(double noundef %a, double noundef %b, double noundef %c) local_unnamed_addr #0 {
57+
; CHECK-LABEL: x4:
58+
; CHECK: # %bb.0: # %entry
59+
; CHECK-NEXT: xorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
60+
; CHECK-NEXT: mulsd %xmm1, %xmm0
61+
; CHECK-NEXT: addsd %xmm2, %xmm0
62+
; CHECK-NEXT: retq
63+
;
64+
; CHECK-FMA-LABEL: x4:
65+
; CHECK-FMA: # %bb.0: # %entry
66+
; CHECK-FMA-NEXT: vfnmadd213sd {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm2
67+
; CHECK-FMA-NEXT: retq
68+
entry:
69+
%neg = fneg double %b
70+
%0 = tail call double @llvm.experimental.constrained.fmuladd.f64(double %a, double %neg, double %c, metadata !"round.dynamic", metadata !"fpexcept.ignore")
71+
ret double %0
72+
}

0 commit comments

Comments
 (0)