[llvm] [TableGen][CodeEmitter] Refactor addCodeToMergeInOperand (NFC) (PR #158674)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 16 04:51:43 PDT 2025
================
@@ -216,52 +187,25 @@ bool CodeEmitterGen::addCodeToMergeInOperand(const Record *R,
--Bit;
}
- std::string MaskStr;
- int OpShift;
-
unsigned LoBit = BeginVarBit - N + 1;
- unsigned HiBit = LoBit + N;
unsigned LoInstBit = BeginInstBit - N + 1;
BitOffset = LoInstBit;
if (UseAPInt) {
- std::string ExtractStr;
- if (N >= 64) {
- ExtractStr = "op.extractBits(" + itostr(HiBit - LoBit) + ", " +
- itostr(LoBit) + ")";
- Case += " Value.insertBits(" + ExtractStr + ", " +
- itostr(LoInstBit) + ");\n";
- } else {
- ExtractStr = "op.extractBitsAsZExtValue(" + itostr(HiBit - LoBit) +
- ", " + itostr(LoBit) + ")";
- Case += " Value.insertBits(" + ExtractStr + ", " +
- itostr(LoInstBit) + ", " + itostr(HiBit - LoBit) + ");\n";
- }
+ if (N > 64)
+ OS << Indent << "Value.insertBits(op.extractBits(" << N << ", " << LoBit
+ << "), " << LoInstBit << ");\n";
+ else
+ OS << Indent << "Value.insertBits(op.extractBitsAsZExtValue(" << N
+ << ", " << LoBit << "), " << LoInstBit << ", " << N << ");\n";
} else {
- uint64_t OpMask = ~(uint64_t)0 >> (64 - N);
- OpShift = BeginVarBit - N + 1;
- OpMask <<= OpShift;
- MaskStr = "UINT64_C(" + utostr(OpMask) + ")";
- OpShift = BeginInstBit - BeginVarBit;
-
- if (NumOperandLits == 1) {
- Case += " op &= " + MaskStr + ";\n";
- if (OpShift > 0) {
- Case += " op <<= " + itostr(OpShift) + ";\n";
- } else if (OpShift < 0) {
- Case += " op >>= " + itostr(-OpShift) + ";\n";
- }
- Case += " Value |= op;\n";
- } else {
- if (OpShift > 0) {
- Case += " Value |= (op & " + MaskStr + ") << " +
- itostr(OpShift) + ";\n";
- } else if (OpShift < 0) {
- Case += " Value |= (op & " + MaskStr + ") >> " +
- itostr(-OpShift) + ";\n";
- } else {
- Case += " Value |= (op & " + MaskStr + ");\n";
- }
- }
+ uint64_t OpMask = maskTrailingOnes<uint64_t>(N) << LoBit;
+ OS << Indent << "Value |= (op & " << format_hex(OpMask, 0) << ')';
----------------
jurahul wrote:
I guess not, since op is uint64_t here, so it will get interpreted as a uint64_t.
https://github.com/llvm/llvm-project/pull/158674
More information about the llvm-commits
mailing list