[llvm] [LVI] Handle icmp of ashr. (PR #68010)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 19 09:12:09 PDT 2023
================
@@ -1240,6 +1240,110 @@ define <2 x i1> @non_const_range_minmax_vec(<2 x i8> %a, <2 x i8> %b) {
ret <2 x i1> %cmp1
}
+define void @ashr_sgt(i8 %x) {
+; CHECK-LABEL: @ashr_sgt(
+; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[S]], 0
+; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK: if:
+; CHECK-NEXT: call void @check1(i1 true)
+; CHECK-NEXT: [[C3:%.*]] = icmp ugt i8 [[X]], 4
+; CHECK-NEXT: call void @check1(i1 [[C3]])
+; CHECK-NEXT: ret void
+; CHECK: else:
+; CHECK-NEXT: ret void
+;
+ %s = ashr i8 %x, 2
+ %c = icmp sgt i8 %s, 0
+ br i1 %c, label %if, label %else
+if:
+ %c2 = icmp sgt i8 %x, 3
+ call void @check1(i1 %c2)
+ %c3 = icmp sgt i8 %x, 4
+ call void @check1(i1 %c3)
+ ret void
+else:
+ ret void
+}
+
+define void @ashr_sge(i8 %x) {
+; CHECK-LABEL: @ashr_sge(
+; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
+; CHECK-NEXT: [[C:%.*]] = icmp sge i8 [[S]], 0
+; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK: if:
+; CHECK-NEXT: call void @check1(i1 true)
+; CHECK-NEXT: [[C3:%.*]] = icmp uge i8 [[X]], 4
+; CHECK-NEXT: call void @check1(i1 [[C3]])
+; CHECK-NEXT: ret void
+; CHECK: else:
+; CHECK-NEXT: ret void
+;
+ %s = ashr i8 %x, 2
+ %c = icmp sge i8 %s, 0
+ br i1 %c, label %if, label %else
+if:
+ %c2 = icmp sge i8 %x, 3
+ call void @check1(i1 %c2)
+ %c3 = icmp sge i8 %x, 4
+ call void @check1(i1 %c3)
+ ret void
+else:
+ ret void
+}
+
+define void @ashr_slt(i8 %x) {
+; CHECK-LABEL: @ashr_slt(
+; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
+; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[S]], 0
+; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK: if:
+; CHECK-NEXT: call void @check1(i1 true)
+; CHECK-NEXT: [[C3:%.*]] = icmp slt i8 [[X]], 2
+; CHECK-NEXT: call void @check1(i1 [[C3]])
----------------
nikic wrote:
This isn't right. The boundary for slt is supposed to be 0, not 3: https://alive2.llvm.org/ce/z/j65pFo
https://github.com/llvm/llvm-project/pull/68010
More information about the llvm-commits
mailing list