Skip to content

Commit 4cacd22

Browse files
committed
[InstCombine] Add test for is_alpha check with logical or and nsw (NFC)
The combination of logical or and nsw prevents the fold from happening.
1 parent 5fa1693 commit 4cacd22

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

llvm/test/Transforms/InstCombine/and-or-icmps.ll

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,3 +1243,40 @@ define i1 @and_two_ranges_to_mask_and_range_no_add_on_one_range(i16 %x) {
12431243
%and = and i1 %cmp1, %or
12441244
ret i1 %and
12451245
}
1246+
1247+
; This tests an "is_alpha" style check for the combination of logical or
1248+
; and nowrap flags on the adds. In this case, the logical or will not be
1249+
; converted into a bitwise or.
1250+
define i1 @is_ascii_alphabetic(i32 %char) {
1251+
; CHECK-LABEL: @is_ascii_alphabetic(
1252+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i32 [[CHAR:%.*]], -65
1253+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[ADD1]], 26
1254+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i32 [[CHAR]], -97
1255+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i32 [[ADD2]], 26
1256+
; CHECK-NEXT: [[LOGICAL:%.*]] = select i1 [[CMP1]], i1 true, i1 [[CMP2]]
1257+
; CHECK-NEXT: ret i1 [[LOGICAL]]
1258+
;
1259+
%add1 = add nsw i32 %char, -65
1260+
%cmp1 = icmp ult i32 %add1, 26
1261+
%add2 = add nsw i32 %char, -97
1262+
%cmp2 = icmp ult i32 %add2, 26
1263+
%logical = select i1 %cmp1, i1 true, i1 %cmp2
1264+
ret i1 %logical
1265+
}
1266+
1267+
define i1 @is_ascii_alphabetic_inverted(i32 %char) {
1268+
; CHECK-LABEL: @is_ascii_alphabetic_inverted(
1269+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i32 [[CHAR:%.*]], -91
1270+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[ADD1]], -26
1271+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i32 [[CHAR]], -123
1272+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i32 [[ADD2]], -26
1273+
; CHECK-NEXT: [[LOGICAL:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 false
1274+
; CHECK-NEXT: ret i1 [[LOGICAL]]
1275+
;
1276+
%add1 = add nsw i32 %char, -91
1277+
%cmp1 = icmp ult i32 %add1, -26
1278+
%add2 = add nsw i32 %char, -123
1279+
%cmp2 = icmp ult i32 %add2, -26
1280+
%logical = select i1 %cmp1, i1 %cmp2, i1 false
1281+
ret i1 %logical
1282+
}

0 commit comments

Comments
 (0)