xref: /llvm-project/llvm/unittests/CodeGen/GlobalISel/GIMatchTableExecutorTest.cpp (revision ed299b3efd669c02fa37773d1ae49fca3556f729)
1*ed299b3eSPierre van Houtryve //===- GIMatchTableExecutorTest.cpp ---------------------------------------===//
2*ed299b3eSPierre van Houtryve //
3*ed299b3eSPierre van Houtryve // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ed299b3eSPierre van Houtryve // See https://llvm.org/LICENSE.txt for license information.
5*ed299b3eSPierre van Houtryve // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*ed299b3eSPierre van Houtryve //
7*ed299b3eSPierre van Houtryve //===----------------------------------------------------------------------===//
8*ed299b3eSPierre van Houtryve 
9*ed299b3eSPierre van Houtryve #include "llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h"
10*ed299b3eSPierre van Houtryve #include "gtest/gtest.h"
11*ed299b3eSPierre van Houtryve 
12*ed299b3eSPierre van Houtryve using namespace llvm;
13*ed299b3eSPierre van Houtryve 
TEST(GlobalISelLEB128Test,fastDecodeULEB128)14*ed299b3eSPierre van Houtryve TEST(GlobalISelLEB128Test, fastDecodeULEB128) {
15*ed299b3eSPierre van Houtryve #define EXPECT_DECODE_ULEB128_EQ(EXPECTED, VALUE)                              \
16*ed299b3eSPierre van Houtryve   do {                                                                         \
17*ed299b3eSPierre van Houtryve     uint64_t ActualSize = 0;                                                   \
18*ed299b3eSPierre van Houtryve     uint64_t Actual = GIMatchTableExecutor::fastDecodeULEB128(                 \
19*ed299b3eSPierre van Houtryve         reinterpret_cast<const uint8_t *>(VALUE), ActualSize);                 \
20*ed299b3eSPierre van Houtryve     EXPECT_EQ(sizeof(VALUE) - 1, ActualSize);                                  \
21*ed299b3eSPierre van Houtryve     EXPECT_EQ(EXPECTED, Actual);                                               \
22*ed299b3eSPierre van Houtryve   } while (0)
23*ed299b3eSPierre van Houtryve 
24*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0u, "\x00");
25*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(1u, "\x01");
26*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(63u, "\x3f");
27*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(64u, "\x40");
28*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x7fu, "\x7f");
29*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x01");
30*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x81u, "\x81\x01");
31*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x90u, "\x90\x01");
32*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0xffu, "\xff\x01");
33*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x100u, "\x80\x02");
34*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x101u, "\x81\x02");
35*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(4294975616ULL, "\x80\xc1\x80\x80\x10");
36*ed299b3eSPierre van Houtryve 
37*ed299b3eSPierre van Houtryve   // Decode ULEB128 with extra padding bytes
38*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0u, "\x80\x00");
39*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0u, "\x80\x80\x00");
40*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x7fu, "\xff\x00");
41*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x7fu, "\xff\x80\x00");
42*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x81\x00");
43*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x81\x80\x00");
44*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x80u, "\x80\x81\x80\x80\x80\x80\x80\x80\x80\x00");
45*ed299b3eSPierre van Houtryve   EXPECT_DECODE_ULEB128_EQ(0x80000000'00000000ul,
46*ed299b3eSPierre van Houtryve                            "\x80\x80\x80\x80\x80\x80\x80\x80\x80\x01");
47*ed299b3eSPierre van Houtryve 
48*ed299b3eSPierre van Houtryve #undef EXPECT_DECODE_ULEB128_EQ
49*ed299b3eSPierre van Houtryve }
50