[llvm] [X86][GlobalISel] Support globals in pic mode (PR #170038)

Evgenii Kudriashov via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 30 07:04:09 PST 2025


https://github.com/e-kud created https://github.com/llvm/llvm-project/pull/170038

Introduce G_TARGET_GLOBAL_VALUE. It is similar to TargetGlobalAddress in DAG. Essentially it is required to make legalization possible when a load from stub is required to obtain a pointer to a global value.

It makes possible to use GlobalISel as a solo selector with simple programs on X86.

Also added a missing check on X86SelectAddress failure.

>From ecf08961e61d5aabbfe0493318f1123c2db8cb27 Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Sun, 30 Nov 2025 06:32:56 -0800
Subject: [PATCH] [X86][GlobalISel] Support globals in pic mode

Introduce G_TARGET_GLOBAL_VALUE. It is similar to TargetGlobalAddress in
SDAG. Essentially it is required to make legalization possible when a
load from stub is required to obtain a poitner to the global value.

It makes possible to use GlobalISel as a solo selector with simple
programs on X86.

Also added a missing check on X86SelectAddress failure.
---
 llvm/docs/GlobalISel/GenericOpcode.rst        | 10 +++
 .../CodeGen/GlobalISel/MachineIRBuilder.h     | 14 +++
 llvm/include/llvm/Support/TargetOpcodes.def   |  5 ++
 llvm/include/llvm/Target/GenericOpcodes.td    |  6 ++
 .../CodeGen/GlobalISel/MachineIRBuilder.cpp   | 14 +++
 .../X86/GISel/X86InstructionSelector.cpp      | 13 ++-
 .../lib/Target/X86/GISel/X86LegalizerInfo.cpp | 29 ++++++-
 llvm/lib/Target/X86/GISel/X86LegalizerInfo.h  |  3 +
 .../Inputs/reference_x86_vocab_print.txt      |  1 +
 .../reference_x86_vocab_wo=0.5_print.txt      |  1 +
 llvm/test/CodeGen/X86/GlobalISel/GV.ll        | 85 ++++++++++++++-----
 .../X86/GlobalISel/x86_64-legalize-GV.mir     |  6 +-
 .../match-table-cxx.td                        |  2 +-
 .../GlobalISelEmitter/GlobalISelEmitter.td    |  2 +-
 14 files changed, 160 insertions(+), 31 deletions(-)

diff --git a/llvm/docs/GlobalISel/GenericOpcode.rst b/llvm/docs/GlobalISel/GenericOpcode.rst
index 329d9d13ebddd..9c0654897703d 100644
--- a/llvm/docs/GlobalISel/GenericOpcode.rst
+++ b/llvm/docs/GlobalISel/GenericOpcode.rst
@@ -60,6 +60,16 @@ The address of a global value.
 
   %0(p0) = G_GLOBAL_VALUE @var_local
 
+G_TARGET_GLOBAL_VALUE
+^^^^^^^^^^^^^^^^^^^^^
+
+Like G_GLOBAL_VALUE, but GlobalISel does no folding or anything else with this
+node, and this is valid in the target-specific selection.
+
+.. code-block:: none
+
+  %0(p0) = G_TARGET_GLOBAL_VALUE @var_global
+
 G_PTRAUTH_GLOBAL_VALUE
 ^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
index 5f3f1d386569c..59a1ee4bf8210 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
@@ -496,6 +496,20 @@ class LLVM_ABI MachineIRBuilder {
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildGlobalValue(const DstOp &Res, const GlobalValue *GV);
 
+  /// Build and insert \p Res = G_TARGET_GLOBAL_VALUE \p GV
+  ///
+  /// G_TARGET_GLOBAL_VALUE materializes the address of the specified global
+  /// into \p Res. It is a version of G_GLOBAL_VALUE for target specific
+  /// legalization of global addresses.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res must be a generic virtual register with pointer type
+  ///      in the same address space as \p GV.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildTargetGlobalValue(const DstOp &Res,
+                                             const GlobalValue *GV);
+
   /// Build and insert \p Res = G_CONSTANT_POOL \p Idx
   ///
   /// G_CONSTANT_POOL materializes the address of an object in the constant
diff --git a/llvm/include/llvm/Support/TargetOpcodes.def b/llvm/include/llvm/Support/TargetOpcodes.def
index 341fc5e50b33c..c7afd1bdd1024 100644
--- a/llvm/include/llvm/Support/TargetOpcodes.def
+++ b/llvm/include/llvm/Support/TargetOpcodes.def
@@ -322,6 +322,11 @@ HANDLE_TARGET_OPCODE(G_FRAME_INDEX)
 /// Generic reference to global value.
 HANDLE_TARGET_OPCODE(G_GLOBAL_VALUE)
 
+/// Generic target specific reference to a global value (typically for
+/// distinguishing already legalized and not yet legalized refrence to a global
+/// value).
+HANDLE_TARGET_OPCODE(G_TARGET_GLOBAL_VALUE)
+
 /// Generic ptrauth-signed reference to global value.
 HANDLE_TARGET_OPCODE(G_PTRAUTH_GLOBAL_VALUE)
 
diff --git a/llvm/include/llvm/Target/GenericOpcodes.td b/llvm/include/llvm/Target/GenericOpcodes.td
index 1b65b8b73527d..08df4e48ec6e8 100644
--- a/llvm/include/llvm/Target/GenericOpcodes.td
+++ b/llvm/include/llvm/Target/GenericOpcodes.td
@@ -131,6 +131,12 @@ def G_GLOBAL_VALUE : GenericInstruction {
   let hasSideEffects = false;
 }
 
+def G_TARGET_GLOBAL_VALUE : GenericInstruction {
+  let OutOperandList = (outs ptype0:$dst);
+  let InOperandList = (ins unknown:$src);
+  let hasSideEffects = false;
+}
+
 def G_PTRAUTH_GLOBAL_VALUE : GenericInstruction {
   let OutOperandList = (outs type0:$dst);
   let InOperandList = (ins unknown:$addr, i32imm:$key, type1:$addrdisc, i64imm:$disc);
diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
index 3906b311addf0..08bda5fbce223 100644
--- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
@@ -170,6 +170,20 @@ MachineInstrBuilder MachineIRBuilder::buildGlobalValue(const DstOp &Res,
   return MIB;
 }
 
+MachineInstrBuilder
+MachineIRBuilder::buildTargetGlobalValue(const DstOp &Res,
+                                         const GlobalValue *GV) {
+  assert(Res.getLLTTy(*getMRI()).isPointer() && "invalid operand type");
+  assert(Res.getLLTTy(*getMRI()).getAddressSpace() ==
+             GV->getType()->getAddressSpace() &&
+         "address space mismatch");
+
+  auto MIB = buildInstr(TargetOpcode::G_TARGET_GLOBAL_VALUE);
+  Res.addDefToMIB(*getMRI(), MIB);
+  MIB.addGlobalAddress(GV);
+  return MIB;
+}
+
 MachineInstrBuilder MachineIRBuilder::buildConstantPool(const DstOp &Res,
                                                         unsigned Idx) {
   assert(Res.getLLTTy(*getMRI()).isPointer() && "invalid operand type");
diff --git a/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp b/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp
index f499e6f9d0799..675284cc58f52 100644
--- a/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp
+++ b/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp
@@ -627,7 +627,8 @@ static bool X86SelectAddress(MachineInstr &I, const X86TargetMachine &TM,
     }
     break;
   }
-  case TargetOpcode::G_GLOBAL_VALUE: {
+  case TargetOpcode::G_GLOBAL_VALUE:
+  case TargetOpcode::G_TARGET_GLOBAL_VALUE: {
     auto GV = I.getOperand(1).getGlobal();
     if (GV->isThreadLocal()) {
       return false; // TODO: we don't support TLS yet.
@@ -638,15 +639,12 @@ static bool X86SelectAddress(MachineInstr &I, const X86TargetMachine &TM,
     AM.GV = GV;
     AM.GVOpFlags = STI.classifyGlobalReference(GV);
 
-    // TODO: The ABI requires an extra load. not supported yet.
-    if (isGlobalStubReference(AM.GVOpFlags))
-      return false;
-
     // TODO: This reference is relative to the pic base. not supported yet.
     if (isGlobalRelativeToPICBase(AM.GVOpFlags))
       return false;
 
-    if (STI.isPICStyleRIPRel()) {
+    if (STI.isPICStyleRIPRel() || AM.GVOpFlags == X86II::MO_GOTPCREL ||
+        AM.GVOpFlags == X86II::MO_GOTPCREL_NORELAX) {
       // Use rip-relative addressing.
       assert(AM.Base.Reg == 0 && AM.IndexReg == 0 &&
              "RIP-relative addresses can't have additional register operands");
@@ -1972,7 +1970,8 @@ X86InstructionSelector::selectAddr(MachineOperand &Root) const {
   MachineRegisterInfo &MRI = MI->getMF()->getRegInfo();
   MachineInstr *Ptr = MRI.getVRegDef(Root.getReg());
   X86AddressMode AM;
-  X86SelectAddress(*Ptr, TM, MRI, STI, AM);
+  if (!X86SelectAddress(*Ptr, TM, MRI, STI, AM))
+    return std::nullopt;
 
   if (AM.IndexReg)
     return std::nullopt;
diff --git a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
index e792b1bce3c5c..dea0c70ec7b41 100644
--- a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
+++ b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
@@ -330,7 +330,10 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
       .widenScalarToNextPow2(1, /*Min*/ 32)
       .clampScalar(1, s32, sMaxScalar);
 
-  getActionDefinitionsBuilder({G_FRAME_INDEX, G_GLOBAL_VALUE}).legalFor({p0});
+  getActionDefinitionsBuilder({G_FRAME_INDEX, G_TARGET_GLOBAL_VALUE})
+      .legalFor({p0});
+
+  getActionDefinitionsBuilder(G_GLOBAL_VALUE).customFor({p0});
 
   // load/store: add more corner cases
   for (unsigned Op : {G_LOAD, G_STORE}) {
@@ -623,6 +626,8 @@ bool X86LegalizerInfo::legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI,
     return legalizeGETROUNDING(MI, MRI, Helper);
   case TargetOpcode::G_SET_ROUNDING:
     return legalizeSETROUNDING(MI, MRI, Helper);
+  case TargetOpcode::G_GLOBAL_VALUE:
+    return legalizeGLOBAL_VALUE(MI, MRI, Helper);
   }
   llvm_unreachable("expected switch to return");
 }
@@ -993,6 +998,28 @@ bool X86LegalizerInfo::legalizeSETROUNDING(MachineInstr &MI,
   return true;
 }
 
+bool X86LegalizerInfo::legalizeGLOBAL_VALUE(MachineInstr &MI,
+                                            MachineRegisterInfo &MRI,
+                                            LegalizerHelper &Helper) const {
+  auto GV = MI.getOperand(1).getGlobal();
+  Register Dst = MI.getOperand(0).getReg();
+  LLT DstTy = MRI.getType(Dst);
+  auto GVOpFlags = Subtarget.classifyGlobalReference(GV);
+
+  if (isGlobalStubReference(GVOpFlags)) {
+    MachineIRBuilder &MIRBuilder = Helper.MIRBuilder;
+    MachineFunction &MF = MIRBuilder.getMF();
+
+    auto StubAddr = MIRBuilder.buildTargetGlobalValue(DstTy, GV);
+    auto MMO = MF.getMachineMemOperand(MachinePointerInfo::getGOT(MF),
+                                       MachineMemOperand::MOLoad, DstTy,
+                                       Align(DstTy.getSizeInBytes()));
+    MIRBuilder.buildLoad(Dst, StubAddr, *MMO);
+    MI.eraseFromParent();
+  }
+  return true;
+}
+
 bool X86LegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
                                          MachineInstr &MI) const {
   return true;
diff --git a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.h b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.h
index 09c727c8e8685..58be7bb7d02b8 100644
--- a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.h
+++ b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.h
@@ -60,6 +60,9 @@ class X86LegalizerInfo : public LegalizerInfo {
 
   bool legalizeSETROUNDING(MachineInstr &MI, MachineRegisterInfo &MRI,
                            LegalizerHelper &Helper) const;
+
+  bool legalizeGLOBAL_VALUE(MachineInstr &MI, MachineRegisterInfo &MRI,
+                            LegalizerHelper &Helper) const;
 };
 } // namespace llvm
 #endif
diff --git a/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_print.txt b/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_print.txt
index 74ef1e608d4ba..6d8d0f3ce89ce 100644
--- a/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_print.txt
+++ b/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_print.txt
@@ -533,6 +533,7 @@ Key: G_STRICT_FREM:  [ 0.00  0.00 ]
 Key: G_STRICT_FSQRT:  [ 0.00  0.00 ]
 Key: G_STRICT_FSUB:  [ 0.00  0.00 ]
 Key: G_SUB:  [ 0.00  0.00 ]
+Key: G_TARGET_GLOBAL_VALUE:  [ 0.00  0.00 ]
 Key: G_TRAP:  [ 0.00  0.00 ]
 Key: G_TRUNC:  [ 0.00  0.00 ]
 Key: G_TRUNC_SSAT_S:  [ 0.00  0.00 ]
diff --git a/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_wo=0.5_print.txt b/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_wo=0.5_print.txt
index 1ba4f13e69c92..69b7c4926bc79 100644
--- a/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_wo=0.5_print.txt
+++ b/llvm/test/CodeGen/MIR2Vec/Inputs/reference_x86_vocab_wo=0.5_print.txt
@@ -533,6 +533,7 @@ Key: G_STRICT_FREM:  [ 0.00  0.00 ]
 Key: G_STRICT_FSQRT:  [ 0.00  0.00 ]
 Key: G_STRICT_FSUB:  [ 0.00  0.00 ]
 Key: G_SUB:  [ 0.00  0.00 ]
+Key: G_TARGET_GLOBAL_VALUE:  [ 0.00  0.00 ]
 Key: G_TRAP:  [ 0.00  0.00 ]
 Key: G_TRUNC:  [ 0.00  0.00 ]
 Key: G_TRUNC_SSAT_S:  [ 0.00  0.00 ]
diff --git a/llvm/test/CodeGen/X86/GlobalISel/GV.ll b/llvm/test/CodeGen/X86/GlobalISel/GV.ll
index c161a32fd6b95..aa64126edc4af 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/GV.ll
+++ b/llvm/test/CodeGen/X86/GlobalISel/GV.ll
@@ -1,13 +1,13 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=x86_64-linux-gnu    -global-isel -verify-machineinstrs                       < %s -o - | FileCheck %s --check-prefix=X64
 ; RUN: llc -mtriple=x86_64-apple-darwin -global-isel -verify-machineinstrs -relocation-model=pic < %s -o - | FileCheck %s --check-prefix=X64_DARWIN_PIC
-; RUN: llc -mtriple=i386-linux-gnu      -global-isel -verify-machineinstrs                       < %s -o - | FileCheck %s --check-prefix=X32
-; RUN: llc -mtriple=x86_64-linux-gnux32 -global-isel -verify-machineinstrs                       < %s -o - | FileCheck %s --check-prefix=X32ABI
+; RUN: llc -mtriple=i386-linux-gnu      -global-isel -verify-machineinstrs                       < %s -o - | FileCheck %s --check-prefix=X86
+; RUN: llc -mtriple=x86_64-linux-gnux32 -global-isel -verify-machineinstrs                       < %s -o - | FileCheck %s --check-prefix=X32
 
 @g_int = dso_local global i32 0, align 4
+ at g_int_stub = global i32 0, align 4
 
-; Function Attrs: noinline nounwind optnone uwtable
-define dso_local ptr @test_global_ptrv() #3 {
+define dso_local ptr @test_global_ptrv() {
 ; X64-LABEL: test_global_ptrv:
 ; X64:       # %bb.0: # %entry
 ; X64-NEXT:    leaq g_int, %rax
@@ -18,22 +18,21 @@ define dso_local ptr @test_global_ptrv() #3 {
 ; X64_DARWIN_PIC-NEXT:    leaq _g_int(%rip), %rax
 ; X64_DARWIN_PIC-NEXT:    retq
 ;
+; X86-LABEL: test_global_ptrv:
+; X86:       # %bb.0: # %entry
+; X86-NEXT:    leal g_int, %eax
+; X86-NEXT:    retl
+;
 ; X32-LABEL: test_global_ptrv:
 ; X32:       # %bb.0: # %entry
 ; X32-NEXT:    leal g_int, %eax
-; X32-NEXT:    retl
-;
-; X32ABI-LABEL: test_global_ptrv:
-; X32ABI:       # %bb.0: # %entry
-; X32ABI-NEXT:    leal g_int, %eax
-; X32ABI-NEXT:    movl %eax, %eax
-; X32ABI-NEXT:    retq
+; X32-NEXT:    movl %eax, %eax
+; X32-NEXT:    retq
 entry:
   ret ptr @g_int
 }
 
-; Function Attrs: noinline nounwind optnone uwtable
-define dso_local i32 @test_global_valv() #3 {
+define dso_local i32 @test_global_valv() {
 ; X64-LABEL: test_global_valv:
 ; X64:       # %bb.0: # %entry
 ; X64-NEXT:    movl g_int, %eax
@@ -44,17 +43,65 @@ define dso_local i32 @test_global_valv() #3 {
 ; X64_DARWIN_PIC-NEXT:    movl _g_int(%rip), %eax
 ; X64_DARWIN_PIC-NEXT:    retq
 ;
+; X86-LABEL: test_global_valv:
+; X86:       # %bb.0: # %entry
+; X86-NEXT:    movl g_int, %eax
+; X86-NEXT:    retl
+;
 ; X32-LABEL: test_global_valv:
 ; X32:       # %bb.0: # %entry
 ; X32-NEXT:    movl g_int, %eax
-; X32-NEXT:    retl
-;
-; X32ABI-LABEL: test_global_valv:
-; X32ABI:       # %bb.0: # %entry
-; X32ABI-NEXT:    movl g_int, %eax
-; X32ABI-NEXT:    retq
+; X32-NEXT:    retq
 entry:
   %0 = load i32, ptr @g_int, align 4
   ret i32 %0
 }
 
+define dso_local ptr @test_global_stub_ptrv() {
+; X64-LABEL: test_global_stub_ptrv:
+; X64:       # %bb.0:
+; X64-NEXT:    movq g_int_stub at GOTPCREL(%rip), %rax
+; X64-NEXT:    retq
+;
+; X64_DARWIN_PIC-LABEL: test_global_stub_ptrv:
+; X64_DARWIN_PIC:       ## %bb.0:
+; X64_DARWIN_PIC-NEXT:    leaq _g_int_stub(%rip), %rax
+; X64_DARWIN_PIC-NEXT:    retq
+;
+; X86-LABEL: test_global_stub_ptrv:
+; X86:       # %bb.0:
+; X86-NEXT:    leal g_int_stub, %eax
+; X86-NEXT:    retl
+;
+; X32-LABEL: test_global_stub_ptrv:
+; X32:       # %bb.0:
+; X32-NEXT:    movl g_int_stub at GOTPCREL(%rip), %eax
+; X32-NEXT:    retq
+  ret ptr @g_int_stub
+}
+
+define dso_local i32 @test_global_stub_valv() {
+; X64-LABEL: test_global_stub_valv:
+; X64:       # %bb.0:
+; X64-NEXT:    movq g_int_stub at GOTPCREL(%rip), %rax
+; X64-NEXT:    movl (%rax), %eax
+; X64-NEXT:    retq
+;
+; X64_DARWIN_PIC-LABEL: test_global_stub_valv:
+; X64_DARWIN_PIC:       ## %bb.0:
+; X64_DARWIN_PIC-NEXT:    movl _g_int_stub(%rip), %eax
+; X64_DARWIN_PIC-NEXT:    retq
+;
+; X86-LABEL: test_global_stub_valv:
+; X86:       # %bb.0:
+; X86-NEXT:    movl g_int_stub, %eax
+; X86-NEXT:    retl
+;
+; X32-LABEL: test_global_stub_valv:
+; X32:       # %bb.0:
+; X32-NEXT:    movl g_int_stub at GOTPCREL(%rip), %eax
+; X32-NEXT:    movl (%eax), %eax
+; X32-NEXT:    retq
+  %val = load i32, ptr @g_int_stub, align 4
+  ret i32 %val
+}
diff --git a/llvm/test/CodeGen/X86/GlobalISel/x86_64-legalize-GV.mir b/llvm/test/CodeGen/X86/GlobalISel/x86_64-legalize-GV.mir
index e7c5d9b367941..e964a47547c0c 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/x86_64-legalize-GV.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/x86_64-legalize-GV.mir
@@ -15,10 +15,12 @@ alignment:       16
 legalized:       false
 regBankSelected: false
 # CHECK:      registers:
-# CHECK-NEXT:   - { id: 0, class: _, preferred-register: '', flags: [   ] }
+# CHECK-NEXT:   - { id: 0, class: _, preferred-register: '', flags: [ ] }
+# CHECK-NEXT:   - { id: 1, class: _, preferred-register: '', flags: [ ] }
 registers:
   - { id: 0, class: _, preferred-register: '' }
-# CHECK:          %0:_(p0) = G_GLOBAL_VALUE @g_int
+# CHECK:          %1:_(p0) = G_TARGET_GLOBAL_VALUE @g_int
+# CHECK-NEXT:     %0:_(p0) = G_LOAD %1(p0) :: (load (p0) from got)
 # CHECK-NEXT:     $rax = COPY %0(p0)
 # CHECK-NEXT:     RET 0, implicit $rax
 body:             |
diff --git a/llvm/test/TableGen/GlobalISelCombinerEmitter/match-table-cxx.td b/llvm/test/TableGen/GlobalISelCombinerEmitter/match-table-cxx.td
index a8488ca3b8e6a..28017700a0448 100644
--- a/llvm/test/TableGen/GlobalISelCombinerEmitter/match-table-cxx.td
+++ b/llvm/test/TableGen/GlobalISelCombinerEmitter/match-table-cxx.td
@@ -96,7 +96,7 @@ def MyCombiner: GICombiner<"GenMyCombiner", [
 
 // CHECK:      const uint8_t *GenMyCombiner::getMatchTable() const {
 // CHECK-NEXT:   constexpr static uint8_t MatchTable0[] = {
-// CHECK-NEXT:      /*   0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(104), GIMT_Encode2(216), /*)*//*default:*//*Label 5*/ GIMT_Encode4(524),
+// CHECK-NEXT:      /*   0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(105), GIMT_Encode2(217), /*)*//*default:*//*Label 5*/ GIMT_Encode4(524),
 // CHECK-NEXT:      /* 10 */ /*TargetOpcode::G_STORE*//*Label 0*/ GIMT_Encode4(458), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
 // CHECK-NEXT:      /* 182 */ /*TargetOpcode::G_SEXT*//*Label 1*/ GIMT_Encode4(476), GIMT_Encode4(0),
 // CHECK-NEXT:      /* 190 */ /*TargetOpcode::G_ZEXT*//*Label 2*/ GIMT_Encode4(488), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
diff --git a/llvm/test/TableGen/GlobalISelEmitter/GlobalISelEmitter.td b/llvm/test/TableGen/GlobalISelEmitter/GlobalISelEmitter.td
index 64ca63da3b6f0..9809a43fcdddd 100644
--- a/llvm/test/TableGen/GlobalISelEmitter/GlobalISelEmitter.td
+++ b/llvm/test/TableGen/GlobalISelEmitter/GlobalISelEmitter.td
@@ -535,7 +535,7 @@ def : Pat<(frag GPR32:$src1, complex:$src2, complex:$src3),
 // R00O-NEXT:  GIM_Reject,
 // R00O:       // Label [[DEFAULT_NUM]]: @[[DEFAULT]]
 // R00O-NEXT:  GIM_Reject,
-// R00O-NEXT:  }; // Size: 1918 bytes
+// R00O-NEXT:  }; // Size: 1922 bytes
 
 def INSNBOB : I<(outs GPR32:$dst), (ins GPR32:$src1, GPR32:$src2, GPR32:$src3, GPR32:$src4),
                  [(set GPR32:$dst,



More information about the llvm-commits mailing list