1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfh < %s \ 3; RUN: | FileCheck %s 4; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \ 5; RUN: | FileCheck %s 6; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfhmin < %s \ 7; RUN: | FileCheck %s --check-prefix=ZFHMIN 8; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfhmin < %s \ 9; RUN: | FileCheck %s --check-prefix=ZFHMIN 10 11define half @loadfpimm1() { 12; CHECK-LABEL: loadfpimm1: 13; CHECK: # %bb.0: 14; CHECK-NEXT: fli.h fa0, 0.0625 15; CHECK-NEXT: ret 16; 17; ZFHMIN-LABEL: loadfpimm1: 18; ZFHMIN: # %bb.0: 19; ZFHMIN-NEXT: lui a0, %hi(.LCPI0_0) 20; ZFHMIN-NEXT: flh fa0, %lo(.LCPI0_0)(a0) 21; ZFHMIN-NEXT: ret 22 ret half 0.0625 23} 24 25define half @loadfpimm2() { 26; CHECK-LABEL: loadfpimm2: 27; CHECK: # %bb.0: 28; CHECK-NEXT: fli.h fa0, 0.75 29; CHECK-NEXT: ret 30; 31; ZFHMIN-LABEL: loadfpimm2: 32; ZFHMIN: # %bb.0: 33; ZFHMIN-NEXT: lui a0, %hi(.LCPI1_0) 34; ZFHMIN-NEXT: flh fa0, %lo(.LCPI1_0)(a0) 35; ZFHMIN-NEXT: ret 36 ret half 0.75 37} 38 39define half @loadfpimm3() { 40; CHECK-LABEL: loadfpimm3: 41; CHECK: # %bb.0: 42; CHECK-NEXT: fli.h fa0, 1.25 43; CHECK-NEXT: ret 44; 45; ZFHMIN-LABEL: loadfpimm3: 46; ZFHMIN: # %bb.0: 47; ZFHMIN-NEXT: lui a0, %hi(.LCPI2_0) 48; ZFHMIN-NEXT: flh fa0, %lo(.LCPI2_0)(a0) 49; ZFHMIN-NEXT: ret 50 ret half 1.25 51} 52 53define half @loadfpimm4() { 54; CHECK-LABEL: loadfpimm4: 55; CHECK: # %bb.0: 56; CHECK-NEXT: fli.h fa0, 3.0 57; CHECK-NEXT: ret 58; 59; ZFHMIN-LABEL: loadfpimm4: 60; ZFHMIN: # %bb.0: 61; ZFHMIN-NEXT: lui a0, %hi(.LCPI3_0) 62; ZFHMIN-NEXT: flh fa0, %lo(.LCPI3_0)(a0) 63; ZFHMIN-NEXT: ret 64 ret half 3.0 65} 66 67define half @loadfpimm5() { 68; CHECK-LABEL: loadfpimm5: 69; CHECK: # %bb.0: 70; CHECK-NEXT: fli.h fa0, 256.0 71; CHECK-NEXT: ret 72; 73; ZFHMIN-LABEL: loadfpimm5: 74; ZFHMIN: # %bb.0: 75; ZFHMIN-NEXT: lui a0, %hi(.LCPI4_0) 76; ZFHMIN-NEXT: flh fa0, %lo(.LCPI4_0)(a0) 77; ZFHMIN-NEXT: ret 78 ret half 256.0 79} 80 81define half @loadfpimm6() { 82; CHECK-LABEL: loadfpimm6: 83; CHECK: # %bb.0: 84; CHECK-NEXT: fli.h fa0, inf 85; CHECK-NEXT: ret 86; 87; ZFHMIN-LABEL: loadfpimm6: 88; ZFHMIN: # %bb.0: 89; ZFHMIN-NEXT: lui a0, %hi(.LCPI5_0) 90; ZFHMIN-NEXT: flh fa0, %lo(.LCPI5_0)(a0) 91; ZFHMIN-NEXT: ret 92 ret half 0xH7C00 93} 94 95define half @loadfpimm7() { 96; CHECK-LABEL: loadfpimm7: 97; CHECK: # %bb.0: 98; CHECK-NEXT: fli.h fa0, nan 99; CHECK-NEXT: ret 100; 101; ZFHMIN-LABEL: loadfpimm7: 102; ZFHMIN: # %bb.0: 103; ZFHMIN-NEXT: lui a0, %hi(.LCPI6_0) 104; ZFHMIN-NEXT: flh fa0, %lo(.LCPI6_0)(a0) 105; ZFHMIN-NEXT: ret 106 ret half 0xH7E00 107} 108 109define half @loadfpimm8() { 110; CHECK-LABEL: loadfpimm8: 111; CHECK: # %bb.0: 112; CHECK-NEXT: fli.h fa0, min 113; CHECK-NEXT: ret 114; 115; ZFHMIN-LABEL: loadfpimm8: 116; ZFHMIN: # %bb.0: 117; ZFHMIN-NEXT: li a0, 1024 118; ZFHMIN-NEXT: fmv.h.x fa0, a0 119; ZFHMIN-NEXT: ret 120 ret half 0xH0400 121} 122 123define half @loadfpimm9() { 124; CHECK-LABEL: loadfpimm9: 125; CHECK: # %bb.0: 126; CHECK-NEXT: lui a0, %hi(.LCPI8_0) 127; CHECK-NEXT: flh fa0, %lo(.LCPI8_0)(a0) 128; CHECK-NEXT: ret 129; 130; ZFHMIN-LABEL: loadfpimm9: 131; ZFHMIN: # %bb.0: 132; ZFHMIN-NEXT: lui a0, %hi(.LCPI8_0) 133; ZFHMIN-NEXT: flh fa0, %lo(.LCPI8_0)(a0) 134; ZFHMIN-NEXT: ret 135 ret half 255.0 136} 137 138; This is 1 * 2^-16 139define half @loadfpimm10() { 140; CHECK-LABEL: loadfpimm10: 141; CHECK: # %bb.0: 142; CHECK-NEXT: fli.h fa0, 1.52587890625e-05 143; CHECK-NEXT: ret 144; 145; ZFHMIN-LABEL: loadfpimm10: 146; ZFHMIN: # %bb.0: 147; ZFHMIN-NEXT: li a0, 256 148; ZFHMIN-NEXT: fmv.h.x fa0, a0 149; ZFHMIN-NEXT: ret 150 ret half 0xH0100 151} 152 153; This is 1 * 2^-15 154define half @loadfpimm11() { 155; CHECK-LABEL: loadfpimm11: 156; CHECK: # %bb.0: 157; CHECK-NEXT: fli.h fa0, 3.0517578125e-05 158; CHECK-NEXT: ret 159; 160; ZFHMIN-LABEL: loadfpimm11: 161; ZFHMIN: # %bb.0: 162; ZFHMIN-NEXT: li a0, 512 163; ZFHMIN-NEXT: fmv.h.x fa0, a0 164; ZFHMIN-NEXT: ret 165 ret half 0xH0200 166} 167 168; Negative test. This is an snan with payload of 1. 169define half @loadfpimm12() { 170; CHECK-LABEL: loadfpimm12: 171; CHECK: # %bb.0: 172; CHECK-NEXT: lui a0, %hi(.LCPI11_0) 173; CHECK-NEXT: flh fa0, %lo(.LCPI11_0)(a0) 174; CHECK-NEXT: ret 175; 176; ZFHMIN-LABEL: loadfpimm12: 177; ZFHMIN: # %bb.0: 178; ZFHMIN-NEXT: lui a0, %hi(.LCPI11_0) 179; ZFHMIN-NEXT: flh fa0, %lo(.LCPI11_0)(a0) 180; ZFHMIN-NEXT: ret 181 ret half 0xH7c01 182} 183 184define half @loadfpimm13() { 185; CHECK-LABEL: loadfpimm13: 186; CHECK: # %bb.0: 187; CHECK-NEXT: fli.h fa0, -1.0 188; CHECK-NEXT: ret 189; 190; ZFHMIN-LABEL: loadfpimm13: 191; ZFHMIN: # %bb.0: 192; ZFHMIN-NEXT: lui a0, %hi(.LCPI12_0) 193; ZFHMIN-NEXT: flh fa0, %lo(.LCPI12_0)(a0) 194; ZFHMIN-NEXT: ret 195 ret half -1.0 196} 197 198; Ensure fli isn't directly used for negated versions of numbers in the fli 199; table. 200define half @loadfpimm14() { 201; CHECK-LABEL: loadfpimm14: 202; CHECK: # %bb.0: 203; CHECK-NEXT: fli.h fa5, 2.0 204; CHECK-NEXT: fneg.h fa0, fa5 205; CHECK-NEXT: ret 206; 207; ZFHMIN-LABEL: loadfpimm14: 208; ZFHMIN: # %bb.0: 209; ZFHMIN-NEXT: lui a0, 1048572 210; ZFHMIN-NEXT: fmv.h.x fa0, a0 211; ZFHMIN-NEXT: ret 212 ret half -2.0 213} 214 215; Ensure fli isn't directly used for negative min normal value. 216define half @loadfpimm15() { 217; CHECK-LABEL: loadfpimm15: 218; CHECK: # %bb.0: 219; CHECK-NEXT: fli.h fa5, min 220; CHECK-NEXT: fneg.h fa0, fa5 221; CHECK-NEXT: ret 222; 223; ZFHMIN-LABEL: loadfpimm15: 224; ZFHMIN: # %bb.0: 225; ZFHMIN-NEXT: lui a0, %hi(.LCPI14_0) 226; ZFHMIN-NEXT: flh fa0, %lo(.LCPI14_0)(a0) 227; ZFHMIN-NEXT: ret 228 ret half 0xH8400 229} 230