[llvm] [IR] Add ByteCast opcode and ByteCastInst (PR #221884)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 7 23:07:37 PDT 2026
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions h,cpp -- llvm/include/llvm-c/Core.h llvm/include/llvm/Analysis/IR2Vec.h llvm/include/llvm/AsmParser/LLToken.h llvm/include/llvm/IR/Constants.h llvm/include/llvm/IR/InstVisitor.h llvm/include/llvm/IR/InstrTypes.h llvm/include/llvm/IR/Instruction.h llvm/include/llvm/IR/Instructions.h llvm/include/llvm/IR/Operator.h llvm/lib/AsmParser/LLLexer.cpp llvm/lib/AsmParser/LLParser.cpp llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h llvm/lib/IR/ConstantFold.cpp llvm/lib/IR/Constants.cpp llvm/lib/IR/Instruction.cpp llvm/lib/IR/Instructions.cpp llvm/lib/IR/Verifier.cpp llvm/tools/llubi/lib/Context.cpp llvm/tools/llubi/lib/Interpreter.cpp llvm/unittests/Analysis/IR2VecTest.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h
index f4431536d..3e2710f5f 100644
--- a/llvm/include/llvm-c/Core.h
+++ b/llvm/include/llvm-c/Core.h
@@ -60,94 +60,94 @@ LLVM_C_EXTERN_C_BEGIN
/// to reorder them.
typedef enum {
/* Terminator Instructions */
- LLVMRet = 1,
+ LLVMRet = 1,
/* removed 2 due to API changes */
- LLVMUncondBr = 70,
- LLVMCondBr = 71,
- LLVMSwitch = 3,
- LLVMIndirectBr = 4,
- LLVMInvoke = 5,
+ LLVMUncondBr = 70,
+ LLVMCondBr = 71,
+ LLVMSwitch = 3,
+ LLVMIndirectBr = 4,
+ LLVMInvoke = 5,
/* removed 6 due to API changes */
- LLVMUnreachable = 7,
- LLVMCallBr = 67,
+ LLVMUnreachable = 7,
+ LLVMCallBr = 67,
/* Standard Unary Operators */
- LLVMFNeg = 66,
+ LLVMFNeg = 66,
/* Standard Binary Operators */
- LLVMAdd = 8,
- LLVMFAdd = 9,
- LLVMSub = 10,
- LLVMFSub = 11,
- LLVMMul = 12,
- LLVMFMul = 13,
- LLVMUDiv = 14,
- LLVMSDiv = 15,
- LLVMFDiv = 16,
- LLVMURem = 17,
- LLVMSRem = 18,
- LLVMFRem = 19,
+ LLVMAdd = 8,
+ LLVMFAdd = 9,
+ LLVMSub = 10,
+ LLVMFSub = 11,
+ LLVMMul = 12,
+ LLVMFMul = 13,
+ LLVMUDiv = 14,
+ LLVMSDiv = 15,
+ LLVMFDiv = 16,
+ LLVMURem = 17,
+ LLVMSRem = 18,
+ LLVMFRem = 19,
/* Logical Operators */
- LLVMShl = 20,
- LLVMLShr = 21,
- LLVMAShr = 22,
- LLVMAnd = 23,
- LLVMOr = 24,
- LLVMXor = 25,
+ LLVMShl = 20,
+ LLVMLShr = 21,
+ LLVMAShr = 22,
+ LLVMAnd = 23,
+ LLVMOr = 24,
+ LLVMXor = 25,
/* Memory Operators */
- LLVMAlloca = 26,
- LLVMLoad = 27,
- LLVMStore = 28,
- LLVMGetElementPtr = 29,
+ LLVMAlloca = 26,
+ LLVMLoad = 27,
+ LLVMStore = 28,
+ LLVMGetElementPtr = 29,
/* Cast Operators */
- LLVMTrunc = 30,
- LLVMZExt = 31,
- LLVMSExt = 32,
- LLVMFPToUI = 33,
- LLVMFPToSI = 34,
- LLVMUIToFP = 35,
- LLVMSIToFP = 36,
- LLVMFPTrunc = 37,
- LLVMFPExt = 38,
- LLVMPtrToInt = 39,
- LLVMPtrToAddr = 69,
- LLVMIntToPtr = 40,
- LLVMBitCast = 41,
- LLVMByteCast = 72,
- LLVMAddrSpaceCast = 60,
+ LLVMTrunc = 30,
+ LLVMZExt = 31,
+ LLVMSExt = 32,
+ LLVMFPToUI = 33,
+ LLVMFPToSI = 34,
+ LLVMUIToFP = 35,
+ LLVMSIToFP = 36,
+ LLVMFPTrunc = 37,
+ LLVMFPExt = 38,
+ LLVMPtrToInt = 39,
+ LLVMPtrToAddr = 69,
+ LLVMIntToPtr = 40,
+ LLVMBitCast = 41,
+ LLVMByteCast = 72,
+ LLVMAddrSpaceCast = 60,
/* Other Operators */
- LLVMICmp = 42,
- LLVMFCmp = 43,
- LLVMPHI = 44,
- LLVMCall = 45,
- LLVMSelect = 46,
- LLVMUserOp1 = 47,
- LLVMUserOp2 = 48,
- LLVMVAArg = 49,
+ LLVMICmp = 42,
+ LLVMFCmp = 43,
+ LLVMPHI = 44,
+ LLVMCall = 45,
+ LLVMSelect = 46,
+ LLVMUserOp1 = 47,
+ LLVMUserOp2 = 48,
+ LLVMVAArg = 49,
LLVMExtractElement = 50,
- LLVMInsertElement = 51,
- LLVMShuffleVector = 52,
- LLVMExtractValue = 53,
- LLVMInsertValue = 54,
- LLVMFreeze = 68,
+ LLVMInsertElement = 51,
+ LLVMShuffleVector = 52,
+ LLVMExtractValue = 53,
+ LLVMInsertValue = 54,
+ LLVMFreeze = 68,
/* Atomic operators */
- LLVMFence = 55,
- LLVMAtomicCmpXchg = 56,
- LLVMAtomicRMW = 57,
+ LLVMFence = 55,
+ LLVMAtomicCmpXchg = 56,
+ LLVMAtomicRMW = 57,
/* Exception Handling Operators */
- LLVMResume = 58,
- LLVMLandingPad = 59,
- LLVMCleanupRet = 61,
- LLVMCatchRet = 62,
- LLVMCatchPad = 63,
- LLVMCleanupPad = 64,
- LLVMCatchSwitch = 65
+ LLVMResume = 58,
+ LLVMLandingPad = 59,
+ LLVMCleanupRet = 61,
+ LLVMCatchRet = 62,
+ LLVMCatchPad = 63,
+ LLVMCleanupPad = 64,
+ LLVMCatchSwitch = 65
} LLVMOpcode;
typedef enum {
diff --git a/llvm/include/llvm/IR/InstVisitor.h b/llvm/include/llvm/IR/InstVisitor.h
index 2176743e0..e51159b24 100644
--- a/llvm/include/llvm/IR/InstVisitor.h
+++ b/llvm/include/llvm/IR/InstVisitor.h
@@ -186,7 +186,7 @@ public:
RetTy visitPtrToAddrInst(PtrToAddrInst &I) { DELEGATE(CastInst);}
RetTy visitIntToPtrInst(IntToPtrInst &I) { DELEGATE(CastInst);}
RetTy visitBitCastInst(BitCastInst &I) { DELEGATE(CastInst);}
- RetTy visitByteCastInst(ByteCastInst &I) { DELEGATE(CastInst);}
+ RetTy visitByteCastInst(ByteCastInst &I) { DELEGATE(CastInst); }
RetTy visitAddrSpaceCastInst(AddrSpaceCastInst &I) { DELEGATE(CastInst);}
RetTy visitSelectInst(SelectInst &I) { DELEGATE(Instruction);}
RetTy visitVAArgInst(VAArgInst &I) { DELEGATE(UnaryInstruction);}
diff --git a/llvm/include/llvm/IR/InstrTypes.h b/llvm/include/llvm/IR/InstrTypes.h
index 22ca047ec..2878faf2a 100644
--- a/llvm/include/llvm/IR/InstrTypes.h
+++ b/llvm/include/llvm/IR/InstrTypes.h
@@ -88,8 +88,7 @@ public:
I->getOpcode() == Instruction::Load ||
I->getOpcode() == Instruction::VAArg ||
I->getOpcode() == Instruction::ExtractValue ||
- I->getOpcode() == Instruction::Freeze ||
- I->isCast();
+ I->getOpcode() == Instruction::Freeze || I->isCast();
}
static bool classof(const Value *V) {
return isa<Instruction>(V) && classof(cast<Instruction>(V));
diff --git a/llvm/include/llvm/IR/Operator.h b/llvm/include/llvm/IR/Operator.h
index 32482ac0c..b015d0f4a 100644
--- a/llvm/include/llvm/IR/Operator.h
+++ b/llvm/include/llvm/IR/Operator.h
@@ -619,13 +619,9 @@ public:
/// Transparently provide more efficient getOperand methods.
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
- Type *getSrcTy() const {
- return getOperand(0)->getType();
- }
+ Type *getSrcTy() const { return getOperand(0)->getType(); }
- Type *getDestTy() const {
- return getType();
- }
+ Type *getDestTy() const { return getType(); }
};
template <>
diff --git a/llvm/lib/AsmParser/LLLexer.cpp b/llvm/lib/AsmParser/LLLexer.cpp
index 0f2e348cf..7b9331041 100644
--- a/llvm/lib/AsmParser/LLLexer.cpp
+++ b/llvm/lib/AsmParser/LLLexer.cpp
@@ -963,7 +963,7 @@ lltok::Kind LLLexer::LexIdentifier() {
INSTKEYWORD(ptrtoaddr, PtrToAddr);
INSTKEYWORD(ptrtoint, PtrToInt);
INSTKEYWORD(bitcast, BitCast);
- INSTKEYWORD(bytecast, ByteCast);
+ INSTKEYWORD(bytecast, ByteCast);
INSTKEYWORD(addrspacecast, AddrSpaceCast);
INSTKEYWORD(select, Select);
INSTKEYWORD(va_arg, VAArg);
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 1216082cb..9f3ef1000 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -4167,9 +4167,7 @@ void SelectionDAGBuilder::visitBitCast(const User &I) {
setValue(&I, N); // noop cast.
}
-void SelectionDAGBuilder::visitByteCast(const User &I) {
- visitBitCast(I);
-}
+void SelectionDAGBuilder::visitByteCast(const User &I) { visitBitCast(I); }
void SelectionDAGBuilder::visitAddrSpaceCast(const User &I) {
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
diff --git a/llvm/lib/IR/Instruction.cpp b/llvm/lib/IR/Instruction.cpp
index 7139f9162..d6e0e5711 100644
--- a/llvm/lib/IR/Instruction.cpp
+++ b/llvm/lib/IR/Instruction.cpp
@@ -883,7 +883,8 @@ const char *Instruction::getOpcodeName(unsigned OpCode) {
case PtrToAddr: return "ptrtoaddr";
case PtrToInt: return "ptrtoint";
case BitCast: return "bitcast";
- case ByteCast: return "bytecast";
+ case ByteCast:
+ return "bytecast";
case AddrSpaceCast: return "addrspacecast";
// Other instructions...
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index f62bee830..2fd2f24ea 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -2860,7 +2860,7 @@ bool CastInst::isNoopCast(Instruction::CastOps Opcode,
case Instruction::BitCast:
return true; // BitCast never modifies bits.
case Instruction::ByteCast:
- return true; // ByteCast never modifies bits.
+ return true; // ByteCast never modifies bits.
case Instruction::PtrToAddr:
case Instruction::PtrToInt:
return DL.getIntPtrType(SrcTy)->getScalarSizeInBits() ==
@@ -2924,12 +2924,11 @@ unsigned CastInst::isEliminableCastPair(Instruction::CastOps firstOp,
// ByteCast deliberately has a non-contiguous opcode so introducing it does
// not renumber existing instructions. Handle combinations involving it
// conservatively before indexing the contiguous cast table.
- if (firstOp == Instruction::ByteCast ||
- secondOp == Instruction::ByteCast) {
- bool FirstIsNoop = firstOp == Instruction::BitCast ||
- firstOp == Instruction::ByteCast;
- bool SecondIsNoop = secondOp == Instruction::BitCast ||
- secondOp == Instruction::ByteCast;
+ if (firstOp == Instruction::ByteCast || secondOp == Instruction::ByteCast) {
+ bool FirstIsNoop =
+ firstOp == Instruction::BitCast || firstOp == Instruction::ByteCast;
+ bool SecondIsNoop =
+ secondOp == Instruction::BitCast || secondOp == Instruction::ByteCast;
if (!FirstIsNoop || !SecondIsNoop)
return 0;
@@ -3372,7 +3371,7 @@ CastInst::getCastOpcode(
else
return ZExt; // unsigned -> ZEXT
} else {
- return getNoopCastOpcode(SrcTy, DestTy); // Same size, No-op cast
+ return getNoopCastOpcode(SrcTy, DestTy); // Same size, No-op cast
}
} else if (SrcTy->isFloatingPointTy()) { // Casting from floating pt
if (DestIsSigned)
@@ -3382,7 +3381,7 @@ CastInst::getCastOpcode(
} else if (SrcTy->isVectorTy()) {
assert(DestBits == SrcBits &&
"Casting vector to integer of different width");
- return getNoopCastOpcode(SrcTy, DestTy); // Same size, no-op cast
+ return getNoopCastOpcode(SrcTy, DestTy); // Same size, no-op cast
} else {
assert(SrcTy->isPointerTy() &&
"Casting from a value that is not first-class type");
@@ -3400,12 +3399,12 @@ CastInst::getCastOpcode(
} else if (DestBits > SrcBits) {
return FPExt; // FP -> larger FP
} else {
- return getNoopCastOpcode(SrcTy, DestTy); // same size, no-op cast
+ return getNoopCastOpcode(SrcTy, DestTy); // same size, no-op cast
}
} else if (SrcTy->isVectorTy()) {
assert(DestBits == SrcBits &&
"Casting vector to floating point of different width");
- return getNoopCastOpcode(SrcTy, DestTy); // same size, no-op cast
+ return getNoopCastOpcode(SrcTy, DestTy); // same size, no-op cast
}
llvm_unreachable("Casting pointer or non-first class to float");
} else if (DestTy->isVectorTy()) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/221884
More information about the llvm-commits
mailing list