
R_RISCV_CALL/R_RISCV_CALL_PLT distinction is not necessary and R_RISCV_CALL has been deprecated. Since https://reviews.llvm.org/D132530 `call foo` assembles to R_RISCV_CALL_PLT. The `@plt` suffix is not useful and can be removed now (matching AArch64 and PowerPC). GNU assembler assembles `call foo` to RISCV_CALL_PLT since 2022-09 (70f35d72ef04cd23771875c1661c9975044a749c). Without this patch, unconditionally changing MO_CALL to MO_PLT could create `jump .L1@plt, a0`, which is invalid in LLVM integrated assembler and GNU assembler.
35 lines
1.3 KiB
LLVM
35 lines
1.3 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
|
|
; RUN: | FileCheck -check-prefix=RV32IFD %s
|
|
; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
|
|
; RUN: | FileCheck -check-prefix=RV64IFD %s
|
|
; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
|
|
; RUN: | FileCheck -check-prefix=RV32IZFINXZDINX %s
|
|
; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
|
|
; RUN: | FileCheck -check-prefix=RV64IZFINXZDINX %s
|
|
|
|
define double @frem_f64(double %a, double %b) nounwind {
|
|
; RV32IFD-LABEL: frem_f64:
|
|
; RV32IFD: # %bb.0:
|
|
; RV32IFD-NEXT: tail fmod
|
|
;
|
|
; RV64IFD-LABEL: frem_f64:
|
|
; RV64IFD: # %bb.0:
|
|
; RV64IFD-NEXT: tail fmod
|
|
;
|
|
; RV32IZFINXZDINX-LABEL: frem_f64:
|
|
; RV32IZFINXZDINX: # %bb.0:
|
|
; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
|
|
; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
|
|
; RV32IZFINXZDINX-NEXT: call fmod
|
|
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
|
|
; RV32IZFINXZDINX-NEXT: addi sp, sp, 16
|
|
; RV32IZFINXZDINX-NEXT: ret
|
|
;
|
|
; RV64IZFINXZDINX-LABEL: frem_f64:
|
|
; RV64IZFINXZDINX: # %bb.0:
|
|
; RV64IZFINXZDINX-NEXT: tail fmod
|
|
%1 = frem double %a, %b
|
|
ret double %1
|
|
}
|