Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / fpenv.ll
blob48aec0b70b0d40ccfbc16f7666c7487409e7753e
1 ; 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
5 define 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
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.get.rounding()
26   ret i32 %rm
29 define 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
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
54 define void @func_03() {
55 ; RV32IF-LABEL: func_03:
56 ; RV32IF:       # %bb.0:
57 ; RV32IF-NEXT:    fsrmi 1
58 ; RV32IF-NEXT:    ret
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
68 define void @func_04() {
69 ; RV32IF-LABEL: func_04:
70 ; RV32IF:       # %bb.0:
71 ; RV32IF-NEXT:    fsrmi 0
72 ; RV32IF-NEXT:    ret
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
82 define void @func_05() {
83 ; RV32IF-LABEL: func_05:
84 ; RV32IF:       # %bb.0:
85 ; RV32IF-NEXT:    fsrmi 3
86 ; RV32IF-NEXT:    ret
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
96 define void @func_06() {
97 ; RV32IF-LABEL: func_06:
98 ; RV32IF:       # %bb.0:
99 ; RV32IF-NEXT:    fsrmi 2
100 ; RV32IF-NEXT:    ret
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
110 define void @func_07() {
111 ; RV32IF-LABEL: func_07:
112 ; RV32IF:       # %bb.0:
113 ; RV32IF-NEXT:    fsrmi 4
114 ; RV32IF-NEXT:    ret
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
124 declare void @llvm.set.rounding(i32)
125 declare i32 @llvm.get.rounding()