[llvm] [ConstraintElimination] Extend unsigned-to-signed fact transfer (PR #66173)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 19 03:07:29 PDT 2023


================
@@ -228,3 +228,86 @@ then:
 else:
   ret i1 0
 }
+
+define i1 @ule_signed_pos_constant_1(i8 %a, i8 %b) {
+; CHECK-LABEL: @ule_signed_pos_constant_1(
+; CHECK-NEXT:    [[B_NON_NEG:%.*]] = icmp sge i8 [[B:%.*]], 0
+; CHECK-NEXT:    call void @llvm.assume(i1 [[B_NON_NEG]])
+; CHECK-NEXT:    [[A_ULE_B:%.*]] = icmp ule i8 [[A:%.*]], [[B]]
+; CHECK-NEXT:    call void @llvm.assume(i1 [[A_ULE_B]])
+; CHECK-NEXT:    [[RESULT_XOR:%.*]] = xor i1 true, true
+; CHECK-NEXT:    ret i1 [[RESULT_XOR]]
+;
+  %b_non_neg = icmp sge i8 %b, 0
+  call void @llvm.assume(i1 %b_non_neg)
+  %a_ule_b = icmp ule i8 %a, %b
+  call void @llvm.assume(i1 %a_ule_b)
+
+  %sle_test = icmp sle i8 %a, %b
+  %result_xor = xor i1 %sle_test, 1
----------------
nikic wrote:

```suggestion
  %sle_test = icmp sle i8 %a, %b
  %slt_test = icmp sle i8 %a, %b
  %result_xor = xor i1 %sle_test, %slt_test
```
Let's check both here.

https://github.com/llvm/llvm-project/pull/66173


More information about the llvm-commits mailing list