[PATCH] D152993: [VP][RISCV] Add vp.is.fpclass and RISC-V support
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 22 05:59:46 PDT 2023
arsenm added inline comments.
================
Comment at: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:7930
+ SDNodeFlags SDFlags;
+ SDFlags.setNoFPExcept(
+ !MF.getFunction().getAttributes().hasFnAttr(llvm::Attribute::StrictFP));
----------------
liaolucy wrote:
> arsenm wrote:
> > craig.topper wrote:
> > > arsenm wrote:
> > > > This should be unnecessary, by definition this is not a floating point operation and cannot raise FP exceptions
> > > Doesn't this code also exist for Intrinsic::is_fpclass?
> > If it does it shouldn’t . Can either drop it or make it an unconditional true
> I tried to delete the flags in Intrinsic::is_fpclass and got the following diff for x86. Not sure if the diff is correct.
>
>
> ```
> diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> index f38957637b74..bc8b1dddef71 100644
> --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> @@ -6575,9 +6575,6 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
> MachineFunction &MF = DAG.getMachineFunction();
> const Function &F = MF.getFunction();
> SDValue Op = getValue(I.getArgOperand(0));
> - SDNodeFlags Flags;
> - Flags.setNoFPExcept(
> - !F.getAttributes().hasFnAttr(llvm::Attribute::StrictFP));
> // If ISD::IS_FPCLASS should be expanded, do it right now, because the
> // expansion can use illegal types. Making expansion early allows
> // legalizing these types prior to selection.
> diff --git a/llvm/test/CodeGen/X86/is_fpclass.ll b/llvm/test/CodeGen/X86/is_fpclass.ll
> index 6a531817e771..3b69011e3866 100644
> --- a/llvm/test/CodeGen/X86/is_fpclass.ll
> +++ b/llvm/test/CodeGen/X86/is_fpclass.ll
> @@ -5,18 +5,18 @@
> define i1 @isnan_f(float %x) {
> ; CHECK-32-LABEL: isnan_f:
> ; CHECK-32: # %bb.0: # %entry
> -; CHECK-32-NEXT: flds {{[0-9]+}}(%esp)
> -; CHECK-32-NEXT: fucomp %st(0)
> -; CHECK-32-NEXT: fnstsw %ax
> -; CHECK-32-NEXT: # kill: def $ah killed $ah killed $ax
> -; CHECK-32-NEXT: sahf
> -; CHECK-32-NEXT: setp %al
> +; CHECK-32-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
> +; CHECK-32-NEXT: andl {{[0-9]+}}(%esp), %eax
> +; CHECK-32-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
> +; CHECK-32-NEXT: setge %al
> ; CHECK-32-NEXT: retl
> ;
> ; CHECK-64-LABEL: isnan_f:
> ; CHECK-64: # %bb.0: # %entry
> -; CHECK-64-NEXT: ucomiss %xmm0, %xmm0
> -; CHECK-64-NEXT: setp %al
> +; CHECK-64-NEXT: movd %xmm0, %eax
> +; CHECK-64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
> +; CHECK-64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
> +; CHECK-64-NEXT: setge %al
> ; CHECK-64-NEXT: retq
> entry:
> %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 3) ; "nan"
> @@ -26,18 +26,18 @@ entry:
> ......
> ```
The expansion code should be considering strictfp on the parent function, not the node itself
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D152993/new/
https://reviews.llvm.org/D152993
More information about the llvm-commits
mailing list