Skip to content

Commit b0b723a

Browse files
committed
[RISCV][NFC] Add pre-commit test
1 parent 2e02164 commit b0b723a

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -O3 -mtriple=riscv64 -mattr=+f,+d < %s | FileCheck %s
3+
4+
; Make sure WriteFRM is not hoisted out of loop due to dead implicit-def.
5+
6+
define double @foo(double %0, double %1, i64 %n) strictfp {
7+
; CHECK-LABEL: foo:
8+
; CHECK: # %bb.0: # %entry
9+
; CHECK-NEXT: fmv.d.x fa5, zero
10+
; CHECK-NEXT: fsrmi 3
11+
; CHECK-NEXT: fsrmi 0
12+
; CHECK-NEXT: .LBB0_1: # %loop
13+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
14+
; CHECK-NEXT: fadd.d fa5, fa5, fa0
15+
; CHECK-NEXT: addi a0, a0, -1
16+
; CHECK-NEXT: fadd.d fa5, fa5, fa1
17+
; CHECK-NEXT: beqz a0, .LBB0_1
18+
; CHECK-NEXT: # %bb.2: # %exit
19+
; CHECK-NEXT: fmv.d fa0, fa5
20+
; CHECK-NEXT: ret
21+
entry:
22+
br label %loop
23+
loop:
24+
%cnt = phi i64 [0, %entry], [%cnt_inc, %loop]
25+
%acc = phi double [0.0, %entry], [%f2, %loop]
26+
call void @llvm.set.rounding(i32 2) strictfp
27+
%f1 = call double @llvm.experimental.constrained.fadd.f64(double %acc, double %0, metadata !"round.dynamic", metadata !"fpexcept.ignore") strictfp
28+
call void @llvm.set.rounding(i32 1) strictfp
29+
%f2 = call double @llvm.experimental.constrained.fadd.f64(double %f1, double %1, metadata !"round.dynamic", metadata !"fpexcept.ignore") strictfp
30+
%cnt_inc = add i64 %cnt, 1
31+
%cond = icmp eq i64 %cnt_inc, %n
32+
br i1 %cond, label %loop, label %exit
33+
exit:
34+
ret double %f2
35+
}
36+
37+
declare double @baz(double, double)
38+
39+
define double @bar(double %0, double %1, i64 %n) strictfp {
40+
; CHECK-LABEL: bar:
41+
; CHECK: # %bb.0: # %entry
42+
; CHECK-NEXT: addi sp, sp, -32
43+
; CHECK-NEXT: .cfi_def_cfa_offset 32
44+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
45+
; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
46+
; CHECK-NEXT: fsd fs0, 8(sp) # 8-byte Folded Spill
47+
; CHECK-NEXT: fsd fs1, 0(sp) # 8-byte Folded Spill
48+
; CHECK-NEXT: .cfi_offset ra, -8
49+
; CHECK-NEXT: .cfi_offset s0, -16
50+
; CHECK-NEXT: .cfi_offset fs0, -24
51+
; CHECK-NEXT: .cfi_offset fs1, -32
52+
; CHECK-NEXT: mv s0, a0
53+
; CHECK-NEXT: fmv.d fs0, fa1
54+
; CHECK-NEXT: fmv.d fs1, fa0
55+
; CHECK-NEXT: fmv.d.x fa0, zero
56+
; CHECK-NEXT: fsrmi 3
57+
; CHECK-NEXT: fsrmi 0
58+
; CHECK-NEXT: .LBB1_1: # %loop
59+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
60+
; CHECK-NEXT: fmv.d fa1, fs1
61+
; CHECK-NEXT: call baz
62+
; CHECK-NEXT: fmv.d fa1, fs0
63+
; CHECK-NEXT: call baz
64+
; CHECK-NEXT: addi s0, s0, -1
65+
; CHECK-NEXT: beqz s0, .LBB1_1
66+
; CHECK-NEXT: # %bb.2: # %exit
67+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
68+
; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
69+
; CHECK-NEXT: fld fs0, 8(sp) # 8-byte Folded Reload
70+
; CHECK-NEXT: fld fs1, 0(sp) # 8-byte Folded Reload
71+
; CHECK-NEXT: .cfi_restore ra
72+
; CHECK-NEXT: .cfi_restore s0
73+
; CHECK-NEXT: .cfi_restore fs0
74+
; CHECK-NEXT: .cfi_restore fs1
75+
; CHECK-NEXT: addi sp, sp, 32
76+
; CHECK-NEXT: .cfi_def_cfa_offset 0
77+
; CHECK-NEXT: ret
78+
entry:
79+
br label %loop
80+
loop:
81+
%cnt = phi i64 [0, %entry], [%cnt_inc, %loop]
82+
%acc = phi double [0.0, %entry], [%f2, %loop]
83+
call void @llvm.set.rounding(i32 2) strictfp
84+
%f1 = call double @baz(double %acc, double %0) strictfp
85+
call void @llvm.set.rounding(i32 1) strictfp
86+
%f2 = call double @baz(double %f1, double %1) strictfp
87+
%cnt_inc = add i64 %cnt, 1
88+
%cond = icmp eq i64 %cnt_inc, %n
89+
br i1 %cond, label %loop, label %exit
90+
exit:
91+
ret double %f2
92+
}

0 commit comments

Comments
 (0)