[llvm] IR: introduce struct with CmpInst::Predicate and samesign (PR #116867)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 20 01:57:34 PST 2024
================
@@ -0,0 +1,40 @@
+//===- CmpPredicate.h - CmpInst Predicate with samesign information -------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// A CmpInst::Predicate with any samesign information (applicable to ICmpInst).
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_IR_CMPPREDICATE_H
+#define LLVM_IR_CMPPREDICATE_H
+
+#include "llvm/IR/InstrTypes.h"
+
+namespace llvm {
+/// An abstraction over a floating-point predicate, and a pack of an integer
+/// predicate with samesign information. The getCmpPredicate() family of
+/// functions in ICmpInst construct and return this type. It is also implictly
+/// constructed with a Predicate, dropping samesign information.
+class CmpPredicate {
+ CmpInst::Predicate Pred;
+ bool HasSameSign;
+
+public:
+ CmpPredicate(CmpInst::Predicate Pred, bool HasSameSign = false)
+ : Pred(Pred), HasSameSign(HasSameSign) {}
+
+ operator CmpInst::Predicate() { return Pred; }
+
+ bool hasSameSign() {
+ assert(CmpInst::isIntPredicate(Pred));
+ return HasSameSign;
+ }
----------------
nikic wrote:
How does `==` on this class currently behave, if you use two CmpPredicates? Does it just compare the predicates without samesign or does it fail to compile? If the former, is that the behavior we expect?
https://github.com/llvm/llvm-project/pull/116867
More information about the llvm-commits
mailing list