blob: 28fac83b97d9e7f1ba0a45beb3d9d0fa430db379 [file] [log] [blame]
Serge Pavlov6e63dfd2020-11-05 13:59:52 +07001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s | FileCheck -check-prefix=RV32IF %s
3; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s | FileCheck -check-prefix=RV64IF %s
4
5define i32 @func_01() {
6; RV32IF-LABEL: func_01:
7; RV32IF: # %bb.0:
8; RV32IF-NEXT: frrm a0
9; RV32IF-NEXT: slli a0, a0, 2
10; RV32IF-NEXT: lui a1, 66
11; RV32IF-NEXT: addi a1, a1, 769
12; RV32IF-NEXT: srl a0, a1, a0
13; RV32IF-NEXT: andi a0, a0, 7
14; RV32IF-NEXT: ret
15;
16; RV64IF-LABEL: func_01:
17; RV64IF: # %bb.0:
18; RV64IF-NEXT: frrm a0
19; RV64IF-NEXT: slli a0, a0, 2
20; RV64IF-NEXT: lui a1, 66
21; RV64IF-NEXT: addiw a1, a1, 769
22; RV64IF-NEXT: srl a0, a1, a0
23; RV64IF-NEXT: andi a0, a0, 7
24; RV64IF-NEXT: ret
25 %rm = call i32 @llvm.flt.rounds()
26 ret i32 %rm
27}
28
Serge Pavlov740962e2020-11-10 23:51:34 +070029define void @func_02(i32 %rm) {
30; RV32IF-LABEL: func_02:
31; RV32IF: # %bb.0:
32; RV32IF-NEXT: slli a0, a0, 2
33; RV32IF-NEXT: lui a1, 66
34; RV32IF-NEXT: addi a1, a1, 769
35; RV32IF-NEXT: srl a0, a1, a0
36; RV32IF-NEXT: andi a0, a0, 7
37; RV32IF-NEXT: fsrm a0
38; RV32IF-NEXT: ret
39;
40; RV64IF-LABEL: func_02:
41; RV64IF: # %bb.0:
42; RV64IF-NEXT: slli a0, a0, 32
43; RV64IF-NEXT: srli a0, a0, 30
44; RV64IF-NEXT: lui a1, 66
45; RV64IF-NEXT: addiw a1, a1, 769
46; RV64IF-NEXT: srl a0, a1, a0
47; RV64IF-NEXT: andi a0, a0, 7
48; RV64IF-NEXT: fsrm a0
49; RV64IF-NEXT: ret
50 call void @llvm.set.rounding(i32 %rm)
51 ret void
52}
53
54define void @func_03() {
55; RV32IF-LABEL: func_03:
56; RV32IF: # %bb.0:
57; RV32IF-NEXT: fsrmi 1
58; RV32IF-NEXT: ret
59;
60; RV64IF-LABEL: func_03:
61; RV64IF: # %bb.0:
62; RV64IF-NEXT: fsrmi 1
63; RV64IF-NEXT: ret
64 call void @llvm.set.rounding(i32 0)
65 ret void
66}
67
68define void @func_04() {
69; RV32IF-LABEL: func_04:
70; RV32IF: # %bb.0:
71; RV32IF-NEXT: fsrmi 0
72; RV32IF-NEXT: ret
73;
74; RV64IF-LABEL: func_04:
75; RV64IF: # %bb.0:
76; RV64IF-NEXT: fsrmi 0
77; RV64IF-NEXT: ret
78 call void @llvm.set.rounding(i32 1)
79 ret void
80}
81
82define void @func_05() {
83; RV32IF-LABEL: func_05:
84; RV32IF: # %bb.0:
85; RV32IF-NEXT: fsrmi 3
86; RV32IF-NEXT: ret
87;
88; RV64IF-LABEL: func_05:
89; RV64IF: # %bb.0:
90; RV64IF-NEXT: fsrmi 3
91; RV64IF-NEXT: ret
92 call void @llvm.set.rounding(i32 2)
93 ret void
94}
95
96define void @func_06() {
97; RV32IF-LABEL: func_06:
98; RV32IF: # %bb.0:
99; RV32IF-NEXT: fsrmi 2
100; RV32IF-NEXT: ret
101;
102; RV64IF-LABEL: func_06:
103; RV64IF: # %bb.0:
104; RV64IF-NEXT: fsrmi 2
105; RV64IF-NEXT: ret
106 call void @llvm.set.rounding(i32 3)
107 ret void
108}
109
110define void @func_07() {
111; RV32IF-LABEL: func_07:
112; RV32IF: # %bb.0:
113; RV32IF-NEXT: fsrmi 4
114; RV32IF-NEXT: ret
115;
116; RV64IF-LABEL: func_07:
117; RV64IF: # %bb.0:
118; RV64IF-NEXT: fsrmi 4
119; RV64IF-NEXT: ret
120 call void @llvm.set.rounding(i32 4)
121 ret void
122}
123
124declare void @llvm.set.rounding(i32)
Serge Pavlov6e63dfd2020-11-05 13:59:52 +0700125declare i32 @llvm.flt.rounds()