Skip to content

Conversation

@phoebewang
Copy link
Contributor

The goal is to remove redundant TEST*ri instructions, especially with NF feature. Other tests are side effects due to longer live range of EFLAGS. https://godbolt.org/z/PbaTj1oa3

The goal is to remove redundant TEST*ri instructions, especially with
NF feature. Other tests are side effects due to longer live range of
EFLAGS. https://godbolt.org/z/PbaTj1oa3
@llvmbot
Copy link
Member

llvmbot commented Aug 27, 2025

@llvm/pr-subscribers-backend-x86

Author: Phoebe Wang (phoebewang)

Changes

The goal is to remove redundant TEST*ri instructions, especially with NF feature. Other tests are side effects due to longer live range of EFLAGS. https://godbolt.org/z/PbaTj1oa3


Full diff: https://github.com/llvm/llvm-project/pull/155586.diff

6 Files Affected:

  • (modified) llvm/lib/Target/X86/X86InstrInfo.cpp (+8)
  • (modified) llvm/test/CodeGen/X86/2007-11-30-LoadFolding-Bug.ll (+5-6)
  • (modified) llvm/test/CodeGen/X86/2008-04-17-CoalescerBug.ll (+19-20)
  • (modified) llvm/test/CodeGen/X86/apx/cf.ll (+18)
  • (modified) llvm/test/CodeGen/X86/ins_subreg_coalesce-3.ll (+22-18)
  • (modified) llvm/test/CodeGen/X86/pr38795.ll (+2-5)
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp
index abf365eedec39..961ff22a2b10f 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.cpp
+++ b/llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -4841,6 +4841,10 @@ bool X86InstrInfo::analyzeCompare(const MachineInstr &MI, Register &SrcReg,
   case X86::CMP32ri:
   case X86::CMP16ri:
   case X86::CMP8ri:
+  case X86::TEST64ri32:
+  case X86::TEST32ri:
+  case X86::TEST16ri:
+  case X86::TEST8ri:
     SrcReg = MI.getOperand(0).getReg();
     SrcReg2 = 0;
     if (MI.getOperand(1).isImm()) {
@@ -4942,6 +4946,10 @@ bool X86InstrInfo::isRedundantFlagInstr(const MachineInstr &FlagI,
   case X86::CMP32ri:
   case X86::CMP16ri:
   case X86::CMP8ri:
+  case X86::TEST64ri32:
+  case X86::TEST32ri:
+  case X86::TEST16ri:
+  case X86::TEST8ri:
   CASE_ND(SUB64ri32)
   CASE_ND(SUB32ri)
   CASE_ND(SUB16ri)
diff --git a/llvm/test/CodeGen/X86/2007-11-30-LoadFolding-Bug.ll b/llvm/test/CodeGen/X86/2007-11-30-LoadFolding-Bug.ll
index 8d690ba06e3bd..6541693776099 100644
--- a/llvm/test/CodeGen/X86/2007-11-30-LoadFolding-Bug.ll
+++ b/llvm/test/CodeGen/X86/2007-11-30-LoadFolding-Bug.ll
@@ -13,25 +13,24 @@ define fastcc void @mp_sqrt(i32 %n, i32 %radix, ptr %in, ptr %out, ptr %tmp1, pt
 ; CHECK-NEXT:    pushl %edi
 ; CHECK-NEXT:    pushl %esi
 ; CHECK-NEXT:    pushl %eax
-; CHECK-NEXT:    movb $1, %cl
+; CHECK-NEXT:    movb $1, %al
 ; CHECK-NEXT:    movl $1, %ebx
 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %esi
 ; CHECK-NEXT:    .p2align 4
 ; CHECK-NEXT:  .LBB0_1: # %bb.i5
 ; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT:    movl %ecx, %eax
+; CHECK-NEXT:    movl %eax, %ecx
 ; CHECK-NEXT:    addl %ebx, %ebx
-; CHECK-NEXT:    xorl %ecx, %ecx
-; CHECK-NEXT:    testb $1, %al
+; CHECK-NEXT:    xorl %eax, %eax
+; CHECK-NEXT:    testb $1, %cl
 ; CHECK-NEXT:    jne .LBB0_1
 ; CHECK-NEXT:  # %bb.2: # %mp_unexp_mp2d.exit.i
 ; CHECK-NEXT:    je .LBB0_3
 ; CHECK-NEXT:  # %bb.5: # %cond_next.i
-; CHECK-NEXT:    testb $1, %al
 ; CHECK-NEXT:    jne .LBB0_3
 ; CHECK-NEXT:  # %bb.6: # %cond_next36.i
 ; CHECK-NEXT:    movl $0, 0
-; CHECK-NEXT:    movzbl %al, %ebp
+; CHECK-NEXT:    movzbl %cl, %ebp
 ; CHECK-NEXT:    andl $1, %ebp
 ; CHECK-NEXT:    xorpd %xmm0, %xmm0
 ; CHECK-NEXT:    xorl %eax, %eax
diff --git a/llvm/test/CodeGen/X86/2008-04-17-CoalescerBug.ll b/llvm/test/CodeGen/X86/2008-04-17-CoalescerBug.ll
index bf939c4131080..3913e93b83a66 100644
--- a/llvm/test/CodeGen/X86/2008-04-17-CoalescerBug.ll
+++ b/llvm/test/CodeGen/X86/2008-04-17-CoalescerBug.ll
@@ -38,7 +38,6 @@ define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(ptr noalias sret(%struct
 ; CHECK-NEXT:  ## %bb.1: ## %bb116.i
 ; CHECK-NEXT:    je LBB0_25
 ; CHECK-NEXT:  ## %bb.2: ## %bb52.i.i
-; CHECK-NEXT:    testb $1, %bl
 ; CHECK-NEXT:    je LBB0_25
 ; CHECK-NEXT:  ## %bb.3: ## %bb142.i
 ; CHECK-NEXT:    je LBB0_25
@@ -49,23 +48,23 @@ define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(ptr noalias sret(%struct
 ; CHECK-NEXT:    jmp LBB0_5
 ; CHECK-NEXT:  LBB0_21: ## %bb7806
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
-; CHECK-NEXT:  Ltmp16:
+; CHECK-NEXT:  Ltmp16: ## EH_LABEL
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $1, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, (%esp)
 ; CHECK-NEXT:    calll __ZN12wxStringBase6appendEmw
-; CHECK-NEXT:  Ltmp17:
+; CHECK-NEXT:  Ltmp17: ## EH_LABEL
 ; CHECK-NEXT:  LBB0_5: ## %bb3261
 ; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1
 ; CHECK-NEXT:    cmpl $37, 0
 ; CHECK-NEXT:    jne LBB0_25
 ; CHECK-NEXT:  ## %bb.6: ## %bb3306
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
-; CHECK-NEXT:  Ltmp0:
+; CHECK-NEXT:  Ltmp0: ## EH_LABEL
 ; CHECK-NEXT:    movl %edi, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, (%esp)
 ; CHECK-NEXT:    calll __ZN12wxStringBaseaSEPKw
-; CHECK-NEXT:  Ltmp1:
+; CHECK-NEXT:  Ltmp1: ## EH_LABEL
 ; CHECK-NEXT:  ## %bb.7: ## %bb3314
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
 ; CHECK-NEXT:    movl 0, %eax
@@ -89,11 +88,11 @@ define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(ptr noalias sret(%struct
 ; CHECK-NEXT:    je LBB0_14
 ; CHECK-NEXT:  ## %bb.13: ## %bb155.i8541
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
-; CHECK-NEXT:  Ltmp4:
+; CHECK-NEXT:  Ltmp4: ## EH_LABEL
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, (%esp)
 ; CHECK-NEXT:    calll _gmtime_r
-; CHECK-NEXT:  Ltmp5:
+; CHECK-NEXT:  Ltmp5: ## EH_LABEL
 ; CHECK-NEXT:  LBB0_14: ## %bb182.i8560
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
 ; CHECK-NEXT:    testb $1, %bl
@@ -103,7 +102,7 @@ define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(ptr noalias sret(%struct
 ; CHECK-NEXT:    je LBB0_18
 ; CHECK-NEXT:  ## %bb.17: ## %bb440.i8663
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
-; CHECK-NEXT:  Ltmp6:
+; CHECK-NEXT:  Ltmp6: ## EH_LABEL
 ; CHECK-NEXT:    movl L_.str4$non_lazy_ptr, %eax
 ; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl L_.str33$non_lazy_ptr, %eax
@@ -113,47 +112,47 @@ define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(ptr noalias sret(%struct
 ; CHECK-NEXT:    movl %ebp, (%esp)
 ; CHECK-NEXT:    movl $1717, {{[0-9]+}}(%esp) ## imm = 0x6B5
 ; CHECK-NEXT:    calll __Z10wxOnAssertPKwiPKcS0_S0_
-; CHECK-NEXT:  Ltmp7:
+; CHECK-NEXT:  Ltmp7: ## EH_LABEL
 ; CHECK-NEXT:    jmp LBB0_18
 ; CHECK-NEXT:  LBB0_15: ## %bb187.i8591
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
 ; CHECK-NEXT:    jne LBB0_25
 ; CHECK-NEXT:  LBB0_18: ## %invcont5814
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
-; CHECK-NEXT:  Ltmp8:
+; CHECK-NEXT:  Ltmp8: ## EH_LABEL
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, (%esp)
 ; CHECK-NEXT:    calll __ZN8wxString6FormatEPKwz
 ; CHECK-NEXT:    subl $4, %esp
-; CHECK-NEXT:  Ltmp9:
+; CHECK-NEXT:  Ltmp9: ## EH_LABEL
 ; CHECK-NEXT:  ## %bb.19: ## %invcont5831
 ; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
-; CHECK-NEXT:  Ltmp10:
+; CHECK-NEXT:  Ltmp10: ## EH_LABEL
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, (%esp)
 ; CHECK-NEXT:    calll __ZN12wxStringBase10ConcatSelfEmPKwm
-; CHECK-NEXT:  Ltmp11:
+; CHECK-NEXT:  Ltmp11: ## EH_LABEL
 ; CHECK-NEXT:    jmp LBB0_5
 ; CHECK-NEXT:  LBB0_9: ## %bb5657
-; CHECK-NEXT:  Ltmp13:
+; CHECK-NEXT:  Ltmp13: ## EH_LABEL
 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; CHECK-NEXT:    movl %eax, (%esp)
 ; CHECK-NEXT:    calll __ZNK10wxDateTime12GetDayOfYearERKNS_8TimeZoneE
-; CHECK-NEXT:  Ltmp14:
+; CHECK-NEXT:  Ltmp14: ## EH_LABEL
 ; CHECK-NEXT:    jmp LBB0_25
 ; CHECK-NEXT:  LBB0_20: ## %bb5968
-; CHECK-NEXT:  Ltmp2:
+; CHECK-NEXT:  Ltmp2: ## EH_LABEL
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl $0, (%esp)
 ; CHECK-NEXT:    calll __ZN8wxString6FormatEPKwz
 ; CHECK-NEXT:    subl $4, %esp
-; CHECK-NEXT:  Ltmp3:
+; CHECK-NEXT:  Ltmp3: ## EH_LABEL
 ; CHECK-NEXT:  LBB0_25: ## %bb115.critedge.i
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    addl $28, %esp
@@ -163,13 +162,13 @@ define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(ptr noalias sret(%struct
 ; CHECK-NEXT:    popl %ebp
 ; CHECK-NEXT:    retl $4
 ; CHECK-NEXT:  LBB0_23: ## %lpad.loopexit.split-lp
-; CHECK-NEXT:  Ltmp15:
+; CHECK-NEXT:  Ltmp15: ## EH_LABEL
 ; CHECK-NEXT:    jmp LBB0_25
 ; CHECK-NEXT:  LBB0_24: ## %lpad8185
-; CHECK-NEXT:  Ltmp12:
+; CHECK-NEXT:  Ltmp12: ## EH_LABEL
 ; CHECK-NEXT:    jmp LBB0_25
 ; CHECK-NEXT:  LBB0_22: ## %lpad.loopexit
-; CHECK-NEXT:  Ltmp18:
+; CHECK-NEXT:  Ltmp18: ## EH_LABEL
 ; CHECK-NEXT:    jmp LBB0_25
 ; CHECK-NEXT:  Lfunc_end0:
 entry:
diff --git a/llvm/test/CodeGen/X86/apx/cf.ll b/llvm/test/CodeGen/X86/apx/cf.ll
index e52ce6ca815bb..b2651e91134ee 100644
--- a/llvm/test/CodeGen/X86/apx/cf.ll
+++ b/llvm/test/CodeGen/X86/apx/cf.ll
@@ -229,3 +229,21 @@ entry:
   call void @llvm.masked.store.v1i32.p0(<1 x i32> zeroinitializer, ptr %p, i32 1, <1 x i1> %1)
   ret void
 }
+
+define i64 @redundant_test(i64 %num, ptr %p1, i64 %in) {
+; CHECK-LABEL: redundant_test:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    testl $-32, %edi
+; CHECK-NEXT:    cfcmoveq (%rsi), %rax
+; CHECK-NEXT:    {nf} addq %rdx, %rax
+; CHECK-NEXT:    cmovneq %rdi, %rax
+; CHECK-NEXT:    retq
+  %and = and i64 %num, 4294967264
+  %cmp = icmp eq i64 %and, 0
+  %mask = bitcast i1 %cmp to <1 x i1>
+  %condload = tail call <1 x i64> @llvm.masked.load.v1i64.p0(ptr %p1, i32 8, <1 x i1> %mask, <1 x i64> poison)
+  %v = bitcast <1 x i64> %condload to i64
+  %add = add i64 %v, %in
+  %sel = select i1 %cmp, i64 %add, i64 %num
+  ret i64 %sel
+}
diff --git a/llvm/test/CodeGen/X86/ins_subreg_coalesce-3.ll b/llvm/test/CodeGen/X86/ins_subreg_coalesce-3.ll
index 3ac0fd7746a30..eccb32346a403 100644
--- a/llvm/test/CodeGen/X86/ins_subreg_coalesce-3.ll
+++ b/llvm/test/CodeGen/X86/ins_subreg_coalesce-3.ll
@@ -22,41 +22,45 @@ define void @FontChange(i1 %foo) nounwind {
 ; CHECK-LABEL: FontChange:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    je .LBB0_10
+; CHECK-NEXT:    je .LBB0_12
+; CHECK-NEXT:  # %bb.1: # %bb298
+; CHECK-NEXT:    je .LBB0_3
+; CHECK-NEXT:  # %bb.2: # %bb304
+; CHECK-NEXT:    je .LBB0_4
 ; CHECK-NEXT:    .p2align 4
-; CHECK-NEXT:  .LBB0_1: # %bb366
+; CHECK-NEXT:  .LBB0_3: # %bb366
 ; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    jne .LBB0_1
-; CHECK-NEXT:  # %bb.2: # %bb428
+; CHECK-NEXT:    jne .LBB0_3
+; CHECK-NEXT:  .LBB0_4: # %bb428
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    je .LBB0_10
-; CHECK-NEXT:  # %bb.3:
+; CHECK-NEXT:    je .LBB0_12
+; CHECK-NEXT:  # %bb.5:
 ; CHECK-NEXT:    cmpb $0, 0
 ; CHECK-NEXT:    .p2align 4
-; CHECK-NEXT:  .LBB0_4: # %bb650
+; CHECK-NEXT:  .LBB0_6: # %bb650
 ; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT:    je .LBB0_4
-; CHECK-NEXT:  # %bb.5: # %bb662
+; CHECK-NEXT:    je .LBB0_6
+; CHECK-NEXT:  # %bb.7: # %bb662
 ; CHECK-NEXT:    movl 0, %eax
 ; CHECK-NEXT:    movl %eax, %ecx
 ; CHECK-NEXT:    andl $57344, %ecx # imm = 0xE000
 ; CHECK-NEXT:    cmpl $8192, %ecx # imm = 0x2000
-; CHECK-NEXT:    jne .LBB0_10
-; CHECK-NEXT:  # %bb.6: # %bb4884
+; CHECK-NEXT:    jne .LBB0_12
+; CHECK-NEXT:  # %bb.8: # %bb4884
 ; CHECK-NEXT:    andl $7168, %eax # imm = 0x1C00
 ; CHECK-NEXT:    cmpl $1024, %eax # imm = 0x400
-; CHECK-NEXT:    jne .LBB0_10
-; CHECK-NEXT:  # %bb.7: # %bb4932
+; CHECK-NEXT:    jne .LBB0_12
+; CHECK-NEXT:  # %bb.9: # %bb4932
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    jne .LBB0_10
-; CHECK-NEXT:  # %bb.8: # %bb4940
+; CHECK-NEXT:    jne .LBB0_12
+; CHECK-NEXT:  # %bb.10: # %bb4940
 ; CHECK-NEXT:    movl 0, %eax
 ; CHECK-NEXT:    cmpl $160, %eax
-; CHECK-NEXT:    je .LBB0_10
-; CHECK-NEXT:  # %bb.9: # %bb4940
+; CHECK-NEXT:    je .LBB0_12
+; CHECK-NEXT:  # %bb.11: # %bb4940
 ; CHECK-NEXT:    cmpl $159, %eax
-; CHECK-NEXT:  .LBB0_10: # %bb4897
+; CHECK-NEXT:  .LBB0_12: # %bb4897
 ; CHECK-NEXT:    retq
 entry:
 	br i1 %foo, label %bb298, label %bb49
diff --git a/llvm/test/CodeGen/X86/pr38795.ll b/llvm/test/CodeGen/X86/pr38795.ll
index c3c96e8228797..6a0c13526ac18 100644
--- a/llvm/test/CodeGen/X86/pr38795.ll
+++ b/llvm/test/CodeGen/X86/pr38795.ll
@@ -260,7 +260,6 @@ define void @verifier_error_reduced_issue38788(i1 %cmp11) {
 ; CHECK-NEXT:    pushl %ebx
 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
 ; CHECK-NEXT:    .cfi_offset %ebx, -8
-; CHECK-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
 ; CHECK-NEXT:    xorl %ecx, %ecx
 ; CHECK-NEXT:    xorl %ebx, %ebx
 ; CHECK-NEXT:    jmp .LBB1_1
@@ -272,10 +271,9 @@ define void @verifier_error_reduced_issue38788(i1 %cmp11) {
 ; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1
 ; CHECK-NEXT:    movl %eax, %ecx
 ; CHECK-NEXT:    movl %edx, %ebx
-; CHECK-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
 ; CHECK-NEXT:  .LBB1_1: # %for.cond
 ; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT:    testb $1, %al
+; CHECK-NEXT:    testb $1, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    je .LBB1_3
 ; CHECK-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1
 ; CHECK-NEXT:    xorl %eax, %eax
@@ -283,12 +281,11 @@ define void @verifier_error_reduced_issue38788(i1 %cmp11) {
 ; CHECK-NEXT:    .p2align 4
 ; CHECK-NEXT:  .LBB1_3: # %if.end
 ; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1
-; CHECK-NEXT:    testb $1, %al
 ; CHECK-NEXT:    je .LBB1_4
 ; CHECK-NEXT:  # %bb.9: # %if.then13
 ; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1
 ; CHECK-NEXT:    xorl %edx, %edx
-; CHECK-NEXT:    testb $1, %al
+; CHECK-NEXT:    testb $1, {{[0-9]+}}(%esp)
 ; CHECK-NEXT:    movl %ebx, %eax
 ; CHECK-NEXT:    movl $0, %ebx
 ; CHECK-NEXT:    jne .LBB1_8

@github-actions
Copy link

⚠️ C/C++ code formatter, clang-format found issues in your code. ⚠️

You can test this locally with the following command:
git-clang-format --diff HEAD~1 HEAD --extensions cpp -- llvm/lib/Target/X86/X86InstrInfo.cpp
View the diff from clang-format here.
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp
index 76c92f4ff..6e7bf804a 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.cpp
+++ b/llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -4945,10 +4945,10 @@ bool X86InstrInfo::isRedundantFlagInstr(const MachineInstr &FlagI,
   case X86::TEST32ri:
   case X86::TEST16ri:
   case X86::TEST8ri:
-  CASE_ND(SUB64ri32)
-  CASE_ND(SUB32ri)
-  CASE_ND(SUB16ri)
-  CASE_ND(SUB8ri)
+    CASE_ND(SUB64ri32)
+    CASE_ND(SUB32ri)
+    CASE_ND(SUB16ri)
+    CASE_ND(SUB8ri)
   case X86::TEST64rr:
   case X86::TEST32rr:
   case X86::TEST16rr:

; CHECK-NEXT: # %bb.1: # %bb298
; CHECK-NEXT: je .LBB0_3
; CHECK-NEXT: # %bb.2: # %bb304
; CHECK-NEXT: je .LBB0_4
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

regression?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I didn't notice this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a side effect due to longer live range of EFLAGS. MIR before Control Flow Optimizer:
image
MIR after Control Flow Optimizer:
image
LHS is generated with this patch.

I think it's not specific to TEST*ri instructions. And the IR is verbose in branching the same condition. It should not occur in real workload: https://godbolt.org/z/nrKajM3Mc

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok - that makes sense - cheers

@phoebewang phoebewang merged commit 9c9e56b into llvm:main Aug 28, 2025
10 of 11 checks passed
@phoebewang phoebewang deleted the APX branch August 28, 2025 00:47
@zeroomega
Copy link
Contributor

We are seeing a build failure on our stage2 builders after this patch landed. We conducted a bisecting and confirmed that this patch caused the issue.

It looks like this patch caused a miscompile and in the stage2 build, the tablegen generated header no longer satisfied the UTF-8 format and triggering parsing error from the clang. See the detailed error message:

FAILED: lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMInstructionSelector.cpp.o 
/b/s/w/ir/x/w/llvm_build/./bin/clang++ --sysroot=/b/s/w/ir/x/w/cipd/linux -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM -I/b/s/w/ir/x/w/llvm-llvm-project/llvm/lib/Target/ARM -I/b/s/w/ir/x/w/cipd/model/tensorflow/include -I/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include -I/b/s/w/ir/x/w/llvm-llvm-project/llvm/include -isystem /b/s/w/ir/x/w/install-zlib-x86_64-unknown-linux-gnu/include -isystem /b/s/w/ir/x/w/install-zstd-x86_64-unknown-linux-gnu/include -stdlib=libc++ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -ffat-lto-objects -ffile-prefix-map=/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins=../../../../llvm-llvm-project -ffile-prefix-map=/b/s/w/ir/x/w/llvm-llvm-project/= -no-canonical-prefixes -O3 -DNDEBUG -std=c++17 -fvisibility=default  -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -MD -MT lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMInstructionSelector.cpp.o -MF lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMInstructionSelector.cpp.o.d -o lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMInstructionSelector.cpp.o -c /b/s/w/ir/x/w/llvm-llvm-project/llvm/lib/Target/ARM/ARMInstructionSelector.cpp
In file included from /b/s/w/ir/x/w/llvm-llvm-project/llvm/lib/Target/ARM/ARMInstructionSelector.cpp:170:
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4013:23: error: use of undeclared identifier 'GIR_AddTempRegisterCIT_DE'; did you mean 'GIR_AddTempRegister'?
 4013 |      /*  10389 */     GIR_AddTempRegisterCIT_DE, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                       GIR_AddTempRegister
/b/s/w/ir/x/w/llvm-llvm-project/llvm/include/llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h:450:3: note: 'GIR_AddTempRegister' declared here
  450 |   GIR_AddTempRegister,
      |   ^
In file included from /b/s/w/ir/x/w/llvm-llvm-project/llvm/lib/Target/ARM/ARMInstructionSelector.cpp:170:
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:42: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                          ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:23: error: use of undeclared identifier 'GIR_AddSimpleTempRe'; did you mean 'GIR_AddSimpleTempRegister'?
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                       ^~~~~~~~~~~~~~~~~~~
      |                       GIR_AddSimpleTempRegister
/b/s/w/ir/x/w/llvm-llvm-project/llvm/include/llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h:456:3: note: 'GIR_AddSimpleTempRegister' declared here
  456 |   GIR_AddSimpleTempRegister,
      |   ^
In file included from /b/s/w/ir/x/w/llvm-llvm-project/llvm/lib/Target/ARM/ARMInstructionSelector.cpp:170:
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:43: error: expected '}'
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                  ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:927:44: note: to match this '{'
  927 |   constexpr static uint8_t MatchTable0[] = {
      |                                            ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:48: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:49: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:50: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:52: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:53: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:54: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:55: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:56: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                          ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:57: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:58: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                  ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:59: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:60: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:61: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:62: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:69: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                            ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:82: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:87: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:88: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:89: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:90: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:92: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:93: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:94: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:95: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:96: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                       ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:97: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:98: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                               ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:99: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:100: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:101: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:102: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:104: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                                    ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:105: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                                            ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:106: error: source file is not valid UTF-8
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                                                ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:109: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:110: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4021:112: warning: null character ignored [-Wnull-character]
 4021 |      /*  10418 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                                                                                                       ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:42: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                          ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:48: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:49: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:50: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:52: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:53: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:54: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:55: error: source file is not valid UTF-8
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:56: error: source file is not valid UTF-8
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                          ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:57: error: source file is not valid UTF-8
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:58: error: source file is not valid UTF-8
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                  ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:59: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:60: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:61: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                      ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:62: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                              ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:69: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                            ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:82: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:87: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:88: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:89: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:90: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:92: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:93: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:94: warning: null character ignored [-Wnull-character]
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                           ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:95: error: source file is not valid UTF-8
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                   ^
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/lib/Target/ARM/ARMGenGlobalISel.inc:4697:96: error: source file is not valid UTF-8
 4697 |      /*  12431 */     GIR_AddSimpleTempRe<U+0000>iste<U+0001><U+0000><U+0000><U+0000><U+0002><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>InsnID<U+0000>SimpleTempRe<U+0000>ist<U+0006><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000><U+0000><U+0000><FF><FF><FF><FF><U+0000><U+0000><U+0000><U+0000>0<U+0000><FF><FF>ID<U+0000><U+0000>0<U+0000>dRegisterRe, /*InsnID*/0, /*TempRegID*/0,
      |                                                                                                                                                                                                                                                                                       ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
48 warnings and 20 errors generated.

Failed build task: https://ci.chromium.org/ui/p/fuchsia/builders/prod/clang-linux-x64/b8705318044182027361/overview
The same file failed to build on mac-x64 stage2 as well. Could you take a look please? If it takes a long time to fix, could you revert the change please?

@nathanchance
Copy link
Member

I also bisected strange behavior to this change, namely an ld.lld test now failing that did not at the parent commit.

# bad: [b34258a540d6d88d99269e870bc0e086762b7698] [X86] Add -fexperimental-new-constant-interpreter test coverage to the AVX1/F16C/XOP constexpr test files (#155865)
# good: [5d111a20c566d16f80faaa8eed1a382aacd045de] [DAGCombiner] Avoid double deletion when replacing multiple frozen/unfrozen uses (#155427)
git bisect start 'b34258a540d6d88d99269e870bc0e086762b7698' '5d111a20c566d16f80faaa8eed1a382aacd045de'
# good: [658a931c5bf3968daec1f020c3a403b1019dabd9] [CodeGen][RISCV] Add support of RISCV nontemporal to vector predication instructions. (#153033)
git bisect good 658a931c5bf3968daec1f020c3a403b1019dabd9
# bad: [7db1b2ad1e30a614677e6fa7195a127d7b04a0e8] [lldb][test] Run ranges::ref_vew test only for libc++ (#155813)
git bisect bad 7db1b2ad1e30a614677e6fa7195a127d7b04a0e8
# bad: [5a9f1039c7732920dd1f4374074fdf09b58184ea] [clang] Create PointerToBoolean casts for C casts (#155368)
git bisect bad 5a9f1039c7732920dd1f4374074fdf09b58184ea
# bad: [c2be0351a725c95e3841a8d59ee432f5b205763f] [LLDB] Omit loading local symbols in LLDB symbol table (#154809)
git bisect bad c2be0351a725c95e3841a8d59ee432f5b205763f
# good: [cb0ce1e4d1a37468d261e1c0a4b32f40b5ae5c20] [CI] Bump Linux Contaienr LLVM to 21.1.0 (#155658)
git bisect good cb0ce1e4d1a37468d261e1c0a4b32f40b5ae5c20
# good: [238fe4e908b9d6520fd719b076e88046cc6d5e17] [MLIR] Refix pr154556 (#155726)
git bisect good 238fe4e908b9d6520fd719b076e88046cc6d5e17
# good: [ebb305e3c789ba29d6711f3e78fe7324c257c7cc] [CI][NFC] Format files with Black
git bisect good ebb305e3c789ba29d6711f3e78fe7324c257c7cc
# bad: [9c9e56b81cdfd42ddb0de4f5efb3bf787978894e] [X86][APX] Remove redundant TEST*ri instructions (#155586)
git bisect bad 9c9e56b81cdfd42ddb0de4f5efb3bf787978894e
# good: [7f4d2c7e908373531a72729c12acf66077d5477f] gn build: Port f1ee0473209e
git bisect good 7f4d2c7e908373531a72729c12acf66077d5477f
# first bad commit: [9c9e56b81cdfd42ddb0de4f5efb3bf787978894e] [X86][APX] Remove redundant TEST*ri instructions (#155586)
$ cmake \
-B build/bootstrap \
-G Ninja \
-S llvm \
-Wno-dev \
--log-level=NOTICE \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DLLVM_BUILD_UTILS=OFF \
-DLLVM_DISTRIBUTION_COMPONENTS='llvm-ar;llvm-nm;llvm-objcopy;llvm-objdump;llvm-ranlib;llvm-readelf;llvm-strip;clang;clang-resource-headers;lld' \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_BACKTRACES=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_PROJECTS='clang;lld' \
-DLLVM_ENABLE_WARNINGS=OFF \
-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR= \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_LINK_LLVM_DYLIB=OFF \
-DLLVM_TARGETS_TO_BUILD=host \
-DLLVM_USE_LINKER=lld
-- Configuring done (8.5s)
-- Generating done (1.1s)
-- Build files have been written to: .../build/bootstrap

$ ninja -C build/bootstrap distribution
ninja: Entering directory `build/bootstrap'
[3139/3139] Generating ../../bin/llvm-readelf

$ cmake \
-B build/final \
-G Ninja \
-S llvm \
-Wno-dev \
--log-level=NOTICE \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCLANG_TABLEGEN=$PWD/build/bootstrap/bin/clang-tblgen \
-DCMAKE_AR=$PWD/build/bootstrap/bin/llvm-ar \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=$PWD/build/bootstrap/bin/clang++ \
-DCMAKE_C_COMPILER=$PWD/build/bootstrap/bin/clang \
-DCMAKE_RANLIB=$PWD/build/bootstrap/bin/llvm-ranlib \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_PROJECTS='clang;lld' \
-DLLVM_ENABLE_WARNINGS=OFF \
-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR= \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_LINK_LLVM_DYLIB=OFF \
-DLLVM_TABLEGEN=$PWD/build/bootstrap/bin/llvm-tblgen \
-DLLVM_TARGETS_TO_BUILD='AArch64;ARM;BPF;Hexagon;Mips;PowerPC;RISCV;Sparc;SystemZ;X86;LoongArch' \
-DLLVM_USE_LINKER=$PWD/build/bootstrap/bin/ld.lld
-- Configuring done (10.5s)
-- Generating done (2.6s)
-- Build files have been written to: .../build/final

$ ninja -C build/final check-lld
ninja: Entering directory `build/final'
[2764/2765] Running lld test suite
llvm-lit: .../llvm/utils/lit/lit/llvm/config.py:527: note: using ld.lld: .../build/final/bin/ld.lld
llvm-lit: .../llvm/utils/lit/lit/llvm/config.py:527: note: using lld-link: .../build/final/bin/lld-link
llvm-lit: .../llvm/utils/lit/lit/llvm/config.py:527: note: using ld64.lld: .../build/final/bin/ld64.lld
llvm-lit: .../llvm/utils/lit/lit/llvm/config.py:527: note: using wasm-ld: .../build/final/bin/wasm-ld
FAIL: lld :: COFF/unwind.test (497 of 3134)
******************** TEST 'lld :: COFF/unwind.test' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
.../build/final/bin/yaml2obj .../lld/test/COFF/unwind.test -o .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.obj # RUN: at line 1
+ .../build/final/bin/yaml2obj .../lld/test/COFF/unwind.test -o .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.obj
.../build/final/bin/lld-link /out:.../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.exe /entry:main .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.obj # RUN: at line 3
+ .../build/final/bin/lld-link /out:.../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.exe /entry:main .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.obj
.../build/final/bin/llvm-readobj --file-headers .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.exe | .../build/final/bin/FileCheck -check-prefix=HEADER .../lld/test/COFF/unwind.test # RUN: at line 4
+ .../build/final/bin/llvm-readobj --file-headers .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.exe
+ .../build/final/bin/FileCheck -check-prefix=HEADER .../lld/test/COFF/unwind.test
.../build/final/bin/llvm-objdump --unwind-info .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.exe | .../build/final/bin/FileCheck --check-prefix=UNWIND .../lld/test/COFF/unwind.test # RUN: at line 5
+ .../build/final/bin/llvm-objdump --unwind-info .../build/final/tools/lld/test/COFF/Output/unwind.test.tmp.exe
+ .../build/final/bin/FileCheck --check-prefix=UNWIND .../lld/test/COFF/unwind.test
.../lld/test/COFF/unwind.test:43:11: error: UNWIND: expected string not found in input
# UNWIND: Flags: 4 UNW_ChainInfo
          ^
<stdin>:27:12: note: scanning from here
 Version: 1
           ^
<stdin>:28:23: note: possible intended match here
 Flags: 4 UNW_ExceptionHandler UNW_ChainInfo
                      ^

Input file: <stdin>
Check file: .../lld/test/COFF/unwind.test

-dump-input=help explains the following input dump.

Input was:
<<<<<<
            .
            .
            .
           22:
           23: Function Table:
           24:  Start Address: 0x1012
           25:  End Address: 0x1012
           26:  Unwind Info Address: 0x2020
           27:  Version: 1
check:43'0                X error: no match found
           28:  Flags: 4 UNW_ExceptionHandler UNW_ChainInfo
check:43'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:43'1                           ?                       possible intended match
           29:  Size of prolog: 0
check:43'0     ~~~~~~~~~~~~~~~~~~~
           30:  Number of Codes: 0
check:43'0     ~~~~~~~~~~~~~~~~~~~~
           31:  No frame pointer used
check:43'0     ~~~~~~~~~~~~~~~~~~~~~~~
           32:
check:43'0     ~
           33: Function Table:
check:43'0     ~~~~~~~~~~~~~~~~
            .
            .
            .
>>>>>>

--

********************
********************
Failed Tests (1):
  lld :: COFF/unwind.test


Testing Time: 6.38s

Total Discovered Tests: 3134
  Unsupported      :  255 (8.14%)
  Passed           : 2877 (91.80%)
  Expectedly Failed:    1 (0.03%)
  Failed           :    1 (0.03%)
FAILED: tools/lld/test/CMakeFiles/check-lld .../build/final/tools/lld/test/CMakeFiles/check-lld
cd .../build/final/tools/lld/test && /usr/bin/python3.13 .../build/final/./bin/llvm-lit -sv .../build/final/tools/lld/test
ninja: build stopped: subcommand failed.

vitalybuka added a commit that referenced this pull request Aug 29, 2025
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Aug 29, 2025
@mstorsjo
Copy link
Member

I also ran into this issue. The miscompilations can be reproduced with https://martin.st/temp/apv_entropy-preproc.c, compiled with clang -target x86_64-linux-gnu apv_entropy-preproc.c -c -o out.o -O2. The diff in output looks like this:

--- good.s      2025-08-29 09:34:24.970634708 +0300
+++ bad.s       2025-08-29 09:34:16.822610156 +0300
@@ -1228,7 +1228,6 @@
        jmp     .LBB1_19
 .LBB1_34:                               # %if.else157
        movl    %r11d, %r9d
-       testb   $1, %cl
        jne     .LBB1_69
        jmp     .LBB1_55
 .LBB1_35:                               # %if.end104

It's possible to reproduce the failures at runtime, by cloning http://github.com/ffmpeg/ffmpeg, configuring it with ./configure --cc=clang and building make -j$(nproc) fate-apv-entropy, on x86_64 linux. The object file impacted by the miscompilation is libavcodec/apv_entropy.o.

@phoebewang
Copy link
Contributor Author

Thanks all! I have root caused the problem. Created #156002 for reland.

@phoebewang
Copy link
Contributor Author

I also ran into this issue. The miscompilations can be reproduced with https://martin.st/temp/apv_entropy-preproc.c, compiled with clang -target x86_64-linux-gnu apv_entropy-preproc.c -c -o out.o -O2. The diff in output looks like this:

--- good.s      2025-08-29 09:34:24.970634708 +0300
+++ bad.s       2025-08-29 09:34:16.822610156 +0300
@@ -1228,7 +1228,6 @@
        jmp     .LBB1_19
 .LBB1_34:                               # %if.else157
        movl    %r11d, %r9d
-       testb   $1, %cl
        jne     .LBB1_69
        jmp     .LBB1_55
 .LBB1_35:                               # %if.end104

It's possible to reproduce the failures at runtime, by cloning http://github.com/ffmpeg/ffmpeg, configuring it with ./configure --cc=clang and building make -j$(nproc) fate-apv-entropy, on x86_64 linux. The object file impacted by the miscompilation is libavcodec/apv_entropy.o.

Great! It's very helpful!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants