-
Notifications
You must be signed in to change notification settings - Fork 13.4k
[NFC][LLVM][TableGen] Use decodeULEB128
for OPC_SoftFail
emission
#136220
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NFC][LLVM][TableGen] Use decodeULEB128
for OPC_SoftFail
emission
#136220
Conversation
fbee99a
to
e1820b7
Compare
- Use `decodeULEB128` to decode +ve/-ve mask in OPC_SoftFail case. - Use current I/E iterators as inputs to `decodeULEB128`.
e1820b7
to
c446bc2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@llvm/pr-subscribers-tablegen Author: Rahul Joshi (jurahul) Changes
Full diff: https://github.com/llvm/llvm-project/pull/136220.diff 1 Files Affected:
diff --git a/llvm/utils/TableGen/DecoderEmitter.cpp b/llvm/utils/TableGen/DecoderEmitter.cpp
index 9c6015cc24576..0f775673e599f 100644
--- a/llvm/utils/TableGen/DecoderEmitter.cpp
+++ b/llvm/utils/TableGen/DecoderEmitter.cpp
@@ -849,8 +849,7 @@ void DecoderEmitter::emitTable(formatted_raw_ostream &OS, DecoderTable &Table,
// ULEB128 encoded start value.
const char *ErrMsg = nullptr;
- unsigned Start = decodeULEB128(Table.data() + Pos + 1, nullptr,
- Table.data() + Table.size(), &ErrMsg);
+ unsigned Start = decodeULEB128(&*I, nullptr, &*E, &ErrMsg);
assert(ErrMsg == nullptr && "ULEB128 value too large!");
emitULEB128(I, OS);
@@ -904,8 +903,7 @@ void DecoderEmitter::emitTable(formatted_raw_ostream &OS, DecoderTable &Table,
++I;
// Decode the Opcode value.
const char *ErrMsg = nullptr;
- unsigned Opc = decodeULEB128(Table.data() + Pos + 1, nullptr,
- Table.data() + Table.size(), &ErrMsg);
+ unsigned Opc = decodeULEB128(&*I, nullptr, &*E, &ErrMsg);
assert(ErrMsg == nullptr && "ULEB128 value too large!");
OS << Indent << "MCD::OPC_" << (IsTry ? "Try" : "") << "Decode, ";
@@ -934,34 +932,22 @@ void DecoderEmitter::emitTable(formatted_raw_ostream &OS, DecoderTable &Table,
}
case MCD::OPC_SoftFail: {
++I;
- OS << Indent << "MCD::OPC_SoftFail";
- // Positive mask
- uint64_t Value = 0;
- unsigned Shift = 0;
- do {
- OS << ", " << (unsigned)*I;
- Value += ((uint64_t)(*I & 0x7f)) << Shift;
- Shift += 7;
- } while (*I++ >= 128);
- if (Value > 127) {
- OS << " /* 0x";
- OS.write_hex(Value);
- OS << " */";
- }
- // Negative mask
- Value = 0;
- Shift = 0;
- do {
- OS << ", " << (unsigned)*I;
- Value += ((uint64_t)(*I & 0x7f)) << Shift;
- Shift += 7;
- } while (*I++ >= 128);
- if (Value > 127) {
- OS << " /* 0x";
- OS.write_hex(Value);
- OS << " */";
- }
- OS << ",\n";
+ OS << Indent << "MCD::OPC_SoftFail, ";
+ // Decode the positive mask.
+ const char *ErrMsg = nullptr;
+ uint64_t PositiveMask = decodeULEB128(&*I, nullptr, &*E, &ErrMsg);
+ assert(ErrMsg == nullptr && "ULEB128 value too large!");
+ emitULEB128(I, OS);
+
+ // Decode the negative mask.
+ uint64_t NegativeMask = decodeULEB128(&*I, nullptr, &*E, &ErrMsg);
+ assert(ErrMsg == nullptr && "ULEB128 value too large!");
+ emitULEB128(I, OS);
+ OS << "// +ve mask: 0x";
+ OS.write_hex(PositiveMask);
+ OS << ", -ve mask: 0x";
+ OS.write_hex(NegativeMask);
+ OS << '\n';
break;
}
case MCD::OPC_Fail: {
|
Thanks. |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/166/builds/1191 Here is the relevant piece of the build log for the reference
|
This seems to have causes a build failure on some Windows systems, I am fixing it here: |
- Avoid dereferencing the end() iterator to get the end pointer, instead calculate it explicitly - Fixes a regression introduced in #136220. - The windows build failure shows the following call stack: ``` | Exception Code: 0x80000003 | #0 0x00007ff74bc05897 std::_Vector_const_iterator<class std::_Vector_val<struct std::_Simple_types<unsigned char>>>::operator*(void) const C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.37.32822\include\vector:52:0 | #1 0x00007ff74bbd3d64 `anonymous namespace'::DecoderEmitter::emitTable D:\buildbot\llvm-worker\clang-cmake-x86_64-avx512-win\llvm\llvm\utils\TableGen\DecoderEmitter.cpp:852:0 ```
…36310) - Avoid dereferencing the end() iterator to get the end pointer, instead calculate it explicitly - Fixes a regression introduced in llvm/llvm-project#136220. - The windows build failure shows the following call stack: ``` | Exception Code: 0x80000003 | #0 0x00007ff74bc05897 std::_Vector_const_iterator<class std::_Vector_val<struct std::_Simple_types<unsigned char>>>::operator*(void) const C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.37.32822\include\vector:52:0 | #1 0x00007ff74bbd3d64 `anonymous namespace'::DecoderEmitter::emitTable D:\buildbot\llvm-worker\clang-cmake-x86_64-avx512-win\llvm\llvm\utils\TableGen\DecoderEmitter.cpp:852:0 ```
decodeULEB128
to decode +ve/-ve mask in OPC_SoftFail case.I
/E
iterators as inputs todecodeULEB128
.