[llvm] [DAG] SelectionDAG::canCreateUndefOrPoison - add ISD::SCMP/UCMP handling + tests (PR #154127)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 18 09:53:10 PDT 2025
================
@@ -924,6 +924,77 @@ define i32 @freeze_usubo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {
ret i32 %r
}
+
+define i32 @freeze_scmp(i32 %a0) nounwind {
+; X86-LABEL: freeze_scmp:
+; X86: # %bb.0:
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: cmpl $2, %eax
+; X86-NEXT: setl %al
+; X86-NEXT: setg %cl
+; X86-NEXT: subb %al, %cl
+; X86-NEXT: movsbl %cl, %eax
+; X86-NEXT: cmpl $2, %eax
+; X86-NEXT: setl %al
+; X86-NEXT: setg %cl
+; X86-NEXT: subb %al, %cl
+; X86-NEXT: movsbl %cl, %eax
+; X86-NEXT: retl
+;
+; X64-LABEL: freeze_scmp:
+; X64: # %bb.0:
+; X64-NEXT: cmpl $2, %edi
+; X64-NEXT: setl %al
+; X64-NEXT: setg %cl
+; X64-NEXT: subb %al, %cl
+; X64-NEXT: movsbl %cl, %eax
+; X64-NEXT: cmpl $2, %eax
+; X64-NEXT: setl %al
+; X64-NEXT: setg %cl
+; X64-NEXT: subb %al, %cl
+; X64-NEXT: movsbl %cl, %eax
+; X64-NEXT: retq
+ %x = call i32 @llvm.scmp.i32(i32 %a0, i32 2)
+ %y = freeze i32 %x
+ %z = call i32 @llvm.scmp.i32(i32 %y, i32 2)
----------------
Temperz87 wrote:
I think so? The local tests are passing and I don't see why it shouldn't be working
https://github.com/llvm/llvm-project/pull/154127
More information about the llvm-commits
mailing list