[llvm] 5e029f0 - [X86] xaluo.ll - add test coverage showing the failure to recognise when saddo/ssubo will not overflow

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Sat May 6 05:33:24 PDT 2023


Author: Simon Pilgrim
Date: 2023-05-06T13:33:14+01:00
New Revision: 5e029f0142f24c96c4dc4b87ebea0004c75654ef

URL: https://github.com/llvm/llvm-project/commit/5e029f0142f24c96c4dc4b87ebea0004c75654ef
DIFF: https://github.com/llvm/llvm-project/commit/5e029f0142f24c96c4dc4b87ebea0004c75654ef.diff

LOG: [X86] xaluo.ll - add test coverage showing the failure to recognise when saddo/ssubo will not overflow

sadd/ssub with both operands with more than one sign bit will not overflow

Alive2: https://alive2.llvm.org/ce/z/a8HmNp

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/xaluo.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/xaluo.ll b/llvm/test/CodeGen/X86/xaluo.ll
index 261e2db1a493..55cdc4075483 100644
--- a/llvm/test/CodeGen/X86/xaluo.ll
+++ b/llvm/test/CodeGen/X86/xaluo.ll
@@ -964,6 +964,37 @@ continue:
   ret i1 true
 }
 
+; FIXME: Failure to recognise add can't overflow
+define {i64, i1} @saddoovf(i64 %a, i64 %b) {
+; CHECK-LABEL: saddoovf:
+; CHECK:       ## %bb.0:
+; CHECK-NEXT:    movq %rsi, %rax
+; CHECK-NEXT:    sarq $17, %rdi
+; CHECK-NEXT:    shrq $31, %rax
+; CHECK-NEXT:    addq %rdi, %rax
+; CHECK-NEXT:    seto %dl
+; CHECK-NEXT:    retq
+  %1 = ashr i64 %a, 17
+  %2 = lshr i64 %b, 31
+  %t = call {i64, i1} @llvm.sadd.with.overflow.i64(i64 %1, i64 %2)
+  ret {i64, i1} %t
+}
+
+; FIXME: Failure to recognise sub can't overflow
+define {i64, i1} @ssuboovf(i64 %a, i64 %b) {
+; CHECK-LABEL: ssuboovf:
+; CHECK:       ## %bb.0:
+; CHECK-NEXT:    movzwl %di, %eax
+; CHECK-NEXT:    shrq $22, %rsi
+; CHECK-NEXT:    subq %rsi, %rax
+; CHECK-NEXT:    seto %dl
+; CHECK-NEXT:    retq
+  %1 = and i64 %a, 65535
+  %2 = lshr i64 %b, 22
+  %t = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %1, i64 %2)
+  ret {i64, i1} %t
+}
+
 define {i64, i1} @uaddoovf(i64 %a, i64 %b) {
 ; CHECK-LABEL: uaddoovf:
 ; CHECK:       ## %bb.0:


        


More information about the llvm-commits mailing list