[llvm] 67e6697 - [BranchFolding] Introduce tests for PR205135 (NFC) (#206684)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 30 02:08:56 PDT 2026


Author: Antonio Frighetto
Date: 2026-06-30T11:08:51+02:00
New Revision: 67e6697e50d4820987d3f880e92fbb9f29f0d7db

URL: https://github.com/llvm/llvm-project/commit/67e6697e50d4820987d3f880e92fbb9f29f0d7db
DIFF: https://github.com/llvm/llvm-project/commit/67e6697e50d4820987d3f880e92fbb9f29f0d7db.diff

LOG: [BranchFolding] Introduce tests for PR205135 (NFC) (#206684)

Added: 
    llvm/test/CodeGen/MIR/X86/branch-folder-drop-undef.mir
    llvm/test/CodeGen/X86/branch-folder-drop-undef-end-to-end.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/MIR/X86/branch-folder-drop-undef.mir b/llvm/test/CodeGen/MIR/X86/branch-folder-drop-undef.mir
new file mode 100644
index 0000000000000..d87a90f80d7d5
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/X86/branch-folder-drop-undef.mir
@@ -0,0 +1,103 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=branch-folder | FileCheck %s
+
+---
+name:            test_drop_undef_when_hoisting
+liveins:
+  - { reg: '$xmm0', virtual-reg: '' }
+  - { reg: '$edi', virtual-reg: '' }
+constants:
+  - id:              0
+    value:           '<16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>'
+  - id:              1
+    value:           '<8 x i16> splat (i16 255)'
+body:             |
+  ; CHECK-LABEL: name: test_drop_undef_when_hoisting
+  ; CHECK: bb.0.entry:
+  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
+  ; CHECK-NEXT:   liveins: $edi, $xmm0
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT:   renamable $xmm1 = MOVAPSrm $rip, 1, $noreg, %const.0, $noreg :: (load (s128) from constant-pool)
+  ; CHECK-NEXT:   renamable $xmm1 = PCMPGTBrr killed renamable $xmm1, killed renamable $xmm0
+  ; CHECK-NEXT:   renamable $xmm0 = V_SET0
+  ; CHECK-NEXT:   renamable $xmm2 = MOVAPSrm $rip, 1, $noreg, %const.1, $noreg :: (load (s128) from constant-pool)
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT: bb.1:
+  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)
+  ; CHECK-NEXT:   liveins: $edi, $xmm0, $xmm1, $xmm2
+  ; CHECK-NEXT: {{  $}}
+  ; FIXME: This is a miscompilation issue, should intersect flags when hoisting common code.
+  ; CHECK-NEXT:   renamable $xmm1 = PUNPCKLBWrr killed renamable $xmm1, undef renamable $xmm0
+  ; CHECK-NEXT:   TEST8ri renamable $dil, 1, implicit-def $eflags
+  ; CHECK-NEXT:   JCC_1 %bb.3, 5, implicit killed $eflags
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT: bb.2:
+  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
+  ; CHECK-NEXT:   liveins: $edi, $xmm0, $xmm1, $xmm2
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT:   renamable $xmm1 = PSHUFLWri killed renamable $xmm1, 1
+  ; CHECK-NEXT:   renamable $xmm1 = PACKUSWBrr killed renamable $xmm1, undef renamable $xmm0
+  ; CHECK-NEXT:   JMP_1 %bb.4
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT: bb.3:
+  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
+  ; CHECK-NEXT:   liveins: $edi, $xmm0, $xmm1, $xmm2
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT:   renamable $xmm1 = PMULLWrr killed renamable $xmm1, renamable $xmm1
+  ; CHECK-NEXT:   renamable $xmm1 = PANDrr killed renamable $xmm1, renamable $xmm2
+  ; CHECK-NEXT:   renamable $xmm1 = PACKUSWBrr killed renamable $xmm1, renamable $xmm1
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT: bb.4:
+  ; CHECK-NEXT:   successors: %bb.5(0x04000000), %bb.1(0x7c000000)
+  ; CHECK-NEXT:   liveins: $edi, $xmm0, $xmm1, $xmm2
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT:   TEST8ri renamable $dil, 1, implicit-def $eflags
+  ; CHECK-NEXT:   JCC_1 %bb.1, 4, implicit $eflags
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT: bb.5:
+  ; CHECK-NEXT:   RET 0
+  bb.0.entry:
+    successors: %bb.1(0x80000000)
+    liveins: $edi, $xmm0
+
+    renamable $xmm1 = MOVAPSrm $rip, 1, $noreg, %const.0, $noreg :: (load (s128) from constant-pool)
+    renamable $xmm1 = PCMPGTBrr killed renamable $xmm1, killed renamable $xmm0
+    renamable $xmm0 = V_SET0
+    renamable $xmm2 = MOVAPSrm $rip, 1, $noreg, %const.1, $noreg :: (load (s128) from constant-pool)
+
+  bb.1:
+    successors: %bb.3(0x40000000), %bb.2(0x40000000)
+    liveins: $edi, $xmm0, $xmm1, $xmm2
+
+    TEST8ri renamable $dil, 1, implicit-def $eflags
+    JCC_1 %bb.3, 5, implicit killed $eflags
+
+  bb.2:
+    successors: %bb.4(0x80000000)
+    liveins: $edi, $xmm0, $xmm1, $xmm2
+
+    renamable $xmm1 = PUNPCKLBWrr killed renamable $xmm1, renamable $xmm0
+    renamable $xmm1 = PSHUFLWri killed renamable $xmm1, 1
+    renamable $xmm1 = PACKUSWBrr killed renamable $xmm1, undef renamable $xmm0
+    JMP_1 %bb.4
+
+  bb.3:
+    successors: %bb.4(0x80000000)
+    liveins: $edi, $xmm0, $xmm1, $xmm2
+
+    renamable $xmm1 = PUNPCKLBWrr killed renamable $xmm1, undef renamable $xmm0
+    renamable $xmm1 = PMULLWrr killed renamable $xmm1, renamable $xmm1
+    renamable $xmm1 = PANDrr killed renamable $xmm1, renamable $xmm2
+    renamable $xmm1 = PACKUSWBrr killed renamable $xmm1, renamable $xmm1
+
+  bb.4:
+    successors: %bb.5(0x04000000), %bb.1(0x7c000000)
+    liveins: $edi, $xmm0, $xmm1, $xmm2
+
+    TEST8ri renamable $dil, 1, implicit-def $eflags
+    JCC_1 %bb.1, 4, implicit killed $eflags
+    JMP_1 %bb.5
+
+  bb.5:
+    RET 0
+...

diff  --git a/llvm/test/CodeGen/X86/branch-folder-drop-undef-end-to-end.ll b/llvm/test/CodeGen/X86/branch-folder-drop-undef-end-to-end.ll
new file mode 100644
index 0000000000000..03144940ba2a0
--- /dev/null
+++ b/llvm/test/CodeGen/X86/branch-folder-drop-undef-end-to-end.ll
@@ -0,0 +1,52 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=x86_64-- -O1 < %s | FileCheck %s
+
+define void @test_drop_undef_when_hoisting(<4 x i8> %v0, i1 %c) {
+; CHECK-LABEL: test_drop_undef_when_hoisting:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [1,1,1,1,u,u,u,u,u,u,u,u,u,u,u,u]
+; CHECK-NEXT:    pcmpgtb %xmm0, %xmm1
+; CHECK-NEXT:    pxor %xmm0, %xmm0
+; CHECK-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
+; CHECK-NEXT:    jmp .LBB0_1
+; CHECK-NEXT:    .p2align 4
+; CHECK-NEXT:  .LBB0_3: # %if.then
+; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
+; CHECK-NEXT:    pmullw %xmm1, %xmm1
+; CHECK-NEXT:    pand %xmm2, %xmm1
+; CHECK-NEXT:    packuswb %xmm1, %xmm1
+; CHECK-NEXT:    testb $1, %dil
+; CHECK-NEXT:    jne .LBB0_5
+; CHECK-NEXT:  .LBB0_1: # %loop
+; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
+; CHECK-NEXT:    testb $1, %dil
+; CHECK-NEXT:    jne .LBB0_3
+; CHECK-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=1
+; CHECK-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,0,0,4,5,6,7]
+; CHECK-NEXT:    packuswb %xmm1, %xmm1
+; CHECK-NEXT:    testb $1, %dil
+; CHECK-NEXT:    je .LBB0_1
+; CHECK-NEXT:  .LBB0_5: # %exit
+; CHECK-NEXT:    retq
+  entry:
+    %cmp = icmp slt <4 x i8> %v0, splat (i8 1)
+    %sext = sext <4 x i1> %cmp to <4 x i8>
+    br label %loop
+
+  loop:                                             ; preds = %if.end, %entry
+    %val = phi <4 x i8> [ %sext, %entry ], [ %val.next, %if.end ]
+    %shuffle = shufflevector <4 x i8> %val, <4 x i8> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
+    br i1 %c, label %if.then, label %if.end
+
+  if.then:                                          ; preds = %loop
+    %mul = mul <4 x i8> %val, %val
+    br label %if.end
+
+  if.end:                                           ; preds = %if.then, %loop
+    %val.next = phi <4 x i8> [ %mul, %if.then ], [ %shuffle, %loop ]
+    br i1 %c, label %exit, label %loop
+
+  exit:                                             ; preds = %if.end
+    ret void
+}


        


More information about the llvm-commits mailing list