[llvm] 2612dc9 - [X86][APX] Add pattern for zext(X86setcc ..) -> SETZUCCr (#170806)

via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 5 02:06:11 PST 2025


Author: Phoebe Wang
Date: 2025-12-05T18:06:07+08:00
New Revision: 2612dc9b5faeaeb180c5a5e0c282642faef8891b

URL: https://github.com/llvm/llvm-project/commit/2612dc9b5faeaeb180c5a5e0c282642faef8891b
DIFF: https://github.com/llvm/llvm-project/commit/2612dc9b5faeaeb180c5a5e0c282642faef8891b.diff

LOG: [X86][APX] Add pattern for zext(X86setcc ..) -> SETZUCCr (#170806)

Added: 
    

Modified: 
    llvm/lib/Target/X86/X86InstrCMovSetCC.td
    llvm/test/CodeGen/X86/apx/setzucc.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86InstrCMovSetCC.td b/llvm/lib/Target/X86/X86InstrCMovSetCC.td
index 7d5d7cf4a83ab..b1599f2f37045 100644
--- a/llvm/lib/Target/X86/X86InstrCMovSetCC.td
+++ b/llvm/lib/Target/X86/X86InstrCMovSetCC.td
@@ -150,7 +150,7 @@ let Uses = [EFLAGS], isCodeGenOnly = 1, ForceDisassemble = 1 in {
 
 // SetZUCC and promoted SetCC instructions.
 let Uses = [EFLAGS], isCodeGenOnly = 1, ForceDisassemble = 1,
-  hasSideEffects = 0, Predicates = [In64BitMode], Predicates = [HasNDD] in {
+  hasSideEffects = 0, Predicates = [In64BitMode] in {
   def SETZUCCr : I<0x40, MRMXrCC, (outs GR8:$dst), (ins ccode:$cond),
                 "setzu${cond}\t$dst", []>,
                 XD, ZU, NoCD8, Sched<[WriteSETCC]>;
@@ -167,6 +167,10 @@ let Uses = [EFLAGS], isCodeGenOnly = 1, ForceDisassemble = 1,
   }
 }
 
+let Predicates = [HasZU] in
+  def : Pat<(i32 (zext (X86setcc timm:$cond, EFLAGS))),
+            (INSERT_SUBREG (i32 (IMPLICIT_DEF)), (SETZUCCr ccode:$cond), sub_8bit)>;
+
 // SALC is an undocumented instruction. Information for this instruction can be found
 // here http://www.rcollins.org/secrets/opcodes/SALC.html
 // Set AL if carry. 

diff  --git a/llvm/test/CodeGen/X86/apx/setzucc.ll b/llvm/test/CodeGen/X86/apx/setzucc.ll
index 6eb2d6966ecd8..d32ccf877137e 100644
--- a/llvm/test/CodeGen/X86/apx/setzucc.ll
+++ b/llvm/test/CodeGen/X86/apx/setzucc.ll
@@ -89,3 +89,15 @@ bb1:
 bb2:
   ret i32 0
 }
+
+define i32 @highmask_i32_mask32(i32 %val) {
+; CHECK-LABEL: highmask_i32_mask32:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    testl $-1048576, %edi # imm = 0xFFF00000
+; CHECK-NEXT:    setzune %al
+; CHECK-NEXT:    retq
+  %and = and i32 %val, -1048576
+  %cmp = icmp ne i32 %and, 0
+  %ret = zext i1 %cmp to i32
+  ret i32 %ret
+}


        


More information about the llvm-commits mailing list