[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