This pass emits a floating point compare and a conditional branch, but if strictfp is enabled we don't emit a constrained compare intrinsic. The backend also won't expand the readonly sqrt call this pass inserts to a sqrt instruction under strictfp. So we end up with 2 libcalls as seen here. https://godbolt.org/z/oax5zMEWd Fix these things by disabling the pass. Differential Revision: https://reviews.llvm.org/D104479
13 lines
412 B
LLVM
13 lines
412 B
LLVM
; RUN: opt -S -partially-inline-libcalls -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
|
|
; RUN: opt -S -passes=partially-inline-libcalls -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
|
|
|
|
define float @f(float %val) strictfp {
|
|
; CHECK-LABEL: @f
|
|
; CHECK: call{{.*}}@sqrtf
|
|
; CHECK-NOT: call{{.*}}@sqrtf
|
|
%res = tail call float @sqrtf(float %val) strictfp
|
|
ret float %res
|
|
}
|
|
|
|
declare float @sqrtf(float)
|