[llvm] 13ac4c3 - GlobalISel: Add buildBoolExtInReg helper
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 8 08:55:17 PDT 2022
Author: Matt Arsenault
Date: 2022-07-08T11:55:08-04:00
New Revision: 13ac4c3de9e0ef5c171f953bf301f87c652bf7ac
URL: https://github.com/llvm/llvm-project/commit/13ac4c3de9e0ef5c171f953bf301f87c652bf7ac
DIFF: https://github.com/llvm/llvm-project/commit/13ac4c3de9e0ef5c171f953bf301f87c652bf7ac.diff
LOG: GlobalISel: Add buildBoolExtInReg helper
Added:
Modified:
llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
index 8dda8695062c7..01fd5d94d3712 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
@@ -683,6 +683,13 @@ class MachineIRBuilder {
MachineInstrBuilder buildBoolExt(const DstOp &Res, const SrcOp &Op,
bool IsFP);
+ // Build and insert \p Res = G_SEXT_INREG \p Op, 1 or \p Res = G_AND \p Op, 1,
+ // or COPY depending on how the target wants to extend boolean values, using
+ // the original register size.
+ MachineInstrBuilder buildBoolExtInReg(const DstOp &Res, const SrcOp &Op,
+ bool IsVector,
+ bool IsFP);
+
/// Build and insert \p Res = G_ZEXT \p Op
///
/// G_ZEXT produces a register of the specified width, with bits 0 to
diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
index 9fed066e8bbfe..0d9580e25606c 100644
--- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
@@ -473,6 +473,23 @@ MachineInstrBuilder MachineIRBuilder::buildBoolExt(const DstOp &Res,
return buildInstr(ExtOp, Res, Op);
}
+MachineInstrBuilder MachineIRBuilder::buildBoolExtInReg(const DstOp &Res,
+ const SrcOp &Op,
+ bool IsVector,
+ bool IsFP) {
+ const auto *TLI = getMF().getSubtarget().getTargetLowering();
+ switch (TLI->getBooleanContents(IsVector, IsFP)) {
+ case TargetLoweringBase::ZeroOrNegativeOneBooleanContent:
+ return buildSExtInReg(Res, Op, 1);
+ case TargetLoweringBase::ZeroOrOneBooleanContent:
+ return buildZExtInReg(Res, Op, 1);
+ case TargetLoweringBase::UndefinedBooleanContent:
+ return buildCopy(Res, Op);
+ }
+
+ llvm_unreachable("unexpected BooleanContent");
+}
+
MachineInstrBuilder MachineIRBuilder::buildExtOrTrunc(unsigned ExtOpc,
const DstOp &Res,
const SrcOp &Op) {
More information about the llvm-commits
mailing list