https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/108783
Backport 1c378d2b145578948942512f9d6985e37659d013 81279bf97f187eee0446af00d8ae9ec32a22e878 Requested by: @goldsteinn >From 4c558a8d535a48d0588671d1574bc5a70478adce Mon Sep 17 00:00:00 2001 From: Noah Goldstein <goldstein....@gmail.com> Date: Sun, 15 Sep 2024 09:00:28 -0700 Subject: [PATCH 1/2] [X86] Add test for issue 108722; NFC (cherry picked from commit 1c378d2b145578948942512f9d6985e37659d013) --- llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll b/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll index 67070b989786db..799b5417857575 100644 --- a/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll +++ b/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll @@ -994,6 +994,30 @@ define i1 @shr_to_rotate_eq_i32_s5(i32 %x) { ret i1 %r } +define i32 @issue108722(i32 %0) { +; CHECK-NOBMI-LABEL: issue108722: +; CHECK-NOBMI: # %bb.0: +; CHECK-NOBMI-NEXT: movzbl %dil, %ecx +; CHECK-NOBMI-NEXT: shrl $24, %edi +; CHECK-NOBMI-NEXT: xorl %eax, %eax +; CHECK-NOBMI-NEXT: cmpl %edi, %ecx +; CHECK-NOBMI-NEXT: sete %al +; CHECK-NOBMI-NEXT: retq +; +; CHECK-BMI2-LABEL: issue108722: +; CHECK-BMI2: # %bb.0: +; CHECK-BMI2-NEXT: rorxl $8, %edi, %ecx +; CHECK-BMI2-NEXT: xorl %eax, %eax +; CHECK-BMI2-NEXT: cmpl %edi, %ecx +; CHECK-BMI2-NEXT: sete %al +; CHECK-BMI2-NEXT: retq + %2 = tail call i32 @llvm.fshl.i32(i32 %0, i32 %0, i32 24) + %3 = icmp eq i32 %2, %0 + %4 = zext i1 %3 to i32 + ret i32 %4 +} + + ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: ; CHECK-AVX: {{.*}} ; CHECK-NOBMI-SSE2: {{.*}} >From 7aaa237104f50ba921d05a371be00636ed700e14 Mon Sep 17 00:00:00 2001 From: Noah Goldstein <goldstein....@gmail.com> Date: Sun, 15 Sep 2024 09:00:34 -0700 Subject: [PATCH 2/2] [X86] Fix missing check of rotate <-> shift equivilence (Issue 108722) Previous code was checking that rotate and shift where equivilent when transforming shift -> rotate but not the other way around. Closes #108767 (cherry picked from commit 81279bf97f187eee0446af00d8ae9ec32a22e878) --- llvm/lib/Target/X86/X86ISelLowering.cpp | 2 +- llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 5a9d679d7002cb..45989bcd07d37e 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -3415,7 +3415,7 @@ unsigned X86TargetLowering::preferedOpcodeForCmpEqPiecesOfOperand( // We prefer rotate for vectors of if we won't get a zext mask with SRL // (PreferRotate will be set in the latter case). - if (PreferRotate || VT.isVector()) + if (PreferRotate || !MayTransformRotate || VT.isVector()) return ShiftOpc; // Non-vector type and we have a zext mask with SRL. diff --git a/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll b/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll index 799b5417857575..227de9ad0ab690 100644 --- a/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll +++ b/llvm/test/CodeGen/X86/cmp-shiftX-maskX.ll @@ -997,8 +997,8 @@ define i1 @shr_to_rotate_eq_i32_s5(i32 %x) { define i32 @issue108722(i32 %0) { ; CHECK-NOBMI-LABEL: issue108722: ; CHECK-NOBMI: # %bb.0: -; CHECK-NOBMI-NEXT: movzbl %dil, %ecx -; CHECK-NOBMI-NEXT: shrl $24, %edi +; CHECK-NOBMI-NEXT: movl %edi, %ecx +; CHECK-NOBMI-NEXT: roll $24, %ecx ; CHECK-NOBMI-NEXT: xorl %eax, %eax ; CHECK-NOBMI-NEXT: cmpl %edi, %ecx ; CHECK-NOBMI-NEXT: sete %al _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits