Serge Pavlov | 6e63dfd | 2020-11-05 13:59:52 +0700 | [diff] [blame] | 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 |
| 4 | |
| 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 |
| 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 Pavlov | 740962e | 2020-11-10 23:51:34 +0700 | [diff] [blame] | 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 |
| 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 | |
| 54 | define 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 | |
| 68 | define 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 | |
| 82 | define 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 | |
| 96 | define 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 | |
| 110 | define 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 | |
| 124 | declare void @llvm.set.rounding(i32) |
Serge Pavlov | 6e63dfd | 2020-11-05 13:59:52 +0700 | [diff] [blame] | 125 | declare i32 @llvm.flt.rounds() |