Matt Arsenault dd81810554 clang: Emit nofpclass(nan inf) for -ffinite-math-only
Set this on any source level floating-point type argument,
return value, call return or outgoing parameter which is lowered
to a valid IR type for the attribute. Currently this isn't
applied to emitted intrinsics since those don't go through
ABI code.
2023-03-15 01:13:08 -04:00

31 lines
1.0 KiB
LLVM

; RUN: llvm-link %s %S/Inputs/nofpclass.ll -S -o - | FileCheck -check-prefix=ORDER1 %s
; RUN: llvm-link %S/Inputs/nofpclass.ll %s -S -o - | FileCheck -check-prefix=ORDER2 %s
; Make sure nofpclass is dropped if the function was declared as
; nofpclass, but not defined with nofpclass.
; ORDER1: define float @caller(float %arg) {
; ORDER1-NEXT: %result = call float @declared_as_nonan(float %arg)
; ORDER1-NEXT: ret float %result
; ORDER1: define float @declared_as_nonan(float %arg) {
; ORDER1-NEXT: %add = fadd float %arg, 1.000000e+00
; ORDER1-NEXT: ret float %add
; ORDER2: define float @declared_as_nonan(float %arg) {
; ORDER2-NEXT: %add = fadd float %arg, 1.000000e+00
; ORDER2-NEXT: ret float %add
; ORDER2: define float @caller(float %arg) {
; ORDER2-NEXT: %result = call float @declared_as_nonan(float %arg)
; ORDER2-NEXT: ret float %result
declare nofpclass(nan) float @declared_as_nonan(float nofpclass(nan))
define float @caller(float %arg) {
%result = call float @declared_as_nonan(float %arg)
ret float %result
}