@@ -1538,3 +1538,28 @@ define i1 @or_trunc_i1_wrong_operands(i64 %a1, i64 %a2, i64 %a3) {
1538
1538
%or = or i1 %cmp , %trunc
1539
1539
ret i1 %or
1540
1540
}
1541
+
1542
+ define i1 @jv_identical (i64 %arg1 , i64 %arg2 ) {
1543
+ ; CHECK-LABEL: @jv_identical(
1544
+ ; CHECK-NEXT: [[ARG1_TRUNC:%.*]] = trunc i64 [[ARG1:%.*]] to i8
1545
+ ; CHECK-NEXT: [[ARG2_TRUNC:%.*]] = trunc i64 [[ARG2:%.*]] to i8
1546
+ ; CHECK-NEXT: [[EQ1:%.*]] = icmp eq i8 [[ARG1_TRUNC]], [[ARG2_TRUNC]]
1547
+ ; CHECK-NEXT: [[DOTUNSHIFTED:%.*]] = xor i64 [[ARG2]], [[ARG1]]
1548
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ult i64 [[DOTUNSHIFTED]], 65536
1549
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[EQ1]], [[TMP1]]
1550
+ ; CHECK-NEXT: ret i1 [[AND2]]
1551
+ ;
1552
+ %arg1.trunc = trunc i64 %arg1 to i8
1553
+ %arg1.shift = lshr i64 %arg1 , 16
1554
+ %arg1.shift.trunc = trunc i64 %arg1.shift to i16
1555
+ %arg2.trunc = trunc i64 %arg2 to i8
1556
+ %arg2.shift = lshr i64 %arg2 , 16
1557
+ %arg2.shift.trunc = trunc i64 %arg2.shift to i16
1558
+ %eq1 = icmp eq i8 %arg1.trunc , %arg2.trunc
1559
+ %eq2 = icmp eq i16 %arg1.shift.trunc , %arg2.shift.trunc
1560
+ %and1 = and i1 %eq1 , %eq2
1561
+ %xor = xor i64 %arg2 , %arg1
1562
+ %cmp = icmp ult i64 %xor , 4294967296
1563
+ %and2 = and i1 %cmp , %and1
1564
+ ret i1 %and2
1565
+ }
0 commit comments