-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[NFC][LLVM][TableGen] Use decodeULEB128
for OPC_SoftFail
emission
#136220
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # 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 ```
…llvm#136220) - Use `decodeULEB128` to decode +ve/-ve mask in OPC_SoftFail case. - Use current `I`/`E` iterators as inputs to `decodeULEB128`.
- Avoid dereferencing the end() iterator to get the end pointer, instead calculate it explicitly - Fixes a regression introduced in llvm#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 | llvm#1 0x00007ff74bbd3d64 `anonymous namespace'::DecoderEmitter::emitTable D:\buildbot\llvm-worker\clang-cmake-x86_64-avx512-win\llvm\llvm\utils\TableGen\DecoderEmitter.cpp:852:0 ```
- Avoid dereferencing the end() iterator to get the end pointer, instead calculate it explicitly - Fixes a regression introduced in llvm#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 | llvm#1 0x00007ff74bbd3d64 `anonymous namespace'::DecoderEmitter::emitTable D:\buildbot\llvm-worker\clang-cmake-x86_64-avx512-win\llvm\llvm\utils\TableGen\DecoderEmitter.cpp:852:0 ```
…llvm#136220) - Use `decodeULEB128` to decode +ve/-ve mask in OPC_SoftFail case. - Use current `I`/`E` iterators as inputs to `decodeULEB128`.
- Avoid dereferencing the end() iterator to get the end pointer, instead calculate it explicitly - Fixes a regression introduced in llvm#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 | llvm#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
.