uweigand added a comment.

In D71467#1817939 <https://reviews.llvm.org/D71467#1817939>, @rjmccall wrote:

> Is this approach going to work with scope-local strictness?  We need a way to 
> do a comparison that has the non-strict properties but appears in a function 
> that enables strictness elsewhere.


Well, just like for all the other FP builder methods, you can use the 
setIsFPConstrained method on the builder object to switch between strict and 
non-strict mode.   Does this not suffice, or is there anything particular about 
the comparisons that would require anything extra?

> Please document the difference between these two methods.

OK, checked in header file comments as 6aca3e8 
<https://reviews.llvm.org/rG6aca3e8dfa228fb75e410e34db74982a0ab3939f>.

> Can you make a helper method for the common code in the non-constrained paths 
> here?

Would you prefer something like

  private:
    Value *CreateFCmpHelper(CmpInst::Predicate P, Value *LHS, Value *RHS,
                            const Twine &Name, MDNode *FPMathTag) {
      if (auto *LC = dyn_cast<Constant>(LHS))
        if (auto *RC = dyn_cast<Constant>(RHS))
          return Insert(Folder.CreateFCmp(P, LC, RC), Name);
      return Insert(setFPAttrs(new FCmpInst(P, LHS, RHS), FPMathTag, FMF), 
Name);
    }
  
  public:
    Value *CreateFCmp(CmpInst::Predicate P, Value *LHS, Value *RHS,
                      const Twine &Name = "", MDNode *FPMathTag = nullptr) {
      if (IsFPConstrained)
        return CreateConstrainedFPCmp(Intrinsic::experimental_constrained_fcmp,
                                      P, LHS, RHS, Name);
  
      return CreateFCmpHelper(P, LHS, RHS, Name, FPMathTag);
    }
    [...]

or rather something like:

  private:
    Value *CreateFCmpHelper(CmpInst::Predicate P, Value *LHS, Value *RHS,
                            bool IsSignaling, const Twine &Name, MDNode 
*FPMathTag) {
      if (IsFPConstrained)
        return CreateConstrainedFPCmp(IsSignaling ? 
Intrinsic::experimental_constrained_fcmps
                                                  : 
Intrinsic::experimental_constrained_fcmp,
                                      P, LHS, RHS, Name);
  
      if (auto *LC = dyn_cast<Constant>(LHS))
        if (auto *RC = dyn_cast<Constant>(RHS))
          return Insert(Folder.CreateFCmp(P, LC, RC), Name);
      return Insert(setFPAttrs(new FCmpInst(P, LHS, RHS), FPMathTag, FMF), 
Name);
    }
  
  public:
    Value *CreateFCmp(CmpInst::Predicate P, Value *LHS, Value *RHS,
                      const Twine &Name = "", MDNode *FPMathTag = nullptr) {
      return CreateFCmpHelper(P, LHS, RHS, false, Name, FPMathTag);
    }
    [...]

or maybe simply have CreateFCmpS call CreateFCmp directly in the non-strict 
case?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71467/new/

https://reviews.llvm.org/D71467



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to