1*228f88fdSSam Elliott; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2*228f88fdSSam Elliott; RUN: llc -mtriple=riscv32 -mattr=+f -target-abi=ilp32 -verify-machineinstrs -no-integrated-as < %s \ 3*228f88fdSSam Elliott; RUN: | FileCheck -check-prefix=RV32F %s 4*228f88fdSSam Elliott; RUN: llc -mtriple=riscv64 -mattr=+f -target-abi=lp64 -verify-machineinstrs -no-integrated-as < %s \ 5*228f88fdSSam Elliott; RUN: | FileCheck -check-prefix=RV64F %s 6*228f88fdSSam Elliott; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32 -verify-machineinstrs -no-integrated-as < %s \ 7*228f88fdSSam Elliott; RUN: | FileCheck -check-prefix=RV32F %s 8*228f88fdSSam Elliott; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64 -verify-machineinstrs -no-integrated-as < %s \ 9*228f88fdSSam Elliott; RUN: | FileCheck -check-prefix=RV64F %s 10*228f88fdSSam Elliott 11*228f88fdSSam Elliott;; `.insn 0x4, 0x53 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)` is 12*228f88fdSSam Elliott;; the raw encoding for `fadd.s` 13*228f88fdSSam Elliott 14*228f88fdSSam Elliott@gf = external global float 15*228f88fdSSam Elliott 16*228f88fdSSam Elliottdefine float @constraint_f_modifier_N_float(float %a) nounwind { 17*228f88fdSSam Elliott; RV32F-LABEL: constraint_f_modifier_N_float: 18*228f88fdSSam Elliott; RV32F: # %bb.0: 19*228f88fdSSam Elliott; RV32F-NEXT: lui a1, %hi(gf) 20*228f88fdSSam Elliott; RV32F-NEXT: flw fa5, %lo(gf)(a1) 21*228f88fdSSam Elliott; RV32F-NEXT: fmv.w.x fa4, a0 22*228f88fdSSam Elliott; RV32F-NEXT: #APP 23*228f88fdSSam Elliott; RV32F-NEXT: .insn 0x4, 0x53 | (15 << 7) | (14 << 15) | (15 << 20) 24*228f88fdSSam Elliott; RV32F-NEXT: #NO_APP 25*228f88fdSSam Elliott; RV32F-NEXT: fmv.x.w a0, fa5 26*228f88fdSSam Elliott; RV32F-NEXT: ret 27*228f88fdSSam Elliott; 28*228f88fdSSam Elliott; RV64F-LABEL: constraint_f_modifier_N_float: 29*228f88fdSSam Elliott; RV64F: # %bb.0: 30*228f88fdSSam Elliott; RV64F-NEXT: lui a1, %hi(gf) 31*228f88fdSSam Elliott; RV64F-NEXT: flw fa5, %lo(gf)(a1) 32*228f88fdSSam Elliott; RV64F-NEXT: fmv.w.x fa4, a0 33*228f88fdSSam Elliott; RV64F-NEXT: #APP 34*228f88fdSSam Elliott; RV64F-NEXT: .insn 0x4, 0x53 | (15 << 7) | (14 << 15) | (15 << 20) 35*228f88fdSSam Elliott; RV64F-NEXT: #NO_APP 36*228f88fdSSam Elliott; RV64F-NEXT: fmv.x.w a0, fa5 37*228f88fdSSam Elliott; RV64F-NEXT: ret 38*228f88fdSSam Elliott %1 = load float, ptr @gf 39*228f88fdSSam Elliott %2 = tail call float asm ".insn 0x4, 0x53 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)", "=f,f,f"(float %a, float %1) 40*228f88fdSSam Elliott ret float %2 41*228f88fdSSam Elliott} 42*228f88fdSSam Elliott 43*228f88fdSSam Elliott 44*228f88fdSSam Elliottdefine float @constraint_cf_modifier_N_float(float %a) nounwind { 45*228f88fdSSam Elliott; RV32F-LABEL: constraint_cf_modifier_N_float: 46*228f88fdSSam Elliott; RV32F: # %bb.0: 47*228f88fdSSam Elliott; RV32F-NEXT: lui a1, %hi(gf) 48*228f88fdSSam Elliott; RV32F-NEXT: flw fa5, %lo(gf)(a1) 49*228f88fdSSam Elliott; RV32F-NEXT: fmv.w.x fa4, a0 50*228f88fdSSam Elliott; RV32F-NEXT: #APP 51*228f88fdSSam Elliott; RV32F-NEXT: .insn 0x4, 0x53 | (15 << 7) | (14 << 15) | (15 << 20) 52*228f88fdSSam Elliott; RV32F-NEXT: #NO_APP 53*228f88fdSSam Elliott; RV32F-NEXT: fmv.x.w a0, fa5 54*228f88fdSSam Elliott; RV32F-NEXT: ret 55*228f88fdSSam Elliott; 56*228f88fdSSam Elliott; RV64F-LABEL: constraint_cf_modifier_N_float: 57*228f88fdSSam Elliott; RV64F: # %bb.0: 58*228f88fdSSam Elliott; RV64F-NEXT: lui a1, %hi(gf) 59*228f88fdSSam Elliott; RV64F-NEXT: flw fa5, %lo(gf)(a1) 60*228f88fdSSam Elliott; RV64F-NEXT: fmv.w.x fa4, a0 61*228f88fdSSam Elliott; RV64F-NEXT: #APP 62*228f88fdSSam Elliott; RV64F-NEXT: .insn 0x4, 0x53 | (15 << 7) | (14 << 15) | (15 << 20) 63*228f88fdSSam Elliott; RV64F-NEXT: #NO_APP 64*228f88fdSSam Elliott; RV64F-NEXT: fmv.x.w a0, fa5 65*228f88fdSSam Elliott; RV64F-NEXT: ret 66*228f88fdSSam Elliott %1 = load float, ptr @gf 67*228f88fdSSam Elliott %2 = tail call float asm ".insn 0x4, 0x53 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)", "=^cf,^cf,^cf"(float %a, float %1) 68*228f88fdSSam Elliott ret float %2 69*228f88fdSSam Elliott} 70*228f88fdSSam Elliott 71*228f88fdSSam Elliottdefine float @modifier_N_float_abi_name(float %a) nounwind { 72*228f88fdSSam Elliott; RV32F-LABEL: modifier_N_float_abi_name: 73*228f88fdSSam Elliott; RV32F: # %bb.0: 74*228f88fdSSam Elliott; RV32F-NEXT: lui a1, %hi(gf) 75*228f88fdSSam Elliott; RV32F-NEXT: flw fs0, %lo(gf)(a1) 76*228f88fdSSam Elliott; RV32F-NEXT: fmv.w.x fa0, a0 77*228f88fdSSam Elliott; RV32F-NEXT: #APP 78*228f88fdSSam Elliott; RV32F-NEXT: .insn 0x4, 0x53 | (0 << 7) | (10 << 15) | (8 << 20) 79*228f88fdSSam Elliott; RV32F-NEXT: #NO_APP 80*228f88fdSSam Elliott; RV32F-NEXT: fmv.x.w a0, ft0 81*228f88fdSSam Elliott; RV32F-NEXT: ret 82*228f88fdSSam Elliott; 83*228f88fdSSam Elliott; RV64F-LABEL: modifier_N_float_abi_name: 84*228f88fdSSam Elliott; RV64F: # %bb.0: 85*228f88fdSSam Elliott; RV64F-NEXT: lui a1, %hi(gf) 86*228f88fdSSam Elliott; RV64F-NEXT: flw fs0, %lo(gf)(a1) 87*228f88fdSSam Elliott; RV64F-NEXT: fmv.w.x fa0, a0 88*228f88fdSSam Elliott; RV64F-NEXT: #APP 89*228f88fdSSam Elliott; RV64F-NEXT: .insn 0x4, 0x53 | (0 << 7) | (10 << 15) | (8 << 20) 90*228f88fdSSam Elliott; RV64F-NEXT: #NO_APP 91*228f88fdSSam Elliott; RV64F-NEXT: fmv.x.w a0, ft0 92*228f88fdSSam Elliott; RV64F-NEXT: ret 93*228f88fdSSam Elliott %1 = load float, ptr @gf 94*228f88fdSSam Elliott %2 = tail call float asm ".insn 0x4, 0x53 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)", "={ft0},{fa0},{fs0}"(float %a, float %1) 95*228f88fdSSam Elliott ret float %2 96*228f88fdSSam Elliott} 97